diff options
1068 files changed, 25078 insertions, 17979 deletions
diff --git a/indra/llcommon/llapp.h b/indra/llcommon/llapp.h index 27a52cdd99..e5b8edf9c3 100644 --- a/indra/llcommon/llapp.h +++ b/indra/llcommon/llapp.h @@ -235,7 +235,7 @@ public: // Child process handling (Unix only for now) // // Set a callback to be run on exit of a child process - // WARNING! This callback is run from the signal handler due to the extreme crappiness of + // WARNING! This callback is run from the signal handler due to // Linux threading requiring waitpid() to be called from the thread that spawned the process. // At some point I will make this more behaved, but I'm not going to fix this right now - djs void setChildCallback(pid_t pid, LLAppChildCallback callback); diff --git a/indra/llcommon/llassettype.cpp b/indra/llcommon/llassettype.cpp index 6d5b12d840..1c664e093b 100644 --- a/indra/llcommon/llassettype.cpp +++ b/indra/llcommon/llassettype.cpp @@ -45,12 +45,16 @@ struct AssetEntry : public LLDictionaryEntry AssetEntry(const char *desc_name, const char *type_name, // 8 character limit! const char *human_name, // for decoding to human readable form; put any and as many printable characters you want in each one - bool can_link) // can you create a link to this type? + bool can_link, // can you create a link to this type? + bool can_fetch, // can you fetch this asset by ID? + bool can_know) // can you see this asset's ID? : LLDictionaryEntry(desc_name), mTypeName(type_name), mHumanName(human_name), - mCanLink(can_link) + mCanLink(can_link), + mCanFetch(can_fetch), + mCanKnow(can_know) { llassert(strlen(mTypeName) <= 8); } @@ -58,6 +62,8 @@ struct AssetEntry : public LLDictionaryEntry const char *mTypeName; const char *mHumanName; bool mCanLink; + bool mCanFetch; + bool mCanKnow; }; class LLAssetDictionary : public LLSingleton<LLAssetDictionary>, @@ -69,32 +75,32 @@ public: LLAssetDictionary::LLAssetDictionary() { - // DESCRIPTION TYPE NAME HUMAN NAME CAN LINK? - // |--------------------|-----------|-------------------|-----------| - addEntry(LLAssetType::AT_TEXTURE, new AssetEntry("TEXTURE", "texture", "texture", FALSE)); - addEntry(LLAssetType::AT_SOUND, new AssetEntry("SOUND", "sound", "sound", FALSE)); - addEntry(LLAssetType::AT_CALLINGCARD, new AssetEntry("CALLINGCARD", "callcard", "calling card", FALSE)); - addEntry(LLAssetType::AT_LANDMARK, new AssetEntry("LANDMARK", "landmark", "landmark", FALSE)); - addEntry(LLAssetType::AT_SCRIPT, new AssetEntry("SCRIPT", "script", "legacy script", FALSE)); - addEntry(LLAssetType::AT_CLOTHING, new AssetEntry("CLOTHING", "clothing", "clothing", TRUE)); - addEntry(LLAssetType::AT_OBJECT, new AssetEntry("OBJECT", "object", "object", TRUE)); - addEntry(LLAssetType::AT_NOTECARD, new AssetEntry("NOTECARD", "notecard", "note card", FALSE)); - addEntry(LLAssetType::AT_CATEGORY, new AssetEntry("CATEGORY", "category", "folder", TRUE)); - addEntry(LLAssetType::AT_LSL_TEXT, new AssetEntry("LSL_TEXT", "lsltext", "lsl2 script", FALSE)); - addEntry(LLAssetType::AT_LSL_BYTECODE, new AssetEntry("LSL_BYTECODE", "lslbyte", "lsl bytecode", FALSE)); - addEntry(LLAssetType::AT_TEXTURE_TGA, new AssetEntry("TEXTURE_TGA", "txtr_tga", "tga texture", FALSE)); - addEntry(LLAssetType::AT_BODYPART, new AssetEntry("BODYPART", "bodypart", "body part", TRUE)); - addEntry(LLAssetType::AT_SOUND_WAV, new AssetEntry("SOUND_WAV", "snd_wav", "sound", FALSE)); - addEntry(LLAssetType::AT_IMAGE_TGA, new AssetEntry("IMAGE_TGA", "img_tga", "targa image", FALSE)); - addEntry(LLAssetType::AT_IMAGE_JPEG, new AssetEntry("IMAGE_JPEG", "jpeg", "jpeg image", FALSE)); - addEntry(LLAssetType::AT_ANIMATION, new AssetEntry("ANIMATION", "animatn", "animation", FALSE)); - addEntry(LLAssetType::AT_GESTURE, new AssetEntry("GESTURE", "gesture", "gesture", TRUE)); - addEntry(LLAssetType::AT_SIMSTATE, new AssetEntry("SIMSTATE", "simstate", "simstate", FALSE)); - - addEntry(LLAssetType::AT_LINK, new AssetEntry("LINK", "link", "symbolic link", FALSE)); - addEntry(LLAssetType::AT_LINK_FOLDER, new AssetEntry("FOLDER_LINK", "link_f", "symbolic folder link", FALSE)); - - addEntry(LLAssetType::AT_NONE, new AssetEntry("NONE", "-1", NULL, FALSE)); + // DESCRIPTION TYPE NAME HUMAN NAME CAN LINK? CAN FETCH? CAN KNOW? + // |--------------------|-----------|-------------------|-----------|-----------|---------| + addEntry(LLAssetType::AT_TEXTURE, new AssetEntry("TEXTURE", "texture", "texture", false, false, true)); + addEntry(LLAssetType::AT_SOUND, new AssetEntry("SOUND", "sound", "sound", false, true, true)); + addEntry(LLAssetType::AT_CALLINGCARD, new AssetEntry("CALLINGCARD", "callcard", "calling card", false, false, false)); + addEntry(LLAssetType::AT_LANDMARK, new AssetEntry("LANDMARK", "landmark", "landmark", false, true, true)); + addEntry(LLAssetType::AT_SCRIPT, new AssetEntry("SCRIPT", "script", "legacy script", false, false, false)); + addEntry(LLAssetType::AT_CLOTHING, new AssetEntry("CLOTHING", "clothing", "clothing", true, true, true)); + addEntry(LLAssetType::AT_OBJECT, new AssetEntry("OBJECT", "object", "object", true, false, false)); + addEntry(LLAssetType::AT_NOTECARD, new AssetEntry("NOTECARD", "notecard", "note card", false, false, true)); + addEntry(LLAssetType::AT_CATEGORY, new AssetEntry("CATEGORY", "category", "folder", true, false, false)); + addEntry(LLAssetType::AT_LSL_TEXT, new AssetEntry("LSL_TEXT", "lsltext", "lsl2 script", false, false, false)); + addEntry(LLAssetType::AT_LSL_BYTECODE, new AssetEntry("LSL_BYTECODE", "lslbyte", "lsl bytecode", false, false, false)); + addEntry(LLAssetType::AT_TEXTURE_TGA, new AssetEntry("TEXTURE_TGA", "txtr_tga", "tga texture", false, false, false)); + addEntry(LLAssetType::AT_BODYPART, new AssetEntry("BODYPART", "bodypart", "body part", true, true, true)); + addEntry(LLAssetType::AT_SOUND_WAV, new AssetEntry("SOUND_WAV", "snd_wav", "sound", false, false, false)); + addEntry(LLAssetType::AT_IMAGE_TGA, new AssetEntry("IMAGE_TGA", "img_tga", "targa image", false, false, false)); + addEntry(LLAssetType::AT_IMAGE_JPEG, new AssetEntry("IMAGE_JPEG", "jpeg", "jpeg image", false, false, false)); + addEntry(LLAssetType::AT_ANIMATION, new AssetEntry("ANIMATION", "animatn", "animation", false, true, true)); + addEntry(LLAssetType::AT_GESTURE, new AssetEntry("GESTURE", "gesture", "gesture", true, true, true)); + addEntry(LLAssetType::AT_SIMSTATE, new AssetEntry("SIMSTATE", "simstate", "simstate", false, false, false)); + + addEntry(LLAssetType::AT_LINK, new AssetEntry("LINK", "link", "sym link", false, false, true)); + addEntry(LLAssetType::AT_LINK_FOLDER, new AssetEntry("FOLDER_LINK", "link_f", "sym folder link", false, false, true)); + + addEntry(LLAssetType::AT_NONE, new AssetEntry("NONE", "-1", NULL, false, false, false)); }; // static @@ -225,3 +231,27 @@ const std::string &LLAssetType::badLookup() return sBadLookup; } + +// static +bool LLAssetType::lookupIsAssetFetchByIDAllowed(EType asset_type) +{ + const LLAssetDictionary *dict = LLAssetDictionary::getInstance(); + const AssetEntry *entry = dict->lookup(asset_type); + if (entry) + { + return entry->mCanFetch; + } + return false; +} + +// static +bool LLAssetType::lookupIsAssetIDKnowable(EType asset_type) +{ + const LLAssetDictionary *dict = LLAssetDictionary::getInstance(); + const AssetEntry *entry = dict->lookup(asset_type); + if (entry) + { + return entry->mCanKnow; + } + return false; +} diff --git a/indra/llcommon/llassettype.h b/indra/llcommon/llassettype.h index c7bbc2e74a..2c2dc27aaa 100644 --- a/indra/llcommon/llassettype.h +++ b/indra/llcommon/llassettype.h @@ -146,6 +146,9 @@ public: static bool lookupCanLink(EType asset_type); static bool lookupIsLinkType(EType asset_type); + static bool lookupIsAssetFetchByIDAllowed(EType asset_type); // the asset allows direct download + static bool lookupIsAssetIDKnowable(EType asset_type); // asset data can be known by the viewer + static const std::string& badLookup(); // error string when a lookup fails protected: diff --git a/indra/llcommon/llcursortypes.cpp b/indra/llcommon/llcursortypes.cpp index 23ede97af3..6751c235f6 100644 --- a/indra/llcommon/llcursortypes.cpp +++ b/indra/llcommon/llcursortypes.cpp @@ -72,6 +72,9 @@ ECursorType getCursorFromString(const std::string& cursor_string) cursor_string_table["UI_CURSOR_TOOLPAUSE"] = UI_CURSOR_TOOLPAUSE; cursor_string_table["UI_CURSOR_TOOLMEDIAOPEN"] = UI_CURSOR_TOOLMEDIAOPEN; cursor_string_table["UI_CURSOR_PIPETTE"] = UI_CURSOR_PIPETTE; + cursor_string_table["UI_CURSOR_TOOLSIT"] = UI_CURSOR_TOOLSIT; + cursor_string_table["UI_CURSOR_TOOLBUY"] = UI_CURSOR_TOOLBUY; + cursor_string_table["UI_CURSOR_TOOLOPEN"] = UI_CURSOR_TOOLOPEN; } std::map<std::string,U32>::const_iterator iter = cursor_string_table.find(cursor_string); diff --git a/indra/llcommon/llcursortypes.h b/indra/llcommon/llcursortypes.h index a1b8178bfe..143c2c64cf 100644 --- a/indra/llcommon/llcursortypes.h +++ b/indra/llcommon/llcursortypes.h @@ -68,6 +68,9 @@ enum ECursorType { UI_CURSOR_TOOLPAUSE, UI_CURSOR_TOOLMEDIAOPEN, UI_CURSOR_PIPETTE, + UI_CURSOR_TOOLSIT, + UI_CURSOR_TOOLBUY, + UI_CURSOR_TOOLOPEN, UI_CURSOR_COUNT // Number of elements in this enum (NOT a cursor) }; diff --git a/indra/llcommon/llqueuedthread.cpp b/indra/llcommon/llqueuedthread.cpp index 06ceeb2bc3..809a626c93 100644 --- a/indra/llcommon/llqueuedthread.cpp +++ b/indra/llcommon/llqueuedthread.cpp @@ -133,8 +133,11 @@ S32 LLQueuedThread::updateQueue(U32 max_time_ms) if (mThreaded) { pending = getPending(); + if(pending > 0) + { unpause(); } + } else { while (pending > 0) @@ -459,7 +462,7 @@ S32 LLQueuedThread::processNextRequest() req->setStatus(STATUS_QUEUED); mRequestQueue.insert(req); unlockData(); - if (mThreaded && start_priority <= PRIORITY_LOW) + if (mThreaded && start_priority < PRIORITY_NORMAL) { ms_sleep(1); // sleep the thread a little } diff --git a/indra/llcommon/llsys.h b/indra/llcommon/llsys.h index f1dda1b2e2..c2c45bec9a 100644 --- a/indra/llcommon/llsys.h +++ b/indra/llcommon/llsys.h @@ -122,6 +122,7 @@ public: U32 getPhysicalMemoryClamped() const; ///< Memory size in clamped bytes }; + LL_COMMON_API std::ostream& operator<<(std::ostream& s, const LLOSInfo& info); LL_COMMON_API std::ostream& operator<<(std::ostream& s, const LLCPUInfo& info); LL_COMMON_API std::ostream& operator<<(std::ostream& s, const LLMemoryInfo& info); diff --git a/indra/llcommon/lluuid.h b/indra/llcommon/lluuid.h index c78fb12018..3a0d66e4a5 100644 --- a/indra/llcommon/lluuid.h +++ b/indra/llcommon/lluuid.h @@ -133,6 +133,7 @@ public: U8 mData[UUID_BYTES]; }; +typedef std::vector<LLUUID> uuid_vec_t; // Construct inline LLUUID::LLUUID() diff --git a/indra/llcommon/llversionserver.h b/indra/llcommon/llversionserver.h index 0f1e59a18c..e3663544db 100644 --- a/indra/llcommon/llversionserver.h +++ b/indra/llcommon/llversionserver.h @@ -36,7 +36,7 @@ const S32 LL_VERSION_MAJOR = 1; const S32 LL_VERSION_MINOR = 31; const S32 LL_VERSION_PATCH = 0; -const S32 LL_VERSION_BUILD = 200030; +const S32 LL_VERSION_BUILD = 203110; const char * const LL_CHANNEL = "Second Life Server"; diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h index 540aea4252..3ab4257fab 100644 --- a/indra/llcommon/llversionviewer.h +++ b/indra/llcommon/llversionviewer.h @@ -36,7 +36,7 @@ const S32 LL_VERSION_MAJOR = 2; const S32 LL_VERSION_MINOR = 0; const S32 LL_VERSION_PATCH = 0; -const S32 LL_VERSION_BUILD = 200030; +const S32 LL_VERSION_BUILD = 203110; const char * const LL_CHANNEL = "Second Life Developer"; diff --git a/indra/llcommon/llworkerthread.cpp b/indra/llcommon/llworkerthread.cpp index 411977474b..2629237f7e 100644 --- a/indra/llcommon/llworkerthread.cpp +++ b/indra/llcommon/llworkerthread.cpp @@ -347,12 +347,12 @@ bool LLWorkerClass::checkWork(bool aborting) { mRequestHandle = LLWorkerThread::nullHandle(); clearFlags(WCF_HAVE_WORK); - return true ; } else { llassert_always(workreq); } + return true ; } LLQueuedThread::status_t status = workreq->getStatus(); diff --git a/indra/llinventory/llparcel.cpp b/indra/llinventory/llparcel.cpp index ec21ae40e7..b08cb28218 100644 --- a/indra/llinventory/llparcel.cpp +++ b/indra/llinventory/llparcel.cpp @@ -452,7 +452,7 @@ BOOL LLParcel::allowTerraformBy(const LLUUID &agent_id) const bool LLParcel::isAgentBlockedFromParcel(LLParcel* parcelp, const LLUUID& agent_id, - const std::vector<LLUUID>& group_ids, + const uuid_vec_t& group_ids, const BOOL is_agent_identified, const BOOL is_agent_transacted, const BOOL is_agent_ageverified) diff --git a/indra/llinventory/llparcel.h b/indra/llinventory/llparcel.h index 2a9a596912..4ee9d9b40f 100644 --- a/indra/llinventory/llparcel.h +++ b/indra/llinventory/llparcel.h @@ -258,7 +258,7 @@ public: void setMediaURLResetTimer(F32 time); virtual void setLocalID(S32 local_id); - // blow away all the extra crap lurking in parcels, including urls, access lists, etc + // blow away all the extra stuff lurking in parcels, including urls, access lists, etc void clearParcel(); // This value is not persisted out to the parcel file, it is only @@ -538,7 +538,7 @@ public: static bool isAgentBlockedFromParcel(LLParcel* parcelp, const LLUUID& agent_id, - const std::vector<LLUUID>& group_ids, + const uuid_vec_t& group_ids, const BOOL is_agent_identified, const BOOL is_agent_transacted, const BOOL is_agent_ageverified); diff --git a/indra/llmessage/llassetstorage.cpp b/indra/llmessage/llassetstorage.cpp index 0ab1081200..02523467e8 100644 --- a/indra/llmessage/llassetstorage.cpp +++ b/indra/llmessage/llassetstorage.cpp @@ -408,6 +408,8 @@ void LLAssetStorage::getAssetData(const LLUUID uuid, LLAssetType::EType type, vo { lldebugs << "LLAssetStorage::getAssetData() - " << uuid << "," << LLAssetType::lookup(type) << llendl; + llinfos << "ASSET_TRACE requesting " << uuid << " type " << LLAssetType::lookup(type) << llendl; + if (mShutDown) { return; // don't get the asset or do any callbacks, we are shutting down @@ -471,6 +473,8 @@ void LLAssetStorage::getAssetData(const LLUUID uuid, LLAssetType::EType type, vo // we've already got the file // theoretically, partial files w/o a pending request shouldn't happen // unless there's a weird error + llinfos << "ASSET_TRACE asset " << uuid << " found in VFS" << llendl; + if (callback) { callback(mVFS, uuid, type, user_data, LL_ERR_NOERR, LL_EXSTAT_VFS_CACHED); @@ -528,6 +532,8 @@ void LLAssetStorage::downloadCompleteCallback( LLAssetType::EType file_type, void* user_data, LLExtStat ext_status) { + llinfos << "ASSET_TRACE asset " << file_id << " downloadCompleteCallback" << llendl; + lldebugs << "LLAssetStorage::downloadCompleteCallback() for " << file_id << "," << LLAssetType::lookup(file_type) << llendl; LLAssetRequest* req = (LLAssetRequest*)user_data; diff --git a/indra/llmessage/llinstantmessage.cpp b/indra/llmessage/llinstantmessage.cpp index a9e1ee77ef..57e8a22546 100644 --- a/indra/llmessage/llinstantmessage.cpp +++ b/indra/llmessage/llinstantmessage.cpp @@ -61,6 +61,7 @@ const char EMPTY_BINARY_BUCKET[] = ""; const S32 EMPTY_BINARY_BUCKET_SIZE = 1; const U32 NO_TIMESTAMP = 0; const std::string SYSTEM_FROM("Second Life"); +const std::string INTERACTIVE_SYSTEM_FROM("F387446C-37C4-45f2-A438-D99CBDBB563B"); const S32 IM_TTL = 1; diff --git a/indra/llmessage/llinstantmessage.h b/indra/llmessage/llinstantmessage.h index 272e753f3c..f11b649f78 100644 --- a/indra/llmessage/llinstantmessage.h +++ b/indra/llmessage/llinstantmessage.h @@ -226,6 +226,7 @@ extern const S32 EMPTY_BINARY_BUCKET_SIZE; extern const U32 NO_TIMESTAMP; extern const std::string SYSTEM_FROM; +extern const std::string INTERACTIVE_SYSTEM_FROM; // Number of retry attempts on sending the im. extern const S32 IM_TTL; diff --git a/indra/llmessage/lltemplatemessagebuilder.cpp b/indra/llmessage/lltemplatemessagebuilder.cpp index 55379fc6fd..fa02456d90 100644 --- a/indra/llmessage/lltemplatemessagebuilder.cpp +++ b/indra/llmessage/lltemplatemessagebuilder.cpp @@ -326,7 +326,7 @@ void LLTemplateMessageBuilder::addData(const char *varname, const void *data, EM << "(" << size << "). Clamping size and truncating data." << llendl; size = 255; char *truncate = (char *)data; - truncate[255] = 0; + truncate[254] = 0; // array size is 255 but the last element index is 254 } // no correct size for MVT_VARIABLE, instead we need to tell how many bytes the size will be encoded as diff --git a/indra/llmessage/lltemplatemessagereader.cpp b/indra/llmessage/lltemplatemessagereader.cpp index 6682575ca5..8f56cf2521 100644 --- a/indra/llmessage/lltemplatemessagereader.cpp +++ b/indra/llmessage/lltemplatemessagereader.cpp @@ -433,10 +433,9 @@ inline void LLTemplateMessageReader::getString(const char *block, const char *va inline void LLTemplateMessageReader::getString(const char *block, const char *var, std::string& outstr, S32 blocknum ) { - char s[MTUBYTES]; - s[0] = '\0'; + char s[MTUBYTES + 1]= {0}; // every element is initialized with 0 getData(block, var, s, 0, blocknum, MTUBYTES); - s[MTUBYTES - 1] = '\0'; + s[MTUBYTES] = '\0'; outstr = s; } diff --git a/indra/llmessage/lltransfersourceasset.cpp b/indra/llmessage/lltransfersourceasset.cpp index 8f36d516d7..43f7c07e94 100644 --- a/indra/llmessage/lltransfersourceasset.cpp +++ b/indra/llmessage/lltransfersourceasset.cpp @@ -60,7 +60,7 @@ void LLTransferSourceAsset::initTransfer() // to the simulator. This is subset of assets we allow to be // simply pulled straight from the asset system. LLUUID* tidp; - if(is_asset_fetch_by_id_allowed(mParams.getAssetType())) + if(LLAssetType::lookupIsAssetFetchByIDAllowed(mParams.getAssetType())) { tidp = new LLUUID(getID()); gAssetStorage->getAssetData( @@ -131,7 +131,7 @@ LLTSCode LLTransferSourceAsset::dataCallback(const S32 packet_id, *data_handle = tmpp; if (!vf.read(tmpp, max_bytes)) /* Flawfinder: Ignore */ { - // Crap, read failure, need to deal with it. + // Read failure, need to deal with it. delete[] tmpp; *data_handle = NULL; returned_bytes = 0; @@ -257,50 +257,3 @@ BOOL LLTransferSourceParamsAsset::unpackParams(LLDataPacker &dp) return TRUE; } - -/** - * Helper functions - */ -bool is_asset_fetch_by_id_allowed(LLAssetType::EType type) -{ - // *FIX: Make this list smaller. - bool rv = false; - switch(type) - { - case LLAssetType::AT_SOUND: - case LLAssetType::AT_LANDMARK: - case LLAssetType::AT_CLOTHING: - case LLAssetType::AT_BODYPART: - case LLAssetType::AT_ANIMATION: - case LLAssetType::AT_GESTURE: - rv = true; - break; - default: - break; - } - return rv; -} - -bool is_asset_id_knowable(LLAssetType::EType type) -{ - // *FIX: Make this list smaller. - bool rv = false; - switch(type) - { - case LLAssetType::AT_TEXTURE: - case LLAssetType::AT_SOUND: - case LLAssetType::AT_LANDMARK: - case LLAssetType::AT_CLOTHING: - case LLAssetType::AT_NOTECARD: - case LLAssetType::AT_BODYPART: - case LLAssetType::AT_ANIMATION: - case LLAssetType::AT_GESTURE: - case LLAssetType::AT_LINK: - case LLAssetType::AT_LINK_FOLDER: - rv = true; - break; - default: - break; - } - return rv; -} diff --git a/indra/llmessage/lltransfersourceasset.h b/indra/llmessage/lltransfersourceasset.h index 70b09b6aaf..8616595654 100644 --- a/indra/llmessage/lltransfersourceasset.h +++ b/indra/llmessage/lltransfersourceasset.h @@ -84,24 +84,4 @@ protected: S32 mCurPos; }; -/** - * @brief Quick check to see if the asset allows direct download. - * - * This might not be the right place for this function call, but it - * originally started life inside the LLTransferSourceAsset code. - * @param type The type of asset. - * @return Returns true if the asset can be fetched by id. - */ -bool is_asset_fetch_by_id_allowed(LLAssetType::EType type); - -/** - * @brief Quick check to see if all asset data can be known by the viewer. - * - * This might not be the right place for this function call, but it - * originally started life inside the LLTransferSourceAsset code. - * @param type The type of asset. - * @return Returns true if the asset id can be transmitted to the viewer. - */ -bool is_asset_id_knowable(LLAssetType::EType type); - #endif // LL_LLTRANSFERSOURCEASSET_H diff --git a/indra/llplugin/CMakeLists.txt b/indra/llplugin/CMakeLists.txt index 6706775d4f..441becbae0 100644 --- a/indra/llplugin/CMakeLists.txt +++ b/indra/llplugin/CMakeLists.txt @@ -3,6 +3,7 @@ project(llplugin) include(00-Common) +include(CURL) include(LLCommon) include(LLImage) include(LLMath) @@ -23,6 +24,7 @@ include_directories( set(llplugin_SOURCE_FILES llpluginclassmedia.cpp + llplugincookiestore.cpp llplugininstance.cpp llpluginmessage.cpp llpluginmessagepipe.cpp @@ -36,6 +38,7 @@ set(llplugin_HEADER_FILES llpluginclassmedia.h llpluginclassmediaowner.h + llplugincookiestore.h llplugininstance.h llpluginmessage.h llpluginmessageclasses.h @@ -53,3 +56,19 @@ list(APPEND llplugin_SOURCE_FILES ${llplugin_HEADER_FILES}) add_library (llplugin ${llplugin_SOURCE_FILES}) add_subdirectory(slplugin) + +# Add tests +include(LLAddBuildTest) +# UNIT TESTS +SET(llplugin_TEST_SOURCE_FILES + llplugincookiestore.cpp + ) + +# llplugincookiestore has a dependency on curl, so we need to link the curl library into the test. +set_source_files_properties( + llplugincookiestore.cpp + PROPERTIES + LL_TEST_ADDITIONAL_LIBRARIES "${CURL_LIBRARIES}" + ) + +LL_ADD_PROJECT_UNIT_TESTS(llplugin "${llplugin_TEST_SOURCE_FILES}") diff --git a/indra/llplugin/llpluginclassmedia.cpp b/indra/llplugin/llpluginclassmedia.cpp index d48f4ad0f5..e09b511a6e 100644 --- a/indra/llplugin/llpluginclassmedia.cpp +++ b/indra/llplugin/llpluginclassmedia.cpp @@ -65,15 +65,19 @@ LLPluginClassMedia::~LLPluginClassMedia() reset(); } -bool LLPluginClassMedia::init(const std::string &launcher_filename, const std::string &plugin_filename, bool debug, const std::string &user_data_path, const std::string &language_code) +bool LLPluginClassMedia::init(const std::string &launcher_filename, const std::string &plugin_filename, bool debug) { LL_DEBUGS("Plugin") << "launcher: " << launcher_filename << LL_ENDL; LL_DEBUGS("Plugin") << "plugin: " << plugin_filename << LL_ENDL; - LL_DEBUGS("Plugin") << "user_data_path: " << user_data_path << LL_ENDL; mPlugin = new LLPluginProcessParent(this); mPlugin->setSleepTime(mSleepTime); - mPlugin->init(launcher_filename, plugin_filename, debug, user_data_path,language_code); + + // Queue up the media init message -- it will be sent after all the currently queued messages. + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "init"); + sendMessage(message); + + mPlugin->init(launcher_filename, plugin_filename, debug); return true; } @@ -678,6 +682,34 @@ void LLPluginClassMedia::paste() sendMessage(message); } +void LLPluginClassMedia::setUserDataPath(const std::string &user_data_path) +{ + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "set_user_data_path"); + message.setValue("path", user_data_path); + sendMessage(message); +} + +void LLPluginClassMedia::setLanguageCode(const std::string &language_code) +{ + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "set_language_code"); + message.setValue("language", language_code); + sendMessage(message); +} + +void LLPluginClassMedia::setPluginsEnabled(const bool enabled) +{ + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "plugins_enabled"); + message.setValueBoolean("enable", enabled); + sendMessage(message); +} + +void LLPluginClassMedia::setJavascriptEnabled(const bool enabled) +{ + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "javascript_enabled"); + message.setValueBoolean("enable", enabled); + sendMessage(message); +} + LLPluginClassMedia::ETargetType getTargetTypeFromLLQtWebkit(int target_type) { // convert a LinkTargetType value from llqtwebkit to an ETargetType @@ -961,6 +993,13 @@ void LLPluginClassMedia::receivePluginMessage(const LLPluginMessage &message) mClickTargetType = TARGET_NONE; mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_CLICK_LINK_NOFOLLOW); } + else if(message_name == "cookie_set") + { + if(mOwner) + { + mOwner->handleCookieSet(this, message.getValue("cookie")); + } + } else { LL_WARNS("Plugin") << "Unknown " << message_name << " class message: " << message_name << LL_ENDL; @@ -1044,9 +1083,17 @@ void LLPluginClassMedia::clear_cookies() sendMessage(message); } +void LLPluginClassMedia::set_cookies(const std::string &cookies) +{ + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "set_cookies"); + message.setValue("cookies", cookies); + sendMessage(message); +} + void LLPluginClassMedia::enable_cookies(bool enable) { LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "enable_cookies"); + message.setValueBoolean("enable", enable); sendMessage(message); } diff --git a/indra/llplugin/llpluginclassmedia.h b/indra/llplugin/llpluginclassmedia.h index ce49241e84..8c7b00f45b 100644 --- a/indra/llplugin/llpluginclassmedia.h +++ b/indra/llplugin/llpluginclassmedia.h @@ -51,9 +51,7 @@ public: // local initialization, called by the media manager when creating a source virtual bool init(const std::string &launcher_filename, const std::string &plugin_filename, - bool debug, - const std::string &user_data_path, - const std::string &language_code); + bool debug); // undoes everything init() didm called by the media manager when destroying a source virtual void reset(); @@ -177,6 +175,12 @@ public: void paste(); bool canPaste() const { return mCanPaste; }; + + // These can be called before init(), and they will be queued and sent before the media init message. + void setUserDataPath(const std::string &user_data_path); + void setLanguageCode(const std::string &language_code); + void setPluginsEnabled(const bool enabled); + void setJavascriptEnabled(const bool enabled); /////////////////////////////////// // media browser class functions @@ -185,6 +189,7 @@ public: void focus(bool focused); void clear_cache(); void clear_cookies(); + void set_cookies(const std::string &cookies); void enable_cookies(bool enable); void proxy_setup(bool enable, const std::string &host = LLStringUtil::null, int port = 0); void browse_stop(); diff --git a/indra/llplugin/llpluginclassmediaowner.h b/indra/llplugin/llpluginclassmediaowner.h index 6d369cd51a..5669b81fd1 100644 --- a/indra/llplugin/llpluginclassmediaowner.h +++ b/indra/llplugin/llpluginclassmediaowner.h @@ -39,6 +39,7 @@ #include <queue> class LLPluginClassMedia; +class LLPluginCookieStore; class LLPluginClassMediaOwner { @@ -78,6 +79,7 @@ public: virtual ~LLPluginClassMediaOwner() {}; virtual void handleMediaEvent(LLPluginClassMedia* /*self*/, EMediaEvent /*event*/) {}; + virtual void handleCookieSet(LLPluginClassMedia* /*self*/, const std::string &/*cookie*/) {}; }; #endif // LL_LLPLUGINCLASSMEDIAOWNER_H diff --git a/indra/llplugin/llplugincookiestore.cpp b/indra/llplugin/llplugincookiestore.cpp new file mode 100644 index 0000000000..85b1e70d78 --- /dev/null +++ b/indra/llplugin/llplugincookiestore.cpp @@ -0,0 +1,659 @@ +/** + * @file llplugincookiestore.cpp + * @brief LLPluginCookieStore provides central storage for http cookies used by plugins + * + * @cond + * $LicenseInfo:firstyear=2010&license=viewergpl$ + * + * Copyright (c) 2010, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + * @endcond + */ + +#include "linden_common.h" +#include "indra_constants.h" + +#include "llplugincookiestore.h" +#include <iostream> + +// for curl_getdate() (apparently parsing RFC 1123 dates is hard) +#include <curl/curl.h> + +LLPluginCookieStore::LLPluginCookieStore(): + mHasChangedCookies(false) +{ +} + + +LLPluginCookieStore::~LLPluginCookieStore() +{ + clearCookies(); +} + + +LLPluginCookieStore::Cookie::Cookie(const std::string &s, std::string::size_type cookie_start, std::string::size_type cookie_end): + mCookie(s, cookie_start, cookie_end - cookie_start), + mNameStart(0), mNameEnd(0), + mValueStart(0), mValueEnd(0), + mDomainStart(0), mDomainEnd(0), + mPathStart(0), mPathEnd(0), + mDead(false), mChanged(true) +{ +} + +LLPluginCookieStore::Cookie *LLPluginCookieStore::Cookie::createFromString(const std::string &s, std::string::size_type cookie_start, std::string::size_type cookie_end, const std::string &host) +{ + Cookie *result = new Cookie(s, cookie_start, cookie_end); + + if(!result->parse(host)) + { + delete result; + result = NULL; + } + + return result; +} + +std::string LLPluginCookieStore::Cookie::getKey() const +{ + std::string result; + if(mDomainEnd > mDomainStart) + { + result += mCookie.substr(mDomainStart, mDomainEnd - mDomainStart); + } + result += ';'; + if(mPathEnd > mPathStart) + { + result += mCookie.substr(mPathStart, mPathEnd - mPathStart); + } + result += ';'; + result += mCookie.substr(mNameStart, mNameEnd - mNameStart); + return result; +} + +bool LLPluginCookieStore::Cookie::parse(const std::string &host) +{ + bool first_field = true; + + std::string::size_type cookie_end = mCookie.size(); + std::string::size_type field_start = 0; + + lldebugs << "parsing cookie: " << mCookie << llendl; + while(field_start < cookie_end) + { + // Finding the start of the next field requires honoring special quoting rules + // see the definition of 'quoted-string' in rfc2616 for details + std::string::size_type next_field_start = findFieldEnd(field_start); + + // The end of this field should not include the terminating ';' or any trailing whitespace + std::string::size_type field_end = mCookie.find_last_not_of("; ", next_field_start); + if(field_end == std::string::npos || field_end < field_start) + { + // This field was empty or all whitespace. Set end = start so it shows as empty. + field_end = field_start; + } + else if (field_end < next_field_start) + { + // we actually want the index of the char _after_ what 'last not of' found + ++field_end; + } + + // find the start of the actual name (skip separator and possible whitespace) + std::string::size_type name_start = mCookie.find_first_not_of("; ", field_start); + if(name_start == std::string::npos || name_start > next_field_start) + { + // Again, nothing but whitespace. + name_start = field_start; + } + + // the name and value are separated by the first equals sign + std::string::size_type name_value_sep = mCookie.find_first_of("=", name_start); + if(name_value_sep == std::string::npos || name_value_sep > field_end) + { + // No separator found, so this is a field without an = + name_value_sep = field_end; + } + + // the name end is before the name-value separator + std::string::size_type name_end = mCookie.find_last_not_of("= ", name_value_sep); + if(name_end == std::string::npos || name_end < name_start) + { + // I'm not sure how we'd hit this case... it seems like it would have to be an empty name. + name_end = name_start; + } + else if (name_end < name_value_sep) + { + // we actually want the index of the char _after_ what 'last not of' found + ++name_end; + } + + // Value is between the name-value sep and the end of the field. + std::string::size_type value_start = mCookie.find_first_not_of("= ", name_value_sep); + if(value_start == std::string::npos || value_start > field_end) + { + // All whitespace or empty value + value_start = field_end; + } + std::string::size_type value_end = mCookie.find_last_not_of("; ", field_end); + if(value_end == std::string::npos || value_end < value_start) + { + // All whitespace or empty value + value_end = value_start; + } + else if (value_end < field_end) + { + // we actually want the index of the char _after_ what 'last not of' found + ++value_end; + } + + lldebugs + << " field name: \"" << mCookie.substr(name_start, name_end - name_start) + << "\", value: \"" << mCookie.substr(value_start, value_end - value_start) << "\"" + << llendl; + + // See whether this field is one we know + if(first_field) + { + // The first field is the name=value pair + mNameStart = name_start; + mNameEnd = name_end; + mValueStart = value_start; + mValueEnd = value_end; + first_field = false; + } + else + { + // Subsequent fields must come from the set in rfc2109 + if(matchName(name_start, name_end, "expires")) + { + std::string date_string(mCookie, value_start, value_end - value_start); + // If the cookie contains an "expires" field, it MUST contain a parsable date. + + // HACK: LLDate apparently can't PARSE an rfc1123-format date, even though it can GENERATE one. + // The curl function curl_getdate can do this, but I'm hesitant to unilaterally introduce a curl dependency in LLDate. +#if 1 + time_t date = curl_getdate(date_string.c_str(), NULL ); + mDate.secondsSinceEpoch((F64)date); + lldebugs << " expire date parsed to: " << mDate.asRFC1123() << llendl; +#else + // This doesn't work (rfc1123-format dates cause it to fail) + if(!mDate.fromString(date_string)) + { + // Date failed to parse. + llwarns << "failed to parse cookie's expire date: " << date << llendl; + return false; + } +#endif + } + else if(matchName(name_start, name_end, "domain")) + { + mDomainStart = value_start; + mDomainEnd = value_end; + } + else if(matchName(name_start, name_end, "path")) + { + mPathStart = value_start; + mPathEnd = value_end; + } + else if(matchName(name_start, name_end, "max-age")) + { + // TODO: how should we handle this? + } + else if(matchName(name_start, name_end, "secure")) + { + // We don't care about the value of this field (yet) + } + else if(matchName(name_start, name_end, "version")) + { + // We don't care about the value of this field (yet) + } + else if(matchName(name_start, name_end, "comment")) + { + // We don't care about the value of this field (yet) + } + else + { + // An unknown field is a parse failure + return false; + } + + } + + + // move on to the next field, skipping this field's separator and any leading whitespace + field_start = mCookie.find_first_not_of("; ", next_field_start); + } + + // The cookie MUST have a name + if(mNameEnd <= mNameStart) + return false; + + // If the cookie doesn't have a domain, add the current host as the domain. + if(mDomainEnd <= mDomainStart) + { + if(host.empty()) + { + // no domain and no current host -- this is a parse failure. + return false; + } + + // Figure out whether this cookie ended with a ";" or not... + std::string::size_type last_char = mCookie.find_last_not_of(" "); + if((last_char != std::string::npos) && (mCookie[last_char] != ';')) + { + mCookie += ";"; + } + + mCookie += " domain="; + mDomainStart = mCookie.size(); + mCookie += host; + mDomainEnd = mCookie.size(); + + lldebugs << "added domain (" << mDomainStart << " to " << mDomainEnd << "), new cookie is: " << mCookie << llendl; + } + + // If the cookie doesn't have a path, add "/". + if(mPathEnd <= mPathStart) + { + // Figure out whether this cookie ended with a ";" or not... + std::string::size_type last_char = mCookie.find_last_not_of(" "); + if((last_char != std::string::npos) && (mCookie[last_char] != ';')) + { + mCookie += ";"; + } + + mCookie += " path="; + mPathStart = mCookie.size(); + mCookie += "/"; + mPathEnd = mCookie.size(); + + lldebugs << "added path (" << mPathStart << " to " << mPathEnd << "), new cookie is: " << mCookie << llendl; + } + + + return true; +} + +std::string::size_type LLPluginCookieStore::Cookie::findFieldEnd(std::string::size_type start, std::string::size_type end) +{ + std::string::size_type result = start; + + if(end == std::string::npos) + end = mCookie.size(); + + bool in_quotes = false; + for(; (result < end); result++) + { + switch(mCookie[result]) + { + case '\\': + if(in_quotes) + result++; // The next character is backslash-quoted. Skip over it. + break; + case '"': + in_quotes = !in_quotes; + break; + case ';': + if(!in_quotes) + return result; + break; + } + } + + // If we got here, no ';' was found. + return end; +} + +bool LLPluginCookieStore::Cookie::matchName(std::string::size_type start, std::string::size_type end, const char *name) +{ + // NOTE: this assumes 'name' is already in lowercase. The code which uses it should be able to arrange this... + + while((start < end) && (*name != '\0')) + { + if(tolower(mCookie[start]) != *name) + return false; + + start++; + name++; + } + + // iff both strings hit the end at the same time, they're equal. + return ((start == end) && (*name == '\0')); +} + +std::string LLPluginCookieStore::getAllCookies() +{ + std::stringstream result; + writeAllCookies(result); + return result.str(); +} + +void LLPluginCookieStore::writeAllCookies(std::ostream& s) +{ + cookie_map_t::iterator iter; + for(iter = mCookies.begin(); iter != mCookies.end(); iter++) + { + // Don't return expired cookies + if(!iter->second->isDead()) + { + s << (iter->second->getCookie()) << "\n"; + } + } + +} + +std::string LLPluginCookieStore::getPersistentCookies() +{ + std::stringstream result; + writePersistentCookies(result); + return result.str(); +} + +void LLPluginCookieStore::writePersistentCookies(std::ostream& s) +{ + cookie_map_t::iterator iter; + for(iter = mCookies.begin(); iter != mCookies.end(); iter++) + { + // Don't return expired cookies or session cookies + if(!iter->second->isDead() && !iter->second->isSessionCookie()) + { + s << iter->second->getCookie() << "\n"; + } + } +} + +std::string LLPluginCookieStore::getChangedCookies(bool clear_changed) +{ + std::stringstream result; + writeChangedCookies(result, clear_changed); + + return result.str(); +} + +void LLPluginCookieStore::writeChangedCookies(std::ostream& s, bool clear_changed) +{ + if(mHasChangedCookies) + { + lldebugs << "returning changed cookies: " << llendl; + cookie_map_t::iterator iter; + for(iter = mCookies.begin(); iter != mCookies.end(); ) + { + cookie_map_t::iterator next = iter; + next++; + + // Only return cookies marked as "changed" + if(iter->second->isChanged()) + { + s << iter->second->getCookie() << "\n"; + + lldebugs << " " << iter->second->getCookie() << llendl; + + // If requested, clear the changed mark + if(clear_changed) + { + if(iter->second->isDead()) + { + // If this cookie was previously marked dead, it needs to be removed entirely. + delete iter->second; + mCookies.erase(iter); + } + else + { + // Not dead, just mark as not changed. + iter->second->setChanged(false); + } + } + } + + iter = next; + } + } + + if(clear_changed) + mHasChangedCookies = false; +} + +void LLPluginCookieStore::setAllCookies(const std::string &cookies, bool mark_changed) +{ + clearCookies(); + setCookies(cookies, mark_changed); +} + +void LLPluginCookieStore::readAllCookies(std::istream& s, bool mark_changed) +{ + clearCookies(); + readCookies(s, mark_changed); +} + +void LLPluginCookieStore::setCookies(const std::string &cookies, bool mark_changed) +{ + std::string::size_type start = 0; + + while(start != std::string::npos) + { + std::string::size_type end = cookies.find_first_of("\r\n", start); + if(end > start) + { + // The line is non-empty. Try to create a cookie from it. + setOneCookie(cookies, start, end, mark_changed); + } + start = cookies.find_first_not_of("\r\n ", end); + } +} + +void LLPluginCookieStore::setCookiesFromHost(const std::string &cookies, const std::string &host, bool mark_changed) +{ + std::string::size_type start = 0; + + while(start != std::string::npos) + { + std::string::size_type end = cookies.find_first_of("\r\n", start); + if(end > start) + { + // The line is non-empty. Try to create a cookie from it. + setOneCookie(cookies, start, end, mark_changed, host); + } + start = cookies.find_first_not_of("\r\n ", end); + } +} + +void LLPluginCookieStore::readCookies(std::istream& s, bool mark_changed) +{ + std::string line; + while(s.good() && !s.eof()) + { + std::getline(s, line); + if(!line.empty()) + { + // Try to create a cookie from this line. + setOneCookie(line, 0, std::string::npos, mark_changed); + } + } +} + +std::string LLPluginCookieStore::quoteString(const std::string &s) +{ + std::stringstream result; + + result << '"'; + + for(std::string::size_type i = 0; i < s.size(); ++i) + { + char c = s[i]; + switch(c) + { + // All these separators need to be quoted in HTTP headers, according to section 2.2 of rfc 2616: + case '(': case ')': case '<': case '>': case '@': + case ',': case ';': case ':': case '\\': case '"': + case '/': case '[': case ']': case '?': case '=': + case '{': case '}': case ' ': case '\t': + result << '\\'; + break; + } + + result << c; + } + + result << '"'; + + return result.str(); +} + +std::string LLPluginCookieStore::unquoteString(const std::string &s) +{ + std::stringstream result; + + bool in_quotes = false; + + for(std::string::size_type i = 0; i < s.size(); ++i) + { + char c = s[i]; + switch(c) + { + case '\\': + if(in_quotes) + { + // The next character is backslash-quoted. Pass it through untouched. + ++i; + if(i < s.size()) + { + result << s[i]; + } + continue; + } + break; + case '"': + in_quotes = !in_quotes; + continue; + break; + } + + result << c; + } + + return result.str(); +} + +// The flow for deleting a cookie is non-obvious enough that I should call it out here... +// Deleting a cookie is done by setting a cookie with the same name, path, and domain, but with an expire timestamp in the past. +// (This is exactly how a web server tells a browser to delete a cookie.) +// When deleting with mark_changed set to true, this replaces the existing cookie in the list with an entry that's marked both dead and changed. +// Some time later when writeChangedCookies() is called with clear_changed set to true, the dead cookie is deleted from the list after being returned, so that the +// delete operation (in the form of the expired cookie) is passed along. +void LLPluginCookieStore::setOneCookie(const std::string &s, std::string::size_type cookie_start, std::string::size_type cookie_end, bool mark_changed, const std::string &host) +{ + Cookie *cookie = Cookie::createFromString(s, cookie_start, cookie_end, host); + if(cookie) + { + lldebugs << "setting cookie: " << cookie->getCookie() << llendl; + + // Create a key for this cookie + std::string key = cookie->getKey(); + + // Check to see whether this cookie should have expired + if(!cookie->isSessionCookie() && (cookie->getDate() < LLDate::now())) + { + // This cookie has expired. + if(mark_changed) + { + // If we're marking cookies as changed, we should keep it anyway since we'll need to send it out with deltas. + cookie->setDead(true); + lldebugs << " marking dead" << llendl; + } + else + { + // If we're not marking cookies as changed, we don't need to keep this cookie at all. + // If the cookie was already in the list, delete it. + removeCookie(key); + + delete cookie; + cookie = NULL; + + lldebugs << " removing" << llendl; + } + } + + if(cookie) + { + // If it already exists in the map, replace it. + cookie_map_t::iterator iter = mCookies.find(key); + if(iter != mCookies.end()) + { + if(iter->second->getCookie() == cookie->getCookie()) + { + // The new cookie is identical to the old -- don't mark as changed. + // Just leave the old one in the map. + delete cookie; + cookie = NULL; + + lldebugs << " unchanged" << llendl; + } + else + { + // A matching cookie was already in the map. Replace it. + delete iter->second; + iter->second = cookie; + + cookie->setChanged(mark_changed); + if(mark_changed) + mHasChangedCookies = true; + + lldebugs << " replacing" << llendl; + } + } + else + { + // The cookie wasn't in the map. Insert it. + mCookies.insert(std::make_pair(key, cookie)); + + cookie->setChanged(mark_changed); + if(mark_changed) + mHasChangedCookies = true; + + lldebugs << " adding" << llendl; + } + } + } +} + +void LLPluginCookieStore::clearCookies() +{ + while(!mCookies.empty()) + { + cookie_map_t::iterator iter = mCookies.begin(); + delete iter->second; + mCookies.erase(iter); + } +} + +void LLPluginCookieStore::removeCookie(const std::string &key) +{ + cookie_map_t::iterator iter = mCookies.find(key); + if(iter != mCookies.end()) + { + delete iter->second; + mCookies.erase(iter); + } +} + diff --git a/indra/llplugin/llplugincookiestore.h b/indra/llplugin/llplugincookiestore.h new file mode 100644 index 0000000000..a93f0c14f0 --- /dev/null +++ b/indra/llplugin/llplugincookiestore.h @@ -0,0 +1,125 @@ +/** + * @file llplugincookiestore.h + * @brief LLPluginCookieStore provides central storage for http cookies used by plugins + * + * @cond + * $LicenseInfo:firstyear=2010&license=viewergpl$ + * + * Copyright (c) 2010, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + * @endcond + */ + +#ifndef LL_LLPLUGINCOOKIESTORE_H +#define LL_LLPLUGINCOOKIESTORE_H + +#include "lldate.h" +#include <map> +#include <string> +#include <iostream> + +class LLPluginCookieStore +{ + LOG_CLASS(LLPluginCookieStore); +public: + LLPluginCookieStore(); + ~LLPluginCookieStore(); + + // gets all cookies currently in storage -- use when initializing a plugin + std::string getAllCookies(); + void writeAllCookies(std::ostream& s); + + // gets only persistent cookies (i.e. not session cookies) -- use when writing cookies to a file + std::string getPersistentCookies(); + void writePersistentCookies(std::ostream& s); + + // gets cookies which are marked as "changed" -- use when sending periodic updates to plugins + std::string getChangedCookies(bool clear_changed = true); + void writeChangedCookies(std::ostream& s, bool clear_changed = true); + + // (re)initializes internal data structures and bulk-sets cookies -- use when reading cookies from a file + void setAllCookies(const std::string &cookies, bool mark_changed = false); + void readAllCookies(std::istream& s, bool mark_changed = false); + + // sets one or more cookies (without reinitializing anything) -- use when receiving cookies from a plugin + void setCookies(const std::string &cookies, bool mark_changed = true); + void readCookies(std::istream& s, bool mark_changed = true); + + // sets one or more cookies (without reinitializing anything), supplying a hostname the cookies came from -- use when setting a cookie manually + void setCookiesFromHost(const std::string &cookies, const std::string &host, bool mark_changed = true); + + // quote or unquote a string as per the definition of 'quoted-string' in rfc2616 + static std::string quoteString(const std::string &s); + static std::string unquoteString(const std::string &s); + +private: + + void setOneCookie(const std::string &s, std::string::size_type cookie_start, std::string::size_type cookie_end, bool mark_changed, const std::string &host = LLStringUtil::null); + + class Cookie + { + public: + static Cookie *createFromString(const std::string &s, std::string::size_type cookie_start = 0, std::string::size_type cookie_end = std::string::npos, const std::string &host = LLStringUtil::null); + + // Construct a string from the cookie that uniquely represents it, to be used as a key in a std::map. + std::string getKey() const; + + const std::string &getCookie() const { return mCookie; }; + bool isSessionCookie() const { return mDate.isNull(); }; + + bool isDead() const { return mDead; }; + void setDead(bool dead) { mDead = dead; }; + + bool isChanged() const { return mChanged; }; + void setChanged(bool changed) { mChanged = changed; }; + + const LLDate &getDate() const { return mDate; }; + + private: + Cookie(const std::string &s, std::string::size_type cookie_start = 0, std::string::size_type cookie_end = std::string::npos); + bool parse(const std::string &host); + std::string::size_type findFieldEnd(std::string::size_type start = 0, std::string::size_type end = std::string::npos); + bool matchName(std::string::size_type start, std::string::size_type end, const char *name); + + std::string mCookie; // The full cookie, in RFC 2109 string format + LLDate mDate; // The expiration date of the cookie. For session cookies, this will be a null date (mDate.isNull() is true). + // Start/end indices of various parts of the cookie string. Stored as indices into the string to save space and time. + std::string::size_type mNameStart, mNameEnd; + std::string::size_type mValueStart, mValueEnd; + std::string::size_type mDomainStart, mDomainEnd; + std::string::size_type mPathStart, mPathEnd; + bool mDead; + bool mChanged; + }; + + typedef std::map<std::string, Cookie*> cookie_map_t; + + cookie_map_t mCookies; + bool mHasChangedCookies; + + void clearCookies(); + void removeCookie(const std::string &key); +}; + +#endif // LL_LLPLUGINCOOKIESTORE_H diff --git a/indra/llplugin/llpluginprocesschild.cpp b/indra/llplugin/llpluginprocesschild.cpp index 9b43ec0e3e..ccaf95b36d 100644 --- a/indra/llplugin/llpluginprocesschild.cpp +++ b/indra/llplugin/llpluginprocesschild.cpp @@ -155,8 +155,6 @@ void LLPluginProcessChild::idle(void) { setState(STATE_PLUGIN_INITIALIZING); LLPluginMessage message("base", "init"); - message.setValue("user_data_path", mUserDataPath); - message.setValue("language_code", mLanguageCode); sendMessageToPlugin(message); } break; @@ -329,8 +327,6 @@ void LLPluginProcessChild::receiveMessageRaw(const std::string &message) if(message_name == "load_plugin") { mPluginFile = parsed.getValue("file"); - mUserDataPath = parsed.getValue("user_data_path"); - mLanguageCode = parsed.getValue("language_code"); } else if(message_name == "shm_add") { diff --git a/indra/llplugin/llpluginprocesschild.h b/indra/llplugin/llpluginprocesschild.h index af76ec1fa5..0e5e85406a 100644 --- a/indra/llplugin/llpluginprocesschild.h +++ b/indra/llplugin/llpluginprocesschild.h @@ -98,9 +98,6 @@ private: std::string mPluginFile; - std::string mUserDataPath; - std::string mLanguageCode; - LLPluginInstance *mInstance; typedef std::map<std::string, LLPluginSharedMemory*> sharedMemoryRegionsType; diff --git a/indra/llplugin/llpluginprocessparent.cpp b/indra/llplugin/llpluginprocessparent.cpp index 0ce2c759ba..895c858979 100644 --- a/indra/llplugin/llpluginprocessparent.cpp +++ b/indra/llplugin/llpluginprocessparent.cpp @@ -98,15 +98,12 @@ void LLPluginProcessParent::errorState(void) setState(STATE_ERROR); } -void LLPluginProcessParent::init(const std::string &launcher_filename, const std::string &plugin_filename, bool debug, const std::string &user_data_path, const std::string &language_code) +void LLPluginProcessParent::init(const std::string &launcher_filename, const std::string &plugin_filename, bool debug) { mProcess.setExecutable(launcher_filename); mPluginFile = plugin_filename; mCPUUsage = 0.0f; - mDebug = debug; - mUserDataPath = user_data_path; - mLanguageCode = language_code; - + mDebug = debug; setState(STATE_INITIALIZED); } @@ -363,8 +360,6 @@ void LLPluginProcessParent::idle(void) { LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_INTERNAL, "load_plugin"); message.setValue("file", mPluginFile); - message.setValue("user_data_path", mUserDataPath); - message.setValue("language_code", mLanguageCode); sendMessage(message); } diff --git a/indra/llplugin/llpluginprocessparent.h b/indra/llplugin/llpluginprocessparent.h index 23702814c8..cc6c513615 100644 --- a/indra/llplugin/llpluginprocessparent.h +++ b/indra/llplugin/llpluginprocessparent.h @@ -61,9 +61,7 @@ public: void init(const std::string &launcher_filename, const std::string &plugin_filename, - bool debug, - const std::string &user_data_path, - const std::string &language_code); + bool debug); void idle(void); @@ -148,9 +146,6 @@ private: std::string mPluginFile; - std::string mUserDataPath; - std::string mLanguageCode; - LLPluginProcessParentOwner *mOwner; typedef std::map<std::string, LLPluginSharedMemory*> sharedMemoryRegionsType; diff --git a/indra/llplugin/tests/llplugincookiestore_test.cpp b/indra/llplugin/tests/llplugincookiestore_test.cpp new file mode 100644 index 0000000000..020d9c1977 --- /dev/null +++ b/indra/llplugin/tests/llplugincookiestore_test.cpp @@ -0,0 +1,211 @@ +/** + * @file llplugincookiestore_test.cpp + * @brief Unit tests for LLPluginCookieStore. + * + * @cond + * $LicenseInfo:firstyear=2010&license=viewergpl$ + * + * Copyright (c) 2010, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + * @endcond + */ + +#include "linden_common.h" +#include "../test/lltut.h" + +#include "../llplugincookiestore.h" + + +namespace tut +{ + // Main Setup + struct LLPluginCookieStoreFixture + { + LLPluginCookieStoreFixture() + { + // We need dates definitively in the past and the future to properly test cookie expiration. + LLDate now = LLDate::now(); + LLDate past(now.secondsSinceEpoch() - (60.0 * 60.0 * 24.0)); // 1 day in the past + LLDate future(now.secondsSinceEpoch() + (60.0 * 60.0 * 24.0)); // 1 day in the future + + mPastString = past.asRFC1123(); + mFutureString = future.asRFC1123(); + } + + std::string mPastString; + std::string mFutureString; + LLPluginCookieStore mCookieStore; + + // List of cookies used for validation + std::list<std::string> mCookies; + + // This sets up mCookies from a string returned by one of the functions in LLPluginCookieStore + void setCookies(const std::string &cookies) + { + mCookies.clear(); + std::string::size_type start = 0; + + while(start != std::string::npos) + { + std::string::size_type end = cookies.find_first_of("\r\n", start); + if(end > start) + { + std::string line(cookies, start, end - start); + if(line.find_first_not_of("\r\n\t ") != std::string::npos) + { + // The line has some non-whitespace characters. Save it to the list. + mCookies.push_back(std::string(cookies, start, end - start)); + } + } + start = cookies.find_first_not_of("\r\n ", end); + } + } + + // This ensures that a cookie matching the one passed is in the list. + void ensureCookie(const std::string &cookie) + { + std::list<std::string>::iterator iter; + for(iter = mCookies.begin(); iter != mCookies.end(); iter++) + { + if(*iter == cookie) + { + // Found the cookie + // TODO: this should do a smarter equality comparison on the two cookies, instead of just a string compare. + return; + } + } + + // Didn't find this cookie + std::string message = "cookie not found: "; + message += cookie; + ensure(message, false); + } + + // This ensures that the number of cookies in the list matches what's expected. + void ensureSize(const std::string &message, size_t size) + { + if(mCookies.size() != size) + { + std::stringstream full_message; + + full_message << message << " (expected " << size << ", actual " << mCookies.size() << ")"; + ensure(full_message.str(), false); + } + } + }; + + typedef test_group<LLPluginCookieStoreFixture> factory; + typedef factory::object object; + factory tf("LLPluginCookieStore test"); + + // Tests + template<> template<> + void object::test<1>() + { + // Test 1: cookie uniqueness and update lists. + // Valid, distinct cookies: + + std::string cookie01 = "cookieA=value; domain=example.com; path=/"; + std::string cookie02 = "cookieB=value; domain=example.com; path=/"; // different name + std::string cookie03 = "cookieA=value; domain=foo.example.com; path=/"; // different domain + std::string cookie04 = "cookieA=value; domain=example.com; path=/bar/"; // different path + std::string cookie05 = "cookieC; domain=example.com; path=/"; // empty value + std::string cookie06 = "cookieD=value; domain=example.com; path=/; expires="; // different name, persistent cookie + cookie06 += mFutureString; + + mCookieStore.setCookies(cookie01); + mCookieStore.setCookies(cookie02); + mCookieStore.setCookies(cookie03); + mCookieStore.setCookies(cookie04); + mCookieStore.setCookies(cookie05); + mCookieStore.setCookies(cookie06); + + // Invalid cookies (these will get parse errors and not be added to the store) + + std::string badcookie01 = "cookieD=value; domain=example.com; path=/; foo=bar"; // invalid field name + std::string badcookie02 = "cookieE=value; path=/"; // no domain + + mCookieStore.setCookies(badcookie01); + mCookieStore.setCookies(badcookie02); + + // All cookies added so far should have been marked as "changed" + setCookies(mCookieStore.getChangedCookies()); + ensureSize("count of changed cookies", 6); + ensureCookie(cookie01); + ensureCookie(cookie02); + ensureCookie(cookie03); + ensureCookie(cookie04); + ensureCookie(cookie05); + ensureCookie(cookie06); + + // Save off the current state of the cookie store (we'll restore it later) + std::string savedCookies = mCookieStore.getAllCookies(); + + // Test replacing cookies + std::string cookie01a = "cookieA=newvalue; domain=example.com; path=/"; // updated value + std::string cookie02a = "cookieB=newvalue; domain=example.com; path=/; expires="; // remove cookie (by setting an expire date in the past) + cookie02a += mPastString; + + mCookieStore.setCookies(cookie01a); + mCookieStore.setCookies(cookie02a); + + // test for getting changed cookies + setCookies(mCookieStore.getChangedCookies()); + ensureSize("count of updated cookies", 2); + ensureCookie(cookie01a); + ensureCookie(cookie02a); + + // and for the state of the store after getting changed cookies + setCookies(mCookieStore.getAllCookies()); + ensureSize("count of valid cookies", 5); + ensureCookie(cookie01a); + ensureCookie(cookie03); + ensureCookie(cookie04); + ensureCookie(cookie05); + ensureCookie(cookie06); + + // Check that only the persistent cookie is returned here + setCookies(mCookieStore.getPersistentCookies()); + ensureSize("count of persistent cookies", 1); + ensureCookie(cookie06); + + // Restore the cookie store to a previous state and verify + mCookieStore.setAllCookies(savedCookies); + + // Since setAllCookies defaults to not marking cookies as changed, this list should be empty. + setCookies(mCookieStore.getChangedCookies()); + ensureSize("count of changed cookies after restore", 0); + + // Verify that the restore worked as it should have. + setCookies(mCookieStore.getAllCookies()); + ensureSize("count of restored cookies", 6); + ensureCookie(cookie01); + ensureCookie(cookie02); + ensureCookie(cookie03); + ensureCookie(cookie04); + ensureCookie(cookie05); + ensureCookie(cookie06); + } + +} diff --git a/indra/llrender/llfontgl.cpp b/indra/llrender/llfontgl.cpp index 768f042e69..d9e1976341 100644 --- a/indra/llrender/llfontgl.cpp +++ b/indra/llrender/llfontgl.cpp @@ -673,7 +673,7 @@ S32 LLFontGL::charFromPixelOffset(const llwchar* wchars, S32 begin_offset, F32 t target_x *= sScaleX; // max_chars is S32_MAX by default, so make sure we don't get overflow - const S32 max_index = begin_offset + llmin(S32_MAX - begin_offset, max_chars); + const S32 max_index = begin_offset + llmin(S32_MAX - begin_offset, max_chars - 1); F32 scaled_max_pixels = max_pixels * sScaleX; diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp index 36ac3ff119..3d8bd21609 100644 --- a/indra/llrender/llimagegl.cpp +++ b/indra/llrender/llimagegl.cpp @@ -1699,8 +1699,8 @@ void LLImageGL::updatePickMask(S32 width, S32 height, const U8* data_in) U32 size = pick_width * pick_height; size = (size + 7) / 8; // pixelcount-to-bits mPickMask = new U8[size]; - mPickMaskWidth = pick_width; - mPickMaskHeight = pick_height; + mPickMaskWidth = pick_width - 1; + mPickMaskHeight = pick_height - 1; memset(mPickMask, 0, sizeof(U8) * size); @@ -1743,20 +1743,18 @@ BOOL LLImageGL::getMask(const LLVector2 &tc) llassert(false); } - llassert(mPickMaskWidth > 0 && mPickMaskHeight > 0); - S32 x = llfloor(u * mPickMaskWidth); S32 y = llfloor(v * mPickMaskHeight); - if (LL_UNLIKELY(x >= mPickMaskWidth)) + if (LL_UNLIKELY(x > mPickMaskWidth)) { LL_WARNS_ONCE("render") << "Ooh, width overrun on pick mask read, that coulda been bad." << LL_ENDL; - x = llmax(0, mPickMaskWidth-1); + x = llmax((U16)0, mPickMaskWidth); } - if (LL_UNLIKELY(y >= mPickMaskHeight)) + if (LL_UNLIKELY(y > mPickMaskHeight)) { LL_WARNS_ONCE("render") << "Ooh, height overrun on pick mask read, that woulda been bad." << LL_ENDL; - y = llmax(0, mPickMaskHeight-1); + y = llmax((U16)0, mPickMaskHeight); } S32 idx = y*mPickMaskWidth+x; diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp index 656f690db5..c3540a717c 100644 --- a/indra/llrender/llrender.cpp +++ b/indra/llrender/llrender.cpp @@ -121,6 +121,8 @@ void LLTexUnit::refreshState(void) // We set dirty to true so that the tex unit knows to ignore caching // and we reset the cached tex unit state + gGL.flush(); + glActiveTextureARB(GL_TEXTURE0_ARB + mIndex); if (mCurrTexType != TT_NONE) { @@ -150,6 +152,7 @@ void LLTexUnit::activate(void) if ((S32)gGL.mCurrTextureUnitIndex != mIndex || gGL.mDirty) { + gGL.flush(); glActiveTextureARB(GL_TEXTURE0_ARB + mIndex); gGL.mCurrTextureUnitIndex = mIndex; } @@ -181,6 +184,7 @@ void LLTexUnit::disable(void) { activate(); unbind(mCurrTexType); + gGL.flush(); glDisable(sGLTextureType[mCurrTexType]); mCurrTexType = TT_NONE; } @@ -386,6 +390,8 @@ void LLTexUnit::setTextureAddressMode(eTextureAddressMode mode) { if (mIndex < 0 || mCurrTexture == 0) return; + gGL.flush(); + activate(); glTexParameteri (sGLTextureType[mCurrTexType], GL_TEXTURE_WRAP_S, sGLAddressMode[mode]); @@ -400,6 +406,8 @@ void LLTexUnit::setTextureFilteringOption(LLTexUnit::eTextureFilterOptions optio { if (mIndex < 0 || mCurrTexture == 0) return; + gGL.flush(); + if (option == TFO_POINT) { glTexParameteri(sGLTextureType[mCurrTexType], GL_TEXTURE_MAG_FILTER, GL_NEAREST); @@ -567,6 +575,7 @@ void LLTexUnit::setTextureCombiner(eTextureBlendOp op, eTextureBlendSrc src1, eT if (mCurrBlendType != TB_COMBINE || gGL.mDirty) { mCurrBlendType = TB_COMBINE; + gGL.flush(); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); } @@ -577,6 +586,8 @@ void LLTexUnit::setTextureCombiner(eTextureBlendOp op, eTextureBlendSrc src1, eT return; } + gGL.flush(); + // Get the gl source enums according to the eTextureBlendSrc sources passed in GLint source1 = getTextureSource(src1); GLint source2 = getTextureSource(src2); @@ -709,6 +720,7 @@ void LLTexUnit::setColorScale(S32 scale) if (mCurrColorScale != scale || gGL.mDirty) { mCurrColorScale = scale; + gGL.flush(); glTexEnvi( GL_TEXTURE_ENV, GL_RGB_SCALE, scale ); } } @@ -718,6 +730,7 @@ void LLTexUnit::setAlphaScale(S32 scale) if (mCurrAlphaScale != scale || gGL.mDirty) { mCurrAlphaScale = scale; + gGL.flush(); glTexEnvi( GL_TEXTURE_ENV, GL_ALPHA_SCALE, scale ); } } @@ -853,7 +866,15 @@ void LLRender::scaleUI(F32 x, F32 y, F32 z) void LLRender::pushUIMatrix() { - mUIOffset.push_front(mUIOffset.front()); + if (mUIOffset.empty()) + { + mUIOffset.push_front(LLVector3(0,0,0)); + } + else + { + mUIOffset.push_front(mUIOffset.front()); + } + if (mUIScale.empty()) { mUIScale.push_front(LLVector3(1,1,1)); @@ -1105,6 +1126,33 @@ void LLRender::flush() sUICalls++; sUIVerts += mCount; } + + if (gDebugGL) + { + if (mMode == LLRender::QUADS) + { + if (mCount%4 != 0) + { + llerrs << "Incomplete quad rendered." << llendl; + } + } + + if (mMode == LLRender::TRIANGLES) + { + if (mCount%3 != 0) + { + llerrs << "Incomplete triangle rendered." << llendl; + } + } + + if (mMode == LLRender::LINES) + { + if (mCount%2 != 0) + { + llerrs << "Incomplete line rendered." << llendl; + } + } + } mBuffer->setBuffer(immediate_mask); mBuffer->drawArrays(mMode, 0, mCount); diff --git a/indra/llui/llaccordionctrltab.cpp b/indra/llui/llaccordionctrltab.cpp index 1067c3f1d5..e12776f83a 100644 --- a/indra/llui/llaccordionctrltab.cpp +++ b/indra/llui/llaccordionctrltab.cpp @@ -826,9 +826,6 @@ void LLAccordionCtrlTab::draw() LLLocalClipRect clip(child_rect); drawChild(root_rect,mContainerPanel); } - - - gGL.getTexUnit(0)->disable(); } } diff --git a/indra/llui/llaccordionctrltab.h b/indra/llui/llaccordionctrltab.h index 462ccc6d53..4b8b22405e 100644 --- a/indra/llui/llaccordionctrltab.h +++ b/indra/llui/llaccordionctrltab.h @@ -35,8 +35,9 @@ #include <string> #include "llrect.h" +#include "lluictrl.h" +#include "lluicolor.h" -class LLUICtrl; class LLUICtrlFactory; class LLUIImage; class LLButton; diff --git a/indra/llui/llbutton.h b/indra/llui/llbutton.h index 59b551a16d..6a1e3a9425 100644 --- a/indra/llui/llbutton.h +++ b/indra/llui/llbutton.h @@ -217,7 +217,7 @@ public: void setImageOverlay(const LLUUID& image_id, LLFontGL::HAlign alignment = LLFontGL::HCENTER, const LLColor4& color = LLColor4::white); LLPointer<LLUIImage> getImageOverlay() { return mImageOverlay; } LLFontGL::HAlign getImageOverlayHAlign() const { return mImageOverlayAlignment; } - + void autoResize(); // resize with label of current btn state void resize(LLUIString label); // resize with label input void setLabel( const LLStringExplicit& label); diff --git a/indra/llui/llcombobox.cpp b/indra/llui/llcombobox.cpp index c1d512e148..3a8efadaa4 100644 --- a/indra/llui/llcombobox.cpp +++ b/indra/llui/llcombobox.cpp @@ -706,14 +706,17 @@ void LLComboBox::onListMouseUp() void LLComboBox::onItemSelected(const LLSD& data) { - setValue(data); - - if (mAllowTextEntry && mLastSelectedIndex != -1) + mLastSelectedIndex = getCurrentIndex(); + if (mLastSelectedIndex != -1) { - gFocusMgr.setKeyboardFocus(mTextEntry); - mTextEntry->selectAll(); - } + setLabel(getSelectedItemLabel()); + if (mAllowTextEntry) + { + gFocusMgr.setKeyboardFocus(mTextEntry); + mTextEntry->selectAll(); + } + } // hiding the list reasserts the old value stored in the text editor/dropdown button hideList(); @@ -1080,24 +1083,6 @@ LLIconsComboBox::LLIconsComboBox(const LLIconsComboBox::Params& p) mLabelColumnIndex(p.label_column) {} -void LLIconsComboBox::setValue(const LLSD& value) -{ - BOOL found = mList->selectByValue(value); - if (found) - { - LLScrollListItem* item = mList->getFirstSelected(); - if (item) - { - setLabel(getSelectedItemLabel()); - } - mLastSelectedIndex = mList->getFirstSelectedIndex(); - } - else - { - mLastSelectedIndex = -1; - } -} - const std::string LLIconsComboBox::getSelectedItemLabel(S32 column) const { mButton->setImageOverlay(LLComboBox::getSelectedItemLabel(mIconColumnIndex), mButton->getImageOverlayHAlign()); diff --git a/indra/llui/llcombobox.h b/indra/llui/llcombobox.h index 965061ead2..f0bd432f3a 100644 --- a/indra/llui/llcombobox.h +++ b/indra/llui/llcombobox.h @@ -221,7 +221,6 @@ protected: LLPointer<LLUIImage> mArrowImage; LLUIString mLabel; BOOL mHasAutocompletedText; - S32 mLastSelectedIndex; private: BOOL mAllowTextEntry; @@ -232,6 +231,7 @@ private: commit_callback_t mTextEntryCallback; commit_callback_t mSelectionCallback; boost::signals2::connection mTopLostSignalConnection; + S32 mLastSelectedIndex; }; // A combo box with icons for the list of items. @@ -247,7 +247,6 @@ public: Params(); }; - /*virtual*/ void setValue(const LLSD& value); /*virtual*/ const std::string getSelectedItemLabel(S32 column = 0) const; private: diff --git a/indra/llui/llflatlistview.cpp b/indra/llui/llflatlistview.cpp index 2e5aeec41d..bc34012267 100644 --- a/indra/llui/llflatlistview.cpp +++ b/indra/llui/llflatlistview.cpp @@ -243,7 +243,7 @@ LLUUID LLFlatListView::getSelectedUUID() const } } -void LLFlatListView::getSelectedUUIDs(std::vector<LLUUID>& selected_uuids) const +void LLFlatListView::getSelectedUUIDs(uuid_vec_t& selected_uuids) const { if (mSelectedItemPairs.empty()) return; diff --git a/indra/llui/llflatlistview.h b/indra/llui/llflatlistview.h index 92cb40332e..837fbb36b7 100644 --- a/indra/llui/llflatlistview.h +++ b/indra/llui/llflatlistview.h @@ -224,7 +224,7 @@ public: * Get LLUUIDs associated with selected items * @param selected_uuids An std::vector being populated with LLUUIDs associated with selected items */ - virtual void getSelectedUUIDs(std::vector<LLUUID>& selected_uuids) const; + virtual void getSelectedUUIDs(uuid_vec_t& selected_uuids) const; /** Get the top selected item */ virtual LLPanel* getSelectedItem() const; diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index 33895ac22a..a9accc0ba6 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -1354,7 +1354,6 @@ void LLFloater::bringToFront( S32 x, S32 y ) // virtual void LLFloater::setVisibleAndFrontmost(BOOL take_focus) { - LLUI::clearPopups(); setVisible(TRUE); setFrontmost(take_focus); } diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp index 0d56c5ed31..fb4a9d032d 100644 --- a/indra/llui/llmenugl.cpp +++ b/indra/llui/llmenugl.cpp @@ -3455,7 +3455,7 @@ LLView* const LLMenuHolderGL::getVisibleMenu() const for ( child_list_const_iter_t child_it = getChildList()->begin(); child_it != getChildList()->end(); ++child_it) { LLView* viewp = *child_it; - if (viewp->getVisible() && dynamic_cast<LLMenuBarGL*>(viewp) == NULL) + if (viewp->getVisible() && dynamic_cast<LLMenuGL*>(viewp) != NULL) { return viewp; } @@ -3478,8 +3478,7 @@ BOOL LLMenuHolderGL::hideMenus() for ( child_list_const_iter_t child_it = getChildList()->begin(); child_it != getChildList()->end(); ++child_it) { LLView* viewp = *child_it; - // clicks off of menu do not hide menu bar - if (dynamic_cast<LLMenuBarGL*>(viewp) == NULL && viewp->getVisible()) + if (dynamic_cast<LLMenuGL*>(viewp) != NULL && viewp->getVisible()) { viewp->setVisible(FALSE); } diff --git a/indra/llui/llmenugl.h b/indra/llui/llmenugl.h index 39d1986461..6f0f83d4b9 100644 --- a/indra/llui/llmenugl.h +++ b/indra/llui/llmenugl.h @@ -295,7 +295,7 @@ private: // class, by allowing another method to be specified which determines // if the menu item should consider itself checked as true or not. Be // careful that the provided callback is fast - it needs to be VERY -// FUCKING EFFICIENT, because it may need to be checked a lot. +// EFFICIENT because it may need to be checked a lot. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ class LLMenuItemCheckGL diff --git a/indra/llui/llmultifloater.cpp b/indra/llui/llmultifloater.cpp index 33d47a3f0e..4af9108329 100644 --- a/indra/llui/llmultifloater.cpp +++ b/indra/llui/llmultifloater.cpp @@ -352,6 +352,13 @@ BOOL LLMultiFloater::handleKeyHere(KEY key, MASK mask) if (floater && floater->canClose() && floater->isCloseable()) { floater->closeFloater(); + + // EXT-5695 (Tabbed IM window loses focus if close any tabs by Ctrl+W) + // bring back focus on tab container if there are any tab left + if(mTabContainer->getTabCount() > 0) + { + mTabContainer->setFocus(TRUE); + } } return TRUE; } diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp index 5816cef6af..d7424cf05a 100644 --- a/indra/llui/llnotifications.cpp +++ b/indra/llui/llnotifications.cpp @@ -402,7 +402,9 @@ LLNotification::LLNotification(const LLNotification::Params& p) : mRespondedTo(false), mPriority(p.priority), mCancelled(false), - mIgnored(false) + mIgnored(false), + mResponderObj(NULL), + mIsReusable(false) { if (p.functor.name.isChosen()) { @@ -416,6 +418,11 @@ LLNotification::LLNotification(const LLNotification::Params& p) : mTemporaryResponder = true; } + if(p.responder.isProvided()) + { + mResponderObj = p.responder; + } + mId.generate(); init(p.name, p.form_elements); } @@ -425,7 +432,9 @@ LLNotification::LLNotification(const LLSD& sd) : mTemporaryResponder(false), mRespondedTo(false), mCancelled(false), - mIgnored(false) + mIgnored(false), + mResponderObj(NULL), + mIsReusable(false) { mId.generate(); mSubstitutions = sd["substitutions"]; @@ -452,6 +461,7 @@ LLSD LLNotification::asLLSD() output["expiry"] = mExpiresAt; output["priority"] = (S32)mPriority; output["responseFunctor"] = mResponseFunctorName; + output["reusable"] = mIsReusable; return output; } @@ -479,7 +489,9 @@ void LLNotification::updateFrom(LLNotificationPtr other) mForm = other->mForm; mResponseFunctorName = other->mResponseFunctorName; mRespondedTo = other->mRespondedTo; + mResponse = other->mResponse; mTemporaryResponder = other->mTemporaryResponder; + mIsReusable = other->isReusable(); update(); } @@ -556,14 +568,16 @@ std::string LLNotification::getSelectedOptionName(const LLSD& response) void LLNotification::respond(const LLSD& response) { + // *TODO may remove mRespondedTo and use mResponce.isDefined() in isRespondedTo() mRespondedTo = true; + mResponse = response; // look up the functor LLNotificationFunctorRegistry::ResponseFunctor functor = LLNotificationFunctorRegistry::instance().getFunctor(mResponseFunctorName); // and then call it functor(asLLSD(), response); - if (mTemporaryResponder) + if (mTemporaryResponder && !isReusable()) { LLNotificationFunctorRegistry::instance().unregisterFunctor(mResponseFunctorName); mResponseFunctorName = ""; @@ -597,6 +611,16 @@ void LLNotification::setResponseFunctor(std::string const &responseFunctorName) mTemporaryResponder = false; } +void LLNotification::setResponseFunctor(const LLNotificationFunctorRegistry::ResponseFunctor& cb) +{ + if(mTemporaryResponder) + { + LLNotificationFunctorRegistry::instance().unregisterFunctor(mResponseFunctorName); + } + + LLNotificationFunctorRegistry::instance().registerFunctor(mResponseFunctorName, cb); +} + bool LLNotification::payloadContainsAll(const std::vector<std::string>& required_fields) const { for(std::vector<std::string>::const_iterator required_fields_it = required_fields.begin(); @@ -856,8 +880,12 @@ bool LLNotificationChannelBase::updateItem(const LLSD& payload, LLNotificationPt if (wasFound) { abortProcessing = mChanged(payload); - mItems.erase(pNotification); - onDelete(pNotification); + // do not delete the notification to make LLChatHistory::appendMessage add notification panel to IM window + if( ! pNotification->isReusable() ) + { + mItems.erase(pNotification); + onDelete(pNotification); + } } } return abortProcessing; diff --git a/indra/llui/llnotifications.h b/indra/llui/llnotifications.h index 8d993b71d7..400491a154 100644 --- a/indra/llui/llnotifications.h +++ b/indra/llui/llnotifications.h @@ -296,6 +296,7 @@ public: Optional<LLSD> form_elements; Optional<LLDate> time_stamp; Optional<LLNotificationContext*> context; + Optional<void*> responder; struct Functor : public LLInitParam::Choice<Functor> { @@ -317,6 +318,7 @@ public: form_elements("form_elements") { time_stamp = LLDate::now(); + responder = NULL; } Params(const std::string& _name) @@ -329,6 +331,7 @@ public: functor.name = _name; name = _name; time_stamp = LLDate::now(); + responder = NULL; } }; @@ -341,9 +344,12 @@ private: LLDate mExpiresAt; bool mCancelled; bool mRespondedTo; // once the notification has been responded to, this becomes true + LLSD mResponse; bool mIgnored; ENotificationPriority mPriority; LLNotificationFormPtr mForm; + void* mResponderObj; + bool mIsReusable; // a reference to the template LLNotificationTemplatePtr mTemplatep; @@ -384,6 +390,8 @@ public: void setResponseFunctor(std::string const &responseFunctorName); + void setResponseFunctor(const LLNotificationFunctorRegistry::ResponseFunctor& cb); + typedef enum e_response_template_type { WITHOUT_DEFAULT_BUTTON, @@ -423,6 +431,10 @@ public: void respond(const LLSD& sd); + void* getResponder() { return mResponderObj; } + + void setResponder(void* responder) { mResponderObj = responder; } + void setIgnored(bool ignore); bool isCancelled() const @@ -435,6 +447,8 @@ public: return mRespondedTo; } + const LLSD& getResponse() { return mResponse; } + bool isIgnored() const { return mIgnored; @@ -504,6 +518,10 @@ public: { return mId; } + + bool isReusable() { return mIsReusable; } + + void setReusable(bool reusable) { mIsReusable = reusable; } // comparing two notifications normally means comparing them by UUID (so we can look them // up quickly this way) diff --git a/indra/llui/llradiogroup.cpp b/indra/llui/llradiogroup.cpp index 4087b484aa..e27792dc1d 100644 --- a/indra/llui/llradiogroup.cpp +++ b/indra/llui/llradiogroup.cpp @@ -106,7 +106,6 @@ LLRadioGroup::LLRadioGroup(const LLRadioGroup::Params& p) void LLRadioGroup::initFromParams(const Params& p) { - LLUICtrl::initFromParams(p); for (LLInitParam::ParamIterator<ItemParams>::const_iterator it = p.items().begin(); it != p.items().end(); ++it) @@ -124,6 +123,9 @@ void LLRadioGroup::initFromParams(const Params& p) LLRadioCtrl* item = LLUICtrlFactory::create<LLRadioCtrl>(item_params, this); mRadioButtons.push_back(item); } + + // call this *after* setting up mRadioButtons so we can handle setValue() calls + LLUICtrl::initFromParams(p); } @@ -138,10 +140,6 @@ BOOL LLRadioGroup::postBuild() { mRadioButtons[0]->setTabStop(true); } - if (mControlVariable) - { - setSelectedIndex(mControlVariable->getValue().asInteger()); - } return TRUE; } diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp index 18ec5b51dd..bf0866a655 100644 --- a/indra/llui/llscrolllistctrl.cpp +++ b/indra/llui/llscrolllistctrl.cpp @@ -630,9 +630,7 @@ void LLScrollListCtrl::calcColumnWidths() LLScrollListCell* cellp = (*iter)->getColumn(column->mIndex); if (!cellp) continue; - // get text value width only for text cells - column->mMaxContentWidth = cellp->isText() ? - llmax(LLFontGL::getFontSansSerifSmall()->getWidth(cellp->getValue().asString()) + mColumnPadding + COLUMN_TEXT_PADDING, column->mMaxContentWidth) : column->mMaxContentWidth; + column->mMaxContentWidth = llmax(LLFontGL::getFontSansSerifSmall()->getWidth(cellp->getValue().asString()) + mColumnPadding + COLUMN_TEXT_PADDING, column->mMaxContentWidth); } max_item_width += column->mMaxContentWidth; @@ -959,14 +957,14 @@ void LLScrollListCtrl::mouseOverHighlightNthItem(S32 target_index) } } -S32 LLScrollListCtrl::selectMultiple( std::vector<LLUUID> ids ) +S32 LLScrollListCtrl::selectMultiple( uuid_vec_t ids ) { item_list::iterator iter; S32 count = 0; for (iter = mItemList.begin(); iter != mItemList.end(); iter++) { LLScrollListItem* item = *iter; - std::vector<LLUUID>::iterator iditr; + uuid_vec_t::iterator iditr; for(iditr = ids.begin(); iditr != ids.end(); ++iditr) { if (item->getEnabled() && (item->getUUID() == (*iditr))) diff --git a/indra/llui/llscrolllistctrl.h b/indra/llui/llscrolllistctrl.h index ebdc82115f..1f0ef585db 100644 --- a/indra/llui/llscrolllistctrl.h +++ b/indra/llui/llscrolllistctrl.h @@ -379,7 +379,7 @@ public: BOOL getSortAscending() { return mSortColumns.empty() ? TRUE : mSortColumns.back().second; } BOOL hasSortOrder() const; - S32 selectMultiple( std::vector<LLUUID> ids ); + S32 selectMultiple( uuid_vec_t ids ); // conceptually const, but mutates mItemList void updateSort() const; // sorts a list without affecting the permanent sort order (so further list insertions can be unsorted, for example) diff --git a/indra/llui/llsearcheditor.h b/indra/llui/llsearcheditor.h index 714aca9337..785d0633dc 100644 --- a/indra/llui/llsearcheditor.h +++ b/indra/llui/llsearcheditor.h @@ -66,6 +66,8 @@ public: } }; + void setCommitOnFocusLost(BOOL b) { if (mSearchEditor) mSearchEditor->setCommitOnFocusLost(b); } + protected: LLSearchEditor(const Params&); friend class LLUICtrlFactory; diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index 851fb966ec..5f4b16ec9e 100644 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -246,7 +246,7 @@ LLTextBase::~LLTextBase() { // Menu, like any other LLUICtrl, is deleted by its parent - gMenuHolder - clearSegments(); + mSegments.clear(); } void LLTextBase::initFromParams(const LLTextBase::Params& p) @@ -350,6 +350,8 @@ void LLTextBase::drawSelectionBackground() S32 segment_line_start = segmentp->getStart() + segment_offset; S32 segment_line_end = llmin(segmentp->getEnd(), line_iter->mDocIndexEnd); + if (segment_line_start > segment_line_end) break; + S32 segment_width = 0; S32 segment_height = 0; @@ -361,8 +363,11 @@ void LLTextBase::drawSelectionBackground() selection_rect.mLeft += segment_width; } - // if selection spans end of current segment... - if (selection_right > segment_line_end) + // if selection_right == segment_line_end then that means we are the first character of the next segment + // or first character of the next line, in either case we want to add the length of the current segment + // to the selection rectangle and continue. + // if selection right > segment_line_end then selection spans end of current segment... + if (selection_right >= segment_line_end) { // extend selection slightly beyond end of line // to indicate selection of newline character (use "n" character to determine width) @@ -1813,11 +1818,18 @@ S32 LLTextBase::getDocIndexFromLocalCoord( S32 local_x, S32 local_y, BOOL round, const LLTextSegmentPtr segmentp = *line_seg_iter; S32 segment_line_start = segmentp->getStart() + line_seg_offset; - S32 segment_line_length = llmin(segmentp->getEnd(), line_iter->mDocIndexEnd - 1) - segment_line_start; + S32 segment_line_length = llmin(segmentp->getEnd(), line_iter->mDocIndexEnd) - segment_line_start; S32 text_width, text_height; - segmentp->getDimensions(line_seg_offset, segment_line_length, text_width, text_height); - if (local_x < start_x + text_width // cursor to left of right edge of text - || (hit_past_end_of_line && (segmentp->getEnd() >= line_iter->mDocIndexEnd - 1))) // or this segment wraps to next line + bool newline = segmentp->getDimensions(line_seg_offset, segment_line_length, text_width, text_height); + + // if we've reached a line of text *below* the mouse cursor, doc index is first character on that line + if (hit_past_end_of_line && local_y - mVisibleTextRect.mBottom + visible_region.mBottom > line_iter->mRect.mTop) + { + pos = segment_line_start; + break; + } + if (local_x < start_x + text_width // cursor to left of right edge of text + || newline) // or this line ends with a newline, set doc pos to newline char { // Figure out which character we're nearest to. S32 offset; @@ -1841,6 +1853,13 @@ S32 LLTextBase::getDocIndexFromLocalCoord( S32 local_x, S32 local_y, BOOL round, pos = segment_line_start + offset; break; } + else if (hit_past_end_of_line && segmentp->getEnd() >= line_iter->mDocIndexEnd - 1) + { + // segment wraps to next line, so just set doc pos to start of next line (represented by mDocIndexEnd) + pos = llmin(getLength(), line_iter->mDocIndexEnd); + break; + } + start_x += text_width; } diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp index 5121ef5351..b049895526 100644 --- a/indra/llui/llui.cpp +++ b/indra/llui/llui.cpp @@ -207,7 +207,7 @@ void gl_rect_2d(S32 left, S32 top, S32 right, S32 bottom, BOOL filled ) // Counterclockwise quad will face the viewer if( filled ) - { + { gGL.begin( LLRender::QUADS ); gGL.vertex2i(left, top); gGL.vertex2i(left, bottom); diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp index 35428e4227..e8e3459673 100644 --- a/indra/llui/llurlentry.cpp +++ b/indra/llui/llurlentry.cpp @@ -310,7 +310,6 @@ LLUrlEntryAgent::LLUrlEntryAgent() boost::regex::perl|boost::regex::icase); mMenuName = "menu_url_agent.xml"; mIcon = "Generic_Person"; - mTooltip = LLTrans::getString("TooltipAgentUrl"); mColor = LLUIColorTable::instance().getColor("AgentLinkColor"); } @@ -323,6 +322,38 @@ void LLUrlEntryAgent::onAgentNameReceived(const LLUUID& id, callObservers(id.asString(), first + " " + last); } +std::string LLUrlEntryAgent::getTooltip(const std::string &string) const +{ + // return a tooltip corresponding to the URL type instead of the generic one + std::string url = getUrl(string); + + if (LLStringUtil::endsWith(url, "/mute")) + { + return LLTrans::getString("TooltipAgentMute"); + } + if (LLStringUtil::endsWith(url, "/unmute")) + { + return LLTrans::getString("TooltipAgentUnmute"); + } + if (LLStringUtil::endsWith(url, "/im")) + { + return LLTrans::getString("TooltipAgentIM"); + } + if (LLStringUtil::endsWith(url, "/pay")) + { + return LLTrans::getString("TooltipAgentPay"); + } + if (LLStringUtil::endsWith(url, "/offerteleport")) + { + return LLTrans::getString("TooltipAgentOfferTeleport"); + } + if (LLStringUtil::endsWith(url, "/requestfriend")) + { + return LLTrans::getString("TooltipAgentRequestFriend"); + } + return LLTrans::getString("TooltipAgentUrl"); +} + std::string LLUrlEntryAgent::getLabel(const std::string &url, const LLUrlLabelCallback &cb) { if (!gCacheName) @@ -346,6 +377,31 @@ std::string LLUrlEntryAgent::getLabel(const std::string &url, const LLUrlLabelCa } else if (gCacheName->getFullName(agent_id, full_name)) { + // customize label string based on agent SLapp suffix + if (LLStringUtil::endsWith(url, "/mute")) + { + return LLTrans::getString("SLappAgentMute") + " " + full_name; + } + if (LLStringUtil::endsWith(url, "/unmute")) + { + return LLTrans::getString("SLappAgentUnmute") + " " + full_name; + } + if (LLStringUtil::endsWith(url, "/im")) + { + return LLTrans::getString("SLappAgentIM") + " " + full_name; + } + if (LLStringUtil::endsWith(url, "/pay")) + { + return LLTrans::getString("SLappAgentPay") + " " + full_name; + } + if (LLStringUtil::endsWith(url, "/offerteleport")) + { + return LLTrans::getString("SLappAgentOfferTeleport") + " " + full_name; + } + if (LLStringUtil::endsWith(url, "/requestfriend")) + { + return LLTrans::getString("SLappAgentRequestFriend") + " " + full_name; + } return full_name; } else diff --git a/indra/llui/llurlentry.h b/indra/llui/llurlentry.h index c947ef7259..84d0968779 100644 --- a/indra/llui/llurlentry.h +++ b/indra/llui/llurlentry.h @@ -169,6 +169,7 @@ class LLUrlEntryAgent : public LLUrlEntryBase public: LLUrlEntryAgent(); /*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb); + /*virtual*/ std::string getTooltip(const std::string &string) const; private: void onAgentNameReceived(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group); diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp index d34083a384..781c111474 100644 --- a/indra/llui/llview.cpp +++ b/indra/llui/llview.cpp @@ -152,7 +152,7 @@ LLView::~LLView() //llinfos << "Deleting view " << mName << ":" << (void*) this << llendl; if (LLView::sIsDrawing) { - llwarns << "Deleting view " << mName << " during UI draw() phase" << llendl; + lldebugs << "Deleting view " << mName << " during UI draw() phase" << llendl; } // llassert(LLView::sIsDrawing == FALSE); @@ -1325,7 +1325,6 @@ void LLView::drawChildren() localRectToScreen(viewp->getRect(),&screenRect); if ( rootRect.overlaps(screenRect) && LLUI::sDirtyRect.overlaps(screenRect)) { - glMatrixMode(GL_MODELVIEW); LLUI::pushMatrix(); { LLUI::translate((F32)viewp->getRect().mLeft, (F32)viewp->getRect().mBottom, 0.f); @@ -1349,8 +1348,6 @@ void LLView::drawChildren() } --sDepth; } - - gGL.getTexUnit(0)->disable(); } void LLView::dirtyRect() diff --git a/indra/llwindow/llwindow.cpp b/indra/llwindow/llwindow.cpp index b77deb003f..1c6c9e6e9d 100644 --- a/indra/llwindow/llwindow.cpp +++ b/indra/llwindow/llwindow.cpp @@ -407,30 +407,3 @@ BOOL LLWindowManager::isWindowValid(LLWindow *window) { return sWindowList.find(window) != sWindowList.end(); } - -S32 LLDisplayInfo::getDisplayWidth() const -{ -#if LL_WINDOWS - return LLWindowWin32::getDisplayWidth(); -#elif LL_DARWIN - return LLWindowMacOSX::getDisplayWidth(); -#elif LL_SDL - return LLWindowSDL::getDisplayWidth(); -#else - return 1024; //*FIXME -#endif -} - -S32 LLDisplayInfo::getDisplayHeight() const -{ -#if LL_WINDOWS - return LLWindowWin32::getDisplayHeight(); -#elif LL_DARWIN - return LLWindowMacOSX::getDisplayHeight(); -#elif LL_SDL - return LLWindowSDL::getDisplayHeight(); -#else - return 768; //*FIXME -#endif -} - diff --git a/indra/llwindow/llwindow.h b/indra/llwindow/llwindow.h index b769f5071b..52132c38d3 100644 --- a/indra/llwindow/llwindow.h +++ b/indra/llwindow/llwindow.h @@ -160,7 +160,7 @@ public: virtual void setLanguageTextInput( const LLCoordGL & pos ) {}; virtual void updateLanguageTextInputArea() {} virtual void interruptLanguageTextInput() {} - virtual void spawnWebBrowser(const std::string& escaped_url) {}; + virtual void spawnWebBrowser(const std::string& escaped_url, bool async) {}; static std::vector<std::string> getDynamicFallbackFontList(); @@ -281,19 +281,4 @@ extern const std::string gURLProtocolWhitelistHandler[]; void simpleEscapeString ( std::string& stringIn ); -//============================================================================= -// -// CLASS LLDisplayInfo -class LLDisplayInfo - -/*! @brief Class to query the information about some display settings -*/ -{ -public: - LLDisplayInfo(){}; ///< Default constructor - - S32 getDisplayWidth() const; ///< display width - S32 getDisplayHeight() const; ///< display height -}; - #endif // _LL_window_h_ diff --git a/indra/llwindow/llwindowmacosx-objc.h b/indra/llwindow/llwindowmacosx-objc.h index ed8c874dcb..ed5d7b1e74 100644 --- a/indra/llwindow/llwindowmacosx-objc.h +++ b/indra/llwindow/llwindowmacosx-objc.h @@ -40,5 +40,4 @@ void setupCocoa(); CursorRef createImageCursor(const char *fullpath, int hotspotX, int hotspotY); OSErr releaseImageCursor(CursorRef ref); OSErr setImageCursor(CursorRef ref); -void getScreenSize(int* width, int* height); -void getVisibleScreen(int *x, int *y, int* width, int* height); + diff --git a/indra/llwindow/llwindowmacosx-objc.mm b/indra/llwindow/llwindowmacosx-objc.mm index 5cab2619fd..59b25e1726 100644 --- a/indra/llwindow/llwindowmacosx-objc.mm +++ b/indra/llwindow/llwindowmacosx-objc.mm @@ -116,22 +116,3 @@ OSErr setImageCursor(CursorRef ref) return noErr; } -void getScreenSize(int* width, int* height) -{ - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - NSRect screen_rect = [[NSScreen mainScreen] frame]; - if (width) *width = (int)(screen_rect.size.width); - if (height) *height = (int)(screen_rect.size.height); - [pool release]; -} - -void getVisibleScreen(int *x, int *y, int* width, int* height) -{ - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - NSRect visible_rect = [[NSScreen mainScreen] visibleFrame]; - if (width) *width = (int)(visible_rect.size.width); - if (height) *height = (int)(visible_rect.size.height); - if (x) *x = (int)(visible_rect.origin.x); - if (y) *y = (int)(visible_rect.origin.y); - [pool release]; -} diff --git a/indra/llwindow/llwindowmacosx.cpp b/indra/llwindow/llwindowmacosx.cpp index 924acaf148..7026a3f7a6 100644 --- a/indra/llwindow/llwindowmacosx.cpp +++ b/indra/llwindow/llwindowmacosx.cpp @@ -1122,33 +1122,7 @@ BOOL LLWindowMacOSX::getMaximized() BOOL LLWindowMacOSX::maximize() { - if (mWindow) - { - // *HACK: Because Mac OSX doesn't have a concept of a "maximized" window, we just - // stretch it out to the visible screen size. - Rect win_rect; - - int visible_x; - int visible_y; - int visible_width; - int visible_height; - int screen_width; - int screen_height; - - getScreenSize(&screen_width, &screen_height); - getVisibleScreen(&visible_x, &visible_y, &visible_width, &visible_height); - - int mac_os_menu_bar_height = screen_height - (visible_height + visible_y); - ::SetRect(&win_rect, - visible_x, - mac_os_menu_bar_height, - visible_width + visible_x, - visible_height + mac_os_menu_bar_height); - - ::SetWindowBounds(mWindow, kWindowStructureRgn, &win_rect); - - return TRUE; - } + // TODO return FALSE; } @@ -2807,6 +2781,9 @@ const char* cursorIDToName(int id) case UI_CURSOR_TOOLPAUSE: return "UI_CURSOR_TOOLPAUSE"; case UI_CURSOR_TOOLMEDIAOPEN: return "UI_CURSOR_TOOLMEDIAOPEN"; case UI_CURSOR_PIPETTE: return "UI_CURSOR_PIPETTE"; + case UI_CURSOR_TOOLSIT: return "UI_CURSOR_TOOLSIT"; + case UI_CURSOR_TOOLBUY: return "UI_CURSOR_TOOLBUY"; + case UI_CURSOR_TOOLOPEN: return "UI_CURSOR_TOOLOPEN"; } llerrs << "cursorIDToName: unknown cursor id" << id << llendl; @@ -2909,6 +2886,9 @@ void LLWindowMacOSX::setCursor(ECursorType cursor) case UI_CURSOR_TOOLPLAY: case UI_CURSOR_TOOLPAUSE: case UI_CURSOR_TOOLMEDIAOPEN: + case UI_CURSOR_TOOLSIT: + case UI_CURSOR_TOOLBUY: + case UI_CURSOR_TOOLOPEN: result = setImageCursor(gCursors[cursor]); break; @@ -2950,6 +2930,9 @@ void LLWindowMacOSX::initCursors() initPixmapCursor(UI_CURSOR_TOOLPLAY, 1, 1); initPixmapCursor(UI_CURSOR_TOOLPAUSE, 1, 1); initPixmapCursor(UI_CURSOR_TOOLMEDIAOPEN, 1, 1); + initPixmapCursor(UI_CURSOR_TOOLSIT, 20, 15); + initPixmapCursor(UI_CURSOR_TOOLBUY, 20, 15); + initPixmapCursor(UI_CURSOR_TOOLOPEN, 20, 15); initPixmapCursor(UI_CURSOR_SIZENWSE, 10, 10); initPixmapCursor(UI_CURSOR_SIZENESW, 10, 10); @@ -3195,7 +3178,7 @@ S32 OSMessageBoxMacOSX(const std::string& text, const std::string& caption, U32 // Open a URL with the user's default web browser. // Must begin with protocol identifier. -void LLWindowMacOSX::spawnWebBrowser(const std::string& escaped_url) +void LLWindowMacOSX::spawnWebBrowser(const std::string& escaped_url, bool async) { bool found = false; S32 i; @@ -3490,26 +3473,6 @@ MASK LLWindowMacOSX::modifiersToMask(SInt16 modifiers) return mask; } -// static -S32 LLWindowMacOSX::getDisplayWidth() -{ - S32 width = 1024; - // Need to invoke cocoa before use getScreenSize() - setupCocoa(); - getScreenSize(&width, NULL); - return width; -} - -// static -S32 LLWindowMacOSX::getDisplayHeight() -{ - S32 height = 768; - // Need to invoke cocoa before use getScreenSize() - setupCocoa(); - getScreenSize(NULL, &height); - return height; -} - #if LL_OS_DRAGDROP_ENABLED OSErr LLWindowMacOSX::dragTrackingHandler(DragTrackingMessage message, WindowRef theWindow, diff --git a/indra/llwindow/llwindowmacosx.h b/indra/llwindow/llwindowmacosx.h index 86036a261c..5ac74bb004 100644 --- a/indra/llwindow/llwindowmacosx.h +++ b/indra/llwindow/llwindowmacosx.h @@ -116,15 +116,13 @@ public: /*virtual*/ void allowLanguageTextInput(LLPreeditor *preeditor, BOOL b); /*virtual*/ void interruptLanguageTextInput(); - /*virtual*/ void spawnWebBrowser(const std::string& escaped_url); + /*virtual*/ void spawnWebBrowser(const std::string& escaped_url, bool async); static std::vector<std::string> getDynamicFallbackFontList(); // Provide native key event data /*virtual*/ LLSD getNativeKeyData(); - static S32 getDisplayWidth(); - static S32 getDisplayHeight(); protected: LLWindowMacOSX(LLWindowCallbacks* callbacks, diff --git a/indra/llwindow/llwindowsdl.cpp b/indra/llwindow/llwindowsdl.cpp index cb4e04511c..399d284402 100644 --- a/indra/llwindow/llwindowsdl.cpp +++ b/indra/llwindow/llwindowsdl.cpp @@ -187,47 +187,6 @@ Display* LLWindowSDL::get_SDL_Display(void) } #endif // LL_X11 -// static -S32 LLWindowSDL::getDisplayWidth() -{ -#if LL_GTK - if (LLWindowSDL::ll_try_gtk_init()) - { - return gdk_screen_width(); - } -#endif // LL_GTK - -#if LL_X11 - Display *display = XOpenDisplay(NULL); - int screen_num = DefaultScreen(display); - S32 width = DisplayWidth(display, screen_num); - XCloseDisplay(display); - return width; -#endif //LL_X11 - - return 1024; -} - -// static -S32 LLWindowSDL::getDisplayHeight() -{ -#if LL_GTK - if (LLWindowSDL::ll_try_gtk_init()) - { - return gdk_screen_height(); - } -#endif // LL_GTK - -#if LL_X11 - Display *display = XOpenDisplay(NULL); - int screen_num = DefaultScreen(display); - S32 height = DisplayHeight(display, screen_num); - XCloseDisplay(display); - return height; -#endif //LL_X11 - - return 768; -} LLWindowSDL::LLWindowSDL(LLWindowCallbacks* callbacks, const std::string& title, S32 x, S32 y, S32 width, @@ -950,68 +909,7 @@ BOOL LLWindowSDL::getMaximized() if (mWindow) { -#if LL_X11 - if (mSDL_Display) - { - maybe_lock_display(); - - // Return data in the specified format, XA_ATOM. - U8* prop; - // Actual format of the property. - int format; - // Actual number of items stored in the prop return data. - unsigned long nitems; - // Number of bytes remaining to be read in the property if a partial read was performed. - unsigned long bytes_after; - // Atom identifier that defines the actual type of the property. - Atom type; - - // Atom used to obtain list of hints describing the window state. - Atom wm_state = XInternAtom(mSDL_Display, "_NET_WM_STATE", False); - - // Atoms indicates that the window is vertically/horizontally maximized. - Atom max_vert = XInternAtom(mSDL_Display, "_NET_WM_STATE_MAXIMIZED_VERT", False); - Atom max_horz = XInternAtom(mSDL_Display, "_NET_WM_STATE_MAXIMIZED_HORZ", False); - - // How many atoms in which we interested are present in list of hints. - U32 pass = 0; - - do - { - nitems = 0; - bytes_after = 0; - type = None; - if ( (XGetWindowProperty (mSDL_Display, - mSDL_XWindowID, - wm_state, - 0, UINT_MAX, - False, XA_ATOM, - &type, &format, - &nitems, &bytes_after, - &prop) == Success) - && type != None ) - { - Atom *atoms = (Atom *)prop; - for (unsigned long i=0; i<nitems; ++i) - { - if (atoms[i] == max_horz) - ++pass; - else if (atoms[i] == max_vert) - ++pass; - } - XFree (atoms); - } - else - { - break; - } - } while (bytes_after > 0); - - result = (pass == 2); - - maybe_unlock_display(); - } -#endif // LL_X11 + // TODO } return(result); @@ -1019,103 +917,7 @@ BOOL LLWindowSDL::getMaximized() BOOL LLWindowSDL::maximize() { -#if LL_X11 - if (mSDL_Display && !mFullscreen) - { - maybe_lock_display(); - - BOOL is_maximize_allowed = FALSE; - - // Check if maximize is allowed - { - // Return data in the specified format, XA_ATOM. - U8* prop; - // Actual format of the property. - int format; - // Actual number of items stored in the prop return data. - unsigned long nitems; - // Number of bytes remaining to be read in the property if a partial read was performed. - unsigned long bytes_after; - // Atom identifier that defines the actual type of the property. - Atom type; - - // Atom used to obtain a list of atoms indicating user operations that the Window Manager supports for this window. - Atom allowed_act = XInternAtom(mSDL_Display, "_NET_WM_ALLOWED_ACTIONS", False); - - // Atoms that indicates that the window may be vertically/horizontally maximized. - Atom max_vert_act = XInternAtom(mSDL_Display, "_NET_WM_ACTION_MAXIMIZE_HORZ", False); - Atom max_horz_act = XInternAtom(mSDL_Display, "_NET_WM_ACTION_MAXIMIZE_VERT", False); - - // How many atoms in which we interested are present in list of hints. - U32 pass = 0; - - do - { - nitems = 0; - bytes_after = 0; - type = None; - if ( (XGetWindowProperty (mSDL_Display, - mSDL_XWindowID, - allowed_act, - 0, UINT_MAX, - False, XA_ATOM, - &type, &format, - &nitems, &bytes_after, - &prop) == Success) - && type != None ) - { - Atom *atoms = (Atom *)prop; - for (unsigned long i=0; i<nitems; ++i) - { - if (atoms[i] == max_vert_act) - ++pass; - else if (atoms[i] == max_horz_act) - ++pass; - } - XFree (atoms); - } - else - { - break; - } - } while (bytes_after > 0); - - is_maximize_allowed = (pass == 2); - } - - // Send maximize event to X11 system - if (is_maximize_allowed) - { - XEvent xev; - - // Atom describing the window state. - Atom wm_state = XInternAtom(mSDL_Display, "_NET_WM_STATE", False); - - // Atoms indicates that the window is vertically/horizontally maximized. - Atom max_vert = XInternAtom(mSDL_Display, "_NET_WM_STATE_MAXIMIZED_VERT", False); - Atom max_horz = XInternAtom(mSDL_Display, "_NET_WM_STATE_MAXIMIZED_HORZ", False); - - memset(&xev, 0, sizeof(xev)); - xev.type = ClientMessage; - xev.xclient.window = mSDL_XWindowID; - xev.xclient.message_type = wm_state; - xev.xclient.format = 32; - xev.xclient.data.l[0] = 1; // add/set property - xev.xclient.data.l[1] = max_vert; - xev.xclient.data.l[2] = max_horz; - xev.xclient.data.l[3] = 0; - xev.xclient.data.l[4] = 0; - - XSendEvent(mSDL_Display, - DefaultRootWindow(mSDL_Display), - False, - SubstructureNotifyMask, &xev); - } - - maybe_unlock_display(); - return is_maximize_allowed; - } -#endif // LL_X11 + // TODO return FALSE; } @@ -2272,6 +2074,9 @@ void LLWindowSDL::initCursors() mSDLCursors[UI_CURSOR_TOOLPAUSE] = makeSDLCursorFromBMP("toolpause.BMP",0,0); mSDLCursors[UI_CURSOR_TOOLMEDIAOPEN] = makeSDLCursorFromBMP("toolmediaopen.BMP",0,0); mSDLCursors[UI_CURSOR_PIPETTE] = makeSDLCursorFromBMP("lltoolpipette.BMP",2,28); + mSDLCursors[UI_CURSOR_TOOLSIT] = makeSDLCursorFromBMP("toolsit.BMP",20,15); + mSDLCursors[UI_CURSOR_TOOLBUY] = makeSDLCursorFromBMP("toolbuy.BMP",20,15); + mSDLCursors[UI_CURSOR_TOOLOPEN] = makeSDLCursorFromBMP("toolopen.BMP",20,15); if (getenv("LL_ATI_MOUSE_CURSOR_BUG") != NULL) { llinfos << "Disabling cursor updating due to LL_ATI_MOUSE_CURSOR_BUG" << llendl; @@ -2663,7 +2468,7 @@ void exec_cmd(const std::string& cmd, const std::string& arg) // Open a URL with the user's default web browser. // Must begin with protocol identifier. -void LLWindowSDL::spawnWebBrowser(const std::string& escaped_url) +void LLWindowSDL::spawnWebBrowser(const std::string& escaped_url, bool async) { llinfos << "spawn_web_browser: " << escaped_url << llendl; @@ -2741,6 +2546,7 @@ std::vector<std::string> LLWindowSDL::getDynamicFallbackFontList() // Use libfontconfig to find us a nice ordered list of fallback fonts // specific to this system. std::string final_fallback("/usr/share/fonts/truetype/kochi/kochi-gothic.ttf"); + const int max_font_count_cutoff = 40; // fonts are expensive in the current system, don't enumerate an arbitrary number of them // Our 'ideal' font properties which define the sorting results. // slant=0 means Roman, index=0 means the first face in a font file // (the one we actually use), weight=80 means medium weight, @@ -2756,7 +2562,6 @@ std::vector<std::string> LLWindowSDL::getDynamicFallbackFontList() std::vector<std::string> rtns; FcFontSet *fs = NULL; FcPattern *sortpat = NULL; - int font_count = 0; llinfos << "Getting system font list from FontConfig..." << llendl; @@ -2800,12 +2605,13 @@ std::vector<std::string> LLWindowSDL::getDynamicFallbackFontList() FcPatternDestroy(sortpat); } + int found_font_count = 0; if (fs) { // Get the full pathnames to the fonts, where available, // which is what we really want. - int i; - for (i=0; i<fs->nfont; ++i) + found_font_count = fs->nfont; + for (int i=0; i<fs->nfont; ++i) { FcChar8 *filename; if (FcResultMatch == FcPatternGetString(fs->fonts[i], @@ -2814,7 +2620,8 @@ std::vector<std::string> LLWindowSDL::getDynamicFallbackFontList() && filename) { rtns.push_back(std::string((const char*)filename)); - ++font_count; + if (rtns.size() >= max_font_count_cutoff) + break; // hit limit } } FcFontSetDestroy (fs); @@ -2827,7 +2634,7 @@ std::vector<std::string> LLWindowSDL::getDynamicFallbackFontList() { lldebugs << " file: " << *it << llendl; } - llinfos << "Using " << font_count << " system font(s)." << llendl; + llinfos << "Using " << rtns.size() << "/" << found_font_count << " system fonts." << llendl; rtns.push_back(final_fallback); return rtns; diff --git a/indra/llwindow/llwindowsdl.h b/indra/llwindow/llwindowsdl.h index 2311a361fa..8e65a2f324 100644 --- a/indra/llwindow/llwindowsdl.h +++ b/indra/llwindow/llwindowsdl.h @@ -125,7 +125,7 @@ public: /*virtual*/ void *getPlatformWindow(); /*virtual*/ void bringToFront(); - /*virtual*/ void spawnWebBrowser(const std::string& escaped_url); + /*virtual*/ void spawnWebBrowser(const std::string& escaped_url, bool async); static std::vector<std::string> getDynamicFallbackFontList(); @@ -148,9 +148,6 @@ public: static Display* get_SDL_Display(void); #endif // LL_X11 - static S32 getDisplayWidth(); - static S32 getDisplayHeight(); - protected: LLWindowSDL(LLWindowCallbacks* callbacks, const std::string& title, int x, int y, int width, int height, U32 flags, diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp index 4be5d06c2b..d726c60018 100644 --- a/indra/llwindow/llwindowwin32.cpp +++ b/indra/llwindow/llwindowwin32.cpp @@ -46,6 +46,7 @@ #include "llerror.h" #include "llgl.h" #include "llstring.h" +#include "lldir.h" // System includes #include <commdlg.h> @@ -1545,6 +1546,11 @@ void LLWindowWin32::initCursors() mCursor[ UI_CURSOR_PIPETTE ] = LoadCursor(module, TEXT("TOOLPIPETTE")); // Color cursors + gDirUtilp->getExpandedFilename(LL_PATH_EXECUTABLE, "res", "toolbuy.cur"); + + mCursor[UI_CURSOR_TOOLSIT] = LoadCursorFromFile(utf8str_to_utf16str(gDirUtilp->getWorkingDir() + gDirUtilp->getDirDelimiter() + "res" + gDirUtilp->getDirDelimiter() + "toolsit.cur").c_str()); + mCursor[UI_CURSOR_TOOLBUY] = LoadCursorFromFile(utf8str_to_utf16str(gDirUtilp->getWorkingDir() + gDirUtilp->getDirDelimiter() + "res" + gDirUtilp->getDirDelimiter() + "toolbuy.cur").c_str()); + mCursor[UI_CURSOR_TOOLOPEN] = LoadCursorFromFile(utf8str_to_utf16str(gDirUtilp->getWorkingDir() + gDirUtilp->getDirDelimiter() + "res" + gDirUtilp->getDirDelimiter() + "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")); @@ -2953,7 +2959,7 @@ S32 OSMessageBoxWin32(const std::string& text, const std::string& caption, U32 t } -void LLWindowWin32::spawnWebBrowser(const std::string& escaped_url ) +void LLWindowWin32::spawnWebBrowser(const std::string& escaped_url, bool async) { bool found = false; S32 i; @@ -2983,7 +2989,12 @@ void LLWindowWin32::spawnWebBrowser(const std::string& escaped_url ) // let the OS decide what to use to open the URL SHELLEXECUTEINFO sei = { sizeof( sei ) }; - sei.fMask = SEE_MASK_FLAG_DDEWAIT; + // NOTE: this assumes that SL will stick around long enough to complete the DDE message exchange + // necessary for ShellExecuteEx to complete + if (async) + { + sei.fMask = SEE_MASK_ASYNCOK; + } sei.nShow = SW_SHOWNORMAL; sei.lpVerb = L"open"; sei.lpFile = url_utf16.c_str(); @@ -3714,16 +3725,5 @@ std::vector<std::string> LLWindowWin32::getDynamicFallbackFontList() return std::vector<std::string>(); } -// static -S32 LLWindowWin32::getDisplayWidth() -{ - return ::GetSystemMetrics(SM_CXVIRTUALSCREEN); -} - -// static -S32 LLWindowWin32::getDisplayHeight() -{ - return ::GetSystemMetrics(SM_CYVIRTUALSCREEN); -} #endif // LL_WINDOWS diff --git a/indra/llwindow/llwindowwin32.h b/indra/llwindow/llwindowwin32.h index c221ec0192..d4a3446515 100644 --- a/indra/llwindow/llwindowwin32.h +++ b/indra/llwindow/llwindowwin32.h @@ -114,15 +114,12 @@ public: /*virtual*/ void setLanguageTextInput( const LLCoordGL & pos ); /*virtual*/ void updateLanguageTextInputArea(); /*virtual*/ void interruptLanguageTextInput(); - /*virtual*/ void spawnWebBrowser(const std::string& escaped_url); + /*virtual*/ void spawnWebBrowser(const std::string& escaped_url, bool async); LLWindowCallbacks::DragNDropResult completeDragNDropRequest( const LLCoordGL gl_coord, const MASK mask, LLWindowCallbacks::DragNDropAction action, const std::string url ); static std::vector<std::string> getDynamicFallbackFontList(); - static S32 getDisplayWidth(); - static S32 getDisplayHeight(); - protected: LLWindowWin32(LLWindowCallbacks* callbacks, const std::string& title, const std::string& name, int x, int y, int width, int height, U32 flags, diff --git a/indra/lscript/lscript_execute/lscript_execute.cpp b/indra/lscript/lscript_execute/lscript_execute.cpp index e849fa9a6e..8de54aeda5 100644 --- a/indra/lscript/lscript_execute/lscript_execute.cpp +++ b/indra/lscript/lscript_execute/lscript_execute.cpp @@ -520,7 +520,7 @@ void LLScriptExecuteLSL2::callNextQueuedEventHandler(U64 event_register, const L } else { - llwarns << "Shit, somehow got an event that we're not registered for!" << llendl; + llwarns << "Somehow got an event that we're not registered for!" << llendl; } delete eventdata; } diff --git a/indra/media_plugins/example/media_plugin_example.cpp b/indra/media_plugins/example/media_plugin_example.cpp index f5b077fea0..49bbca6c52 100644 --- a/indra/media_plugins/example/media_plugin_example.cpp +++ b/indra/media_plugins/example/media_plugin_example.cpp @@ -119,17 +119,6 @@ void MediaPluginExample::receiveMessage( const char* message_string ) std::string plugin_version = "Example media plugin, Example Version 1.0.0.0"; message.setValue( "plugin_version", plugin_version ); sendMessage( message ); - - // Plugin gets to decide the texture parameters to use. - message.setMessage( LLPLUGIN_MESSAGE_CLASS_MEDIA, "texture_params" ); - message.setValueS32( "default_width", mWidth ); - message.setValueS32( "default_height", mHeight ); - message.setValueS32( "depth", mDepth ); - message.setValueU32( "internalformat", GL_RGBA ); - message.setValueU32( "format", GL_RGBA ); - message.setValueU32( "type", GL_UNSIGNED_BYTE ); - message.setValueBoolean( "coords_opengl", false ); - sendMessage( message ); } else if ( message_name == "idle" ) @@ -191,7 +180,20 @@ void MediaPluginExample::receiveMessage( const char* message_string ) else if ( message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA ) { - if ( message_name == "size_change" ) + if ( message_name == "init" ) + { + // Plugin gets to decide the texture parameters to use. + LLPluginMessage message( LLPLUGIN_MESSAGE_CLASS_MEDIA, "texture_params" ); + message.setValueS32( "default_width", mWidth ); + message.setValueS32( "default_height", mHeight ); + message.setValueS32( "depth", mDepth ); + message.setValueU32( "internalformat", GL_RGBA ); + message.setValueU32( "format", GL_RGBA ); + message.setValueU32( "type", GL_UNSIGNED_BYTE ); + message.setValueBoolean( "coords_opengl", false ); + sendMessage( message ); + } + else if ( message_name == "size_change" ) { std::string name = message_in.getValue( "name" ); S32 width = message_in.getValueS32( "width" ); diff --git a/indra/media_plugins/gstreamer010/media_plugin_gstreamer010.cpp b/indra/media_plugins/gstreamer010/media_plugin_gstreamer010.cpp index 4c2dd64bb6..033c4ba2f3 100644 --- a/indra/media_plugins/gstreamer010/media_plugin_gstreamer010.cpp +++ b/indra/media_plugins/gstreamer010/media_plugin_gstreamer010.cpp @@ -986,33 +986,6 @@ void MediaPluginGStreamer010::receiveMessage(const char *message_string) message.setValue("plugin_version", getVersion()); sendMessage(message); - - // Plugin gets to decide the texture parameters to use. - message.setMessage(LLPLUGIN_MESSAGE_CLASS_MEDIA, "texture_params"); - // lame to have to decide this now, it depends on the movie. Oh well. - mDepth = 4; - - mCurrentWidth = 1; - mCurrentHeight = 1; - mPreviousWidth = 1; - mPreviousHeight = 1; - mNaturalWidth = 1; - mNaturalHeight = 1; - mWidth = 1; - mHeight = 1; - mTextureWidth = 1; - mTextureHeight = 1; - - message.setValueU32("format", GL_RGBA); - message.setValueU32("type", GL_UNSIGNED_INT_8_8_8_8_REV); - - message.setValueS32("depth", mDepth); - message.setValueS32("default_width", mWidth); - message.setValueS32("default_height", mHeight); - message.setValueU32("internalformat", GL_RGBA8); - message.setValueBoolean("coords_opengl", true); // true == use OpenGL-style coordinates, false == (0,0) is upper left. - message.setValueBoolean("allow_downsample", true); // we respond with grace and performance if asked to downscale - sendMessage(message); } else if(message_name == "idle") { @@ -1077,7 +1050,36 @@ void MediaPluginGStreamer010::receiveMessage(const char *message_string) } else if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA) { - if(message_name == "size_change") + if(message_name == "init") + { + // Plugin gets to decide the texture parameters to use. + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "texture_params"); + // lame to have to decide this now, it depends on the movie. Oh well. + mDepth = 4; + + mCurrentWidth = 1; + mCurrentHeight = 1; + mPreviousWidth = 1; + mPreviousHeight = 1; + mNaturalWidth = 1; + mNaturalHeight = 1; + mWidth = 1; + mHeight = 1; + mTextureWidth = 1; + mTextureHeight = 1; + + message.setValueU32("format", GL_RGBA); + message.setValueU32("type", GL_UNSIGNED_INT_8_8_8_8_REV); + + message.setValueS32("depth", mDepth); + message.setValueS32("default_width", mWidth); + message.setValueS32("default_height", mHeight); + message.setValueU32("internalformat", GL_RGBA8); + message.setValueBoolean("coords_opengl", true); // true == use OpenGL-style coordinates, false == (0,0) is upper left. + message.setValueBoolean("allow_downsample", true); // we respond with grace and performance if asked to downscale + sendMessage(message); + } + else if(message_name == "size_change") { std::string name = message_in.getValue("name"); S32 width = message_in.getValueS32("width"); diff --git a/indra/media_plugins/quicktime/media_plugin_quicktime.cpp b/indra/media_plugins/quicktime/media_plugin_quicktime.cpp index e230fcc280..1f88301ca7 100644 --- a/indra/media_plugins/quicktime/media_plugin_quicktime.cpp +++ b/indra/media_plugins/quicktime/media_plugin_quicktime.cpp @@ -859,36 +859,6 @@ void MediaPluginQuickTime::receiveMessage(const char *message_string) plugin_version += codec.str(); message.setValue("plugin_version", plugin_version); sendMessage(message); - - // Plugin gets to decide the texture parameters to use. - message.setMessage(LLPLUGIN_MESSAGE_CLASS_MEDIA, "texture_params"); - #if defined(LL_WINDOWS) - // Values for Windows - mDepth = 3; - message.setValueU32("format", GL_RGB); - message.setValueU32("type", GL_UNSIGNED_BYTE); - - // We really want to pad the texture width to a multiple of 32 bytes, but since we're using 3-byte pixels, it doesn't come out even. - // Padding to a multiple of 3*32 guarantees it'll divide out properly. - message.setValueU32("padding", 32 * 3); - #else - // Values for Mac - mDepth = 4; - message.setValueU32("format", GL_BGRA_EXT); - #ifdef __BIG_ENDIAN__ - message.setValueU32("type", GL_UNSIGNED_INT_8_8_8_8_REV ); - #else - message.setValueU32("type", GL_UNSIGNED_INT_8_8_8_8); - #endif - - // Pad texture width to a multiple of 32 bytes, to line up with cache lines. - message.setValueU32("padding", 32); - #endif - message.setValueS32("depth", mDepth); - message.setValueU32("internalformat", GL_RGB); - message.setValueBoolean("coords_opengl", true); // true == use OpenGL-style coordinates, false == (0,0) is upper left. - message.setValueBoolean("allow_downsample", true); - sendMessage(message); } else if(message_name == "idle") { @@ -953,7 +923,41 @@ void MediaPluginQuickTime::receiveMessage(const char *message_string) } else if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA) { - if(message_name == "size_change") + if(message_name == "init") + { + // This is the media init message -- all necessary data for initialization should have been received. + + // Plugin gets to decide the texture parameters to use. + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "texture_params"); + #if defined(LL_WINDOWS) + // Values for Windows + mDepth = 3; + message.setValueU32("format", GL_RGB); + message.setValueU32("type", GL_UNSIGNED_BYTE); + + // We really want to pad the texture width to a multiple of 32 bytes, but since we're using 3-byte pixels, it doesn't come out even. + // Padding to a multiple of 3*32 guarantees it'll divide out properly. + message.setValueU32("padding", 32 * 3); + #else + // Values for Mac + mDepth = 4; + message.setValueU32("format", GL_BGRA_EXT); + #ifdef __BIG_ENDIAN__ + message.setValueU32("type", GL_UNSIGNED_INT_8_8_8_8_REV ); + #else + message.setValueU32("type", GL_UNSIGNED_INT_8_8_8_8); + #endif + + // Pad texture width to a multiple of 32 bytes, to line up with cache lines. + message.setValueU32("padding", 32); + #endif + message.setValueS32("depth", mDepth); + message.setValueU32("internalformat", GL_RGB); + message.setValueBoolean("coords_opengl", true); // true == use OpenGL-style coordinates, false == (0,0) is upper left. + message.setValueBoolean("allow_downsample", true); + sendMessage(message); + } + else if(message_name == "size_change") { std::string name = message_in.getValue("name"); S32 width = message_in.getValueS32("width"); diff --git a/indra/media_plugins/webkit/media_plugin_webkit.cpp b/indra/media_plugins/webkit/media_plugin_webkit.cpp index afde904be6..436e077e9b 100644 --- a/indra/media_plugins/webkit/media_plugin_webkit.cpp +++ b/indra/media_plugins/webkit/media_plugin_webkit.cpp @@ -88,10 +88,16 @@ public: private: std::string mProfileDir; + std::string mHostLanguage; + std::string mUserAgent; + bool mCookiesEnabled; + bool mJavascriptEnabled; + bool mPluginsEnabled; enum { - INIT_STATE_UNINITIALIZED, // Browser instance hasn't been set up yet + INIT_STATE_UNINITIALIZED, // LLQtWebkit hasn't been set up yet + INIT_STATE_INITIALIZED, // LLQtWebkit has been set up, but no browser window has been created yet. INIT_STATE_NAVIGATING, // Browser instance has been set up and initial navigate to about:blank has been issued INIT_STATE_NAVIGATE_COMPLETE, // initial navigate to about:blank has completed INIT_STATE_WAIT_REDRAW, // First real navigate begin has been received, waiting for page changed event to start handling redraws @@ -191,13 +197,6 @@ private: if ( mInitState > INIT_STATE_UNINITIALIZED ) return true; - // not enough information to initialize the browser yet. - if ( mWidth < 0 || mHeight < 0 || mDepth < 0 || - mTextureWidth < 0 || mTextureHeight < 0 ) - { - return false; - }; - // set up directories char cwd[ FILENAME_MAX ]; // I *think* this is defined on all platforms we use if (NULL == getcwd( cwd, FILENAME_MAX - 1 )) @@ -208,12 +207,12 @@ private: std::string application_dir = std::string( cwd ); #if LL_DARWIN - // When running under the Xcode debugger, there's a setting called "Break on Debugger()/DebugStr()" which defaults to being turned on. - // This causes the environment variable USERBREAK to be set to 1, which causes these legacy calls to break into the debugger. - // This wouldn't cause any problems except for the fact that the current release version of the Flash plugin has a call to Debugger() in it - // which gets hit when the plugin is probed by webkit. - // Unsetting the environment variable here works around this issue. - unsetenv("USERBREAK"); + // When running under the Xcode debugger, there's a setting called "Break on Debugger()/DebugStr()" which defaults to being turned on. + // This causes the environment variable USERBREAK to be set to 1, which causes these legacy calls to break into the debugger. + // This wouldn't cause any problems except for the fact that the current release version of the Flash plugin has a call to Debugger() in it + // which gets hit when the plugin is probed by webkit. + // Unsetting the environment variable here works around this issue. + unsetenv("USERBREAK"); #endif #if LL_WINDOWS @@ -254,66 +253,89 @@ private: bool result = LLQtWebKit::getInstance()->init( application_dir, component_dir, mProfileDir, native_window_handle ); if ( result ) { - // create single browser window - mBrowserWindowId = LLQtWebKit::getInstance()->createBrowserWindow( mWidth, mHeight ); -#if LL_WINDOWS - // Enable plugins - LLQtWebKit::getInstance()->enablePlugins(true); -#elif LL_DARWIN - // Enable plugins - LLQtWebKit::getInstance()->enablePlugins(true); -#elif LL_LINUX - // Enable plugins - LLQtWebKit::getInstance()->enablePlugins(true); -#endif - // Enable cookies - LLQtWebKit::getInstance()->enableCookies( true ); + mInitState = INIT_STATE_INITIALIZED; + + return true; + }; + + return false; + }; + + //////////////////////////////////////////////////////////////////////////////// + // + bool initBrowserWindow() + { + // already initialized + if ( mInitState > INIT_STATE_INITIALIZED ) + return true; + + // not enough information to initialize the browser yet. + if ( mWidth < 0 || mHeight < 0 || mDepth < 0 || + mTextureWidth < 0 || mTextureHeight < 0 ) + { + return false; + }; + + // Set up host language before creating browser window + if(!mHostLanguage.empty()) + { + LLQtWebKit::getInstance()->setHostLanguage(mHostLanguage); + } - // tell LLQtWebKit about the size of the browser window - LLQtWebKit::getInstance()->setSize( mBrowserWindowId, mWidth, mHeight ); + // turn on/off cookies based on what host app tells us + LLQtWebKit::getInstance()->enableCookies( mCookiesEnabled ); - // observer events that LLQtWebKit emits - LLQtWebKit::getInstance()->addObserver( mBrowserWindowId, this ); + // turn on/off plugins based on what host app tells us + LLQtWebKit::getInstance()->enablePlugins( mPluginsEnabled ); - // append details to agent string - LLQtWebKit::getInstance()->setBrowserAgentId( "LLPluginMedia Web Browser" ); + // turn on/off Javascript based on what host app tells us + LLQtWebKit::getInstance()->enableJavascript( mJavascriptEnabled ); + + // create single browser window + mBrowserWindowId = LLQtWebKit::getInstance()->createBrowserWindow( mWidth, mHeight ); + + // tell LLQtWebKit about the size of the browser window + LLQtWebKit::getInstance()->setSize( mBrowserWindowId, mWidth, mHeight ); + + // observer events that LLQtWebKit emits + LLQtWebKit::getInstance()->addObserver( mBrowserWindowId, this ); + + // append details to agent string + LLQtWebKit::getInstance()->setBrowserAgentId( mUserAgent ); #if !LL_QTWEBKIT_USES_PIXMAPS - // don't flip bitmap - LLQtWebKit::getInstance()->flipWindow( mBrowserWindowId, true ); + // don't flip bitmap + LLQtWebKit::getInstance()->flipWindow( mBrowserWindowId, true ); #endif // !LL_QTWEBKIT_USES_PIXMAPS - - // set background color - // convert background color channels from [0.0, 1.0] to [0, 255]; - LLQtWebKit::getInstance()->setBackgroundColor( mBrowserWindowId, int(mBackgroundR * 255.0f), int(mBackgroundG * 255.0f), int(mBackgroundB * 255.0f) ); - - // Set state _before_ starting the navigate, since onNavigateBegin might get called before this call returns. - setInitState(INIT_STATE_NAVIGATING); - - // Don't do this here -- it causes the dreaded "white flash" when loading a browser instance. - // FIXME: Re-added this because navigating to a "page" initializes things correctly - especially - // for the HTTP AUTH dialog issues (DEV-41731). Will fix at a later date. - // Build a data URL like this: "data:text/html,%3Chtml%3E%3Cbody bgcolor=%22#RRGGBB%22%3E%3C/body%3E%3C/html%3E" - // where RRGGBB is the background color in HTML style - std::stringstream url; - - url << "data:text/html,%3Chtml%3E%3Cbody%20bgcolor=%22#"; - // convert background color channels from [0.0, 1.0] to [0, 255]; - url << std::setfill('0') << std::setw(2) << std::hex << int(mBackgroundR * 255.0f); - url << std::setfill('0') << std::setw(2) << std::hex << int(mBackgroundG * 255.0f); - url << std::setfill('0') << std::setw(2) << std::hex << int(mBackgroundB * 255.0f); - url << "%22%3E%3C/body%3E%3C/html%3E"; - - lldebugs << "data url is: " << url.str() << llendl; - - LLQtWebKit::getInstance()->navigateTo( mBrowserWindowId, url.str() ); -// LLQtWebKit::getInstance()->navigateTo( mBrowserWindowId, "about:blank" ); - - return true; - }; + + // set background color + // convert background color channels from [0.0, 1.0] to [0, 255]; + LLQtWebKit::getInstance()->setBackgroundColor( mBrowserWindowId, int(mBackgroundR * 255.0f), int(mBackgroundG * 255.0f), int(mBackgroundB * 255.0f) ); + + // Set state _before_ starting the navigate, since onNavigateBegin might get called before this call returns. + setInitState(INIT_STATE_NAVIGATING); + + // Don't do this here -- it causes the dreaded "white flash" when loading a browser instance. + // FIXME: Re-added this because navigating to a "page" initializes things correctly - especially + // for the HTTP AUTH dialog issues (DEV-41731). Will fix at a later date. + // Build a data URL like this: "data:text/html,%3Chtml%3E%3Cbody bgcolor=%22#RRGGBB%22%3E%3C/body%3E%3C/html%3E" + // where RRGGBB is the background color in HTML style + std::stringstream url; + + url << "data:text/html,%3Chtml%3E%3Cbody%20bgcolor=%22#"; + // convert background color channels from [0.0, 1.0] to [0, 255]; + url << std::setfill('0') << std::setw(2) << std::hex << int(mBackgroundR * 255.0f); + url << std::setfill('0') << std::setw(2) << std::hex << int(mBackgroundG * 255.0f); + url << std::setfill('0') << std::setw(2) << std::hex << int(mBackgroundB * 255.0f); + url << "%22%3E%3C/body%3E%3C/html%3E"; + + lldebugs << "data url is: " << url.str() << llendl; + + LLQtWebKit::getInstance()->navigateTo( mBrowserWindowId, url.str() ); +// LLQtWebKit::getInstance()->navigateTo( mBrowserWindowId, "about:blank" ); - return false; - }; + return true; + } void setVolume(F32 vol); @@ -486,6 +508,19 @@ private: sendMessage(message); } + + //////////////////////////////////////////////////////////////////////////////// + // virtual + void onCookieChanged(const EventType& event) + { + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "cookie_set"); + message.setValue("cookie", event.getStringValue()); + // These could be passed through as well, but aren't really needed. +// message.setValue("uri", event.getEventUri()); +// message.setValueBoolean("dead", (event.getIntValue() != 0)) + sendMessage(message); + } + LLQtWebKit::EKeyboardModifier decodeModifiers(std::string &modifiers) { int result = 0; @@ -650,6 +685,11 @@ MediaPluginWebKit::MediaPluginWebKit(LLPluginInstance::sendMessageFunction host_ mBackgroundR = 0.0f; mBackgroundG = 0.0f; mBackgroundB = 0.0f; + + mHostLanguage = "en"; // default to english + mJavascriptEnabled = true; // default to on + mPluginsEnabled = true; // default to on + mUserAgent = "LLPluginMedia Web Browser"; } MediaPluginWebKit::~MediaPluginWebKit() @@ -676,9 +716,6 @@ void MediaPluginWebKit::receiveMessage(const char *message_string) { if(message_name == "init") { - std::string user_data_path = message_in.getValue("user_data_path"); // n.b. always has trailing platform-specific dir-delimiter - mProfileDir = user_data_path + "browser_profile"; - LLPluginMessage message("base", "init_response"); LLSD versions = LLSD::emptyMap(); versions[LLPLUGIN_MESSAGE_CLASS_BASE] = LLPLUGIN_MESSAGE_CLASS_BASE_VERSION; @@ -690,23 +727,6 @@ void MediaPluginWebKit::receiveMessage(const char *message_string) plugin_version += LLQtWebKit::getInstance()->getVersion(); message.setValue("plugin_version", plugin_version); sendMessage(message); - - // Plugin gets to decide the texture parameters to use. - mDepth = 4; - - message.setMessage(LLPLUGIN_MESSAGE_CLASS_MEDIA, "texture_params"); - message.setValueS32("default_width", 1024); - message.setValueS32("default_height", 1024); - message.setValueS32("depth", mDepth); - message.setValueU32("internalformat", GL_RGBA); -#if LL_QTWEBKIT_USES_PIXMAPS - message.setValueU32("format", GL_BGRA_EXT); // I hope this isn't system-dependant... is it? If so, we'll have to check the root window's pixel layout or something... yuck. -#else - message.setValueU32("format", GL_RGBA); -#endif // LL_QTWEBKIT_USES_PIXMAPS - message.setValueU32("type", GL_UNSIGNED_BYTE); - message.setValueBoolean("coords_opengl", true); - sendMessage(message); } else if(message_name == "idle") { @@ -771,7 +791,7 @@ void MediaPluginWebKit::receiveMessage(const char *message_string) // std::cerr << "MediaPluginWebKit::receiveMessage: unknown base message: " << message_name << std::endl; } } - else if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME) + else if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME) { if(message_name == "set_volume") { @@ -781,7 +801,58 @@ void MediaPluginWebKit::receiveMessage(const char *message_string) } else if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA) { - if(message_name == "size_change") + if(message_name == "init") + { + // This is the media init message -- all necessary data for initialization should have been received. + if(initBrowser()) + { + + // Plugin gets to decide the texture parameters to use. + mDepth = 4; + + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "texture_params"); + message.setValueS32("default_width", 1024); + message.setValueS32("default_height", 1024); + message.setValueS32("depth", mDepth); + message.setValueU32("internalformat", GL_RGBA); + #if LL_QTWEBKIT_USES_PIXMAPS + message.setValueU32("format", GL_BGRA_EXT); // I hope this isn't system-dependant... is it? If so, we'll have to check the root window's pixel layout or something... yuck. + #else + message.setValueU32("format", GL_RGBA); + #endif // LL_QTWEBKIT_USES_PIXMAPS + message.setValueU32("type", GL_UNSIGNED_BYTE); + message.setValueBoolean("coords_opengl", true); + sendMessage(message); + } + else + { + // if initialization failed, we're done. + mDeleteMe = true; + } + + } + else if(message_name == "set_user_data_path") + { + std::string user_data_path = message_in.getValue("path"); // n.b. always has trailing platform-specific dir-delimiter + mProfileDir = user_data_path + "browser_profile"; + + // FIXME: Should we do anything with this if it comes in after the browser has been initialized? + } + else if(message_name == "set_language_code") + { + mHostLanguage = message_in.getValue("language"); + + // FIXME: Should we do anything with this if it comes in after the browser has been initialized? + } + else if(message_name == "plugins_enabled") + { + mPluginsEnabled = message_in.getValueBoolean("enable"); + } + else if(message_name == "javascript_enabled") + { + mJavascriptEnabled = message_in.getValueBoolean("enable"); + } + else if(message_name == "size_change") { std::string name = message_in.getValue("name"); S32 width = message_in.getValueS32("width"); @@ -803,29 +874,36 @@ void MediaPluginWebKit::receiveMessage(const char *message_string) mWidth = width; mHeight = height; - // initialize (only gets called once) - initBrowser(); - - // size changed so tell the browser - LLQtWebKit::getInstance()->setSize( mBrowserWindowId, mWidth, mHeight ); - -// std::cerr << "webkit plugin: set size to " << mWidth << " x " << mHeight -// << ", rowspan is " << LLQtWebKit::getInstance()->getBrowserRowSpan(mBrowserWindowId) << std::endl; - - S32 real_width = LLQtWebKit::getInstance()->getBrowserRowSpan(mBrowserWindowId) / LLQtWebKit::getInstance()->getBrowserDepth(mBrowserWindowId); - - // The actual width the browser will be drawing to is probably smaller... let the host know by modifying texture_width in the response. - if(real_width <= texture_width) + if(initBrowserWindow()) { - texture_width = real_width; + + // size changed so tell the browser + LLQtWebKit::getInstance()->setSize( mBrowserWindowId, mWidth, mHeight ); + + // std::cerr << "webkit plugin: set size to " << mWidth << " x " << mHeight + // << ", rowspan is " << LLQtWebKit::getInstance()->getBrowserRowSpan(mBrowserWindowId) << std::endl; + + S32 real_width = LLQtWebKit::getInstance()->getBrowserRowSpan(mBrowserWindowId) / LLQtWebKit::getInstance()->getBrowserDepth(mBrowserWindowId); + + // The actual width the browser will be drawing to is probably smaller... let the host know by modifying texture_width in the response. + if(real_width <= texture_width) + { + texture_width = real_width; + } + else + { + // This won't work -- it'll be bigger than the allocated memory. This is a fatal error. + // std::cerr << "Fatal error: browser rowbytes greater than texture width" << std::endl; + mDeleteMe = true; + return; + } } else { - // This won't work -- it'll be bigger than the allocated memory. This is a fatal error. -// std::cerr << "Fatal error: browser rowbytes greater than texture width" << std::endl; + // Setting up the browser window failed. This is a fatal error. mDeleteMe = true; - return; } + mTextureWidth = texture_width; mTextureHeight = texture_height; @@ -975,8 +1053,22 @@ void MediaPluginWebKit::receiveMessage(const char *message_string) } else if(message_name == "enable_cookies") { - bool val = message_in.getValueBoolean("enable"); - LLQtWebKit::getInstance()->enableCookies( val ); + mCookiesEnabled = message_in.getValueBoolean("enable"); + LLQtWebKit::getInstance()->enableCookies( mCookiesEnabled ); + } + else if(message_name == "enable_plugins") + { + mPluginsEnabled = message_in.getValueBoolean("enable"); + LLQtWebKit::getInstance()->enablePlugins( mPluginsEnabled ); + } + else if(message_name == "enable_javascript") + { + mJavascriptEnabled = message_in.getValueBoolean("enable"); + //LLQtWebKit::getInstance()->enableJavascript( mJavascriptEnabled ); + } + else if(message_name == "set_cookies") + { + LLQtWebKit::getInstance()->setCookies(message_in.getValue("cookies")); } else if(message_name == "proxy_setup") { @@ -1013,8 +1105,8 @@ void MediaPluginWebKit::receiveMessage(const char *message_string) } else if(message_name == "set_user_agent") { - std::string user_agent = message_in.getValue("user_agent"); - LLQtWebKit::getInstance()->setBrowserAgentId( user_agent ); + mUserAgent = message_in.getValue("user_agent"); + LLQtWebKit::getInstance()->setBrowserAgentId( mUserAgent ); } else if(message_name == "init_history") { diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 8ad3b2085d..bc838e20e4 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -66,6 +66,7 @@ include_directories( set(viewer_SOURCE_FILES llagent.cpp llagentaccess.cpp + llagentcamera.cpp llagentdata.cpp llagentlanguage.cpp llagentlistener.cpp @@ -73,6 +74,7 @@ set(viewer_SOURCE_FILES llagentpilot.cpp llagentui.cpp llagentwearables.cpp + llagentwearablesfetch.cpp llanimstatelabels.cpp llappearancemgr.cpp llappviewer.cpp @@ -252,6 +254,7 @@ set(viewer_SOURCE_FILES llinventoryfilter.cpp llinventoryfunctions.cpp llinventorymodel.cpp + llinventorymodelbackgroundfetch.cpp llinventoryobserver.cpp llinventorypanel.cpp lljoystickbutton.cpp @@ -564,6 +567,7 @@ set(viewer_HEADER_FILES ViewerInstall.cmake llagent.h llagentaccess.h + llagentcamera.h llagentdata.h llagentlanguage.h llagentlistener.h @@ -571,6 +575,7 @@ set(viewer_HEADER_FILES llagentpilot.h llagentui.h llagentwearables.h + llagentwearablesfetch.h llanimstatelabels.h llappearance.h llappearancemgr.h @@ -752,6 +757,7 @@ set(viewer_HEADER_FILES llinventoryfilter.h llinventoryfunctions.h llinventorymodel.h + llinventorymodelbackgroundfetch.h llinventoryobserver.h llinventorypanel.h lljoystickbutton.h diff --git a/indra/newview/English.lproj/InfoPlist.strings b/indra/newview/English.lproj/InfoPlist.strings index 879408d6e4..02c3dfc6e0 100644 --- a/indra/newview/English.lproj/InfoPlist.strings +++ b/indra/newview/English.lproj/InfoPlist.strings @@ -2,6 +2,6 @@ CFBundleName = "Second Life"; -CFBundleShortVersionString = "Second Life version 2.0.0.200030"; -CFBundleGetInfoString = "Second Life version 2.0.0.200030, Copyright 2004-2009 Linden Research, Inc."; +CFBundleShortVersionString = "Second Life version 2.0.0.203110"; +CFBundleGetInfoString = "Second Life version 2.0.0.203110, Copyright 2004-2009 Linden Research, Inc."; diff --git a/indra/newview/Info-SecondLife.plist b/indra/newview/Info-SecondLife.plist index 38ebb22b84..4cb01a0f33 100644 --- a/indra/newview/Info-SecondLife.plist +++ b/indra/newview/Info-SecondLife.plist @@ -32,7 +32,7 @@ </dict> </array> <key>CFBundleVersion</key> - <string>2.0.0.200030</string> + <string>2.0.0.203110</string> <key>CSResourcesFileMapped</key> <true/> </dict> diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 8edf766132..92226f4148 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -1563,6 +1563,28 @@ <key>Value</key> <integer>1</integer> </map> + <key>BrowserJavascriptEnabled</key> + <map> + <key>Comment</key> + <string>Enable Javascript in the built-in Web browser?</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> + <key>BrowserPluginsEnabled</key> + <map> + <key>Comment</key> + <string>Enable Web plugins in the built-in Web browser?</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> <key>CreateToolCopyCenters</key> <map> <key>Comment</key> @@ -4587,7 +4609,7 @@ <key>Type</key> <string>Boolean</string> <key>Value</key> - <integer>1</integer> + <integer>0</integer> </map> <key>MediaShowOutsideParcel</key> <map> @@ -10655,7 +10677,7 @@ <key>Type</key> <string>S32</string> <key>Value</key> - <integer>700</integer> + <integer>738</integer> </map> <key>WindowMaximized</key> <map> @@ -10677,7 +10699,7 @@ <key>Type</key> <string>S32</string> <key>Value</key> - <integer>1000</integer> + <integer>1024</integer> </map> <key>WindowX</key> <map> diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLBUY.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLBUY.tif Binary files differnew file mode 100644 index 0000000000..f366026c33 --- /dev/null +++ b/indra/newview/cursors_mac/UI_CURSOR_TOOLBUY.tif diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLOPEN.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLOPEN.tif Binary files differnew file mode 100644 index 0000000000..e9e6a20cd9 --- /dev/null +++ b/indra/newview/cursors_mac/UI_CURSOR_TOOLOPEN.tif diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLSIT.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLSIT.tif Binary files differnew file mode 100644 index 0000000000..bea3d9d442 --- /dev/null +++ b/indra/newview/cursors_mac/UI_CURSOR_TOOLSIT.tif diff --git a/indra/newview/installers/darwin/release-dmg/_DS_Store b/indra/newview/installers/darwin/release-dmg/_DS_Store Binary files differindex 495ec37f53..8f6c25c2f4 100644 --- a/indra/newview/installers/darwin/release-dmg/_DS_Store +++ b/indra/newview/installers/darwin/release-dmg/_DS_Store diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index c5d7f6f118..69d4bba16d 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -35,6 +35,7 @@ #include "pipeline.h" +#include "llagentcamera.h" #include "llagentlistener.h" #include "llagentwearables.h" #include "llagentui.h" @@ -43,7 +44,6 @@ #include "llcallingcard.h" #include "llchannelmanager.h" #include "llconsole.h" -//#include "llfirstuse.h" #include "llfloatercamera.h" #include "llfloatercustomize.h" #include "llfloaterreg.h" @@ -59,6 +59,7 @@ #include "llnearbychatbar.h" #include "llnotificationsutil.h" #include "llparcel.h" +#include "llrendersphere.h" #include "llsdutil.h" #include "llsidetray.h" #include "llsky.h" @@ -88,77 +89,18 @@ const BOOL ANIMATE = TRUE; const U8 AGENT_STATE_TYPING = 0x04; const U8 AGENT_STATE_EDITING = 0x10; -//drone wandering constants -const F32 MAX_WANDER_TIME = 20.f; // seconds -const F32 MAX_HEADING_HALF_ERROR = 0.2f; // radians -const F32 WANDER_MAX_SLEW_RATE = 2.f * DEG_TO_RAD; // radians / frame -const F32 WANDER_TARGET_MIN_DISTANCE = 10.f; // meters - // Autopilot constants -const F32 AUTOPILOT_HEADING_HALF_ERROR = 10.f * DEG_TO_RAD; // radians -const F32 AUTOPILOT_MAX_SLEW_RATE = 1.f * DEG_TO_RAD; // radians / frame -const F32 AUTOPILOT_STOP_DISTANCE = 2.f; // meters const F32 AUTOPILOT_HEIGHT_ADJUST_DISTANCE = 8.f; // meters const F32 AUTOPILOT_MIN_TARGET_HEIGHT_OFF_GROUND = 1.f; // meters const F32 AUTOPILOT_MAX_TIME_NO_PROGRESS = 1.5f; // seconds -// face editing constants -const LLVector3d FACE_EDIT_CAMERA_OFFSET(0.4f, -0.05f, 0.07f); -const LLVector3d FACE_EDIT_TARGET_OFFSET(0.f, 0.f, 0.05f); - -// Mousewheel camera zoom -const F32 MIN_ZOOM_FRACTION = 0.25f; -const F32 INITIAL_ZOOM_FRACTION = 1.f; -const F32 MAX_ZOOM_FRACTION = 8.f; -const F32 METERS_PER_WHEEL_CLICK = 1.f; - -const F32 MAX_TIME_DELTA = 1.f; - -const F32 CAMERA_ZOOM_HALF_LIFE = 0.07f; // seconds -const F32 FOV_ZOOM_HALF_LIFE = 0.07f; // seconds - -const F32 CAMERA_FOCUS_HALF_LIFE = 0.f;//0.02f; -const F32 CAMERA_LAG_HALF_LIFE = 0.25f; -const F32 MIN_CAMERA_LAG = 0.5f; -const F32 MAX_CAMERA_LAG = 5.f; - -const F32 CAMERA_COLLIDE_EPSILON = 0.1f; -const F32 MIN_CAMERA_DISTANCE = 0.1f; -const F32 AVATAR_ZOOM_MIN_X_FACTOR = 0.55f; -const F32 AVATAR_ZOOM_MIN_Y_FACTOR = 0.7f; -const F32 AVATAR_ZOOM_MIN_Z_FACTOR = 1.15f; - -const F32 MAX_CAMERA_DISTANCE_FROM_AGENT = 50.f; - -const F32 MAX_CAMERA_SMOOTH_DISTANCE = 50.0f; - -const F32 HEAD_BUFFER_SIZE = 0.3f; -const F32 CUSTOMIZE_AVATAR_CAMERA_ANIM_SLOP = 0.2f; - -const F32 LAND_MIN_ZOOM = 0.15f; -const F32 AVATAR_MIN_ZOOM = 0.5f; -const F32 OBJECT_MIN_ZOOM = 0.02f; - -const F32 APPEARANCE_MIN_ZOOM = 0.39f; -const F32 APPEARANCE_MAX_ZOOM = 8.f; +const F32 MAX_VELOCITY_AUTO_LAND_SQUARED = 4.f * 4.f; +const F64 CHAT_AGE_FAST_RATE = 3.0; // fidget constants const F32 MIN_FIDGET_TIME = 8.f; // seconds const F32 MAX_FIDGET_TIME = 20.f; // seconds -const S32 MAX_NUM_CHAT_POSITIONS = 10; -const F32 GROUND_TO_AIR_CAMERA_TRANSITION_TIME = 0.5f; -const F32 GROUND_TO_AIR_CAMERA_TRANSITION_START_TIME = 0.5f; - -const F32 MAX_VELOCITY_AUTO_LAND_SQUARED = 4.f * 4.f; - -const F32 MAX_FOCUS_OFFSET = 20.f; - -const F32 OBJECT_EXTENTS_PADDING = 0.5f; - -const F32 MIN_RADIUS_ALPHA_SIZZLE = 0.5f; - -const F64 CHAT_AGE_FAST_RATE = 3.0; // The agent instance. LLAgent gAgent; @@ -193,11 +135,11 @@ bool handleSlowMotionAnimation(const LLSD& newvalue) { if (newvalue.asBoolean()) { - gAgent.getAvatarObject()->setAnimTimeFactor(0.2f); + gAgentAvatarp->setAnimTimeFactor(0.2f); } else { - gAgent.getAvatarObject()->setAnimTimeFactor(1.0f); + gAgentAvatarp->setAnimTimeFactor(1.0f); } return true; } @@ -218,20 +160,12 @@ bool handleSlowMotionAnimation(const LLSD& newvalue) // LLAgent() //----------------------------------------------------------------------------- LLAgent::LLAgent() : - mDrawDistance( DEFAULT_FAR_PLANE ), - mGroupPowers(0), mHideGroupTitle(FALSE), mGroupID(), - mLookAt(NULL), - mPointAt(NULL), - - mHUDTargetZoom(1.f), - mHUDCurZoom(1.f), mInitialized(FALSE), mListener(), - mForceMouselook(FALSE), mDoubleTapRunTimer(), mDoubleTapRunMode(DOUBLETAP_NONE), @@ -249,78 +183,17 @@ LLAgent::LLAgent() : mDistanceTraveled(0.F), mLastPositionGlobal(LLVector3d::zero), - mAvatarObject(NULL), - mRenderState(0), mTypingTimer(), - mCameraMode( CAMERA_MODE_THIRD_PERSON ), - mLastCameraMode( CAMERA_MODE_THIRD_PERSON ), mViewsPushed(FALSE), - mCameraPreset(CAMERA_PRESET_REAR_VIEW), - mCustomAnim(FALSE), mShowAvatar(TRUE), - mCameraAnimating( FALSE ), - mAnimationCameraStartGlobal(), - mAnimationFocusStartGlobal(), - mAnimationTimer(), - mAnimationDuration(0.33f), - - mCameraFOVZoomFactor(0.f), - mCameraCurrentFOVZoomFactor(0.f), - mCameraFocusOffset(), - mCameraFOVDefault(DEFAULT_FIELD_OF_VIEW), - - mCameraCollidePlane(), - - mCurrentCameraDistance(2.f), // meters, set in init() - mTargetCameraDistance(2.f), - mCameraZoomFraction(1.f), // deprecated - mThirdPersonHeadOffset(0.f, 0.f, 1.f), - mSitCameraEnabled(FALSE), - mCameraSmoothingLastPositionGlobal(), - mCameraSmoothingLastPositionAgent(), - mCameraSmoothingStop(FALSE), - - mCameraUpVector(LLVector3::z_axis), // default is straight up - - mFocusOnAvatar(TRUE), - mFocusGlobal(), - mFocusTargetGlobal(), - mFocusObject(NULL), - mFocusObjectDist(0.f), - mFocusObjectOffset(), - mFocusDotRadius( 0.1f ), // meters - mTrackFocusObject(TRUE), - mUIOffset(0.f), - mFrameAgent(), mIsBusy(FALSE), - mAtKey(0), // Either 1, 0, or -1... indicates that movement-key is pressed - mWalkKey(0), // like AtKey, but causes less forward thrust - mLeftKey(0), - mUpKey(0), - mYawKey(0.f), - mPitchKey(0.f), - - mOrbitLeftKey(0.f), - mOrbitRightKey(0.f), - mOrbitUpKey(0.f), - mOrbitDownKey(0.f), - mOrbitInKey(0.f), - mOrbitOutKey(0.f), - - mPanUpKey(0.f), - mPanDownKey(0.f), - mPanLeftKey(0.f), - mPanRightKey(0.f), - mPanInKey(0.f), - mPanOutKey(0.f), - mControlFlags(0x00000000), mbFlagsDirty(FALSE), mbFlagsNeedReset(FALSE), @@ -358,7 +231,6 @@ LLAgent::LLAgent() : mControlsTakenPassedOnCount[i] = 0; } - mFollowCam.setMaxCameraDistantFromSubject( MAX_CAMERA_DISTANCE_FROM_AGENT ); mListener.reset(new LLAgentListener(*this)); } @@ -372,37 +244,10 @@ void LLAgent::init() gSavedSettings.declareBOOL("SlowMotionAnimation", FALSE, "Declared in code", FALSE); gSavedSettings.getControl("SlowMotionAnimation")->getSignal()->connect(boost::bind(&handleSlowMotionAnimation, _2)); - mDrawDistance = gSavedSettings.getF32("RenderFarClip"); - // *Note: this is where LLViewerCamera::getInstance() used to be constructed. - LLViewerCamera::getInstance()->setView(DEFAULT_FIELD_OF_VIEW); - // Leave at 0.1 meters until we have real near clip management - LLViewerCamera::getInstance()->setNear(0.1f); - LLViewerCamera::getInstance()->setFar(mDrawDistance); // if you want to change camera settings, do so in camera.h - LLViewerCamera::getInstance()->setAspect( gViewerWindow->getWorldViewAspectRatio() ); // default, overridden in LLViewerWindow::reshape - LLViewerCamera::getInstance()->setViewHeightInPixels(768); // default, overridden in LLViewerWindow::reshape - setFlying( gSavedSettings.getBOOL("FlyingAtExit") ); - mCameraFocusOffsetTarget = LLVector4(gSavedSettings.getVector3("CameraOffsetBuild")); - - mCameraPreset = (ECameraPreset) gSavedSettings.getU32("CameraPreset"); - - mCameraOffsetInitial[CAMERA_PRESET_REAR_VIEW] = gSavedSettings.getVector3("CameraOffsetRearView"); - mCameraOffsetInitial[CAMERA_PRESET_FRONT_VIEW] = gSavedSettings.getVector3("CameraOffsetFrontView"); - mCameraOffsetInitial[CAMERA_PRESET_GROUP_VIEW] = gSavedSettings.getVector3("CameraOffsetGroupView"); - - mFocusOffsetInitial[CAMERA_PRESET_REAR_VIEW] = gSavedSettings.getVector3d("FocusOffsetRearView"); - mFocusOffsetInitial[CAMERA_PRESET_FRONT_VIEW] = gSavedSettings.getVector3d("FocusOffsetFrontView"); - mFocusOffsetInitial[CAMERA_PRESET_GROUP_VIEW] = gSavedSettings.getVector3d("FocusOffsetGroupView"); - - mCameraCollidePlane.clearVec(); - mCurrentCameraDistance = getCameraOffsetInitial().magVec() * gSavedSettings.getF32("CameraOffsetScale"); - mTargetCameraDistance = mCurrentCameraDistance; - mCameraZoomFraction = 1.f; - mTrackFocusObject = gSavedSettings.getBOOL("TrackFocusObject"); - mEffectColor = LLUIColorTable::instance().getColor("EffectColor"); gSavedSettings.getControl("PreferredMaturity")->getValidateSignal()->connect(boost::bind(&LLAgent::validateMaturity, this, _2)); @@ -416,22 +261,7 @@ void LLAgent::init() //----------------------------------------------------------------------------- void LLAgent::cleanup() { - setSitCamera(LLUUID::null); - - mAvatarObject = NULL; - - if(mLookAt) - { - mLookAt->markDead() ; - mLookAt = NULL; - } - if(mPointAt) - { - mPointAt->markDead() ; - mPointAt = NULL; - } mRegionp = NULL; - setFocusObject(NULL); } //----------------------------------------------------------------------------- @@ -444,83 +274,6 @@ LLAgent::~LLAgent() // *Note: this is where LLViewerCamera::getInstance() used to be deleted. } -// Change camera back to third person, stop the autopilot, -// deselect stuff, etc. -//----------------------------------------------------------------------------- -// resetView() -//----------------------------------------------------------------------------- -void LLAgent::resetView(BOOL reset_camera, BOOL change_camera) -{ - if (mAutoPilot) - { - stopAutoPilot(TRUE); - } - - if (!gNoRender) - { - LLSelectMgr::getInstance()->unhighlightAll(); - - // By popular request, keep land selection while walking around. JC - // LLViewerParcelMgr::getInstance()->deselectLand(); - - // force deselect when walking and attachment is selected - // this is so people don't wig out when their avatar moves without animating - if (LLSelectMgr::getInstance()->getSelection()->isAttachment()) - { - LLSelectMgr::getInstance()->deselectAll(); - } - - // Hide all popup menus - gMenuHolder->hideMenus(); - } - - if (change_camera && !gSavedSettings.getBOOL("FreezeTime")) - { - changeCameraToDefault(); - - if (LLViewerJoystick::getInstance()->getOverrideCamera()) - { - handle_toggle_flycam(); - } - - // reset avatar mode from eventual residual motion - if (LLToolMgr::getInstance()->inBuildMode()) - { - LLViewerJoystick::getInstance()->moveAvatar(true); - } - - //Camera Tool is needed for Free Camera Control Mode - if (!LLFloaterCamera::inFreeCameraMode()) - { - LLFloaterReg::hideInstance("build"); - - // Switch back to basic toolset - LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset); - } - - gViewerWindow->showCursor(); - } - - - if (reset_camera && !gSavedSettings.getBOOL("FreezeTime")) - { - if (!gViewerWindow->getLeftMouseDown() && cameraThirdPerson()) - { - // leaving mouse-steer mode - LLVector3 agent_at_axis = getAtAxis(); - agent_at_axis -= projected_vec(agent_at_axis, getReferenceUpVector()); - agent_at_axis.normalize(); - gAgent.resetAxes(lerp(getAtAxis(), agent_at_axis, LLCriticalDamp::getInterpolant(0.3f))); - } - - setFocusOnAvatar(TRUE, ANIMATE); - - mCameraFOVZoomFactor = 0.f; - } - - mHUDTargetZoom = 1.f; -} - // Handle any actions that need to be performed when the main app gains focus // (such as through alt-tab). //----------------------------------------------------------------------------- @@ -528,9 +281,9 @@ void LLAgent::resetView(BOOL reset_camera, BOOL change_camera) //----------------------------------------------------------------------------- void LLAgent::onAppFocusGained() { - if (CAMERA_MODE_MOUSELOOK == mCameraMode) + if (CAMERA_MODE_MOUSELOOK == gAgentCamera.getCameraMode()) { - changeCameraToDefault(); + gAgentCamera.changeCameraToDefault(); LLToolMgr::getInstance()->clearSavedTool(); } } @@ -538,32 +291,15 @@ void LLAgent::onAppFocusGained() void LLAgent::ageChat() { - if (mAvatarObject.notNull()) + if (isAgentAvatarValid()) { // get amount of time since I last chatted - F64 elapsed_time = (F64)mAvatarObject->mChatTimer.getElapsedTimeF32(); + F64 elapsed_time = (F64)gAgentAvatarp->mChatTimer.getElapsedTimeF32(); // add in frame time * 3 (so it ages 4x) - mAvatarObject->mChatTimer.setAge(elapsed_time + (F64)gFrameDTClamped * (CHAT_AGE_FAST_RATE - 1.0)); + gAgentAvatarp->mChatTimer.setAge(elapsed_time + (F64)gFrameDTClamped * (CHAT_AGE_FAST_RATE - 1.0)); } } -// Allow camera to be moved somewhere other than behind avatar. -//----------------------------------------------------------------------------- -// unlockView() -//----------------------------------------------------------------------------- -void LLAgent::unlockView() -{ - if (getFocusOnAvatar()) - { - if (mAvatarObject.notNull()) - { - setFocusGlobal( LLVector3d::zero, mAvatarObject->mID ); - } - setFocusOnAvatar(FALSE, FALSE); // no animation - } -} - - //----------------------------------------------------------------------------- // moveAt() //----------------------------------------------------------------------------- @@ -572,7 +308,7 @@ void LLAgent::moveAt(S32 direction, bool reset) // age chat timer so it fades more quickly when you are intentionally moving ageChat(); - setKey(direction, mAtKey); + gAgentCamera.setAtKey(LLAgentCamera::directionToKey(direction)); if (direction > 0) { @@ -585,7 +321,7 @@ void LLAgent::moveAt(S32 direction, bool reset) if (reset) { - resetView(); + gAgentCamera.resetView(); } } @@ -597,7 +333,7 @@ void LLAgent::moveAtNudge(S32 direction) // age chat timer so it fades more quickly when you are intentionally moving ageChat(); - setKey(direction, mWalkKey); + gAgentCamera.setWalkKey(LLAgentCamera::directionToKey(direction)); if (direction > 0) { @@ -608,7 +344,7 @@ void LLAgent::moveAtNudge(S32 direction) setControlFlags(AGENT_CONTROL_NUDGE_AT_NEG); } - resetView(); + gAgentCamera.resetView(); } //----------------------------------------------------------------------------- @@ -619,7 +355,7 @@ void LLAgent::moveLeft(S32 direction) // age chat timer so it fades more quickly when you are intentionally moving ageChat(); - setKey(direction, mLeftKey); + gAgentCamera.setLeftKey(LLAgentCamera::directionToKey(direction)); if (direction > 0) { @@ -630,7 +366,7 @@ void LLAgent::moveLeft(S32 direction) setControlFlags(AGENT_CONTROL_LEFT_NEG | AGENT_CONTROL_FAST_LEFT); } - resetView(); + gAgentCamera.resetView(); } //----------------------------------------------------------------------------- @@ -641,7 +377,7 @@ void LLAgent::moveLeftNudge(S32 direction) // age chat timer so it fades more quickly when you are intentionally moving ageChat(); - setKey(direction, mLeftKey); + gAgentCamera.setLeftKey(LLAgentCamera::directionToKey(direction)); if (direction > 0) { @@ -652,7 +388,7 @@ void LLAgent::moveLeftNudge(S32 direction) setControlFlags(AGENT_CONTROL_NUDGE_LEFT_NEG); } - resetView(); + gAgentCamera.resetView(); } //----------------------------------------------------------------------------- @@ -663,7 +399,7 @@ void LLAgent::moveUp(S32 direction) // age chat timer so it fades more quickly when you are intentionally moving ageChat(); - setKey(direction, mUpKey); + gAgentCamera.setUpKey(LLAgentCamera::directionToKey(direction)); if (direction > 0) { @@ -674,7 +410,7 @@ void LLAgent::moveUp(S32 direction) setControlFlags(AGENT_CONTROL_UP_NEG | AGENT_CONTROL_FAST_UP); } - resetView(); + gAgentCamera.resetView(); } //----------------------------------------------------------------------------- @@ -682,7 +418,7 @@ void LLAgent::moveUp(S32 direction) //----------------------------------------------------------------------------- void LLAgent::moveYaw(F32 mag, bool reset_view) { - mYawKey = mag; + gAgentCamera.setYawKey(mag); if (mag > 0) { @@ -695,7 +431,7 @@ void LLAgent::moveYaw(F32 mag, bool reset_view) if (reset_view) { - resetView(); + gAgentCamera.resetView(); } } @@ -704,7 +440,7 @@ void LLAgent::moveYaw(F32 mag, bool reset_view) //----------------------------------------------------------------------------- void LLAgent::movePitch(F32 mag) { - mPitchKey = mag; + gAgentCamera.setPitchKey(mag); if (mag > 0) { @@ -747,20 +483,20 @@ BOOL LLAgent::getFlying() const //----------------------------------------------------------------------------- void LLAgent::setFlying(BOOL fly) { - if (mAvatarObject.notNull()) + if (isAgentAvatarValid()) { // *HACK: Don't allow to start the flying mode if we got ANIM_AGENT_STANDUP signal // because in this case we won't get a signal to start avatar flying animation and // it will be walking with flying mode "ON" indication. However we allow to switch // the flying mode off if we get ANIM_AGENT_STANDUP signal. See process_avatar_animation(). // See EXT-2781. - if(fly && mAvatarObject->mSignaledAnimations.find(ANIM_AGENT_STANDUP) != mAvatarObject->mSignaledAnimations.end()) + if(fly && gAgentAvatarp->mSignaledAnimations.find(ANIM_AGENT_STANDUP) != gAgentAvatarp->mSignaledAnimations.end()) { return; } // don't allow taking off while sitting - if (fly && mAvatarObject->isSitting()) + if (fly && gAgentAvatarp->isSitting()) { return; } @@ -806,16 +542,16 @@ void LLAgent::toggleFlying() BOOL fly = !gAgent.getFlying(); gAgent.setFlying( fly ); - gAgent.resetView(); + gAgentCamera.resetView(); } // static bool LLAgent::enableFlying() { BOOL sitting = FALSE; - if (gAgent.getAvatarObject()) + if (isAgentAvatarValid()) { - sitting = gAgent.getAvatarObject()->isSitting(); + sitting = gAgentAvatarp->isSitting(); } return !sitting; } @@ -985,9 +721,9 @@ void LLAgent::sendReliableMessage() //----------------------------------------------------------------------------- LLVector3 LLAgent::getVelocity() const { - if (mAvatarObject.notNull()) + if (isAgentAvatarValid()) { - return mAvatarObject->getVelocity(); + return gAgentAvatarp->getVelocity(); } else { @@ -1006,13 +742,13 @@ void LLAgent::setPositionAgent(const LLVector3 &pos_agent) llerrs << "setPositionAgent is not a number" << llendl; } - if (mAvatarObject.notNull() && mAvatarObject->getParent()) + if (isAgentAvatarValid() && gAgentAvatarp->getParent()) { LLVector3 pos_agent_sitting; LLVector3d pos_agent_d; - LLViewerObject *parent = (LLViewerObject*)mAvatarObject->getParent(); + LLViewerObject *parent = (LLViewerObject*)gAgentAvatarp->getParent(); - pos_agent_sitting = mAvatarObject->getPosition() * parent->getRotation() + parent->getPositionAgent(); + pos_agent_sitting = gAgentAvatarp->getPosition() * parent->getRotation() + parent->getPositionAgent(); pos_agent_d.setVec(pos_agent_sitting); mFrameAgent.setOrigin(pos_agent_sitting); @@ -1029,24 +765,13 @@ void LLAgent::setPositionAgent(const LLVector3 &pos_agent) } //----------------------------------------------------------------------------- -// slamLookAt() -//----------------------------------------------------------------------------- -void LLAgent::slamLookAt(const LLVector3 &look_at) -{ - LLVector3 look_at_norm = look_at; - look_at_norm.mV[VZ] = 0.f; - look_at_norm.normalize(); - resetAxes(look_at_norm); -} - -//----------------------------------------------------------------------------- // getPositionGlobal() //----------------------------------------------------------------------------- const LLVector3d &LLAgent::getPositionGlobal() const { - if (mAvatarObject.notNull() && !mAvatarObject->mDrawable.isNull()) + if (isAgentAvatarValid() && !gAgentAvatarp->mDrawable.isNull()) { - mPositionGlobal = getPosGlobalFromAgent(mAvatarObject->getRenderPosition()); + mPositionGlobal = getPosGlobalFromAgent(gAgentAvatarp->getRenderPosition()); } else { @@ -1061,9 +786,9 @@ const LLVector3d &LLAgent::getPositionGlobal() const //----------------------------------------------------------------------------- const LLVector3 &LLAgent::getPositionAgent() { - if(mAvatarObject.notNull() && !mAvatarObject->mDrawable.isNull()) + if (isAgentAvatarValid() && !gAgentAvatarp->mDrawable.isNull()) { - mFrameAgent.setOrigin(mAvatarObject->getRenderPosition()); + mFrameAgent.setOrigin(gAgentAvatarp->getRenderPosition()); } return mFrameAgent.getOrigin(); @@ -1189,21 +914,21 @@ LLVector3 LLAgent::getReferenceUpVector() { // this vector is in the coordinate frame of the avatar's parent object, or the world if none LLVector3 up_vector = LLVector3::z_axis; - if (mAvatarObject.notNull() && - mAvatarObject->getParent() && - mAvatarObject->mDrawable.notNull()) + if (isAgentAvatarValid() && + gAgentAvatarp->getParent() && + gAgentAvatarp->mDrawable.notNull()) { - U32 camera_mode = mCameraAnimating ? mLastCameraMode : mCameraMode; + U32 camera_mode = gAgentCamera.getCameraAnimating() ? gAgentCamera.getLastCameraMode() : gAgentCamera.getCameraMode(); // and in third person... if (camera_mode == CAMERA_MODE_THIRD_PERSON) { // make the up vector point to the absolute +z axis - up_vector = up_vector * ~((LLViewerObject*)mAvatarObject->getParent())->getRenderRotation(); + up_vector = up_vector * ~((LLViewerObject*)gAgentAvatarp->getParent())->getRenderRotation(); } else if (camera_mode == CAMERA_MODE_MOUSELOOK) { // make the up vector point to the avatar's +z axis - up_vector = up_vector * mAvatarObject->mDrawable->getRotation(); + up_vector = up_vector * gAgentAvatarp->mDrawable->getRotation(); } } @@ -1239,7 +964,7 @@ F32 LLAgent::clampPitchToLimits(F32 angle) F32 angle_from_skyward = acos( mFrameAgent.getAtAxis() * skyward ); - if (mAvatarObject.notNull() && mAvatarObject->isSitting()) + if (isAgentAvatarValid() && gAgentAvatarp->isSitting()) { look_down_limit = 130.f * DEG_TO_RAD; } @@ -1292,736 +1017,11 @@ LLQuaternion LLAgent::getQuat() const return mFrameAgent.getQuaternion(); } - -//----------------------------------------------------------------------------- -// calcFocusOffset() -//----------------------------------------------------------------------------- -LLVector3 LLAgent::calcFocusOffset(LLViewerObject *object, LLVector3 original_focus_point, S32 x, S32 y) -{ - LLMatrix4 obj_matrix = object->getRenderMatrix(); - LLQuaternion obj_rot = object->getRenderRotation(); - LLVector3 obj_pos = object->getRenderPosition(); - - BOOL is_avatar = object->isAvatar(); - // if is avatar - don't do any funk heuristics to position the focal point - // see DEV-30589 - if (is_avatar) - { - return original_focus_point - obj_pos; - } - - - LLQuaternion inv_obj_rot = ~obj_rot; // get inverse of rotation - LLVector3 object_extents = object->getScale(); - // make sure they object extents are non-zero - object_extents.clamp(0.001f, F32_MAX); - - // obj_to_cam_ray is unit vector pointing from object center to camera, in the coordinate frame of the object - LLVector3 obj_to_cam_ray = obj_pos - LLViewerCamera::getInstance()->getOrigin(); - obj_to_cam_ray.rotVec(inv_obj_rot); - obj_to_cam_ray.normalize(); - - // obj_to_cam_ray_proportions are the (positive) ratios of - // the obj_to_cam_ray x,y,z components with the x,y,z object dimensions. - LLVector3 obj_to_cam_ray_proportions; - obj_to_cam_ray_proportions.mV[VX] = llabs(obj_to_cam_ray.mV[VX] / object_extents.mV[VX]); - obj_to_cam_ray_proportions.mV[VY] = llabs(obj_to_cam_ray.mV[VY] / object_extents.mV[VY]); - obj_to_cam_ray_proportions.mV[VZ] = llabs(obj_to_cam_ray.mV[VZ] / object_extents.mV[VZ]); - - // find the largest ratio stored in obj_to_cam_ray_proportions - // this corresponds to the object's local axial plane (XY, YZ, XZ) that is *most* facing the camera - LLVector3 longest_object_axis; - // is x-axis longest? - if (obj_to_cam_ray_proportions.mV[VX] > obj_to_cam_ray_proportions.mV[VY] - && obj_to_cam_ray_proportions.mV[VX] > obj_to_cam_ray_proportions.mV[VZ]) - { - // then grab it - longest_object_axis.setVec(obj_matrix.getFwdRow4()); - } - // is y-axis longest? - else if (obj_to_cam_ray_proportions.mV[VY] > obj_to_cam_ray_proportions.mV[VZ]) - { - // then grab it - longest_object_axis.setVec(obj_matrix.getLeftRow4()); - } - // otherwise, use z axis - else - { - longest_object_axis.setVec(obj_matrix.getUpRow4()); - } - - // Use this axis as the normal to project mouse click on to plane with that normal, at the object center. - // This generates a point behind the mouse cursor that is approximately in the middle of the object in - // terms of depth. - // We do this to allow the camera rotation tool to "tumble" the object by rotating the camera. - // If the focus point were the object surface under the mouse, camera rotation would introduce an undesirable - // eccentricity to the object orientation - LLVector3 focus_plane_normal(longest_object_axis); - focus_plane_normal.normalize(); - - LLVector3d focus_pt_global; - gViewerWindow->mousePointOnPlaneGlobal(focus_pt_global, x, y, gAgent.getPosGlobalFromAgent(obj_pos), focus_plane_normal); - LLVector3 focus_pt = gAgent.getPosAgentFromGlobal(focus_pt_global); - - // find vector from camera to focus point in object space - LLVector3 camera_to_focus_vec = focus_pt - LLViewerCamera::getInstance()->getOrigin(); - camera_to_focus_vec.rotVec(inv_obj_rot); - - // find vector from object origin to focus point in object coordinates - LLVector3 focus_offset_from_object_center = focus_pt - obj_pos; - // convert to object-local space - focus_offset_from_object_center.rotVec(inv_obj_rot); - - // We need to project the focus point back into the bounding box of the focused object. - // Do this by calculating the XYZ scale factors needed to get focus offset back in bounds along the camera_focus axis - LLVector3 clip_fraction; - - // for each axis... - for (U32 axis = VX; axis <= VZ; axis++) - { - //...calculate distance that focus offset sits outside of bounding box along that axis... - //NOTE: dist_out_of_bounds keeps the sign of focus_offset_from_object_center - F32 dist_out_of_bounds; - if (focus_offset_from_object_center.mV[axis] > 0.f) - { - dist_out_of_bounds = llmax(0.f, focus_offset_from_object_center.mV[axis] - (object_extents.mV[axis] * 0.5f)); - } - else - { - dist_out_of_bounds = llmin(0.f, focus_offset_from_object_center.mV[axis] + (object_extents.mV[axis] * 0.5f)); - } - - //...then calculate the scale factor needed to push camera_to_focus_vec back in bounds along current axis - if (llabs(camera_to_focus_vec.mV[axis]) < 0.0001f) - { - // don't divide by very small number - clip_fraction.mV[axis] = 0.f; - } - else - { - clip_fraction.mV[axis] = dist_out_of_bounds / camera_to_focus_vec.mV[axis]; - } - } - - LLVector3 abs_clip_fraction = clip_fraction; - abs_clip_fraction.abs(); - - // find axis of focus offset that is *most* outside the bounding box and use that to - // rescale focus offset to inside object extents - if (abs_clip_fraction.mV[VX] > abs_clip_fraction.mV[VY] - && abs_clip_fraction.mV[VX] > abs_clip_fraction.mV[VZ]) - { - focus_offset_from_object_center -= clip_fraction.mV[VX] * camera_to_focus_vec; - } - else if (abs_clip_fraction.mV[VY] > abs_clip_fraction.mV[VZ]) - { - focus_offset_from_object_center -= clip_fraction.mV[VY] * camera_to_focus_vec; - } - else - { - focus_offset_from_object_center -= clip_fraction.mV[VZ] * camera_to_focus_vec; - } - - // convert back to world space - focus_offset_from_object_center.rotVec(obj_rot); - - // now, based on distance of camera from object relative to object size - // push the focus point towards the near surface of the object when (relatively) close to the objcet - // or keep the focus point in the object middle when (relatively) far - // NOTE: leave focus point in middle of avatars, since the behavior you want when alt-zooming on avatars - // is almost always "tumble about middle" and not "spin around surface point" - if (!is_avatar) - { - LLVector3 obj_rel = original_focus_point - object->getRenderPosition(); - - //now that we have the object relative position, we should bias toward the center of the object - //based on the distance of the camera to the focus point vs. the distance of the camera to the focus - - F32 relDist = llabs(obj_rel * LLViewerCamera::getInstance()->getAtAxis()); - F32 viewDist = dist_vec(obj_pos + obj_rel, LLViewerCamera::getInstance()->getOrigin()); - - - LLBBox obj_bbox = object->getBoundingBoxAgent(); - F32 bias = 0.f; - - // virtual_camera_pos is the camera position we are simulating by backing the camera off - // and adjusting the FOV - LLVector3 virtual_camera_pos = gAgent.getPosAgentFromGlobal(mFocusTargetGlobal + (getCameraPositionGlobal() - mFocusTargetGlobal) / (1.f + mCameraFOVZoomFactor)); - - // if the camera is inside the object (large, hollow objects, for example) - // leave focus point all the way to destination depth, away from object center - if(!obj_bbox.containsPointAgent(virtual_camera_pos)) - { - // perform magic number biasing of focus point towards surface vs. planar center - bias = clamp_rescale(relDist/viewDist, 0.1f, 0.7f, 0.0f, 1.0f); - obj_rel = lerp(focus_offset_from_object_center, obj_rel, bias); - } - - focus_offset_from_object_center = obj_rel; - } - - return focus_offset_from_object_center; -} - -//----------------------------------------------------------------------------- -// calcCameraMinDistance() -//----------------------------------------------------------------------------- -BOOL LLAgent::calcCameraMinDistance(F32 &obj_min_distance) -{ - BOOL soft_limit = FALSE; // is the bounding box to be treated literally (volumes) or as an approximation (avatars) - - if (!mFocusObject || mFocusObject->isDead()) - { - obj_min_distance = 0.f; - return TRUE; - } - - if (mFocusObject->mDrawable.isNull()) - { -#ifdef LL_RELEASE_FOR_DOWNLOAD - llwarns << "Focus object with no drawable!" << llendl; -#else - mFocusObject->dump(); - llerrs << "Focus object with no drawable!" << llendl; -#endif - obj_min_distance = 0.f; - return TRUE; - } - - LLQuaternion inv_object_rot = ~mFocusObject->getRenderRotation(); - LLVector3 target_offset_origin = mFocusObjectOffset; - LLVector3 camera_offset_target(getCameraPositionAgent() - getPosAgentFromGlobal(mFocusTargetGlobal)); - - // convert offsets into object local space - camera_offset_target.rotVec(inv_object_rot); - target_offset_origin.rotVec(inv_object_rot); - - // push around object extents based on target offset - LLVector3 object_extents = mFocusObject->getScale(); - if (mFocusObject->isAvatar()) - { - // fudge factors that lets you zoom in on avatars a bit more (which don't do FOV zoom) - object_extents.mV[VX] *= AVATAR_ZOOM_MIN_X_FACTOR; - object_extents.mV[VY] *= AVATAR_ZOOM_MIN_Y_FACTOR; - object_extents.mV[VZ] *= AVATAR_ZOOM_MIN_Z_FACTOR; - soft_limit = TRUE; - } - LLVector3 abs_target_offset = target_offset_origin; - abs_target_offset.abs(); - - LLVector3 target_offset_dir = target_offset_origin; - F32 object_radius = mFocusObject->getVObjRadius(); - - BOOL target_outside_object_extents = FALSE; - - for (U32 i = VX; i <= VZ; i++) - { - if (abs_target_offset.mV[i] * 2.f > object_extents.mV[i] + OBJECT_EXTENTS_PADDING) - { - target_outside_object_extents = TRUE; - } - if (camera_offset_target.mV[i] > 0.f) - { - object_extents.mV[i] -= target_offset_origin.mV[i] * 2.f; - } - else - { - object_extents.mV[i] += target_offset_origin.mV[i] * 2.f; - } - } - - // don't shrink the object extents so far that the object inverts - object_extents.clamp(0.001f, F32_MAX); - - // move into first octant - LLVector3 camera_offset_target_abs_norm = camera_offset_target; - camera_offset_target_abs_norm.abs(); - // make sure offset is non-zero - camera_offset_target_abs_norm.clamp(0.001f, F32_MAX); - camera_offset_target_abs_norm.normalize(); - - // find camera position relative to normalized object extents - LLVector3 camera_offset_target_scaled = camera_offset_target_abs_norm; - camera_offset_target_scaled.mV[VX] /= object_extents.mV[VX]; - camera_offset_target_scaled.mV[VY] /= object_extents.mV[VY]; - camera_offset_target_scaled.mV[VZ] /= object_extents.mV[VZ]; - - if (camera_offset_target_scaled.mV[VX] > camera_offset_target_scaled.mV[VY] && - camera_offset_target_scaled.mV[VX] > camera_offset_target_scaled.mV[VZ]) - { - if (camera_offset_target_abs_norm.mV[VX] < 0.001f) - { - obj_min_distance = object_extents.mV[VX] * 0.5f; - } - else - { - obj_min_distance = object_extents.mV[VX] * 0.5f / camera_offset_target_abs_norm.mV[VX]; - } - } - else if (camera_offset_target_scaled.mV[VY] > camera_offset_target_scaled.mV[VZ]) - { - if (camera_offset_target_abs_norm.mV[VY] < 0.001f) - { - obj_min_distance = object_extents.mV[VY] * 0.5f; - } - else - { - obj_min_distance = object_extents.mV[VY] * 0.5f / camera_offset_target_abs_norm.mV[VY]; - } - } - else - { - if (camera_offset_target_abs_norm.mV[VZ] < 0.001f) - { - obj_min_distance = object_extents.mV[VZ] * 0.5f; - } - else - { - obj_min_distance = object_extents.mV[VZ] * 0.5f / camera_offset_target_abs_norm.mV[VZ]; - } - } - - LLVector3 object_split_axis; - LLVector3 target_offset_scaled = target_offset_origin; - target_offset_scaled.abs(); - target_offset_scaled.normalize(); - target_offset_scaled.mV[VX] /= object_extents.mV[VX]; - target_offset_scaled.mV[VY] /= object_extents.mV[VY]; - target_offset_scaled.mV[VZ] /= object_extents.mV[VZ]; - - if (target_offset_scaled.mV[VX] > target_offset_scaled.mV[VY] && - target_offset_scaled.mV[VX] > target_offset_scaled.mV[VZ]) - { - object_split_axis = LLVector3::x_axis; - } - else if (target_offset_scaled.mV[VY] > target_offset_scaled.mV[VZ]) - { - object_split_axis = LLVector3::y_axis; - } - else - { - object_split_axis = LLVector3::z_axis; - } - - LLVector3 camera_offset_object(getCameraPositionAgent() - mFocusObject->getPositionAgent()); - - // length projected orthogonal to target offset - F32 camera_offset_dist = (camera_offset_object - target_offset_dir * (camera_offset_object * target_offset_dir)).magVec(); - - // calculate whether the target point would be "visible" if it were outside the bounding box - // on the opposite of the splitting plane defined by object_split_axis; - BOOL exterior_target_visible = FALSE; - if (camera_offset_dist > object_radius) - { - // target is visible from camera, so turn off fov zoom - exterior_target_visible = TRUE; - } - - F32 camera_offset_clip = camera_offset_object * object_split_axis; - F32 target_offset_clip = target_offset_dir * object_split_axis; - - // target has moved outside of object extents - // check to see if camera and target are on same side - if (target_outside_object_extents) - { - if (camera_offset_clip > 0.f && target_offset_clip > 0.f) - { - return FALSE; - } - else if (camera_offset_clip < 0.f && target_offset_clip < 0.f) - { - return FALSE; - } - } - - // clamp obj distance to diagonal of 10 by 10 cube - obj_min_distance = llmin(obj_min_distance, 10.f * F_SQRT3); - - obj_min_distance += LLViewerCamera::getInstance()->getNear() + (soft_limit ? 0.1f : 0.2f); - - return TRUE; -} - -F32 LLAgent::getCameraZoomFraction() -{ - // 0.f -> camera zoomed all the way out - // 1.f -> camera zoomed all the way in - LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection(); - if (selection->getObjectCount() && selection->getSelectType() == SELECT_TYPE_HUD) - { - // already [0,1] - return mHUDTargetZoom; - } - else if (mFocusOnAvatar && cameraThirdPerson()) - { - return clamp_rescale(mCameraZoomFraction, MIN_ZOOM_FRACTION, MAX_ZOOM_FRACTION, 1.f, 0.f); - } - else if (cameraCustomizeAvatar()) - { - F32 distance = (F32)mCameraFocusOffsetTarget.magVec(); - return clamp_rescale(distance, APPEARANCE_MIN_ZOOM, APPEARANCE_MAX_ZOOM, 1.f, 0.f ); - } - else - { - F32 min_zoom; - const F32 DIST_FUDGE = 16.f; // meters - F32 max_zoom = llmin(mDrawDistance - DIST_FUDGE, - LLWorld::getInstance()->getRegionWidthInMeters() - DIST_FUDGE, - MAX_CAMERA_DISTANCE_FROM_AGENT); - - F32 distance = (F32)mCameraFocusOffsetTarget.magVec(); - if (mFocusObject.notNull()) - { - if (mFocusObject->isAvatar()) - { - min_zoom = AVATAR_MIN_ZOOM; - } - else - { - min_zoom = OBJECT_MIN_ZOOM; - } - } - else - { - min_zoom = LAND_MIN_ZOOM; - } - - return clamp_rescale(distance, min_zoom, max_zoom, 1.f, 0.f); - } -} - -void LLAgent::setCameraZoomFraction(F32 fraction) -{ - // 0.f -> camera zoomed all the way out - // 1.f -> camera zoomed all the way in - LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection(); - - if (selection->getObjectCount() && selection->getSelectType() == SELECT_TYPE_HUD) - { - mHUDTargetZoom = fraction; - } - else if (mFocusOnAvatar && cameraThirdPerson()) - { - mCameraZoomFraction = rescale(fraction, 0.f, 1.f, MAX_ZOOM_FRACTION, MIN_ZOOM_FRACTION); - } - else if (cameraCustomizeAvatar()) - { - LLVector3d camera_offset_dir = mCameraFocusOffsetTarget; - camera_offset_dir.normalize(); - mCameraFocusOffsetTarget = camera_offset_dir * rescale(fraction, 0.f, 1.f, APPEARANCE_MAX_ZOOM, APPEARANCE_MIN_ZOOM); - } - else - { - F32 min_zoom = LAND_MIN_ZOOM; - const F32 DIST_FUDGE = 16.f; // meters - F32 max_zoom = llmin(mDrawDistance - DIST_FUDGE, - LLWorld::getInstance()->getRegionWidthInMeters() - DIST_FUDGE, - MAX_CAMERA_DISTANCE_FROM_AGENT); - - if (mFocusObject.notNull()) - { - if (mFocusObject.notNull()) - { - if (mFocusObject->isAvatar()) - { - min_zoom = AVATAR_MIN_ZOOM; - } - else - { - min_zoom = OBJECT_MIN_ZOOM; - } - } - } - - LLVector3d camera_offset_dir = mCameraFocusOffsetTarget; - camera_offset_dir.normalize(); - mCameraFocusOffsetTarget = camera_offset_dir * rescale(fraction, 0.f, 1.f, max_zoom, min_zoom); - } - startCameraAnimation(); -} - - -//----------------------------------------------------------------------------- -// cameraOrbitAround() -//----------------------------------------------------------------------------- -void LLAgent::cameraOrbitAround(const F32 radians) -{ - LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection(); - if (selection->getObjectCount() && selection->getSelectType() == SELECT_TYPE_HUD) - { - // do nothing for hud selection - } - else if (mFocusOnAvatar && (mCameraMode == CAMERA_MODE_THIRD_PERSON || mCameraMode == CAMERA_MODE_FOLLOW)) - { - mFrameAgent.rotate(radians, getReferenceUpVector()); - } - else - { - mCameraFocusOffsetTarget.rotVec(radians, 0.f, 0.f, 1.f); - - cameraZoomIn(1.f); - } -} - - -//----------------------------------------------------------------------------- -// cameraOrbitOver() -//----------------------------------------------------------------------------- -void LLAgent::cameraOrbitOver(const F32 angle) -{ - LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection(); - if (selection->getObjectCount() && selection->getSelectType() == SELECT_TYPE_HUD) - { - // do nothing for hud selection - } - else if (mFocusOnAvatar && mCameraMode == CAMERA_MODE_THIRD_PERSON) - { - pitch(angle); - } - else - { - LLVector3 camera_offset_unit(mCameraFocusOffsetTarget); - camera_offset_unit.normalize(); - - F32 angle_from_up = acos( camera_offset_unit * getReferenceUpVector() ); - - LLVector3d left_axis; - left_axis.setVec(LLViewerCamera::getInstance()->getLeftAxis()); - F32 new_angle = llclamp(angle_from_up - angle, 1.f * DEG_TO_RAD, 179.f * DEG_TO_RAD); - mCameraFocusOffsetTarget.rotVec(angle_from_up - new_angle, left_axis); - - cameraZoomIn(1.f); - } -} - -//----------------------------------------------------------------------------- -// cameraZoomIn() -//----------------------------------------------------------------------------- -void LLAgent::cameraZoomIn(const F32 fraction) -{ - if (gDisconnected) - { - return; - } - - LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection(); - if (selection->getObjectCount() && selection->getSelectType() == SELECT_TYPE_HUD) - { - // just update hud zoom level - mHUDTargetZoom /= fraction; - return; - } - - - LLVector3d camera_offset(mCameraFocusOffsetTarget); - LLVector3d camera_offset_unit(mCameraFocusOffsetTarget); - F32 min_zoom = LAND_MIN_ZOOM; - F32 current_distance = (F32)camera_offset_unit.normalize(); - F32 new_distance = current_distance * fraction; - - // Don't move through focus point - if (mFocusObject) - { - LLVector3 camera_offset_dir((F32)camera_offset_unit.mdV[VX], (F32)camera_offset_unit.mdV[VY], (F32)camera_offset_unit.mdV[VZ]); - - if (mFocusObject->isAvatar()) - { - calcCameraMinDistance(min_zoom); - } - else - { - min_zoom = OBJECT_MIN_ZOOM; - } - } - - new_distance = llmax(new_distance, min_zoom); - - // Don't zoom too far back - const F32 DIST_FUDGE = 16.f; // meters - F32 max_distance = llmin(mDrawDistance - DIST_FUDGE, - LLWorld::getInstance()->getRegionWidthInMeters() - DIST_FUDGE ); - - if (new_distance > max_distance) - { - new_distance = max_distance; - - /* - // Unless camera is unlocked - if (!LLViewerCamera::sDisableCameraConstraints) - { - return; - } - */ - } - - if( cameraCustomizeAvatar() ) - { - new_distance = llclamp( new_distance, APPEARANCE_MIN_ZOOM, APPEARANCE_MAX_ZOOM ); - } - - mCameraFocusOffsetTarget = new_distance * camera_offset_unit; -} - -//----------------------------------------------------------------------------- -// cameraOrbitIn() -//----------------------------------------------------------------------------- -void LLAgent::cameraOrbitIn(const F32 meters) -{ - if (mFocusOnAvatar && mCameraMode == CAMERA_MODE_THIRD_PERSON) - { - F32 camera_offset_dist = llmax(0.001f, getCameraOffsetInitial().magVec() * gSavedSettings.getF32("CameraOffsetScale")); - - mCameraZoomFraction = (mTargetCameraDistance - meters) / camera_offset_dist; - - if (!gSavedSettings.getBOOL("FreezeTime") && mCameraZoomFraction < MIN_ZOOM_FRACTION && meters > 0.f) - { - // No need to animate, camera is already there. - changeCameraToMouselook(FALSE); - } - - mCameraZoomFraction = llclamp(mCameraZoomFraction, MIN_ZOOM_FRACTION, MAX_ZOOM_FRACTION); - } - else - { - LLVector3d camera_offset(mCameraFocusOffsetTarget); - LLVector3d camera_offset_unit(mCameraFocusOffsetTarget); - F32 current_distance = (F32)camera_offset_unit.normalize(); - F32 new_distance = current_distance - meters; - F32 min_zoom = LAND_MIN_ZOOM; - - // Don't move through focus point - if (mFocusObject.notNull()) - { - if (mFocusObject->isAvatar()) - { - min_zoom = AVATAR_MIN_ZOOM; - } - else - { - min_zoom = OBJECT_MIN_ZOOM; - } - } - - new_distance = llmax(new_distance, min_zoom); - - // Don't zoom too far back - const F32 DIST_FUDGE = 16.f; // meters - F32 max_distance = llmin(mDrawDistance - DIST_FUDGE, - LLWorld::getInstance()->getRegionWidthInMeters() - DIST_FUDGE ); - - if (new_distance > max_distance) - { - // Unless camera is unlocked - if (!gSavedSettings.getBOOL("DisableCameraConstraints")) - { - return; - } - } - - if( CAMERA_MODE_CUSTOMIZE_AVATAR == getCameraMode() ) - { - new_distance = llclamp( new_distance, APPEARANCE_MIN_ZOOM, APPEARANCE_MAX_ZOOM ); - } - - // Compute new camera offset - mCameraFocusOffsetTarget = new_distance * camera_offset_unit; - cameraZoomIn(1.f); - } -} - - -//----------------------------------------------------------------------------- -// cameraPanIn() -//----------------------------------------------------------------------------- -void LLAgent::cameraPanIn(F32 meters) -{ - LLVector3d at_axis; - at_axis.setVec(LLViewerCamera::getInstance()->getAtAxis()); - - mFocusTargetGlobal += meters * at_axis; - mFocusGlobal = mFocusTargetGlobal; - // don't enforce zoom constraints as this is the only way for users to get past them easily - updateFocusOffset(); - // NOTE: panning movements expect the camera to move exactly with the focus target, not animated behind -Nyx - mCameraSmoothingLastPositionGlobal = calcCameraPositionTargetGlobal(); -} - -//----------------------------------------------------------------------------- -// cameraPanLeft() -//----------------------------------------------------------------------------- -void LLAgent::cameraPanLeft(F32 meters) -{ - LLVector3d left_axis; - left_axis.setVec(LLViewerCamera::getInstance()->getLeftAxis()); - - mFocusTargetGlobal += meters * left_axis; - mFocusGlobal = mFocusTargetGlobal; - - // disable smoothing for camera pan, which causes some residents unhappiness - mCameraSmoothingStop = TRUE; - - cameraZoomIn(1.f); - updateFocusOffset(); - // NOTE: panning movements expect the camera to move exactly with the focus target, not animated behind - Nyx - mCameraSmoothingLastPositionGlobal = calcCameraPositionTargetGlobal(); -} - -//----------------------------------------------------------------------------- -// cameraPanUp() -//----------------------------------------------------------------------------- -void LLAgent::cameraPanUp(F32 meters) -{ - LLVector3d up_axis; - up_axis.setVec(LLViewerCamera::getInstance()->getUpAxis()); - - mFocusTargetGlobal += meters * up_axis; - mFocusGlobal = mFocusTargetGlobal; - - // disable smoothing for camera pan, which causes some residents unhappiness - mCameraSmoothingStop = TRUE; - - cameraZoomIn(1.f); - updateFocusOffset(); - // NOTE: panning movements expect the camera to move exactly with the focus target, not animated behind -Nyx - mCameraSmoothingLastPositionGlobal = calcCameraPositionTargetGlobal(); -} - -//----------------------------------------------------------------------------- -// setKey() -//----------------------------------------------------------------------------- -void LLAgent::setKey(const S32 direction, S32 &key) -{ - if (direction > 0) - { - key = 1; - } - else if (direction < 0) - { - key = -1; - } - else - { - key = 0; - } -} - - //----------------------------------------------------------------------------- // getControlFlags() //----------------------------------------------------------------------------- U32 LLAgent::getControlFlags() { -/* - // HACK -- avoids maintenance of control flags when camera mode is turned on or off, - // only worries about it when the flags are measured - if (mCameraMode == CAMERA_MODE_MOUSELOOK) - { - if ( !(mControlFlags & AGENT_CONTROL_MOUSELOOK) ) - { - mControlFlags |= AGENT_CONTROL_MOUSELOOK; - } - } -*/ return mControlFlags; } @@ -2117,10 +1117,9 @@ void LLAgent::clearAFK() // Gods can sometimes get into away state (via gestures) // without setting the appropriate control flag. JC - LLVOAvatar* av = mAvatarObject; if (mControlFlags & AGENT_CONTROL_AWAY - || (av - && (av->mSignaledAnimations.find(ANIM_AGENT_AWAY) != av->mSignaledAnimations.end()))) + || (isAgentAvatarValid() + && (gAgentAvatarp->mSignaledAnimations.find(ANIM_AGENT_AWAY) != gAgentAvatarp->mSignaledAnimations.end()))) { sendAnimationRequest(ANIM_AGENT_AWAY, ANIM_REQUEST_STOP); clearControlFlags(AGENT_CONTROL_AWAY); @@ -2181,7 +1180,7 @@ BOOL LLAgent::getBusy() const //----------------------------------------------------------------------------- void LLAgent::startAutoPilotGlobal(const LLVector3d &target_global, const std::string& behavior_name, const LLQuaternion *target_rotation, void (*finish_callback)(BOOL, void *), void *callback_data, F32 stop_distance, F32 rot_threshold) { - if (!gAgent.getAvatarObject()) + if (!isAgentAvatarValid()) { return; } @@ -2242,7 +1241,7 @@ void LLAgent::startAutoPilotGlobal(const LLVector3d &target_global, const std::s LLViewerObject *obj; LLWorld::getInstance()->resolveStepHeightGlobal(NULL, target_global, traceEndPt, targetOnGround, groundNorm, &obj); - F64 target_height = llmax((F64)gAgent.getAvatarObject()->getPelvisToFoot(), target_global.mdV[VZ] - targetOnGround.mdV[VZ]); + F64 target_height = llmax((F64)gAgentAvatarp->getPelvisToFoot(), target_global.mdV[VZ] - targetOnGround.mdV[VZ]); // clamp z value of target to minimum height above ground mAutoPilotTargetGlobal.mdV[VZ] = targetOnGround.mdV[VZ] + target_height; @@ -2342,12 +1341,9 @@ void LLAgent::autoPilot(F32 *delta_yaw) mAutoPilotTargetGlobal = object->getPositionGlobal(); } - if (mAvatarObject.isNull()) - { - return; - } + if (!isAgentAvatarValid()) return; - if (mAvatarObject->mInAir) + if (gAgentAvatarp->mInAir) { setFlying(TRUE); } @@ -2423,9 +1419,9 @@ void LLAgent::autoPilot(F32 *delta_yaw) // If we're flying, handle autopilot points above or below you. if (getFlying() && xy_distance < AUTOPILOT_HEIGHT_ADJUST_DISTANCE) { - if (mAvatarObject.notNull()) + if (isAgentAvatarValid()) { - F64 current_height = mAvatarObject->getPositionGlobal().mdV[VZ]; + F64 current_height = gAgentAvatarp->getPositionGlobal().mdV[VZ]; F32 delta_z = (F32)(mAutoPilotTargetGlobal.mdV[VZ] - current_height); F32 slope = delta_z / xy_distance; if (slope > 0.45f && delta_z > 6.f) @@ -2490,30 +1486,30 @@ void LLAgent::propagate(const F32 dt) LLFloaterMove *floater_move = LLFloaterReg::findTypedInstance<LLFloaterMove>("moveview"); if (floater_move) { - floater_move->mForwardButton ->setToggleState( mAtKey > 0 || mWalkKey > 0 ); - floater_move->mBackwardButton ->setToggleState( mAtKey < 0 || mWalkKey < 0 ); - floater_move->mTurnLeftButton ->setToggleState( mYawKey > 0.f ); - floater_move->mTurnRightButton ->setToggleState( mYawKey < 0.f ); - floater_move->mMoveUpButton ->setToggleState( mUpKey > 0 ); - floater_move->mMoveDownButton ->setToggleState( mUpKey < 0 ); + floater_move->mForwardButton ->setToggleState( gAgentCamera.getAtKey() > 0 || gAgentCamera.getWalkKey() > 0 ); + floater_move->mBackwardButton ->setToggleState( gAgentCamera.getAtKey() < 0 || gAgentCamera.getWalkKey() < 0 ); + floater_move->mTurnLeftButton ->setToggleState( gAgentCamera.getYawKey() > 0.f ); + floater_move->mTurnRightButton ->setToggleState( gAgentCamera.getYawKey() < 0.f ); + floater_move->mMoveUpButton ->setToggleState( gAgentCamera.getUpKey() > 0 ); + floater_move->mMoveDownButton ->setToggleState( gAgentCamera.getUpKey() < 0 ); } // handle rotation based on keyboard levels const F32 YAW_RATE = 90.f * DEG_TO_RAD; // radians per second - yaw(YAW_RATE * mYawKey * dt); + yaw(YAW_RATE * gAgentCamera.getYawKey() * dt); const F32 PITCH_RATE = 90.f * DEG_TO_RAD; // radians per second - pitch(PITCH_RATE * mPitchKey * dt); + pitch(PITCH_RATE * gAgentCamera.getPitchKey() * dt); // handle auto-land behavior - if (mAvatarObject.notNull()) + if (isAgentAvatarValid()) { - BOOL in_air = mAvatarObject->mInAir; + BOOL in_air = gAgentAvatarp->mInAir; LLVector3 land_vel = getVelocity(); land_vel.mV[VZ] = 0.f; if (!in_air - && mUpKey < 0 + && gAgentCamera.getUpKey() < 0 && land_vel.magVecSquared() < MAX_VELOCITY_AUTO_LAND_SQUARED && gSavedSettings.getBOOL("AutomaticFly")) { @@ -2522,13 +1518,7 @@ void LLAgent::propagate(const F32 dt) } } - // clear keys - mAtKey = 0; - mWalkKey = 0; - mLeftKey = 0; - mUpKey = 0; - mYawKey = 0.f; - mPitchKey = 0.f; + gAgentCamera.clearGeneralKeys(); } //----------------------------------------------------------------------------- @@ -2546,79 +1536,7 @@ void LLAgent::updateAgentPosition(const F32 dt, const F32 yaw_radians, const S32 // Check for water and land collision, set underwater flag // - updateLookAt(mouse_x, mouse_y); -} - -//----------------------------------------------------------------------------- -// updateLookAt() -//----------------------------------------------------------------------------- -void LLAgent::updateLookAt(const S32 mouse_x, const S32 mouse_y) -{ - static LLVector3 last_at_axis; - - - if (mAvatarObject.isNull()) - { - return; - } - - LLQuaternion av_inv_rot = ~mAvatarObject->mRoot.getWorldRotation(); - LLVector3 root_at = LLVector3::x_axis * mAvatarObject->mRoot.getWorldRotation(); - - if ((gViewerWindow->getMouseVelocityStat()->getCurrent() < 0.01f) && - (root_at * last_at_axis > 0.95f )) - { - LLVector3 vel = mAvatarObject->getVelocity(); - if (vel.magVecSquared() > 4.f) - { - setLookAt(LOOKAT_TARGET_IDLE, mAvatarObject, vel * av_inv_rot); - } - else - { - // *FIX: rotate mframeagent by sit object's rotation? - LLQuaternion look_rotation = mAvatarObject->isSitting() ? mAvatarObject->getRenderRotation() : mFrameAgent.getQuaternion(); // use camera's current rotation - LLVector3 look_offset = LLVector3(2.f, 0.f, 0.f) * look_rotation * av_inv_rot; - setLookAt(LOOKAT_TARGET_IDLE, mAvatarObject, look_offset); - } - last_at_axis = root_at; - return; - } - - last_at_axis = root_at; - - if (CAMERA_MODE_CUSTOMIZE_AVATAR == getCameraMode()) - { - setLookAt(LOOKAT_TARGET_NONE, mAvatarObject, LLVector3(-2.f, 0.f, 0.f)); - } - else - { - // Move head based on cursor position - ELookAtType lookAtType = LOOKAT_TARGET_NONE; - LLVector3 headLookAxis; - LLCoordFrame frameCamera = *((LLCoordFrame*)LLViewerCamera::getInstance()); - - if (cameraMouselook()) - { - lookAtType = LOOKAT_TARGET_MOUSELOOK; - } - else if (cameraThirdPerson()) - { - // range from -.5 to .5 - F32 x_from_center = - ((F32) mouse_x / (F32) gViewerWindow->getWindowWidthScaled() ) - 0.5f; - F32 y_from_center = - ((F32) mouse_y / (F32) gViewerWindow->getWindowHeightScaled() ) - 0.5f; - - frameCamera.yaw( - x_from_center * gSavedSettings.getF32("YawFromMousePosition") * DEG_TO_RAD); - frameCamera.pitch( - y_from_center * gSavedSettings.getF32("PitchFromMousePosition") * DEG_TO_RAD); - lookAtType = LOOKAT_TARGET_FREELOOK; - } - - headLookAxis = frameCamera.getAtAxis(); - // RN: we use world-space offset for mouselook and freelook - //headLookAxis = headLookAxis * av_inv_rot; - setLookAt(lookAtType, mAvatarObject, headLookAxis); - } + gAgentCamera.updateLookAt(mouse_x, mouse_y); } // friends and operators @@ -2633,44 +1551,6 @@ std::ostream& operator<<(std::ostream &s, const LLAgent &agent) return s; } - -// ------------------- Beginning of legacy LLCamera hack ---------------------- -// This section is included for legacy LLCamera support until -// it is no longer needed. Some legacy code must exist in -// non-legacy functions, and is labeled with "// legacy" comments. - -//----------------------------------------------------------------------------- -// setAvatarObject() -//----------------------------------------------------------------------------- -void LLAgent::setAvatarObject(LLVOAvatarSelf *avatar) -{ - mAvatarObject = avatar; - - if (!avatar) - { - llinfos << "Setting LLAgent::mAvatarObject to NULL" << llendl; - return; - } - - if (!mLookAt) - { - mLookAt = (LLHUDEffectLookAt *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_LOOKAT); - } - if (!mPointAt) - { - mPointAt = (LLHUDEffectPointAt *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_POINTAT); - } - - if (!mLookAt.isNull()) - { - mLookAt->setSourceObject(avatar); - } - if (!mPointAt.isNull()) - { - mPointAt->setSourceObject(avatar); - } -} - // TRUE if your own avatar needs to be rendered. Usually only // in third person and build. //----------------------------------------------------------------------------- @@ -2678,7 +1558,7 @@ void LLAgent::setAvatarObject(LLVOAvatarSelf *avatar) //----------------------------------------------------------------------------- BOOL LLAgent::needsRenderAvatar() { - if (cameraMouselook() && !LLVOAvatar::sVisibleInFirstPerson) + if (gAgentCamera.cameraMouselook() && !LLVOAvatar::sVisibleInFirstPerson) { return FALSE; } @@ -2689,7 +1569,7 @@ BOOL LLAgent::needsRenderAvatar() // TRUE if we need to render your own avatar's head. BOOL LLAgent::needsRenderHead() { - return (LLVOAvatar::sVisibleInFirstPerson && LLPipeline::sReflectionRender) || (mShowAvatar && !cameraMouselook()); + return (LLVOAvatar::sVisibleInFirstPerson && LLPipeline::sReflectionRender) || (mShowAvatar && !gAgentCamera.cameraMouselook()); } //----------------------------------------------------------------------------- @@ -2711,7 +1591,7 @@ void LLAgent::startTyping() LLViewerObject* chatter = gObjectList.findObject(mLastChatterID); if (chatter && chatter->isAvatar()) { - gAgent.setLookAt(LOOKAT_TARGET_RESPOND, chatter, LLVector3::zero); + gAgentCamera.setLookAt(LOOKAT_TARGET_RESPOND, chatter, LLVector3::zero); } } @@ -2790,14 +1670,14 @@ U8 LLAgent::getRenderState() //----------------------------------------------------------------------------- void LLAgent::endAnimationUpdateUI() { - if (mCameraMode == mLastCameraMode) + if (gAgentCamera.getCameraMode() == gAgentCamera.getLastCameraMode()) { // We're already done endAnimationUpdateUI for this transition. return; } // clean up UI from mode we're leaving - if ( mLastCameraMode == CAMERA_MODE_MOUSELOOK ) + if (gAgentCamera.getLastCameraMode() == CAMERA_MODE_MOUSELOOK ) { // show mouse cursor gViewerWindow->showCursor(); @@ -2835,33 +1715,33 @@ void LLAgent::endAnimationUpdateUI() } - gAgent.setLookAt(LOOKAT_TARGET_CLEAR); + gAgentCamera.setLookAt(LOOKAT_TARGET_CLEAR); if( gMorphView ) { gMorphView->setVisible( FALSE ); } // Disable mouselook-specific animations - if (mAvatarObject.notNull()) + if (isAgentAvatarValid()) { - if( mAvatarObject->isAnyAnimationSignaled(AGENT_GUN_AIM_ANIMS, NUM_AGENT_GUN_AIM_ANIMS) ) + if( gAgentAvatarp->isAnyAnimationSignaled(AGENT_GUN_AIM_ANIMS, NUM_AGENT_GUN_AIM_ANIMS) ) { - if (mAvatarObject->mSignaledAnimations.find(ANIM_AGENT_AIM_RIFLE_R) != mAvatarObject->mSignaledAnimations.end()) + if (gAgentAvatarp->mSignaledAnimations.find(ANIM_AGENT_AIM_RIFLE_R) != gAgentAvatarp->mSignaledAnimations.end()) { sendAnimationRequest(ANIM_AGENT_AIM_RIFLE_R, ANIM_REQUEST_STOP); sendAnimationRequest(ANIM_AGENT_HOLD_RIFLE_R, ANIM_REQUEST_START); } - if (mAvatarObject->mSignaledAnimations.find(ANIM_AGENT_AIM_HANDGUN_R) != mAvatarObject->mSignaledAnimations.end()) + if (gAgentAvatarp->mSignaledAnimations.find(ANIM_AGENT_AIM_HANDGUN_R) != gAgentAvatarp->mSignaledAnimations.end()) { sendAnimationRequest(ANIM_AGENT_AIM_HANDGUN_R, ANIM_REQUEST_STOP); sendAnimationRequest(ANIM_AGENT_HOLD_HANDGUN_R, ANIM_REQUEST_START); } - if (mAvatarObject->mSignaledAnimations.find(ANIM_AGENT_AIM_BAZOOKA_R) != mAvatarObject->mSignaledAnimations.end()) + if (gAgentAvatarp->mSignaledAnimations.find(ANIM_AGENT_AIM_BAZOOKA_R) != gAgentAvatarp->mSignaledAnimations.end()) { sendAnimationRequest(ANIM_AGENT_AIM_BAZOOKA_R, ANIM_REQUEST_STOP); sendAnimationRequest(ANIM_AGENT_HOLD_BAZOOKA_R, ANIM_REQUEST_START); } - if (mAvatarObject->mSignaledAnimations.find(ANIM_AGENT_AIM_BOW_L) != mAvatarObject->mSignaledAnimations.end()) + if (gAgentAvatarp->mSignaledAnimations.find(ANIM_AGENT_AIM_BOW_L) != gAgentAvatarp->mSignaledAnimations.end()) { sendAnimationRequest(ANIM_AGENT_AIM_BOW_L, ANIM_REQUEST_STOP); sendAnimationRequest(ANIM_AGENT_HOLD_BOW_L, ANIM_REQUEST_START); @@ -2869,8 +1749,7 @@ void LLAgent::endAnimationUpdateUI() } } } - else - if( mLastCameraMode == CAMERA_MODE_CUSTOMIZE_AVATAR ) + else if (gAgentCamera.getLastCameraMode() == CAMERA_MODE_CUSTOMIZE_AVATAR) { // make sure we ask to save changes @@ -2881,7 +1760,7 @@ void LLAgent::endAnimationUpdateUI() gMorphView->setVisible( FALSE ); } - if (mAvatarObject.notNull()) + if (isAgentAvatarValid()) { if(mCustomAnim) { @@ -2892,13 +1771,13 @@ void LLAgent::endAnimationUpdateUI() } } - setLookAt(LOOKAT_TARGET_CLEAR); + gAgentCamera.setLookAt(LOOKAT_TARGET_CLEAR); } //--------------------------------------------------------------------- // Set up UI for mode we're entering //--------------------------------------------------------------------- - if (mCameraMode == CAMERA_MODE_MOUSELOOK) + if (gAgentCamera.getCameraMode() == CAMERA_MODE_MOUSELOOK) { // hide menus gMenuBarView->setVisible(FALSE); @@ -2913,7 +1792,7 @@ void LLAgent::endAnimationUpdateUI() LLPanelStandStopFlying::getInstance()->setVisible(FALSE); // clear out camera lag effect - mCameraLag.clearVec(); + gAgentCamera.clearCameraLag(); // JC - Added for always chat in third person option gFocusMgr.setKeyboardFocus(NULL); @@ -2941,49 +1820,49 @@ void LLAgent::endAnimationUpdateUI() gConsole->setVisible( TRUE ); - if (mAvatarObject.notNull()) + if (isAgentAvatarValid()) { // Trigger mouselook-specific animations - if( mAvatarObject->isAnyAnimationSignaled(AGENT_GUN_HOLD_ANIMS, NUM_AGENT_GUN_HOLD_ANIMS) ) + if( gAgentAvatarp->isAnyAnimationSignaled(AGENT_GUN_HOLD_ANIMS, NUM_AGENT_GUN_HOLD_ANIMS) ) { - if (mAvatarObject->mSignaledAnimations.find(ANIM_AGENT_HOLD_RIFLE_R) != mAvatarObject->mSignaledAnimations.end()) + if (gAgentAvatarp->mSignaledAnimations.find(ANIM_AGENT_HOLD_RIFLE_R) != gAgentAvatarp->mSignaledAnimations.end()) { sendAnimationRequest(ANIM_AGENT_HOLD_RIFLE_R, ANIM_REQUEST_STOP); sendAnimationRequest(ANIM_AGENT_AIM_RIFLE_R, ANIM_REQUEST_START); } - if (mAvatarObject->mSignaledAnimations.find(ANIM_AGENT_HOLD_HANDGUN_R) != mAvatarObject->mSignaledAnimations.end()) + if (gAgentAvatarp->mSignaledAnimations.find(ANIM_AGENT_HOLD_HANDGUN_R) != gAgentAvatarp->mSignaledAnimations.end()) { sendAnimationRequest(ANIM_AGENT_HOLD_HANDGUN_R, ANIM_REQUEST_STOP); sendAnimationRequest(ANIM_AGENT_AIM_HANDGUN_R, ANIM_REQUEST_START); } - if (mAvatarObject->mSignaledAnimations.find(ANIM_AGENT_HOLD_BAZOOKA_R) != mAvatarObject->mSignaledAnimations.end()) + if (gAgentAvatarp->mSignaledAnimations.find(ANIM_AGENT_HOLD_BAZOOKA_R) != gAgentAvatarp->mSignaledAnimations.end()) { sendAnimationRequest(ANIM_AGENT_HOLD_BAZOOKA_R, ANIM_REQUEST_STOP); sendAnimationRequest(ANIM_AGENT_AIM_BAZOOKA_R, ANIM_REQUEST_START); } - if (mAvatarObject->mSignaledAnimations.find(ANIM_AGENT_HOLD_BOW_L) != mAvatarObject->mSignaledAnimations.end()) + if (gAgentAvatarp->mSignaledAnimations.find(ANIM_AGENT_HOLD_BOW_L) != gAgentAvatarp->mSignaledAnimations.end()) { sendAnimationRequest(ANIM_AGENT_HOLD_BOW_L, ANIM_REQUEST_STOP); sendAnimationRequest(ANIM_AGENT_AIM_BOW_L, ANIM_REQUEST_START); } } - if (mAvatarObject->getParent()) + if (gAgentAvatarp->getParent()) { LLVector3 at_axis = LLViewerCamera::getInstance()->getAtAxis(); - LLViewerObject* root_object = (LLViewerObject*)mAvatarObject->getRoot(); + LLViewerObject* root_object = (LLViewerObject*)gAgentAvatarp->getRoot(); if (root_object->flagCameraDecoupled()) { resetAxes(at_axis); } else { - resetAxes(at_axis * ~((LLViewerObject*)mAvatarObject->getParent())->getRenderRotation()); + resetAxes(at_axis * ~((LLViewerObject*)gAgentAvatarp->getParent())->getRenderRotation()); } } } } - else if (mCameraMode == CAMERA_MODE_CUSTOMIZE_AVATAR) + else if (gAgentCamera.getCameraMode() == CAMERA_MODE_CUSTOMIZE_AVATAR) { LLToolMgr::getInstance()->setCurrentToolset(gFaceEditToolset); @@ -2993,1588 +1872,22 @@ void LLAgent::endAnimationUpdateUI() } // freeze avatar - if (mAvatarObject.notNull()) + if (isAgentAvatarValid()) { - mPauseRequest = mAvatarObject->requestPause(); + mPauseRequest = gAgentAvatarp->requestPause(); } } - if (getAvatarObject()) + if (isAgentAvatarValid()) { - getAvatarObject()->updateAttachmentVisibility(mCameraMode); + gAgentAvatarp->updateAttachmentVisibility(gAgentCamera.getCameraMode()); } gFloaterTools->dirty(); // Don't let this be called more than once if the camera // mode hasn't changed. --JC - mLastCameraMode = mCameraMode; - -} - - -//----------------------------------------------------------------------------- -// updateCamera() -//----------------------------------------------------------------------------- -void LLAgent::updateCamera() -{ - static LLFastTimer::DeclareTimer ftm("Camera"); - LLFastTimer t(ftm); - - //Ventrella - changed camera_skyward to the new global "mCameraUpVector" - mCameraUpVector = LLVector3::z_axis; - //LLVector3 camera_skyward(0.f, 0.f, 1.f); - //end Ventrella - - U32 camera_mode = mCameraAnimating ? mLastCameraMode : mCameraMode; - - validateFocusObject(); - - if (mAvatarObject.notNull() && - mAvatarObject->isSitting() && - camera_mode == CAMERA_MODE_MOUSELOOK) - { - //Ventrella - //changed camera_skyward to the new global "mCameraUpVector" - mCameraUpVector = mCameraUpVector * mAvatarObject->getRenderRotation(); - //end Ventrella - } - - if (cameraThirdPerson() && mFocusOnAvatar && LLFollowCamMgr::getActiveFollowCamParams()) - { - changeCameraToFollow(); - } - - //Ventrella - //NOTE - this needs to be integrated into a general upVector system here within llAgent. - if ( camera_mode == CAMERA_MODE_FOLLOW && mFocusOnAvatar ) - { - mCameraUpVector = mFollowCam.getUpVector(); - } - //end Ventrella - - if (mSitCameraEnabled) - { - if (mSitCameraReferenceObject->isDead()) - { - setSitCamera(LLUUID::null); - } - } - - // Update UI with our camera inputs - LLFloaterCamera* camera_floater = LLFloaterReg::findTypedInstance<LLFloaterCamera>("camera"); - if (camera_floater) - { - camera_floater->mRotate->setToggleState( - mOrbitRightKey > 0.f, // left - mOrbitUpKey > 0.f, // top - mOrbitLeftKey > 0.f, // right - mOrbitDownKey > 0.f); // bottom - - camera_floater->mTrack->setToggleState( - mPanLeftKey > 0.f, // left - mPanUpKey > 0.f, // top - mPanRightKey > 0.f, // right - mPanDownKey > 0.f); // bottom - } - - // Handle camera movement based on keyboard. - const F32 ORBIT_OVER_RATE = 90.f * DEG_TO_RAD; // radians per second - const F32 ORBIT_AROUND_RATE = 90.f * DEG_TO_RAD; // radians per second - const F32 PAN_RATE = 5.f; // meters per second - - if( mOrbitUpKey || mOrbitDownKey ) - { - F32 input_rate = mOrbitUpKey - mOrbitDownKey; - cameraOrbitOver( input_rate * ORBIT_OVER_RATE / gFPSClamped ); - } - - if( mOrbitLeftKey || mOrbitRightKey) - { - F32 input_rate = mOrbitLeftKey - mOrbitRightKey; - cameraOrbitAround( input_rate * ORBIT_AROUND_RATE / gFPSClamped ); - } - - if( mOrbitInKey || mOrbitOutKey ) - { - F32 input_rate = mOrbitInKey - mOrbitOutKey; - - LLVector3d to_focus = gAgent.getPosGlobalFromAgent(LLViewerCamera::getInstance()->getOrigin()) - calcFocusPositionTargetGlobal(); - F32 distance_to_focus = (F32)to_focus.magVec(); - // Move at distance (in meters) meters per second - cameraOrbitIn( input_rate * distance_to_focus / gFPSClamped ); - } - - if( mPanInKey || mPanOutKey ) - { - F32 input_rate = mPanInKey - mPanOutKey; - cameraPanIn( input_rate * PAN_RATE / gFPSClamped ); - } - - if( mPanRightKey || mPanLeftKey ) - { - F32 input_rate = mPanRightKey - mPanLeftKey; - cameraPanLeft( input_rate * -PAN_RATE / gFPSClamped ); - } - - if( mPanUpKey || mPanDownKey ) - { - F32 input_rate = mPanUpKey - mPanDownKey; - cameraPanUp( input_rate * PAN_RATE / gFPSClamped ); - } - - // Clear camera keyboard keys. - mOrbitLeftKey = 0.f; - mOrbitRightKey = 0.f; - mOrbitUpKey = 0.f; - mOrbitDownKey = 0.f; - mOrbitInKey = 0.f; - mOrbitOutKey = 0.f; - - mPanRightKey = 0.f; - mPanLeftKey = 0.f; - mPanUpKey = 0.f; - mPanDownKey = 0.f; - mPanInKey = 0.f; - mPanOutKey = 0.f; - - // lerp camera focus offset - mCameraFocusOffset = lerp(mCameraFocusOffset, mCameraFocusOffsetTarget, LLCriticalDamp::getInterpolant(CAMERA_FOCUS_HALF_LIFE)); - - //Ventrella - if ( mCameraMode == CAMERA_MODE_FOLLOW ) - { - if ( mAvatarObject.notNull() ) - { - //-------------------------------------------------------------------------------- - // this is where the avatar's position and rotation are given to followCam, and - // where it is updated. All three of its attributes are updated: (1) position, - // (2) focus, and (3) upvector. They can then be queried elsewhere in llAgent. - //-------------------------------------------------------------------------------- - // *TODO: use combined rotation of frameagent and sit object - LLQuaternion avatarRotationForFollowCam = mAvatarObject->isSitting() ? mAvatarObject->getRenderRotation() : mFrameAgent.getQuaternion(); - - LLFollowCamParams* current_cam = LLFollowCamMgr::getActiveFollowCamParams(); - if (current_cam) - { - mFollowCam.copyParams(*current_cam); - mFollowCam.setSubjectPositionAndRotation( mAvatarObject->getRenderPosition(), avatarRotationForFollowCam ); - mFollowCam.update(); - LLViewerJoystick::getInstance()->setCameraNeedsUpdate(true); - } - else - { - changeCameraToThirdPerson(TRUE); - } - } - } - // end Ventrella - - BOOL hit_limit; - LLVector3d camera_pos_global; - LLVector3d camera_target_global = calcCameraPositionTargetGlobal(&hit_limit); - mCameraVirtualPositionAgent = getPosAgentFromGlobal(camera_target_global); - LLVector3d focus_target_global = calcFocusPositionTargetGlobal(); - - // perform field of view correction - mCameraFOVZoomFactor = calcCameraFOVZoomFactor(); - camera_target_global = focus_target_global + (camera_target_global - focus_target_global) * (1.f + mCameraFOVZoomFactor); - - mShowAvatar = TRUE; // can see avatar by default - - // Adjust position for animation - if (mCameraAnimating) - { - F32 time = mAnimationTimer.getElapsedTimeF32(); - - // yet another instance of critically damped motion, hooray! - // F32 fraction_of_animation = 1.f - pow(2.f, -time / CAMERA_ZOOM_HALF_LIFE); - - // linear interpolation - F32 fraction_of_animation = time / mAnimationDuration; - - BOOL isfirstPerson = mCameraMode == CAMERA_MODE_MOUSELOOK; - BOOL wasfirstPerson = mLastCameraMode == CAMERA_MODE_MOUSELOOK; - F32 fraction_animation_to_skip; - - if (mAnimationCameraStartGlobal == camera_target_global) - { - fraction_animation_to_skip = 0.f; - } - else - { - LLVector3d cam_delta = mAnimationCameraStartGlobal - camera_target_global; - fraction_animation_to_skip = HEAD_BUFFER_SIZE / (F32)cam_delta.magVec(); - } - F32 animation_start_fraction = (wasfirstPerson) ? fraction_animation_to_skip : 0.f; - F32 animation_finish_fraction = (isfirstPerson) ? (1.f - fraction_animation_to_skip) : 1.f; - - if (fraction_of_animation < animation_finish_fraction) - { - if (fraction_of_animation < animation_start_fraction || fraction_of_animation > animation_finish_fraction ) - { - mShowAvatar = FALSE; - } - - // ...adjust position for animation - F32 smooth_fraction_of_animation = llsmoothstep(0.0f, 1.0f, fraction_of_animation); - camera_pos_global = lerp(mAnimationCameraStartGlobal, camera_target_global, smooth_fraction_of_animation); - mFocusGlobal = lerp(mAnimationFocusStartGlobal, focus_target_global, smooth_fraction_of_animation); - } - else - { - // ...animation complete - mCameraAnimating = FALSE; - - camera_pos_global = camera_target_global; - mFocusGlobal = focus_target_global; - - endAnimationUpdateUI(); - mShowAvatar = TRUE; - } - - if (getAvatarObject() && mCameraMode != CAMERA_MODE_MOUSELOOK) - { - getAvatarObject()->updateAttachmentVisibility(mCameraMode); - } - } - else - { - camera_pos_global = camera_target_global; - mFocusGlobal = focus_target_global; - mShowAvatar = TRUE; - } - - // smoothing - if (TRUE) - { - LLVector3d agent_pos = getPositionGlobal(); - LLVector3d camera_pos_agent = camera_pos_global - agent_pos; - // Sitting on what you're manipulating can cause camera jitter with smoothing. - // This turns off smoothing while editing. -MG - mCameraSmoothingStop |= (BOOL)LLToolMgr::getInstance()->inBuildMode(); - - if (cameraThirdPerson() && !mCameraSmoothingStop) - { - const F32 SMOOTHING_HALF_LIFE = 0.02f; - - F32 smoothing = LLCriticalDamp::getInterpolant(gSavedSettings.getF32("CameraPositionSmoothing") * SMOOTHING_HALF_LIFE, FALSE); - - if (!mFocusObject) // we differentiate on avatar mode - { - // for avatar-relative focus, we smooth in avatar space - - // the avatar moves too jerkily w/r/t global space to smooth there. - - LLVector3d delta = camera_pos_agent - mCameraSmoothingLastPositionAgent; - if (delta.magVec() < MAX_CAMERA_SMOOTH_DISTANCE) // only smooth over short distances please - { - camera_pos_agent = lerp(mCameraSmoothingLastPositionAgent, camera_pos_agent, smoothing); - camera_pos_global = camera_pos_agent + agent_pos; - } - } - else - { - LLVector3d delta = camera_pos_global - mCameraSmoothingLastPositionGlobal; - if (delta.magVec() < MAX_CAMERA_SMOOTH_DISTANCE) // only smooth over short distances please - { - camera_pos_global = lerp(mCameraSmoothingLastPositionGlobal, camera_pos_global, smoothing); - } - } - } - - mCameraSmoothingLastPositionGlobal = camera_pos_global; - mCameraSmoothingLastPositionAgent = camera_pos_agent; - mCameraSmoothingStop = FALSE; - } - - - mCameraCurrentFOVZoomFactor = lerp(mCameraCurrentFOVZoomFactor, mCameraFOVZoomFactor, LLCriticalDamp::getInterpolant(FOV_ZOOM_HALF_LIFE)); - -// llinfos << "Current FOV Zoom: " << mCameraCurrentFOVZoomFactor << " Target FOV Zoom: " << mCameraFOVZoomFactor << " Object penetration: " << mFocusObjectDist << llendl; - - F32 ui_offset = 0.f; - if( CAMERA_MODE_CUSTOMIZE_AVATAR == mCameraMode ) - { - ui_offset = calcCustomizeAvatarUIOffset( camera_pos_global ); - } - - - LLVector3 focus_agent = getPosAgentFromGlobal(mFocusGlobal); - - mCameraPositionAgent = getPosAgentFromGlobal(camera_pos_global); - - // Move the camera - - //Ventrella - LLViewerCamera::getInstance()->updateCameraLocation(mCameraPositionAgent, mCameraUpVector, focus_agent); - //LLViewerCamera::getInstance()->updateCameraLocation(mCameraPositionAgent, camera_skyward, focus_agent); - //end Ventrella - - //RN: translate UI offset after camera is oriented properly - LLViewerCamera::getInstance()->translate(LLViewerCamera::getInstance()->getLeftAxis() * ui_offset); - - // Change FOV - LLViewerCamera::getInstance()->setView(LLViewerCamera::getInstance()->getDefaultFOV() / (1.f + mCameraCurrentFOVZoomFactor)); - - // follow camera when in customize mode - if (cameraCustomizeAvatar()) - { - setLookAt(LOOKAT_TARGET_FOCUS, NULL, mCameraPositionAgent); - } - - // update the travel distance stat - // this isn't directly related to the camera - // but this seemed like the best place to do this - LLVector3d global_pos = getPositionGlobal(); - if (! mLastPositionGlobal.isExactlyZero()) - { - LLVector3d delta = global_pos - mLastPositionGlobal; - mDistanceTraveled += delta.magVec(); - } - mLastPositionGlobal = global_pos; - - if (LLVOAvatar::sVisibleInFirstPerson && mAvatarObject.notNull() && !mAvatarObject->isSitting() && cameraMouselook()) - { - LLVector3 head_pos = mAvatarObject->mHeadp->getWorldPosition() + - LLVector3(0.08f, 0.f, 0.05f) * mAvatarObject->mHeadp->getWorldRotation() + - LLVector3(0.1f, 0.f, 0.f) * mAvatarObject->mPelvisp->getWorldRotation(); - LLVector3 diff = mCameraPositionAgent - head_pos; - diff = diff * ~mAvatarObject->mRoot.getWorldRotation(); - - LLJoint* torso_joint = mAvatarObject->mTorsop; - LLJoint* chest_joint = mAvatarObject->mChestp; - LLVector3 torso_scale = torso_joint->getScale(); - LLVector3 chest_scale = chest_joint->getScale(); - - // shorten avatar skeleton to avoid foot interpenetration - if (!mAvatarObject->mInAir) - { - LLVector3 chest_offset = LLVector3(0.f, 0.f, chest_joint->getPosition().mV[VZ]) * torso_joint->getWorldRotation(); - F32 z_compensate = llclamp(-diff.mV[VZ], -0.2f, 1.f); - F32 scale_factor = llclamp(1.f - ((z_compensate * 0.5f) / chest_offset.mV[VZ]), 0.5f, 1.2f); - torso_joint->setScale(LLVector3(1.f, 1.f, scale_factor)); - - LLJoint* neck_joint = mAvatarObject->mNeckp; - LLVector3 neck_offset = LLVector3(0.f, 0.f, neck_joint->getPosition().mV[VZ]) * chest_joint->getWorldRotation(); - scale_factor = llclamp(1.f - ((z_compensate * 0.5f) / neck_offset.mV[VZ]), 0.5f, 1.2f); - chest_joint->setScale(LLVector3(1.f, 1.f, scale_factor)); - diff.mV[VZ] = 0.f; - } - - mAvatarObject->mPelvisp->setPosition(mAvatarObject->mPelvisp->getPosition() + diff); - - mAvatarObject->mRoot.updateWorldMatrixChildren(); - - for (LLVOAvatar::attachment_map_t::iterator iter = mAvatarObject->mAttachmentPoints.begin(); - iter != mAvatarObject->mAttachmentPoints.end(); ) - { - LLVOAvatar::attachment_map_t::iterator curiter = iter++; - LLViewerJointAttachment* attachment = curiter->second; - for (LLViewerJointAttachment::attachedobjs_vec_t::iterator attachment_iter = attachment->mAttachedObjects.begin(); - attachment_iter != attachment->mAttachedObjects.end(); - ++attachment_iter) - { - LLViewerObject *attached_object = (*attachment_iter); - if (attached_object && !attached_object->isDead() && attached_object->mDrawable.notNull()) - { - // clear any existing "early" movements of attachment - attached_object->mDrawable->clearState(LLDrawable::EARLY_MOVE); - gPipeline.updateMoveNormalAsync(attached_object->mDrawable); - attached_object->updateText(); - } - } - } - - torso_joint->setScale(torso_scale); - chest_joint->setScale(chest_scale); - } -} - -void LLAgent::updateFocusOffset() -{ - validateFocusObject(); - if (mFocusObject.notNull()) - { - LLVector3d obj_pos = getPosGlobalFromAgent(mFocusObject->getRenderPosition()); - mFocusObjectOffset.setVec(mFocusTargetGlobal - obj_pos); - } -} - -void LLAgent::validateFocusObject() -{ - if (mFocusObject.notNull() && - (mFocusObject->isDead())) - { - mFocusObjectOffset.clearVec(); - clearFocusObject(); - mCameraFOVZoomFactor = 0.f; - } -} - -//----------------------------------------------------------------------------- -// calcCustomizeAvatarUIOffset() -//----------------------------------------------------------------------------- -F32 LLAgent::calcCustomizeAvatarUIOffset( const LLVector3d& camera_pos_global ) -{ - F32 ui_offset = 0.f; - - if( gFloaterCustomize ) - { - const LLRect& rect = gFloaterCustomize->getRect(); - - // Move the camera so that the avatar isn't covered up by this floater. - F32 fraction_of_fov = 0.5f - (0.5f * (1.f - llmin(1.f, ((F32)rect.getWidth() / (F32)gViewerWindow->getWindowWidthScaled())))); - F32 apparent_angle = fraction_of_fov * LLViewerCamera::getInstance()->getView() * LLViewerCamera::getInstance()->getAspect(); // radians - F32 offset = tan(apparent_angle); - - if( rect.mLeft < (gViewerWindow->getWindowWidthScaled() - rect.mRight) ) - { - // Move the avatar to the right (camera to the left) - ui_offset = offset; - } - else - { - // Move the avatar to the left (camera to the right) - ui_offset = -offset; - } - } - F32 range = (F32)dist_vec(camera_pos_global, gAgent.getFocusGlobal()); - mUIOffset = lerp(mUIOffset, ui_offset, LLCriticalDamp::getInterpolant(0.05f)); - return mUIOffset * range; -} - -//----------------------------------------------------------------------------- -// calcFocusPositionTargetGlobal() -//----------------------------------------------------------------------------- -LLVector3d LLAgent::calcFocusPositionTargetGlobal() -{ - if (mFocusObject.notNull() && mFocusObject->isDead()) - { - clearFocusObject(); - } - - // Ventrella - if ( mCameraMode == CAMERA_MODE_FOLLOW && mFocusOnAvatar ) - { - mFocusTargetGlobal = gAgent.getPosGlobalFromAgent(mFollowCam.getSimulatedFocus()); - return mFocusTargetGlobal; - }// End Ventrella - else if (mCameraMode == CAMERA_MODE_MOUSELOOK) - { - LLVector3d at_axis(1.0, 0.0, 0.0); - LLQuaternion agent_rot = mFrameAgent.getQuaternion(); - if (mAvatarObject.notNull() && mAvatarObject->getParent()) - { - LLViewerObject* root_object = (LLViewerObject*)mAvatarObject->getRoot(); - if (!root_object->flagCameraDecoupled()) - { - agent_rot *= ((LLViewerObject*)(mAvatarObject->getParent()))->getRenderRotation(); - } - } - at_axis = at_axis * agent_rot; - mFocusTargetGlobal = calcCameraPositionTargetGlobal() + at_axis; - return mFocusTargetGlobal; - } - else if (mCameraMode == CAMERA_MODE_CUSTOMIZE_AVATAR) - { - return mFocusTargetGlobal; - } - else if (!mFocusOnAvatar) - { - if (mFocusObject.notNull() && !mFocusObject->isDead() && mFocusObject->mDrawable.notNull()) - { - LLDrawable* drawablep = mFocusObject->mDrawable; - - if (mTrackFocusObject && - drawablep && - drawablep->isActive()) - { - if (!mFocusObject->isAvatar()) - { - if (mFocusObject->isSelected()) - { - gPipeline.updateMoveNormalAsync(drawablep); - } - else - { - if (drawablep->isState(LLDrawable::MOVE_UNDAMPED)) - { - gPipeline.updateMoveNormalAsync(drawablep); - } - else - { - gPipeline.updateMoveDampedAsync(drawablep); - } - } - } - } - // if not tracking object, update offset based on new object position - else - { - updateFocusOffset(); - } - LLVector3 focus_agent = mFocusObject->getRenderPosition() + mFocusObjectOffset; - mFocusTargetGlobal.setVec(getPosGlobalFromAgent(focus_agent)); - } - return mFocusTargetGlobal; - } - else if (mSitCameraEnabled && mAvatarObject.notNull() && mAvatarObject->isSitting() && mSitCameraReferenceObject.notNull()) - { - // sit camera - LLVector3 object_pos = mSitCameraReferenceObject->getRenderPosition(); - LLQuaternion object_rot = mSitCameraReferenceObject->getRenderRotation(); - - LLVector3 target_pos = object_pos + (mSitCameraFocus * object_rot); - return getPosGlobalFromAgent(target_pos); - } - else - { - return getPositionGlobal() + calcThirdPersonFocusOffset(); - } -} - -LLVector3d LLAgent::calcThirdPersonFocusOffset() -{ - // ...offset from avatar - LLVector3d focus_offset; - - LLQuaternion agent_rot = mFrameAgent.getQuaternion(); - if (!mAvatarObject.isNull() && mAvatarObject->getParent()) - { - agent_rot *= ((LLViewerObject*)(mAvatarObject->getParent()))->getRenderRotation(); - } - - focus_offset = mFocusOffsetInitial[mCameraPreset] * agent_rot; - return focus_offset; -} - -void LLAgent::setupSitCamera() -{ - // agent frame entering this function is in world coordinates - if (mAvatarObject.notNull() && mAvatarObject->getParent()) - { - LLQuaternion parent_rot = ((LLViewerObject*)mAvatarObject->getParent())->getRenderRotation(); - // slam agent coordinate frame to proper parent local version - LLVector3 at_axis = mFrameAgent.getAtAxis(); - at_axis.mV[VZ] = 0.f; - at_axis.normalize(); - resetAxes(at_axis * ~parent_rot); - } -} - -//----------------------------------------------------------------------------- -// getCameraPositionAgent() -//----------------------------------------------------------------------------- -const LLVector3 &LLAgent::getCameraPositionAgent() const -{ - return LLViewerCamera::getInstance()->getOrigin(); -} - -//----------------------------------------------------------------------------- -// getCameraPositionGlobal() -//----------------------------------------------------------------------------- -LLVector3d LLAgent::getCameraPositionGlobal() const -{ - return getPosGlobalFromAgent(LLViewerCamera::getInstance()->getOrigin()); -} - -//----------------------------------------------------------------------------- -// calcCameraFOVZoomFactor() -//----------------------------------------------------------------------------- -F32 LLAgent::calcCameraFOVZoomFactor() -{ - LLVector3 camera_offset_dir; - camera_offset_dir.setVec(mCameraFocusOffset); - - if (mCameraMode == CAMERA_MODE_MOUSELOOK) - { - return 0.f; - } - else if (mFocusObject.notNull() && !mFocusObject->isAvatar() && !mFocusOnAvatar) - { - // don't FOV zoom on mostly transparent objects - LLVector3 focus_offset = mFocusObjectOffset; - F32 obj_min_dist = 0.f; - calcCameraMinDistance(obj_min_dist); - F32 current_distance = llmax(0.001f, camera_offset_dir.magVec()); - - mFocusObjectDist = obj_min_dist - current_distance; - - F32 new_fov_zoom = llclamp(mFocusObjectDist / current_distance, 0.f, 1000.f); - return new_fov_zoom; - } - else // focusing on land or avatar - { - // keep old field of view until user changes focus explicitly - return mCameraFOVZoomFactor; - //return 0.f; - } -} - -//----------------------------------------------------------------------------- -// calcCameraPositionTargetGlobal() -//----------------------------------------------------------------------------- -LLVector3d LLAgent::calcCameraPositionTargetGlobal(BOOL *hit_limit) -{ - // Compute base camera position and look-at points. - F32 camera_land_height; - LLVector3d frame_center_global = mAvatarObject.isNull() ? getPositionGlobal() - : getPosGlobalFromAgent(mAvatarObject->mRoot.getWorldPosition()); - - BOOL isConstrained = FALSE; - LLVector3d head_offset; - head_offset.setVec(mThirdPersonHeadOffset); - - LLVector3d camera_position_global; - - // Ventrella - if ( mCameraMode == CAMERA_MODE_FOLLOW && mFocusOnAvatar ) - { - camera_position_global = gAgent.getPosGlobalFromAgent(mFollowCam.getSimulatedPosition()); - }// End Ventrella - else if (mCameraMode == CAMERA_MODE_MOUSELOOK) - { - if (mAvatarObject.isNull() || mAvatarObject->mDrawable.isNull()) - { - llwarns << "Null avatar drawable!" << llendl; - return LLVector3d::zero; - } - head_offset.clearVec(); - if (mAvatarObject->isSitting() && mAvatarObject->getParent()) - { - mAvatarObject->updateHeadOffset(); - head_offset.mdV[VX] = mAvatarObject->mHeadOffset.mV[VX]; - head_offset.mdV[VY] = mAvatarObject->mHeadOffset.mV[VY]; - head_offset.mdV[VZ] = mAvatarObject->mHeadOffset.mV[VZ] + 0.1f; - const LLMatrix4& mat = ((LLViewerObject*) mAvatarObject->getParent())->getRenderMatrix(); - camera_position_global = getPosGlobalFromAgent - ((mAvatarObject->getPosition()+ - LLVector3(head_offset)*mAvatarObject->getRotation()) * mat); - } - else - { - head_offset.mdV[VZ] = mAvatarObject->mHeadOffset.mV[VZ]; - if (mAvatarObject->isSitting()) - { - head_offset.mdV[VZ] += 0.1; - } - camera_position_global = getPosGlobalFromAgent(mAvatarObject->getRenderPosition());//frame_center_global; - head_offset = head_offset * mAvatarObject->getRenderRotation(); - camera_position_global = camera_position_global + head_offset; - } - } - else if (mCameraMode == CAMERA_MODE_THIRD_PERSON && mFocusOnAvatar) - { - LLVector3 local_camera_offset; - F32 camera_distance = 0.f; - - if (mSitCameraEnabled - && mAvatarObject.notNull() - && mAvatarObject->isSitting() - && mSitCameraReferenceObject.notNull()) - { - // sit camera - LLVector3 object_pos = mSitCameraReferenceObject->getRenderPosition(); - LLQuaternion object_rot = mSitCameraReferenceObject->getRenderRotation(); - - LLVector3 target_pos = object_pos + (mSitCameraPos * object_rot); - - camera_position_global = getPosGlobalFromAgent(target_pos); - } - else - { - local_camera_offset = mCameraZoomFraction * getCameraOffsetInitial() * gSavedSettings.getF32("CameraOffsetScale"); - - // are we sitting down? - if (mAvatarObject.notNull() && mAvatarObject->getParent()) - { - LLQuaternion parent_rot = ((LLViewerObject*)mAvatarObject->getParent())->getRenderRotation(); - // slam agent coordinate frame to proper parent local version - LLVector3 at_axis = mFrameAgent.getAtAxis() * parent_rot; - at_axis.mV[VZ] = 0.f; - at_axis.normalize(); - resetAxes(at_axis * ~parent_rot); - - local_camera_offset = local_camera_offset * mFrameAgent.getQuaternion() * parent_rot; - } - else - { - local_camera_offset = mFrameAgent.rotateToAbsolute( local_camera_offset ); - } - - if (!mCameraCollidePlane.isExactlyZero() && (mAvatarObject.isNull() || !mAvatarObject->isSitting())) - { - LLVector3 plane_normal; - plane_normal.setVec(mCameraCollidePlane.mV); - - F32 offset_dot_norm = local_camera_offset * plane_normal; - if (llabs(offset_dot_norm) < 0.001f) - { - offset_dot_norm = 0.001f; - } - - camera_distance = local_camera_offset.normalize(); - - F32 pos_dot_norm = getPosAgentFromGlobal(frame_center_global + head_offset) * plane_normal; - - // if agent is outside the colliding half-plane - if (pos_dot_norm > mCameraCollidePlane.mV[VW]) - { - // check to see if camera is on the opposite side (inside) the half-plane - if (offset_dot_norm + pos_dot_norm < mCameraCollidePlane.mV[VW]) - { - // diminish offset by factor to push it back outside the half-plane - camera_distance *= (pos_dot_norm - mCameraCollidePlane.mV[VW] - CAMERA_COLLIDE_EPSILON) / -offset_dot_norm; - } - } - else - { - if (offset_dot_norm + pos_dot_norm > mCameraCollidePlane.mV[VW]) - { - camera_distance *= (mCameraCollidePlane.mV[VW] - pos_dot_norm - CAMERA_COLLIDE_EPSILON) / offset_dot_norm; - } - } - } - else - { - camera_distance = local_camera_offset.normalize(); - } - - mTargetCameraDistance = llmax(camera_distance, MIN_CAMERA_DISTANCE); - - if (mTargetCameraDistance != mCurrentCameraDistance) - { - F32 camera_lerp_amt = LLCriticalDamp::getInterpolant(CAMERA_ZOOM_HALF_LIFE); - - mCurrentCameraDistance = lerp(mCurrentCameraDistance, mTargetCameraDistance, camera_lerp_amt); - } - - // Make the camera distance current - local_camera_offset *= mCurrentCameraDistance; - - // set the global camera position - LLVector3d camera_offset; - - LLVector3 av_pos = mAvatarObject.isNull() ? LLVector3::zero : mAvatarObject->getRenderPosition(); - camera_offset.setVec( local_camera_offset ); - camera_position_global = frame_center_global + head_offset + camera_offset; - - if (mAvatarObject.notNull()) - { - LLVector3d camera_lag_d; - F32 lag_interp = LLCriticalDamp::getInterpolant(CAMERA_LAG_HALF_LIFE); - LLVector3 target_lag; - LLVector3 vel = getVelocity(); - - // lag by appropriate amount for flying - F32 time_in_air = mAvatarObject->mTimeInAir.getElapsedTimeF32(); - if(!mCameraAnimating && mAvatarObject->mInAir && time_in_air > GROUND_TO_AIR_CAMERA_TRANSITION_START_TIME) - { - LLVector3 frame_at_axis = mFrameAgent.getAtAxis(); - frame_at_axis -= projected_vec(frame_at_axis, getReferenceUpVector()); - frame_at_axis.normalize(); - - //transition smoothly in air mode, to avoid camera pop - F32 u = (time_in_air - GROUND_TO_AIR_CAMERA_TRANSITION_START_TIME) / GROUND_TO_AIR_CAMERA_TRANSITION_TIME; - u = llclamp(u, 0.f, 1.f); - - lag_interp *= u; - - if (gViewerWindow->getLeftMouseDown() && gViewerWindow->getLastPick().mObjectID == mAvatarObject->getID()) - { - // disable camera lag when using mouse-directed steering - target_lag.clearVec(); - } - else - { - target_lag = vel * gSavedSettings.getF32("DynamicCameraStrength") / 30.f; - } - - mCameraLag = lerp(mCameraLag, target_lag, lag_interp); - - F32 lag_dist = mCameraLag.magVec(); - if (lag_dist > MAX_CAMERA_LAG) - { - mCameraLag = mCameraLag * MAX_CAMERA_LAG / lag_dist; - } - - // clamp camera lag so that avatar is always in front - F32 dot = (mCameraLag - (frame_at_axis * (MIN_CAMERA_LAG * u))) * frame_at_axis; - if (dot < -(MIN_CAMERA_LAG * u)) - { - mCameraLag -= (dot + (MIN_CAMERA_LAG * u)) * frame_at_axis; - } - } - else - { - mCameraLag = lerp(mCameraLag, LLVector3::zero, LLCriticalDamp::getInterpolant(0.15f)); - } - - camera_lag_d.setVec(mCameraLag); - camera_position_global = camera_position_global - camera_lag_d; - } - } - } - else - { - LLVector3d focusPosGlobal = calcFocusPositionTargetGlobal(); - // camera gets pushed out later wrt mCameraFOVZoomFactor...this is "raw" value - camera_position_global = focusPosGlobal + mCameraFocusOffset; - } - - if (!gSavedSettings.getBOOL("DisableCameraConstraints") && !gAgent.isGodlike()) - { - LLViewerRegion* regionp = LLWorld::getInstance()->getRegionFromPosGlobal( - camera_position_global); - bool constrain = true; - if(regionp && regionp->canManageEstate()) - { - constrain = false; - } - if(constrain) - { - F32 max_dist = ( CAMERA_MODE_CUSTOMIZE_AVATAR == mCameraMode ) ? - APPEARANCE_MAX_ZOOM : mDrawDistance; - - LLVector3d camera_offset = camera_position_global - - gAgent.getPositionGlobal(); - F32 camera_distance = (F32)camera_offset.magVec(); - - if(camera_distance > max_dist) - { - camera_position_global = gAgent.getPositionGlobal() + - (max_dist / camera_distance) * camera_offset; - isConstrained = TRUE; - } - } - -// JC - Could constrain camera based on parcel stuff here. -// LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromPosGlobal(camera_position_global); -// -// if (regionp && !regionp->mParcelOverlay->isBuildCameraAllowed(regionp->getPosRegionFromGlobal(camera_position_global))) -// { -// camera_position_global = last_position_global; -// -// isConstrained = TRUE; -// } - } - - // Don't let camera go underground - F32 camera_min_off_ground = getCameraMinOffGround(); - - camera_land_height = LLWorld::getInstance()->resolveLandHeightGlobal(camera_position_global); - - if (camera_position_global.mdV[VZ] < camera_land_height + camera_min_off_ground) - { - camera_position_global.mdV[VZ] = camera_land_height + camera_min_off_ground; - isConstrained = TRUE; - } - - - if (hit_limit) - { - *hit_limit = isConstrained; - } - - return camera_position_global; -} - - -LLVector3 LLAgent::getCameraOffsetInitial() -{ - return mCameraOffsetInitial[mCameraPreset]; -} - - -//----------------------------------------------------------------------------- -// handleScrollWheel() -//----------------------------------------------------------------------------- -void LLAgent::handleScrollWheel(S32 clicks) -{ - if ( mCameraMode == CAMERA_MODE_FOLLOW && gAgent.getFocusOnAvatar()) - { - if ( ! mFollowCam.getPositionLocked() ) // not if the followCam position is locked in place - { - mFollowCam.zoom( clicks ); - if ( mFollowCam.isZoomedToMinimumDistance() ) - { - changeCameraToMouselook(FALSE); - } - } - } - else - { - LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection(); - const F32 ROOT_ROOT_TWO = sqrt(F_SQRT2); - - // Block if camera is animating - if (mCameraAnimating) - { - return; - } - - if (selection->getObjectCount() && selection->getSelectType() == SELECT_TYPE_HUD) - { - F32 zoom_factor = (F32)pow(0.8, -clicks); - cameraZoomIn(zoom_factor); - } - else if (mFocusOnAvatar && mCameraMode == CAMERA_MODE_THIRD_PERSON) - { - F32 camera_offset_initial_mag = getCameraOffsetInitial().magVec(); - - F32 current_zoom_fraction = mTargetCameraDistance / (camera_offset_initial_mag * gSavedSettings.getF32("CameraOffsetScale")); - current_zoom_fraction *= 1.f - pow(ROOT_ROOT_TWO, clicks); - - cameraOrbitIn(current_zoom_fraction * camera_offset_initial_mag * gSavedSettings.getF32("CameraOffsetScale")); - } - else - { - F32 current_zoom_fraction = (F32)mCameraFocusOffsetTarget.magVec(); - cameraOrbitIn(current_zoom_fraction * (1.f - pow(ROOT_ROOT_TWO, clicks))); - } - } -} - - -//----------------------------------------------------------------------------- -// getCameraMinOffGround() -//----------------------------------------------------------------------------- -F32 LLAgent::getCameraMinOffGround() -{ - if (mCameraMode == CAMERA_MODE_MOUSELOOK) - { - return 0.f; - } - else - { - if (gSavedSettings.getBOOL("DisableCameraConstraints")) - { - return -1000.f; - } - else - { - return 0.5f; - } - } -} - - -//----------------------------------------------------------------------------- -// resetCamera() -//----------------------------------------------------------------------------- -void LLAgent::resetCamera() -{ - // Remove any pitch from the avatar - LLVector3 at = mFrameAgent.getAtAxis(); - at.mV[VZ] = 0.f; - at.normalize(); - gAgent.resetAxes(at); - // have to explicitly clear field of view zoom now - mCameraFOVZoomFactor = 0.f; - - updateCamera(); -} - -//----------------------------------------------------------------------------- -// changeCameraToMouselook() -//----------------------------------------------------------------------------- -void LLAgent::changeCameraToMouselook(BOOL animate) -{ - if (LLViewerJoystick::getInstance()->getOverrideCamera()) - { - return; - } - - // visibility changes at end of animation - gViewerWindow->getWindow()->resetBusyCount(); - - // unpause avatar animation - mPauseRequest = NULL; - - LLToolMgr::getInstance()->setCurrentToolset(gMouselookToolset); - - if (mAvatarObject.notNull()) - { - mAvatarObject->stopMotion( ANIM_AGENT_BODY_NOISE ); - mAvatarObject->stopMotion( ANIM_AGENT_BREATHE_ROT ); - } - - //gViewerWindow->stopGrab(); - LLSelectMgr::getInstance()->deselectAll(); - gViewerWindow->hideCursor(); - gViewerWindow->moveCursorToCenter(); - - if( mCameraMode != CAMERA_MODE_MOUSELOOK ) - { - gFocusMgr.setKeyboardFocus( NULL ); - - mLastCameraMode = mCameraMode; - mCameraMode = CAMERA_MODE_MOUSELOOK; - U32 old_flags = mControlFlags; - setControlFlags(AGENT_CONTROL_MOUSELOOK); - if (old_flags != mControlFlags) - { - mbFlagsDirty = TRUE; - } - - if (animate) - { - startCameraAnimation(); - } - else - { - mCameraAnimating = FALSE; - endAnimationUpdateUI(); - } - } -} - - -//----------------------------------------------------------------------------- -// changeCameraToDefault() -//----------------------------------------------------------------------------- -void LLAgent::changeCameraToDefault() -{ - if (LLViewerJoystick::getInstance()->getOverrideCamera()) - { - return; - } - - if (LLFollowCamMgr::getActiveFollowCamParams()) - { - changeCameraToFollow(); - } - else - { - changeCameraToThirdPerson(); - } -} - - -// Ventrella -//----------------------------------------------------------------------------- -// changeCameraToFollow() -//----------------------------------------------------------------------------- -void LLAgent::changeCameraToFollow(BOOL animate) -{ - if (LLViewerJoystick::getInstance()->getOverrideCamera()) - { - return; - } - - if( mCameraMode != CAMERA_MODE_FOLLOW ) - { - if (mCameraMode == CAMERA_MODE_MOUSELOOK) - { - animate = FALSE; - } - startCameraAnimation(); - - mLastCameraMode = mCameraMode; - mCameraMode = CAMERA_MODE_FOLLOW; - - // bang-in the current focus, position, and up vector of the follow cam - mFollowCam.reset( mCameraPositionAgent, LLViewerCamera::getInstance()->getPointOfInterest(), LLVector3::z_axis ); - - if (gBasicToolset) - { - LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset); - } - - if (mAvatarObject.notNull()) - { - mAvatarObject->mPelvisp->setPosition(LLVector3::zero); - mAvatarObject->startMotion( ANIM_AGENT_BODY_NOISE ); - mAvatarObject->startMotion( ANIM_AGENT_BREATHE_ROT ); - } - - // unpause avatar animation - mPauseRequest = NULL; - - U32 old_flags = mControlFlags; - clearControlFlags(AGENT_CONTROL_MOUSELOOK); - if (old_flags != mControlFlags) - { - mbFlagsDirty = TRUE; - } - - if (animate) - { - startCameraAnimation(); - } - else - { - mCameraAnimating = FALSE; - endAnimationUpdateUI(); - } - } -} - -//----------------------------------------------------------------------------- -// changeCameraToThirdPerson() -//----------------------------------------------------------------------------- -void LLAgent::changeCameraToThirdPerson(BOOL animate) -{ - if (LLViewerJoystick::getInstance()->getOverrideCamera()) - { - return; - } - - gViewerWindow->getWindow()->resetBusyCount(); - - mCameraZoomFraction = INITIAL_ZOOM_FRACTION; - - if (mAvatarObject.notNull()) - { - if (!mAvatarObject->isSitting()) - { - mAvatarObject->mPelvisp->setPosition(LLVector3::zero); - } - mAvatarObject->startMotion( ANIM_AGENT_BODY_NOISE ); - mAvatarObject->startMotion( ANIM_AGENT_BREATHE_ROT ); - } - - LLVector3 at_axis; - - // unpause avatar animation - mPauseRequest = NULL; - - if( mCameraMode != CAMERA_MODE_THIRD_PERSON ) - { - if (gBasicToolset) - { - LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset); - } - - mCameraLag.clearVec(); - if (mCameraMode == CAMERA_MODE_MOUSELOOK) - { - mCurrentCameraDistance = MIN_CAMERA_DISTANCE; - mTargetCameraDistance = MIN_CAMERA_DISTANCE; - animate = FALSE; - } - mLastCameraMode = mCameraMode; - mCameraMode = CAMERA_MODE_THIRD_PERSON; - U32 old_flags = mControlFlags; - clearControlFlags(AGENT_CONTROL_MOUSELOOK); - if (old_flags != mControlFlags) - { - mbFlagsDirty = TRUE; - } - - } - - // Remove any pitch from the avatar - if (mAvatarObject.notNull() && mAvatarObject->getParent()) - { - LLQuaternion obj_rot = ((LLViewerObject*)mAvatarObject->getParent())->getRenderRotation(); - at_axis = LLViewerCamera::getInstance()->getAtAxis(); - at_axis.mV[VZ] = 0.f; - at_axis.normalize(); - resetAxes(at_axis * ~obj_rot); - } - else - { - at_axis = mFrameAgent.getAtAxis(); - at_axis.mV[VZ] = 0.f; - at_axis.normalize(); - resetAxes(at_axis); - } - - - if (animate) - { - startCameraAnimation(); - } - else - { - mCameraAnimating = FALSE; - endAnimationUpdateUI(); - } -} - -//----------------------------------------------------------------------------- -// changeCameraToCustomizeAvatar() -//----------------------------------------------------------------------------- -void LLAgent::changeCameraToCustomizeAvatar(BOOL avatar_animate, BOOL camera_animate) -{ - if (LLViewerJoystick::getInstance()->getOverrideCamera()) - { - return; - } - - standUp(); // force stand up - gViewerWindow->getWindow()->resetBusyCount(); - - if (gFaceEditToolset) - { - LLToolMgr::getInstance()->setCurrentToolset(gFaceEditToolset); - } - - if (camera_animate) - { - startCameraAnimation(); - } - - // Remove any pitch from the avatar - //LLVector3 at = mFrameAgent.getAtAxis(); - //at.mV[VZ] = 0.f; - //at.normalize(); - //gAgent.resetAxes(at); - - if( mCameraMode != CAMERA_MODE_CUSTOMIZE_AVATAR ) - { - mLastCameraMode = mCameraMode; - mCameraMode = CAMERA_MODE_CUSTOMIZE_AVATAR; - U32 old_flags = mControlFlags; - clearControlFlags(AGENT_CONTROL_MOUSELOOK); - if (old_flags != mControlFlags) - { - mbFlagsDirty = TRUE; - } - - gFocusMgr.setKeyboardFocus( NULL ); - gFocusMgr.setMouseCapture( NULL ); - - LLVOAvatarSelf::onCustomizeStart(); - } - - if (mAvatarObject.notNull()) - { - if(avatar_animate) - { - // Remove any pitch from the avatar - LLVector3 at = mFrameAgent.getAtAxis(); - at.mV[VZ] = 0.f; - at.normalize(); - gAgent.resetAxes(at); - - sendAnimationRequest(ANIM_AGENT_CUSTOMIZE, ANIM_REQUEST_START); - mCustomAnim = TRUE ; - mAvatarObject->startMotion(ANIM_AGENT_CUSTOMIZE); - LLMotion* turn_motion = mAvatarObject->findMotion(ANIM_AGENT_CUSTOMIZE); - - if (turn_motion) - { - mAnimationDuration = turn_motion->getDuration() + CUSTOMIZE_AVATAR_CAMERA_ANIM_SLOP; - - } - else - { - mAnimationDuration = gSavedSettings.getF32("ZoomTime"); - } - } - - - - gAgent.setFocusGlobal(LLVector3d::zero); - } - else - { - mCameraAnimating = FALSE; - endAnimationUpdateUI(); - } - -} - - -void LLAgent::switchCameraPreset(ECameraPreset preset) -{ - //zoom is supposed to be reset for the front and group views - mCameraZoomFraction = 1.f; - - //focusing on avatar in that case means following him on movements - mFocusOnAvatar = TRUE; - - mCameraPreset = preset; - - gSavedSettings.setU32("CameraPreset", mCameraPreset); -} - - -// -// Focus point management -// - -//----------------------------------------------------------------------------- -// startCameraAnimation() -//----------------------------------------------------------------------------- -void LLAgent::startCameraAnimation() -{ - mAnimationCameraStartGlobal = getCameraPositionGlobal(); - mAnimationFocusStartGlobal = mFocusGlobal; - mAnimationTimer.reset(); - mCameraAnimating = TRUE; - mAnimationDuration = gSavedSettings.getF32("ZoomTime"); -} - -//----------------------------------------------------------------------------- -// stopCameraAnimation() -//----------------------------------------------------------------------------- -void LLAgent::stopCameraAnimation() -{ - mCameraAnimating = FALSE; -} - -void LLAgent::clearFocusObject() -{ - if (mFocusObject.notNull()) - { - startCameraAnimation(); - - setFocusObject(NULL); - mFocusObjectOffset.clearVec(); - } -} - -void LLAgent::setFocusObject(LLViewerObject* object) -{ - mFocusObject = object; -} - -// Focus on a point, but try to keep camera position stable. -//----------------------------------------------------------------------------- -// setFocusGlobal() -//----------------------------------------------------------------------------- -void LLAgent::setFocusGlobal(const LLPickInfo& pick) -{ - LLViewerObject* objectp = gObjectList.findObject(pick.mObjectID); - - if (objectp) - { - // focus on object plus designated offset - // which may or may not be same as pick.mPosGlobal - setFocusGlobal(objectp->getPositionGlobal() + LLVector3d(pick.mObjectOffset), pick.mObjectID); - } - else - { - // focus directly on point where user clicked - setFocusGlobal(pick.mPosGlobal, pick.mObjectID); - } -} - - -void LLAgent::setFocusGlobal(const LLVector3d& focus, const LLUUID &object_id) -{ - setFocusObject(gObjectList.findObject(object_id)); - LLVector3d old_focus = mFocusTargetGlobal; - LLViewerObject *focus_obj = mFocusObject; - - // if focus has changed - if (old_focus != focus) - { - if (focus.isExactlyZero()) - { - if (mAvatarObject.notNull()) - { - mFocusTargetGlobal = getPosGlobalFromAgent(mAvatarObject->mHeadp->getWorldPosition()); - } - else - { - mFocusTargetGlobal = getPositionGlobal(); - } - mCameraFocusOffsetTarget = getCameraPositionGlobal() - mFocusTargetGlobal; - mCameraFocusOffset = mCameraFocusOffsetTarget; - setLookAt(LOOKAT_TARGET_CLEAR); - } - else - { - mFocusTargetGlobal = focus; - if (!focus_obj) - { - mCameraFOVZoomFactor = 0.f; - } - - mCameraFocusOffsetTarget = gAgent.getPosGlobalFromAgent(mCameraVirtualPositionAgent) - mFocusTargetGlobal; - - startCameraAnimation(); - - if (focus_obj) - { - if (focus_obj->isAvatar()) - { - setLookAt(LOOKAT_TARGET_FOCUS, focus_obj); - } - else - { - setLookAt(LOOKAT_TARGET_FOCUS, focus_obj, (getPosAgentFromGlobal(focus) - focus_obj->getRenderPosition()) * ~focus_obj->getRenderRotation()); - } - } - else - { - setLookAt(LOOKAT_TARGET_FOCUS, NULL, getPosAgentFromGlobal(mFocusTargetGlobal)); - } - } - } - else // focus == mFocusTargetGlobal - { - if (focus.isExactlyZero()) - { - if (mAvatarObject.notNull()) - { - mFocusTargetGlobal = getPosGlobalFromAgent(mAvatarObject->mHeadp->getWorldPosition()); - } - else - { - mFocusTargetGlobal = getPositionGlobal(); - } - } - mCameraFocusOffsetTarget = (getCameraPositionGlobal() - mFocusTargetGlobal) / (1.f + mCameraFOVZoomFactor);; - mCameraFocusOffset = mCameraFocusOffsetTarget; - } - - if (mFocusObject.notNull()) - { - // for attachments, make offset relative to avatar, not the attachment - if (mFocusObject->isAttachment()) - { - while (mFocusObject.notNull() // DEV-29123 - can crash with a messed-up attachment - && !mFocusObject->isAvatar()) - { - mFocusObject = (LLViewerObject*) mFocusObject->getParent(); - } - setFocusObject((LLViewerObject*)mFocusObject); - } - updateFocusOffset(); - } -} - -// Used for avatar customization -//----------------------------------------------------------------------------- -// setCameraPosAndFocusGlobal() -//----------------------------------------------------------------------------- -void LLAgent::setCameraPosAndFocusGlobal(const LLVector3d& camera_pos, const LLVector3d& focus, const LLUUID &object_id) -{ - LLVector3d old_focus = mFocusTargetGlobal; - - F64 focus_delta_squared = (old_focus - focus).magVecSquared(); - const F64 ANIM_EPSILON_SQUARED = 0.0001; - if( focus_delta_squared > ANIM_EPSILON_SQUARED ) - { - startCameraAnimation(); - - if( CAMERA_MODE_CUSTOMIZE_AVATAR == mCameraMode ) - { - // Compensate for the fact that the camera has already been offset to make room for LLFloaterCustomize. - mAnimationCameraStartGlobal -= LLVector3d(LLViewerCamera::getInstance()->getLeftAxis() * calcCustomizeAvatarUIOffset( mAnimationCameraStartGlobal )); - } - } - - //LLViewerCamera::getInstance()->setOrigin( gAgent.getPosAgentFromGlobal( camera_pos ) ); - setFocusObject(gObjectList.findObject(object_id)); - mFocusTargetGlobal = focus; - mCameraFocusOffsetTarget = camera_pos - focus; - mCameraFocusOffset = mCameraFocusOffsetTarget; - - if (mFocusObject) - { - if (mFocusObject->isAvatar()) - { - setLookAt(LOOKAT_TARGET_FOCUS, mFocusObject); - } - else - { - setLookAt(LOOKAT_TARGET_FOCUS, mFocusObject, (getPosAgentFromGlobal(focus) - mFocusObject->getRenderPosition()) * ~mFocusObject->getRenderRotation()); - } - } - else - { - setLookAt(LOOKAT_TARGET_FOCUS, NULL, getPosAgentFromGlobal(mFocusTargetGlobal)); - } - - if( mCameraAnimating ) - { - const F64 ANIM_METERS_PER_SECOND = 10.0; - const F64 MIN_ANIM_SECONDS = 0.5; - const F64 MAX_ANIM_SECONDS = 10.0; - F64 anim_duration = llmax( MIN_ANIM_SECONDS, sqrt(focus_delta_squared) / ANIM_METERS_PER_SECOND ); - anim_duration = llmin( anim_duration, MAX_ANIM_SECONDS ); - setAnimationDuration( (F32)anim_duration ); - } - - updateFocusOffset(); -} - -//----------------------------------------------------------------------------- -// setSitCamera() -//----------------------------------------------------------------------------- -void LLAgent::setSitCamera(const LLUUID &object_id, const LLVector3 &camera_pos, const LLVector3 &camera_focus) -{ - BOOL camera_enabled = !object_id.isNull(); - - if (camera_enabled) - { - LLViewerObject *reference_object = gObjectList.findObject(object_id); - if (reference_object) - { - //convert to root object relative? - mSitCameraPos = camera_pos; - mSitCameraFocus = camera_focus; - mSitCameraReferenceObject = reference_object; - mSitCameraEnabled = TRUE; - } - } - else - { - mSitCameraPos.clearVec(); - mSitCameraFocus.clearVec(); - mSitCameraReferenceObject = NULL; - mSitCameraEnabled = FALSE; - } -} - -//----------------------------------------------------------------------------- -// setFocusOnAvatar() -//----------------------------------------------------------------------------- -void LLAgent::setFocusOnAvatar(BOOL focus_on_avatar, BOOL animate) -{ - if (focus_on_avatar != mFocusOnAvatar) - { - if (animate) - { - startCameraAnimation(); - } - else - { - stopCameraAnimation(); - } - } - - //RN: when focused on the avatar, we're not "looking" at it - // looking implies intent while focusing on avatar means - // you're just walking around with a camera on you...eesh. - if (!mFocusOnAvatar && focus_on_avatar) - { - setFocusGlobal(LLVector3d::zero); - mCameraFOVZoomFactor = 0.f; - if (mCameraMode == CAMERA_MODE_THIRD_PERSON) - { - LLVector3 at_axis; - if (mAvatarObject.notNull() && mAvatarObject->getParent()) - { - LLQuaternion obj_rot = ((LLViewerObject*)mAvatarObject->getParent())->getRenderRotation(); - at_axis = LLViewerCamera::getInstance()->getAtAxis(); - at_axis.mV[VZ] = 0.f; - at_axis.normalize(); - resetAxes(at_axis * ~obj_rot); - } - else - { - at_axis = LLViewerCamera::getInstance()->getAtAxis(); - at_axis.mV[VZ] = 0.f; - at_axis.normalize(); - resetAxes(at_axis); - } - } - } - // unlocking camera from avatar - else if (mFocusOnAvatar && !focus_on_avatar) - { - // keep camera focus point consistent, even though it is now unlocked - setFocusGlobal(getPositionGlobal() + calcThirdPersonFocusOffset(), gAgent.getID()); - } - - mFocusOnAvatar = focus_on_avatar; + gAgentCamera.updateLastCamera(); } //----------------------------------------------------------------------------- @@ -4592,90 +1905,13 @@ void LLAgent::heardChat(const LLUUID& id) if (ll_rand(2) == 0) { LLViewerObject *chatter = gObjectList.findObject(mLastChatterID); - setLookAt(LOOKAT_TARGET_AUTO_LISTEN, chatter, LLVector3::zero); + gAgentCamera.setLookAt(LOOKAT_TARGET_AUTO_LISTEN, chatter, LLVector3::zero); } mLastChatterID = id; mChatTimer.reset(); } -//----------------------------------------------------------------------------- -// lookAtLastChat() -//----------------------------------------------------------------------------- -void LLAgent::lookAtLastChat() -{ - // Block if camera is animating or not in normal third person camera mode - if (mCameraAnimating || !cameraThirdPerson()) - { - return; - } - - LLViewerObject *chatter = gObjectList.findObject(mLastChatterID); - if (chatter) - { - LLVector3 delta_pos; - if (chatter->isAvatar()) - { - LLVOAvatar *chatter_av = (LLVOAvatar*)chatter; - if (mAvatarObject.notNull() && chatter_av->mHeadp) - { - delta_pos = chatter_av->mHeadp->getWorldPosition() - mAvatarObject->mHeadp->getWorldPosition(); - } - else - { - delta_pos = chatter->getPositionAgent() - getPositionAgent(); - } - delta_pos.normalize(); - - setControlFlags(AGENT_CONTROL_STOP); - - changeCameraToThirdPerson(); - - LLVector3 new_camera_pos = mAvatarObject->mHeadp->getWorldPosition(); - LLVector3 left = delta_pos % LLVector3::z_axis; - left.normalize(); - LLVector3 up = left % delta_pos; - up.normalize(); - new_camera_pos -= delta_pos * 0.4f; - new_camera_pos += left * 0.3f; - new_camera_pos += up * 0.2f; - if (chatter_av->mHeadp) - { - setFocusGlobal(getPosGlobalFromAgent(chatter_av->mHeadp->getWorldPosition()), mLastChatterID); - mCameraFocusOffsetTarget = getPosGlobalFromAgent(new_camera_pos) - gAgent.getPosGlobalFromAgent(chatter_av->mHeadp->getWorldPosition()); - } - else - { - setFocusGlobal(chatter->getPositionGlobal(), mLastChatterID); - mCameraFocusOffsetTarget = getPosGlobalFromAgent(new_camera_pos) - chatter->getPositionGlobal(); - } - setFocusOnAvatar(FALSE, TRUE); - } - else - { - delta_pos = chatter->getRenderPosition() - getPositionAgent(); - delta_pos.normalize(); - - setControlFlags(AGENT_CONTROL_STOP); - - changeCameraToThirdPerson(); - - LLVector3 new_camera_pos = mAvatarObject->mHeadp->getWorldPosition(); - LLVector3 left = delta_pos % LLVector3::z_axis; - left.normalize(); - LLVector3 up = left % delta_pos; - up.normalize(); - new_camera_pos -= delta_pos * 0.4f; - new_camera_pos += left * 0.3f; - new_camera_pos += up * 0.2f; - - setFocusGlobal(chatter->getPositionGlobal(), mLastChatterID); - mCameraFocusOffsetTarget = getPosGlobalFromAgent(new_camera_pos) - chatter->getPositionGlobal(); - setFocusOnAvatar(FALSE, TRUE); - } - } -} - const F32 SIT_POINT_EXTENTS = 0.2f; LLSD ll_sdmap_from_vector3(const LLVector3& vec) @@ -4720,10 +1956,10 @@ void LLAgent::setStartPosition( U32 location_id ) LLVector3 agent_pos = getPositionAgent(); - if (mAvatarObject.notNull()) + if (isAgentAvatarValid()) { // the z height is at the agent's feet - agent_pos.mV[VZ] -= 0.5f * mAvatarObject->mBodySize.mV[VZ]; + agent_pos.mV[VZ] -= 0.5f * gAgentAvatarp->mBodySize.mV[VZ]; } agent_pos.mV[VX] = llclamp( agent_pos.mV[VX], INSET, REGION_WIDTH - INSET ); @@ -4830,7 +2066,7 @@ void LLAgent::onAnimStop(const LLUUID& id) setControlFlags(AGENT_CONTROL_FINISH_ANIM); // now trigger dusting self off animation - if (mAvatarObject.notNull() && !mAvatarObject->mBelowWater && rand() % 3 == 0) + if (isAgentAvatarValid() && !gAgentAvatarp->mBelowWater && rand() % 3 == 0) sendAnimationRequest( ANIM_AGENT_BRUSH, ANIM_REQUEST_START ); } else if (id == ANIM_AGENT_PRE_JUMP || id == ANIM_AGENT_LAND || id == ANIM_AGENT_MEDIUM_LAND) @@ -5029,9 +2265,9 @@ void LLAgent::buildFullnameAndTitle(std::string& name) const name.erase(0, name.length()); } - if (mAvatarObject.notNull()) + if (isAgentAvatarValid()) { - name += mAvatarObject->getFullname(); + name += gAgentAvatarp->getFullname(); } } @@ -5177,14 +2413,14 @@ BOOL LLAgent::canJoinGroups() const LLQuaternion LLAgent::getHeadRotation() { - if (mAvatarObject.isNull() || !mAvatarObject->mPelvisp || !mAvatarObject->mHeadp) + if (!isAgentAvatarValid() || !gAgentAvatarp->mPelvisp || !gAgentAvatarp->mHeadp) { return LLQuaternion::DEFAULT; } - if (!gAgent.cameraMouselook()) + if (!gAgentCamera.cameraMouselook()) { - return mAvatarObject->getRotation(); + return gAgentAvatarp->getRotation(); } // We must be in mouselook @@ -5193,9 +2429,9 @@ LLQuaternion LLAgent::getHeadRotation() LLVector3 left = up % look_dir; LLQuaternion rot(look_dir, left, up); - if (mAvatarObject->getParent()) + if (gAgentAvatarp->getParent()) { - rot = rot * ~mAvatarObject->getParent()->getRotation(); + rot = rot * ~gAgentAvatarp->getParent()->getRotation(); } return rot; @@ -5353,10 +2589,11 @@ void LLAgent::initOriginGlobal(const LLVector3d &origin_global) BOOL LLAgent::leftButtonGrabbed() const { - return (!cameraMouselook() && mControlsTakenCount[CONTROL_LBUTTON_DOWN_INDEX] > 0) - || (cameraMouselook() && mControlsTakenCount[CONTROL_ML_LBUTTON_DOWN_INDEX] > 0) - || (!cameraMouselook() && mControlsTakenPassedOnCount[CONTROL_LBUTTON_DOWN_INDEX] > 0) - || (cameraMouselook() && mControlsTakenPassedOnCount[CONTROL_ML_LBUTTON_DOWN_INDEX] > 0); + const BOOL camera_mouse_look = gAgentCamera.cameraMouselook(); + return (!camera_mouse_look && mControlsTakenCount[CONTROL_LBUTTON_DOWN_INDEX] > 0) + || (camera_mouse_look && mControlsTakenCount[CONTROL_ML_LBUTTON_DOWN_INDEX] > 0) + || (!camera_mouse_look && mControlsTakenPassedOnCount[CONTROL_LBUTTON_DOWN_INDEX] > 0) + || (camera_mouse_look && mControlsTakenPassedOnCount[CONTROL_ML_LBUTTON_DOWN_INDEX] > 0); } BOOL LLAgent::rotateGrabbed() const @@ -5817,14 +3054,13 @@ void LLAgent::processAgentCachedTextureResponse(LLMessageSystem *mesgsys, void * { gAgentQueryManager.mNumPendingQueries--; - LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); - if (!avatarp || avatarp->isDead()) + if (!isAgentAvatarValid() || gAgentAvatarp->isDead()) { llwarns << "No avatar for user in cached texture update!" << llendl; return; } - if (gAgent.cameraCustomizeAvatar()) + if (gAgentCamera.cameraCustomizeAvatar()) { // ignore baked textures when in customize mode return; @@ -5851,27 +3087,27 @@ void LLAgent::processAgentCachedTextureResponse(LLMessageSystem *mesgsys, void * if (texture_id.notNull()) { //llinfos << "Received cached texture " << (U32)texture_index << ": " << texture_id << llendl; - avatarp->setCachedBakedTexture(LLVOAvatarDictionary::bakedToLocalTextureIndex((EBakedTextureIndex)texture_index), texture_id); - //avatarp->setTETexture( LLVOAvatar::sBakedTextureIndices[texture_index], texture_id ); + gAgentAvatarp->setCachedBakedTexture(LLVOAvatarDictionary::bakedToLocalTextureIndex((EBakedTextureIndex)texture_index), texture_id); + //gAgentAvatarp->setTETexture( LLVOAvatar::sBakedTextureIndices[texture_index], texture_id ); gAgentQueryManager.mActiveCacheQueries[texture_index] = 0; num_results++; } else { // no cache of this bake. request upload. - avatarp->requestLayerSetUpload((EBakedTextureIndex)texture_index); + gAgentAvatarp->requestLayerSetUpload((EBakedTextureIndex)texture_index); } } } llinfos << "Received cached texture response for " << num_results << " textures." << llendl; - avatarp->updateMeshTextures(); + gAgentAvatarp->updateMeshTextures(); if (gAgentQueryManager.mNumPendingQueries == 0) { // RN: not sure why composites are disabled at this point - avatarp->setCompositeUpdatesEnabled(TRUE); + gAgentAvatarp->setCompositeUpdatesEnabled(TRUE); gAgent.sendAgentSetAppearance(); } } @@ -5924,11 +3160,10 @@ BOOL LLAgent::getHomePosGlobal( LLVector3d* pos_global ) void LLAgent::clearVisualParams(void *data) { - LLVOAvatar* avatarp = gAgent.getAvatarObject(); - if (avatarp) + if (isAgentAvatarValid()) { - avatarp->clearVisualParamWeights(); - avatarp->updateVisualParams(); + gAgentAvatarp->clearVisualParamWeights(); + gAgentAvatarp->updateVisualParams(); } } @@ -5952,16 +3187,15 @@ bool LLAgent::teleportCore(bool is_local) // sync with other viewers. Discuss in DEV-14145/VWR-6744 before reenabling. // Stop all animation before actual teleporting - LLVOAvatar* avatarp = gAgent.getAvatarObject(); - if (avatarp) + if (isAgentAvatarValid()) { - for ( LLVOAvatar::AnimIterator anim_it= avatarp->mPlayingAnimations.begin(); - anim_it != avatarp->mPlayingAnimations.end(); + for ( LLVOAvatar::AnimIterator anim_it= gAgentAvatarp->mPlayingAnimations.begin(); + anim_it != gAgentAvatarp->mPlayingAnimations.end(); ++anim_it) { - avatarp->stopMotion(anim_it->first); + gAgentAvatarp->stopMotion(anim_it->first); } - avatarp->processAnimationStateChanges(); + gAgentAvatarp->processAnimationStateChanges(); } #endif @@ -5981,7 +3215,7 @@ bool LLAgent::teleportCore(bool is_local) // Close all pie menus, deselect land, etc. // Don't change the camera until we know teleport succeeded. JC - resetView(FALSE); + gAgentCamera.resetView(FALSE); // local logic LLViewerStats::getInstance()->incStat(LLViewerStats::ST_TELEPORT_COUNT); @@ -6154,13 +3388,11 @@ void LLAgent::stopCurrentAnimations() { // This function stops all current overriding animations on this // avatar, propagating this change back to the server. - - LLVOAvatar* avatarp = gAgent.getAvatarObject(); - if (avatarp) + if (isAgentAvatarValid()) { for ( LLVOAvatar::AnimIterator anim_it = - avatarp->mPlayingAnimations.begin(); - anim_it != avatarp->mPlayingAnimations.end(); + gAgentAvatarp->mPlayingAnimations.begin(); + anim_it != gAgentAvatarp->mPlayingAnimations.end(); anim_it++) { if (anim_it->first == @@ -6173,7 +3405,7 @@ void LLAgent::stopCurrentAnimations() else { // stop this animation locally - avatarp->stopMotion(anim_it->first, TRUE); + gAgentAvatarp->stopMotion(anim_it->first, TRUE); // ...and tell the server to tell everyone. sendAnimationRequest(anim_it->first, ANIM_REQUEST_STOP); } @@ -6280,15 +3512,15 @@ void LLAgent::requestLeaveGodMode() //----------------------------------------------------------------------------- void LLAgent::sendAgentSetAppearance() { - if (mAvatarObject.isNull()) return; + if (!isAgentAvatarValid()) return; - if (gAgentQueryManager.mNumPendingQueries > 0 && !gAgent.cameraCustomizeAvatar()) + if (gAgentQueryManager.mNumPendingQueries > 0 && !gAgentCamera.cameraCustomizeAvatar()) { return; } - llinfos << "TAT: Sent AgentSetAppearance: " << mAvatarObject->getBakedStatusForPrintout() << llendl; + llinfos << "TAT: Sent AgentSetAppearance: " << gAgentAvatarp->getBakedStatusForPrintout() << llendl; //dumpAvatarTEs( "sendAgentSetAppearance()" ); LLMessageSystem* msg = gMessageSystem; @@ -6302,7 +3534,7 @@ void LLAgent::sendAgentSetAppearance() // NOTE -- when we start correcting all of the other Havok geometry // to compensate for the COLLISION_TOLERANCE ugliness we will have // to tweak this number again - const LLVector3 body_size = mAvatarObject->mBodySize; + const LLVector3 body_size = gAgentAvatarp->mBodySize; msg->addVector3Fast(_PREHASH_Size, body_size); // To guard against out of order packets @@ -6312,20 +3544,20 @@ void LLAgent::sendAgentSetAppearance() // is texture data current relative to wearables? // KLW - TAT this will probably need to check the local queue. - BOOL textures_current = mAvatarObject->areTexturesCurrent(); + BOOL textures_current = gAgentAvatarp->areTexturesCurrent(); for(U8 baked_index = 0; baked_index < BAKED_NUM_INDICES; baked_index++ ) { const ETextureIndex texture_index = LLVOAvatarDictionary::bakedToLocalTextureIndex((EBakedTextureIndex)baked_index); // if we're not wearing a skirt, we don't need the texture to be baked - if (texture_index == TEX_SKIRT_BAKED && !mAvatarObject->isWearingWearableType(WT_SKIRT)) + if (texture_index == TEX_SKIRT_BAKED && !gAgentAvatarp->isWearingWearableType(WT_SKIRT)) { continue; } // IMG_DEFAULT_AVATAR means not baked. 0 index should be ignored for baked textures - if (!mAvatarObject->isTextureDefined(texture_index, 0)) + if (!gAgentAvatarp->isTextureDefined(texture_index, 0)) { textures_current = FALSE; break; @@ -6363,7 +3595,7 @@ void LLAgent::sendAgentSetAppearance() msg->addU8Fast(_PREHASH_TextureIndex, (U8)texture_index); } msg->nextBlockFast(_PREHASH_ObjectData); - mAvatarObject->sendAppearanceMessage( gMessageSystem ); + gAgentAvatarp->sendAppearanceMessage( gMessageSystem ); } else { @@ -6376,9 +3608,9 @@ void LLAgent::sendAgentSetAppearance() S32 transmitted_params = 0; - for (LLViewerVisualParam* param = (LLViewerVisualParam*)mAvatarObject->getFirstVisualParam(); + for (LLViewerVisualParam* param = (LLViewerVisualParam*)gAgentAvatarp->getFirstVisualParam(); param; - param = (LLViewerVisualParam*)mAvatarObject->getNextVisualParam()) + param = (LLViewerVisualParam*)gAgentAvatarp->getNextVisualParam()) { if (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE) { @@ -6500,7 +3732,39 @@ void LLAgent::dumpGroupInfo() //llinfos << "insig " << gAgent.mGroupInsigniaID << llendl; } +// Draw a representation of current autopilot target +void LLAgent::renderAutoPilotTarget() +{ + if (mAutoPilot) + { + F32 height_meters; + LLVector3d target_global; + + glMatrixMode(GL_MODELVIEW); + gGL.pushMatrix(); + + // not textured + gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); + + // lovely green + glColor4f(0.f, 1.f, 1.f, 1.f); + + target_global = mAutoPilotTargetGlobal; + + gGL.translatef((F32)(target_global.mdV[VX]), (F32)(target_global.mdV[VY]), (F32)(target_global.mdV[VZ])); + + height_meters = 1.f; + + glScalef(height_meters, height_meters, height_meters); + + gSphere.render(1500.f); + + gGL.popMatrix(); + } +} + /********************************************************************************/ + LLAgentQueryManager gAgentQueryManager; LLAgentQueryManager::LLAgentQueryManager() : diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h index f2df1992e7..a460077b7e 100644 --- a/indra/newview/llagent.h +++ b/indra/newview/llagent.h @@ -39,9 +39,6 @@ #include "llagentconstants.h" #include "llagentdata.h" // gAgentID, gAgentSessionID #include "llcharacter.h" // LLAnimPauseRequest -#include "llfollowcam.h" // Ventrella -#include "llhudeffectlookat.h" // EPointAtType -#include "llhudeffectpointat.h" // ELookAtType #include "llpointer.h" #include "lluicolor.h" #include "llvoavatardefines.h" @@ -51,7 +48,6 @@ extern const U8 AGENT_STATE_TYPING; // Typing indication extern const U8 AGENT_STATE_EDITING; // Set when agent has objects selected class LLChat; -class LLVOAvatarSelf; class LLViewerRegion; class LLMotion; class LLToolset; @@ -66,26 +62,6 @@ class LLAgentDropGroupViewerNode; //-------------------------------------------------------------------- // Types //-------------------------------------------------------------------- -enum ECameraMode -{ - CAMERA_MODE_THIRD_PERSON, - CAMERA_MODE_MOUSELOOK, - CAMERA_MODE_CUSTOMIZE_AVATAR, - CAMERA_MODE_FOLLOW -}; - -/** Camera Presets for CAMERA_MODE_THIRD_PERSON */ -enum ECameraPreset -{ - /** Default preset, what the Third Person Mode actually was */ - CAMERA_PRESET_REAR_VIEW, - - /** "Looking at the Avatar from the front" */ - CAMERA_PRESET_FRONT_VIEW, - - /** "Above and to the left, over the shoulder, pulled back a little on the zoom" */ - CAMERA_PRESET_GROUP_VIEW -}; enum EAnimRequest { @@ -129,7 +105,6 @@ public: virtual ~LLAgent(); void init(); void cleanup(); - void setAvatarObject(LLVOAvatarSelf *avatar); //-------------------------------------------------------------------- // Login @@ -139,11 +114,12 @@ public: void setFirstLogin(BOOL b) { mFirstLogin = b; } // Return TRUE if the database reported this login as the first for this particular user. BOOL isFirstLogin() const { return mFirstLogin; } + BOOL isInitialized() const { return mInitialized; } public: - BOOL mInitialized; - BOOL mFirstLogin; std::string mMOTD; // Message of the day private: + BOOL mInitialized; + BOOL mFirstLogin; boost::shared_ptr<LLAgentListener> mListener; //-------------------------------------------------------------------- @@ -192,20 +168,6 @@ private: /******************************************************************************** ** ** - ** GENERAL ACCESSORS - **/ - -public: - LLVOAvatarSelf* getAvatarObject() const { return mAvatarObject; } -private: - LLPointer<LLVOAvatarSelf> mAvatarObject; // NULL until avatar object sent down from simulator - -/** General Accessors - ** ** - *******************************************************************************/ - -/******************************************************************************** - ** ** ** POSITION **/ @@ -236,7 +198,7 @@ public: // Coordinate System //-------------------------------------------------------------------- public: - LLCoordFrame getFrameAgent() const { return mFrameAgent; } + const LLCoordFrame& getFrameAgent() const { return mFrameAgent; } void initOriginGlobal(const LLVector3d &origin_global); // Only to be used in ONE place void resetAxes(); void resetAxes(const LLVector3 &look_at); // Makes reasonable left and up @@ -279,6 +241,10 @@ private: public: S32 getRegionsVisited() const; F64 getDistanceTraveled() const; + void setDistanceTraveled(F64 dist) { mDistanceTraveled = dist; } + + const LLVector3d &getLastPositionGlobal() const { return mLastPositionGlobal; } + void setLastPositionGlobal(const LLVector3d &pos) { mLastPositionGlobal = pos; } private: std::set<U64> mRegionsVisited; // Stat - what distinct regions has the avatar been to? F64 mDistanceTraveled; // Stat - how far has the avatar moved? @@ -321,7 +287,6 @@ public: //-------------------------------------------------------------------- public: void heardChat(const LLUUID& id); - void lookAtLastChat(); F32 getTypingTime() { return mTypingTimer.getElapsedTimeF32(); } LLUUID getLastChatter() const { return mLastChatterID; } F32 getNearChatRadius() { return mNearChatRadius; } @@ -430,6 +395,8 @@ public: // Send message to simulator to force grabbed controls to be // released, in case of a poorly written script. void forceReleaseControls(); + void setFlagsDirty() { mbFlagsDirty = TRUE; } + private: S32 mControlsTakenCount[TOTAL_CONTROLS]; S32 mControlsTakenPassedOnCount[TOTAL_CONTROLS]; @@ -447,9 +414,11 @@ public: void sendAnimationRequests(LLDynamicArray<LLUUID> &anim_ids, EAnimRequest request); void sendAnimationRequest(const LLUUID &anim_id, EAnimRequest request); void endAnimationUpdateUI(); + void unpauseAnimation() { mPauseRequest = NULL; } + BOOL getCustomAnim() const { return mCustomAnim; } + void setCustomAnim(BOOL anim) { mCustomAnim = anim; } + private: - LLFrameTimer mAnimationTimer; // Seconds that transition animation has been active - F32 mAnimationDuration; // In seconds BOOL mCustomAnim; // Current animation is ANIM_AGENT_CUSTOMIZE ? LLAnimPauseRequest mPauseRequest; BOOL mViewsPushed; // Keep track of whether or not we have pushed views @@ -462,19 +431,6 @@ private: ** ** ** MOVEMENT **/ - - //-------------------------------------------------------------------- - // Keys - //-------------------------------------------------------------------- -public: - void setKey(const S32 direction, S32 &key); // Sets key to +1 for +direction, -1 for -direction -private: - S32 mAtKey; // Either 1, 0, or -1. Indicates that movement key is pressed - S32 mWalkKey; // Like AtKey, but causes less forward thrust - S32 mLeftKey; - S32 mUpKey; - F32 mYawKey; - F32 mPitchKey; //-------------------------------------------------------------------- // Movement from user input @@ -492,42 +448,6 @@ public: void movePitch(F32 mag); //-------------------------------------------------------------------- - // Orbit - //-------------------------------------------------------------------- -public: - void setOrbitLeftKey(F32 mag) { mOrbitLeftKey = mag; } - void setOrbitRightKey(F32 mag) { mOrbitRightKey = mag; } - void setOrbitUpKey(F32 mag) { mOrbitUpKey = mag; } - void setOrbitDownKey(F32 mag) { mOrbitDownKey = mag; } - void setOrbitInKey(F32 mag) { mOrbitInKey = mag; } - void setOrbitOutKey(F32 mag) { mOrbitOutKey = mag; } -private: - F32 mOrbitLeftKey; - F32 mOrbitRightKey; - F32 mOrbitUpKey; - F32 mOrbitDownKey; - F32 mOrbitInKey; - F32 mOrbitOutKey; - - //-------------------------------------------------------------------- - // Pan - //-------------------------------------------------------------------- -public: - void setPanLeftKey(F32 mag) { mPanLeftKey = mag; } - void setPanRightKey(F32 mag) { mPanRightKey = mag; } - void setPanUpKey(F32 mag) { mPanUpKey = mag; } - void setPanDownKey(F32 mag) { mPanDownKey = mag; } - void setPanInKey(F32 mag) { mPanInKey = mag; } - void setPanOutKey(F32 mag) { mPanOutKey = mag; } -private: - F32 mPanUpKey; - F32 mPanDownKey; - F32 mPanLeftKey; - F32 mPanRightKey; - F32 mPanInKey; - F32 mPanOutKey; - - //-------------------------------------------------------------------- // Move the avatar's frame //-------------------------------------------------------------------- public: @@ -640,232 +560,6 @@ private: /******************************************************************************** ** ** - ** CAMERA - **/ - - //-------------------------------------------------------------------- - // Mode - //-------------------------------------------------------------------- -public: - void changeCameraToDefault(); - void changeCameraToMouselook(BOOL animate = TRUE); - void changeCameraToThirdPerson(BOOL animate = TRUE); - void changeCameraToCustomizeAvatar(BOOL avatar_animate = TRUE, BOOL camera_animate = TRUE); // Trigger transition animation - void changeCameraToFollow(BOOL animate = TRUE); // Ventrella - BOOL cameraThirdPerson() const { return (mCameraMode == CAMERA_MODE_THIRD_PERSON && mLastCameraMode == CAMERA_MODE_THIRD_PERSON); } - BOOL cameraMouselook() const { return (mCameraMode == CAMERA_MODE_MOUSELOOK && mLastCameraMode == CAMERA_MODE_MOUSELOOK); } - BOOL cameraCustomizeAvatar() const { return (mCameraMode == CAMERA_MODE_CUSTOMIZE_AVATAR /*&& !mCameraAnimating*/); } - BOOL cameraFollow() const { return (mCameraMode == CAMERA_MODE_FOLLOW && mLastCameraMode == CAMERA_MODE_FOLLOW); } - ECameraMode getCameraMode() const { return mCameraMode; } - void updateCamera(); // Call once per frame to update camera location/orientation - void resetCamera(); // Slam camera into its default position -private: - ECameraMode mCameraMode; // Target mode after transition animation is done - ECameraMode mLastCameraMode; - - //-------------------------------------------------------------------- - // Preset - //-------------------------------------------------------------------- -public: - void switchCameraPreset(ECameraPreset preset); - -private: - - /** Determines default camera offset depending on the current camera preset */ - LLVector3 getCameraOffsetInitial(); - - /** Camera preset in Third Person Mode */ - ECameraPreset mCameraPreset; - - /** Initial camera offsets */ - std::map<ECameraPreset, LLVector3> mCameraOffsetInitial; - - /** Initial focus offsets */ - std::map<ECameraPreset, LLVector3d> mFocusOffsetInitial; - - - //-------------------------------------------------------------------- - // Position - //-------------------------------------------------------------------- -public: - LLVector3d getCameraPositionGlobal() const; - const LLVector3 &getCameraPositionAgent() const; - LLVector3d calcCameraPositionTargetGlobal(BOOL *hit_limit = NULL); // Calculate the camera position target - F32 getCameraMinOffGround(); // Minimum height off ground for this mode, meters - void setCameraCollidePlane(const LLVector4 &plane) { mCameraCollidePlane = plane; } - BOOL calcCameraMinDistance(F32 &obj_min_distance); - F32 calcCustomizeAvatarUIOffset(const LLVector3d& camera_pos_global); - F32 getCurrentCameraBuildOffset() { return (F32)mCameraFocusOffset.length(); } -private: - F32 mCurrentCameraDistance; // Current camera offset from avatar - F32 mTargetCameraDistance; // Target camera offset from avatar - F32 mCameraFOVZoomFactor; // Amount of fov zoom applied to camera when zeroing in on an object - F32 mCameraCurrentFOVZoomFactor; // Interpolated fov zoom - F32 mCameraFOVDefault; // Default field of view that is basis for FOV zoom effect - LLVector4 mCameraCollidePlane; // Colliding plane for camera - F32 mCameraZoomFraction; // Mousewheel driven fraction of zoom - LLVector3 mCameraPositionAgent; // Camera position in agent coordinates - LLVector3 mCameraVirtualPositionAgent; // Camera virtual position (target) before performing FOV zoom - LLVector3d mCameraSmoothingLastPositionGlobal; - LLVector3d mCameraSmoothingLastPositionAgent; - BOOL mCameraSmoothingStop; - LLVector3 mCameraLag; // Third person camera lag - LLVector3 mCameraUpVector; // Camera's up direction in world coordinates (determines the 'roll' of the view) - - //-------------------------------------------------------------------- - // Follow - //-------------------------------------------------------------------- -public: - void setUsingFollowCam(bool using_follow_cam); -private: - LLFollowCam mFollowCam; // Ventrella - - //-------------------------------------------------------------------- - // Sit - //-------------------------------------------------------------------- -public: - void setupSitCamera(); - BOOL sitCameraEnabled() { return mSitCameraEnabled; } - void setSitCamera(const LLUUID &object_id, - const LLVector3 &camera_pos = LLVector3::zero, const LLVector3 &camera_focus = LLVector3::zero); -private: - LLPointer<LLViewerObject> mSitCameraReferenceObject; // Object to which camera is related when sitting - BOOL mSitCameraEnabled; // Use provided camera information when sitting? - LLVector3 mSitCameraPos; // Root relative camera pos when sitting - LLVector3 mSitCameraFocus; // Root relative camera target when sitting - - //-------------------------------------------------------------------- - // Animation - //-------------------------------------------------------------------- -public: - void setCameraAnimating(BOOL b) { mCameraAnimating = b; } - BOOL getCameraAnimating() { return mCameraAnimating; } - void setAnimationDuration(F32 seconds) { mAnimationDuration = seconds; } - void startCameraAnimation(); - void stopCameraAnimation(); -private: - BOOL mCameraAnimating; // Camera is transitioning from one mode to another - LLVector3d mAnimationCameraStartGlobal; // Camera start position, global coords - LLVector3d mAnimationFocusStartGlobal; // Camera focus point, global coords - - //-------------------------------------------------------------------- - // Focus - //-------------------------------------------------------------------- -public: - LLVector3d calcFocusPositionTargetGlobal(); - LLVector3 calcFocusOffset(LLViewerObject *object, LLVector3 pos_agent, S32 x, S32 y); - BOOL getFocusOnAvatar() const { return mFocusOnAvatar; } - LLPointer<LLViewerObject>& getFocusObject() { return mFocusObject; } - F32 getFocusObjectDist() const { return mFocusObjectDist; } - void updateFocusOffset(); - void validateFocusObject(); - void setFocusGlobal(const LLPickInfo& pick); - void setFocusGlobal(const LLVector3d &focus, const LLUUID &object_id = LLUUID::null); - void setFocusOnAvatar(BOOL focus, BOOL animate); - void setCameraPosAndFocusGlobal(const LLVector3d& pos, const LLVector3d& focus, const LLUUID &object_id); - void clearFocusObject(); - void setFocusObject(LLViewerObject* object); - void setObjectTracking(BOOL track) { mTrackFocusObject = track; } - const LLVector3d &getFocusGlobal() const { return mFocusGlobal; } - const LLVector3d &getFocusTargetGlobal() const { return mFocusTargetGlobal; } -private: - LLVector3d mCameraFocusOffset; // Offset from focus point in build mode - LLVector3d mCameraFocusOffsetTarget; // Target towards which we are lerping the camera's focus offset - BOOL mFocusOnAvatar; - LLVector3d mFocusGlobal; - LLVector3d mFocusTargetGlobal; - LLPointer<LLViewerObject> mFocusObject; - F32 mFocusObjectDist; - LLVector3 mFocusObjectOffset; - F32 mFocusDotRadius; // Meters - BOOL mTrackFocusObject; - F32 mUIOffset; - - //-------------------------------------------------------------------- - // Lookat / Pointat - //-------------------------------------------------------------------- -public: - void updateLookAt(const S32 mouse_x, const S32 mouse_y); - BOOL setLookAt(ELookAtType target_type, LLViewerObject *object = NULL, LLVector3 position = LLVector3::zero); - ELookAtType getLookAtType(); - void slamLookAt(const LLVector3 &look_at); // Set the physics data - BOOL setPointAt(EPointAtType target_type, LLViewerObject *object = NULL, LLVector3 position = LLVector3::zero); - EPointAtType getPointAtType(); -public: - LLPointer<LLHUDEffectLookAt> mLookAt; - LLPointer<LLHUDEffectPointAt> mPointAt; - - //-------------------------------------------------------------------- - // Third person - //-------------------------------------------------------------------- -public: - LLVector3d calcThirdPersonFocusOffset(); - void setThirdPersonHeadOffset(LLVector3 offset) { mThirdPersonHeadOffset = offset; } -private: - LLVector3 mThirdPersonHeadOffset; // Head offset for third person camera position - - //-------------------------------------------------------------------- - // Orbit - //-------------------------------------------------------------------- -public: - void cameraOrbitAround(const F32 radians); // Rotate camera CCW radians about build focus point - void cameraOrbitOver(const F32 radians); // Rotate camera forward radians over build focus point - void cameraOrbitIn(const F32 meters); // Move camera in toward build focus point - - //-------------------------------------------------------------------- - // Zoom - //-------------------------------------------------------------------- -public: - void handleScrollWheel(S32 clicks); // Mousewheel driven zoom - void cameraZoomIn(const F32 factor); // Zoom in by fraction of current distance - F32 getCameraZoomFraction(); // Get camera zoom as fraction of minimum and maximum zoom - void setCameraZoomFraction(F32 fraction); // Set camera zoom as fraction of minimum and maximum zoom - F32 calcCameraFOVZoomFactor(); - - //-------------------------------------------------------------------- - // Pan - //-------------------------------------------------------------------- -public: - void cameraPanIn(const F32 meters); - void cameraPanLeft(const F32 meters); - void cameraPanUp(const F32 meters); - - //-------------------------------------------------------------------- - // View - //-------------------------------------------------------------------- -public: - // Called whenever the agent moves. Puts camera back in default position, deselects items, etc. - void resetView(BOOL reset_camera = TRUE, BOOL change_camera = FALSE); - // Called on camera movement. Unlocks camera from the default position behind the avatar. - void unlockView(); - - //-------------------------------------------------------------------- - // Mouselook - //-------------------------------------------------------------------- -public: - BOOL getForceMouselook() const { return mForceMouselook; } - void setForceMouselook(BOOL mouselook) { mForceMouselook = mouselook; } -private: - BOOL mForceMouselook; - - //-------------------------------------------------------------------- - // HUD - //-------------------------------------------------------------------- -public: - const LLColor4 &getEffectColor(); - void setEffectColor(const LLColor4 &color); -public: - F32 mHUDTargetZoom; // Target zoom level for HUD objects (used when editing) - F32 mHUDCurZoom; // Current animated zoom level for HUD objects -private: - LLUIColor mEffectColor; - -/** Camera - ** ** - *******************************************************************************/ - -/******************************************************************************** - ** ** ** ACCESS **/ @@ -938,8 +632,9 @@ public: LLQuaternion getHeadRotation(); BOOL needsRenderAvatar(); // TRUE when camera mode is such that your own avatar should draw BOOL needsRenderHead(); -public: - F32 mDrawDistance; + void setShowAvatar(BOOL show) { mShowAvatar = show; } + BOOL getShowAvatar() const { return mShowAvatar; } + private: BOOL mShowAvatar; // Should we render the avatar? U32 mAppearanceSerialNum; @@ -954,6 +649,15 @@ public: private: U8 mRenderState; // Current behavior state of agent + //-------------------------------------------------------------------- + // HUD + //-------------------------------------------------------------------- +public: + const LLColor4 &getEffectColor(); + void setEffectColor(const LLColor4 &color); +private: + LLUIColor mEffectColor; + /** Rendering ** ** *******************************************************************************/ diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp new file mode 100644 index 0000000000..bb06255fd1 --- /dev/null +++ b/indra/newview/llagentcamera.cpp @@ -0,0 +1,2866 @@ +/** + * @file llagentcamera.cpp + * @brief LLAgent class implementation + * + * $LicenseInfo:firstyear=2001&license=viewergpl$ + * + * Copyright (c) 2001-2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" +#include "llagentcamera.h" + +#include "pipeline.h" + +#include "llagent.h" +#include "llanimationstates.h" +#include "llfloatercamera.h" +#include "llfloatercustomize.h" +#include "llfloaterreg.h" +#include "llhudmanager.h" +#include "lljoystickbutton.h" +#include "llselectmgr.h" +#include "llsmoothstep.h" +#include "lltoolmgr.h" +#include "llviewercamera.h" +#include "llviewercontrol.h" +#include "llviewerjoystick.h" +#include "llviewerobjectlist.h" +#include "llviewerregion.h" +#include "llviewerwindow.h" +#include "llvoavatarself.h" +#include "llwindow.h" +#include "llworld.h" + +using namespace LLVOAvatarDefines; + +extern LLMenuBarGL* gMenuBarView; + +// Mousewheel camera zoom +const F32 MIN_ZOOM_FRACTION = 0.25f; +const F32 INITIAL_ZOOM_FRACTION = 1.f; +const F32 MAX_ZOOM_FRACTION = 8.f; + +const F32 CAMERA_ZOOM_HALF_LIFE = 0.07f; // seconds +const F32 FOV_ZOOM_HALF_LIFE = 0.07f; // seconds + +const F32 CAMERA_FOCUS_HALF_LIFE = 0.f;//0.02f; +const F32 CAMERA_LAG_HALF_LIFE = 0.25f; +const F32 MIN_CAMERA_LAG = 0.5f; +const F32 MAX_CAMERA_LAG = 5.f; + +const F32 CAMERA_COLLIDE_EPSILON = 0.1f; +const F32 MIN_CAMERA_DISTANCE = 0.1f; + +const F32 AVATAR_ZOOM_MIN_X_FACTOR = 0.55f; +const F32 AVATAR_ZOOM_MIN_Y_FACTOR = 0.7f; +const F32 AVATAR_ZOOM_MIN_Z_FACTOR = 1.15f; + +const F32 MAX_CAMERA_DISTANCE_FROM_AGENT = 50.f; + +const F32 MAX_CAMERA_SMOOTH_DISTANCE = 50.0f; + +const F32 HEAD_BUFFER_SIZE = 0.3f; + +const F32 CUSTOMIZE_AVATAR_CAMERA_ANIM_SLOP = 0.2f; + +const F32 LAND_MIN_ZOOM = 0.15f; + +const F32 AVATAR_MIN_ZOOM = 0.5f; +const F32 OBJECT_MIN_ZOOM = 0.02f; + +const F32 APPEARANCE_MIN_ZOOM = 0.39f; +const F32 APPEARANCE_MAX_ZOOM = 8.f; + +const F32 GROUND_TO_AIR_CAMERA_TRANSITION_TIME = 0.5f; +const F32 GROUND_TO_AIR_CAMERA_TRANSITION_START_TIME = 0.5f; + +const F32 OBJECT_EXTENTS_PADDING = 0.5f; + +// The agent instance. +LLAgentCamera gAgentCamera; + +//----------------------------------------------------------------------------- +// LLAgentCamera() +//----------------------------------------------------------------------------- +LLAgentCamera::LLAgentCamera() : + mDrawDistance( DEFAULT_FAR_PLANE ), + + mLookAt(NULL), + mPointAt(NULL), + + mHUDTargetZoom(1.f), + mHUDCurZoom(1.f), + + mForceMouselook(FALSE), + + mCameraMode( CAMERA_MODE_THIRD_PERSON ), + mLastCameraMode( CAMERA_MODE_THIRD_PERSON ), + + mCameraPreset(CAMERA_PRESET_REAR_VIEW), + + mCameraAnimating( FALSE ), + mAnimationCameraStartGlobal(), + mAnimationFocusStartGlobal(), + mAnimationTimer(), + mAnimationDuration(0.33f), + + mCameraFOVZoomFactor(0.f), + mCameraCurrentFOVZoomFactor(0.f), + mCameraFocusOffset(), + mCameraFOVDefault(DEFAULT_FIELD_OF_VIEW), + + mCameraCollidePlane(), + + mCurrentCameraDistance(2.f), // meters, set in init() + mTargetCameraDistance(2.f), + mCameraZoomFraction(1.f), // deprecated + mThirdPersonHeadOffset(0.f, 0.f, 1.f), + mSitCameraEnabled(FALSE), + mCameraSmoothingLastPositionGlobal(), + mCameraSmoothingLastPositionAgent(), + mCameraSmoothingStop(FALSE), + + mCameraUpVector(LLVector3::z_axis), // default is straight up + + mFocusOnAvatar(TRUE), + mFocusGlobal(), + mFocusTargetGlobal(), + mFocusObject(NULL), + mFocusObjectDist(0.f), + mFocusObjectOffset(), + mFocusDotRadius( 0.1f ), // meters + mTrackFocusObject(TRUE), + mUIOffset(0.f), + + mAtKey(0), // Either 1, 0, or -1... indicates that movement-key is pressed + mWalkKey(0), // like AtKey, but causes less forward thrust + mLeftKey(0), + mUpKey(0), + mYawKey(0.f), + mPitchKey(0.f), + + mOrbitLeftKey(0.f), + mOrbitRightKey(0.f), + mOrbitUpKey(0.f), + mOrbitDownKey(0.f), + mOrbitInKey(0.f), + mOrbitOutKey(0.f), + + mPanUpKey(0.f), + mPanDownKey(0.f), + mPanLeftKey(0.f), + mPanRightKey(0.f), + mPanInKey(0.f), + mPanOutKey(0.f) +{ + mFollowCam.setMaxCameraDistantFromSubject( MAX_CAMERA_DISTANCE_FROM_AGENT ); + + clearGeneralKeys(); + clearOrbitKeys(); + clearPanKeys(); +} + +// Requires gSavedSettings to be initialized. +//----------------------------------------------------------------------------- +// init() +//----------------------------------------------------------------------------- +void LLAgentCamera::init() +{ + // *Note: this is where LLViewerCamera::getInstance() used to be constructed. + + mDrawDistance = gSavedSettings.getF32("RenderFarClip"); + + LLViewerCamera::getInstance()->setView(DEFAULT_FIELD_OF_VIEW); + // Leave at 0.1 meters until we have real near clip management + LLViewerCamera::getInstance()->setNear(0.1f); + LLViewerCamera::getInstance()->setFar(mDrawDistance); // if you want to change camera settings, do so in camera.h + LLViewerCamera::getInstance()->setAspect( gViewerWindow->getWorldViewAspectRatio() ); // default, overridden in LLViewerWindow::reshape + LLViewerCamera::getInstance()->setViewHeightInPixels(768); // default, overridden in LLViewerWindow::reshape + + mCameraFocusOffsetTarget = LLVector4(gSavedSettings.getVector3("CameraOffsetBuild")); + + mCameraPreset = (ECameraPreset) gSavedSettings.getU32("CameraPreset"); + + mCameraOffsetInitial[CAMERA_PRESET_REAR_VIEW] = gSavedSettings.getVector3("CameraOffsetRearView"); + mCameraOffsetInitial[CAMERA_PRESET_FRONT_VIEW] = gSavedSettings.getVector3("CameraOffsetFrontView"); + mCameraOffsetInitial[CAMERA_PRESET_GROUP_VIEW] = gSavedSettings.getVector3("CameraOffsetGroupView"); + + mFocusOffsetInitial[CAMERA_PRESET_REAR_VIEW] = gSavedSettings.getVector3d("FocusOffsetRearView"); + mFocusOffsetInitial[CAMERA_PRESET_FRONT_VIEW] = gSavedSettings.getVector3d("FocusOffsetFrontView"); + mFocusOffsetInitial[CAMERA_PRESET_GROUP_VIEW] = gSavedSettings.getVector3d("FocusOffsetGroupView"); + + mCameraCollidePlane.clearVec(); + mCurrentCameraDistance = getCameraOffsetInitial().magVec() * gSavedSettings.getF32("CameraOffsetScale"); + mTargetCameraDistance = mCurrentCameraDistance; + mCameraZoomFraction = 1.f; + mTrackFocusObject = gSavedSettings.getBOOL("TrackFocusObject"); + + mInitialized = TRUE; +} + +//----------------------------------------------------------------------------- +// cleanup() +//----------------------------------------------------------------------------- +void LLAgentCamera::cleanup() +{ + setSitCamera(LLUUID::null); + + if(mLookAt) + { + mLookAt->markDead() ; + mLookAt = NULL; + } + if(mPointAt) + { + mPointAt->markDead() ; + mPointAt = NULL; + } + setFocusObject(NULL); +} + +void LLAgentCamera::setAvatarObject(LLVOAvatarSelf* avatar) +{ + if (!mLookAt) + { + mLookAt = (LLHUDEffectLookAt *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_LOOKAT); + } + if (!mPointAt) + { + mPointAt = (LLHUDEffectPointAt *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_POINTAT); + } + + if (!mLookAt.isNull()) + { + mLookAt->setSourceObject(avatar); + } + if (!mPointAt.isNull()) + { + mPointAt->setSourceObject(avatar); + } +} + +//----------------------------------------------------------------------------- +// LLAgent() +//----------------------------------------------------------------------------- +LLAgentCamera::~LLAgentCamera() +{ + cleanup(); + + // *Note: this is where LLViewerCamera::getInstance() used to be deleted. +} + +// Change camera back to third person, stop the autopilot, +// deselect stuff, etc. +//----------------------------------------------------------------------------- +// resetView() +//----------------------------------------------------------------------------- +void LLAgentCamera::resetView(BOOL reset_camera, BOOL change_camera) +{ + if (gAgent.getAutoPilot()) + { + gAgent.stopAutoPilot(TRUE); + } + + if (!gNoRender) + { + LLSelectMgr::getInstance()->unhighlightAll(); + + // By popular request, keep land selection while walking around. JC + // LLViewerParcelMgr::getInstance()->deselectLand(); + + // force deselect when walking and attachment is selected + // this is so people don't wig out when their avatar moves without animating + if (LLSelectMgr::getInstance()->getSelection()->isAttachment()) + { + LLSelectMgr::getInstance()->deselectAll(); + } + + // Hide all popup menus + gMenuHolder->hideMenus(); + } + + if (change_camera && !gSavedSettings.getBOOL("FreezeTime")) + { + changeCameraToDefault(); + + if (LLViewerJoystick::getInstance()->getOverrideCamera()) + { + handle_toggle_flycam(); + } + + // reset avatar mode from eventual residual motion + if (LLToolMgr::getInstance()->inBuildMode()) + { + LLViewerJoystick::getInstance()->moveAvatar(true); + } + + //Camera Tool is needed for Free Camera Control Mode + if (!LLFloaterCamera::inFreeCameraMode()) + { + LLFloaterReg::hideInstance("build"); + + // Switch back to basic toolset + LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset); + } + + gViewerWindow->showCursor(); + } + + + if (reset_camera && !gSavedSettings.getBOOL("FreezeTime")) + { + if (!gViewerWindow->getLeftMouseDown() && cameraThirdPerson()) + { + // leaving mouse-steer mode + LLVector3 agent_at_axis = gAgent.getAtAxis(); + agent_at_axis -= projected_vec(agent_at_axis, gAgent.getReferenceUpVector()); + agent_at_axis.normalize(); + gAgent.resetAxes(lerp(gAgent.getAtAxis(), agent_at_axis, LLCriticalDamp::getInterpolant(0.3f))); + } + + setFocusOnAvatar(TRUE, ANIMATE); + + mCameraFOVZoomFactor = 0.f; + } + + mHUDTargetZoom = 1.f; +} + +// Allow camera to be moved somewhere other than behind avatar. +//----------------------------------------------------------------------------- +// unlockView() +//----------------------------------------------------------------------------- +void LLAgentCamera::unlockView() +{ + if (getFocusOnAvatar()) + { + if (isAgentAvatarValid()) + { + setFocusGlobal(LLVector3d::zero, gAgentAvatarp->mID); + } + setFocusOnAvatar(FALSE, FALSE); // no animation + } +} + +//----------------------------------------------------------------------------- +// slamLookAt() +//----------------------------------------------------------------------------- +void LLAgentCamera::slamLookAt(const LLVector3 &look_at) +{ + LLVector3 look_at_norm = look_at; + look_at_norm.mV[VZ] = 0.f; + look_at_norm.normalize(); + gAgent.resetAxes(look_at_norm); +} + +//----------------------------------------------------------------------------- +// calcFocusOffset() +//----------------------------------------------------------------------------- +LLVector3 LLAgentCamera::calcFocusOffset(LLViewerObject *object, LLVector3 original_focus_point, S32 x, S32 y) +{ + LLMatrix4 obj_matrix = object->getRenderMatrix(); + LLQuaternion obj_rot = object->getRenderRotation(); + LLVector3 obj_pos = object->getRenderPosition(); + + BOOL is_avatar = object->isAvatar(); + // if is avatar - don't do any funk heuristics to position the focal point + // see DEV-30589 + if (is_avatar) + { + return original_focus_point - obj_pos; + } + + + LLQuaternion inv_obj_rot = ~obj_rot; // get inverse of rotation + LLVector3 object_extents = object->getScale(); + // make sure they object extents are non-zero + object_extents.clamp(0.001f, F32_MAX); + + // obj_to_cam_ray is unit vector pointing from object center to camera, in the coordinate frame of the object + LLVector3 obj_to_cam_ray = obj_pos - LLViewerCamera::getInstance()->getOrigin(); + obj_to_cam_ray.rotVec(inv_obj_rot); + obj_to_cam_ray.normalize(); + + // obj_to_cam_ray_proportions are the (positive) ratios of + // the obj_to_cam_ray x,y,z components with the x,y,z object dimensions. + LLVector3 obj_to_cam_ray_proportions; + obj_to_cam_ray_proportions.mV[VX] = llabs(obj_to_cam_ray.mV[VX] / object_extents.mV[VX]); + obj_to_cam_ray_proportions.mV[VY] = llabs(obj_to_cam_ray.mV[VY] / object_extents.mV[VY]); + obj_to_cam_ray_proportions.mV[VZ] = llabs(obj_to_cam_ray.mV[VZ] / object_extents.mV[VZ]); + + // find the largest ratio stored in obj_to_cam_ray_proportions + // this corresponds to the object's local axial plane (XY, YZ, XZ) that is *most* facing the camera + LLVector3 longest_object_axis; + // is x-axis longest? + if (obj_to_cam_ray_proportions.mV[VX] > obj_to_cam_ray_proportions.mV[VY] + && obj_to_cam_ray_proportions.mV[VX] > obj_to_cam_ray_proportions.mV[VZ]) + { + // then grab it + longest_object_axis.setVec(obj_matrix.getFwdRow4()); + } + // is y-axis longest? + else if (obj_to_cam_ray_proportions.mV[VY] > obj_to_cam_ray_proportions.mV[VZ]) + { + // then grab it + longest_object_axis.setVec(obj_matrix.getLeftRow4()); + } + // otherwise, use z axis + else + { + longest_object_axis.setVec(obj_matrix.getUpRow4()); + } + + // Use this axis as the normal to project mouse click on to plane with that normal, at the object center. + // This generates a point behind the mouse cursor that is approximately in the middle of the object in + // terms of depth. + // We do this to allow the camera rotation tool to "tumble" the object by rotating the camera. + // If the focus point were the object surface under the mouse, camera rotation would introduce an undesirable + // eccentricity to the object orientation + LLVector3 focus_plane_normal(longest_object_axis); + focus_plane_normal.normalize(); + + LLVector3d focus_pt_global; + gViewerWindow->mousePointOnPlaneGlobal(focus_pt_global, x, y, gAgent.getPosGlobalFromAgent(obj_pos), focus_plane_normal); + LLVector3 focus_pt = gAgent.getPosAgentFromGlobal(focus_pt_global); + + // find vector from camera to focus point in object space + LLVector3 camera_to_focus_vec = focus_pt - LLViewerCamera::getInstance()->getOrigin(); + camera_to_focus_vec.rotVec(inv_obj_rot); + + // find vector from object origin to focus point in object coordinates + LLVector3 focus_offset_from_object_center = focus_pt - obj_pos; + // convert to object-local space + focus_offset_from_object_center.rotVec(inv_obj_rot); + + // We need to project the focus point back into the bounding box of the focused object. + // Do this by calculating the XYZ scale factors needed to get focus offset back in bounds along the camera_focus axis + LLVector3 clip_fraction; + + // for each axis... + for (U32 axis = VX; axis <= VZ; axis++) + { + //...calculate distance that focus offset sits outside of bounding box along that axis... + //NOTE: dist_out_of_bounds keeps the sign of focus_offset_from_object_center + F32 dist_out_of_bounds; + if (focus_offset_from_object_center.mV[axis] > 0.f) + { + dist_out_of_bounds = llmax(0.f, focus_offset_from_object_center.mV[axis] - (object_extents.mV[axis] * 0.5f)); + } + else + { + dist_out_of_bounds = llmin(0.f, focus_offset_from_object_center.mV[axis] + (object_extents.mV[axis] * 0.5f)); + } + + //...then calculate the scale factor needed to push camera_to_focus_vec back in bounds along current axis + if (llabs(camera_to_focus_vec.mV[axis]) < 0.0001f) + { + // don't divide by very small number + clip_fraction.mV[axis] = 0.f; + } + else + { + clip_fraction.mV[axis] = dist_out_of_bounds / camera_to_focus_vec.mV[axis]; + } + } + + LLVector3 abs_clip_fraction = clip_fraction; + abs_clip_fraction.abs(); + + // find axis of focus offset that is *most* outside the bounding box and use that to + // rescale focus offset to inside object extents + if (abs_clip_fraction.mV[VX] > abs_clip_fraction.mV[VY] + && abs_clip_fraction.mV[VX] > abs_clip_fraction.mV[VZ]) + { + focus_offset_from_object_center -= clip_fraction.mV[VX] * camera_to_focus_vec; + } + else if (abs_clip_fraction.mV[VY] > abs_clip_fraction.mV[VZ]) + { + focus_offset_from_object_center -= clip_fraction.mV[VY] * camera_to_focus_vec; + } + else + { + focus_offset_from_object_center -= clip_fraction.mV[VZ] * camera_to_focus_vec; + } + + // convert back to world space + focus_offset_from_object_center.rotVec(obj_rot); + + // now, based on distance of camera from object relative to object size + // push the focus point towards the near surface of the object when (relatively) close to the objcet + // or keep the focus point in the object middle when (relatively) far + // NOTE: leave focus point in middle of avatars, since the behavior you want when alt-zooming on avatars + // is almost always "tumble about middle" and not "spin around surface point" + if (!is_avatar) + { + LLVector3 obj_rel = original_focus_point - object->getRenderPosition(); + + //now that we have the object relative position, we should bias toward the center of the object + //based on the distance of the camera to the focus point vs. the distance of the camera to the focus + + F32 relDist = llabs(obj_rel * LLViewerCamera::getInstance()->getAtAxis()); + F32 viewDist = dist_vec(obj_pos + obj_rel, LLViewerCamera::getInstance()->getOrigin()); + + + LLBBox obj_bbox = object->getBoundingBoxAgent(); + F32 bias = 0.f; + + // virtual_camera_pos is the camera position we are simulating by backing the camera off + // and adjusting the FOV + LLVector3 virtual_camera_pos = gAgent.getPosAgentFromGlobal(mFocusTargetGlobal + (getCameraPositionGlobal() - mFocusTargetGlobal) / (1.f + mCameraFOVZoomFactor)); + + // if the camera is inside the object (large, hollow objects, for example) + // leave focus point all the way to destination depth, away from object center + if(!obj_bbox.containsPointAgent(virtual_camera_pos)) + { + // perform magic number biasing of focus point towards surface vs. planar center + bias = clamp_rescale(relDist/viewDist, 0.1f, 0.7f, 0.0f, 1.0f); + obj_rel = lerp(focus_offset_from_object_center, obj_rel, bias); + } + + focus_offset_from_object_center = obj_rel; + } + + return focus_offset_from_object_center; +} + +//----------------------------------------------------------------------------- +// calcCameraMinDistance() +//----------------------------------------------------------------------------- +BOOL LLAgentCamera::calcCameraMinDistance(F32 &obj_min_distance) +{ + BOOL soft_limit = FALSE; // is the bounding box to be treated literally (volumes) or as an approximation (avatars) + + if (!mFocusObject || mFocusObject->isDead()) + { + obj_min_distance = 0.f; + return TRUE; + } + + if (mFocusObject->mDrawable.isNull()) + { +#ifdef LL_RELEASE_FOR_DOWNLOAD + llwarns << "Focus object with no drawable!" << llendl; +#else + mFocusObject->dump(); + llerrs << "Focus object with no drawable!" << llendl; +#endif + obj_min_distance = 0.f; + return TRUE; + } + + LLQuaternion inv_object_rot = ~mFocusObject->getRenderRotation(); + LLVector3 target_offset_origin = mFocusObjectOffset; + LLVector3 camera_offset_target(getCameraPositionAgent() - gAgent.getPosAgentFromGlobal(mFocusTargetGlobal)); + + // convert offsets into object local space + camera_offset_target.rotVec(inv_object_rot); + target_offset_origin.rotVec(inv_object_rot); + + // push around object extents based on target offset + LLVector3 object_extents = mFocusObject->getScale(); + if (mFocusObject->isAvatar()) + { + // fudge factors that lets you zoom in on avatars a bit more (which don't do FOV zoom) + object_extents.mV[VX] *= AVATAR_ZOOM_MIN_X_FACTOR; + object_extents.mV[VY] *= AVATAR_ZOOM_MIN_Y_FACTOR; + object_extents.mV[VZ] *= AVATAR_ZOOM_MIN_Z_FACTOR; + soft_limit = TRUE; + } + LLVector3 abs_target_offset = target_offset_origin; + abs_target_offset.abs(); + + LLVector3 target_offset_dir = target_offset_origin; + F32 object_radius = mFocusObject->getVObjRadius(); + + BOOL target_outside_object_extents = FALSE; + + for (U32 i = VX; i <= VZ; i++) + { + if (abs_target_offset.mV[i] * 2.f > object_extents.mV[i] + OBJECT_EXTENTS_PADDING) + { + target_outside_object_extents = TRUE; + } + if (camera_offset_target.mV[i] > 0.f) + { + object_extents.mV[i] -= target_offset_origin.mV[i] * 2.f; + } + else + { + object_extents.mV[i] += target_offset_origin.mV[i] * 2.f; + } + } + + // don't shrink the object extents so far that the object inverts + object_extents.clamp(0.001f, F32_MAX); + + // move into first octant + LLVector3 camera_offset_target_abs_norm = camera_offset_target; + camera_offset_target_abs_norm.abs(); + // make sure offset is non-zero + camera_offset_target_abs_norm.clamp(0.001f, F32_MAX); + camera_offset_target_abs_norm.normalize(); + + // find camera position relative to normalized object extents + LLVector3 camera_offset_target_scaled = camera_offset_target_abs_norm; + camera_offset_target_scaled.mV[VX] /= object_extents.mV[VX]; + camera_offset_target_scaled.mV[VY] /= object_extents.mV[VY]; + camera_offset_target_scaled.mV[VZ] /= object_extents.mV[VZ]; + + if (camera_offset_target_scaled.mV[VX] > camera_offset_target_scaled.mV[VY] && + camera_offset_target_scaled.mV[VX] > camera_offset_target_scaled.mV[VZ]) + { + if (camera_offset_target_abs_norm.mV[VX] < 0.001f) + { + obj_min_distance = object_extents.mV[VX] * 0.5f; + } + else + { + obj_min_distance = object_extents.mV[VX] * 0.5f / camera_offset_target_abs_norm.mV[VX]; + } + } + else if (camera_offset_target_scaled.mV[VY] > camera_offset_target_scaled.mV[VZ]) + { + if (camera_offset_target_abs_norm.mV[VY] < 0.001f) + { + obj_min_distance = object_extents.mV[VY] * 0.5f; + } + else + { + obj_min_distance = object_extents.mV[VY] * 0.5f / camera_offset_target_abs_norm.mV[VY]; + } + } + else + { + if (camera_offset_target_abs_norm.mV[VZ] < 0.001f) + { + obj_min_distance = object_extents.mV[VZ] * 0.5f; + } + else + { + obj_min_distance = object_extents.mV[VZ] * 0.5f / camera_offset_target_abs_norm.mV[VZ]; + } + } + + LLVector3 object_split_axis; + LLVector3 target_offset_scaled = target_offset_origin; + target_offset_scaled.abs(); + target_offset_scaled.normalize(); + target_offset_scaled.mV[VX] /= object_extents.mV[VX]; + target_offset_scaled.mV[VY] /= object_extents.mV[VY]; + target_offset_scaled.mV[VZ] /= object_extents.mV[VZ]; + + if (target_offset_scaled.mV[VX] > target_offset_scaled.mV[VY] && + target_offset_scaled.mV[VX] > target_offset_scaled.mV[VZ]) + { + object_split_axis = LLVector3::x_axis; + } + else if (target_offset_scaled.mV[VY] > target_offset_scaled.mV[VZ]) + { + object_split_axis = LLVector3::y_axis; + } + else + { + object_split_axis = LLVector3::z_axis; + } + + LLVector3 camera_offset_object(getCameraPositionAgent() - mFocusObject->getPositionAgent()); + + // length projected orthogonal to target offset + F32 camera_offset_dist = (camera_offset_object - target_offset_dir * (camera_offset_object * target_offset_dir)).magVec(); + + // calculate whether the target point would be "visible" if it were outside the bounding box + // on the opposite of the splitting plane defined by object_split_axis; + BOOL exterior_target_visible = FALSE; + if (camera_offset_dist > object_radius) + { + // target is visible from camera, so turn off fov zoom + exterior_target_visible = TRUE; + } + + F32 camera_offset_clip = camera_offset_object * object_split_axis; + F32 target_offset_clip = target_offset_dir * object_split_axis; + + // target has moved outside of object extents + // check to see if camera and target are on same side + if (target_outside_object_extents) + { + if (camera_offset_clip > 0.f && target_offset_clip > 0.f) + { + return FALSE; + } + else if (camera_offset_clip < 0.f && target_offset_clip < 0.f) + { + return FALSE; + } + } + + // clamp obj distance to diagonal of 10 by 10 cube + obj_min_distance = llmin(obj_min_distance, 10.f * F_SQRT3); + + obj_min_distance += LLViewerCamera::getInstance()->getNear() + (soft_limit ? 0.1f : 0.2f); + + return TRUE; +} + +F32 LLAgentCamera::getCameraZoomFraction() +{ + // 0.f -> camera zoomed all the way out + // 1.f -> camera zoomed all the way in + LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection(); + if (selection->getObjectCount() && selection->getSelectType() == SELECT_TYPE_HUD) + { + // already [0,1] + return mHUDTargetZoom; + } + else if (mFocusOnAvatar && cameraThirdPerson()) + { + return clamp_rescale(mCameraZoomFraction, MIN_ZOOM_FRACTION, MAX_ZOOM_FRACTION, 1.f, 0.f); + } + else if (cameraCustomizeAvatar()) + { + F32 distance = (F32)mCameraFocusOffsetTarget.magVec(); + return clamp_rescale(distance, APPEARANCE_MIN_ZOOM, APPEARANCE_MAX_ZOOM, 1.f, 0.f ); + } + else + { + F32 min_zoom; + const F32 DIST_FUDGE = 16.f; // meters + F32 max_zoom = llmin(mDrawDistance - DIST_FUDGE, + LLWorld::getInstance()->getRegionWidthInMeters() - DIST_FUDGE, + MAX_CAMERA_DISTANCE_FROM_AGENT); + + F32 distance = (F32)mCameraFocusOffsetTarget.magVec(); + if (mFocusObject.notNull()) + { + if (mFocusObject->isAvatar()) + { + min_zoom = AVATAR_MIN_ZOOM; + } + else + { + min_zoom = OBJECT_MIN_ZOOM; + } + } + else + { + min_zoom = LAND_MIN_ZOOM; + } + + return clamp_rescale(distance, min_zoom, max_zoom, 1.f, 0.f); + } +} + +void LLAgentCamera::setCameraZoomFraction(F32 fraction) +{ + // 0.f -> camera zoomed all the way out + // 1.f -> camera zoomed all the way in + LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection(); + + if (selection->getObjectCount() && selection->getSelectType() == SELECT_TYPE_HUD) + { + mHUDTargetZoom = fraction; + } + else if (mFocusOnAvatar && cameraThirdPerson()) + { + mCameraZoomFraction = rescale(fraction, 0.f, 1.f, MAX_ZOOM_FRACTION, MIN_ZOOM_FRACTION); + } + else if (cameraCustomizeAvatar()) + { + LLVector3d camera_offset_dir = mCameraFocusOffsetTarget; + camera_offset_dir.normalize(); + mCameraFocusOffsetTarget = camera_offset_dir * rescale(fraction, 0.f, 1.f, APPEARANCE_MAX_ZOOM, APPEARANCE_MIN_ZOOM); + } + else + { + F32 min_zoom = LAND_MIN_ZOOM; + const F32 DIST_FUDGE = 16.f; // meters + F32 max_zoom = llmin(mDrawDistance - DIST_FUDGE, + LLWorld::getInstance()->getRegionWidthInMeters() - DIST_FUDGE, + MAX_CAMERA_DISTANCE_FROM_AGENT); + + if (mFocusObject.notNull()) + { + if (mFocusObject.notNull()) + { + if (mFocusObject->isAvatar()) + { + min_zoom = AVATAR_MIN_ZOOM; + } + else + { + min_zoom = OBJECT_MIN_ZOOM; + } + } + } + + LLVector3d camera_offset_dir = mCameraFocusOffsetTarget; + camera_offset_dir.normalize(); + mCameraFocusOffsetTarget = camera_offset_dir * rescale(fraction, 0.f, 1.f, max_zoom, min_zoom); + } + startCameraAnimation(); +} + + +//----------------------------------------------------------------------------- +// cameraOrbitAround() +//----------------------------------------------------------------------------- +void LLAgentCamera::cameraOrbitAround(const F32 radians) +{ + LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection(); + if (selection->getObjectCount() && selection->getSelectType() == SELECT_TYPE_HUD) + { + // do nothing for hud selection + } + else if (mFocusOnAvatar && (mCameraMode == CAMERA_MODE_THIRD_PERSON || mCameraMode == CAMERA_MODE_FOLLOW)) + { + gAgent.yaw(radians); + } + else + { + mCameraFocusOffsetTarget.rotVec(radians, 0.f, 0.f, 1.f); + + cameraZoomIn(1.f); + } +} + + +//----------------------------------------------------------------------------- +// cameraOrbitOver() +//----------------------------------------------------------------------------- +void LLAgentCamera::cameraOrbitOver(const F32 angle) +{ + LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection(); + if (selection->getObjectCount() && selection->getSelectType() == SELECT_TYPE_HUD) + { + // do nothing for hud selection + } + else if (mFocusOnAvatar && mCameraMode == CAMERA_MODE_THIRD_PERSON) + { + gAgent.pitch(angle); + } + else + { + LLVector3 camera_offset_unit(mCameraFocusOffsetTarget); + camera_offset_unit.normalize(); + + F32 angle_from_up = acos( camera_offset_unit * gAgent.getReferenceUpVector() ); + + LLVector3d left_axis; + left_axis.setVec(LLViewerCamera::getInstance()->getLeftAxis()); + F32 new_angle = llclamp(angle_from_up - angle, 1.f * DEG_TO_RAD, 179.f * DEG_TO_RAD); + mCameraFocusOffsetTarget.rotVec(angle_from_up - new_angle, left_axis); + + cameraZoomIn(1.f); + } +} + +//----------------------------------------------------------------------------- +// cameraZoomIn() +//----------------------------------------------------------------------------- +void LLAgentCamera::cameraZoomIn(const F32 fraction) +{ + if (gDisconnected) + { + return; + } + + LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection(); + if (selection->getObjectCount() && selection->getSelectType() == SELECT_TYPE_HUD) + { + // just update hud zoom level + mHUDTargetZoom /= fraction; + return; + } + + + LLVector3d camera_offset(mCameraFocusOffsetTarget); + LLVector3d camera_offset_unit(mCameraFocusOffsetTarget); + F32 min_zoom = LAND_MIN_ZOOM; + F32 current_distance = (F32)camera_offset_unit.normalize(); + F32 new_distance = current_distance * fraction; + + // Don't move through focus point + if (mFocusObject) + { + LLVector3 camera_offset_dir((F32)camera_offset_unit.mdV[VX], (F32)camera_offset_unit.mdV[VY], (F32)camera_offset_unit.mdV[VZ]); + + if (mFocusObject->isAvatar()) + { + calcCameraMinDistance(min_zoom); + } + else + { + min_zoom = OBJECT_MIN_ZOOM; + } + } + + new_distance = llmax(new_distance, min_zoom); + + // Don't zoom too far back + const F32 DIST_FUDGE = 16.f; // meters + F32 max_distance = llmin(mDrawDistance - DIST_FUDGE, + LLWorld::getInstance()->getRegionWidthInMeters() - DIST_FUDGE ); + + if (new_distance > max_distance) + { + new_distance = max_distance; + + /* + // Unless camera is unlocked + if (!LLViewerCamera::sDisableCameraConstraints) + { + return; + } + */ + } + + if( cameraCustomizeAvatar() ) + { + new_distance = llclamp( new_distance, APPEARANCE_MIN_ZOOM, APPEARANCE_MAX_ZOOM ); + } + + mCameraFocusOffsetTarget = new_distance * camera_offset_unit; +} + +//----------------------------------------------------------------------------- +// cameraOrbitIn() +//----------------------------------------------------------------------------- +void LLAgentCamera::cameraOrbitIn(const F32 meters) +{ + if (mFocusOnAvatar && mCameraMode == CAMERA_MODE_THIRD_PERSON) + { + F32 camera_offset_dist = llmax(0.001f, getCameraOffsetInitial().magVec() * gSavedSettings.getF32("CameraOffsetScale")); + + mCameraZoomFraction = (mTargetCameraDistance - meters) / camera_offset_dist; + + if (!gSavedSettings.getBOOL("FreezeTime") && mCameraZoomFraction < MIN_ZOOM_FRACTION && meters > 0.f) + { + // No need to animate, camera is already there. + changeCameraToMouselook(FALSE); + } + + mCameraZoomFraction = llclamp(mCameraZoomFraction, MIN_ZOOM_FRACTION, MAX_ZOOM_FRACTION); + } + else + { + LLVector3d camera_offset(mCameraFocusOffsetTarget); + LLVector3d camera_offset_unit(mCameraFocusOffsetTarget); + F32 current_distance = (F32)camera_offset_unit.normalize(); + F32 new_distance = current_distance - meters; + F32 min_zoom = LAND_MIN_ZOOM; + + // Don't move through focus point + if (mFocusObject.notNull()) + { + if (mFocusObject->isAvatar()) + { + min_zoom = AVATAR_MIN_ZOOM; + } + else + { + min_zoom = OBJECT_MIN_ZOOM; + } + } + + new_distance = llmax(new_distance, min_zoom); + + // Don't zoom too far back + const F32 DIST_FUDGE = 16.f; // meters + F32 max_distance = llmin(mDrawDistance - DIST_FUDGE, + LLWorld::getInstance()->getRegionWidthInMeters() - DIST_FUDGE ); + + if (new_distance > max_distance) + { + // Unless camera is unlocked + if (!gSavedSettings.getBOOL("DisableCameraConstraints")) + { + return; + } + } + + if( CAMERA_MODE_CUSTOMIZE_AVATAR == getCameraMode() ) + { + new_distance = llclamp( new_distance, APPEARANCE_MIN_ZOOM, APPEARANCE_MAX_ZOOM ); + } + + // Compute new camera offset + mCameraFocusOffsetTarget = new_distance * camera_offset_unit; + cameraZoomIn(1.f); + } +} + + +//----------------------------------------------------------------------------- +// cameraPanIn() +//----------------------------------------------------------------------------- +void LLAgentCamera::cameraPanIn(F32 meters) +{ + LLVector3d at_axis; + at_axis.setVec(LLViewerCamera::getInstance()->getAtAxis()); + + mFocusTargetGlobal += meters * at_axis; + mFocusGlobal = mFocusTargetGlobal; + // don't enforce zoom constraints as this is the only way for users to get past them easily + updateFocusOffset(); + // NOTE: panning movements expect the camera to move exactly with the focus target, not animated behind -Nyx + mCameraSmoothingLastPositionGlobal = calcCameraPositionTargetGlobal(); +} + +//----------------------------------------------------------------------------- +// cameraPanLeft() +//----------------------------------------------------------------------------- +void LLAgentCamera::cameraPanLeft(F32 meters) +{ + LLVector3d left_axis; + left_axis.setVec(LLViewerCamera::getInstance()->getLeftAxis()); + + mFocusTargetGlobal += meters * left_axis; + mFocusGlobal = mFocusTargetGlobal; + + // disable smoothing for camera pan, which causes some residents unhappiness + mCameraSmoothingStop = TRUE; + + cameraZoomIn(1.f); + updateFocusOffset(); + // NOTE: panning movements expect the camera to move exactly with the focus target, not animated behind - Nyx + mCameraSmoothingLastPositionGlobal = calcCameraPositionTargetGlobal(); +} + +//----------------------------------------------------------------------------- +// cameraPanUp() +//----------------------------------------------------------------------------- +void LLAgentCamera::cameraPanUp(F32 meters) +{ + LLVector3d up_axis; + up_axis.setVec(LLViewerCamera::getInstance()->getUpAxis()); + + mFocusTargetGlobal += meters * up_axis; + mFocusGlobal = mFocusTargetGlobal; + + // disable smoothing for camera pan, which causes some residents unhappiness + mCameraSmoothingStop = TRUE; + + cameraZoomIn(1.f); + updateFocusOffset(); + // NOTE: panning movements expect the camera to move exactly with the focus target, not animated behind -Nyx + mCameraSmoothingLastPositionGlobal = calcCameraPositionTargetGlobal(); +} + +//----------------------------------------------------------------------------- +// updateLookAt() +//----------------------------------------------------------------------------- +void LLAgentCamera::updateLookAt(const S32 mouse_x, const S32 mouse_y) +{ + static LLVector3 last_at_axis; + + if (!isAgentAvatarValid()) return; + + LLQuaternion av_inv_rot = ~gAgentAvatarp->mRoot.getWorldRotation(); + LLVector3 root_at = LLVector3::x_axis * gAgentAvatarp->mRoot.getWorldRotation(); + + if ((gViewerWindow->getMouseVelocityStat()->getCurrent() < 0.01f) && + (root_at * last_at_axis > 0.95f)) + { + LLVector3 vel = gAgentAvatarp->getVelocity(); + if (vel.magVecSquared() > 4.f) + { + setLookAt(LOOKAT_TARGET_IDLE, gAgentAvatarp, vel * av_inv_rot); + } + else + { + // *FIX: rotate mframeagent by sit object's rotation? + LLQuaternion look_rotation = gAgentAvatarp->isSitting() ? gAgentAvatarp->getRenderRotation() : gAgent.getFrameAgent().getQuaternion(); // use camera's current rotation + LLVector3 look_offset = LLVector3(2.f, 0.f, 0.f) * look_rotation * av_inv_rot; + setLookAt(LOOKAT_TARGET_IDLE, gAgentAvatarp, look_offset); + } + last_at_axis = root_at; + return; + } + + last_at_axis = root_at; + + if (CAMERA_MODE_CUSTOMIZE_AVATAR == getCameraMode()) + { + setLookAt(LOOKAT_TARGET_NONE, gAgentAvatarp, LLVector3(-2.f, 0.f, 0.f)); + } + else + { + // Move head based on cursor position + ELookAtType lookAtType = LOOKAT_TARGET_NONE; + LLVector3 headLookAxis; + LLCoordFrame frameCamera = *((LLCoordFrame*)LLViewerCamera::getInstance()); + + if (cameraMouselook()) + { + lookAtType = LOOKAT_TARGET_MOUSELOOK; + } + else if (cameraThirdPerson()) + { + // range from -.5 to .5 + F32 x_from_center = + ((F32) mouse_x / (F32) gViewerWindow->getWindowWidthScaled() ) - 0.5f; + F32 y_from_center = + ((F32) mouse_y / (F32) gViewerWindow->getWindowHeightScaled() ) - 0.5f; + + frameCamera.yaw( - x_from_center * gSavedSettings.getF32("YawFromMousePosition") * DEG_TO_RAD); + frameCamera.pitch( - y_from_center * gSavedSettings.getF32("PitchFromMousePosition") * DEG_TO_RAD); + lookAtType = LOOKAT_TARGET_FREELOOK; + } + + headLookAxis = frameCamera.getAtAxis(); + // RN: we use world-space offset for mouselook and freelook + //headLookAxis = headLookAxis * av_inv_rot; + setLookAt(lookAtType, gAgentAvatarp, headLookAxis); + } +} + +//----------------------------------------------------------------------------- +// updateCamera() +//----------------------------------------------------------------------------- +void LLAgentCamera::updateCamera() +{ + static LLFastTimer::DeclareTimer ftm("Camera"); + LLFastTimer t(ftm); + + //Ventrella - changed camera_skyward to the new global "mCameraUpVector" + mCameraUpVector = LLVector3::z_axis; + //LLVector3 camera_skyward(0.f, 0.f, 1.f); + //end Ventrella + + U32 camera_mode = mCameraAnimating ? mLastCameraMode : mCameraMode; + + validateFocusObject(); + + if (isAgentAvatarValid() && + gAgentAvatarp->isSitting() && + camera_mode == CAMERA_MODE_MOUSELOOK) + { + //Ventrella + //changed camera_skyward to the new global "mCameraUpVector" + mCameraUpVector = mCameraUpVector * gAgentAvatarp->getRenderRotation(); + //end Ventrella + } + + if (cameraThirdPerson() && mFocusOnAvatar && LLFollowCamMgr::getActiveFollowCamParams()) + { + changeCameraToFollow(); + } + + //Ventrella + //NOTE - this needs to be integrated into a general upVector system here within llAgent. + if ( camera_mode == CAMERA_MODE_FOLLOW && mFocusOnAvatar ) + { + mCameraUpVector = mFollowCam.getUpVector(); + } + //end Ventrella + + if (mSitCameraEnabled) + { + if (mSitCameraReferenceObject->isDead()) + { + setSitCamera(LLUUID::null); + } + } + + // Update UI with our camera inputs + LLFloaterCamera* camera_floater = LLFloaterReg::findTypedInstance<LLFloaterCamera>("camera"); + if (camera_floater) + { + camera_floater->mRotate->setToggleState(gAgentCamera.getOrbitRightKey() > 0.f, // left + gAgentCamera.getOrbitUpKey() > 0.f, // top + gAgentCamera.getOrbitLeftKey() > 0.f, // right + gAgentCamera.getOrbitDownKey() > 0.f); // bottom + + camera_floater->mTrack->setToggleState(gAgentCamera.getPanLeftKey() > 0.f, // left + gAgentCamera.getPanUpKey() > 0.f, // top + gAgentCamera.getPanRightKey() > 0.f, // right + gAgentCamera.getPanDownKey() > 0.f); // bottom + } + + // Handle camera movement based on keyboard. + const F32 ORBIT_OVER_RATE = 90.f * DEG_TO_RAD; // radians per second + const F32 ORBIT_AROUND_RATE = 90.f * DEG_TO_RAD; // radians per second + const F32 PAN_RATE = 5.f; // meters per second + + if (gAgentCamera.getOrbitUpKey() || gAgentCamera.getOrbitDownKey()) + { + F32 input_rate = gAgentCamera.getOrbitUpKey() - gAgentCamera.getOrbitDownKey(); + cameraOrbitOver( input_rate * ORBIT_OVER_RATE / gFPSClamped ); + } + + if (gAgentCamera.getOrbitLeftKey() || gAgentCamera.getOrbitRightKey()) + { + F32 input_rate = gAgentCamera.getOrbitLeftKey() - gAgentCamera.getOrbitRightKey(); + cameraOrbitAround(input_rate * ORBIT_AROUND_RATE / gFPSClamped); + } + + if (gAgentCamera.getOrbitInKey() || gAgentCamera.getOrbitOutKey()) + { + F32 input_rate = gAgentCamera.getOrbitInKey() - gAgentCamera.getOrbitOutKey(); + + LLVector3d to_focus = gAgent.getPosGlobalFromAgent(LLViewerCamera::getInstance()->getOrigin()) - calcFocusPositionTargetGlobal(); + F32 distance_to_focus = (F32)to_focus.magVec(); + // Move at distance (in meters) meters per second + cameraOrbitIn( input_rate * distance_to_focus / gFPSClamped ); + } + + if (gAgentCamera.getPanInKey() || gAgentCamera.getPanOutKey()) + { + F32 input_rate = gAgentCamera.getPanInKey() - gAgentCamera.getPanOutKey(); + cameraPanIn(input_rate * PAN_RATE / gFPSClamped); + } + + if (gAgentCamera.getPanRightKey() || gAgentCamera.getPanLeftKey()) + { + F32 input_rate = gAgentCamera.getPanRightKey() - gAgentCamera.getPanLeftKey(); + cameraPanLeft(input_rate * -PAN_RATE / gFPSClamped ); + } + + if (gAgentCamera.getPanUpKey() || gAgentCamera.getPanDownKey()) + { + F32 input_rate = gAgentCamera.getPanUpKey() - gAgentCamera.getPanDownKey(); + cameraPanUp(input_rate * PAN_RATE / gFPSClamped ); + } + + // Clear camera keyboard keys. + gAgentCamera.clearOrbitKeys(); + gAgentCamera.clearPanKeys(); + + // lerp camera focus offset + mCameraFocusOffset = lerp(mCameraFocusOffset, mCameraFocusOffsetTarget, LLCriticalDamp::getInterpolant(CAMERA_FOCUS_HALF_LIFE)); + + //Ventrella + if ( mCameraMode == CAMERA_MODE_FOLLOW ) + { + if (isAgentAvatarValid()) + { + //-------------------------------------------------------------------------------- + // this is where the avatar's position and rotation are given to followCam, and + // where it is updated. All three of its attributes are updated: (1) position, + // (2) focus, and (3) upvector. They can then be queried elsewhere in llAgent. + //-------------------------------------------------------------------------------- + // *TODO: use combined rotation of frameagent and sit object + LLQuaternion avatarRotationForFollowCam = gAgentAvatarp->isSitting() ? gAgentAvatarp->getRenderRotation() : gAgent.getFrameAgent().getQuaternion(); + + LLFollowCamParams* current_cam = LLFollowCamMgr::getActiveFollowCamParams(); + if (current_cam) + { + mFollowCam.copyParams(*current_cam); + mFollowCam.setSubjectPositionAndRotation( gAgentAvatarp->getRenderPosition(), avatarRotationForFollowCam ); + mFollowCam.update(); + LLViewerJoystick::getInstance()->setCameraNeedsUpdate(true); + } + else + { + changeCameraToThirdPerson(TRUE); + } + } + } + // end Ventrella + + BOOL hit_limit; + LLVector3d camera_pos_global; + LLVector3d camera_target_global = calcCameraPositionTargetGlobal(&hit_limit); + mCameraVirtualPositionAgent = gAgent.getPosAgentFromGlobal(camera_target_global); + LLVector3d focus_target_global = calcFocusPositionTargetGlobal(); + + // perform field of view correction + mCameraFOVZoomFactor = calcCameraFOVZoomFactor(); + camera_target_global = focus_target_global + (camera_target_global - focus_target_global) * (1.f + mCameraFOVZoomFactor); + + gAgent.setShowAvatar(TRUE); // can see avatar by default + + // Adjust position for animation + if (mCameraAnimating) + { + F32 time = mAnimationTimer.getElapsedTimeF32(); + + // yet another instance of critically damped motion, hooray! + // F32 fraction_of_animation = 1.f - pow(2.f, -time / CAMERA_ZOOM_HALF_LIFE); + + // linear interpolation + F32 fraction_of_animation = time / mAnimationDuration; + + BOOL isfirstPerson = mCameraMode == CAMERA_MODE_MOUSELOOK; + BOOL wasfirstPerson = mLastCameraMode == CAMERA_MODE_MOUSELOOK; + F32 fraction_animation_to_skip; + + if (mAnimationCameraStartGlobal == camera_target_global) + { + fraction_animation_to_skip = 0.f; + } + else + { + LLVector3d cam_delta = mAnimationCameraStartGlobal - camera_target_global; + fraction_animation_to_skip = HEAD_BUFFER_SIZE / (F32)cam_delta.magVec(); + } + F32 animation_start_fraction = (wasfirstPerson) ? fraction_animation_to_skip : 0.f; + F32 animation_finish_fraction = (isfirstPerson) ? (1.f - fraction_animation_to_skip) : 1.f; + + if (fraction_of_animation < animation_finish_fraction) + { + if (fraction_of_animation < animation_start_fraction || fraction_of_animation > animation_finish_fraction ) + { + gAgent.setShowAvatar(FALSE); + } + + // ...adjust position for animation + F32 smooth_fraction_of_animation = llsmoothstep(0.0f, 1.0f, fraction_of_animation); + camera_pos_global = lerp(mAnimationCameraStartGlobal, camera_target_global, smooth_fraction_of_animation); + mFocusGlobal = lerp(mAnimationFocusStartGlobal, focus_target_global, smooth_fraction_of_animation); + } + else + { + // ...animation complete + mCameraAnimating = FALSE; + + camera_pos_global = camera_target_global; + mFocusGlobal = focus_target_global; + + gAgent.endAnimationUpdateUI(); + gAgent.setShowAvatar(TRUE); + } + + if (isAgentAvatarValid() && (mCameraMode != CAMERA_MODE_MOUSELOOK)) + { + gAgentAvatarp->updateAttachmentVisibility(mCameraMode); + } + } + else + { + camera_pos_global = camera_target_global; + mFocusGlobal = focus_target_global; + gAgent.setShowAvatar(TRUE); + } + + // smoothing + if (TRUE) + { + LLVector3d agent_pos = gAgent.getPositionGlobal(); + LLVector3d camera_pos_agent = camera_pos_global - agent_pos; + // Sitting on what you're manipulating can cause camera jitter with smoothing. + // This turns off smoothing while editing. -MG + mCameraSmoothingStop |= (BOOL)LLToolMgr::getInstance()->inBuildMode(); + + if (cameraThirdPerson() && !mCameraSmoothingStop) + { + const F32 SMOOTHING_HALF_LIFE = 0.02f; + + F32 smoothing = LLCriticalDamp::getInterpolant(gSavedSettings.getF32("CameraPositionSmoothing") * SMOOTHING_HALF_LIFE, FALSE); + + if (!mFocusObject) // we differentiate on avatar mode + { + // for avatar-relative focus, we smooth in avatar space - + // the avatar moves too jerkily w/r/t global space to smooth there. + + LLVector3d delta = camera_pos_agent - mCameraSmoothingLastPositionAgent; + if (delta.magVec() < MAX_CAMERA_SMOOTH_DISTANCE) // only smooth over short distances please + { + camera_pos_agent = lerp(mCameraSmoothingLastPositionAgent, camera_pos_agent, smoothing); + camera_pos_global = camera_pos_agent + agent_pos; + } + } + else + { + LLVector3d delta = camera_pos_global - mCameraSmoothingLastPositionGlobal; + if (delta.magVec() < MAX_CAMERA_SMOOTH_DISTANCE) // only smooth over short distances please + { + camera_pos_global = lerp(mCameraSmoothingLastPositionGlobal, camera_pos_global, smoothing); + } + } + } + + mCameraSmoothingLastPositionGlobal = camera_pos_global; + mCameraSmoothingLastPositionAgent = camera_pos_agent; + mCameraSmoothingStop = FALSE; + } + + + mCameraCurrentFOVZoomFactor = lerp(mCameraCurrentFOVZoomFactor, mCameraFOVZoomFactor, LLCriticalDamp::getInterpolant(FOV_ZOOM_HALF_LIFE)); + +// llinfos << "Current FOV Zoom: " << mCameraCurrentFOVZoomFactor << " Target FOV Zoom: " << mCameraFOVZoomFactor << " Object penetration: " << mFocusObjectDist << llendl; + + F32 ui_offset = 0.f; + if( CAMERA_MODE_CUSTOMIZE_AVATAR == mCameraMode ) + { + ui_offset = calcCustomizeAvatarUIOffset( camera_pos_global ); + } + + + LLVector3 focus_agent = gAgent.getPosAgentFromGlobal(mFocusGlobal); + + mCameraPositionAgent = gAgent.getPosAgentFromGlobal(camera_pos_global); + + // Move the camera + + //Ventrella + LLViewerCamera::getInstance()->updateCameraLocation(mCameraPositionAgent, mCameraUpVector, focus_agent); + //LLViewerCamera::getInstance()->updateCameraLocation(mCameraPositionAgent, camera_skyward, focus_agent); + //end Ventrella + + //RN: translate UI offset after camera is oriented properly + LLViewerCamera::getInstance()->translate(LLViewerCamera::getInstance()->getLeftAxis() * ui_offset); + + // Change FOV + LLViewerCamera::getInstance()->setView(LLViewerCamera::getInstance()->getDefaultFOV() / (1.f + mCameraCurrentFOVZoomFactor)); + + // follow camera when in customize mode + if (cameraCustomizeAvatar()) + { + setLookAt(LOOKAT_TARGET_FOCUS, NULL, mCameraPositionAgent); + } + + // update the travel distance stat + // this isn't directly related to the camera + // but this seemed like the best place to do this + LLVector3d global_pos = gAgent.getPositionGlobal(); + if (!gAgent.getLastPositionGlobal().isExactlyZero()) + { + LLVector3d delta = global_pos - gAgent.getLastPositionGlobal(); + gAgent.setDistanceTraveled(gAgent.getDistanceTraveled() + delta.magVec()); + } + gAgent.setLastPositionGlobal(global_pos); + + if (LLVOAvatar::sVisibleInFirstPerson && isAgentAvatarValid() && !gAgentAvatarp->isSitting() && cameraMouselook()) + { + LLVector3 head_pos = gAgentAvatarp->mHeadp->getWorldPosition() + + LLVector3(0.08f, 0.f, 0.05f) * gAgentAvatarp->mHeadp->getWorldRotation() + + LLVector3(0.1f, 0.f, 0.f) * gAgentAvatarp->mPelvisp->getWorldRotation(); + LLVector3 diff = mCameraPositionAgent - head_pos; + diff = diff * ~gAgentAvatarp->mRoot.getWorldRotation(); + + LLJoint* torso_joint = gAgentAvatarp->mTorsop; + LLJoint* chest_joint = gAgentAvatarp->mChestp; + LLVector3 torso_scale = torso_joint->getScale(); + LLVector3 chest_scale = chest_joint->getScale(); + + // shorten avatar skeleton to avoid foot interpenetration + if (!gAgentAvatarp->mInAir) + { + LLVector3 chest_offset = LLVector3(0.f, 0.f, chest_joint->getPosition().mV[VZ]) * torso_joint->getWorldRotation(); + F32 z_compensate = llclamp(-diff.mV[VZ], -0.2f, 1.f); + F32 scale_factor = llclamp(1.f - ((z_compensate * 0.5f) / chest_offset.mV[VZ]), 0.5f, 1.2f); + torso_joint->setScale(LLVector3(1.f, 1.f, scale_factor)); + + LLJoint* neck_joint = gAgentAvatarp->mNeckp; + LLVector3 neck_offset = LLVector3(0.f, 0.f, neck_joint->getPosition().mV[VZ]) * chest_joint->getWorldRotation(); + scale_factor = llclamp(1.f - ((z_compensate * 0.5f) / neck_offset.mV[VZ]), 0.5f, 1.2f); + chest_joint->setScale(LLVector3(1.f, 1.f, scale_factor)); + diff.mV[VZ] = 0.f; + } + + gAgentAvatarp->mPelvisp->setPosition(gAgentAvatarp->mPelvisp->getPosition() + diff); + + gAgentAvatarp->mRoot.updateWorldMatrixChildren(); + + for (LLVOAvatar::attachment_map_t::iterator iter = gAgentAvatarp->mAttachmentPoints.begin(); + iter != gAgentAvatarp->mAttachmentPoints.end(); ) + { + LLVOAvatar::attachment_map_t::iterator curiter = iter++; + LLViewerJointAttachment* attachment = curiter->second; + for (LLViewerJointAttachment::attachedobjs_vec_t::iterator attachment_iter = attachment->mAttachedObjects.begin(); + attachment_iter != attachment->mAttachedObjects.end(); + ++attachment_iter) + { + LLViewerObject *attached_object = (*attachment_iter); + if (attached_object && !attached_object->isDead() && attached_object->mDrawable.notNull()) + { + // clear any existing "early" movements of attachment + attached_object->mDrawable->clearState(LLDrawable::EARLY_MOVE); + gPipeline.updateMoveNormalAsync(attached_object->mDrawable); + attached_object->updateText(); + } + } + } + + torso_joint->setScale(torso_scale); + chest_joint->setScale(chest_scale); + } +} + +void LLAgentCamera::updateLastCamera() +{ + mLastCameraMode = mCameraMode; +} + +void LLAgentCamera::updateFocusOffset() +{ + validateFocusObject(); + if (mFocusObject.notNull()) + { + LLVector3d obj_pos = gAgent.getPosGlobalFromAgent(mFocusObject->getRenderPosition()); + mFocusObjectOffset.setVec(mFocusTargetGlobal - obj_pos); + } +} + +void LLAgentCamera::validateFocusObject() +{ + if (mFocusObject.notNull() && + mFocusObject->isDead()) + { + mFocusObjectOffset.clearVec(); + clearFocusObject(); + mCameraFOVZoomFactor = 0.f; + } +} + +//----------------------------------------------------------------------------- +// calcCustomizeAvatarUIOffset() +//----------------------------------------------------------------------------- +F32 LLAgentCamera::calcCustomizeAvatarUIOffset(const LLVector3d& camera_pos_global) +{ + F32 ui_offset = 0.f; + + if (gFloaterCustomize) + { + const LLRect& rect = gFloaterCustomize->getRect(); + + // Move the camera so that the avatar isn't covered up by this floater. + F32 fraction_of_fov = 0.5f - (0.5f * (1.f - llmin(1.f, ((F32)rect.getWidth() / (F32)gViewerWindow->getWindowWidthScaled())))); + F32 apparent_angle = fraction_of_fov * LLViewerCamera::getInstance()->getView() * LLViewerCamera::getInstance()->getAspect(); // radians + F32 offset = tan(apparent_angle); + + if( rect.mLeft < (gViewerWindow->getWindowWidthScaled() - rect.mRight) ) + { + // Move the avatar to the right (camera to the left) + ui_offset = offset; + } + else + { + // Move the avatar to the left (camera to the right) + ui_offset = -offset; + } + } + F32 range = (F32)dist_vec(camera_pos_global, getFocusGlobal()); + mUIOffset = lerp(mUIOffset, ui_offset, LLCriticalDamp::getInterpolant(0.05f)); + return mUIOffset * range; +} + +//----------------------------------------------------------------------------- +// calcFocusPositionTargetGlobal() +//----------------------------------------------------------------------------- +LLVector3d LLAgentCamera::calcFocusPositionTargetGlobal() +{ + if (mFocusObject.notNull() && mFocusObject->isDead()) + { + clearFocusObject(); + } + + // Ventrella + if (mCameraMode == CAMERA_MODE_FOLLOW && mFocusOnAvatar) + { + mFocusTargetGlobal = gAgent.getPosGlobalFromAgent(mFollowCam.getSimulatedFocus()); + return mFocusTargetGlobal; + }// End Ventrella + else if (mCameraMode == CAMERA_MODE_MOUSELOOK) + { + LLVector3d at_axis(1.0, 0.0, 0.0); + LLQuaternion agent_rot = gAgent.getFrameAgent().getQuaternion(); + if (isAgentAvatarValid() && gAgentAvatarp->getParent()) + { + LLViewerObject* root_object = (LLViewerObject*)gAgentAvatarp->getRoot(); + if (!root_object->flagCameraDecoupled()) + { + agent_rot *= ((LLViewerObject*)(gAgentAvatarp->getParent()))->getRenderRotation(); + } + } + at_axis = at_axis * agent_rot; + mFocusTargetGlobal = calcCameraPositionTargetGlobal() + at_axis; + return mFocusTargetGlobal; + } + else if (mCameraMode == CAMERA_MODE_CUSTOMIZE_AVATAR) + { + return mFocusTargetGlobal; + } + else if (!mFocusOnAvatar) + { + if (mFocusObject.notNull() && !mFocusObject->isDead() && mFocusObject->mDrawable.notNull()) + { + LLDrawable* drawablep = mFocusObject->mDrawable; + + if (mTrackFocusObject && + drawablep && + drawablep->isActive()) + { + if (!mFocusObject->isAvatar()) + { + if (mFocusObject->isSelected()) + { + gPipeline.updateMoveNormalAsync(drawablep); + } + else + { + if (drawablep->isState(LLDrawable::MOVE_UNDAMPED)) + { + gPipeline.updateMoveNormalAsync(drawablep); + } + else + { + gPipeline.updateMoveDampedAsync(drawablep); + } + } + } + } + // if not tracking object, update offset based on new object position + else + { + updateFocusOffset(); + } + LLVector3 focus_agent = mFocusObject->getRenderPosition() + mFocusObjectOffset; + mFocusTargetGlobal.setVec(gAgent.getPosGlobalFromAgent(focus_agent)); + } + return mFocusTargetGlobal; + } + else if (mSitCameraEnabled && isAgentAvatarValid() && gAgentAvatarp->isSitting() && mSitCameraReferenceObject.notNull()) + { + // sit camera + LLVector3 object_pos = mSitCameraReferenceObject->getRenderPosition(); + LLQuaternion object_rot = mSitCameraReferenceObject->getRenderRotation(); + + LLVector3 target_pos = object_pos + (mSitCameraFocus * object_rot); + return gAgent.getPosGlobalFromAgent(target_pos); + } + else + { + return gAgent.getPositionGlobal() + calcThirdPersonFocusOffset(); + } +} + +LLVector3d LLAgentCamera::calcThirdPersonFocusOffset() +{ + // ...offset from avatar + LLVector3d focus_offset; + LLQuaternion agent_rot = gAgent.getFrameAgent().getQuaternion(); + if (isAgentAvatarValid() && gAgentAvatarp->getParent()) + { + agent_rot *= ((LLViewerObject*)(gAgentAvatarp->getParent()))->getRenderRotation(); + } + + focus_offset = mFocusOffsetInitial[mCameraPreset] * agent_rot; + return focus_offset; +} + +void LLAgentCamera::setupSitCamera() +{ + // agent frame entering this function is in world coordinates + if (isAgentAvatarValid() && gAgentAvatarp->getParent()) + { + LLQuaternion parent_rot = ((LLViewerObject*)gAgentAvatarp->getParent())->getRenderRotation(); + // slam agent coordinate frame to proper parent local version + LLVector3 at_axis = gAgent.getFrameAgent().getAtAxis(); + at_axis.mV[VZ] = 0.f; + at_axis.normalize(); + gAgent.resetAxes(at_axis * ~parent_rot); + } +} + +//----------------------------------------------------------------------------- +// getCameraPositionAgent() +//----------------------------------------------------------------------------- +const LLVector3 &LLAgentCamera::getCameraPositionAgent() const +{ + return LLViewerCamera::getInstance()->getOrigin(); +} + +//----------------------------------------------------------------------------- +// getCameraPositionGlobal() +//----------------------------------------------------------------------------- +LLVector3d LLAgentCamera::getCameraPositionGlobal() const +{ + return gAgent.getPosGlobalFromAgent(LLViewerCamera::getInstance()->getOrigin()); +} + +//----------------------------------------------------------------------------- +// calcCameraFOVZoomFactor() +//----------------------------------------------------------------------------- +F32 LLAgentCamera::calcCameraFOVZoomFactor() +{ + LLVector3 camera_offset_dir; + camera_offset_dir.setVec(mCameraFocusOffset); + + if (mCameraMode == CAMERA_MODE_MOUSELOOK) + { + return 0.f; + } + else if (mFocusObject.notNull() && !mFocusObject->isAvatar() && !mFocusOnAvatar) + { + // don't FOV zoom on mostly transparent objects + LLVector3 focus_offset = mFocusObjectOffset; + F32 obj_min_dist = 0.f; + calcCameraMinDistance(obj_min_dist); + F32 current_distance = llmax(0.001f, camera_offset_dir.magVec()); + + mFocusObjectDist = obj_min_dist - current_distance; + + F32 new_fov_zoom = llclamp(mFocusObjectDist / current_distance, 0.f, 1000.f); + return new_fov_zoom; + } + else // focusing on land or avatar + { + // keep old field of view until user changes focus explicitly + return mCameraFOVZoomFactor; + //return 0.f; + } +} + +//----------------------------------------------------------------------------- +// calcCameraPositionTargetGlobal() +//----------------------------------------------------------------------------- +LLVector3d LLAgentCamera::calcCameraPositionTargetGlobal(BOOL *hit_limit) +{ + // Compute base camera position and look-at points. + F32 camera_land_height; + LLVector3d frame_center_global = !isAgentAvatarValid() ? + gAgent.getPositionGlobal() : + gAgent.getPosGlobalFromAgent(gAgentAvatarp->mRoot.getWorldPosition()); + + BOOL isConstrained = FALSE; + LLVector3d head_offset; + head_offset.setVec(mThirdPersonHeadOffset); + + LLVector3d camera_position_global; + + // Ventrella + if (mCameraMode == CAMERA_MODE_FOLLOW && mFocusOnAvatar) + { + camera_position_global = gAgent.getPosGlobalFromAgent(mFollowCam.getSimulatedPosition()); + }// End Ventrella + else if (mCameraMode == CAMERA_MODE_MOUSELOOK) + { + if (!isAgentAvatarValid() || gAgentAvatarp->mDrawable.isNull()) + { + llwarns << "Null avatar drawable!" << llendl; + return LLVector3d::zero; + } + head_offset.clearVec(); + if (gAgentAvatarp->isSitting() && gAgentAvatarp->getParent()) + { + gAgentAvatarp->updateHeadOffset(); + head_offset.mdV[VX] = gAgentAvatarp->mHeadOffset.mV[VX]; + head_offset.mdV[VY] = gAgentAvatarp->mHeadOffset.mV[VY]; + head_offset.mdV[VZ] = gAgentAvatarp->mHeadOffset.mV[VZ] + 0.1f; + const LLMatrix4& mat = ((LLViewerObject*) gAgentAvatarp->getParent())->getRenderMatrix(); + camera_position_global = gAgent.getPosGlobalFromAgent + ((gAgentAvatarp->getPosition()+ + LLVector3(head_offset)*gAgentAvatarp->getRotation()) * mat); + } + else + { + head_offset.mdV[VZ] = gAgentAvatarp->mHeadOffset.mV[VZ]; + if (gAgentAvatarp->isSitting()) + { + head_offset.mdV[VZ] += 0.1; + } + camera_position_global = gAgent.getPosGlobalFromAgent(gAgentAvatarp->getRenderPosition());//frame_center_global; + head_offset = head_offset * gAgentAvatarp->getRenderRotation(); + camera_position_global = camera_position_global + head_offset; + } + } + else if (mCameraMode == CAMERA_MODE_THIRD_PERSON && mFocusOnAvatar) + { + LLVector3 local_camera_offset; + F32 camera_distance = 0.f; + + if (mSitCameraEnabled + && isAgentAvatarValid() + && gAgentAvatarp->isSitting() + && mSitCameraReferenceObject.notNull()) + { + // sit camera + LLVector3 object_pos = mSitCameraReferenceObject->getRenderPosition(); + LLQuaternion object_rot = mSitCameraReferenceObject->getRenderRotation(); + + LLVector3 target_pos = object_pos + (mSitCameraPos * object_rot); + + camera_position_global = gAgent.getPosGlobalFromAgent(target_pos); + } + else + { + local_camera_offset = mCameraZoomFraction * getCameraOffsetInitial() * gSavedSettings.getF32("CameraOffsetScale"); + + // are we sitting down? + if (isAgentAvatarValid() && gAgentAvatarp->getParent()) + { + LLQuaternion parent_rot = ((LLViewerObject*)gAgentAvatarp->getParent())->getRenderRotation(); + // slam agent coordinate frame to proper parent local version + LLVector3 at_axis = gAgent.getFrameAgent().getAtAxis() * parent_rot; + at_axis.mV[VZ] = 0.f; + at_axis.normalize(); + gAgent.resetAxes(at_axis * ~parent_rot); + + local_camera_offset = local_camera_offset * gAgent.getFrameAgent().getQuaternion() * parent_rot; + } + else + { + local_camera_offset = gAgent.getFrameAgent().rotateToAbsolute( local_camera_offset ); + } + + if (!mCameraCollidePlane.isExactlyZero() && (!isAgentAvatarValid() || !gAgentAvatarp->isSitting())) + { + LLVector3 plane_normal; + plane_normal.setVec(mCameraCollidePlane.mV); + + F32 offset_dot_norm = local_camera_offset * plane_normal; + if (llabs(offset_dot_norm) < 0.001f) + { + offset_dot_norm = 0.001f; + } + + camera_distance = local_camera_offset.normalize(); + + F32 pos_dot_norm = gAgent.getPosAgentFromGlobal(frame_center_global + head_offset) * plane_normal; + + // if agent is outside the colliding half-plane + if (pos_dot_norm > mCameraCollidePlane.mV[VW]) + { + // check to see if camera is on the opposite side (inside) the half-plane + if (offset_dot_norm + pos_dot_norm < mCameraCollidePlane.mV[VW]) + { + // diminish offset by factor to push it back outside the half-plane + camera_distance *= (pos_dot_norm - mCameraCollidePlane.mV[VW] - CAMERA_COLLIDE_EPSILON) / -offset_dot_norm; + } + } + else + { + if (offset_dot_norm + pos_dot_norm > mCameraCollidePlane.mV[VW]) + { + camera_distance *= (mCameraCollidePlane.mV[VW] - pos_dot_norm - CAMERA_COLLIDE_EPSILON) / offset_dot_norm; + } + } + } + else + { + camera_distance = local_camera_offset.normalize(); + } + + mTargetCameraDistance = llmax(camera_distance, MIN_CAMERA_DISTANCE); + + if (mTargetCameraDistance != mCurrentCameraDistance) + { + F32 camera_lerp_amt = LLCriticalDamp::getInterpolant(CAMERA_ZOOM_HALF_LIFE); + + mCurrentCameraDistance = lerp(mCurrentCameraDistance, mTargetCameraDistance, camera_lerp_amt); + } + + // Make the camera distance current + local_camera_offset *= mCurrentCameraDistance; + + // set the global camera position + LLVector3d camera_offset; + + LLVector3 av_pos = !isAgentAvatarValid() ? LLVector3::zero : gAgentAvatarp->getRenderPosition(); + camera_offset.setVec( local_camera_offset ); + camera_position_global = frame_center_global + head_offset + camera_offset; + + if (isAgentAvatarValid()) + { + LLVector3d camera_lag_d; + F32 lag_interp = LLCriticalDamp::getInterpolant(CAMERA_LAG_HALF_LIFE); + LLVector3 target_lag; + LLVector3 vel = gAgent.getVelocity(); + + // lag by appropriate amount for flying + F32 time_in_air = gAgentAvatarp->mTimeInAir.getElapsedTimeF32(); + if(!mCameraAnimating && gAgentAvatarp->mInAir && time_in_air > GROUND_TO_AIR_CAMERA_TRANSITION_START_TIME) + { + LLVector3 frame_at_axis = gAgent.getFrameAgent().getAtAxis(); + frame_at_axis -= projected_vec(frame_at_axis, gAgent.getReferenceUpVector()); + frame_at_axis.normalize(); + + //transition smoothly in air mode, to avoid camera pop + F32 u = (time_in_air - GROUND_TO_AIR_CAMERA_TRANSITION_START_TIME) / GROUND_TO_AIR_CAMERA_TRANSITION_TIME; + u = llclamp(u, 0.f, 1.f); + + lag_interp *= u; + + if (gViewerWindow->getLeftMouseDown() && gViewerWindow->getLastPick().mObjectID == gAgentAvatarp->getID()) + { + // disable camera lag when using mouse-directed steering + target_lag.clearVec(); + } + else + { + target_lag = vel * gSavedSettings.getF32("DynamicCameraStrength") / 30.f; + } + + mCameraLag = lerp(mCameraLag, target_lag, lag_interp); + + F32 lag_dist = mCameraLag.magVec(); + if (lag_dist > MAX_CAMERA_LAG) + { + mCameraLag = mCameraLag * MAX_CAMERA_LAG / lag_dist; + } + + // clamp camera lag so that avatar is always in front + F32 dot = (mCameraLag - (frame_at_axis * (MIN_CAMERA_LAG * u))) * frame_at_axis; + if (dot < -(MIN_CAMERA_LAG * u)) + { + mCameraLag -= (dot + (MIN_CAMERA_LAG * u)) * frame_at_axis; + } + } + else + { + mCameraLag = lerp(mCameraLag, LLVector3::zero, LLCriticalDamp::getInterpolant(0.15f)); + } + + camera_lag_d.setVec(mCameraLag); + camera_position_global = camera_position_global - camera_lag_d; + } + } + } + else + { + LLVector3d focusPosGlobal = calcFocusPositionTargetGlobal(); + // camera gets pushed out later wrt mCameraFOVZoomFactor...this is "raw" value + camera_position_global = focusPosGlobal + mCameraFocusOffset; + } + + if (!gSavedSettings.getBOOL("DisableCameraConstraints") && !gAgent.isGodlike()) + { + LLViewerRegion* regionp = LLWorld::getInstance()->getRegionFromPosGlobal(camera_position_global); + bool constrain = true; + if(regionp && regionp->canManageEstate()) + { + constrain = false; + } + if(constrain) + { + F32 max_dist = (CAMERA_MODE_CUSTOMIZE_AVATAR == mCameraMode) ? APPEARANCE_MAX_ZOOM : mDrawDistance; + + LLVector3d camera_offset = camera_position_global - gAgent.getPositionGlobal(); + F32 camera_distance = (F32)camera_offset.magVec(); + + if(camera_distance > max_dist) + { + camera_position_global = gAgent.getPositionGlobal() + (max_dist/camera_distance)*camera_offset; + isConstrained = TRUE; + } + } + +// JC - Could constrain camera based on parcel stuff here. +// LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromPosGlobal(camera_position_global); +// +// if (regionp && !regionp->mParcelOverlay->isBuildCameraAllowed(regionp->getPosRegionFromGlobal(camera_position_global))) +// { +// camera_position_global = last_position_global; +// +// isConstrained = TRUE; +// } + } + + // Don't let camera go underground + F32 camera_min_off_ground = getCameraMinOffGround(); + + camera_land_height = LLWorld::getInstance()->resolveLandHeightGlobal(camera_position_global); + + if (camera_position_global.mdV[VZ] < camera_land_height + camera_min_off_ground) + { + camera_position_global.mdV[VZ] = camera_land_height + camera_min_off_ground; + isConstrained = TRUE; + } + + + if (hit_limit) + { + *hit_limit = isConstrained; + } + + return camera_position_global; +} + + +LLVector3 LLAgentCamera::getCameraOffsetInitial() +{ + return mCameraOffsetInitial[mCameraPreset]; +} + + +//----------------------------------------------------------------------------- +// handleScrollWheel() +//----------------------------------------------------------------------------- +void LLAgentCamera::handleScrollWheel(S32 clicks) +{ + if (mCameraMode == CAMERA_MODE_FOLLOW && getFocusOnAvatar()) + { + if (!mFollowCam.getPositionLocked()) // not if the followCam position is locked in place + { + mFollowCam.zoom(clicks); + if (mFollowCam.isZoomedToMinimumDistance()) + { + changeCameraToMouselook(FALSE); + } + } + } + else + { + LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection(); + const F32 ROOT_ROOT_TWO = sqrt(F_SQRT2); + + // Block if camera is animating + if (mCameraAnimating) + { + return; + } + + if (selection->getObjectCount() && selection->getSelectType() == SELECT_TYPE_HUD) + { + F32 zoom_factor = (F32)pow(0.8, -clicks); + cameraZoomIn(zoom_factor); + } + else if (mFocusOnAvatar && (mCameraMode == CAMERA_MODE_THIRD_PERSON)) + { + F32 camera_offset_initial_mag = getCameraOffsetInitial().magVec(); + + F32 current_zoom_fraction = mTargetCameraDistance / (camera_offset_initial_mag * gSavedSettings.getF32("CameraOffsetScale")); + current_zoom_fraction *= 1.f - pow(ROOT_ROOT_TWO, clicks); + + cameraOrbitIn(current_zoom_fraction * camera_offset_initial_mag * gSavedSettings.getF32("CameraOffsetScale")); + } + else + { + F32 current_zoom_fraction = (F32)mCameraFocusOffsetTarget.magVec(); + cameraOrbitIn(current_zoom_fraction * (1.f - pow(ROOT_ROOT_TWO, clicks))); + } + } +} + + +//----------------------------------------------------------------------------- +// getCameraMinOffGround() +//----------------------------------------------------------------------------- +F32 LLAgentCamera::getCameraMinOffGround() +{ + if (mCameraMode == CAMERA_MODE_MOUSELOOK) + { + return 0.f; + } + else + { + if (gSavedSettings.getBOOL("DisableCameraConstraints")) + { + return -1000.f; + } + else + { + return 0.5f; + } + } +} + + +//----------------------------------------------------------------------------- +// resetCamera() +//----------------------------------------------------------------------------- +void LLAgentCamera::resetCamera() +{ + // Remove any pitch from the avatar + LLVector3 at = gAgent.getFrameAgent().getAtAxis(); + at.mV[VZ] = 0.f; + at.normalize(); + gAgent.resetAxes(at); + // have to explicitly clear field of view zoom now + mCameraFOVZoomFactor = 0.f; + + updateCamera(); +} + +//----------------------------------------------------------------------------- +// changeCameraToMouselook() +//----------------------------------------------------------------------------- +void LLAgentCamera::changeCameraToMouselook(BOOL animate) +{ + if (LLViewerJoystick::getInstance()->getOverrideCamera()) + { + return; + } + + // visibility changes at end of animation + gViewerWindow->getWindow()->resetBusyCount(); + + // unpause avatar animation + gAgent.unpauseAnimation(); + + LLToolMgr::getInstance()->setCurrentToolset(gMouselookToolset); + + if (isAgentAvatarValid()) + { + gAgentAvatarp->stopMotion(ANIM_AGENT_BODY_NOISE); + gAgentAvatarp->stopMotion(ANIM_AGENT_BREATHE_ROT); + } + + //gViewerWindow->stopGrab(); + LLSelectMgr::getInstance()->deselectAll(); + gViewerWindow->hideCursor(); + gViewerWindow->moveCursorToCenter(); + + if (mCameraMode != CAMERA_MODE_MOUSELOOK) + { + gFocusMgr.setKeyboardFocus(NULL); + + updateLastCamera(); + mCameraMode = CAMERA_MODE_MOUSELOOK; + const U32 old_flags = gAgent.getControlFlags(); + gAgent.setControlFlags(AGENT_CONTROL_MOUSELOOK); + if (old_flags != gAgent.getControlFlags()) + { + gAgent.setFlagsDirty(); + } + + if (animate) + { + startCameraAnimation(); + } + else + { + mCameraAnimating = FALSE; + gAgent.endAnimationUpdateUI(); + } + } +} + + +//----------------------------------------------------------------------------- +// changeCameraToDefault() +//----------------------------------------------------------------------------- +void LLAgentCamera::changeCameraToDefault() +{ + if (LLViewerJoystick::getInstance()->getOverrideCamera()) + { + return; + } + + if (LLFollowCamMgr::getActiveFollowCamParams()) + { + changeCameraToFollow(); + } + else + { + changeCameraToThirdPerson(); + } +} + + +// Ventrella +//----------------------------------------------------------------------------- +// changeCameraToFollow() +//----------------------------------------------------------------------------- +void LLAgentCamera::changeCameraToFollow(BOOL animate) +{ + if (LLViewerJoystick::getInstance()->getOverrideCamera()) + { + return; + } + + if(mCameraMode != CAMERA_MODE_FOLLOW) + { + if (mCameraMode == CAMERA_MODE_MOUSELOOK) + { + animate = FALSE; + } + startCameraAnimation(); + + updateLastCamera(); + mCameraMode = CAMERA_MODE_FOLLOW; + + // bang-in the current focus, position, and up vector of the follow cam + mFollowCam.reset(mCameraPositionAgent, LLViewerCamera::getInstance()->getPointOfInterest(), LLVector3::z_axis); + + if (gBasicToolset) + { + LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset); + } + + if (isAgentAvatarValid()) + { + gAgentAvatarp->mPelvisp->setPosition(LLVector3::zero); + gAgentAvatarp->startMotion( ANIM_AGENT_BODY_NOISE ); + gAgentAvatarp->startMotion( ANIM_AGENT_BREATHE_ROT ); + } + + // unpause avatar animation + gAgent.unpauseAnimation(); + + const U32 old_flags = gAgent.getControlFlags(); + gAgent.clearControlFlags(AGENT_CONTROL_MOUSELOOK); + if (old_flags != gAgent.getControlFlags()) + { + gAgent.setFlagsDirty(); + } + + if (animate) + { + startCameraAnimation(); + } + else + { + mCameraAnimating = FALSE; + gAgent.endAnimationUpdateUI(); + } + } +} + +//----------------------------------------------------------------------------- +// changeCameraToThirdPerson() +//----------------------------------------------------------------------------- +void LLAgentCamera::changeCameraToThirdPerson(BOOL animate) +{ + if (LLViewerJoystick::getInstance()->getOverrideCamera()) + { + return; + } + + gViewerWindow->getWindow()->resetBusyCount(); + + mCameraZoomFraction = INITIAL_ZOOM_FRACTION; + + if (isAgentAvatarValid()) + { + if (!gAgentAvatarp->isSitting()) + { + gAgentAvatarp->mPelvisp->setPosition(LLVector3::zero); + } + gAgentAvatarp->startMotion(ANIM_AGENT_BODY_NOISE); + gAgentAvatarp->startMotion(ANIM_AGENT_BREATHE_ROT); + } + + LLVector3 at_axis; + + // unpause avatar animation + gAgent.unpauseAnimation(); + + if (mCameraMode != CAMERA_MODE_THIRD_PERSON) + { + if (gBasicToolset) + { + LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset); + } + + mCameraLag.clearVec(); + if (mCameraMode == CAMERA_MODE_MOUSELOOK) + { + mCurrentCameraDistance = MIN_CAMERA_DISTANCE; + mTargetCameraDistance = MIN_CAMERA_DISTANCE; + animate = FALSE; + } + updateLastCamera(); + mCameraMode = CAMERA_MODE_THIRD_PERSON; + const U32 old_flags = gAgent.getControlFlags(); + gAgent.clearControlFlags(AGENT_CONTROL_MOUSELOOK); + if (old_flags != gAgent.getControlFlags()) + { + gAgent.setFlagsDirty(); + } + + } + + // Remove any pitch from the avatar + if (isAgentAvatarValid() && gAgentAvatarp->getParent()) + { + LLQuaternion obj_rot = ((LLViewerObject*)gAgentAvatarp->getParent())->getRenderRotation(); + at_axis = LLViewerCamera::getInstance()->getAtAxis(); + at_axis.mV[VZ] = 0.f; + at_axis.normalize(); + gAgent.resetAxes(at_axis * ~obj_rot); + } + else + { + at_axis = gAgent.getFrameAgent().getAtAxis(); + at_axis.mV[VZ] = 0.f; + at_axis.normalize(); + gAgent.resetAxes(at_axis); + } + + + if (animate) + { + startCameraAnimation(); + } + else + { + mCameraAnimating = FALSE; + gAgent.endAnimationUpdateUI(); + } +} + +//----------------------------------------------------------------------------- +// changeCameraToCustomizeAvatar() +//----------------------------------------------------------------------------- +void LLAgentCamera::changeCameraToCustomizeAvatar(BOOL avatar_animate, BOOL camera_animate) +{ + if (LLViewerJoystick::getInstance()->getOverrideCamera()) + { + return; + } + + gAgent.standUp(); // force stand up + gViewerWindow->getWindow()->resetBusyCount(); + + if (gFaceEditToolset) + { + LLToolMgr::getInstance()->setCurrentToolset(gFaceEditToolset); + } + + if (camera_animate) + { + startCameraAnimation(); + } + + // Remove any pitch from the avatar + //LLVector3 at = gAgent.getFrameAgent().getAtAxis(); + //at.mV[VZ] = 0.f; + //at.normalize(); + //gAgent.resetAxes(at); + + if (mCameraMode != CAMERA_MODE_CUSTOMIZE_AVATAR) + { + updateLastCamera(); + mCameraMode = CAMERA_MODE_CUSTOMIZE_AVATAR; + const U32 old_flags = gAgent.getControlFlags(); + gAgent.clearControlFlags(AGENT_CONTROL_MOUSELOOK); + if (old_flags != gAgent.getControlFlags()) + { + gAgent.setFlagsDirty(); + } + + gFocusMgr.setKeyboardFocus( NULL ); + gFocusMgr.setMouseCapture( NULL ); + + LLVOAvatarSelf::onCustomizeStart(); + } + + if (isAgentAvatarValid()) + { + if(avatar_animate) + { + // Remove any pitch from the avatar + LLVector3 at = gAgent.getFrameAgent().getAtAxis(); + at.mV[VZ] = 0.f; + at.normalize(); + gAgent.resetAxes(at); + + gAgent.sendAnimationRequest(ANIM_AGENT_CUSTOMIZE, ANIM_REQUEST_START); + gAgent.setCustomAnim(TRUE); + gAgentAvatarp->startMotion(ANIM_AGENT_CUSTOMIZE); + LLMotion* turn_motion = gAgentAvatarp->findMotion(ANIM_AGENT_CUSTOMIZE); + + if (turn_motion) + { + mAnimationDuration = turn_motion->getDuration() + CUSTOMIZE_AVATAR_CAMERA_ANIM_SLOP; + + } + else + { + mAnimationDuration = gSavedSettings.getF32("ZoomTime"); + } + } + setFocusGlobal(LLVector3d::zero); + } + else + { + mCameraAnimating = FALSE; + gAgent.endAnimationUpdateUI(); + } +} + + +void LLAgentCamera::switchCameraPreset(ECameraPreset preset) +{ + //zoom is supposed to be reset for the front and group views + mCameraZoomFraction = 1.f; + + //focusing on avatar in that case means following him on movements + mFocusOnAvatar = TRUE; + + mCameraPreset = preset; + + gSavedSettings.setU32("CameraPreset", mCameraPreset); +} + + +// +// Focus point management +// + +//----------------------------------------------------------------------------- +// startCameraAnimation() +//----------------------------------------------------------------------------- +void LLAgentCamera::startCameraAnimation() +{ + mAnimationCameraStartGlobal = getCameraPositionGlobal(); + mAnimationFocusStartGlobal = mFocusGlobal; + mAnimationTimer.reset(); + mCameraAnimating = TRUE; + mAnimationDuration = gSavedSettings.getF32("ZoomTime"); +} + +//----------------------------------------------------------------------------- +// stopCameraAnimation() +//----------------------------------------------------------------------------- +void LLAgentCamera::stopCameraAnimation() +{ + mCameraAnimating = FALSE; +} + +void LLAgentCamera::clearFocusObject() +{ + if (mFocusObject.notNull()) + { + startCameraAnimation(); + + setFocusObject(NULL); + mFocusObjectOffset.clearVec(); + } +} + +void LLAgentCamera::setFocusObject(LLViewerObject* object) +{ + mFocusObject = object; +} + +// Focus on a point, but try to keep camera position stable. +//----------------------------------------------------------------------------- +// setFocusGlobal() +//----------------------------------------------------------------------------- +void LLAgentCamera::setFocusGlobal(const LLPickInfo& pick) +{ + LLViewerObject* objectp = gObjectList.findObject(pick.mObjectID); + + if (objectp) + { + // focus on object plus designated offset + // which may or may not be same as pick.mPosGlobal + setFocusGlobal(objectp->getPositionGlobal() + LLVector3d(pick.mObjectOffset), pick.mObjectID); + } + else + { + // focus directly on point where user clicked + setFocusGlobal(pick.mPosGlobal, pick.mObjectID); + } +} + + +void LLAgentCamera::setFocusGlobal(const LLVector3d& focus, const LLUUID &object_id) +{ + setFocusObject(gObjectList.findObject(object_id)); + LLVector3d old_focus = mFocusTargetGlobal; + LLViewerObject *focus_obj = mFocusObject; + + // if focus has changed + if (old_focus != focus) + { + if (focus.isExactlyZero()) + { + if (isAgentAvatarValid()) + { + mFocusTargetGlobal = gAgent.getPosGlobalFromAgent(gAgentAvatarp->mHeadp->getWorldPosition()); + } + else + { + mFocusTargetGlobal = gAgent.getPositionGlobal(); + } + mCameraFocusOffsetTarget = getCameraPositionGlobal() - mFocusTargetGlobal; + mCameraFocusOffset = mCameraFocusOffsetTarget; + setLookAt(LOOKAT_TARGET_CLEAR); + } + else + { + mFocusTargetGlobal = focus; + if (!focus_obj) + { + mCameraFOVZoomFactor = 0.f; + } + + mCameraFocusOffsetTarget = gAgent.getPosGlobalFromAgent(mCameraVirtualPositionAgent) - mFocusTargetGlobal; + + startCameraAnimation(); + + if (focus_obj) + { + if (focus_obj->isAvatar()) + { + setLookAt(LOOKAT_TARGET_FOCUS, focus_obj); + } + else + { + setLookAt(LOOKAT_TARGET_FOCUS, focus_obj, (gAgent.getPosAgentFromGlobal(focus) - focus_obj->getRenderPosition()) * ~focus_obj->getRenderRotation()); + } + } + else + { + setLookAt(LOOKAT_TARGET_FOCUS, NULL, gAgent.getPosAgentFromGlobal(mFocusTargetGlobal)); + } + } + } + else // focus == mFocusTargetGlobal + { + if (focus.isExactlyZero()) + { + if (isAgentAvatarValid()) + { + mFocusTargetGlobal = gAgent.getPosGlobalFromAgent(gAgentAvatarp->mHeadp->getWorldPosition()); + } + else + { + mFocusTargetGlobal = gAgent.getPositionGlobal(); + } + } + mCameraFocusOffsetTarget = (getCameraPositionGlobal() - mFocusTargetGlobal) / (1.f + mCameraFOVZoomFactor);; + mCameraFocusOffset = mCameraFocusOffsetTarget; + } + + if (mFocusObject.notNull()) + { + // for attachments, make offset relative to avatar, not the attachment + if (mFocusObject->isAttachment()) + { + while (mFocusObject.notNull() && !mFocusObject->isAvatar()) + { + mFocusObject = (LLViewerObject*) mFocusObject->getParent(); + } + setFocusObject((LLViewerObject*)mFocusObject); + } + updateFocusOffset(); + } +} + +// Used for avatar customization +//----------------------------------------------------------------------------- +// setCameraPosAndFocusGlobal() +//----------------------------------------------------------------------------- +void LLAgentCamera::setCameraPosAndFocusGlobal(const LLVector3d& camera_pos, const LLVector3d& focus, const LLUUID &object_id) +{ + LLVector3d old_focus = mFocusTargetGlobal; + + F64 focus_delta_squared = (old_focus - focus).magVecSquared(); + const F64 ANIM_EPSILON_SQUARED = 0.0001; + if (focus_delta_squared > ANIM_EPSILON_SQUARED) + { + startCameraAnimation(); + + if (CAMERA_MODE_CUSTOMIZE_AVATAR == mCameraMode) + { + // Compensate for the fact that the camera has already been offset to make room for LLFloaterCustomize. + mAnimationCameraStartGlobal -= LLVector3d(LLViewerCamera::getInstance()->getLeftAxis() * calcCustomizeAvatarUIOffset( mAnimationCameraStartGlobal )); + } + } + + //LLViewerCamera::getInstance()->setOrigin( gAgent.getPosAgentFromGlobal( camera_pos ) ); + setFocusObject(gObjectList.findObject(object_id)); + mFocusTargetGlobal = focus; + mCameraFocusOffsetTarget = camera_pos - focus; + mCameraFocusOffset = mCameraFocusOffsetTarget; + + if (mFocusObject) + { + if (mFocusObject->isAvatar()) + { + setLookAt(LOOKAT_TARGET_FOCUS, mFocusObject); + } + else + { + setLookAt(LOOKAT_TARGET_FOCUS, mFocusObject, (gAgent.getPosAgentFromGlobal(focus) - mFocusObject->getRenderPosition()) * ~mFocusObject->getRenderRotation()); + } + } + else + { + setLookAt(LOOKAT_TARGET_FOCUS, NULL, gAgent.getPosAgentFromGlobal(mFocusTargetGlobal)); + } + + if (mCameraAnimating) + { + const F64 ANIM_METERS_PER_SECOND = 10.0; + const F64 MIN_ANIM_SECONDS = 0.5; + const F64 MAX_ANIM_SECONDS = 10.0; + F64 anim_duration = llmax( MIN_ANIM_SECONDS, sqrt(focus_delta_squared) / ANIM_METERS_PER_SECOND ); + anim_duration = llmin( anim_duration, MAX_ANIM_SECONDS ); + setAnimationDuration( (F32)anim_duration ); + } + + updateFocusOffset(); +} + +//----------------------------------------------------------------------------- +// setSitCamera() +//----------------------------------------------------------------------------- +void LLAgentCamera::setSitCamera(const LLUUID &object_id, const LLVector3 &camera_pos, const LLVector3 &camera_focus) +{ + BOOL camera_enabled = !object_id.isNull(); + + if (camera_enabled) + { + LLViewerObject *reference_object = gObjectList.findObject(object_id); + if (reference_object) + { + //convert to root object relative? + mSitCameraPos = camera_pos; + mSitCameraFocus = camera_focus; + mSitCameraReferenceObject = reference_object; + mSitCameraEnabled = TRUE; + } + } + else + { + mSitCameraPos.clearVec(); + mSitCameraFocus.clearVec(); + mSitCameraReferenceObject = NULL; + mSitCameraEnabled = FALSE; + } +} + +//----------------------------------------------------------------------------- +// setFocusOnAvatar() +//----------------------------------------------------------------------------- +void LLAgentCamera::setFocusOnAvatar(BOOL focus_on_avatar, BOOL animate) +{ + if (focus_on_avatar != mFocusOnAvatar) + { + if (animate) + { + startCameraAnimation(); + } + else + { + stopCameraAnimation(); + } + } + + //RN: when focused on the avatar, we're not "looking" at it + // looking implies intent while focusing on avatar means + // you're just walking around with a camera on you...eesh. + if (!mFocusOnAvatar && focus_on_avatar) + { + setFocusGlobal(LLVector3d::zero); + mCameraFOVZoomFactor = 0.f; + if (mCameraMode == CAMERA_MODE_THIRD_PERSON) + { + LLVector3 at_axis; + if (isAgentAvatarValid() && gAgentAvatarp->getParent()) + { + LLQuaternion obj_rot = ((LLViewerObject*)gAgentAvatarp->getParent())->getRenderRotation(); + at_axis = LLViewerCamera::getInstance()->getAtAxis(); + at_axis.mV[VZ] = 0.f; + at_axis.normalize(); + gAgent.resetAxes(at_axis * ~obj_rot); + } + else + { + at_axis = LLViewerCamera::getInstance()->getAtAxis(); + at_axis.mV[VZ] = 0.f; + at_axis.normalize(); + gAgent.resetAxes(at_axis); + } + } + } + // unlocking camera from avatar + else if (mFocusOnAvatar && !focus_on_avatar) + { + // keep camera focus point consistent, even though it is now unlocked + setFocusGlobal(gAgent.getPositionGlobal() + calcThirdPersonFocusOffset(), gAgent.getID()); + } + + mFocusOnAvatar = focus_on_avatar; +} + + +BOOL LLAgentCamera::setLookAt(ELookAtType target_type, LLViewerObject *object, LLVector3 position) +{ + if(object && object->isAttachment()) + { + LLViewerObject* parent = object; + while(parent) + { + if (parent == gAgentAvatarp) + { + // looking at an attachment on ourselves, which we don't want to do + object = gAgentAvatarp; + position.clearVec(); + } + parent = (LLViewerObject*)parent->getParent(); + } + } + if(!mLookAt || mLookAt->isDead()) + { + mLookAt = (LLHUDEffectLookAt *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_LOOKAT); + mLookAt->setSourceObject(gAgentAvatarp); + } + + return mLookAt->setLookAt(target_type, object, position); +} + +//----------------------------------------------------------------------------- +// lookAtLastChat() +//----------------------------------------------------------------------------- +void LLAgentCamera::lookAtLastChat() +{ + // Block if camera is animating or not in normal third person camera mode + if (mCameraAnimating || !cameraThirdPerson()) + { + return; + } + + LLViewerObject *chatter = gObjectList.findObject(gAgent.getLastChatter()); + if (!chatter) + { + return; + } + + LLVector3 delta_pos; + if (chatter->isAvatar()) + { + LLVOAvatar *chatter_av = (LLVOAvatar*)chatter; + if (isAgentAvatarValid() && chatter_av->mHeadp) + { + delta_pos = chatter_av->mHeadp->getWorldPosition() - gAgentAvatarp->mHeadp->getWorldPosition(); + } + else + { + delta_pos = chatter->getPositionAgent() - gAgent.getPositionAgent(); + } + delta_pos.normalize(); + + gAgent.setControlFlags(AGENT_CONTROL_STOP); + + changeCameraToThirdPerson(); + + LLVector3 new_camera_pos = gAgentAvatarp->mHeadp->getWorldPosition(); + LLVector3 left = delta_pos % LLVector3::z_axis; + left.normalize(); + LLVector3 up = left % delta_pos; + up.normalize(); + new_camera_pos -= delta_pos * 0.4f; + new_camera_pos += left * 0.3f; + new_camera_pos += up * 0.2f; + if (chatter_av->mHeadp) + { + setFocusGlobal(gAgent.getPosGlobalFromAgent(chatter_av->mHeadp->getWorldPosition()), gAgent.getLastChatter()); + mCameraFocusOffsetTarget = gAgent.getPosGlobalFromAgent(new_camera_pos) - gAgent.getPosGlobalFromAgent(chatter_av->mHeadp->getWorldPosition()); + } + else + { + setFocusGlobal(chatter->getPositionGlobal(), gAgent.getLastChatter()); + mCameraFocusOffsetTarget = gAgent.getPosGlobalFromAgent(new_camera_pos) - chatter->getPositionGlobal(); + } + setFocusOnAvatar(FALSE, TRUE); + } + else + { + delta_pos = chatter->getRenderPosition() - gAgent.getPositionAgent(); + delta_pos.normalize(); + + gAgent.setControlFlags(AGENT_CONTROL_STOP); + + changeCameraToThirdPerson(); + + LLVector3 new_camera_pos = gAgentAvatarp->mHeadp->getWorldPosition(); + LLVector3 left = delta_pos % LLVector3::z_axis; + left.normalize(); + LLVector3 up = left % delta_pos; + up.normalize(); + new_camera_pos -= delta_pos * 0.4f; + new_camera_pos += left * 0.3f; + new_camera_pos += up * 0.2f; + + setFocusGlobal(chatter->getPositionGlobal(), gAgent.getLastChatter()); + mCameraFocusOffsetTarget = gAgent.getPosGlobalFromAgent(new_camera_pos) - chatter->getPositionGlobal(); + setFocusOnAvatar(FALSE, TRUE); + } +} + +BOOL LLAgentCamera::setPointAt(EPointAtType target_type, LLViewerObject *object, LLVector3 position) +{ + // disallow pointing at attachments and avatars + if (object && (object->isAttachment() || object->isAvatar())) + { + return FALSE; + } + if (!mPointAt || mPointAt->isDead()) + { + mPointAt = (LLHUDEffectPointAt *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_POINTAT); + mPointAt->setSourceObject(gAgentAvatarp); + } + return mPointAt->setPointAt(target_type, object, position); +} + +ELookAtType LLAgentCamera::getLookAtType() +{ + if (mLookAt) + { + return mLookAt->getLookAtType(); + } + return LOOKAT_TARGET_NONE; +} + +EPointAtType LLAgentCamera::getPointAtType() +{ + if (mPointAt) + { + return mPointAt->getPointAtType(); + } + return POINTAT_TARGET_NONE; +} + +void LLAgentCamera::clearGeneralKeys() +{ + mAtKey = 0; + mWalkKey = 0; + mLeftKey = 0; + mUpKey = 0; + mYawKey = 0.f; + mPitchKey = 0.f; +} + +void LLAgentCamera::clearOrbitKeys() +{ + mOrbitLeftKey = 0.f; + mOrbitRightKey = 0.f; + mOrbitUpKey = 0.f; + mOrbitDownKey = 0.f; + mOrbitInKey = 0.f; + mOrbitOutKey = 0.f; +} + +void LLAgentCamera::clearPanKeys() +{ + mPanRightKey = 0.f; + mPanLeftKey = 0.f; + mPanUpKey = 0.f; + mPanDownKey = 0.f; + mPanInKey = 0.f; + mPanOutKey = 0.f; +} + +// static +S32 LLAgentCamera::directionToKey(S32 direction) +{ + if (direction > 0) return 1; + if (direction < 0) return -1; + return 0; +} + + +// EOF + diff --git a/indra/newview/llagentcamera.h b/indra/newview/llagentcamera.h new file mode 100644 index 0000000000..3ba24ef32b --- /dev/null +++ b/indra/newview/llagentcamera.h @@ -0,0 +1,400 @@ +/** + * @file llagent.h + * @brief LLAgent class header file + * + * $LicenseInfo:firstyear=2000&license=viewergpl$ + * + * Copyright (c) 2000-2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LL_LLAGENTCAMERA_H +#define LL_LLAGENTCAMERA_H + +#include "llfollowcam.h" // Ventrella +#include "llhudeffectlookat.h" // EPointAtType +#include "llhudeffectpointat.h" // ELookAtType + +class LLPickInfo; +class LLVOAvatarSelf; + +//-------------------------------------------------------------------- +// Types +//-------------------------------------------------------------------- +enum ECameraMode +{ + CAMERA_MODE_THIRD_PERSON, + CAMERA_MODE_MOUSELOOK, + CAMERA_MODE_CUSTOMIZE_AVATAR, + CAMERA_MODE_FOLLOW +}; + +/** Camera Presets for CAMERA_MODE_THIRD_PERSON */ +enum ECameraPreset +{ + /** Default preset, what the Third Person Mode actually was */ + CAMERA_PRESET_REAR_VIEW, + + /** "Looking at the Avatar from the front" */ + CAMERA_PRESET_FRONT_VIEW, + + /** "Above and to the left, over the shoulder, pulled back a little on the zoom" */ + CAMERA_PRESET_GROUP_VIEW +}; + +//------------------------------------------------------------------------ +// LLAgentCamera +//------------------------------------------------------------------------ +class LLAgentCamera +{ + LOG_CLASS(LLAgentCamera); + +public: + //-------------------------------------------------------------------- + // Constructors / Destructors + //-------------------------------------------------------------------- +public: + LLAgentCamera(); + virtual ~LLAgentCamera(); + void init(); + void cleanup(); + void setAvatarObject(LLVOAvatarSelf* avatar); +private: + BOOL mInitialized; + + + //-------------------------------------------------------------------- + // Mode + //-------------------------------------------------------------------- +public: + void changeCameraToDefault(); + void changeCameraToMouselook(BOOL animate = TRUE); + void changeCameraToThirdPerson(BOOL animate = TRUE); + void changeCameraToCustomizeAvatar(BOOL avatar_animate = TRUE, BOOL camera_animate = TRUE); // Trigger transition animation + void changeCameraToFollow(BOOL animate = TRUE); // Ventrella + BOOL cameraThirdPerson() const { return (mCameraMode == CAMERA_MODE_THIRD_PERSON && mLastCameraMode == CAMERA_MODE_THIRD_PERSON); } + BOOL cameraMouselook() const { return (mCameraMode == CAMERA_MODE_MOUSELOOK && mLastCameraMode == CAMERA_MODE_MOUSELOOK); } + BOOL cameraCustomizeAvatar() const { return (mCameraMode == CAMERA_MODE_CUSTOMIZE_AVATAR /*&& !mCameraAnimating*/); } + BOOL cameraFollow() const { return (mCameraMode == CAMERA_MODE_FOLLOW && mLastCameraMode == CAMERA_MODE_FOLLOW); } + ECameraMode getCameraMode() const { return mCameraMode; } + ECameraMode getLastCameraMode() const { return mLastCameraMode; } + void updateCamera(); // Call once per frame to update camera location/orientation + void resetCamera(); // Slam camera into its default position + void updateLastCamera(); // Set last camera to current camera + +private: + ECameraMode mCameraMode; // Target mode after transition animation is done + ECameraMode mLastCameraMode; + + //-------------------------------------------------------------------- + // Preset + //-------------------------------------------------------------------- +public: + void switchCameraPreset(ECameraPreset preset); +private: + /** Determines default camera offset depending on the current camera preset */ + LLVector3 getCameraOffsetInitial(); + + /** Camera preset in Third Person Mode */ + ECameraPreset mCameraPreset; + + /** Initial camera offsets */ + std::map<ECameraPreset, LLVector3> mCameraOffsetInitial; + + /** Initial focus offsets */ + std::map<ECameraPreset, LLVector3d> mFocusOffsetInitial; + + //-------------------------------------------------------------------- + // Position + //-------------------------------------------------------------------- +public: + LLVector3d getCameraPositionGlobal() const; + const LLVector3 &getCameraPositionAgent() const; + LLVector3d calcCameraPositionTargetGlobal(BOOL *hit_limit = NULL); // Calculate the camera position target + F32 getCameraMinOffGround(); // Minimum height off ground for this mode, meters + void setCameraCollidePlane(const LLVector4 &plane) { mCameraCollidePlane = plane; } + BOOL calcCameraMinDistance(F32 &obj_min_distance); + F32 calcCustomizeAvatarUIOffset(const LLVector3d& camera_pos_global); + F32 getCurrentCameraBuildOffset() { return (F32)mCameraFocusOffset.length(); } + void clearCameraLag() { mCameraLag.clearVec(); } +private: + F32 mCurrentCameraDistance; // Current camera offset from avatar + F32 mTargetCameraDistance; // Target camera offset from avatar + F32 mCameraFOVZoomFactor; // Amount of fov zoom applied to camera when zeroing in on an object + F32 mCameraCurrentFOVZoomFactor; // Interpolated fov zoom + F32 mCameraFOVDefault; // Default field of view that is basis for FOV zoom effect + LLVector4 mCameraCollidePlane; // Colliding plane for camera + F32 mCameraZoomFraction; // Mousewheel driven fraction of zoom + LLVector3 mCameraPositionAgent; // Camera position in agent coordinates + LLVector3 mCameraVirtualPositionAgent; // Camera virtual position (target) before performing FOV zoom + LLVector3d mCameraSmoothingLastPositionGlobal; + LLVector3d mCameraSmoothingLastPositionAgent; + BOOL mCameraSmoothingStop; + LLVector3 mCameraLag; // Third person camera lag + LLVector3 mCameraUpVector; // Camera's up direction in world coordinates (determines the 'roll' of the view) + + //-------------------------------------------------------------------- + // Follow + //-------------------------------------------------------------------- +public: + void setUsingFollowCam(bool using_follow_cam); +private: + LLFollowCam mFollowCam; // Ventrella + + //-------------------------------------------------------------------- + // Sit + //-------------------------------------------------------------------- +public: + void setupSitCamera(); + BOOL sitCameraEnabled() { return mSitCameraEnabled; } + void setSitCamera(const LLUUID &object_id, + const LLVector3 &camera_pos = LLVector3::zero, const LLVector3 &camera_focus = LLVector3::zero); +private: + LLPointer<LLViewerObject> mSitCameraReferenceObject; // Object to which camera is related when sitting + BOOL mSitCameraEnabled; // Use provided camera information when sitting? + LLVector3 mSitCameraPos; // Root relative camera pos when sitting + LLVector3 mSitCameraFocus; // Root relative camera target when sitting + + //-------------------------------------------------------------------- + // Animation + //-------------------------------------------------------------------- +public: + void setCameraAnimating(BOOL b) { mCameraAnimating = b; } + BOOL getCameraAnimating() { return mCameraAnimating; } + void setAnimationDuration(F32 seconds) { mAnimationDuration = seconds; } + void startCameraAnimation(); + void stopCameraAnimation(); +private: + LLFrameTimer mAnimationTimer; // Seconds that transition animation has been active + F32 mAnimationDuration; // In seconds + BOOL mCameraAnimating; // Camera is transitioning from one mode to another + LLVector3d mAnimationCameraStartGlobal; // Camera start position, global coords + LLVector3d mAnimationFocusStartGlobal; // Camera focus point, global coords + + //-------------------------------------------------------------------- + // Focus + //-------------------------------------------------------------------- +public: + LLVector3d calcFocusPositionTargetGlobal(); + LLVector3 calcFocusOffset(LLViewerObject *object, LLVector3 pos_agent, S32 x, S32 y); + BOOL getFocusOnAvatar() const { return mFocusOnAvatar; } + LLPointer<LLViewerObject>& getFocusObject() { return mFocusObject; } + F32 getFocusObjectDist() const { return mFocusObjectDist; } + void updateFocusOffset(); + void validateFocusObject(); + void setFocusGlobal(const LLPickInfo& pick); + void setFocusGlobal(const LLVector3d &focus, const LLUUID &object_id = LLUUID::null); + void setFocusOnAvatar(BOOL focus, BOOL animate); + void setCameraPosAndFocusGlobal(const LLVector3d& pos, const LLVector3d& focus, const LLUUID &object_id); + void clearFocusObject(); + void setFocusObject(LLViewerObject* object); + void setObjectTracking(BOOL track) { mTrackFocusObject = track; } + const LLVector3d &getFocusGlobal() const { return mFocusGlobal; } + const LLVector3d &getFocusTargetGlobal() const { return mFocusTargetGlobal; } +private: + LLVector3d mCameraFocusOffset; // Offset from focus point in build mode + LLVector3d mCameraFocusOffsetTarget; // Target towards which we are lerping the camera's focus offset + BOOL mFocusOnAvatar; + LLVector3d mFocusGlobal; + LLVector3d mFocusTargetGlobal; + LLPointer<LLViewerObject> mFocusObject; + F32 mFocusObjectDist; + LLVector3 mFocusObjectOffset; + F32 mFocusDotRadius; // Meters + BOOL mTrackFocusObject; + F32 mUIOffset; + + //-------------------------------------------------------------------- + // Lookat / Pointat + //-------------------------------------------------------------------- +public: + void updateLookAt(const S32 mouse_x, const S32 mouse_y); + BOOL setLookAt(ELookAtType target_type, LLViewerObject *object = NULL, LLVector3 position = LLVector3::zero); + ELookAtType getLookAtType(); + void lookAtLastChat(); + void slamLookAt(const LLVector3 &look_at); // Set the physics data + BOOL setPointAt(EPointAtType target_type, LLViewerObject *object = NULL, LLVector3 position = LLVector3::zero); + EPointAtType getPointAtType(); +public: + LLPointer<LLHUDEffectLookAt> mLookAt; + LLPointer<LLHUDEffectPointAt> mPointAt; + + //-------------------------------------------------------------------- + // Third person + //-------------------------------------------------------------------- +public: + LLVector3d calcThirdPersonFocusOffset(); + void setThirdPersonHeadOffset(LLVector3 offset) { mThirdPersonHeadOffset = offset; } +private: + LLVector3 mThirdPersonHeadOffset; // Head offset for third person camera position + + //-------------------------------------------------------------------- + // Orbit + //-------------------------------------------------------------------- +public: + void cameraOrbitAround(const F32 radians); // Rotate camera CCW radians about build focus point + void cameraOrbitOver(const F32 radians); // Rotate camera forward radians over build focus point + void cameraOrbitIn(const F32 meters); // Move camera in toward build focus point + + //-------------------------------------------------------------------- + // Zoom + //-------------------------------------------------------------------- +public: + void handleScrollWheel(S32 clicks); // Mousewheel driven zoom + void cameraZoomIn(const F32 factor); // Zoom in by fraction of current distance + F32 getCameraZoomFraction(); // Get camera zoom as fraction of minimum and maximum zoom + void setCameraZoomFraction(F32 fraction); // Set camera zoom as fraction of minimum and maximum zoom + F32 calcCameraFOVZoomFactor(); + + //-------------------------------------------------------------------- + // Pan + //-------------------------------------------------------------------- +public: + void cameraPanIn(const F32 meters); + void cameraPanLeft(const F32 meters); + void cameraPanUp(const F32 meters); + + //-------------------------------------------------------------------- + // View + //-------------------------------------------------------------------- +public: + // Called whenever the agent moves. Puts camera back in default position, deselects items, etc. + void resetView(BOOL reset_camera = TRUE, BOOL change_camera = FALSE); + // Called on camera movement. Unlocks camera from the default position behind the avatar. + void unlockView(); +public: + F32 mDrawDistance; + + //-------------------------------------------------------------------- + // Mouselook + //-------------------------------------------------------------------- +public: + BOOL getForceMouselook() const { return mForceMouselook; } + void setForceMouselook(BOOL mouselook) { mForceMouselook = mouselook; } +private: + BOOL mForceMouselook; + + //-------------------------------------------------------------------- + // HUD + //-------------------------------------------------------------------- +public: + F32 mHUDTargetZoom; // Target zoom level for HUD objects (used when editing) + F32 mHUDCurZoom; // Current animated zoom level for HUD objects + + +/******************************************************************************** + ** ** + ** KEYS + **/ + +public: + S32 getAtKey() const { return mAtKey; } + S32 getWalkKey() const { return mWalkKey; } + S32 getLeftKey() const { return mLeftKey; } + S32 getUpKey() const { return mUpKey; } + F32 getYawKey() const { return mYawKey; } + F32 getPitchKey() const { return mPitchKey; } + + void setAtKey(S32 mag) { mAtKey = mag; } + void setWalkKey(S32 mag) { mWalkKey = mag; } + void setLeftKey(S32 mag) { mLeftKey = mag; } + void setUpKey(S32 mag) { mUpKey = mag; } + void setYawKey(F32 mag) { mYawKey = mag; } + void setPitchKey(F32 mag) { mPitchKey = mag; } + + void clearGeneralKeys(); + static S32 directionToKey(S32 direction); // Changes direction to -1/0/1 + +private: + S32 mAtKey; // Either 1, 0, or -1. Indicates that movement key is pressed + S32 mWalkKey; // Like AtKey, but causes less forward thrust + S32 mLeftKey; + S32 mUpKey; + F32 mYawKey; + F32 mPitchKey; + + //-------------------------------------------------------------------- + // Orbit + //-------------------------------------------------------------------- +public: + F32 getOrbitLeftKey() const { return mOrbitLeftKey; } + F32 getOrbitRightKey() const { return mOrbitRightKey; } + F32 getOrbitUpKey() const { return mOrbitUpKey; } + F32 getOrbitDownKey() const { return mOrbitDownKey; } + F32 getOrbitInKey() const { return mOrbitInKey; } + F32 getOrbitOutKey() const { return mOrbitOutKey; } + + void setOrbitLeftKey(F32 mag) { mOrbitLeftKey = mag; } + void setOrbitRightKey(F32 mag) { mOrbitRightKey = mag; } + void setOrbitUpKey(F32 mag) { mOrbitUpKey = mag; } + void setOrbitDownKey(F32 mag) { mOrbitDownKey = mag; } + void setOrbitInKey(F32 mag) { mOrbitInKey = mag; } + void setOrbitOutKey(F32 mag) { mOrbitOutKey = mag; } + + void clearOrbitKeys(); +private: + F32 mOrbitLeftKey; + F32 mOrbitRightKey; + F32 mOrbitUpKey; + F32 mOrbitDownKey; + F32 mOrbitInKey; + F32 mOrbitOutKey; + + //-------------------------------------------------------------------- + // Pan + //-------------------------------------------------------------------- +public: + F32 getPanLeftKey() const { return mPanLeftKey; } + F32 getPanRightKey() const { return mPanRightKey; } + F32 getPanUpKey() const { return mPanUpKey; } + F32 getPanDownKey() const { return mPanDownKey; } + F32 getPanInKey() const { return mPanInKey; } + F32 getPanOutKey() const { return mPanOutKey; } + + void setPanLeftKey(F32 mag) { mPanLeftKey = mag; } + void setPanRightKey(F32 mag) { mPanRightKey = mag; } + void setPanUpKey(F32 mag) { mPanUpKey = mag; } + void setPanDownKey(F32 mag) { mPanDownKey = mag; } + void setPanInKey(F32 mag) { mPanInKey = mag; } + void setPanOutKey(F32 mag) { mPanOutKey = mag; } + + void clearPanKeys(); +private: + F32 mPanUpKey; + F32 mPanDownKey; + F32 mPanLeftKey; + F32 mPanRightKey; + F32 mPanInKey; + F32 mPanOutKey; + +/** Keys + ** ** + *******************************************************************************/ + +}; + +extern LLAgentCamera gAgentCamera; + +#endif diff --git a/indra/newview/llagentui.cpp b/indra/newview/llagentui.cpp index 72ab9235cf..c4597ad6f8 100644 --- a/indra/newview/llagentui.cpp +++ b/indra/newview/llagentui.cpp @@ -49,12 +49,10 @@ void LLAgentUI::buildName(std::string& name) { name.clear(); - - LLVOAvatarSelf* avatar_object = gAgent.getAvatarObject(); - if (avatar_object) + if (isAgentAvatarValid()) { - LLNameValue *first_nv = avatar_object->getNVPair("FirstName"); - LLNameValue *last_nv = avatar_object->getNVPair("LastName"); + LLNameValue *first_nv = gAgentAvatarp->getNVPair("FirstName"); + LLNameValue *last_nv = gAgentAvatarp->getNVPair("LastName"); if (first_nv && last_nv) { name = first_nv->printData() + " " + last_nv->printData(); @@ -73,7 +71,8 @@ void LLAgentUI::buildName(std::string& name) //static void LLAgentUI::buildFullname(std::string& name) { - if (gAgent.getAvatarObject()) name = gAgent.getAvatarObject()->getFullname(); + if (isAgentAvatarValid()) + name = gAgentAvatarp->getFullname(); } //static diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp index 1187455971..0542e73bfd 100644 --- a/indra/newview/llagentwearables.cpp +++ b/indra/newview/llagentwearables.cpp @@ -31,104 +31,33 @@ */ #include "llviewerprecompiledheaders.h" - -#include "llagent.h" #include "llagentwearables.h" +#include "llaccordionctrltab.h" +#include "llagent.h" +#include "llagentcamera.h" +#include "llagentwearablesfetch.h" +#include "llappearancemgr.h" #include "llcallbacklist.h" #include "llfloatercustomize.h" +#include "llfolderview.h" +#include "llgesturemgr.h" #include "llinventorybridge.h" +#include "llinventoryfunctions.h" #include "llinventoryobserver.h" #include "llinventorypanel.h" +#include "llmd5.h" #include "llnotificationsutil.h" +#include "llpaneloutfitsinventory.h" +#include "llsidetray.h" +#include "lltexlayer.h" #include "llviewerregion.h" #include "llvoavatarself.h" #include "llwearable.h" #include "llwearablelist.h" -#include "llgesturemgr.h" -#include "llappearancemgr.h" -#include "lltexlayer.h" -#include "llsidetray.h" -#include "llpaneloutfitsinventory.h" -#include "llfolderview.h" -#include "llaccordionctrltab.h" #include <boost/scoped_ptr.hpp> -#define USE_CURRENT_OUTFIT_FOLDER - -//-------------------------------------------------------------------- -// Classes for fetching initial wearables data -//-------------------------------------------------------------------- -// Outfit folder fetching callback structure. -class LLInitialWearablesFetch : public LLInventoryFetchDescendentsObserver -{ -public: - LLInitialWearablesFetch() {} - ~LLInitialWearablesFetch(); - virtual void done(); - - struct InitialWearableData - { - EWearableType mType; - LLUUID mItemID; - LLUUID mAssetID; - InitialWearableData(EWearableType type, LLUUID& itemID, LLUUID& assetID) : - mType(type), - mItemID(itemID), - mAssetID(assetID) - {} - }; - - typedef std::vector<InitialWearableData> initial_wearable_data_vec_t; - initial_wearable_data_vec_t mCOFInitialWearables; // Wearables from the Current Outfit Folder - initial_wearable_data_vec_t mAgentInitialWearables; // Wearables from the old agent wearables msg - -protected: - void processWearablesMessage(); - void processContents(); -}; - -class LLLibraryOutfitsFetch : public LLInventoryFetchDescendentsObserver -{ -public: - enum ELibraryOutfitFetchStep { - LOFS_FOLDER = 0, - LOFS_OUTFITS, - LOFS_LIBRARY, - LOFS_IMPORTED, - LOFS_CONTENTS - }; - LLLibraryOutfitsFetch() : mCurrFetchStep(LOFS_FOLDER), mOutfitsPopulated(false) - { - mMyOutfitsID = LLUUID::null; - mClothingID = LLUUID::null; - mLibraryClothingID = LLUUID::null; - mImportedClothingID = LLUUID::null; - mImportedClothingName = "Imported Library Clothing"; - } - ~LLLibraryOutfitsFetch() {} - virtual void done(); - void doneIdle(); - LLUUID mMyOutfitsID; - void importedFolderFetch(); -protected: - void folderDone(void); - void outfitsDone(void); - void libraryDone(void); - void importedFolderDone(void); - void contentsDone(void); - enum ELibraryOutfitFetchStep mCurrFetchStep; - typedef std::vector<LLUUID> clothing_folder_vec_t; - clothing_folder_vec_t mLibraryClothingFolders; - clothing_folder_vec_t mImportedClothingFolders; - bool mOutfitsPopulated; - LLUUID mClothingID; - LLUUID mLibraryClothingID; - LLUUID mImportedClothingID; - std::string mImportedClothingName; -}; - LLAgentWearables gAgentWearables; BOOL LLAgentWearables::mInitialWearablesUpdateReceived = FALSE; @@ -218,8 +147,7 @@ struct LLAgentDumper }; LLAgentWearables::LLAgentWearables() : - mWearablesLoaded(FALSE), - mAvatarObject(NULL) + mWearablesLoaded(FALSE) { } @@ -230,12 +158,10 @@ LLAgentWearables::~LLAgentWearables() void LLAgentWearables::cleanup() { - mAvatarObject = NULL; } void LLAgentWearables::setAvatarObject(LLVOAvatarSelf *avatar) { - mAvatarObject = avatar; if (avatar) { sendAgentWearablesRequest(); @@ -293,7 +219,7 @@ void LLAgentWearables::addWearableToAgentInventoryCallback::fire(const LLUUID& i } if (mTodo & CALL_RECOVERDONE) { - LLAppearanceManager::instance().addCOFItemLink(inv_item,false); + LLAppearanceMgr::instance().addCOFItemLink(inv_item,false); gAgentWearables.recoverMissingWearableDone(); } /* @@ -301,7 +227,7 @@ void LLAgentWearables::addWearableToAgentInventoryCallback::fire(const LLUUID& i */ if (mTodo & CALL_CREATESTANDARDDONE) { - LLAppearanceManager::instance().addCOFItemLink(inv_item,false); + LLAppearanceMgr::instance().addCOFItemLink(inv_item,false); gAgentWearables.createStandardWearablesDone(mType, mIndex); } if (mTodo & CALL_MAKENEWOUTFITDONE) @@ -310,7 +236,7 @@ void LLAgentWearables::addWearableToAgentInventoryCallback::fire(const LLUUID& i } if (mTodo & CALL_WEARITEM) { - LLAppearanceManager::instance().addCOFItemLink(inv_item, true); + LLAppearanceMgr::instance().addCOFItemLink(inv_item, true); } } @@ -443,6 +369,11 @@ void LLAgentWearables::saveWearable(const EWearableType type, const U32 index, B new_wearable->setItemID(old_item_id); // should this be in LLWearable::copyDataFrom()? setWearable(type,index,new_wearable); + // old_wearable may still be referred to by other inventory items. Revert + // unsaved changes so other inventory items aren't affected by the changes + // that were just saved. + old_wearable->revertValues(); + LLInventoryItem* item = gInventory.getItem(old_item_id); if (item) { @@ -482,7 +413,7 @@ void LLAgentWearables::saveWearable(const EWearableType type, const U32 index, B return; } - gAgent.getAvatarObject()->wearableUpdated( type, TRUE ); + gAgentAvatarp->wearableUpdated( type, TRUE ); if (send_update) { @@ -545,6 +476,11 @@ void LLAgentWearables::saveWearableAs(const EWearableType type, category_id, new_name, cb); + + // old_wearable may still be referred to by other inventory items. Revert + // unsaved changes so other inventory items aren't affected by the changes + // that were just saved. + old_wearable->revertValues(); } void LLAgentWearables::revertWearable(const EWearableType type, const U32 index) @@ -775,7 +711,7 @@ U32 LLAgentWearables::pushWearable(const EWearableType type, LLWearable *wearabl void LLAgentWearables::wearableUpdated(LLWearable *wearable) { - mAvatarObject->wearableUpdated(wearable->getType(), TRUE); + gAgentAvatarp->wearableUpdated(wearable->getType(), TRUE); wearable->refreshName(); wearable->setLabelUpdated(); @@ -819,7 +755,7 @@ void LLAgentWearables::popWearable(const EWearableType type, U32 index) if (wearable) { mWearableDatas[type].erase(mWearableDatas[type].begin() + index); - mAvatarObject->wearableUpdated(wearable->getType(), TRUE); + gAgentAvatarp->wearableUpdated(wearable->getType(), TRUE); wearable->setLabelUpdated(); } } @@ -951,8 +887,7 @@ void LLAgentWearables::processAgentInitialWearablesUpdate(LLMessageSystem* mesgs LLUUID agent_id; gMessageSystem->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id); - LLVOAvatar* avatar = gAgent.getAvatarObject(); - if (avatar && (agent_id == avatar->getID())) + if (isAgentAvatarValid() && (agent_id == gAgentAvatarp->getID())) { gMessageSystem->getU32Fast(_PREHASH_AgentData, _PREHASH_SerialNum, gAgentQueryManager.mUpdateSerialNum); @@ -1009,8 +944,7 @@ void LLAgentWearables::processAgentInitialWearablesUpdate(LLMessageSystem* mesgs // Store initial wearables data until we know whether we have the current outfit folder or need to use the data. LLInitialWearablesFetch::InitialWearableData wearable_data(type, item_id, asset_id); // MULTI-WEARABLE: update - outfit->mAgentInitialWearables.push_back(wearable_data); - + outfit->add(wearable_data); } lldebugs << " " << LLWearableDictionary::getTypeLabel(type) << llendl; @@ -1018,7 +952,7 @@ void LLAgentWearables::processAgentInitialWearablesUpdate(LLMessageSystem* mesgs // Get the complete information on the items in the inventory and set up an observer // that will trigger when the complete information is fetched. - LLInventoryFetchDescendentsObserver::folder_ref_t folders; + uuid_vec_t folders; folders.push_back(current_outfit_id); outfit->fetchDescendents(folders); if(outfit->isEverythingComplete()) @@ -1036,64 +970,6 @@ void LLAgentWearables::processAgentInitialWearablesUpdate(LLMessageSystem* mesgs } } -// A single wearable that the avatar was wearing on start-up has arrived from the database. -// static -void LLAgentWearables::onInitialWearableAssetArrived(LLWearable* wearable, void* userdata) -{ - boost::scoped_ptr<LLInitialWearablesFetch::InitialWearableData> wear_data((LLInitialWearablesFetch::InitialWearableData*)userdata); - const EWearableType type = wear_data->mType; - U32 index = 0; - - LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); - if (!avatar) - { - return; - } - - if (wearable) - { - llassert(type == wearable->getType()); - wearable->setItemID(wear_data->mItemID); - index = gAgentWearables.pushWearable(type, wearable); - gAgentWearables.mItemsAwaitingWearableUpdate.erase(wear_data->mItemID); - - // disable composites if initial textures are baked - avatar->setupComposites(); - - avatar->setCompositeUpdatesEnabled(TRUE); - gInventory.addChangedMask(LLInventoryObserver::LABEL, wearable->getItemID()); - } - else - { - // Somehow the asset doesn't exist in the database. - gAgentWearables.recoverMissingWearable(type,index); - } - - - gInventory.notifyObservers(); - - // Have all the wearables that the avatar was wearing at log-in arrived? - // MULTI-WEARABLE: update when multiple wearables can arrive per type. - - gAgentWearables.updateWearablesLoaded(); - if (gAgentWearables.areWearablesLoaded()) - { - - // Can't query cache until all wearables have arrived, so calling this earlier is a no-op. - gAgentWearables.queryWearableCache(); - - // Make sure that the server's idea of the avatar's wearables actually match the wearables. - gAgent.sendAgentSetAppearance(); - - // Check to see if there are any baked textures that we hadn't uploaded before we logged off last time. - // If there are any, schedule them to be uploaded as soon as the layer textures they depend on arrive. - if (gAgent.cameraCustomizeAvatar()) - { - avatar->requestLayerSetUploads(); - } - } -} - // Normally, all wearables referred to "AgentWearablesUpdate" will correspond to actual assets in the // database. If for some reason, we can't load one of those assets, we can try to reconstruct it so that // the user isn't left without a shape, for example. (We can do that only after the inventory has loaded.) @@ -1169,7 +1045,7 @@ public: { llinfos << "All items created" << llendl; LLPointer<LLInventoryCallback> link_waiter = new LLUpdateAppearanceOnDestroy; - LLAppearanceManager::instance().linkAll(LLAppearanceManager::instance().getCOF(), + LLAppearanceMgr::instance().linkAll(LLAppearanceMgr::instance().getCOF(), mItemsToLink, link_waiter); } @@ -1229,12 +1105,9 @@ void LLAgentWearables::createStandardWearables(BOOL female) llwarns << "Creating Standard " << (female ? "female" : "male") << " Wearables" << llendl; - if (mAvatarObject.isNull()) - { - return; - } + if (!isAgentAvatarValid()) return; - mAvatarObject->setSex(female ? SEX_FEMALE : SEX_MALE); + gAgentAvatarp->setSex(female ? SEX_FEMALE : SEX_MALE); const BOOL create[WT_COUNT] = { @@ -1281,10 +1154,9 @@ void LLAgentWearables::createStandardWearables(BOOL female) void LLAgentWearables::createStandardWearablesDone(S32 type, U32 index) { llinfos << "type " << type << " index " << index << llendl; - if (mAvatarObject) - { - mAvatarObject->updateVisualParams(); - } + + if (!isAgentAvatarValid()) return; + gAgentAvatarp->updateVisualParams(); } void LLAgentWearables::createStandardWearablesAllDone() @@ -1299,7 +1171,7 @@ void LLAgentWearables::createStandardWearablesAllDone() updateServer(); // Treat this as the first texture entry message, if none received yet - mAvatarObject->onFirstTEMessageReceived(); + gAgentAvatarp->onFirstTEMessageReceived(); } // MULTI-WEARABLE: Properly handle multiwearables later. @@ -1321,10 +1193,7 @@ void LLAgentWearables::makeNewOutfit(const std::string& new_folder_name, const LLDynamicArray<S32>& attachments_to_include, BOOL rename_clothing) { - if (mAvatarObject.isNull()) - { - return; - } + if (!isAgentAvatarValid()) return; // First, make a folder in the Clothes directory. LLUUID folder_id = gInventory.createNewCategory( @@ -1422,7 +1291,7 @@ void LLAgentWearables::makeNewOutfit(const std::string& new_folder_name, for (S32 i = 0; i < attachments_to_include.count(); i++) { S32 attachment_pt = attachments_to_include[i]; - LLViewerJointAttachment* attachment = get_if_there(mAvatarObject->mAttachmentPoints, attachment_pt, (LLViewerJointAttachment*)NULL); + LLViewerJointAttachment* attachment = get_if_there(gAgentAvatarp->mAttachmentPoints, attachment_pt, (LLViewerJointAttachment*)NULL); if (!attachment) continue; for (LLViewerJointAttachment::attachedobjs_vec_t::iterator attachment_iter = attachment->mAttachedObjects.begin(); attachment_iter != attachment->mAttachedObjects.end(); @@ -1483,8 +1352,8 @@ public: tab_outfits->changeOpenClose(tab_outfits->getDisplayChildren()); } - LLAppearanceManager::instance().updateIsDirty(); - LLAppearanceManager::instance().updatePanelOutfitName(""); + LLAppearanceMgr::instance().updateIsDirty(); + LLAppearanceMgr::instance().updatePanelOutfitName(""); } virtual void fire(const LLUUID&) @@ -1497,10 +1366,7 @@ private: LLUUID LLAgentWearables::makeNewOutfitLinks(const std::string& new_folder_name) { - if (mAvatarObject.isNull()) - { - return LLUUID::null; - } + if (!isAgentAvatarValid()) return LLUUID::null; // First, make a folder in the My Outfits directory. const LLUUID parent_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS); @@ -1510,8 +1376,8 @@ LLUUID LLAgentWearables::makeNewOutfitLinks(const std::string& new_folder_name) new_folder_name); LLPointer<LLInventoryCallback> cb = new LLShowCreatedOutfit(folder_id); - LLAppearanceManager::instance().shallowCopyCategoryContents(LLAppearanceManager::instance().getCOF(),folder_id, cb); - LLAppearanceManager::instance().createBaseOutfitLink(folder_id, cb); + LLAppearanceMgr::instance().shallowCopyCategoryContents(LLAppearanceMgr::instance().getCOF(),folder_id, cb); + LLAppearanceMgr::instance().createBaseOutfitLink(folder_id, cb); return folder_id; } @@ -1578,6 +1444,7 @@ void LLAgentWearables::removeWearable(const EWearableType type, bool do_remove_a { LLSD payload; payload["wearable_type"] = (S32)type; + payload["wearable_index"] = (S32)index; // Bring up view-modal dialog: Save changes? Yes, No, Cancel LLNotificationsUtil::add("WearableSave", LLSD(), payload, &LLAgentWearables::onRemoveWearableDialog); return; @@ -1591,22 +1458,21 @@ void LLAgentWearables::removeWearable(const EWearableType type, bool do_remove_a } -// MULTI_WEARABLE: assuming one wearable per type. -// MULTI_WEARABLE: hardwiring 0th elt for now - notification needs to change. // static bool LLAgentWearables::onRemoveWearableDialog(const LLSD& notification, const LLSD& response) { S32 option = LLNotificationsUtil::getSelectedOption(notification, response); EWearableType type = (EWearableType)notification["payload"]["wearable_type"].asInteger(); + S32 index = (S32)notification["payload"]["wearable_index"].asInteger(); switch(option) { case 0: // "Save" - gAgentWearables.saveWearable(type, 0); - gAgentWearables.removeWearableFinal(type, false, 0); + gAgentWearables.saveWearable(type, index); + gAgentWearables.removeWearableFinal(type, false, index); break; case 1: // "Don't Save" - gAgentWearables.removeWearableFinal(type, false, 0); + gAgentWearables.removeWearableFinal(type, false, index); break; case 2: // "Cancel" @@ -1658,30 +1524,25 @@ void LLAgentWearables::removeWearableFinal(const EWearableType type, bool do_rem } // Assumes existing wearables are not dirty. -// MULTI_WEARABLE: assumes one wearable per type. void LLAgentWearables::setWearableOutfit(const LLInventoryItem::item_array_t& items, const LLDynamicArray< LLWearable* >& wearables, BOOL remove) { llinfos << "setWearableOutfit() start" << llendl; - BOOL wearables_to_remove[WT_COUNT]; - wearables_to_remove[WT_SHAPE] = FALSE; - wearables_to_remove[WT_SKIN] = FALSE; - wearables_to_remove[WT_HAIR] = FALSE; - wearables_to_remove[WT_EYES] = FALSE; - wearables_to_remove[WT_SHIRT] = remove; - wearables_to_remove[WT_PANTS] = remove; - wearables_to_remove[WT_SHOES] = remove; - wearables_to_remove[WT_SOCKS] = remove; - wearables_to_remove[WT_JACKET] = remove; - wearables_to_remove[WT_GLOVES] = remove; - wearables_to_remove[WT_UNDERSHIRT] = (!gAgent.isTeen()) & remove; - wearables_to_remove[WT_UNDERPANTS] = (!gAgent.isTeen()) & remove; - wearables_to_remove[WT_SKIRT] = remove; - wearables_to_remove[WT_ALPHA] = remove; - wearables_to_remove[WT_TATTOO] = remove; - + // TODO: Removed check for ensuring that teens don't remove undershirt and underwear. Handle later + if (remove) + { + // note: shirt is the first non-body part wearable item. Update if wearable order changes. + // This loop should remove all clothing, but not any body parts + for (S32 type = 0; type < (S32)WT_COUNT; type++) + { + if (LLWearableDictionary::getAssetType((EWearableType)type) == LLAssetType::AT_CLOTHING) + { + removeWearable((EWearableType)type, true, 0); + } + } + } S32 count = wearables.count(); llassert(items.count() == count); @@ -1696,72 +1557,31 @@ void LLAgentWearables::setWearableOutfit(const LLInventoryItem::item_array_t& it if (new_wearable) { const EWearableType type = new_wearable->getType(); - wearables_to_remove[type] = FALSE; + + new_wearable->setName(new_item->getName()); + new_wearable->setItemID(new_item->getUUID()); - // MULTI_WEARABLE: using 0th - LLWearable* old_wearable = getWearable(type, 0); - if (old_wearable) + if (LLWearableDictionary::getAssetType(type) == LLAssetType::AT_BODYPART) { - const LLUUID& old_item_id = getWearableItemID(type, 0); - if ((old_wearable->getAssetID() == new_wearable->getAssetID()) && - (old_item_id == new_item->getUUID())) - { - lldebugs << "No change to wearable asset and item: " << LLWearableDictionary::getInstance()->getWearableEntry(type) << llendl; - continue; - } - - // Assumes existing wearables are not dirty. - if (old_wearable->isDirty()) - { - llassert(0); - continue; - } + // exactly one wearable per body part + setWearable(type,0,new_wearable); } - - new_wearable->setItemID(new_item->getUUID()); - setWearable(type,0,new_wearable); - } - } - - std::vector<LLWearable*> wearables_being_removed; - - for (i = 0; i < WT_COUNT; i++) - { - if (wearables_to_remove[i]) - { - // MULTI_WEARABLE: assuming 0th - LLWearable* wearable = getWearable((EWearableType)i, 0); - const LLUUID &item_id = getWearableItemID((EWearableType)i,0); - gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id); - if (wearable) + else { - wearables_being_removed.push_back(wearable); + pushWearable(type,new_wearable); } - removeWearable((EWearableType)i,true,0); + wearableUpdated(new_wearable); + checkWearableAgainstInventory(new_wearable); } } gInventory.notifyObservers(); - - std::vector<LLWearable*>::iterator wearable_iter; - - for (wearable_iter = wearables_being_removed.begin(); - wearable_iter != wearables_being_removed.end(); - ++wearable_iter) - { - LLWearable* wearablep = *wearable_iter; - if (wearablep) - { - wearablep->removeFromAvatar(TRUE); - } - } - - if (mAvatarObject) + if (isAgentAvatarValid()) { - mAvatarObject->setCompositeUpdatesEnabled(TRUE); - mAvatarObject->updateVisualParams(); - mAvatarObject->invalidateAll(); + gAgentAvatarp->setCompositeUpdatesEnabled(TRUE); + gAgentAvatarp->updateVisualParams(); + gAgentAvatarp->invalidateAll(); } // Start rendering & update the server @@ -1820,6 +1640,7 @@ bool LLAgentWearables::onSetWearableDialog(const LLSD& notification, const LLSD& { S32 option = LLNotificationsUtil::getSelectedOption(notification, response); LLInventoryItem* new_item = gInventory.getItem(notification["payload"]["item_id"].asUUID()); + U32 index = gAgentWearables.getWearableIndex(wearable); if (!new_item) { delete wearable; @@ -1829,8 +1650,7 @@ bool LLAgentWearables::onSetWearableDialog(const LLSD& notification, const LLSD& switch(option) { case 0: // "Save" -// MULTI_WEARABLE: assuming 0th - gAgentWearables.saveWearable(wearable->getType(),0); + gAgentWearables.saveWearable(wearable->getType(),index); gAgentWearables.setWearableFinal(new_item, wearable); break; @@ -1920,30 +1740,35 @@ void LLAgentWearables::queryWearableCache() for (U8 baked_index = 0; baked_index < BAKED_NUM_INDICES; baked_index++) { const LLVOAvatarDictionary::BakedEntry *baked_dict = LLVOAvatarDictionary::getInstance()->getBakedTexture((EBakedTextureIndex)baked_index); - LLUUID hash; + LLMD5 hash; + bool hash_computed = false; for (U8 i=0; i < baked_dict->mWearables.size(); i++) { const EWearableType baked_type = baked_dict->mWearables[i]; - // MULTI_WEARABLE: not order-dependent const U32 num_wearables = getWearableCount(baked_type); for (U32 index = 0; index < num_wearables; ++index) { const LLWearable* wearable = getWearable(baked_type,index); if (wearable) { - hash ^= wearable->getAssetID(); + LLUUID asset_id = wearable->getAssetID(); + hash.update((const unsigned char*)asset_id.mData, UUID_BYTES); + hash_computed = true; } } } - if (hash.notNull()) + hash.finalize(); + if (hash_computed) { - hash ^= baked_dict->mWearablesHashID; + LLUUID hash_id; + hash.raw_digest(hash_id.mData); + hash_id ^= baked_dict->mWearablesHashID; num_queries++; // *NOTE: make sure at least one request gets packed //llinfos << "Requesting texture for hash " << hash << " in baked texture slot " << baked_index << llendl; gMessageSystem->nextBlockFast(_PREHASH_WearableData); - gMessageSystem->addUUIDFast(_PREHASH_ID, hash); + gMessageSystem->addUUIDFast(_PREHASH_ID, hash_id); gMessageSystem->addU8Fast(_PREHASH_TextureIndex, (U8)baked_index); } @@ -1956,16 +1781,24 @@ void LLAgentWearables::queryWearableCache() gAgentQueryManager.mWearablesCacheQueryID++; } -// MULTI_WEARABLE: need a way to specify by wearable rather than by type. // User has picked "remove from avatar" from a menu. // static -void LLAgentWearables::userRemoveWearable(EWearableType& type) +void LLAgentWearables::userRemoveWearable(const EWearableType &type, const U32 &index) { - if (!(type==WT_SHAPE || type==WT_SKIN || type==WT_HAIR)) //&& + if (!(type==WT_SHAPE || type==WT_SKIN || type==WT_HAIR || type==WT_EYES)) //&& //!((!gAgent.isTeen()) && (type==WT_UNDERPANTS || type==WT_UNDERSHIRT))) { - // MULTI_WEARABLE: fixed to 0th for now. - gAgentWearables.removeWearable(type,false,0); + gAgentWearables.removeWearable(type,false,index); + } +} + +//static +void LLAgentWearables::userRemoveWearablesOfType(const EWearableType &type) +{ + if (!(type==WT_SHAPE || type==WT_SKIN || type==WT_HAIR || type==WT_EYES)) //&& + //!((!gAgent.isTeen()) && (type==WT_UNDERPANTS || type==WT_UNDERSHIRT))) + { + gAgentWearables.removeWearable(type,true,0); } } @@ -2011,12 +1844,7 @@ void LLAgentWearables::userUpdateAttachments(LLInventoryModel::item_array_t& obj // already wearing and in request set -> leave alone. // not wearing and in request set -> put on. - LLVOAvatar* avatarp = gAgent.getAvatarObject(); - if (!avatarp) - { - llwarns << "No avatar found." << llendl; - return; - } + if (!isAgentAvatarValid()) return; std::set<LLUUID> requested_item_ids; std::set<LLUUID> current_item_ids; @@ -2025,8 +1853,8 @@ void LLAgentWearables::userUpdateAttachments(LLInventoryModel::item_array_t& obj // Build up list of objects to be removed and items currently attached. llvo_vec_t objects_to_remove; - for (LLVOAvatar::attachment_map_t::iterator iter = avatarp->mAttachmentPoints.begin(); - iter != avatarp->mAttachmentPoints.end();) + for (LLVOAvatar::attachment_map_t::iterator iter = gAgentAvatarp->mAttachmentPoints.begin(); + iter != gAgentAvatarp->mAttachmentPoints.end();) { LLVOAvatar::attachment_map_t::iterator curiter = iter++; LLViewerJointAttachment* attachment = curiter->second; @@ -2082,12 +1910,7 @@ void LLAgentWearables::userUpdateAttachments(LLInventoryModel::item_array_t& obj void LLAgentWearables::userRemoveMultipleAttachments(llvo_vec_t& objects_to_remove) { - LLVOAvatar* avatarp = gAgent.getAvatarObject(); - if (!avatarp) - { - llwarns << "No avatar found." << llendl; - return; - } + if (!isAgentAvatarValid()) return; if (objects_to_remove.empty()) return; @@ -2110,17 +1933,12 @@ void LLAgentWearables::userRemoveMultipleAttachments(llvo_vec_t& objects_to_remo void LLAgentWearables::userRemoveAllAttachments() { - LLVOAvatar* avatarp = gAgent.getAvatarObject(); - if (!avatarp) - { - llwarns << "No avatar found." << llendl; - return; - } + if (!isAgentAvatarValid()) return; llvo_vec_t objects_to_remove; - for (LLVOAvatar::attachment_map_t::iterator iter = avatarp->mAttachmentPoints.begin(); - iter != avatarp->mAttachmentPoints.end();) + for (LLVOAvatar::attachment_map_t::iterator iter = gAgentAvatarp->mAttachmentPoints.begin(); + iter != gAgentAvatarp->mAttachmentPoints.end();) { LLVOAvatar::attachment_map_t::iterator curiter = iter++; LLViewerJointAttachment* attachment = curiter->second; @@ -2247,7 +2065,7 @@ void LLAgentWearables::populateMyOutfitsFolder(void) // Get the complete information on the items in the inventory and // setup an observer that will wait for that to happen. - LLInventoryFetchDescendentsObserver::folder_ref_t folders; + uuid_vec_t folders; outfits->mMyOutfitsID = gInventory.findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS); folders.push_back(outfits->mMyOutfitsID); @@ -2258,473 +2076,3 @@ void LLAgentWearables::populateMyOutfitsFolder(void) outfits->done(); } } - -void LLLibraryOutfitsFetch::done() -{ - // Delay this until idle() routine, since it's a heavy operation and - // we also can't have it run within notifyObservers. - doOnIdle(boost::bind(&LLLibraryOutfitsFetch::doneIdle,this)); - gInventory.removeObserver(this); // Prevent doOnIdle from being added twice. -} - -void LLLibraryOutfitsFetch::doneIdle() -{ - gInventory.addObserver(this); // Add this back in since it was taken out during ::done() - - switch (mCurrFetchStep) - { - case LOFS_FOLDER: - folderDone(); - mCurrFetchStep = LOFS_OUTFITS; - break; - case LOFS_OUTFITS: - outfitsDone(); - mCurrFetchStep = LOFS_LIBRARY; - break; - case LOFS_LIBRARY: - libraryDone(); - mCurrFetchStep = LOFS_IMPORTED; - break; - case LOFS_IMPORTED: - importedFolderDone(); - mCurrFetchStep = LOFS_CONTENTS; - break; - case LOFS_CONTENTS: - contentsDone(); - break; - default: - llwarns << "Got invalid state for outfit fetch: " << mCurrFetchStep << llendl; - mOutfitsPopulated = TRUE; - break; - } - - // We're completely done. Cleanup. - if (mOutfitsPopulated) - { - gInventory.removeObserver(this); - delete this; - return; - } -} - -void LLLibraryOutfitsFetch::folderDone(void) -{ - LLInventoryModel::cat_array_t cat_array; - LLInventoryModel::item_array_t wearable_array; - gInventory.collectDescendents(mMyOutfitsID, cat_array, wearable_array, - LLInventoryModel::EXCLUDE_TRASH); - // Early out if we already have items in My Outfits. - if (cat_array.count() > 0 || wearable_array.count() > 0) - { - mOutfitsPopulated = true; - return; - } - - mClothingID = gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING); - mLibraryClothingID = gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING, false, true); - - // If Library->Clothing->Initial Outfits exists, use that. - LLNameCategoryCollector matchFolderFunctor("Initial Outfits"); - gInventory.collectDescendentsIf(mLibraryClothingID, - cat_array, wearable_array, - LLInventoryModel::EXCLUDE_TRASH, - matchFolderFunctor); - if (cat_array.count() > 0) - { - const LLViewerInventoryCategory *cat = cat_array.get(0); - mLibraryClothingID = cat->getUUID(); - } - - mCompleteFolders.clear(); - - // Get the complete information on the items in the inventory. - LLInventoryFetchDescendentsObserver::folder_ref_t folders; - folders.push_back(mClothingID); - folders.push_back(mLibraryClothingID); - fetchDescendents(folders); - if (isEverythingComplete()) - { - done(); - } -} - -void LLLibraryOutfitsFetch::outfitsDone(void) -{ - LLInventoryModel::cat_array_t cat_array; - LLInventoryModel::item_array_t wearable_array; - LLInventoryFetchDescendentsObserver::folder_ref_t folders; - - // Collect the contents of the Library's Clothing folder - gInventory.collectDescendents(mLibraryClothingID, cat_array, wearable_array, - LLInventoryModel::EXCLUDE_TRASH); - - llassert(cat_array.count() > 0); - for (LLInventoryModel::cat_array_t::const_iterator iter = cat_array.begin(); - iter != cat_array.end(); - ++iter) - { - const LLViewerInventoryCategory *cat = iter->get(); - - // Get the names and id's of every outfit in the library, skip "Ruth" - // because it's a low quality legacy outfit - if (cat->getName() != "Ruth") - { - // Get the name of every outfit in the library - folders.push_back(cat->getUUID()); - mLibraryClothingFolders.push_back(cat->getUUID()); - } - } - cat_array.clear(); - wearable_array.clear(); - - // Check if you already have an "Imported Library Clothing" folder - LLNameCategoryCollector matchFolderFunctor(mImportedClothingName); - gInventory.collectDescendentsIf(mClothingID, - cat_array, wearable_array, - LLInventoryModel::EXCLUDE_TRASH, - matchFolderFunctor); - if (cat_array.size() > 0) - { - const LLViewerInventoryCategory *cat = cat_array.get(0); - mImportedClothingID = cat->getUUID(); - } - - mCompleteFolders.clear(); - - fetchDescendents(folders); - if (isEverythingComplete()) - { - done(); - } -} - -class LLLibraryOutfitsCopyDone: public LLInventoryCallback -{ -public: - LLLibraryOutfitsCopyDone(LLLibraryOutfitsFetch * fetcher): - mFireCount(0), mLibraryOutfitsFetcher(fetcher) - { - } - - virtual ~LLLibraryOutfitsCopyDone() - { - if (!LLApp::isExiting() && mLibraryOutfitsFetcher) - { - gInventory.addObserver(mLibraryOutfitsFetcher); - mLibraryOutfitsFetcher->done(); - } - } - - /* virtual */ void fire(const LLUUID& inv_item) - { - mFireCount++; - } -private: - U32 mFireCount; - LLLibraryOutfitsFetch * mLibraryOutfitsFetcher; -}; - -// Copy the clothing folders from the library into the imported clothing folder -void LLLibraryOutfitsFetch::libraryDone(void) -{ - if (mImportedClothingID != LLUUID::null) - { - // Skip straight to fetching the contents of the imported folder - importedFolderFetch(); - return; - } - - // Remove observer; next autopopulation step will be triggered externally by LLLibraryOutfitsCopyDone. - gInventory.removeObserver(this); - - LLPointer<LLInventoryCallback> copy_waiter = new LLLibraryOutfitsCopyDone(this); - mImportedClothingID = gInventory.createNewCategory(mClothingID, - LLFolderType::FT_NONE, - mImportedClothingName); - // Copy each folder from library into clothing unless it already exists. - for (clothing_folder_vec_t::const_iterator iter = mLibraryClothingFolders.begin(); - iter != mLibraryClothingFolders.end(); - ++iter) - { - const LLUUID& src_folder_id = (*iter); // Library clothing folder ID - const LLViewerInventoryCategory *cat = gInventory.getCategory(src_folder_id); - if (!cat) - { - llwarns << "Library folder import for uuid:" << src_folder_id << " failed to find folder." << llendl; - continue; - } - - if (!LLAppearanceManager::getInstance()->getCanMakeFolderIntoOutfit(src_folder_id)) - { - llinfos << "Skipping non-outfit folder name:" << cat->getName() << llendl; - continue; - } - - // Don't copy the category if it already exists. - LLNameCategoryCollector matchFolderFunctor(cat->getName()); - LLInventoryModel::cat_array_t cat_array; - LLInventoryModel::item_array_t wearable_array; - gInventory.collectDescendentsIf(mImportedClothingID, - cat_array, wearable_array, - LLInventoryModel::EXCLUDE_TRASH, - matchFolderFunctor); - if (cat_array.size() > 0) - { - continue; - } - - LLUUID dst_folder_id = gInventory.createNewCategory(mImportedClothingID, - LLFolderType::FT_NONE, - cat->getName()); - LLAppearanceManager::getInstance()->shallowCopyCategoryContents(src_folder_id, dst_folder_id, copy_waiter); - } -} - -void LLLibraryOutfitsFetch::importedFolderFetch(void) -{ - // Fetch the contents of the Imported Clothing Folder - LLInventoryFetchDescendentsObserver::folder_ref_t folders; - folders.push_back(mImportedClothingID); - - mCompleteFolders.clear(); - - fetchDescendents(folders); - if (isEverythingComplete()) - { - done(); - } -} - -void LLLibraryOutfitsFetch::importedFolderDone(void) -{ - LLInventoryModel::cat_array_t cat_array; - LLInventoryModel::item_array_t wearable_array; - LLInventoryFetchDescendentsObserver::folder_ref_t folders; - - // Collect the contents of the Imported Clothing folder - gInventory.collectDescendents(mImportedClothingID, cat_array, wearable_array, - LLInventoryModel::EXCLUDE_TRASH); - - for (LLInventoryModel::cat_array_t::const_iterator iter = cat_array.begin(); - iter != cat_array.end(); - ++iter) - { - const LLViewerInventoryCategory *cat = iter->get(); - - // Get the name of every imported outfit - folders.push_back(cat->getUUID()); - mImportedClothingFolders.push_back(cat->getUUID()); - } - - mCompleteFolders.clear(); - fetchDescendents(folders); - if (isEverythingComplete()) - { - done(); - } -} - -void LLLibraryOutfitsFetch::contentsDone(void) -{ - LLInventoryModel::cat_array_t cat_array; - LLInventoryModel::item_array_t wearable_array; - - for (clothing_folder_vec_t::const_iterator folder_iter = mImportedClothingFolders.begin(); - folder_iter != mImportedClothingFolders.end(); - ++folder_iter) - { - const LLUUID &folder_id = (*folder_iter); - const LLViewerInventoryCategory *cat = gInventory.getCategory(folder_id); - if (!cat) - { - llwarns << "Library folder import for uuid:" << folder_id << " failed to find folder." << llendl; - continue; - } - - // First, make a folder in the My Outfits directory. - LLUUID new_outfit_folder_id = gInventory.createNewCategory(mMyOutfitsID, LLFolderType::FT_OUTFIT, cat->getName()); - - cat_array.clear(); - wearable_array.clear(); - // Collect the contents of each imported clothing folder, so we can create new outfit links for it - gInventory.collectDescendents(folder_id, cat_array, wearable_array, - LLInventoryModel::EXCLUDE_TRASH); - - for (LLInventoryModel::item_array_t::const_iterator wearable_iter = wearable_array.begin(); - wearable_iter != wearable_array.end(); - ++wearable_iter) - { - const LLViewerInventoryItem *item = wearable_iter->get(); - link_inventory_item(gAgent.getID(), - item->getLinkedUUID(), - new_outfit_folder_id, - item->getName(), - LLAssetType::AT_LINK, - NULL); - } - } - - mOutfitsPopulated = true; -} - -//-------------------------------------------------------------------- -// InitialWearablesFetch -// -// This grabs contents from the COF and processes them. -// The processing is handled in idle(), i.e. outside of done(), -// to avoid gInventory.notifyObservers recursion. -//-------------------------------------------------------------------- - -LLInitialWearablesFetch::~LLInitialWearablesFetch() -{ -} - -// virtual -void LLInitialWearablesFetch::done() -{ - // Delay processing the actual results of this so it's not handled within - // gInventory.notifyObservers. The results will be handled in the next - // idle tick instead. - gInventory.removeObserver(this); - doOnIdle(boost::bind(&LLInitialWearablesFetch::processContents,this)); -} - -void LLInitialWearablesFetch::processContents() -{ - // Fetch the wearable items from the Current Outfit Folder - LLInventoryModel::cat_array_t cat_array; - LLInventoryModel::item_array_t wearable_array; - LLFindWearables is_wearable; - gInventory.collectDescendentsIf(mCompleteFolders.front(), cat_array, wearable_array, - LLInventoryModel::EXCLUDE_TRASH, is_wearable); - - LLAppearanceManager::instance().setAttachmentInvLinkEnable(true); - if (wearable_array.count() > 0) - { - LLAppearanceManager::instance().updateAppearanceFromCOF(); - } - else - { - // if we're constructing the COF from the wearables message, we don't have a proper outfit link - LLAppearanceManager::instance().setOutfitDirty(true); - processWearablesMessage(); - } - delete this; -} - -class LLFetchAndLinkObserver: public LLInventoryFetchObserver -{ -public: - LLFetchAndLinkObserver(LLInventoryFetchObserver::item_ref_t& ids): - m_ids(ids), - LLInventoryFetchObserver(true) // retry for missing items - { - } - ~LLFetchAndLinkObserver() - { - } - virtual void done() - { - gInventory.removeObserver(this); - - // Link to all fetched items in COF. - LLPointer<LLInventoryCallback> link_waiter = new LLUpdateAppearanceOnDestroy; - for (LLInventoryFetchObserver::item_ref_t::iterator it = m_ids.begin(); - it != m_ids.end(); - ++it) - { - LLUUID id = *it; - LLViewerInventoryItem *item = gInventory.getItem(*it); - if (!item) - { - llwarns << "fetch failed!" << llendl; - continue; - } - - link_inventory_item(gAgent.getID(), - item->getLinkedUUID(), - LLAppearanceManager::instance().getCOF(), - item->getName(), - LLAssetType::AT_LINK, - link_waiter); - } - } -private: - LLInventoryFetchObserver::item_ref_t m_ids; -}; - -void LLInitialWearablesFetch::processWearablesMessage() -{ - if (!mAgentInitialWearables.empty()) // We have an empty current outfit folder, use the message data instead. - { - const LLUUID current_outfit_id = LLAppearanceManager::instance().getCOF(); - LLInventoryFetchObserver::item_ref_t ids; - for (U8 i = 0; i < mAgentInitialWearables.size(); ++i) - { - // Populate the current outfit folder with links to the wearables passed in the message - InitialWearableData *wearable_data = new InitialWearableData(mAgentInitialWearables[i]); // This will be deleted in the callback. - - if (wearable_data->mAssetID.notNull()) - { -#ifdef USE_CURRENT_OUTFIT_FOLDER - ids.push_back(wearable_data->mItemID); -#endif -#if 0 -// // Fetch the wearables -// LLWearableList::instance().getAsset(wearable_data->mAssetID, -// LLStringUtil::null, -// LLWearableDictionary::getAssetType(wearable_data->mType), -// LLAgentWearables::onInitialWearableAssetArrived, (void*)(wearable_data)); -#endif - } - else - { - llinfos << "Invalid wearable, type " << wearable_data->mType << " itemID " - << wearable_data->mItemID << " assetID " << wearable_data->mAssetID << llendl; - delete wearable_data; - } - } - - // Add all current attachments to the requested items as well. - LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); - if( avatar ) - { - for (LLVOAvatar::attachment_map_t::const_iterator iter = avatar->mAttachmentPoints.begin(); - iter != avatar->mAttachmentPoints.end(); ++iter) - { - LLViewerJointAttachment* attachment = iter->second; - if (!attachment) continue; - for (LLViewerJointAttachment::attachedobjs_vec_t::iterator attachment_iter = attachment->mAttachedObjects.begin(); - attachment_iter != attachment->mAttachedObjects.end(); - ++attachment_iter) - { - LLViewerObject* attached_object = (*attachment_iter); - if (!attached_object) continue; - const LLUUID& item_id = attached_object->getItemID(); - if (item_id.isNull()) continue; - ids.push_back(item_id); - } - } - } - - // Need to fetch the inventory items for ids, then create links to them after they arrive. - LLFetchAndLinkObserver *fetcher = new LLFetchAndLinkObserver(ids); - fetcher->fetchItems(ids); - // If no items to be fetched, done will never be triggered. - // TODO: Change LLInventoryFetchObserver::fetchItems to trigger done() on this condition. - if (fetcher->isEverythingComplete()) - { - fetcher->done(); - } - else - { - gInventory.addObserver(fetcher); - } - } - else - { - LL_WARNS("Wearables") << "No current outfit folder items found and no initial wearables fallback message received." << LL_ENDL; - } -} - - diff --git a/indra/newview/llagentwearables.h b/indra/newview/llagentwearables.h index a6b73997a6..9f8aadeae7 100644 --- a/indra/newview/llagentwearables.h +++ b/indra/newview/llagentwearables.h @@ -193,8 +193,8 @@ public: // Static UI hooks //-------------------------------------------------------------------- public: - // MULTI-WEARABLE: assuming one wearable per type. Need upstream changes. - static void userRemoveWearable(EWearableType& type); + static void userRemoveWearable(const EWearableType &type, const U32 &index); + static void userRemoveWearablesOfType(const EWearableType &type); static void userRemoveAllClothes(); typedef std::vector<LLViewerObject*> llvo_vec_t; @@ -218,7 +218,6 @@ private: static BOOL mInitialWearablesUpdateReceived; BOOL mWearablesLoaded; std::set<LLUUID> mItemsAwaitingWearableUpdate; - LLPointer<LLVOAvatarSelf> mAvatarObject; // NULL until avatar object sent down from simulator //-------------------------------------------------------------------------------- // Support classes diff --git a/indra/newview/llagentwearablesfetch.cpp b/indra/newview/llagentwearablesfetch.cpp new file mode 100644 index 0000000000..45274a8e2c --- /dev/null +++ b/indra/newview/llagentwearablesfetch.cpp @@ -0,0 +1,516 @@ +/** + * @file llagentwearablesfetch.cpp + * @brief LLAgentWearblesFetch class implementation + * + * $LicenseInfo:firstyear=2001&license=viewergpl$ + * + * Copyright (c) 2001-2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" +#include "llagentwearablesfetch.h" + +#include "llagent.h" +#include "llagentwearables.h" +#include "llappearancemgr.h" +#include "llinventoryfunctions.h" +#include "llvoavatarself.h" + +LLInitialWearablesFetch::LLInitialWearablesFetch() +{ +} + +LLInitialWearablesFetch::~LLInitialWearablesFetch() +{ +} + +// virtual +void LLInitialWearablesFetch::done() +{ + // Delay processing the actual results of this so it's not handled within + // gInventory.notifyObservers. The results will be handled in the next + // idle tick instead. + gInventory.removeObserver(this); + doOnIdle(boost::bind(&LLInitialWearablesFetch::processContents,this)); +} + +void LLInitialWearablesFetch::add(InitialWearableData &data) + +{ + mAgentInitialWearables.push_back(data); +} + +void LLInitialWearablesFetch::processContents() +{ + // Fetch the wearable items from the Current Outfit Folder + LLInventoryModel::cat_array_t cat_array; + LLInventoryModel::item_array_t wearable_array; + LLFindWearables is_wearable; + gInventory.collectDescendentsIf(mCompleteFolders.front(), cat_array, wearable_array, + LLInventoryModel::EXCLUDE_TRASH, is_wearable); + + LLAppearanceMgr::instance().setAttachmentInvLinkEnable(true); + if (wearable_array.count() > 0) + { + LLAppearanceMgr::instance().updateAppearanceFromCOF(); + } + else + { + // if we're constructing the COF from the wearables message, we don't have a proper outfit link + LLAppearanceMgr::instance().setOutfitDirty(true); + processWearablesMessage(); + } + delete this; +} + +class LLFetchAndLinkObserver: public LLInventoryFetchObserver +{ +public: + LLFetchAndLinkObserver(LLInventoryFetchObserver::item_ref_t& ids): + m_ids(ids), + LLInventoryFetchObserver(true) // retry for missing items + { + } + ~LLFetchAndLinkObserver() + { + } + virtual void done() + { + gInventory.removeObserver(this); + + // Link to all fetched items in COF. + LLPointer<LLInventoryCallback> link_waiter = new LLUpdateAppearanceOnDestroy; + for (LLInventoryFetchObserver::item_ref_t::iterator it = m_ids.begin(); + it != m_ids.end(); + ++it) + { + LLUUID id = *it; + LLViewerInventoryItem *item = gInventory.getItem(*it); + if (!item) + { + llwarns << "fetch failed!" << llendl; + continue; + } + + link_inventory_item(gAgent.getID(), + item->getLinkedUUID(), + LLAppearanceMgr::instance().getCOF(), + item->getName(), + LLAssetType::AT_LINK, + link_waiter); + } + } +private: + LLInventoryFetchObserver::item_ref_t m_ids; +}; + +void LLInitialWearablesFetch::processWearablesMessage() +{ + if (!mAgentInitialWearables.empty()) // We have an empty current outfit folder, use the message data instead. + { + const LLUUID current_outfit_id = LLAppearanceMgr::instance().getCOF(); + LLInventoryFetchObserver::item_ref_t ids; + for (U8 i = 0; i < mAgentInitialWearables.size(); ++i) + { + // Populate the current outfit folder with links to the wearables passed in the message + InitialWearableData *wearable_data = new InitialWearableData(mAgentInitialWearables[i]); // This will be deleted in the callback. + + if (wearable_data->mAssetID.notNull()) + { + ids.push_back(wearable_data->mItemID); + } + else + { + llinfos << "Invalid wearable, type " << wearable_data->mType << " itemID " + << wearable_data->mItemID << " assetID " << wearable_data->mAssetID << llendl; + delete wearable_data; + } + } + + // Add all current attachments to the requested items as well. + if (isAgentAvatarValid()) + { + for (LLVOAvatar::attachment_map_t::const_iterator iter = gAgentAvatarp->mAttachmentPoints.begin(); + iter != gAgentAvatarp->mAttachmentPoints.end(); ++iter) + { + LLViewerJointAttachment* attachment = iter->second; + if (!attachment) continue; + for (LLViewerJointAttachment::attachedobjs_vec_t::iterator attachment_iter = attachment->mAttachedObjects.begin(); + attachment_iter != attachment->mAttachedObjects.end(); + ++attachment_iter) + { + LLViewerObject* attached_object = (*attachment_iter); + if (!attached_object) continue; + const LLUUID& item_id = attached_object->getItemID(); + if (item_id.isNull()) continue; + ids.push_back(item_id); + } + } + } + + // Need to fetch the inventory items for ids, then create links to them after they arrive. + LLFetchAndLinkObserver *fetcher = new LLFetchAndLinkObserver(ids); + fetcher->fetchItems(ids); + // If no items to be fetched, done will never be triggered. + // TODO: Change LLInventoryFetchObserver::fetchItems to trigger done() on this condition. + if (fetcher->isEverythingComplete()) + { + fetcher->done(); + } + else + { + gInventory.addObserver(fetcher); + } + } + else + { + LL_WARNS("Wearables") << "No current outfit folder items found and no initial wearables fallback message received." << LL_ENDL; + } +} + +LLLibraryOutfitsFetch::LLLibraryOutfitsFetch() : + mCurrFetchStep(LOFS_FOLDER), + mOutfitsPopulated(false) +{ + mMyOutfitsID = LLUUID::null; + mClothingID = LLUUID::null; + mLibraryClothingID = LLUUID::null; + mImportedClothingID = LLUUID::null; + mImportedClothingName = "Imported Library Clothing"; +} + +LLLibraryOutfitsFetch::~LLLibraryOutfitsFetch() +{ +} + +void LLLibraryOutfitsFetch::done() +{ + // Delay this until idle() routine, since it's a heavy operation and + // we also can't have it run within notifyObservers. + doOnIdle(boost::bind(&LLLibraryOutfitsFetch::doneIdle,this)); + gInventory.removeObserver(this); // Prevent doOnIdle from being added twice. +} + +void LLLibraryOutfitsFetch::doneIdle() +{ + gInventory.addObserver(this); // Add this back in since it was taken out during ::done() + + switch (mCurrFetchStep) + { + case LOFS_FOLDER: + folderDone(); + mCurrFetchStep = LOFS_OUTFITS; + break; + case LOFS_OUTFITS: + outfitsDone(); + mCurrFetchStep = LOFS_LIBRARY; + break; + case LOFS_LIBRARY: + libraryDone(); + mCurrFetchStep = LOFS_IMPORTED; + break; + case LOFS_IMPORTED: + importedFolderDone(); + mCurrFetchStep = LOFS_CONTENTS; + break; + case LOFS_CONTENTS: + contentsDone(); + break; + default: + llwarns << "Got invalid state for outfit fetch: " << mCurrFetchStep << llendl; + mOutfitsPopulated = TRUE; + break; + } + + // We're completely done. Cleanup. + if (mOutfitsPopulated) + { + gInventory.removeObserver(this); + delete this; + return; + } +} + +void LLLibraryOutfitsFetch::folderDone(void) +{ + LLInventoryModel::cat_array_t cat_array; + LLInventoryModel::item_array_t wearable_array; + gInventory.collectDescendents(mMyOutfitsID, cat_array, wearable_array, + LLInventoryModel::EXCLUDE_TRASH); + // Early out if we already have items in My Outfits. + if (cat_array.count() > 0 || wearable_array.count() > 0) + { + mOutfitsPopulated = true; + return; + } + + mClothingID = gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING); + mLibraryClothingID = gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING, false, true); + + // If Library->Clothing->Initial Outfits exists, use that. + LLNameCategoryCollector matchFolderFunctor("Initial Outfits"); + gInventory.collectDescendentsIf(mLibraryClothingID, + cat_array, wearable_array, + LLInventoryModel::EXCLUDE_TRASH, + matchFolderFunctor); + if (cat_array.count() > 0) + { + const LLViewerInventoryCategory *cat = cat_array.get(0); + mLibraryClothingID = cat->getUUID(); + } + + mCompleteFolders.clear(); + + // Get the complete information on the items in the inventory. + uuid_vec_t folders; + folders.push_back(mClothingID); + folders.push_back(mLibraryClothingID); + fetchDescendents(folders); + if (isEverythingComplete()) + { + done(); + } +} + +void LLLibraryOutfitsFetch::outfitsDone(void) +{ + LLInventoryModel::cat_array_t cat_array; + LLInventoryModel::item_array_t wearable_array; + uuid_vec_t folders; + + // Collect the contents of the Library's Clothing folder + gInventory.collectDescendents(mLibraryClothingID, cat_array, wearable_array, + LLInventoryModel::EXCLUDE_TRASH); + + llassert(cat_array.count() > 0); + for (LLInventoryModel::cat_array_t::const_iterator iter = cat_array.begin(); + iter != cat_array.end(); + ++iter) + { + const LLViewerInventoryCategory *cat = iter->get(); + + // Get the names and id's of every outfit in the library, skip "Ruth" + // because it's a low quality legacy outfit + if (cat->getName() != "Ruth") + { + // Get the name of every outfit in the library + folders.push_back(cat->getUUID()); + mLibraryClothingFolders.push_back(cat->getUUID()); + } + } + cat_array.clear(); + wearable_array.clear(); + + // Check if you already have an "Imported Library Clothing" folder + LLNameCategoryCollector matchFolderFunctor(mImportedClothingName); + gInventory.collectDescendentsIf(mClothingID, + cat_array, wearable_array, + LLInventoryModel::EXCLUDE_TRASH, + matchFolderFunctor); + if (cat_array.size() > 0) + { + const LLViewerInventoryCategory *cat = cat_array.get(0); + mImportedClothingID = cat->getUUID(); + } + + mCompleteFolders.clear(); + + fetchDescendents(folders); + if (isEverythingComplete()) + { + done(); + } +} + +class LLLibraryOutfitsCopyDone: public LLInventoryCallback +{ +public: + LLLibraryOutfitsCopyDone(LLLibraryOutfitsFetch * fetcher): + mFireCount(0), mLibraryOutfitsFetcher(fetcher) + { + } + + virtual ~LLLibraryOutfitsCopyDone() + { + if (!LLApp::isExiting() && mLibraryOutfitsFetcher) + { + gInventory.addObserver(mLibraryOutfitsFetcher); + mLibraryOutfitsFetcher->done(); + } + } + + /* virtual */ void fire(const LLUUID& inv_item) + { + mFireCount++; + } +private: + U32 mFireCount; + LLLibraryOutfitsFetch * mLibraryOutfitsFetcher; +}; + +// Copy the clothing folders from the library into the imported clothing folder +void LLLibraryOutfitsFetch::libraryDone(void) +{ + if (mImportedClothingID != LLUUID::null) + { + // Skip straight to fetching the contents of the imported folder + importedFolderFetch(); + return; + } + + // Remove observer; next autopopulation step will be triggered externally by LLLibraryOutfitsCopyDone. + gInventory.removeObserver(this); + + LLPointer<LLInventoryCallback> copy_waiter = new LLLibraryOutfitsCopyDone(this); + mImportedClothingID = gInventory.createNewCategory(mClothingID, + LLFolderType::FT_NONE, + mImportedClothingName); + // Copy each folder from library into clothing unless it already exists. + for (uuid_vec_t::const_iterator iter = mLibraryClothingFolders.begin(); + iter != mLibraryClothingFolders.end(); + ++iter) + { + const LLUUID& src_folder_id = (*iter); // Library clothing folder ID + const LLViewerInventoryCategory *cat = gInventory.getCategory(src_folder_id); + if (!cat) + { + llwarns << "Library folder import for uuid:" << src_folder_id << " failed to find folder." << llendl; + continue; + } + + if (!LLAppearanceMgr::getInstance()->getCanMakeFolderIntoOutfit(src_folder_id)) + { + llinfos << "Skipping non-outfit folder name:" << cat->getName() << llendl; + continue; + } + + // Don't copy the category if it already exists. + LLNameCategoryCollector matchFolderFunctor(cat->getName()); + LLInventoryModel::cat_array_t cat_array; + LLInventoryModel::item_array_t wearable_array; + gInventory.collectDescendentsIf(mImportedClothingID, + cat_array, wearable_array, + LLInventoryModel::EXCLUDE_TRASH, + matchFolderFunctor); + if (cat_array.size() > 0) + { + continue; + } + + LLUUID dst_folder_id = gInventory.createNewCategory(mImportedClothingID, + LLFolderType::FT_NONE, + cat->getName()); + LLAppearanceMgr::getInstance()->shallowCopyCategoryContents(src_folder_id, dst_folder_id, copy_waiter); + } +} + +void LLLibraryOutfitsFetch::importedFolderFetch(void) +{ + // Fetch the contents of the Imported Clothing Folder + uuid_vec_t folders; + folders.push_back(mImportedClothingID); + + mCompleteFolders.clear(); + + fetchDescendents(folders); + if (isEverythingComplete()) + { + done(); + } +} + +void LLLibraryOutfitsFetch::importedFolderDone(void) +{ + LLInventoryModel::cat_array_t cat_array; + LLInventoryModel::item_array_t wearable_array; + uuid_vec_t folders; + + // Collect the contents of the Imported Clothing folder + gInventory.collectDescendents(mImportedClothingID, cat_array, wearable_array, + LLInventoryModel::EXCLUDE_TRASH); + + for (LLInventoryModel::cat_array_t::const_iterator iter = cat_array.begin(); + iter != cat_array.end(); + ++iter) + { + const LLViewerInventoryCategory *cat = iter->get(); + + // Get the name of every imported outfit + folders.push_back(cat->getUUID()); + mImportedClothingFolders.push_back(cat->getUUID()); + } + + mCompleteFolders.clear(); + fetchDescendents(folders); + if (isEverythingComplete()) + { + done(); + } +} + +void LLLibraryOutfitsFetch::contentsDone(void) +{ + LLInventoryModel::cat_array_t cat_array; + LLInventoryModel::item_array_t wearable_array; + + for (uuid_vec_t::const_iterator folder_iter = mImportedClothingFolders.begin(); + folder_iter != mImportedClothingFolders.end(); + ++folder_iter) + { + const LLUUID &folder_id = (*folder_iter); + const LLViewerInventoryCategory *cat = gInventory.getCategory(folder_id); + if (!cat) + { + llwarns << "Library folder import for uuid:" << folder_id << " failed to find folder." << llendl; + continue; + } + + // First, make a folder in the My Outfits directory. + LLUUID new_outfit_folder_id = gInventory.createNewCategory(mMyOutfitsID, LLFolderType::FT_OUTFIT, cat->getName()); + + cat_array.clear(); + wearable_array.clear(); + // Collect the contents of each imported clothing folder, so we can create new outfit links for it + gInventory.collectDescendents(folder_id, cat_array, wearable_array, + LLInventoryModel::EXCLUDE_TRASH); + + for (LLInventoryModel::item_array_t::const_iterator wearable_iter = wearable_array.begin(); + wearable_iter != wearable_array.end(); + ++wearable_iter) + { + const LLViewerInventoryItem *item = wearable_iter->get(); + link_inventory_item(gAgent.getID(), + item->getLinkedUUID(), + new_outfit_folder_id, + item->getName(), + LLAssetType::AT_LINK, + NULL); + } + } + + mOutfitsPopulated = true; +} + diff --git a/indra/newview/llagentwearablesfetch.h b/indra/newview/llagentwearablesfetch.h new file mode 100644 index 0000000000..72063114b8 --- /dev/null +++ b/indra/newview/llagentwearablesfetch.h @@ -0,0 +1,118 @@ +/** + * @file llagentwearablesinitialfetch.h + * @brief LLAgentWearablesInitialFetch class header file + * + * $LicenseInfo:firstyear=2000&license=viewergpl$ + * + * Copyright (c) 2000-2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LL_LLAGENTWEARABLESINITIALFETCH_H +#define LL_LLAGENTWEARABLESINITIALFETCH_H + +#include "llinventoryobserver.h" +#include "llwearabledictionary.h" +#include "lluuid.h" + +//-------------------------------------------------------------------- +// InitialWearablesFetch +// +// This grabs contents from the COF and processes them. +// The processing is handled in idle(), i.e. outside of done(), +// to avoid gInventory.notifyObservers recursion. +//-------------------------------------------------------------------- +class LLInitialWearablesFetch : public LLInventoryFetchDescendentsObserver +{ +public: + LLInitialWearablesFetch(); + ~LLInitialWearablesFetch(); + virtual void done(); + + struct InitialWearableData + { + EWearableType mType; + LLUUID mItemID; + LLUUID mAssetID; + InitialWearableData(EWearableType type, LLUUID& itemID, LLUUID& assetID) : + mType(type), + mItemID(itemID), + mAssetID(assetID) + {} + }; + + void add(InitialWearableData &data); + +protected: + void processWearablesMessage(); + void processContents(); + +private: + typedef std::vector<InitialWearableData> initial_wearable_data_vec_t; + initial_wearable_data_vec_t mAgentInitialWearables; // Wearables from the old agent wearables msg +}; + +//-------------------------------------------------------------------- +// InitialWearablesFetch +// +// This grabs outfits from the Library and copies those over to the user's +// outfits folder, typically during first-ever login. +//-------------------------------------------------------------------- +class LLLibraryOutfitsFetch : public LLInventoryFetchDescendentsObserver +{ +public: + enum ELibraryOutfitFetchStep + { + LOFS_FOLDER = 0, + LOFS_OUTFITS, + LOFS_LIBRARY, + LOFS_IMPORTED, + LOFS_CONTENTS + }; + + LLLibraryOutfitsFetch(); + ~LLLibraryOutfitsFetch(); + + virtual void done(); + void doneIdle(); + LLUUID mMyOutfitsID; + void importedFolderFetch(); +protected: + void folderDone(void); + void outfitsDone(void); + void libraryDone(void); + void importedFolderDone(void); + void contentsDone(void); + enum ELibraryOutfitFetchStep mCurrFetchStep; + uuid_vec_t mLibraryClothingFolders; + uuid_vec_t mImportedClothingFolders; + bool mOutfitsPopulated; + LLUUID mClothingID; + LLUUID mLibraryClothingID; + LLUUID mImportedClothingID; + std::string mImportedClothingName; +}; + +#endif // LL_AGENTWEARABLESINITIALFETCH_H diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index f2d15757c9..8c5352ded7 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -39,6 +39,7 @@ #include "llfloatercustomize.h" #include "llgesturemgr.h" #include "llinventorybridge.h" +#include "llinventoryfunctions.h" #include "llinventoryobserver.h" #include "llnotificationsutil.h" #include "llsidepanelappearance.h" @@ -119,7 +120,7 @@ protected: // If the inventory callback manager goes away, we're shutting down, no longer want the callback. if( LLInventoryCallbackManager::is_instantiated() ) { - LLAppearanceManager::instance().wearInventoryCategoryOnAvatar(gInventory.getCategory(mCatID), mAppend); + LLAppearanceMgr::instance().wearInventoryCategoryOnAvatar(gInventory.getCategory(mCatID), mAppend); } else { @@ -228,7 +229,7 @@ void LLOutfitObserver::doWearCategory() else { // Wear the inventory category. - LLAppearanceManager::instance().wearInventoryCategoryOnAvatar(gInventory.getCategory(mCatID), mAppend); + LLAppearanceMgr::instance().wearInventoryCategoryOnAvatar(gInventory.getCategory(mCatID), mAppend); } delete this; } @@ -312,7 +313,7 @@ LLUpdateAppearanceOnDestroy::~LLUpdateAppearanceOnDestroy() if (!LLApp::isExiting()) { - LLAppearanceManager::instance().updateAppearanceFromCOF(); + LLAppearanceMgr::instance().updateAppearanceFromCOF(); } } @@ -368,6 +369,7 @@ public: void recoverMissingWearable(EWearableType type); void clearCOFLinksForMissingWearables(); + void onWearableAssetFetch(LLWearable *wearable); void onAllComplete(); typedef std::list<LLFoundData> found_list_t; @@ -399,7 +401,7 @@ bool LLWearableHoldingPattern::isFetchCompleted() bool LLWearableHoldingPattern::isTimedOut() { - static F32 max_wait_time = 20.0; // give up if wearable fetches haven't completed in max_wait_time seconds. + static F32 max_wait_time = 60.0; // give up if wearable fetches haven't completed in max_wait_time seconds. return mWaitTime.getElapsedTimeF32() > max_wait_time; } @@ -450,12 +452,12 @@ void LLWearableHoldingPattern::onAllComplete() { llinfos << "Activating " << mGestItems.count() << " gestures" << llendl; - LLGestureManager::instance().activateGestures(mGestItems); + LLGestureMgr::instance().activateGestures(mGestItems); // Update the inventory item labels to reflect the fact // they are active. LLViewerInventoryCategory* catp = - gInventory.getCategory(LLAppearanceManager::instance().getCOF()); + gInventory.getCategory(LLAppearanceMgr::instance().getCOF()); if (catp) { @@ -466,11 +468,10 @@ void LLWearableHoldingPattern::onAllComplete() // Update wearables. llinfos << "Updating agent wearables with " << mResolved << " wearable items " << llendl; - LLAppearanceManager::instance().updateAgentWearables(this, false); + LLAppearanceMgr::instance().updateAgentWearables(this, false); // Update attachments to match those requested. - LLVOAvatar* avatar = gAgent.getAvatarObject(); - if( avatar ) + if (isAgentAvatarValid()) { llinfos << "Updating " << mObjItems.count() << " attachments" << llendl; LLAgentWearables::userUpdateAttachments(mObjItems); @@ -581,7 +582,7 @@ public: { link_inventory_item( gAgent.getID(), item_id, - LLAppearanceManager::instance().getCOF(), + LLAppearanceMgr::instance().getCOF(), itemp->getName(), LLAssetType::AT_LINK, cb); @@ -632,7 +633,7 @@ void LLWearableHoldingPattern::clearCOFLinksForMissingWearables() { // Wearable link that was never resolved; remove links to it from COF llinfos << "removing link for unresolved item " << data.mItemID.asString() << llendl; - LLAppearanceManager::instance().removeCOFItemLinks(data.mItemID,false); + LLAppearanceMgr::instance().removeCOFItemLinks(data.mItemID,false); } } } @@ -657,11 +658,10 @@ bool LLWearableHoldingPattern::pollMissingWearables() return done; } -static void onWearableAssetFetch(LLWearable* wearable, void* data) +void LLWearableHoldingPattern::onWearableAssetFetch(LLWearable *wearable) { - LLWearableHoldingPattern* holder = (LLWearableHoldingPattern*)data; - holder->mResolved += 1; // just counting callbacks, not successes. - llinfos << "onWearableAssetFetch, resolved count " << holder->mResolved << " of requested " << holder->mFoundList.size() << llendl; + mResolved += 1; // just counting callbacks, not successes. + llinfos << "onWearableAssetFetch, resolved count " << mResolved << " of requested " << mFoundList.size() << llendl; if (wearable) { llinfos << "wearable found, type " << wearable->getType() << " asset " << wearable->getAssetID() << llendl; @@ -671,7 +671,7 @@ static void onWearableAssetFetch(LLWearable* wearable, void* data) llwarns << "no wearable found" << llendl; } - if (holder->mFired) + if (mFired) { llwarns << "called after holder fired" << llendl; return; @@ -682,8 +682,8 @@ static void onWearableAssetFetch(LLWearable* wearable, void* data) return; } - for (LLWearableHoldingPattern::found_list_t::iterator iter = holder->mFoundList.begin(); - iter != holder->mFoundList.end(); ++iter) + for (LLWearableHoldingPattern::found_list_t::iterator iter = mFoundList.begin(); + iter != mFoundList.end(); ++iter) { LLFoundData& data = *iter; if(wearable->getAssetID() == data.mAssetID) @@ -696,6 +696,12 @@ static void onWearableAssetFetch(LLWearable* wearable, void* data) } } +static void onWearableAssetFetch(LLWearable* wearable, void* data) +{ + LLWearableHoldingPattern* holder = (LLWearableHoldingPattern*)data; + holder->onWearableAssetFetch(wearable); +} + static void removeDuplicateItems(LLInventoryModel::item_array_t& items) { @@ -724,13 +730,13 @@ static void removeDuplicateItems(LLInventoryModel::item_array_t& items) items = new_items; } -const LLUUID LLAppearanceManager::getCOF() const +const LLUUID LLAppearanceMgr::getCOF() const { return gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT); } -const LLViewerInventoryItem* LLAppearanceManager::getBaseOutfitLink() +const LLViewerInventoryItem* LLAppearanceMgr::getBaseOutfitLink() { const LLUUID& current_outfit_cat = getCOF(); LLInventoryModel::cat_array_t cat_array; @@ -758,7 +764,7 @@ const LLViewerInventoryItem* LLAppearanceManager::getBaseOutfitLink() return NULL; } -bool LLAppearanceManager::getBaseOutfitName(std::string& name) +bool LLAppearanceMgr::getBaseOutfitName(std::string& name) { const LLViewerInventoryItem* outfit_link = getBaseOutfitLink(); if(outfit_link) @@ -774,15 +780,15 @@ bool LLAppearanceManager::getBaseOutfitName(std::string& name) } // Update appearance from outfit folder. -void LLAppearanceManager::changeOutfit(bool proceed, const LLUUID& category, bool append) +void LLAppearanceMgr::changeOutfit(bool proceed, const LLUUID& category, bool append) { if (!proceed) return; - LLAppearanceManager::instance().updateCOF(category,append); + LLAppearanceMgr::instance().updateCOF(category,append); } // Create a copy of src_id + contents as a subfolder of dst_id. -void LLAppearanceManager::shallowCopyCategory(const LLUUID& src_id, const LLUUID& dst_id, +void LLAppearanceMgr::shallowCopyCategory(const LLUUID& src_id, const LLUUID& dst_id, LLPointer<LLInventoryCallback> cb) { LLInventoryCategory *src_cat = gInventory.getCategory(src_id); @@ -805,7 +811,7 @@ void LLAppearanceManager::shallowCopyCategory(const LLUUID& src_id, const LLUUID } // Copy contents of src_id to dst_id. -void LLAppearanceManager::shallowCopyCategoryContents(const LLUUID& src_id, const LLUUID& dst_id, +void LLAppearanceMgr::shallowCopyCategoryContents(const LLUUID& src_id, const LLUUID& dst_id, LLPointer<LLInventoryCallback> cb) { LLInventoryModel::cat_array_t* cats; @@ -861,7 +867,7 @@ void LLAppearanceManager::shallowCopyCategoryContents(const LLUUID& src_id, cons } } -BOOL LLAppearanceManager::getCanMakeFolderIntoOutfit(const LLUUID& folder_id) +BOOL LLAppearanceMgr::getCanMakeFolderIntoOutfit(const LLUUID& folder_id) { // These are the wearable items that are required for considering this // folder as containing a complete outfit. @@ -893,7 +899,7 @@ BOOL LLAppearanceManager::getCanMakeFolderIntoOutfit(const LLUUID& folder_id) } -void LLAppearanceManager::purgeBaseOutfitLink(const LLUUID& category) +void LLAppearanceMgr::purgeBaseOutfitLink(const LLUUID& category) { LLInventoryModel::cat_array_t cats; LLInventoryModel::item_array_t items; @@ -915,7 +921,7 @@ void LLAppearanceManager::purgeBaseOutfitLink(const LLUUID& category) } } -void LLAppearanceManager::purgeCategory(const LLUUID& category, bool keep_outfit_links) +void LLAppearanceMgr::purgeCategory(const LLUUID& category, bool keep_outfit_links) { LLInventoryModel::cat_array_t cats; LLInventoryModel::item_array_t items; @@ -935,7 +941,7 @@ void LLAppearanceManager::purgeCategory(const LLUUID& category, bool keep_outfit // Keep the last N wearables of each type. For viewer 2.0, N is 1 for // both body parts and clothing items. -void LLAppearanceManager::filterWearableItems( +void LLAppearanceMgr::filterWearableItems( LLInventoryModel::item_array_t& items, S32 max_per_type) { // Divvy items into arrays by wearable type. @@ -971,7 +977,7 @@ void LLAppearanceManager::filterWearableItems( } // Create links to all listed items. -void LLAppearanceManager::linkAll(const LLUUID& category, +void LLAppearanceMgr::linkAll(const LLUUID& category, LLInventoryModel::item_array_t& items, LLPointer<LLInventoryCallback> cb) { @@ -987,7 +993,7 @@ void LLAppearanceManager::linkAll(const LLUUID& category, } } -void LLAppearanceManager::updateCOF(const LLUUID& category, bool append) +void LLAppearanceMgr::updateCOF(const LLUUID& category, bool append) { LLViewerInventoryCategory *pcat = gInventory.getCategory(category); llinfos << "starting, cat " << (pcat ? pcat->getName() : "[UNKNOWN]") << llendl; @@ -1002,9 +1008,9 @@ void LLAppearanceManager::updateCOF(const LLUUID& category, bool append) for(S32 i = 0; i < gest_items.count(); ++i) { LLViewerInventoryItem *gest_item = gest_items.get(i); - if ( LLGestureManager::instance().isGestureActive( gest_item->getLinkedUUID()) ) + if ( LLGestureMgr::instance().isGestureActive( gest_item->getLinkedUUID()) ) { - LLGestureManager::instance().deactivateGesture( gest_item->getLinkedUUID() ); + LLGestureMgr::instance().deactivateGesture( gest_item->getLinkedUUID() ); } } } @@ -1027,7 +1033,7 @@ void LLAppearanceManager::updateCOF(const LLUUID& category, bool append) getDescendentsOfAssetType(category, wear_items, LLAssetType::AT_CLOTHING, false); // Reduce wearables to max of one per type. removeDuplicateItems(wear_items); - filterWearableItems(wear_items, 1); + filterWearableItems(wear_items, 5); // - Attachments: include COF contents only if appending. LLInventoryModel::item_array_t obj_items; @@ -1065,7 +1071,7 @@ void LLAppearanceManager::updateCOF(const LLUUID& category, bool append) llinfos << "waiting for LLUpdateAppearanceOnDestroy" << llendl; } -void LLAppearanceManager::updatePanelOutfitName(const std::string& name) +void LLAppearanceMgr::updatePanelOutfitName(const std::string& name) { LLSidepanelAppearance* panel_appearance = dynamic_cast<LLSidepanelAppearance *>(LLSideTray::getInstance()->getPanel("sidepanel_appearance")); @@ -1075,7 +1081,7 @@ void LLAppearanceManager::updatePanelOutfitName(const std::string& name) } } -void LLAppearanceManager::createBaseOutfitLink(const LLUUID& category, LLPointer<LLInventoryCallback> link_waiter) +void LLAppearanceMgr::createBaseOutfitLink(const LLUUID& category, LLPointer<LLInventoryCallback> link_waiter) { const LLUUID cof = getCOF(); LLViewerInventoryCategory* catp = gInventory.getCategory(category); @@ -1093,7 +1099,7 @@ void LLAppearanceManager::createBaseOutfitLink(const LLUUID& category, LLPointer updatePanelOutfitName(new_outfit_name); } -void LLAppearanceManager::updateAgentWearables(LLWearableHoldingPattern* holder, bool append) +void LLAppearanceMgr::updateAgentWearables(LLWearableHoldingPattern* holder, bool append) { lldebugs << "updateAgentWearables()" << llendl; LLInventoryItem::item_array_t items; @@ -1117,7 +1123,6 @@ void LLAppearanceManager::updateAgentWearables(LLWearableHoldingPattern* holder, items.put(item); wearables.put(wearable); } - break; } } } @@ -1146,7 +1151,7 @@ static void remove_non_link_items(LLInventoryModel::item_array_t &items) items = pruned_items; } -void LLAppearanceManager::updateAppearanceFromCOF() +void LLAppearanceMgr::updateAppearanceFromCOF() { // update dirty flag to see if the state of the COF matches // the saved outfit stored as a folder link @@ -1160,7 +1165,7 @@ void LLAppearanceManager::updateAppearanceFromCOF() LLUUID current_outfit_id = getCOF(); // Find all the wearables that are in the COF's subtree. - lldebugs << "LLAppearanceManager::updateFromCOF()" << llendl; + lldebugs << "LLAppearanceMgr::updateFromCOF()" << llendl; LLInventoryModel::item_array_t wear_items; LLInventoryModel::item_array_t obj_items; LLInventoryModel::item_array_t gest_items; @@ -1186,9 +1191,6 @@ void LLAppearanceManager::updateAppearanceFromCOF() // callback will be called (and this object deleted) // before the final getNextData(). - // BAP future cleanup - no point having found_container when - // mFoundList already has all the info. - LLDynamicArray<LLFoundData> found_container; for(S32 i = 0; i < wear_items.count(); ++i) { LLViewerInventoryItem *item = wear_items.get(i); @@ -1214,7 +1216,6 @@ void LLAppearanceManager::updateAppearanceFromCOF() #endif holder->mFoundList.push_front(found); - found_container.put(found); } else { @@ -1229,9 +1230,10 @@ void LLAppearanceManager::updateAppearanceFromCOF() } } - for(S32 i = 0; i < found_container.count(); ++i) + for (LLWearableHoldingPattern::found_list_t::iterator it = holder->mFoundList.begin(); + it != holder->mFoundList.end(); ++it) { - LLFoundData& found = found_container.get(i); + LLFoundData& found = *it; llinfos << "waiting for onWearableAssetFetch callback, asset " << found.mAssetID.asString() << llendl; @@ -1248,10 +1250,9 @@ void LLAppearanceManager::updateAppearanceFromCOF() { doOnIdleRepeating(boost::bind(&LLWearableHoldingPattern::pollFetchCompletion,holder)); } - } -void LLAppearanceManager::getDescendentsOfAssetType(const LLUUID& category, +void LLAppearanceMgr::getDescendentsOfAssetType(const LLUUID& category, LLInventoryModel::item_array_t& items, LLAssetType::EType type, bool follow_folder_links) @@ -1266,7 +1267,7 @@ void LLAppearanceManager::getDescendentsOfAssetType(const LLUUID& category, follow_folder_links); } -void LLAppearanceManager::getUserDescendents(const LLUUID& category, +void LLAppearanceMgr::getUserDescendents(const LLUUID& category, LLInventoryModel::item_array_t& wear_items, LLInventoryModel::item_array_t& obj_items, LLInventoryModel::item_array_t& gest_items, @@ -1301,7 +1302,7 @@ void LLAppearanceManager::getUserDescendents(const LLUUID& category, follow_folder_links); } -void LLAppearanceManager::wearInventoryCategory(LLInventoryCategory* category, bool copy, bool append) +void LLAppearanceMgr::wearInventoryCategory(LLInventoryCategory* category, bool copy, bool append) { if(!category) return; @@ -1312,7 +1313,7 @@ void LLAppearanceManager::wearInventoryCategory(LLInventoryCategory* category, b // the inventory, and set up an observer that will wait for that to // happen. LLOutfitFetch* outfit_fetcher = new LLOutfitFetch(copy, append); - LLInventoryFetchDescendentsObserver::folder_ref_t folders; + uuid_vec_t folders; folders.push_back(category->getUUID()); outfit_fetcher->fetchDescendents(folders); //inc_busy_count(); @@ -1330,7 +1331,7 @@ void LLAppearanceManager::wearInventoryCategory(LLInventoryCategory* category, b } // *NOTE: hack to get from avatar inventory to avatar -void LLAppearanceManager::wearInventoryCategoryOnAvatar( LLInventoryCategory* category, bool append ) +void LLAppearanceMgr::wearInventoryCategoryOnAvatar( LLInventoryCategory* category, bool append ) { // Avoid unintentionally overwriting old wearables. We have to do // this up front to avoid having to deal with the case of multiple @@ -1342,17 +1343,17 @@ void LLAppearanceManager::wearInventoryCategoryOnAvatar( LLInventoryCategory* ca if( gFloaterCustomize ) { - gFloaterCustomize->askToSaveIfDirty(boost::bind(&LLAppearanceManager::changeOutfit, - &LLAppearanceManager::instance(), + gFloaterCustomize->askToSaveIfDirty(boost::bind(&LLAppearanceMgr::changeOutfit, + &LLAppearanceMgr::instance(), _1, category->getUUID(), append)); } else { - LLAppearanceManager::changeOutfit(TRUE, category->getUUID(), append); + LLAppearanceMgr::changeOutfit(TRUE, category->getUUID(), append); } } -void LLAppearanceManager::wearOutfitByName(const std::string& name) +void LLAppearanceMgr::wearOutfitByName(const std::string& name) { llinfos << "Wearing category " << name << llendl; //inc_busy_count(); @@ -1388,7 +1389,7 @@ void LLAppearanceManager::wearOutfitByName(const std::string& name) if(cat) { - LLAppearanceManager::wearInventoryCategory(cat, copy_items, false); + LLAppearanceMgr::wearInventoryCategory(cat, copy_items, false); } else { @@ -1424,7 +1425,7 @@ public: if (item) { gInventory.removeObserver(this); - LLAppearanceManager::instance().addCOFItemLink(item,mDoUpdate); + LLAppearanceMgr::instance().addCOFItemLink(item,mDoUpdate); delete this; } } @@ -1435,7 +1436,7 @@ private: }; -void LLAppearanceManager::addCOFItemLink(const LLUUID &item_id, bool do_update ) +void LLAppearanceMgr::addCOFItemLink(const LLUUID &item_id, bool do_update ) { const LLInventoryItem *item = gInventory.getItem(item_id); if (!item) @@ -1449,7 +1450,7 @@ void LLAppearanceManager::addCOFItemLink(const LLUUID &item_id, bool do_update ) } } -void LLAppearanceManager::addCOFItemLink(const LLInventoryItem *item, bool do_update ) +void LLAppearanceMgr::addCOFItemLink(const LLInventoryItem *item, bool do_update ) { const LLViewerInventoryItem *vitem = dynamic_cast<const LLViewerInventoryItem*>(item); if (!vitem) @@ -1462,7 +1463,7 @@ void LLAppearanceManager::addCOFItemLink(const LLInventoryItem *item, bool do_up LLInventoryModel::cat_array_t cat_array; LLInventoryModel::item_array_t item_array; - gInventory.collectDescendents(LLAppearanceManager::getCOF(), + gInventory.collectDescendents(LLAppearanceMgr::getCOF(), cat_array, item_array, LLInventoryModel::EXCLUDE_TRASH); @@ -1490,7 +1491,7 @@ void LLAppearanceManager::addCOFItemLink(const LLInventoryItem *item, bool do_up { if (do_update) { - LLAppearanceManager::updateAppearanceFromCOF(); + LLAppearanceMgr::updateAppearanceFromCOF(); } return; } @@ -1507,7 +1508,8 @@ void LLAppearanceManager::addCOFItemLink(const LLInventoryItem *item, bool do_up return; } -void LLAppearanceManager::addEnsembleLink( LLInventoryCategory* cat, bool do_update ) +// BAP remove ensemble code for 2.1? +void LLAppearanceMgr::addEnsembleLink( LLInventoryCategory* cat, bool do_update ) { #if SUPPORT_ENSEMBLES // BAP add check for already in COF. @@ -1521,13 +1523,13 @@ void LLAppearanceManager::addEnsembleLink( LLInventoryCategory* cat, bool do_upd #endif } -void LLAppearanceManager::removeCOFItemLinks(const LLUUID& item_id, bool do_update) +void LLAppearanceMgr::removeCOFItemLinks(const LLUUID& item_id, bool do_update) { gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id); LLInventoryModel::cat_array_t cat_array; LLInventoryModel::item_array_t item_array; - gInventory.collectDescendents(LLAppearanceManager::getCOF(), + gInventory.collectDescendents(LLAppearanceMgr::getCOF(), cat_array, item_array, LLInventoryModel::EXCLUDE_TRASH); @@ -1541,11 +1543,11 @@ void LLAppearanceManager::removeCOFItemLinks(const LLUUID& item_id, bool do_upda } if (do_update) { - LLAppearanceManager::updateAppearanceFromCOF(); + LLAppearanceMgr::updateAppearanceFromCOF(); } } -void LLAppearanceManager::updateIsDirty() +void LLAppearanceMgr::updateIsDirty() { LLUUID cof = getCOF(); LLUUID base_outfit; @@ -1614,7 +1616,7 @@ void LLAppearanceManager::updateIsDirty() } } -void LLAppearanceManager::onFirstFullyVisible() +void LLAppearanceMgr::onFirstFullyVisible() { // If this is the very first time the user has logged into viewer2+ (from a legacy viewer, or new account) // then auto-populate outfits from the library into the My Outfits folder. @@ -1633,7 +1635,7 @@ void LLAppearanceManager::onFirstFullyVisible() //#define DUMP_CAT_VERBOSE -void LLAppearanceManager::dumpCat(const LLUUID& cat_id, const std::string& msg) +void LLAppearanceMgr::dumpCat(const LLUUID& cat_id, const std::string& msg) { LLInventoryModel::cat_array_t cats; LLInventoryModel::item_array_t items; @@ -1654,7 +1656,7 @@ void LLAppearanceManager::dumpCat(const LLUUID& cat_id, const std::string& msg) llinfos << msg << " count " << items.count() << llendl; } -void LLAppearanceManager::dumpItemArray(const LLInventoryModel::item_array_t& items, +void LLAppearanceMgr::dumpItemArray(const LLInventoryModel::item_array_t& items, const std::string& msg) { llinfos << msg << llendl; @@ -1666,17 +1668,17 @@ void LLAppearanceManager::dumpItemArray(const LLInventoryModel::item_array_t& it llinfos << llendl; } -LLAppearanceManager::LLAppearanceManager(): +LLAppearanceMgr::LLAppearanceMgr(): mAttachmentInvLinkEnabled(false), mOutfitIsDirty(false) { } -LLAppearanceManager::~LLAppearanceManager() +LLAppearanceMgr::~LLAppearanceMgr() { } -void LLAppearanceManager::setAttachmentInvLinkEnable(bool val) +void LLAppearanceMgr::setAttachmentInvLinkEnable(bool val) { llinfos << "setAttachmentInvLinkEnable => " << (int) val << llendl; mAttachmentInvLinkEnabled = val; @@ -1699,7 +1701,7 @@ void dumpAttachmentSet(const std::set<LLUUID>& atts, const std::string& msg) llinfos << llendl; } -void LLAppearanceManager::registerAttachment(const LLUUID& item_id) +void LLAppearanceMgr::registerAttachment(const LLUUID& item_id) { mRegisteredAttachments.insert(item_id); gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id); @@ -1707,7 +1709,7 @@ void LLAppearanceManager::registerAttachment(const LLUUID& item_id) if (mAttachmentInvLinkEnabled) { - LLAppearanceManager::addCOFItemLink(item_id, false); // Add COF link for item. + LLAppearanceMgr::addCOFItemLink(item_id, false); // Add COF link for item. } else { @@ -1715,7 +1717,7 @@ void LLAppearanceManager::registerAttachment(const LLUUID& item_id) } } -void LLAppearanceManager::unregisterAttachment(const LLUUID& item_id) +void LLAppearanceMgr::unregisterAttachment(const LLUUID& item_id) { mRegisteredAttachments.erase(item_id); gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id); @@ -1724,8 +1726,8 @@ void LLAppearanceManager::unregisterAttachment(const LLUUID& item_id) if (mAttachmentInvLinkEnabled) { - //LLAppearanceManager::dumpCat(LLAppearanceManager::getCOF(),"Removing attachment link:"); - LLAppearanceManager::removeCOFItemLinks(item_id, false); + //LLAppearanceMgr::dumpCat(LLAppearanceMgr::getCOF(),"Removing attachment link:"); + LLAppearanceMgr::removeCOFItemLinks(item_id, false); } else { @@ -1733,7 +1735,7 @@ void LLAppearanceManager::unregisterAttachment(const LLUUID& item_id) } } -void LLAppearanceManager::linkRegisteredAttachments() +void LLAppearanceMgr::linkRegisteredAttachments() { for (std::set<LLUUID>::iterator it = mRegisteredAttachments.begin(); it != mRegisteredAttachments.end(); @@ -1745,12 +1747,12 @@ void LLAppearanceManager::linkRegisteredAttachments() mRegisteredAttachments.clear(); } -BOOL LLAppearanceManager::getIsInCOF(const LLUUID& obj_id) const +BOOL LLAppearanceMgr::getIsInCOF(const LLUUID& obj_id) const { return gInventory.isObjectDescendentOf(obj_id, getCOF()); } -BOOL LLAppearanceManager::getIsProtectedCOFItem(const LLUUID& obj_id) const +BOOL LLAppearanceMgr::getIsProtectedCOFItem(const LLUUID& obj_id) const { if (!getIsInCOF(obj_id)) return FALSE; diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h index 9d6cd34ad7..2d6a0a10ed 100644 --- a/indra/newview/llappearancemgr.h +++ b/indra/newview/llappearancemgr.h @@ -43,9 +43,9 @@ class LLWearable; class LLWearableHoldingPattern; class LLInventoryCallback; -class LLAppearanceManager: public LLSingleton<LLAppearanceManager> +class LLAppearanceMgr: public LLSingleton<LLAppearanceMgr> { - friend class LLSingleton<LLAppearanceManager>; + friend class LLSingleton<LLAppearanceMgr>; public: void updateAppearanceFromCOF(); @@ -120,8 +120,8 @@ public: void onFirstFullyVisible(); protected: - LLAppearanceManager(); - ~LLAppearanceManager(); + LLAppearanceMgr(); + ~LLAppearanceMgr(); private: @@ -324,7 +324,7 @@ template <class T> void callAfterCategoryFetch(const LLUUID& cat_id, T callable) { CallAfterCategoryFetchStage1<T> *stage1 = new CallAfterCategoryFetchStage1<T>(callable); - LLInventoryFetchDescendentsObserver::folder_ref_t folders; + uuid_vec_t folders; folders.push_back(cat_id); stage1->fetchDescendents(folders); if (stage1->isEverythingComplete()) diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 2384e6c5ba..43c8c679c6 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -44,6 +44,7 @@ #include "llviewertexturelist.h" #include "llgroupmgr.h" #include "llagent.h" +#include "llagentcamera.h" #include "llagentwearables.h" #include "llwindow.h" #include "llviewerstats.h" @@ -78,6 +79,7 @@ #include "lllocationhistory.h" #include "llfasttimerview.h" #include "llvoicechannel.h" +#include "llvoavatarself.h" #include "llsidetray.h" @@ -304,10 +306,7 @@ static std::string gLaunchFileOnQuit; // Used on Win32 for other apps to identify our window (eg, win_setup) const char* const VIEWER_WINDOW_CLASSNAME = "Second Life"; -static const S32 FIRST_RUN_WINDOW_WIDTH = 1024; -//should account for Windows task bar -static const S32 FIRST_RUN_WINDOW_HIGHT = 738; //---------------------------------------------------------------------------- // List of entries from strings.xml to always replace @@ -358,7 +357,7 @@ void request_initial_instant_messages() if (!requested && gMessageSystem && LLMuteList::getInstance()->isLoaded() - && gAgent.getAvatarObject()) + && isAgentAvatarValid()) { // Auto-accepted inventory items may require the avatar object // to build a correct name. Likewise, inventory offers from @@ -1110,12 +1109,15 @@ bool LLAppViewer::mainLoop() ms_sleep(500); } - + static const F64 FRAME_SLOW_THRESHOLD = 0.5; //2 frames per seconds const F64 min_frame_time = 0.0; //(.0333 - .0010); // max video frame rate = 30 fps const F64 min_idle_time = 0.0; //(.0010); // min idle time = 1 ms const F64 max_idle_time = run_multiple_threads ? min_idle_time : llmin(.005*10.0*gFrameTimeSeconds, 0.005); // 5 ms a second idleTimer.reset(); - while(1) + bool is_slow = (frameTimer.getElapsedTimeF64() > FRAME_SLOW_THRESHOLD) ; + S32 total_work_pending = 0; + S32 total_io_pending = 0; + while(!is_slow)//do not unpause threads if the frame rates are very low. { S32 work_pending = 0; S32 io_pending = 0; @@ -1146,6 +1148,8 @@ bool LLAppViewer::mainLoop() ms_sleep(llmin(io_pending/100,100)); // give the vfs some time to catch up } + total_work_pending += work_pending ; + total_io_pending += io_pending ; F64 frame_time = frameTimer.getElapsedTimeF64(); F64 idle_time = idleTimer.getElapsedTimeF64(); if (frame_time >= min_frame_time && @@ -1155,25 +1159,32 @@ bool LLAppViewer::mainLoop() break; } } - if ((LLStartUp::getStartupState() >= STATE_CLEANUP) && - (frameTimer.getElapsedTimeF64() > FRAME_STALL_THRESHOLD)) - { - gFrameStalls++; - } - frameTimer.reset(); // Prevent the worker threads from running while rendering. // if (LLThread::processorCount()==1) //pause() should only be required when on a single processor client... if (run_multiple_threads == FALSE) { - LLFastTimer ftm(FTM_PAUSE_THREADS); - - LLAppViewer::getTextureCache()->pause(); - LLAppViewer::getImageDecodeThread()->pause(); - // LLAppViewer::getTextureFetch()->pause(); // Don't pause the fetch (IO) thread + //LLFastTimer ftm(FTM_PAUSE_THREADS); //not necessary. + + if(!total_work_pending) //pause texture fetching threads if nothing to process. + { + LLAppViewer::getTextureCache()->pause(); + LLAppViewer::getImageDecodeThread()->pause(); + LLAppViewer::getTextureFetch()->pause(); + } + if(!total_io_pending) //pause file threads if nothing to process. + { + LLVFSThread::sLocal->pause(); + LLLFSThread::sLocal->pause(); + } + } + + if ((LLStartUp::getStartupState() >= STATE_CLEANUP) && + (frameTimer.getElapsedTimeF64() > FRAME_STALL_THRESHOLD)) + { + gFrameStalls++; } - //LLVFSThread::sLocal->pause(); // Prevent the VFS thread from running while rendering. - //LLLFSThread::sLocal->pause(); // Prevent the LFS thread from running while rendering. + frameTimer.reset(); resumeMainloopTimeout(); @@ -1516,6 +1527,8 @@ bool LLAppViewer::cleanup() LLLocationHistory::getInstance()->save(); LLAvatarIconIDCache::getInstance()->save(); + + LLViewerMedia::saveCookieFile(); llinfos << "Shutting down Threads" << llendflush; @@ -1636,7 +1649,7 @@ bool LLAppViewer::cleanup() // HACK: Attempt to wait until the screen res. switch is complete. ms_sleep(1000); - LLWeb::loadURLExternal( gLaunchFileOnQuit ); + LLWeb::loadURLExternal( gLaunchFileOnQuit, false ); llinfos << "File launched." << llendflush; } @@ -2374,35 +2387,12 @@ bool LLAppViewer::initWindow() // store setting in a global for easy access and modification gNoRender = gSavedSettings.getBOOL("DisableRendering"); - S32 window_x = gSavedSettings.getS32("WindowX"); - S32 window_y = gSavedSettings.getS32("WindowY"); - S32 window_width = gSavedSettings.getS32("WindowWidth"); - S32 window_height = gSavedSettings.getS32("WindowHeight"); - - bool show_maximized = gSavedSettings.getBOOL("WindowMaximized"); - - bool first_run = gSavedSettings.getBOOL("FirstLoginThisInstall"); - - if (first_run)//for first login - { - window_width = FIRST_RUN_WINDOW_WIDTH;//yep hardcoded - window_height = FIRST_RUN_WINDOW_HIGHT; - - //if screen resolution is lower then first run width/height then show maximized - LLDisplayInfo display_info; - if(display_info.getDisplayWidth() <= FIRST_RUN_WINDOW_WIDTH - || display_info.getDisplayHeight()<=FIRST_RUN_WINDOW_HIGHT) - { - show_maximized = true; - } - } - // always start windowed BOOL ignorePixelDepth = gSavedSettings.getBOOL("IgnorePixelDepth"); gViewerWindow = new LLViewerWindow(gWindowTitle, VIEWER_WINDOW_CLASSNAME, - window_x, window_y, - window_width, window_height, + gSavedSettings.getS32("WindowX"), gSavedSettings.getS32("WindowY"), + gSavedSettings.getS32("WindowWidth"), gSavedSettings.getS32("WindowHeight"), FALSE, ignorePixelDepth); LLNotificationsUI::LLNotificationManager::getInstance(); @@ -2413,7 +2403,7 @@ bool LLAppViewer::initWindow() gViewerWindow->toggleFullscreen(FALSE); } - if (show_maximized) + if (gSavedSettings.getBOOL("WindowMaximized")) { gViewerWindow->mWindow->maximize(); gViewerWindow->getWindow()->setNativeAspectRatio(gSavedSettings.getF32("FullScreenAspectRatio")); @@ -2508,9 +2498,9 @@ void LLAppViewer::cleanupSavedSettings() gSavedSettings.setF32("MapScale", LLWorldMapView::sMapScale ); // Some things are cached in LLAgent. - if (gAgent.mInitialized) + if (gAgent.isInitialized()) { - gSavedSettings.setF32("RenderFarClip", gAgent.mDrawDistance); + gSavedSettings.setF32("RenderFarClip", gAgentCamera.mDrawDistance); } } @@ -3345,10 +3335,10 @@ void LLAppViewer::saveFinalSnapshot() { if (!mSavedFinalSnapshot && !gNoRender) { - gSavedSettings.setVector3d("FocusPosOnLogout", gAgent.calcFocusPositionTargetGlobal()); - gSavedSettings.setVector3d("CameraPosOnLogout", gAgent.calcCameraPositionTargetGlobal()); + gSavedSettings.setVector3d("FocusPosOnLogout", gAgentCamera.calcFocusPositionTargetGlobal()); + gSavedSettings.setVector3d("CameraPosOnLogout", gAgentCamera.calcCameraPositionTargetGlobal()); gViewerWindow->setCursor(UI_CURSOR_WAIT); - gAgent.changeCameraToThirdPerson( FALSE ); // don't animate, need immediate switch + gAgentCamera.changeCameraToThirdPerson( FALSE ); // don't animate, need immediate switch gSavedSettings.setBOOL("ShowParcelOwners", FALSE); idle(); @@ -3630,7 +3620,7 @@ void LLAppViewer::idle() // Handle pending gesture processing static LLFastTimer::DeclareTimer ftm("Agent Position"); LLFastTimer t(ftm); - LLGestureManager::instance().update(); + LLGestureMgr::instance().update(); gAgent.updateAgentPosition(gFrameDTClamped, yaw, current_mouse.mX, current_mouse.mY); } @@ -3758,7 +3748,7 @@ void LLAppViewer::idle() LLViewerJoystick::getInstance()->moveObjects(); } - gAgent.updateCamera(); + gAgentCamera.updateCamera(); } // update media focus @@ -4092,7 +4082,7 @@ void LLAppViewer::disconnectViewer() LLFloaterInventory::cleanup(); gAgentWearables.cleanup(); - + gAgentCamera.cleanup(); // Also writes cached agent settings to gSavedSettings gAgent.cleanup(); diff --git a/indra/newview/llappviewerwin32.cpp b/indra/newview/llappviewerwin32.cpp index 63d9ed19ad..60a6d2f072 100644 --- a/indra/newview/llappviewerwin32.cpp +++ b/indra/newview/llappviewerwin32.cpp @@ -469,7 +469,7 @@ bool LLAppViewerWin32::initHardwareTest() if (OSBTN_NO== button) { LL_INFOS("AppInit") << "User quitting after failed DirectX 9 detection" << LL_ENDL; - LLWeb::loadURLExternal(DIRECTX_9_URL); + LLWeb::loadURLExternal(DIRECTX_9_URL, false); return false; } gWarningSettings.setBOOL("AboutDirectX9", FALSE); diff --git a/indra/newview/llassetuploadresponders.cpp b/indra/newview/llassetuploadresponders.cpp index 80cf8f1d61..370ecc0665 100644 --- a/indra/newview/llassetuploadresponders.cpp +++ b/indra/newview/llassetuploadresponders.cpp @@ -182,7 +182,10 @@ void LLAssetUploadResponder::uploadFailure(const LLSD& content) // deal with L$ errors if (reason == "insufficient funds") { - LLFloaterBuyCurrency::buyCurrency(LLTrans::getString("uploading_costs"), LLGlobalEconomy::Singleton::getInstance()->getPriceUpload()); + S32 price = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload(); + LLStringUtil::format_map_t args; + args["AMOUNT"] = llformat("%d", price); + LLFloaterBuyCurrency::buyCurrency(LLTrans::getString("uploading_costs", args), price); } else { @@ -199,13 +202,19 @@ void LLAssetUploadResponder::uploadComplete(const LLSD& content) LLNewAgentInventoryResponder::LLNewAgentInventoryResponder(const LLSD& post_data, const LLUUID& vfile_id, - LLAssetType::EType asset_type) -: LLAssetUploadResponder(post_data, vfile_id, asset_type) + LLAssetType::EType asset_type, + boost::function<void(const LLUUID& uuid)> callback) +: LLAssetUploadResponder(post_data, vfile_id, asset_type), + mCallback(callback) { } -LLNewAgentInventoryResponder::LLNewAgentInventoryResponder(const LLSD& post_data, const std::string& file_name, LLAssetType::EType asset_type) -: LLAssetUploadResponder(post_data, file_name, asset_type) +LLNewAgentInventoryResponder::LLNewAgentInventoryResponder(const LLSD& post_data, + const std::string& file_name, + LLAssetType::EType asset_type, + boost::function<void(const LLUUID& uuid)> callback) +: LLAssetUploadResponder(post_data, file_name, asset_type), + mCallback(callback) { } @@ -283,6 +292,12 @@ void LLNewAgentInventoryResponder::uploadComplete(const LLSD& content) creation_date_now); gInventory.updateItem(item); gInventory.notifyObservers(); + + if (mCallback) + { + // call the callback with the new Asset UUID + mCallback(item->getAssetUUID()); + } // Show the preview panel for textures and sounds to let // user know that the image (or snapshot) arrived intact. @@ -330,13 +345,11 @@ void LLNewAgentInventoryResponder::uploadComplete(const LLSD& content) U32 group_perms = mPostData.has("group_mask") ? mPostData.get("group_mask" ).asInteger() : PERM_NONE; U32 next_owner_perms = mPostData.has("next_owner_mask") ? mPostData.get("next_owner_mask").asInteger() : PERM_NONE; std::string display_name = LLStringUtil::null; - LLAssetStorage::LLStoreAssetCallback callback = NULL; - void *userdata = NULL; upload_new_resource(next_file, asset_name, asset_name, - 0, LLFolderType::FT_NONE, LLInventoryType::IT_NONE, + LLFolderType::FT_NONE, LLInventoryType::IT_NONE, next_owner_perms, group_perms, everyone_perms, display_name, - callback, expected_upload_cost, userdata); + NULL, expected_upload_cost); } } @@ -474,10 +487,10 @@ void LLUpdateAgentInventoryResponder::uploadComplete(const LLSD& content) { // If this gesture is active, then we need to update the in-memory // active map with the new pointer. - if (LLGestureManager::instance().isGestureActive(item_id)) + if (LLGestureMgr::instance().isGestureActive(item_id)) { LLUUID asset_id = new_item->getAssetUUID(); - LLGestureManager::instance().replaceGesture(item_id, asset_id); + LLGestureMgr::instance().replaceGesture(item_id, asset_id); gInventory.notifyObservers(); } diff --git a/indra/newview/llassetuploadresponders.h b/indra/newview/llassetuploadresponders.h index e656351305..ade9c96758 100644 --- a/indra/newview/llassetuploadresponders.h +++ b/indra/newview/llassetuploadresponders.h @@ -33,6 +33,7 @@ #ifndef LL_LLASSETUPLOADRESPONDER_H #define LL_LLASSETUPLOADRESPONDER_H +#include "llassetstorage.h" #include "llhttpclient.h" // Abstract class for supporting asset upload @@ -66,10 +67,15 @@ class LLNewAgentInventoryResponder : public LLAssetUploadResponder public: LLNewAgentInventoryResponder(const LLSD& post_data, const LLUUID& vfile_id, - LLAssetType::EType asset_type); - LLNewAgentInventoryResponder(const LLSD& post_data, const std::string& file_name, - LLAssetType::EType asset_type); + LLAssetType::EType asset_type, + boost::function<void(const LLUUID& uuid)> callback = NULL); + LLNewAgentInventoryResponder(const LLSD& post_data, + const std::string& file_name, + LLAssetType::EType asset_type, + boost::function<void(const LLUUID& uuid)> callback = NULL); virtual void uploadComplete(const LLSD& content); + + boost::function<void(const LLUUID& uuid)> mCallback; }; class LLBakedUploadData; diff --git a/indra/newview/llaudiosourcevo.cpp b/indra/newview/llaudiosourcevo.cpp index 5e71e64b2f..50363ea2e7 100644 --- a/indra/newview/llaudiosourcevo.cpp +++ b/indra/newview/llaudiosourcevo.cpp @@ -35,7 +35,7 @@ #include "llaudiosourcevo.h" -#include "llagent.h" +#include "llagentcamera.h" #include "llmutelist.h" #include "llviewerparcelmgr.h" @@ -148,7 +148,7 @@ void LLAudioSourceVO::update() updateGain(); if (mObjectp->isHUDAttachment()) { - mPositionGlobal = gAgent.getCameraPositionGlobal(); + mPositionGlobal = gAgentCamera.getCameraPositionGlobal(); } else { diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp index e6666c7f83..4075ad8ee2 100644 --- a/indra/newview/llavataractions.cpp +++ b/indra/newview/llavataractions.cpp @@ -113,13 +113,13 @@ void LLAvatarActions::removeFriendDialog(const LLUUID& id) if (id.isNull()) return; - std::vector<LLUUID> ids; + uuid_vec_t ids; ids.push_back(id); removeFriendsDialog(ids); } // static -void LLAvatarActions::removeFriendsDialog(const std::vector<LLUUID>& ids) +void LLAvatarActions::removeFriendsDialog(const uuid_vec_t& ids) { if(ids.size() == 0) return; @@ -144,7 +144,7 @@ void LLAvatarActions::removeFriendsDialog(const std::vector<LLUUID>& ids) } LLSD payload; - for (std::vector<LLUUID>::const_iterator it = ids.begin(); it != ids.end(); ++it) + for (uuid_vec_t::const_iterator it = ids.begin(); it != ids.end(); ++it) { payload["ids"].append(*it); } @@ -167,7 +167,7 @@ void LLAvatarActions::offerTeleport(const LLUUID& invitee) } // static -void LLAvatarActions::offerTeleport(const std::vector<LLUUID>& ids) +void LLAvatarActions::offerTeleport(const uuid_vec_t& ids) { if (ids.size() == 0) return; @@ -228,7 +228,7 @@ void LLAvatarActions::startCall(const LLUUID& id) } // static -void LLAvatarActions::startAdhocCall(const std::vector<LLUUID>& ids) +void LLAvatarActions::startAdhocCall(const uuid_vec_t& ids) { if (ids.size() == 0) { @@ -237,7 +237,7 @@ void LLAvatarActions::startAdhocCall(const std::vector<LLUUID>& ids) // convert vector into LLDynamicArray for addSession LLDynamicArray<LLUUID> id_array; - for (std::vector<LLUUID>::const_iterator it = ids.begin(); it != ids.end(); ++it) + for (uuid_vec_t::const_iterator it = ids.begin(); it != ids.end(); ++it) { id_array.push_back(*it); } @@ -278,11 +278,11 @@ bool LLAvatarActions::canCall() } // static -void LLAvatarActions::startConference(const std::vector<LLUUID>& ids) +void LLAvatarActions::startConference(const uuid_vec_t& ids) { // *HACK: Copy into dynamic array LLDynamicArray<LLUUID> id_array; - for (std::vector<LLUUID>::const_iterator it = ids.begin(); it != ids.end(); ++it) + for (uuid_vec_t::const_iterator it = ids.begin(); it != ids.end(); ++it) { id_array.push_back(*it); } @@ -499,7 +499,7 @@ bool LLAvatarActions::handlePay(const LLSD& notification, const LLSD& response, // static void LLAvatarActions::callback_invite_to_group(LLUUID group_id, LLUUID id) { - std::vector<LLUUID> agent_ids; + uuid_vec_t agent_ids; agent_ids.push_back(id); LLFloaterGroupInvite::showForGroup(group_id, &agent_ids); diff --git a/indra/newview/llavataractions.h b/indra/newview/llavataractions.h index a7f3acad4f..c573144a33 100644 --- a/indra/newview/llavataractions.h +++ b/indra/newview/llavataractions.h @@ -60,13 +60,13 @@ public: * Show a friend removal dialog. */ static void removeFriendDialog(const LLUUID& id); - static void removeFriendsDialog(const std::vector<LLUUID>& ids); + static void removeFriendsDialog(const uuid_vec_t& ids); /** * Show teleport offer dialog. */ static void offerTeleport(const LLUUID& invitee); - static void offerTeleport(const std::vector<LLUUID>& ids); + static void offerTeleport(const uuid_vec_t& ids); /** * Start instant messaging session. @@ -86,12 +86,12 @@ public: /** * Start an ad-hoc conference voice call with multiple users */ - static void startAdhocCall(const std::vector<LLUUID>& ids); + static void startAdhocCall(const uuid_vec_t& ids); /** * Start conference chat with the given avatars. */ - static void startConference(const std::vector<LLUUID>& ids); + static void startConference(const uuid_vec_t& ids); /** * Show avatar profile. diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp index 45c540b3a3..e8abdd32ec 100644 --- a/indra/newview/llavatarlist.cpp +++ b/indra/newview/llavatarlist.cpp @@ -204,17 +204,17 @@ void LLAvatarList::refresh() bool have_filter = !mNameFilter.empty(); // Save selection. - std::vector<LLUUID> selected_ids; + uuid_vec_t selected_ids; getSelectedUUIDs(selected_ids); LLUUID current_id = getSelectedUUID(); // Determine what to add and what to remove. - std::vector<LLUUID> added, removed; + uuid_vec_t added, removed; LLAvatarList::computeDifference(getIDs(), added, removed); // Handle added items. unsigned nadded = 0; - for (std::vector<LLUUID>::const_iterator it=added.begin(); it != added.end(); it++) + for (uuid_vec_t::const_iterator it=added.begin(); it != added.end(); it++) { std::string name; const LLUUID& buddy_id = *it; @@ -236,7 +236,7 @@ void LLAvatarList::refresh() } // Handle removed items. - for (std::vector<LLUUID>::const_iterator it=removed.begin(); it != removed.end(); it++) + for (uuid_vec_t::const_iterator it=removed.begin(); it != removed.end(); it++) { removeItemByUUID(*it); modified = true; @@ -358,7 +358,7 @@ BOOL LLAvatarList::handleRightMouseDown(S32 x, S32 y, MASK mask) BOOL handled = LLUICtrl::handleRightMouseDown(x, y, mask); if ( mContextMenu ) { - std::vector<LLUUID> selected_uuids; + uuid_vec_t selected_uuids; getSelectedUUIDs(selected_uuids); mContextMenu->show(this, selected_uuids, x, y); } @@ -366,12 +366,12 @@ BOOL LLAvatarList::handleRightMouseDown(S32 x, S32 y, MASK mask) } void LLAvatarList::computeDifference( - const std::vector<LLUUID>& vnew_unsorted, - std::vector<LLUUID>& vadded, - std::vector<LLUUID>& vremoved) + const uuid_vec_t& vnew_unsorted, + uuid_vec_t& vadded, + uuid_vec_t& vremoved) { - std::vector<LLUUID> vcur; - std::vector<LLUUID> vnew = vnew_unsorted; + uuid_vec_t vcur; + uuid_vec_t vnew = vnew_unsorted; // Convert LLSDs to LLUUIDs. { @@ -385,7 +385,7 @@ void LLAvatarList::computeDifference( std::sort(vcur.begin(), vcur.end()); std::sort(vnew.begin(), vnew.end()); - std::vector<LLUUID>::iterator it; + uuid_vec_t::iterator it; size_t maxsize = llmax(vcur.size(), vnew.size()); vadded.resize(maxsize); vremoved.resize(maxsize); diff --git a/indra/newview/llavatarlist.h b/indra/newview/llavatarlist.h index 00c72f1f9d..c3f79dcb3a 100644 --- a/indra/newview/llavatarlist.h +++ b/indra/newview/llavatarlist.h @@ -53,7 +53,7 @@ class LLAvatarList : public LLFlatListView { LOG_CLASS(LLAvatarList); public: - typedef std::vector<LLUUID> uuid_vector_t; + typedef uuid_vec_t uuid_vector_t; struct Params : public LLInitParam::Block<Params, LLFlatListView::Params> { @@ -101,9 +101,9 @@ protected: void addNewItem(const LLUUID& id, const std::string& name, BOOL is_online, EAddPosition pos = ADD_BOTTOM); void computeDifference( - const std::vector<LLUUID>& vnew, - std::vector<LLUUID>& vadded, - std::vector<LLUUID>& vremoved); + const uuid_vec_t& vnew, + uuid_vec_t& vadded, + uuid_vec_t& vremoved); void updateLastInteractionTimes(); void onItemDoucleClicked(LLUICtrl* ctrl, S32 x, S32 y, MASK mask); diff --git a/indra/newview/llavatarlistitem.h b/indra/newview/llavatarlistitem.h index cecb64add7..2db6484a30 100644 --- a/indra/newview/llavatarlistitem.h +++ b/indra/newview/llavatarlistitem.h @@ -70,7 +70,7 @@ public: class ContextMenu { public: - virtual void show(LLView* spawning_view, const std::vector<LLUUID>& selected_uuids, S32 x, S32 y) = 0; + virtual void show(LLView* spawning_view, const uuid_vec_t& selected_uuids, S32 x, S32 y) = 0; }; /** diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index b88be53d79..34cb6fd2eb 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -35,7 +35,7 @@ #define LLBOTTOMTRAY_CPP #include "llbottomtray.h" -#include "llagent.h" +#include "llagentcamera.h" #include "llchiclet.h" #include "llfloaterreg.h" #include "llflyoutbutton.h" @@ -125,7 +125,7 @@ public: void onFocusLost() { - if (gAgent.cameraMouselook()) + if (gAgentCamera.cameraMouselook()) { LLBottomTray::getInstance()->setVisible(FALSE); } diff --git a/indra/newview/llcallfloater.cpp b/indra/newview/llcallfloater.cpp index c8552de66a..4ea3c61ab2 100644 --- a/indra/newview/llcallfloater.cpp +++ b/indra/newview/llcallfloater.cpp @@ -54,7 +54,7 @@ #include "llvoicechannel.h" #include "llviewerparcelmgr.h" -static void get_voice_participants_uuids(std::vector<LLUUID>& speakers_uuids); +static void get_voice_participants_uuids(uuid_vec_t& speakers_uuids); void reshape_floater(LLCallFloater* floater, S32 delta_height); class LLNonAvatarCaller : public LLAvatarListItem @@ -213,9 +213,9 @@ void LLCallFloater::onChange() updateParticipantsVoiceState(); // Add newly joined participants. - std::vector<LLUUID> speakers_uuids; + uuid_vec_t speakers_uuids; get_voice_participants_uuids(speakers_uuids); - for (std::vector<LLUUID>::const_iterator it = speakers_uuids.begin(); it != speakers_uuids.end(); it++) + for (uuid_vec_t::const_iterator it = speakers_uuids.begin(); it != speakers_uuids.end(); it++) { mParticipants->addAvatarIDExceptAgent(*it); } @@ -469,7 +469,7 @@ void LLCallFloater::updateAgentModeratorState() mAgentPanel->childSetValue("user_text", name); } -static void get_voice_participants_uuids(std::vector<LLUUID>& speakers_uuids) +static void get_voice_participants_uuids(uuid_vec_t& speakers_uuids) { // Get a list of participants from VoiceClient LLVoiceClient::participantMap *voice_map = gVoiceClient->getParticipantList(); @@ -494,7 +494,7 @@ void LLCallFloater::initParticipantsVoiceState() it_end = items.end(); - std::vector<LLUUID> speakers_uuids; + uuid_vec_t speakers_uuids; get_voice_participants_uuids(speakers_uuids); for(; it != it_end; ++it) @@ -505,7 +505,7 @@ void LLCallFloater::initParticipantsVoiceState() LLUUID speaker_id = item->getAvatarId(); - std::vector<LLUUID>::const_iterator speaker_iter = std::find(speakers_uuids.begin(), speakers_uuids.end(), speaker_id); + uuid_vec_t::const_iterator speaker_iter = std::find(speakers_uuids.begin(), speakers_uuids.end(), speaker_id); // If an avatarID assigned to a panel is found in a speakers list // obtained from VoiceClient we assign the JOINED status to the owner @@ -534,10 +534,10 @@ void LLCallFloater::initParticipantsVoiceState() void LLCallFloater::updateParticipantsVoiceState() { - std::vector<LLUUID> speakers_list; + uuid_vec_t speakers_list; // Get a list of participants from VoiceClient - std::vector<LLUUID> speakers_uuids; + uuid_vec_t speakers_uuids; get_voice_participants_uuids(speakers_uuids); // Updating the status for each participant already in list. @@ -555,7 +555,7 @@ void LLCallFloater::updateParticipantsVoiceState() const LLUUID participant_id = item->getAvatarId(); bool found = false; - std::vector<LLUUID>::iterator speakers_iter = std::find(speakers_uuids.begin(), speakers_uuids.end(), participant_id); + uuid_vec_t::iterator speakers_iter = std::find(speakers_uuids.begin(), speakers_uuids.end(), participant_id); lldebugs << "processing speaker: " << item->getAvatarName() << ", " << item->getAvatarId() << llendl; @@ -695,7 +695,7 @@ bool LLCallFloater::validateSpeaker(const LLUUID& speaker_id) case VC_LOCAL_CHAT: { // A nearby chat speaker is considered valid it it's known to LLVoiceClient (i.e. has enabled voice). - std::vector<LLUUID> speakers; + uuid_vec_t speakers; get_voice_participants_uuids(speakers); is_valid = std::find(speakers.begin(), speakers.end(), speaker_id) != speakers.end(); } diff --git a/indra/newview/llchatbar.cpp b/indra/newview/llchatbar.cpp index b32a955038..67d5d21b2a 100644 --- a/indra/newview/llchatbar.cpp +++ b/indra/newview/llchatbar.cpp @@ -107,7 +107,7 @@ LLChatBar::LLChatBar() LLChatBar::~LLChatBar() { - LLGestureManager::instance().removeObserver(mObserver); + LLGestureMgr::instance().removeObserver(mObserver); delete mObserver; mObserver = NULL; // LLView destructor cleans up children @@ -209,8 +209,8 @@ void LLChatBar::refreshGestures() // collect list of unique gestures std::map <std::string, BOOL> unique; - LLGestureManager::item_map_t::const_iterator it; - const LLGestureManager::item_map_t& active_gestures = LLGestureManager::instance().getActiveGestures(); + LLGestureMgr::item_map_t::const_iterator it; + const LLGestureMgr::item_map_t& active_gestures = LLGestureMgr::instance().getActiveGestures(); for (it = active_gestures.begin(); it != active_gestures.end(); ++it) { LLMultiGesture* gesture = (*it).second; @@ -296,7 +296,7 @@ void LLChatBar::setGestureCombo(LLComboBox* combo) // now register observer since we have a place to put the results mObserver = new LLChatBarGestureObserver(this); - LLGestureManager::instance().addObserver(mObserver); + LLGestureMgr::instance().addObserver(mObserver); // refresh list from current active gestures refreshGestures(); @@ -377,7 +377,7 @@ void LLChatBar::sendChat( EChatType type ) if (0 == channel) { // discard returned "found" boolean - LLGestureManager::instance().triggerAndReviseString(utf8text, &utf8_revised_text); + LLGestureMgr::instance().triggerAndReviseString(utf8text, &utf8_revised_text); } else { @@ -516,7 +516,7 @@ void LLChatBar::onInputEditorKeystroke( LLLineEditor* caller, void* userdata ) std::string utf8_trigger = wstring_to_utf8str(raw_text); std::string utf8_out_str(utf8_trigger); - if (LLGestureManager::instance().matchPrefix(utf8_trigger, &utf8_out_str)) + if (LLGestureMgr::instance().matchPrefix(utf8_trigger, &utf8_out_str)) { if (self->mInputEditor) { @@ -653,7 +653,7 @@ void LLChatBar::onCommitGesture(LLUICtrl* ctrl) // substitution and logging. std::string text(trigger); std::string revised_text; - LLGestureManager::instance().triggerAndReviseString(text, &revised_text); + LLGestureMgr::instance().triggerAndReviseString(text, &revised_text); revised_text = utf8str_trim(revised_text); if (!revised_text.empty()) diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index e1c96d4a16..f5faeca126 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -447,6 +447,7 @@ LLChatHistory::LLChatHistory(const LLChatHistory::Params& p) : LLUICtrl(p), mMessageHeaderFilename(p.message_header), mMessageSeparatorFilename(p.message_separator), + mMessagePlaintextSeparatorFilename(p.message_plaintext_separator), mLeftTextPad(p.left_text_pad), mRightTextPad(p.right_text_pad), mLeftWidgetPad(p.left_widget_pad), @@ -534,6 +535,12 @@ LLView* LLChatHistory::getSeparator() return separator; } +LLView* LLChatHistory::getPlaintextSeparator() +{ + LLPanel* separator = LLUICtrlFactory::getInstance()->createFromFile<LLPanel>(mMessagePlaintextSeparatorFilename, NULL, LLPanel::child_registry_t::instance()); + return separator; +} + LLView* LLChatHistory::getHeader(const LLChat& chat,const LLStyle::Params& style_params) { LLChatHistoryHeader* header = LLChatHistoryHeader::createInstance(mMessageHeaderFilename); @@ -632,6 +639,16 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL if (use_plain_text_chat_history) { + // append plaintext separator + LLView* separator = getPlaintextSeparator(); + LLInlineViewSegment::Params p; + p.force_newline = true; + p.left_pad = mLeftWidgetPad; + p.right_pad = mRightWidgetPad; + p.view = separator; + //mEditor->appendWidget(p, "\n", false); // TODO: this is absolute minimal fix for EXT-3818 because it's late for 2.0 + mEditor->appendWidget(p, "", false); // This should be properly fixed in 2.1 + mEditor->appendText("[" + chat.mTimeStr + "] ", mEditor->getText().size() != 0, style_params); if (utf8str_trim(chat.mFromName).size() != 0) @@ -734,7 +751,7 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL LLNotificationPtr notification = LLNotificationsUtil::find(chat.mNotifId); if (notification != NULL) { - LLToastNotifyPanel* notify_box = new LLToastNotifyPanel( + LLIMToastNotifyPanel* notify_box = new LLIMToastNotifyPanel( notification); //we can't set follows in xml since it broke toasts behavior notify_box->setFollowsLeft(); @@ -743,7 +760,9 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL ctrl_list_t ctrls = notify_box->getControlPanel()->getCtrlList(); S32 offset = 0; - for (ctrl_list_t::iterator it = ctrls.begin(); it != ctrls.end(); it++) + // Children were added by addChild() which uses push_front to insert them into list, + // so to get buttons in correct order reverse iterator is used (EXT-5906) + for (ctrl_list_t::reverse_iterator it = ctrls.rbegin(); it != ctrls.rend(); it++) { LLButton * button = dynamic_cast<LLButton*> (*it); if (button != NULL) @@ -758,7 +777,7 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL button->getRect().mBottom)); button->setAutoResize(true); button->autoResize(); - offset += 2 * HPAD + button->getRect().getWidth(); + offset += HPAD + button->getRect().getWidth(); button->setFollowsNone(); } } @@ -817,7 +836,6 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL message = chat.mFromName + message; } - mEditor->appendText(message, FALSE, style_params); } mEditor->blockUndo(); diff --git a/indra/newview/llchathistory.h b/indra/newview/llchathistory.h index 950b32861b..dfe5ea98e6 100644 --- a/indra/newview/llchathistory.h +++ b/indra/newview/llchathistory.h @@ -47,6 +47,8 @@ class LLChatHistory : public LLUICtrl Optional<std::string> message_header; //Message separator filename Optional<std::string> message_separator; + //Message plaintext separator filename + Optional<std::string> message_plaintext_separator; //Text left padding from the scroll rect Optional<S32> left_text_pad; //Text right padding from the scroll rect @@ -69,6 +71,7 @@ class LLChatHistory : public LLUICtrl Params() : message_header("message_header"), message_separator("message_separator"), + message_plaintext_separator("message_plaintext_separator"), left_text_pad("left_text_pad"), right_text_pad("right_text_pad"), left_widget_pad("left_widget_pad"), @@ -97,6 +100,11 @@ class LLChatHistory : public LLUICtrl */ LLView* getSeparator(); /** + * Builds a message plaintext separator. + * @return pointer to LLView separator object. + */ + LLView* getPlaintextSeparator(); + /** * Builds a message header. * @return pointer to LLView header object. */ @@ -133,6 +141,7 @@ class LLChatHistory : public LLUICtrl std::string mMessageHeaderFilename; std::string mMessageSeparatorFilename; + std::string mMessagePlaintextSeparatorFilename; S32 mLeftTextPad; S32 mRightTextPad; diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp index 8efa814a2e..1f92686a43 100644 --- a/indra/newview/llchiclet.cpp +++ b/indra/newview/llchiclet.cpp @@ -1137,7 +1137,7 @@ void im_chiclet_callback(LLChicletPanel* panel, const LLSD& data){ S32 unread = data["participant_unread"].asInteger(); LLIMFloater* im_floater = LLIMFloater::findInstance(session_id); - if (im_floater && im_floater->getVisible()) + if (im_floater && im_floater->getVisible() && im_floater->hasFocus()) { unread = 0; } diff --git a/indra/newview/lldriverparam.cpp b/indra/newview/lldriverparam.cpp index 830e975e8a..ebd767d654 100644 --- a/indra/newview/lldriverparam.cpp +++ b/indra/newview/lldriverparam.cpp @@ -118,13 +118,12 @@ void LLDriverParamInfo::toStream(std::ostream &out) out << std::endl; - LLVOAvatarSelf *avatar = gAgent.getAvatarObject(); - if(avatar) + if(isAgentAvatarValid()) { for (entry_info_list_t::iterator iter = mDrivenInfoList.begin(); iter != mDrivenInfoList.end(); iter++) { LLDrivenEntryInfo driven = *iter; - LLViewerVisualParam *param = (LLViewerVisualParam*)avatar->getVisualParam(driven.mDrivenID); + LLViewerVisualParam *param = (LLViewerVisualParam*)gAgentAvatarp->getVisualParam(driven.mDrivenID); if (param) { param->getInfo()->toStream(out); @@ -146,7 +145,7 @@ void LLDriverParamInfo::toStream(std::ostream &out) } else { - llwarns << "could not get parameter " << driven.mDrivenID << " from avatar " << avatar << " for driver parameter " << getID() << llendl; + llwarns << "could not get parameter " << driven.mDrivenID << " from avatar " << gAgentAvatarp << " for driver parameter " << getID() << llendl; } out << std::endl; } @@ -626,13 +625,13 @@ F32 LLDriverParam::getDrivenWeight(const LLDrivenEntry* driven, F32 input_weight void LLDriverParam::setDrivenWeight(LLDrivenEntry *driven, F32 driven_weight, bool upload_bake) { - LLVOAvatarSelf *avatar_self = gAgent.getAvatarObject(); - if(mWearablep && + if(isAgentAvatarValid() && + mWearablep && driven->mParam->getCrossWearable() && mWearablep->isOnTop()) { // call setWeight through LLVOAvatarSelf so other wearables can be updated with the correct values - avatar_self->setVisualParamWeight( (LLVisualParam*)driven->mParam, driven_weight, upload_bake ); + gAgentAvatarp->setVisualParamWeight( (LLVisualParam*)driven->mParam, driven_weight, upload_bake ); } else { diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp index bf7c735488..ba92c33d59 100644 --- a/indra/newview/llfavoritesbar.cpp +++ b/indra/newview/llfavoritesbar.cpp @@ -31,7 +31,6 @@ */ #include "llviewerprecompiledheaders.h" - #include "llfavoritesbar.h" #include "llfloaterreg.h" @@ -47,6 +46,7 @@ #include "llclipboard.h" #include "llinventoryclipboard.h" #include "llinventorybridge.h" +#include "llinventoryfunctions.h" #include "llfloaterworldmap.h" #include "lllandmarkactions.h" #include "llnotificationsutil.h" diff --git a/indra/newview/llfloateranimpreview.cpp b/indra/newview/llfloateranimpreview.cpp index 5ec58c8dd6..434c89e8ba 100644 --- a/indra/newview/llfloateranimpreview.cpp +++ b/indra/newview/llfloateranimpreview.cpp @@ -568,7 +568,7 @@ void LLFloaterAnimPreview::onBtnPlay(void* user_data) { LLVOAvatar* avatarp = previewp->mAnimPreview->getDummyAvatar(); - if(!avatarp->isMotionActive(previewp->mMotionID)) + if (!avatarp->isMotionActive(previewp->mMotionID)) { previewp->resetMotion(); previewp->mPauseRequest = NULL; @@ -593,7 +593,7 @@ void LLFloaterAnimPreview::onBtnPause(void* user_data) { LLVOAvatar* avatarp = previewp->mAnimPreview->getDummyAvatar(); - if(avatarp->isMotionActive(previewp->mMotionID)) + if (avatarp->isMotionActive(previewp->mMotionID)) { if (!avatarp->areAnimationsPaused()) { @@ -1001,19 +1001,18 @@ void LLFloaterAnimPreview::onBtnOK(void* userdata) { std::string name = floaterp->childGetValue("name_form").asString(); std::string desc = floaterp->childGetValue("description_form").asString(); - LLAssetStorage::LLStoreAssetCallback callback = NULL; S32 expected_upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload(); - void *userdata = NULL; upload_new_resource(floaterp->mTransactionID, // tid LLAssetType::AT_ANIMATION, name, desc, - 0, LLFolderType::FT_NONE, LLInventoryType::IT_ANIMATION, - LLFloaterPerms::getNextOwnerPerms(), LLFloaterPerms::getGroupPerms(), LLFloaterPerms::getEveryonePerms(), + LLFloaterPerms::getNextOwnerPerms(), + LLFloaterPerms::getGroupPerms(), LLFloaterPerms::getEveryonePerms(), name, - callback, expected_upload_cost, userdata); + NULL, + expected_upload_cost); } else { diff --git a/indra/newview/llfloateravatarpicker.cpp b/indra/newview/llfloateravatarpicker.cpp index a0b2de85f0..2cb0cdf368 100644 --- a/indra/newview/llfloateravatarpicker.cpp +++ b/indra/newview/llfloateravatarpicker.cpp @@ -157,7 +157,7 @@ void LLFloaterAvatarPicker::onBtnFind() find(); } -static void getSelectedAvatarData(const LLScrollListCtrl* from, std::vector<std::string>& avatar_names, std::vector<LLUUID>& avatar_ids) +static void getSelectedAvatarData(const LLScrollListCtrl* from, std::vector<std::string>& avatar_names, uuid_vec_t& avatar_ids) { std::vector<LLScrollListItem*> items = from->getAllSelected(); for (std::vector<LLScrollListItem*>::iterator iter = items.begin(); iter != items.end(); ++iter) @@ -203,7 +203,7 @@ void LLFloaterAvatarPicker::onBtnSelect() if(list) { std::vector<std::string> avatar_names; - std::vector<LLUUID> avatar_ids; + uuid_vec_t avatar_ids; getSelectedAvatarData(list, avatar_names, avatar_ids); mSelectionCallback(avatar_names, avatar_ids); } @@ -247,7 +247,7 @@ void LLFloaterAvatarPicker::populateNearMe() LLScrollListCtrl* near_me_scroller = getChild<LLScrollListCtrl>("NearMe"); near_me_scroller->deleteAllItems(); - std::vector<LLUUID> avatar_ids; + uuid_vec_t avatar_ids; LLWorld::getInstance()->getAvatars(&avatar_ids, NULL, gAgent.getPositionGlobal(), gSavedSettings.getF32("NearMeRange")); for(U32 i=0; i<avatar_ids.size(); i++) { @@ -499,7 +499,7 @@ bool LLFloaterAvatarPicker::isSelectBtnEnabled() if(list) { - std::vector<LLUUID> avatar_ids; + uuid_vec_t avatar_ids; std::vector<std::string> avatar_names; getSelectedAvatarData(list, avatar_names, avatar_ids); return mOkButtonValidateSignal(avatar_ids); diff --git a/indra/newview/llfloateravatarpicker.h b/indra/newview/llfloateravatarpicker.h index e35466cec8..860f3930ef 100644 --- a/indra/newview/llfloateravatarpicker.h +++ b/indra/newview/llfloateravatarpicker.h @@ -40,11 +40,11 @@ class LLFloaterAvatarPicker : public LLFloater { public: - typedef boost::signals2::signal<bool(const std::vector<LLUUID>&), boost_boolean_combiner> validate_signal_t; + typedef boost::signals2::signal<bool(const uuid_vec_t&), boost_boolean_combiner> validate_signal_t; typedef validate_signal_t::slot_type validate_callback_t; // The callback function will be called with an avatar name and UUID. - typedef boost::function<void (const std::vector<std::string>&, const std::vector<LLUUID>&)> select_callback_t; + typedef boost::function<void (const std::vector<std::string>&, const uuid_vec_t&)> select_callback_t; // Call this to select an avatar. static LLFloaterAvatarPicker* show(select_callback_t callback, BOOL allow_multiple = FALSE, diff --git a/indra/newview/llfloateravatartextures.cpp b/indra/newview/llfloateravatartextures.cpp index 8c7899af3e..18db60705b 100644 --- a/indra/newview/llfloateravatartextures.cpp +++ b/indra/newview/llfloateravatartextures.cpp @@ -31,15 +31,14 @@ */ #include "llviewerprecompiledheaders.h" - #include "llfloateravatartextures.h" +#include "llagent.h" +#include "llagentwearables.h" #include "lltexturectrl.h" - #include "lluictrlfactory.h" #include "llviewerobjectlist.h" #include "llvoavatar.h" -#include "llagentwearables.h" using namespace LLVOAvatarDefines; @@ -75,7 +74,6 @@ void LLFloaterAvatarTextures::draw() LLFloater::draw(); } -#if !LL_RELEASE_FOR_DOWNLOAD static void update_texture_ctrl(LLVOAvatar* avatarp, LLTextureCtrl* ctrl, ETextureIndex te) @@ -132,72 +130,68 @@ static LLVOAvatar* find_avatar(const LLUUID& id) void LLFloaterAvatarTextures::refresh() { - LLVOAvatar *avatarp = find_avatar(mID); - if (avatarp) + if (gAgent.isGodlike()) { - std::string fullname; - if (gCacheName->getFullName(avatarp->getID(), fullname)) + LLVOAvatar *avatarp = find_avatar(mID); + if (avatarp) { - setTitle(mTitle + ": " + fullname); + std::string fullname; + if (gCacheName->getFullName(avatarp->getID(), fullname)) + { + setTitle(mTitle + ": " + fullname); + } + for (U32 i=0; i < TEX_NUM_INDICES; i++) + { + update_texture_ctrl(avatarp, mTextures[i], ETextureIndex(i)); + } } - for (U32 i=0; i < TEX_NUM_INDICES; i++) + else { - update_texture_ctrl(avatarp, mTextures[i], ETextureIndex(i)); + setTitle(mTitle + ": " + getString("InvalidAvatar") + " (" + mID.asString() + ")"); } } - else - { - setTitle(mTitle + ": " + getString("InvalidAvatar") + " (" + mID.asString() + ")"); - } } -#else - -void LLFloaterAvatarTextures::refresh() -{ -} - -#endif - // static void LLFloaterAvatarTextures::onClickDump(void* data) { -#if !LL_RELEASE_FOR_DOWNLOAD - LLFloaterAvatarTextures* self = (LLFloaterAvatarTextures*)data; - LLVOAvatar* avatarp = find_avatar(self->mID); - if (!avatarp) return; - - for (S32 i = 0; i < avatarp->getNumTEs(); i++) + if (gAgent.isGodlike()) { - const LLTextureEntry* te = avatarp->getTE(i); - if (!te) continue; + LLFloaterAvatarTextures* self = (LLFloaterAvatarTextures*)data; + LLVOAvatar* avatarp = find_avatar(self->mID); + if (!avatarp) return; - if (LLVOAvatar::isIndexLocalTexture((ETextureIndex)i)) + for (S32 i = 0; i < avatarp->getNumTEs(); i++) { - LLUUID id = IMG_DEFAULT_AVATAR; - EWearableType wearable_type = LLVOAvatarDictionary::getInstance()->getTEWearableType((ETextureIndex)i); - LLWearable *wearable = gAgentWearables.getWearable(wearable_type, 0); - if (wearable) + const LLTextureEntry* te = avatarp->getTE(i); + if (!te) continue; + + if (LLVOAvatar::isIndexLocalTexture((ETextureIndex)i)) { - LLLocalTextureObject *lto = wearable->getLocalTextureObject(i); - if (lto) + LLUUID id = IMG_DEFAULT_AVATAR; + EWearableType wearable_type = LLVOAvatarDictionary::getInstance()->getTEWearableType((ETextureIndex)i); + LLWearable *wearable = gAgentWearables.getWearable(wearable_type, 0); + if (wearable) { - id = lto->getID(); + LLLocalTextureObject *lto = wearable->getLocalTextureObject(i); + if (lto) + { + id = lto->getID(); + } + } + if (id != IMG_DEFAULT_AVATAR) + { + llinfos << "Avatar TE " << i << " id " << id << llendl; + } + else + { + llinfos << "Avatar TE " << i << " id " << "<DEFAULT>" << llendl; } - } - if (id != IMG_DEFAULT_AVATAR) - { - llinfos << "Avatar TE " << i << " id " << id << llendl; } else { - llinfos << "Avatar TE " << i << " id " << "<DEFAULT>" << llendl; + llinfos << "Avatar TE " << i << " id " << te->getID() << llendl; } } - else - { - llinfos << "Avatar TE " << i << " id " << te->getID() << llendl; - } } -#endif } diff --git a/indra/newview/llfloaterbuy.cpp b/indra/newview/llfloaterbuy.cpp index fba557c656..589f570d96 100644 --- a/indra/newview/llfloaterbuy.cpp +++ b/indra/newview/llfloaterbuy.cpp @@ -246,7 +246,8 @@ void LLFloaterBuy::inventoryChanged(LLViewerObject* obj, // Compute icon for this item BOOL item_is_multi = FALSE; - if ( inv_item->getFlags() & LLInventoryItem::II_FLAGS_LANDMARK_VISITED ) + if ( inv_item->getFlags() & LLInventoryItem::II_FLAGS_LANDMARK_VISITED + || inv_item->getFlags() & LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS) { item_is_multi = TRUE; } diff --git a/indra/newview/llfloaterbuycurrency.cpp b/indra/newview/llfloaterbuycurrency.cpp index 1642e6725e..7fddd1fc5f 100644 --- a/indra/newview/llfloaterbuycurrency.cpp +++ b/indra/newview/llfloaterbuycurrency.cpp @@ -234,8 +234,7 @@ void LLFloaterBuyCurrencyUI::updateUI() if (mHasTarget) { childSetVisible("buy_action", true); - childSetTextArg("buy_action", "[NAME]", mTargetName); - childSetTextArg("buy_action", "[PRICE]", llformat("%d",mTargetPrice)); + childSetTextArg("buy_action", "[ACTION]", mTargetName); } } diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp index d0188352c7..d84ebef1dd 100644 --- a/indra/newview/llfloatercamera.cpp +++ b/indra/newview/llfloatercamera.cpp @@ -38,11 +38,11 @@ #include "llfloaterreg.h" // Viewer includes +#include "llagentcamera.h" #include "lljoystickbutton.h" #include "llviewercontrol.h" #include "llviewercamera.h" #include "llbottomtray.h" -#include "llagent.h" #include "lltoolmgr.h" #include "lltoolfocus.h" #include "llslider.h" @@ -104,7 +104,7 @@ BOOL LLPanelCameraZoom::postBuild() void LLPanelCameraZoom::draw() { - mSlider->setValue(gAgent.getCameraZoomFraction()); + mSlider->setValue(gAgentCamera.getCameraZoomFraction()); LLPanel::draw(); } @@ -131,7 +131,7 @@ void LLPanelCameraZoom::onZoomMinusHeldDown() void LLPanelCameraZoom::onSliderValueChanged() { F32 zoom_level = mSlider->getValueF32(); - gAgent.setCameraZoomFraction(zoom_level); + gAgentCamera.setCameraZoomFraction(zoom_level); } void activate_camera_tool() @@ -146,7 +146,7 @@ void activate_camera_tool() /*static*/ bool LLFloaterCamera::inFreeCameraMode() { LLFloaterCamera* floater_camera = LLFloaterCamera::findInstance(); - if (floater_camera && floater_camera->mCurrMode == CAMERA_CTRL_MODE_FREE_CAMERA && gAgent.getCameraMode() != CAMERA_MODE_MOUSELOOK) + if (floater_camera && floater_camera->mCurrMode == CAMERA_CTRL_MODE_FREE_CAMERA && gAgentCamera.getCameraMode() != CAMERA_MODE_MOUSELOOK) { return true; } @@ -265,7 +265,7 @@ ECameraControlMode LLFloaterCamera::determineMode() return CAMERA_CTRL_MODE_FREE_CAMERA; } - if (gAgent.getCameraMode() == CAMERA_MODE_MOUSELOOK) + if (gAgentCamera.getCameraMode() == CAMERA_MODE_MOUSELOOK) { return CAMERA_CTRL_MODE_AVATAR_VIEW; } @@ -421,7 +421,7 @@ void LLFloaterCamera::updateCameraPresetButtons() childSetValue("rear_view", preset == CAMERA_PRESET_REAR_VIEW); childSetValue("group_view", preset == CAMERA_PRESET_GROUP_VIEW); childSetValue("front_view", preset == CAMERA_PRESET_FRONT_VIEW); - childSetValue("mouselook_view", gAgent.cameraMouselook()); + childSetValue("mouselook_view", gAgentCamera.cameraMouselook()); } void LLFloaterCamera::onClickCameraPresets(const LLSD& param) @@ -430,19 +430,19 @@ void LLFloaterCamera::onClickCameraPresets(const LLSD& param) if ("rear_view" == name) { - gAgent.switchCameraPreset(CAMERA_PRESET_REAR_VIEW); + gAgentCamera.switchCameraPreset(CAMERA_PRESET_REAR_VIEW); } else if ("group_view" == name) { - gAgent.switchCameraPreset(CAMERA_PRESET_GROUP_VIEW); + gAgentCamera.switchCameraPreset(CAMERA_PRESET_GROUP_VIEW); } else if ("front_view" == name) { - gAgent.switchCameraPreset(CAMERA_PRESET_FRONT_VIEW); + gAgentCamera.switchCameraPreset(CAMERA_PRESET_FRONT_VIEW); } else if ("mouselook_view" == name) { - gAgent.changeCameraToMouselook(); + gAgentCamera.changeCameraToMouselook(); } LLFloaterCamera* camera_floater = LLFloaterCamera::findInstance(); diff --git a/indra/newview/llfloatergesture.cpp b/indra/newview/llfloatergesture.cpp index 9c1ac2631d..5a332726b2 100644 --- a/indra/newview/llfloatergesture.cpp +++ b/indra/newview/llfloatergesture.cpp @@ -36,6 +36,7 @@ #include "llinventory.h" #include "llinventorybridge.h" +#include "llinventoryfunctions.h" #include "llinventorymodel.h" #include "llinventoryclipboard.h" @@ -106,7 +107,7 @@ LLFloaterGesture::LLFloaterGesture(const LLSD& key) : LLFloater(key) { mObserver = new LLFloaterGestureObserver(this); - LLGestureManager::instance().addObserver(mObserver); + LLGestureMgr::instance().addObserver(mObserver); mCommitCallbackRegistrar.add("Gesture.Action.ToogleActiveState", boost::bind(&LLFloaterGesture::onActivateBtnClick, this)); mCommitCallbackRegistrar.add("Gesture.Action.ShowPreview", boost::bind(&LLFloaterGesture::onClickEdit, this)); @@ -125,7 +126,7 @@ void LLFloaterGesture::done() // we load only gesture folder without childred. LLInventoryModel::cat_array_t* categories; LLInventoryModel::item_array_t* items; - LLInventoryFetchDescendentsObserver::folder_ref_t unloaded_folders; + uuid_vec_t unloaded_folders; LL_DEBUGS("Gesture")<< "Get subdirs of Gesture Folder...." << LL_ENDL; gInventory.getDirectDescendentsOf(mGestureFolderID, categories, items); if (categories->empty()) @@ -165,7 +166,7 @@ void LLFloaterGesture::done() // virtual LLFloaterGesture::~LLFloaterGesture() { - LLGestureManager::instance().removeObserver(mObserver); + LLGestureMgr::instance().removeObserver(mObserver); delete mObserver; mObserver = NULL; gInventory.removeObserver(this); @@ -197,7 +198,7 @@ BOOL LLFloaterGesture::postBuild() setDefaultBtn("play_btn"); mGestureFolderID = gInventory.findCategoryUUIDForType(LLFolderType::FT_GESTURE, false); - folder_ref_t folders; + uuid_vec_t folders; folders.push_back(mGestureFolderID); //perform loading Gesture directory anyway to make sure that all subdirectory are loaded too. See method done() for details. gInventory.addObserver(this); @@ -246,13 +247,13 @@ void LLFloaterGesture::refreshAll() void LLFloaterGesture::buildGestureList() { S32 scroll_pos = mGestureList->getScrollPos(); - std::vector<LLUUID> selected_items; + uuid_vec_t selected_items; getSelectedIds(selected_items); LL_DEBUGS("Gesture")<< "Rebuilding gesture list "<< LL_ENDL; mGestureList->deleteAllItems(); - LLGestureManager::item_map_t::const_iterator it; - const LLGestureManager::item_map_t& active_gestures = LLGestureManager::instance().getActiveGestures(); + LLGestureMgr::item_map_t::const_iterator it; + const LLGestureMgr::item_map_t& active_gestures = LLGestureMgr::instance().getActiveGestures(); for (it = active_gestures.begin(); it != active_gestures.end(); ++it) { addGesture(it->first,it->second, mGestureList); @@ -278,7 +279,7 @@ void LLFloaterGesture::buildGestureList() // attempt to preserve scroll position through re-builds // since we do re-build whenever something gets dirty - for(std::vector<LLUUID>::iterator it = selected_items.begin(); it != selected_items.end(); it++) + for(uuid_vec_t::iterator it = selected_items.begin(); it != selected_items.end(); it++) { mGestureList->selectByID(*it); } @@ -371,13 +372,13 @@ void LLFloaterGesture::addGesture(const LLUUID& item_id , LLMultiGesture* gestur LLScrollListItem* sl_item = list->addElement(element, ADD_BOTTOM); if(sl_item) { - LLFontGL::StyleFlags style = LLGestureManager::getInstance()->isGestureActive(item_id) ? LLFontGL::BOLD : LLFontGL::NORMAL; + LLFontGL::StyleFlags style = LLGestureMgr::getInstance()->isGestureActive(item_id) ? LLFontGL::BOLD : LLFontGL::NORMAL; // *TODO find out why ["font"]["style"] does not affect font style ((LLScrollListText*)sl_item->getColumn(0))->setFontStyle(style); } } -void LLFloaterGesture::getSelectedIds(std::vector<LLUUID>& ids) +void LLFloaterGesture::getSelectedIds(uuid_vec_t& ids) { std::vector<LLScrollListItem*> items = mGestureList->getAllSelected(); for(std::vector<LLScrollListItem*>::const_iterator it = items.begin(); it != items.end(); it++) @@ -421,17 +422,17 @@ void LLFloaterGesture::onClickPlay() if(item_id.isNull()) return; LL_DEBUGS("Gesture")<<" Trying to play gesture id: "<< item_id <<LL_ENDL; - if(!LLGestureManager::instance().isGestureActive(item_id)) + if(!LLGestureMgr::instance().isGestureActive(item_id)) { // we need to inform server about gesture activating to be consistent with LLPreviewGesture and LLGestureComboList. BOOL inform_server = TRUE; BOOL deactivate_similar = FALSE; - LLGestureManager::instance().setGestureLoadedCallback(item_id, boost::bind(&LLFloaterGesture::playGesture, this, item_id)); + LLGestureMgr::instance().setGestureLoadedCallback(item_id, boost::bind(&LLFloaterGesture::playGesture, this, item_id)); LLViewerInventoryItem *item = gInventory.getItem(item_id); llassert(item); if (item) { - LLGestureManager::instance().activateGestureWithAsset(item_id, item->getAssetUUID(), inform_server, deactivate_similar); + LLGestureMgr::instance().activateGestureWithAsset(item_id, item->getAssetUUID(), inform_server, deactivate_similar); LL_DEBUGS("Gesture")<< "Activating gesture with inventory ID: " << item_id <<LL_ENDL; } } @@ -451,13 +452,13 @@ void LLFloaterGesture::onClickNew() void LLFloaterGesture::onActivateBtnClick() { - std::vector<LLUUID> ids; + uuid_vec_t ids; getSelectedIds(ids); if(ids.empty()) return; - LLGestureManager* gm = LLGestureManager::getInstance(); - std::vector<LLUUID>::const_iterator it = ids.begin(); + LLGestureMgr* gm = LLGestureMgr::getInstance(); + uuid_vec_t::const_iterator it = ids.begin(); BOOL first_gesture_state = gm->isGestureActive(*it); BOOL is_mixed = FALSE; while( ++it != ids.end() ) @@ -468,7 +469,7 @@ void LLFloaterGesture::onActivateBtnClick() break; } } - for(std::vector<LLUUID>::const_iterator it = ids.begin(); it != ids.end(); it++) + for(uuid_vec_t::const_iterator it = ids.begin(); it != ids.end(); it++) { if(is_mixed) { @@ -494,11 +495,11 @@ void LLFloaterGesture::onCopyPasteAction(const LLSD& command) // since we select this comman inventory item had already arrived . if("copy_gesture" == command_name) { - std::vector<LLUUID> ids; + uuid_vec_t ids; getSelectedIds(ids); // make sure that clopboard is empty LLInventoryClipboard::instance().reset(); - for(std::vector<LLUUID>::iterator it = ids.begin(); it != ids.end(); it++) + for(uuid_vec_t::iterator it = ids.begin(); it != ids.end(); it++) { LLInventoryItem* item = gInventory.getItem(*it); if(item && item->getInventoryType() == LLInventoryType::IT_GESTURE) @@ -558,7 +559,7 @@ void LLFloaterGesture::onCommitList() const LLUUID& item_id = mGestureList->getCurrentID(); mSelectedID = item_id; - if (LLGestureManager::instance().isGesturePlaying(item_id)) + if (LLGestureMgr::instance().isGesturePlaying(item_id)) { childSetVisible("play_btn", false); childSetVisible("stop_btn", true); @@ -572,14 +573,14 @@ void LLFloaterGesture::onCommitList() void LLFloaterGesture::onDeleteSelected() { - std::vector<LLUUID> ids; + uuid_vec_t ids; getSelectedIds(ids); if(ids.empty()) return; const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); - LLGestureManager* gm = LLGestureManager::getInstance(); - for(std::vector<LLUUID>::const_iterator it = ids.begin(); it != ids.end(); it++) + LLGestureMgr* gm = LLGestureMgr::getInstance(); + for(uuid_vec_t::const_iterator it = ids.begin(); it != ids.end(); it++) { const LLUUID& selected_item = *it; LLInventoryItem* inv_item = gInventory.getItem(selected_item); @@ -610,10 +611,10 @@ void LLFloaterGesture::onDeleteSelected() void LLFloaterGesture::addToCurrentOutFit() { - std::vector<LLUUID> ids; + uuid_vec_t ids; getSelectedIds(ids); - LLAppearanceManager* am = LLAppearanceManager::getInstance(); - for(std::vector<LLUUID>::const_iterator it = ids.begin(); it != ids.end(); it++) + LLAppearanceMgr* am = LLAppearanceMgr::getInstance(); + for(uuid_vec_t::const_iterator it = ids.begin(); it != ids.end(); it++) { am->addCOFItemLink(*it); } @@ -623,12 +624,12 @@ void LLFloaterGesture::playGesture(LLUUID item_id) { LL_DEBUGS("Gesture")<<"Playing gesture "<< item_id<<LL_ENDL; - if (LLGestureManager::instance().isGesturePlaying(item_id)) + if (LLGestureMgr::instance().isGesturePlaying(item_id)) { - LLGestureManager::instance().stopGesture(item_id); + LLGestureMgr::instance().stopGesture(item_id); } else { - LLGestureManager::instance().playGesture(item_id); + LLGestureMgr::instance().playGesture(item_id); } } diff --git a/indra/newview/llfloatergesture.h b/indra/newview/llfloatergesture.h index 629d77b949..1676542c77 100644 --- a/indra/newview/llfloatergesture.h +++ b/indra/newview/llfloatergesture.h @@ -85,7 +85,7 @@ private: * Therefore we have to copy these items to avoid viewer crash. * @see LLFloaterGesture::onActivateBtnClick */ - void getSelectedIds(std::vector<LLUUID>& ids); + void getSelectedIds(uuid_vec_t& ids); bool isActionEnabled(const LLSD& command); /** * @brief Activation rules: diff --git a/indra/newview/llfloatergodtools.cpp b/indra/newview/llfloatergodtools.cpp index eb56f387cd..fbd516ba7a 100644 --- a/indra/newview/llfloatergodtools.cpp +++ b/indra/newview/llfloatergodtools.cpp @@ -1191,7 +1191,7 @@ void LLPanelObjectTools::onClickSetBySelection(void* data) panelp->childSetValue("target_avatar_name", name); } -void LLPanelObjectTools::callbackAvatarID(const std::vector<std::string>& names, const std::vector<LLUUID>& ids) +void LLPanelObjectTools::callbackAvatarID(const std::vector<std::string>& names, const uuid_vec_t& ids) { if (ids.empty() || names.empty()) return; mTargetAvatar = ids[0]; diff --git a/indra/newview/llfloatergodtools.h b/indra/newview/llfloatergodtools.h index ef5ce02749..4e97a1058e 100644 --- a/indra/newview/llfloatergodtools.h +++ b/indra/newview/llfloatergodtools.h @@ -234,7 +234,7 @@ public: void onChangeAnything(); void onApplyChanges(); void onClickSet(); - void callbackAvatarID(const std::vector<std::string>& names, const std::vector<LLUUID>& ids); + void callbackAvatarID(const std::vector<std::string>& names, const uuid_vec_t& ids); void onClickDeletePublicOwnedBy(); void onClickDeleteAllScriptedOwnedBy(); void onClickDeleteAllOwnedBy(); diff --git a/indra/newview/llfloatergroupinvite.cpp b/indra/newview/llfloatergroupinvite.cpp index bf484c6343..5d1864b4c8 100644 --- a/indra/newview/llfloatergroupinvite.cpp +++ b/indra/newview/llfloatergroupinvite.cpp @@ -112,7 +112,7 @@ LLFloaterGroupInvite::~LLFloaterGroupInvite() } // static -void LLFloaterGroupInvite::showForGroup(const LLUUID& group_id, std::vector<LLUUID> *agent_ids) +void LLFloaterGroupInvite::showForGroup(const LLUUID& group_id, uuid_vec_t *agent_ids) { const LLFloater::Params& floater_params = LLFloater::getDefaultParams(); S32 floater_header_size = floater_params.header_height; diff --git a/indra/newview/llfloatergroupinvite.h b/indra/newview/llfloatergroupinvite.h index b3f5d75ac1..68943724df 100644 --- a/indra/newview/llfloatergroupinvite.h +++ b/indra/newview/llfloatergroupinvite.h @@ -43,7 +43,7 @@ class LLFloaterGroupInvite public: virtual ~LLFloaterGroupInvite(); - static void showForGroup(const LLUUID &group_id, std::vector<LLUUID> *agent_ids = NULL); + static void showForGroup(const LLUUID &group_id, uuid_vec_t *agent_ids = NULL); protected: LLFloaterGroupInvite(const LLUUID& group_id = LLUUID::null); diff --git a/indra/newview/llfloaterimagepreview.cpp b/indra/newview/llfloaterimagepreview.cpp index 9917593c91..6b754bd065 100644 --- a/indra/newview/llfloaterimagepreview.cpp +++ b/indra/newview/llfloaterimagepreview.cpp @@ -611,7 +611,6 @@ LLImagePreviewAvatar::LLImagePreviewAvatar(S32 width, S32 height) : LLViewerDyna mCameraZoom = 1.f; mDummyAvatar = (LLVOAvatar*)gObjectList.createObjectViewer(LL_PCODE_LEGACY_AVATAR, gAgent.getRegion()); - mDummyAvatar->initInstance(); mDummyAvatar->createDrawable(&gPipeline); mDummyAvatar->mIsDummy = TRUE; mDummyAvatar->mSpecialRenderMode = 2; diff --git a/indra/newview/llfloaterinventory.cpp b/indra/newview/llfloaterinventory.cpp index 844f0ac509..4bffd41d29 100644 --- a/indra/newview/llfloaterinventory.cpp +++ b/indra/newview/llfloaterinventory.cpp @@ -34,7 +34,7 @@ #include "llfloaterinventory.h" -#include "llagent.h" +#include "llagentcamera.h" //#include "llfirstuse.h" #include "llfloaterreg.h" #include "llinventorymodel.h" @@ -64,42 +64,6 @@ BOOL LLFloaterInventory::postBuild() return TRUE; } - -void LLFloaterInventory::draw() -{ - updateTitle(); - LLFloater::draw(); -} - -void LLFloaterInventory::updateTitle() -{ - LLLocale locale(LLLocale::USER_LOCALE); - std::string item_count_string; - LLResMgr::getInstance()->getIntegerString(item_count_string, gInventory.getItemCount()); - - LLStringUtil::format_map_t string_args; - string_args["[ITEM_COUNT]"] = item_count_string; - string_args["[FILTER]"] = mPanelMainInventory->getFilterText(); - - if (LLInventoryModel::backgroundFetchActive()) - { - setTitle(getString("TitleFetching", string_args)); - } - else if (LLInventoryModel::isEverythingFetched()) - { - setTitle(getString("TitleCompleted", string_args)); - } - else - { - setTitle(getString("Title")); - } -} - -void LLFloaterInventory::changed(U32 mask) -{ - updateTitle(); -} - LLInventoryPanel* LLFloaterInventory::getPanel() { if (mPanelMainInventory) @@ -115,7 +79,7 @@ LLFloaterInventory* LLFloaterInventory::showAgentInventory() instance_num = (instance_num + 1) % S32_MAX; LLFloaterInventory* iv = NULL; - if (!gAgent.cameraMouselook()) + if (!gAgentCamera.cameraMouselook()) { iv = LLFloaterReg::showTypedInstance<LLFloaterInventory>("inventory", LLSD(instance_num)); } diff --git a/indra/newview/llfloaterinventory.h b/indra/newview/llfloaterinventory.h index b661c391a7..473d2b189d 100644 --- a/indra/newview/llfloaterinventory.h +++ b/indra/newview/llfloaterinventory.h @@ -63,13 +63,9 @@ public: static void cleanup(); // Inherited functionality - /*virtual*/ void changed(U32 mask); - /*virtual*/ void draw(); /*virtual*/ void onOpen(const LLSD& key); LLInventoryPanel* getPanel(); -protected: - void updateTitle(); private: LLPanelMainInventory* mPanelMainInventory; }; diff --git a/indra/newview/llfloaterlagmeter.cpp b/indra/newview/llfloaterlagmeter.cpp index 85186cee6b..100cbdb217 100644 --- a/indra/newview/llfloaterlagmeter.cpp +++ b/indra/newview/llfloaterlagmeter.cpp @@ -206,7 +206,7 @@ void LLFloaterLagMeter::determineNetwork() // *FIXME: We can't blame a large ping time on anything in // particular if the frame rate is low, because a low frame - // rate is a sure recipe for crappy ping times right now until + // rate is a sure recipe for bad ping times right now until // the network handlers are de-synched from the rendering. F32 client_frame_time_ms = 1000.0f * LLViewerStats::getInstance()->mFPSStat.getMeanDuration(); diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index 65003d9b5c..6467ee13b0 100644 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -2774,7 +2774,7 @@ void LLPanelLandAccess::onClickAddAccess() gFloaterView->getParentFloater(this)->addDependentFloater(LLFloaterAvatarPicker::show(boost::bind(&LLPanelLandAccess::callbackAvatarCBAccess, this, _1,_2)) ); } -void LLPanelLandAccess::callbackAvatarCBAccess(const std::vector<std::string>& names, const std::vector<LLUUID>& ids) +void LLPanelLandAccess::callbackAvatarCBAccess(const std::vector<std::string>& names, const uuid_vec_t& ids) { if (!names.empty() && !ids.empty()) { @@ -2819,7 +2819,7 @@ void LLPanelLandAccess::onClickAddBanned() } // static -void LLPanelLandAccess::callbackAvatarCBBanned(const std::vector<std::string>& names, const std::vector<LLUUID>& ids) +void LLPanelLandAccess::callbackAvatarCBBanned(const std::vector<std::string>& names, const uuid_vec_t& ids) { if (!names.empty() && !ids.empty()) { diff --git a/indra/newview/llfloaterland.h b/indra/newview/llfloaterland.h index a4785e8f5b..fe80766a74 100644 --- a/indra/newview/llfloaterland.h +++ b/indra/newview/llfloaterland.h @@ -167,7 +167,7 @@ public: static void onClickSet(void* data); static void onClickClear(void* data); static void onClickShow(void* data); - static void callbackAvatarPick(const std::vector<std::string>& names, const std::vector<LLUUID>& ids, void* data); + static void callbackAvatarPick(const std::vector<std::string>& names, const uuid_vec_t& ids, void* data); static void finalizeAvatarPick(void* data); static void callbackHighlightTransferable(S32 option, void* userdata); static void onClickStartAuction(void*); @@ -374,8 +374,8 @@ public: void onClickAddAccess(); void onClickAddBanned(); - void callbackAvatarCBBanned(const std::vector<std::string>& names, const std::vector<LLUUID>& ids); - void callbackAvatarCBAccess(const std::vector<std::string>& names, const std::vector<LLUUID>& ids); + void callbackAvatarCBBanned(const std::vector<std::string>& names, const uuid_vec_t& ids); + void callbackAvatarCBAccess(const std::vector<std::string>& names, const uuid_vec_t& ids); protected: LLNameListCtrl* mListAccess; diff --git a/indra/newview/llfloatermap.cpp b/indra/newview/llfloatermap.cpp index 051ab585e2..8894628788 100644 --- a/indra/newview/llfloatermap.cpp +++ b/indra/newview/llfloatermap.cpp @@ -41,7 +41,7 @@ #include "llglheaders.h" // Viewer includes -#include "llagent.h" +#include "llagentcamera.h" #include "llviewercontrol.h" #include "llnetmap.h" #include "lltracker.h" @@ -196,7 +196,7 @@ void LLFloaterMap::draw() setDirectionPos( mTextBoxSouthEast, rotation + F_PI + F_PI_BY_TWO + F_PI_BY_TWO / 2); // Note: we can't just gAgent.check cameraMouselook() because the transition states are wrong. - if( gAgent.cameraMouselook()) + if(gAgentCamera.cameraMouselook()) { setMouseOpaque(FALSE); getDragHandle()->setMouseOpaque(FALSE); diff --git a/indra/newview/llfloaternamedesc.cpp b/indra/newview/llfloaternamedesc.cpp index 159ce41b79..5c343ecb22 100644 --- a/indra/newview/llfloaternamedesc.cpp +++ b/indra/newview/llfloaternamedesc.cpp @@ -169,16 +169,14 @@ void LLFloaterNameDesc::onBtnOK( ) { childDisable("ok_btn"); // don't allow inadvertent extra uploads - LLAssetStorage::LLStoreAssetCallback callback = NULL; S32 expected_upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload(); // kinda hack - assumes that unsubclassed LLFloaterNameDesc is only used for uploading chargeable assets, which it is right now (it's only used unsubclassed for the sound upload dialog, and THAT should be a subclass). - void *nruserdata = NULL; std::string display_name = LLStringUtil::null; upload_new_resource(mFilenameAndPath, // file childGetValue("name_form").asString(), childGetValue("description_form").asString(), - 0, LLFolderType::FT_NONE, LLInventoryType::IT_NONE, + LLFolderType::FT_NONE, LLInventoryType::IT_NONE, LLFloaterPerms::getNextOwnerPerms(), LLFloaterPerms::getGroupPerms(), LLFloaterPerms::getEveryonePerms(), - display_name, callback, expected_upload_cost, nruserdata); + display_name, NULL, expected_upload_cost); closeFloater(false); } diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index 8bffe9bf57..3487f52f35 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -110,6 +110,9 @@ const F32 MAX_USER_FAR_CLIP = 512.f; const F32 MIN_USER_FAR_CLIP = 64.f; +//control value for middle mouse as talk2push button +const static std::string MIDDLE_MOUSE_CV = "MiddleMouse"; + class LLVoiceSetKeyDialog : public LLModalDialog { public: @@ -180,7 +183,6 @@ void LLVoiceSetKeyDialog::onCancel(void* user_data) // a static member and update all our static callbacks void handleNameTagOptionChanged(const LLSD& newvalue); -viewer_media_t get_web_media(); bool callback_clear_browser_cache(const LLSD& notification, const LLSD& response); //bool callback_skip_dialogs(const LLSD& notification, const LLSD& response, LLFloaterPreference* floater); @@ -188,23 +190,14 @@ bool callback_clear_browser_cache(const LLSD& notification, const LLSD& response void fractionFromDecimal(F32 decimal_val, S32& numerator, S32& denominator); -viewer_media_t get_web_media() -{ - viewer_media_t media_source = LLViewerMedia::newMediaImpl(LLUUID::null); - media_source->initializeMedia("text/html"); - return media_source; -} - - bool callback_clear_browser_cache(const LLSD& notification, const LLSD& response) { S32 option = LLNotificationsUtil::getSelectedOption(notification, response); if ( option == 0 ) // YES { // clean web - viewer_media_t media_source = get_web_media(); - if (media_source && media_source->hasMedia()) - media_source->getMediaPlugin()->clear_cache(); + LLViewerMedia::clearAllCaches(); + LLViewerMedia::clearAllCookies(); // clean nav bar history LLNavigationBar::getInstance()->clearHistoryCache(); @@ -426,17 +419,14 @@ void LLFloaterPreference::apply() std::string cache_location = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, ""); childSetText("cache_location", cache_location); - viewer_media_t media_source = get_web_media(); - if (media_source && media_source->hasMedia()) + LLViewerMedia::setCookiesEnabled(childGetValue("cookies_enabled")); + + if(hasChild("web_proxy_enabled") &&hasChild("web_proxy_editor") && hasChild("web_proxy_port")) { - media_source->getMediaPlugin()->enable_cookies(childGetValue("cookies_enabled")); - if(hasChild("web_proxy_enabled") &&hasChild("web_proxy_editor") && hasChild("web_proxy_port")) - { - bool proxy_enable = childGetValue("web_proxy_enabled"); - std::string proxy_address = childGetValue("web_proxy_editor"); - int proxy_port = childGetValue("web_proxy_port"); - media_source->getMediaPlugin()->proxy_setup(proxy_enable, proxy_address, proxy_port); - } + bool proxy_enable = childGetValue("web_proxy_enabled"); + std::string proxy_address = childGetValue("web_proxy_editor"); + int proxy_port = childGetValue("web_proxy_port"); + LLViewerMedia::setProxyConfig(proxy_enable, proxy_address, proxy_port); } // LLWString busy_response = utf8str_to_wstring(getChild<LLUICtrl>("busy_response")->getValue().asString()); @@ -1008,9 +998,17 @@ void LLFloaterPreference::setKey(KEY key) void LLFloaterPreference::onClickSetMiddleMouse() { - childSetValue("modifier_combo", "MiddleMouse"); + LLUICtrl* p2t_line_editor = getChild<LLUICtrl>("modifier_combo"); + // update the control right away since we no longer wait for apply - getChild<LLUICtrl>("modifier_combo")->onCommit(); + p2t_line_editor->setControlValue(MIDDLE_MOUSE_CV); + + //push2talk button "middle mouse" control value is in English, need to localize it for presentation + LLPanel* advanced_preferences = dynamic_cast<LLPanel*>(p2t_line_editor->getParent()); + if (advanced_preferences) + { + p2t_line_editor->setValue(advanced_preferences->getString("middle_mouse")); + } } /* void LLFloaterPreference::onClickSkipDialogs() @@ -1302,6 +1300,16 @@ BOOL LLPanelPreference::postBuild() getChild<LLCheckBoxCtrl>("voice_call_friends_only_check")->setCommitCallback(boost::bind(&showFriendsOnlyWarning, _1, _2)); } + // Panel Advanced + if (hasChild("modifier_combo")) + { + //localizing if push2talk button is set to middle mouse + if (MIDDLE_MOUSE_CV == childGetValue("modifier_combo").asString()) + { + childSetValue("modifier_combo", getString("middle_mouse")); + } + } + apply(); return true; } diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index d54736e942..3758cbe74f 100644 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -610,7 +610,7 @@ void LLPanelRegionGeneralInfo::onClickKick() parent_floater->addDependentFloater(child_floater); } -void LLPanelRegionGeneralInfo::onKickCommit(const std::vector<std::string>& names, const std::vector<LLUUID>& ids) +void LLPanelRegionGeneralInfo::onKickCommit(const std::vector<std::string>& names, const uuid_vec_t& ids) { if (names.empty() || ids.empty()) return; if(ids[0].notNull()) @@ -848,7 +848,7 @@ void LLPanelRegionDebugInfo::onClickChooseAvatar() } -void LLPanelRegionDebugInfo::callbackAvatarID(const std::vector<std::string>& names, const std::vector<LLUUID>& ids) +void LLPanelRegionDebugInfo::callbackAvatarID(const std::vector<std::string>& names, const uuid_vec_t& ids) { if (ids.empty() || names.empty()) return; mTargetAvatar = ids[0]; @@ -1531,7 +1531,7 @@ void LLPanelEstateInfo::onClickKickUser() parent_floater->addDependentFloater(child_floater); } -void LLPanelEstateInfo::onKickUserCommit(const std::vector<std::string>& names, const std::vector<LLUUID>& ids) +void LLPanelEstateInfo::onKickUserCommit(const std::vector<std::string>& names, const uuid_vec_t& ids) { if (names.empty() || ids.empty()) return; @@ -1616,7 +1616,6 @@ bool LLPanelEstateInfo::isLindenEstate() return (estate_id <= ESTATE_LAST_LINDEN); } -typedef std::vector<LLUUID> AgentOrGroupIDsVector; struct LLEstateAccessChangeInfo { LLEstateAccessChangeInfo(const LLSD& sd) @@ -1637,7 +1636,7 @@ struct LLEstateAccessChangeInfo LLSD sd; sd["name"] = mDialogName; sd["operation"] = (S32)mOperationFlag; - for (AgentOrGroupIDsVector::const_iterator it = mAgentOrGroupIDs.begin(); + for (uuid_vec_t::const_iterator it = mAgentOrGroupIDs.begin(); it != mAgentOrGroupIDs.end(); ++it) { @@ -1648,7 +1647,7 @@ struct LLEstateAccessChangeInfo U32 mOperationFlag; // ESTATE_ACCESS_BANNED_AGENT_ADD, _REMOVE, etc. std::string mDialogName; - AgentOrGroupIDsVector mAgentOrGroupIDs; // List of agent IDs to apply to this change + uuid_vec_t mAgentOrGroupIDs; // List of agent IDs to apply to this change }; // Special case callback for groups, since it has different callback format than names @@ -1716,7 +1715,7 @@ bool LLPanelEstateInfo::accessAddCore2(const LLSD& notification, const LLSD& res } // static -void LLPanelEstateInfo::accessAddCore3(const std::vector<std::string>& names, const std::vector<LLUUID>& ids, void* data) +void LLPanelEstateInfo::accessAddCore3(const std::vector<std::string>& names, const uuid_vec_t& ids, void* data) { LLEstateAccessChangeInfo* change_info = (LLEstateAccessChangeInfo*)data; if (!change_info) return; diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h index 8d315bdb78..482ebb3303 100644 --- a/indra/newview/llfloaterregioninfo.h +++ b/indra/newview/llfloaterregioninfo.h @@ -168,7 +168,7 @@ public: protected: virtual BOOL sendUpdate(); void onClickKick(); - void onKickCommit(const std::vector<std::string>& names, const std::vector<LLUUID>& ids); + void onKickCommit(const std::vector<std::string>& names, const uuid_vec_t& ids); static void onClickKickAll(void* userdata); bool onKickAllCommit(const LLSD& notification, const LLSD& response); static void onClickMessage(void* userdata); @@ -193,7 +193,7 @@ protected: virtual BOOL sendUpdate(); void onClickChooseAvatar(); - void callbackAvatarID(const std::vector<std::string>& names, const std::vector<LLUUID>& ids); + void callbackAvatarID(const std::vector<std::string>& names, const uuid_vec_t& ids); static void onClickReturn(void *); bool callbackReturn(const LLSD& notification, const LLSD& response); static void onClickTopColliders(void*); @@ -284,7 +284,7 @@ public: // Core methods for all above add/remove button clicks static void accessAddCore(U32 operation_flag, const std::string& dialog_name); static bool accessAddCore2(const LLSD& notification, const LLSD& response); - static void accessAddCore3(const std::vector<std::string>& names, const std::vector<LLUUID>& ids, void* data); + static void accessAddCore3(const std::vector<std::string>& names, const uuid_vec_t& ids, void* data); static void accessRemoveCore(U32 operation_flag, const std::string& dialog_name, const std::string& list_ctrl_name); static bool accessRemoveCore2(const LLSD& notification, const LLSD& response); @@ -296,7 +296,7 @@ public: // Send the actual EstateOwnerRequest "estateaccessdelta" message static void sendEstateAccessDelta(U32 flags, const LLUUID& agent_id); - void onKickUserCommit(const std::vector<std::string>& names, const std::vector<LLUUID>& ids); + void onKickUserCommit(const std::vector<std::string>& names, const uuid_vec_t& ids); static void onClickMessageEstate(void* data); bool onMessageCommit(const LLSD& notification, const LLSD& response); diff --git a/indra/newview/llfloaterreporter.cpp b/indra/newview/llfloaterreporter.cpp index 0f3c176cea..b42b34835d 100644 --- a/indra/newview/llfloaterreporter.cpp +++ b/indra/newview/llfloaterreporter.cpp @@ -84,6 +84,8 @@ #include "llassetuploadresponders.h" #include "llagentui.h" +#include "lltrans.h" + const U32 INCLUDE_SCREENSHOT = 0x01 << 0; //----------------------------------------------------------------------------- @@ -306,7 +308,7 @@ void LLFloaterReporter::onClickSelectAbuser() gFloaterView->getParentFloater(this)->addDependentFloater(LLFloaterAvatarPicker::show(boost::bind(&LLFloaterReporter::callbackAvatarID, this, _1, _2), FALSE, TRUE )); } -void LLFloaterReporter::callbackAvatarID(const std::vector<std::string>& names, const std::vector<LLUUID>& ids) +void LLFloaterReporter::callbackAvatarID(const std::vector<std::string>& names, const uuid_vec_t& ids) { if (ids.empty() || names.empty()) return; @@ -372,8 +374,7 @@ void LLFloaterReporter::onClickSend(void *userdata) return; } - - LLUploadDialog::modalUploadDialog("Uploading...\n\nReport"); + LLUploadDialog::modalUploadDialog(LLTrans::getString("uploading_abuse_report")); // *TODO don't upload image if checkbox isn't checked std::string url = gAgent.getRegion()->getCapability("SendUserReport"); std::string sshot_url = gAgent.getRegion()->getCapability("SendUserReportWithScreenshot"); diff --git a/indra/newview/llfloaterreporter.h b/indra/newview/llfloaterreporter.h index 7c6473f975..23784b7650 100644 --- a/indra/newview/llfloaterreporter.h +++ b/indra/newview/llfloaterreporter.h @@ -123,7 +123,7 @@ private: void setPosBox(const LLVector3d &pos); void enableControls(BOOL own_avatar); void getObjectInfo(const LLUUID& object_id); - void callbackAvatarID(const std::vector<std::string>& names, const std::vector<LLUUID>& ids); + void callbackAvatarID(const std::vector<std::string>& names, const uuid_vec_t& ids); void setFromAvatar(const LLUUID& avatar_id, const std::string& avatar_name = LLStringUtil::null); private: diff --git a/indra/newview/llfloaterscriptlimits.cpp b/indra/newview/llfloaterscriptlimits.cpp index 122bdc8bc7..4792d761d8 100644 --- a/indra/newview/llfloaterscriptlimits.cpp +++ b/indra/newview/llfloaterscriptlimits.cpp @@ -110,7 +110,7 @@ BOOL LLFloaterScriptLimits::postBuild() if(!mTab) { - llinfos << "Error! couldn't get scriptlimits_panels, aborting Script Information setup" << llendl; + llwarns << "Error! couldn't get scriptlimits_panels, aborting Script Information setup" << llendl; return FALSE; } @@ -214,7 +214,7 @@ void fetchScriptLimitsRegionInfoResponder::result(const LLSD& content) LLFloaterScriptLimits* instance = LLFloaterReg::getTypedInstance<LLFloaterScriptLimits>("script_limits"); if(!instance) { - llinfos << "Failed to get llfloaterscriptlimits instance" << llendl; + llwarns << "Failed to get llfloaterscriptlimits instance" << llendl; } } @@ -227,7 +227,7 @@ void fetchScriptLimitsRegionInfoResponder::result(const LLSD& content) void fetchScriptLimitsRegionInfoResponder::error(U32 status, const std::string& reason) { - llinfos << "Error from responder " << reason << llendl; + llwarns << "Error from responder " << reason << llendl; } void fetchScriptLimitsRegionSummaryResponder::result(const LLSD& content_ref) @@ -281,26 +281,40 @@ void fetchScriptLimitsRegionSummaryResponder::result(const LLSD& content_ref) OSMessageBox(nice_llsd.str(), "summary response:", 0); - llinfos << "summary response:" << *content << llendl; + llwarns << "summary response:" << *content << llendl; #endif LLFloaterScriptLimits* instance = LLFloaterReg::getTypedInstance<LLFloaterScriptLimits>("script_limits"); if(!instance) { - llinfos << "Failed to get llfloaterscriptlimits instance" << llendl; + llwarns << "Failed to get llfloaterscriptlimits instance" << llendl; } else { LLTabContainer* tab = instance->getChild<LLTabContainer>("scriptlimits_panels"); - LLPanelScriptLimitsRegionMemory* panel_memory = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_memory_panel"); - panel_memory->setRegionSummary(content); + if(tab) + { + LLPanelScriptLimitsRegionMemory* panel_memory = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_memory_panel"); + if(panel_memory) + { + panel_memory->childSetValue("loading_text", LLSD(std::string(""))); + + LLButton* btn = panel_memory->getChild<LLButton>("refresh_list_btn"); + if(btn) + { + btn->setEnabled(true); + } + + panel_memory->setRegionSummary(content); + } + } } } void fetchScriptLimitsRegionSummaryResponder::error(U32 status, const std::string& reason) { - llinfos << "Error from responder " << reason << llendl; + llwarns << "Error from responder " << reason << llendl; } void fetchScriptLimitsRegionDetailsResponder::result(const LLSD& content_ref) @@ -383,7 +397,7 @@ result (map) if(!instance) { - llinfos << "Failed to get llfloaterscriptlimits instance" << llendl; + llwarns << "Failed to get llfloaterscriptlimits instance" << llendl; } else { @@ -397,19 +411,19 @@ result (map) } else { - llinfos << "Failed to get scriptlimits memory panel" << llendl; + llwarns << "Failed to get scriptlimits memory panel" << llendl; } } else { - llinfos << "Failed to get scriptlimits_panels" << llendl; + llwarns << "Failed to get scriptlimits_panels" << llendl; } } } void fetchScriptLimitsRegionDetailsResponder::error(U32 status, const std::string& reason) { - llinfos << "Error from responder " << reason << llendl; + llwarns << "Error from responder " << reason << llendl; } void fetchScriptLimitsAttachmentInfoResponder::result(const LLSD& content_ref) @@ -471,7 +485,7 @@ void fetchScriptLimitsAttachmentInfoResponder::result(const LLSD& content_ref) if(!instance) { - llinfos << "Failed to get llfloaterscriptlimits instance" << llendl; + llwarns << "Failed to get llfloaterscriptlimits instance" << llendl; } else { @@ -481,29 +495,46 @@ void fetchScriptLimitsAttachmentInfoResponder::result(const LLSD& content_ref) LLPanelScriptLimitsAttachment* panel = (LLPanelScriptLimitsAttachment*)tab->getChild<LLPanel>("script_limits_my_avatar_panel"); if(panel) { + panel->childSetValue("loading_text", LLSD(std::string(""))); + + LLButton* btn = panel->getChild<LLButton>("refresh_list_btn"); + if(btn) + { + btn->setEnabled(true); + } + panel->setAttachmentDetails(content); } else { - llinfos << "Failed to get script_limits_my_avatar_panel" << llendl; + llwarns << "Failed to get script_limits_my_avatar_panel" << llendl; } } else { - llinfos << "Failed to get scriptlimits_panels" << llendl; + llwarns << "Failed to get scriptlimits_panels" << llendl; } } } void fetchScriptLimitsAttachmentInfoResponder::error(U32 status, const std::string& reason) { - llinfos << "Error from responder " << reason << llendl; + llwarns << "Error from responder " << reason << llendl; } ///---------------------------------------------------------------------------- // Memory Panel ///---------------------------------------------------------------------------- +LLPanelScriptLimitsRegionMemory::~LLPanelScriptLimitsRegionMemory() +{ + if(!mParcelId.isNull()) + { + LLRemoteParcelInfoProcessor::getInstance()->removeObserver(mParcelId, this); + mParcelId.setNull(); + } +}; + BOOL LLPanelScriptLimitsRegionMemory::getLandScriptResources() { LLSD body; @@ -544,6 +575,11 @@ void LLPanelScriptLimitsRegionMemory::setParcelID(const LLUUID& parcel_id) { if (!parcel_id.isNull()) { + if(!mParcelId.isNull()) + { + LLRemoteParcelInfoProcessor::getInstance()->removeObserver(mParcelId, this); + mParcelId.setNull(); + } LLRemoteParcelInfoProcessor::getInstance()->addObserver(parcel_id, this); LLRemoteParcelInfoProcessor::getInstance()->sendParcelInfoRequest(parcel_id); } @@ -597,7 +633,7 @@ void LLPanelScriptLimitsRegionMemory::setRegionDetails(LLSD content) if(!list) { - llinfos << "Error getting the scripts_list control" << llendl; + llwarns << "Error getting the scripts_list control" << llendl; return; } @@ -608,7 +644,7 @@ void LLPanelScriptLimitsRegionMemory::setRegionDetails(LLSD content) std::string msg_parcels = LLTrans::getString("ScriptLimitsParcelsOwned", args_parcels); childSetValue("parcels_listed", LLSD(msg_parcels)); - std::vector<LLUUID> names_requested; + uuid_vec_t names_requested; // This makes the assumption that all objects will have the same set // of attributes, ie they will all have, or none will have locations @@ -734,8 +770,6 @@ void LLPanelScriptLimitsRegionMemory::setRegionDetails(LLSD content) // save the structure to make object return easier mContent = content; - - childSetValue("loading_text", LLSD(std::string(""))); } void LLPanelScriptLimitsRegionMemory::setRegionSummary(LLSD content) @@ -754,7 +788,7 @@ void LLPanelScriptLimitsRegionMemory::setRegionSummary(LLSD content) } else { - llinfos << "summary doesn't contain memory info" << llendl; + llwarns << "summary doesn't contain memory info" << llendl; return; } @@ -772,7 +806,7 @@ void LLPanelScriptLimitsRegionMemory::setRegionSummary(LLSD content) } else { - llinfos << "summary doesn't contain urls info" << llendl; + llwarns << "summary doesn't contain urls info" << llendl; return; } @@ -919,8 +953,6 @@ void LLPanelScriptLimitsRegionMemory::clearList() // static void LLPanelScriptLimitsRegionMemory::onClickRefresh(void* userdata) { - llinfos << "LLPanelRegionGeneralInfo::onClickRefresh" << llendl; - LLFloaterScriptLimits* instance = LLFloaterReg::getTypedInstance<LLFloaterScriptLimits>("script_limits"); if(instance) { @@ -930,6 +962,13 @@ void LLPanelScriptLimitsRegionMemory::onClickRefresh(void* userdata) LLPanelScriptLimitsRegionMemory* panel_memory = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_memory_panel"); if(panel_memory) { + //To stop people from hammering the refesh button and accidentally dosing themselves - enough requests can crash the viewer! + //turn the button off, then turn it on when we get a response + LLButton* btn = panel_memory->getChild<LLButton>("refresh_list_btn"); + if(btn) + { + btn->setEnabled(false); + } panel_memory->clearList(); panel_memory->StartRequestChain(); @@ -969,7 +1008,6 @@ void LLPanelScriptLimitsRegionMemory::showBeacon() // static void LLPanelScriptLimitsRegionMemory::onClickHighlight(void* userdata) { - llinfos << "LLPanelRegionGeneralInfo::onClickHighlight" << llendl; LLFloaterScriptLimits* instance = LLFloaterReg::getTypedInstance<LLFloaterScriptLimits>("script_limits"); if(instance) { @@ -1075,7 +1113,6 @@ void LLPanelScriptLimitsRegionMemory::returnObjects() // static void LLPanelScriptLimitsRegionMemory::onClickReturn(void* userdata) { - llinfos << "LLPanelRegionGeneralInfo::onClickReturn" << llendl; LLFloaterScriptLimits* instance = LLFloaterReg::getTypedInstance<LLFloaterScriptLimits>("script_limits"); if(instance) { @@ -1178,6 +1215,12 @@ void LLPanelScriptLimitsAttachment::setAttachmentDetails(LLSD content) setAttachmentSummary(content); childSetValue("loading_text", LLSD(std::string(""))); + + LLButton* btn = getChild<LLButton>("refresh_list_btn"); + if(btn) + { + btn->setEnabled(true); + } } BOOL LLPanelScriptLimitsAttachment::postBuild() @@ -1218,7 +1261,7 @@ void LLPanelScriptLimitsAttachment::setAttachmentSummary(LLSD content) } else { - llinfos << "attachment details don't contain memory summary info" << llendl; + llwarns << "attachment details don't contain memory summary info" << llendl; return; } @@ -1236,7 +1279,7 @@ void LLPanelScriptLimitsAttachment::setAttachmentSummary(LLSD content) } else { - llinfos << "attachment details don't contain urls summary info" << llendl; + llwarns << "attachment details don't contain urls summary info" << llendl; return; } @@ -1267,16 +1310,23 @@ void LLPanelScriptLimitsAttachment::setAttachmentSummary(LLSD content) // static void LLPanelScriptLimitsAttachment::onClickRefresh(void* userdata) -{ - llinfos << "Refresh clicked" << llendl; - +{ LLFloaterScriptLimits* instance = LLFloaterReg::getTypedInstance<LLFloaterScriptLimits>("script_limits"); if(instance) { LLTabContainer* tab = instance->getChild<LLTabContainer>("scriptlimits_panels"); LLPanelScriptLimitsAttachment* panel_attachments = (LLPanelScriptLimitsAttachment*)tab->getChild<LLPanel>("script_limits_my_avatar_panel"); + LLButton* btn = panel_attachments->getChild<LLButton>("refresh_list_btn"); + + //To stop people from hammering the refesh button and accidentally dosing themselves - enough requests can crash the viewer! + //turn the button off, then turn it on when we get a response + if(btn) + { + btn->setEnabled(false); + } panel_attachments->clearList(); panel_attachments->requestAttachmentDetails(); + return; } else diff --git a/indra/newview/llfloaterscriptlimits.h b/indra/newview/llfloaterscriptlimits.h index 0cba4d72f2..3c32b9f701 100644 --- a/indra/newview/llfloaterscriptlimits.h +++ b/indra/newview/llfloaterscriptlimits.h @@ -153,10 +153,7 @@ public: mParcelMemoryMax(0), mParcelMemoryUsed(0) {}; - ~LLPanelScriptLimitsRegionMemory() - { - LLRemoteParcelInfoProcessor::getInstance()->removeObserver(mParcelId, this); - }; + ~LLPanelScriptLimitsRegionMemory(); // LLPanel virtual BOOL postBuild(); diff --git a/indra/newview/llfloatersellland.cpp b/indra/newview/llfloatersellland.cpp index eae6121e79..980b456497 100644 --- a/indra/newview/llfloatersellland.cpp +++ b/indra/newview/llfloatersellland.cpp @@ -96,7 +96,7 @@ private: static void doShowObjects(void *userdata); static bool callbackHighlightTransferable(const LLSD& notification, const LLSD& response); - void callbackAvatarPick(const std::vector<std::string>& names, const std::vector<LLUUID>& ids); + void callbackAvatarPick(const std::vector<std::string>& names, const uuid_vec_t& ids); public: virtual BOOL postBuild(); @@ -391,7 +391,7 @@ void LLFloaterSellLandUI::doSelectAgent() addDependentFloater(LLFloaterAvatarPicker::show(boost::bind(&LLFloaterSellLandUI::callbackAvatarPick, this, _1, _2), FALSE, TRUE)); } -void LLFloaterSellLandUI::callbackAvatarPick(const std::vector<std::string>& names, const std::vector<LLUUID>& ids) +void LLFloaterSellLandUI::callbackAvatarPick(const std::vector<std::string>& names, const uuid_vec_t& ids) { LLParcel* parcel = mParcelSelection->getParcel(); diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp index 2df297fc42..adac9861d4 100644 --- a/indra/newview/llfloatersnapshot.cpp +++ b/indra/newview/llfloatersnapshot.cpp @@ -38,7 +38,9 @@ // Viewer includes #include "llagent.h" +#include "llagentcamera.h" #include "llagentui.h" +#include "llavatarpropertiesprocessor.h" #include "llbottomtray.h" #include "llbutton.h" #include "llcallbacklist.h" @@ -166,7 +168,7 @@ public: void setSnapshotBufferType(LLViewerWindow::ESnapshotType type) { mSnapshotBufferType = type; } void updateSnapshot(BOOL new_snapshot, BOOL new_thumbnail = FALSE, F32 delay = 0.f); LLFloaterPostcard* savePostcard(); - void saveTexture(); + void saveTexture(bool set_as_profile_pic = false); BOOL saveLocal(); void saveWeb(std::string url); @@ -912,7 +914,7 @@ BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview ) previewp->mSnapshotUpToDate = TRUE; previewp->generateThumbnailImage(TRUE) ; - previewp->mPosTakenGlobal = gAgent.getCameraPositionGlobal(); + previewp->mPosTakenGlobal = gAgentCamera.getCameraPositionGlobal(); previewp->mShineCountdown = 4; // wait a few frames to avoid animation glitch due to readback this frame } } @@ -974,13 +976,21 @@ LLFloaterPostcard* LLSnapshotLivePreview::savePostcard() return floater; } -void LLSnapshotLivePreview::saveTexture() +// Callback for asset upload +void profile_pic_upload_callback(const LLUUID& uuid) +{ + LLFloaterSnapshot* floater = LLFloaterReg::getTypedInstance<LLFloaterSnapshot>("snapshot"); + floater->setAsProfilePic(uuid); +} + + +void LLSnapshotLivePreview::saveTexture(bool set_as_profile_pic) { // gen a new uuid for this asset LLTransactionID tid; tid.generate(); LLAssetID new_asset_id = tid.makeAssetID(gAgent.getSecureSessionID()); - + LLPointer<LLImageJ2C> formatted = new LLImageJ2C; LLPointer<LLImageRaw> scaled = new LLImageRaw(mPreviewImage->getData(), mPreviewImage->getWidth(), @@ -991,26 +1001,30 @@ void LLSnapshotLivePreview::saveTexture() if (formatted->encode(scaled, 0.0f)) { + boost::function<void(const LLUUID& uuid)> callback = NULL; + + if (set_as_profile_pic) + { + callback = profile_pic_upload_callback; + } + LLVFile::writeFile(formatted->getData(), formatted->getDataSize(), gVFS, new_asset_id, LLAssetType::AT_TEXTURE); std::string pos_string; LLAgentUI::buildLocationString(pos_string, LLAgentUI::LOCATION_FORMAT_FULL); std::string who_took_it; LLAgentUI::buildFullname(who_took_it); - LLAssetStorage::LLStoreAssetCallback callback = NULL; S32 expected_upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload(); - void *userdata = NULL; upload_new_resource(tid, // tid LLAssetType::AT_TEXTURE, "Snapshot : " + pos_string, "Taken by " + who_took_it + " at " + pos_string, - 0, LLFolderType::FT_SNAPSHOT_CATEGORY, LLInventoryType::IT_SNAPSHOT, PERM_ALL, // Note: Snapshots to inventory is a special case of content upload PERM_NONE, // that ignores the user's premissions preferences and continues to PERM_NONE, // always use these fairly permissive hard-coded initial perms. - MG "Snapshot : " + pos_string, - callback, expected_upload_cost, userdata); + callback, expected_upload_cost); gViewerWindow->playSnapshotAnimAndSound(); } else @@ -1100,7 +1114,7 @@ void LLSnapshotLivePreview::saveWeb(std::string url) body["avatar_name"] = name; - LLLandmarkActions::getRegionNameAndCoordsFromPosGlobal(gAgent.getCameraPositionGlobal(), + LLLandmarkActions::getRegionNameAndCoordsFromPosGlobal(gAgentCamera.getCameraPositionGlobal(), boost::bind(&LLSnapshotLivePreview::regionNameCallback, this, url, body, _1, _2, _3, _4)); gViewerWindow->playSnapshotAnimAndSound(); @@ -1151,6 +1165,7 @@ public: static void onCommitSnapshotFormat(LLUICtrl* ctrl, void* data); 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 resetSnapshotSizeOnUI(LLFloaterSnapshot *view, S32 width, S32 height) ; static BOOL checkImageSize(LLSnapshotLivePreview* previewp, S32& width, S32& height, BOOL isWidthChanged, S32 max_value); @@ -1661,6 +1676,60 @@ void LLFloaterSnapshot::Impl::onToggleAdvanced(LLUICtrl* ctrl, void* data) } } +// This object represents a pending request for avatar properties information +class LLAvatarDataRequest : public LLAvatarPropertiesObserver +{ +public: + LLAvatarDataRequest(const LLUUID& avatar_id, const LLUUID& image_id, LLFloaterSnapshot* floater) + : mAvatarID(avatar_id), + mImageID(image_id), + mSnapshotFloater(floater) + + { + } + + ~LLAvatarDataRequest() + { + // remove ourselves as an observer + LLAvatarPropertiesProcessor::getInstance()-> + removeObserver(mAvatarID, this); + } + + void processProperties(void* data, EAvatarProcessorType type) + { + // route the data to the inspector + if (data + && type == APT_PROPERTIES) + { + + LLAvatarData* avatar_data = static_cast<LLAvatarData*>(data); + + LLAvatarData new_data(*avatar_data); + new_data.image_id = mImageID; + + LLAvatarPropertiesProcessor::getInstance()->sendAvatarPropertiesUpdate(&new_data); + + delete this; + } + } + + // Store avatar ID so we can un-register the observer on destruction + LLUUID mAvatarID; + LLUUID mImageID; + LLFloaterSnapshot* mSnapshotFloater; +}; + +void LLFloaterSnapshot::Impl::onCommitProfilePic(LLFloaterSnapshot* view) +{ + //first save to harddrive + LLSnapshotLivePreview* previewp = getPreviewView(view); + + if(previewp) + { + previewp->saveTexture(true); + } +} + void LLFloaterSnapshot::Impl::onCommitSnapshot(LLFloaterSnapshot* view, LLSnapshotLivePreview::ESnapshotType type) { LLSnapshotLivePreview* previewp = getPreviewView(view); @@ -1717,8 +1786,6 @@ void LLFloaterSnapshot::Impl::onCommitSnapshotFormat(LLUICtrl* ctrl, void* data) } } - - // Sets the named size combo to "custom" mode. // static void LLFloaterSnapshot::Impl::comboSetCustom(LLFloaterSnapshot* floater, const std::string& comboname) @@ -1732,8 +1799,6 @@ void LLFloaterSnapshot::Impl::comboSetCustom(LLFloaterSnapshot* floater, const s checkAspectRatio(floater, -1); // -1 means custom } - - //static BOOL LLFloaterSnapshot::Impl::checkImageSize(LLSnapshotLivePreview* previewp, S32& width, S32& height, BOOL isWidthChanged, S32 max_value) { @@ -1925,7 +1990,8 @@ BOOL LLFloaterSnapshot::postBuild() 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); @@ -2082,7 +2148,6 @@ void LLFloaterSnapshot::update() } } - bool LLFloaterSnapshot::updateButtons(ESnapshotMode mode) { childSetVisible("share", mode == SNAPSHOT_MAIN); @@ -2099,6 +2164,18 @@ bool LLFloaterSnapshot::updateButtons(ESnapshotMode mode) return true; } + +void LLFloaterSnapshot::setAsProfilePic(const LLUUID& image_id) +{ + LLAvatarDataRequest* avatar_data_request = new LLAvatarDataRequest(gAgent.getID(), image_id, this); + + LLAvatarPropertiesProcessor* processor = + LLAvatarPropertiesProcessor::getInstance(); + + processor->addObserver(gAgent.getID(), avatar_data_request); + processor->sendAvatarPropertiesRequest(gAgent.getID()); +} + ///---------------------------------------------------------------------------- /// Class LLSnapshotFloaterView ///---------------------------------------------------------------------------- diff --git a/indra/newview/llfloatersnapshot.h b/indra/newview/llfloatersnapshot.h index d876fc4781..931d355748 100644 --- a/indra/newview/llfloatersnapshot.h +++ b/indra/newview/llfloatersnapshot.h @@ -64,6 +64,8 @@ public: static void update(); + void setAsProfilePic(const LLUUID& image_id); + bool updateButtons(ESnapshotMode mode); static S32 getUIWinHeightLong() {return sUIWinHeightLong ;} diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp index 7c42a581ff..d8d7057c4e 100644 --- a/indra/newview/llfloatertools.cpp +++ b/indra/newview/llfloatertools.cpp @@ -38,7 +38,7 @@ #include "llcoord.h" //#include "llgl.h" -#include "llagent.h" +#include "llagentcamera.h" #include "llbutton.h" #include "llcheckboxctrl.h" #include "llcombobox.h" @@ -533,7 +533,7 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask) } // multiply by correction factor because volume sliders go [0, 0.5] - childSetValue( "slider zoom", gAgent.getCameraZoomFraction() * 0.5f); + childSetValue( "slider zoom", gAgentCamera.getCameraZoomFraction() * 0.5f); // Move buttons BOOL move_visible = (tool == LLToolGrab::getInstance()); @@ -766,7 +766,7 @@ void LLFloaterTools::onClose(bool app_quitting) // Different from handle_reset_view in that it doesn't actually // move the camera if EditCameraMovement is not set. - gAgent.resetView(gSavedSettings.getBOOL("EditCameraMovement")); + gAgentCamera.resetView(gSavedSettings.getBOOL("EditCameraMovement")); // exit component selection mode LLSelectMgr::getInstance()->promoteSelectionToRoot(); @@ -847,7 +847,7 @@ void commit_slider_zoom(LLUICtrl *ctrl) { // renormalize value, since max "volume" level is 0.5 for some reason F32 zoom_level = (F32)ctrl->getValue().asReal() * 2.f; // / 0.5f; - gAgent.setCameraZoomFraction(zoom_level); + gAgentCamera.setCameraZoomFraction(zoom_level); } void click_popup_rotate_left(void*) diff --git a/indra/newview/llfloatertopobjects.cpp b/indra/newview/llfloatertopobjects.cpp index 8ab050beaa..84ea353dab 100644 --- a/indra/newview/llfloatertopobjects.cpp +++ b/indra/newview/llfloatertopobjects.cpp @@ -315,7 +315,7 @@ void LLFloaterTopObjects::doToObjects(int action, bool all) LLCtrlListInterface *list = childGetListInterface("objects_list"); if (!list || list->getItemCount() == 0) return; - std::vector<LLUUID>::iterator id_itor; + uuid_vec_t::iterator id_itor; bool start_message = true; diff --git a/indra/newview/llfloatertopobjects.h b/indra/newview/llfloatertopobjects.h index ee3c5d3cce..8fb89a3cc5 100644 --- a/indra/newview/llfloatertopobjects.h +++ b/indra/newview/llfloatertopobjects.h @@ -89,7 +89,7 @@ private: std::string mMethod; LLSD mObjectListData; - std::vector<LLUUID> mObjectListIDs; + uuid_vec_t mObjectListIDs; U32 mCurrentMode; U32 mFlags; diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp index 67c0b530eb..f17c9765b9 100644 --- a/indra/newview/llfloaterworldmap.cpp +++ b/indra/newview/llfloaterworldmap.cpp @@ -41,6 +41,7 @@ #include "llfloaterworldmap.h" #include "llagent.h" +#include "llagentcamera.h" #include "llbutton.h" #include "llcallingcard.h" #include "llcombobox.h" @@ -50,7 +51,9 @@ //#include "llfirstuse.h" #include "llfloaterreg.h" // getTypedInstance() #include "llfocusmgr.h" +#include "llinventoryfunctions.h" #include "llinventorymodel.h" +#include "llinventorymodelbackgroundfetch.h" #include "llinventoryobserver.h" #include "lllandmarklist.h" #include "lllineeditor.h" @@ -321,7 +324,7 @@ void LLFloaterWorldMap::onOpen(const LLSD& key) // Start speculative download of landmarks const LLUUID landmark_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK); - gInventory.startBackgroundFetch(landmark_folder_id); + LLInventoryModelBackgroundFetch::instance().start(landmark_folder_id); childSetFocus("location", TRUE); gFocusMgr.triggerFocusFlash(); @@ -1220,12 +1223,12 @@ void LLFloaterWorldMap::centerOnTarget(BOOL animate) { // We've got the position finally, so we're no longer busy. JC // getWindow()->decBusyCount(); - pos_global = LLTracker::getTrackedPositionGlobal() - gAgent.getCameraPositionGlobal(); + pos_global = LLTracker::getTrackedPositionGlobal() - gAgentCamera.getCameraPositionGlobal(); } } else if(LLWorldMap::getInstance()->isTracking()) { - pos_global = LLWorldMap::getInstance()->getTrackedPositionGlobal() - gAgent.getCameraPositionGlobal();; + pos_global = LLWorldMap::getInstance()->getTrackedPositionGlobal() - gAgentCamera.getCameraPositionGlobal();; } else { diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp index f74d912842..4fbd1efbef 100644 --- a/indra/newview/llfolderview.cpp +++ b/indra/newview/llfolderview.cpp @@ -39,6 +39,7 @@ #include "llinventoryclipboard.h" // *TODO: remove this once hack below gone. #include "llinventoryfilter.h" #include "llinventoryfunctions.h" +#include "llinventorymodelbackgroundfetch.h" #include "llinventorypanel.h" #include "llfoldertype.h" #include "llfloaterinventory.h"// hacked in for the bonus context menu items. @@ -865,7 +866,7 @@ BOOL LLFolderView::getSelectionList(std::set<LLUUID> &selection) const BOOL LLFolderView::startDrag(LLToolDragAndDrop::ESource source) { std::vector<EDragAndDropType> types; - std::vector<LLUUID> cargo_ids; + uuid_vec_t cargo_ids; selected_items_t::iterator item_it; BOOL can_drag = TRUE; if (!mSelectedItems.empty()) @@ -943,7 +944,7 @@ void LLFolderView::draw() } else { - if (gInventory.backgroundFetchActive() || mCompletedFilterGeneration < mFilter->getMinRequiredGeneration()) + if (LLInventoryModelBackgroundFetch::instance().backgroundFetchActive() || mCompletedFilterGeneration < mFilter->getMinRequiredGeneration()) { mStatusText = LLTrans::getString("Searching"); //font->renderUTF8(mStatusText, 0, 2, 1, sSearchStatusColor, LLFontGL::LEFT, LLFontGL::TOP, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, FALSE ); diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp index d3e3d2b57b..c916e4b98c 100644 --- a/indra/newview/llfolderviewitem.cpp +++ b/indra/newview/llfolderviewitem.cpp @@ -38,6 +38,7 @@ #include "llfoldervieweventlistener.h" #include "llinventorybridge.h" // for LLItemBridge in LLInventorySort::operator() #include "llinventoryfilter.h" +#include "llinventorymodelbackgroundfetch.h" #include "llpanel.h" #include "llviewercontrol.h" // gSavedSettings #include "llviewerwindow.h" // Argh, only for setCursor() @@ -255,11 +256,30 @@ void LLFolderViewItem::refreshFromListener() // temporary attempt to display the inventory folder in the user locale. // mantipov: *NOTE: be sure this code is synchronized with LLFriendCardsManager::findChildFolderUUID // it uses the same way to find localized string - if (LLFolderType::lookupIsProtectedType(preferred_type)) + + // HACK: EXT - 6028 ([HARD CODED]? Inventory > Library > "Accessories" folder) + // Translation of Accessories folder in Library inventory folder + bool accessories = false; + if(mLabel == std::string("Accessories")) + { + //To ensure that Accessories folder is in Library we have to check its parent folder. + //Due to parent LLFolderViewFloder is not set to this item yet we have to check its parent via Inventory Model + LLInventoryCategory* cat = gInventory.getCategory(mListener->getUUID()); + if(cat) + { + const LLUUID& parent_folder_id = cat->getParentUUID(); + accessories = (parent_folder_id == gInventory.getLibraryRootFolderID()); + } + } + + //"Accessories" inventory category has folder type FT_NONE. So, this folder + //can not be detected as protected with LLFolderType::lookupIsProtectedType + if (accessories || LLFolderType::lookupIsProtectedType(preferred_type)) { LLTrans::findString(mLabel, "InvFolder " + mLabel); }; + setToolTip(mLabel); setIcon(mListener->getIcon()); time_t creation_date = mListener->getCreationDate(); if (mCreationDate != creation_date) @@ -417,11 +437,8 @@ S32 LLFolderViewItem::arrange( S32* width, S32* height, S32 filter_generation) S32 LLFolderViewItem::getItemHeight() { - if (mHidden) return 0; + if (getHidden()) return 0; - //S32 icon_height = mIcon->getHeight(); - //S32 label_height = llround(getLabelFontForStyle(mLabelStyle)->getLineHeight()); - //return llmax( icon_height, label_height ) + ICON_PAD; return mItemHeight; } @@ -804,32 +821,34 @@ BOOL LLFolderViewItem::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, return handled; } - void LLFolderViewItem::draw() { - if (mHidden) return; + if (getHidden()) + { + return; + } static LLUIColor sFgColor = LLUIColorTable::instance().getColor("MenuItemEnabledColor", DEFAULT_WHITE); static LLUIColor sHighlightBgColor = LLUIColorTable::instance().getColor("MenuItemHighlightBgColor", DEFAULT_WHITE); static LLUIColor sHighlightFgColor = LLUIColorTable::instance().getColor("MenuItemHighlightFgColor", DEFAULT_WHITE); - static LLUIColor sFocusOutlineColor = - LLUIColorTable::instance().getColor("InventoryFocusOutlineColor", DEFAULT_WHITE); + static LLUIColor sFocusOutlineColor = LLUIColorTable::instance().getColor("InventoryFocusOutlineColor", DEFAULT_WHITE); static LLUIColor sFilterBGColor = LLUIColorTable::instance().getColor("FilterBackgroundColor", DEFAULT_WHITE); static LLUIColor sFilterTextColor = LLUIColorTable::instance().getColor("FilterTextColor", DEFAULT_WHITE); static LLUIColor sSuffixColor = LLUIColorTable::instance().getColor("InventoryItemSuffixColor", DEFAULT_WHITE); static LLUIColor sSearchStatusColor = LLUIColorTable::instance().getColor("InventorySearchStatusColor", DEFAULT_WHITE); - const Params& default_params = LLUICtrlFactory::getDefaultParams<LLFolderViewItem>(); const S32 TOP_PAD = default_params.item_top_pad; + const S32 FOCUS_LEFT = 1; + const LLFontGL* font = getLabelFontForStyle(mLabelStyle); - bool possibly_has_children = false; - bool up_to_date = mListener && mListener->isUpToDate(); - if((up_to_date && hasVisibleChildren() ) || // we fetched our children and some of them have passed the filter... - (!up_to_date && mListener && mListener->hasChildren())) // ...or we know we have children but haven't fetched them (doesn't obey filter) - { - possibly_has_children = true; - } - if(/*mControlLabel[0] != '\0' && */possibly_has_children) + + //--------------------------------------------------------------------------------// + // Draw open folder arrow + // + const bool up_to_date = mListener && mListener->isUpToDate(); + const bool possibly_has_children = ((up_to_date && hasVisibleChildren()) || // we fetched our children and some of them have passed the filter... + (!up_to_date && mListener && mListener->hasChildren())); // ...or we know we have children but haven't fetched them (doesn't obey filter) + if (possibly_has_children) { LLUIImage* arrow_image = default_params.folder_arrow_image; gl_draw_scaled_rotated_image( @@ -837,22 +856,16 @@ void LLFolderViewItem::draw() ARROW_SIZE, ARROW_SIZE, mControlLabelRotation, arrow_image->getImage(), sFgColor); } - // See also LLFolderView::updateRenamerPosition() - F32 text_left = (F32)(ARROW_SIZE + TEXT_PAD + ICON_WIDTH + ICON_PAD + mIndentation); - - LLFontGL* font = getLabelFontForStyle(mLabelStyle); - - // If we have keyboard focus, draw selection filled - BOOL show_context = getRoot()->getShowSelectionContext(); - BOOL filled = show_context || (getRoot()->getParentPanel()->hasFocus()); - const S32 FOCUS_LEFT = 1; - S32 focus_top = getRect().getHeight(); - S32 focus_bottom = getRect().getHeight() - mItemHeight; - bool folder_open = (getRect().getHeight() > mItemHeight + 4); - // always render "current" item, only render other selected items if - // mShowSingleSelection is FALSE - if( mIsSelected ) + //--------------------------------------------------------------------------------// + // Draw highlight for selected items + // + const BOOL show_context = getRoot()->getShowSelectionContext(); + const BOOL filled = show_context || (getRoot()->getParentPanel()->hasFocus()); // If we have keyboard focus, draw selection filled + const S32 focus_top = getRect().getHeight(); + const S32 focus_bottom = getRect().getHeight() - mItemHeight; + const bool folder_open = (getRect().getHeight() > mItemHeight + 4); + if (mIsSelected) // always render "current" item. Only render other selected items if mShowSingleSelection is FALSE { gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); LLColor4 bg_color = sHighlightBgColor; @@ -871,152 +884,169 @@ void LLFolderViewItem::draw() bg_color.mV[VALPHA] = clamp_rescale(fade_time, 0.f, 0.4f, 0.f, bg_color.mV[VALPHA]); } } - - gl_rect_2d( - FOCUS_LEFT, - focus_top, - getRect().getWidth() - 2, - focus_bottom, - bg_color, filled); + gl_rect_2d(FOCUS_LEFT, + focus_top, + getRect().getWidth() - 2, + focus_bottom, + bg_color, filled); if (mIsCurSelection) { - gl_rect_2d( - FOCUS_LEFT, - focus_top, - getRect().getWidth() - 2, - focus_bottom, - sFocusOutlineColor, FALSE); + gl_rect_2d(FOCUS_LEFT, + focus_top, + getRect().getWidth() - 2, + focus_bottom, + sFocusOutlineColor, FALSE); } if (folder_open) { - gl_rect_2d( - FOCUS_LEFT, - focus_bottom + 1, // overlap with bottom edge of above rect - getRect().getWidth() - 2, - 0, - sFocusOutlineColor, FALSE); + gl_rect_2d(FOCUS_LEFT, + focus_bottom + 1, // overlap with bottom edge of above rect + getRect().getWidth() - 2, + 0, + sFocusOutlineColor, FALSE); if (show_context) { - gl_rect_2d( - FOCUS_LEFT, - focus_bottom + 1, - getRect().getWidth() - 2, - 0, - sHighlightBgColor, TRUE); + gl_rect_2d(FOCUS_LEFT, + focus_bottom + 1, + getRect().getWidth() - 2, + 0, + sHighlightBgColor, TRUE); } } } + + //--------------------------------------------------------------------------------// + // Draw DragNDrop highlight + // if (mDragAndDropTarget) { gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); - gl_rect_2d( - FOCUS_LEFT, - focus_top, - getRect().getWidth() - 2, - focus_bottom, - sHighlightBgColor, FALSE); + gl_rect_2d(FOCUS_LEFT, + focus_top, + getRect().getWidth() - 2, + focus_bottom, + sHighlightBgColor, FALSE); if (folder_open) { - gl_rect_2d( - FOCUS_LEFT, - focus_bottom + 1, // overlap with bottom edge of above rect - getRect().getWidth() - 2, - 0, - sHighlightBgColor, FALSE); + gl_rect_2d(FOCUS_LEFT, + focus_bottom + 1, // overlap with bottom edge of above rect + getRect().getWidth() - 2, + 0, + sHighlightBgColor, FALSE); } mDragAndDropTarget = FALSE; } - S32 icon_x = mIndentation + ARROW_SIZE + TEXT_PAD; - // First case is used for open folders - if (!mIconOpen.isNull() && (llabs(mControlLabelRotation) > 80)) + + //--------------------------------------------------------------------------------// + // Draw open icon + // + const S32 icon_x = mIndentation + ARROW_SIZE + TEXT_PAD; + if (!mIconOpen.isNull() && (llabs(mControlLabelRotation) > 80)) // For open folders { mIconOpen->draw(icon_x, getRect().getHeight() - mIconOpen->getHeight() - TOP_PAD + 1); } - else if(mIcon) + else if (mIcon) { mIcon->draw(icon_x, getRect().getHeight() - mIcon->getHeight() - TOP_PAD + 1); } - if (!mLabel.empty()) + + //--------------------------------------------------------------------------------// + // Exit if no label to draw + // + if (mLabel.empty()) { - // highlight filtered text - BOOL debug_filters = getRoot()->getDebugFilters(); - LLColor4 color = ( (mIsSelected && filled) ? sHighlightFgColor : sFgColor ); - F32 right_x; - F32 y = (F32)getRect().getHeight() - font->getLineHeight() - (F32)TEXT_PAD - (F32)TOP_PAD; + return; + } - if (debug_filters) - { - if (!getFiltered() && !possibly_has_children) - { - color.mV[VALPHA] *= 0.5f; - } + LLColor4 color = (mIsSelected && filled) ? sHighlightFgColor : sFgColor; + F32 right_x = 0; + F32 y = (F32)getRect().getHeight() - font->getLineHeight() - (F32)TEXT_PAD - (F32)TOP_PAD; + F32 text_left = (F32)(ARROW_SIZE + TEXT_PAD + ICON_WIDTH + ICON_PAD + mIndentation); - LLColor4 filter_color = mLastFilterGeneration >= getRoot()->getFilter()->getCurrentGeneration() ? LLColor4(0.5f, 0.8f, 0.5f, 1.f) : LLColor4(0.8f, 0.5f, 0.5f, 1.f); - LLFontGL::getFontMonospace()->renderUTF8( - mStatusText, 0, text_left, y, filter_color, - LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, - S32_MAX, S32_MAX, &right_x, FALSE ); - text_left = right_x; + //--------------------------------------------------------------------------------// + // Highlight filtered text + // + if (getRoot()->getDebugFilters()) + { + if (!getFiltered() && !possibly_has_children) + { + color.mV[VALPHA] *= 0.5f; } + LLColor4 filter_color = mLastFilterGeneration >= getRoot()->getFilter()->getCurrentGeneration() ? + LLColor4(0.5f, 0.8f, 0.5f, 1.f) : + LLColor4(0.8f, 0.5f, 0.5f, 1.f); + LLFontGL::getFontMonospace()->renderUTF8(mStatusText, 0, text_left, y, filter_color, + LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, + S32_MAX, S32_MAX, &right_x, FALSE ); + text_left = right_x; + } - font->renderUTF8( mLabel, 0, text_left, y, color, - LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, - S32_MAX, getRect().getWidth() - (S32) text_left, &right_x, TRUE); + //--------------------------------------------------------------------------------// + // Draw the actual label text + // + font->renderUTF8(mLabel, 0, text_left, y, color, + LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, + S32_MAX, getRect().getWidth() - (S32) text_left, &right_x, TRUE); -// LLViewerInventoryCategory *item = 0; -// if (getListener()) -// item = gInventory.getCategory(getListener()->getUUID()); - bool root_is_loading = false; - if (getListener() && gInventory.isObjectDescendentOf(getListener()->getUUID(),gInventory.getRootFolderID())) - { - // Descendent of my inventory. - root_is_loading = gInventory.myInventoryFetchInProgress(); - } - if (getListener() && gInventory.isObjectDescendentOf(getListener()->getUUID(),gInventory.getLibraryRootFolderID())) - { - // Descendent of library - root_is_loading = gInventory.libraryFetchInProgress(); - } - - if ( (mIsLoading && mTimeSinceRequestStart.getElapsedTimeF32() >= gSavedSettings.getF32("FolderLoadingMessageWaitTime")) - || (LLInventoryModel::backgroundFetchActive() && root_is_loading && mShowLoadStatus) ) - { - std::string load_string = " ( " + LLTrans::getString("LoadingData") + " ) "; - font->renderUTF8(load_string, 0, right_x, y, sSearchStatusColor, - LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, &right_x, FALSE); - } + //--------------------------------------------------------------------------------// + // Draw "Loading..." text + // + bool root_is_loading = false; + if (getListener() && gInventory.isObjectDescendentOf(getListener()->getUUID(), + gInventory.getRootFolderID())) // Descendent of my inventory + { + root_is_loading = LLInventoryModelBackgroundFetch::instance().inventoryFetchInProgress(); + } + if (getListener() && gInventory.isObjectDescendentOf(getListener()->getUUID(), + gInventory.getLibraryRootFolderID())) // Descendent of library + { + root_is_loading = LLInventoryModelBackgroundFetch::instance().libraryFetchInProgress(); + } + if ((mIsLoading && mTimeSinceRequestStart.getElapsedTimeF32() >= gSavedSettings.getF32("FolderLoadingMessageWaitTime")) || + (LLInventoryModelBackgroundFetch::instance().backgroundFetchActive() && root_is_loading && (mShowLoadStatus || mHidden))) + { + std::string load_string = " ( " + LLTrans::getString("LoadingData") + " ) "; + font->renderUTF8(load_string, 0, right_x, y, sSearchStatusColor, + LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, + S32_MAX, S32_MAX, &right_x, FALSE); + } - if (!mLabelSuffix.empty()) - { - font->renderUTF8( mLabelSuffix, 0, right_x, y, sSuffixColor, - LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, - S32_MAX, S32_MAX, &right_x, FALSE ); - } + //--------------------------------------------------------------------------------// + // Draw label suffix + // + if (!mLabelSuffix.empty()) + { + font->renderUTF8( mLabelSuffix, 0, right_x, y, sSuffixColor, + LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, + S32_MAX, S32_MAX, &right_x, FALSE ); + } - if (mStringMatchOffset != std::string::npos) + //--------------------------------------------------------------------------------// + // Highlight string match + // + if (mStringMatchOffset != std::string::npos) + { + // don't draw backgrounds for zero-length strings + S32 filter_string_length = getRoot()->getFilterSubString().size(); + if (filter_string_length > 0) { - // don't draw backgrounds for zero-length strings - S32 filter_string_length = getRoot()->getFilterSubString().size(); - if (filter_string_length > 0) - { - std::string combined_string = mLabel + mLabelSuffix; - S32 left = llround(text_left) + font->getWidth(combined_string, 0, mStringMatchOffset) - 1; - S32 right = left + font->getWidth(combined_string, mStringMatchOffset, filter_string_length) + 2; - S32 bottom = llfloor(getRect().getHeight() - font->getLineHeight() - 3 - TOP_PAD); - S32 top = getRect().getHeight() - TOP_PAD; + std::string combined_string = mLabel + mLabelSuffix; + S32 left = llround(text_left) + font->getWidth(combined_string, 0, mStringMatchOffset) - 1; + S32 right = left + font->getWidth(combined_string, mStringMatchOffset, filter_string_length) + 2; + S32 bottom = llfloor(getRect().getHeight() - font->getLineHeight() - 3 - TOP_PAD); + S32 top = getRect().getHeight() - TOP_PAD; - LLUIImage* box_image = default_params.selection_image; - LLRect box_rect(left, top, right, bottom); - box_image->draw(box_rect, sFilterBGColor); - F32 match_string_left = text_left + font->getWidthF32(combined_string, 0, mStringMatchOffset); - F32 yy = (F32)getRect().getHeight() - font->getLineHeight() - (F32)TEXT_PAD - (F32)TOP_PAD; - font->renderUTF8( combined_string, mStringMatchOffset, match_string_left, yy, - sFilterTextColor, LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, - filter_string_length, S32_MAX, &right_x, FALSE ); - } + LLUIImage* box_image = default_params.selection_image; + LLRect box_rect(left, top, right, bottom); + box_image->draw(box_rect, sFilterBGColor); + F32 match_string_left = text_left + font->getWidthF32(combined_string, 0, mStringMatchOffset); + F32 yy = (F32)getRect().getHeight() - font->getLineHeight() - (F32)TEXT_PAD - (F32)TOP_PAD; + font->renderUTF8( combined_string, mStringMatchOffset, match_string_left, yy, + sFilterTextColor, LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, + filter_string_length, S32_MAX, &right_x, FALSE ); } } } @@ -1298,7 +1328,7 @@ void LLFolderViewFolder::filter( LLInventoryFilter& filter) // when applying a filter, matching folders get their contents downloaded first if (filter.isNotDefault() && getFiltered(filter.getMinRequiredGeneration()) && (mListener && !gInventory.isCategoryComplete(mListener->getUUID()))) { - gInventory.startBackgroundFetch(mListener->getUUID()); + LLInventoryModelBackgroundFetch::instance().start(mListener->getUUID()); } // now query children diff --git a/indra/newview/llfriendcard.cpp b/indra/newview/llfriendcard.cpp index 18f81fe506..a848128d67 100644 --- a/indra/newview/llfriendcard.cpp +++ b/indra/newview/llfriendcard.cpp @@ -33,6 +33,7 @@ #include "llviewerprecompiledheaders.h" #include "llinventory.h" +#include "llinventoryfunctions.h" #include "llinventoryobserver.h" #include "lltrans.h" @@ -322,7 +323,7 @@ void LLFriendCardsManager::collectFriendsLists(folderid_buddies_map_t& folderBud if (NULL == items) continue; - std::vector<LLUUID> buddyUUIDs; + uuid_vec_t buddyUUIDs; for (itBuddy = items->begin(); itBuddy != items->end(); ++itBuddy) { buddyUUIDs.push_back((*itBuddy)->getCreatorUUID()); @@ -409,7 +410,7 @@ void LLFriendCardsManager::fetchAndCheckFolderDescendents(const LLUUID& folder_i // This instance will be deleted in LLInitialFriendCardsFetch::done(). LLInitialFriendCardsFetch* fetch = new LLInitialFriendCardsFetch(cb); - LLInventoryFetchDescendentsObserver::folder_ref_t folders; + uuid_vec_t folders; folders.push_back(folder_id); fetch->fetchDescendents(folders); diff --git a/indra/newview/llfriendcard.h b/indra/newview/llfriendcard.h index 1cda52c1d7..638a1eca84 100644 --- a/indra/newview/llfriendcard.h +++ b/indra/newview/llfriendcard.h @@ -49,7 +49,7 @@ class LLFriendCardsManager friend class CreateFriendCardCallback; public: - typedef std::map<LLUUID, std::vector<LLUUID> > folderid_buddies_map_t; + typedef std::map<LLUUID, uuid_vec_t > folderid_buddies_map_t; // LLFriendObserver implementation void changed(U32 mask) diff --git a/indra/newview/llgesturemgr.cpp b/indra/newview/llgesturemgr.cpp index 0ba7bdf613..fbacbd704f 100644 --- a/indra/newview/llgesturemgr.cpp +++ b/indra/newview/llgesturemgr.cpp @@ -67,7 +67,7 @@ static const LLUUID& get_linked_uuid(const LLUUID& item_id); // Lightweight constructor. // init() does the heavy lifting. -LLGestureManager::LLGestureManager() +LLGestureMgr::LLGestureMgr() : mValid(FALSE), mPlaying(), mActive(), @@ -79,7 +79,7 @@ LLGestureManager::LLGestureManager() // We own the data for gestures, so clean them up. -LLGestureManager::~LLGestureManager() +LLGestureMgr::~LLGestureMgr() { item_map_t::iterator it; for (it = mActive.begin(); it != mActive.end(); ++it) @@ -93,12 +93,12 @@ LLGestureManager::~LLGestureManager() } -void LLGestureManager::init() +void LLGestureMgr::init() { // TODO } -void LLGestureManager::changed(U32 mask) +void LLGestureMgr::changed(U32 mask) { LLInventoryFetchObserver::changed(mask); @@ -136,7 +136,7 @@ void LLGestureManager::changed(U32 mask) // Use this version when you have the item_id but not the asset_id, // and you KNOW the inventory is loaded. -void LLGestureManager::activateGesture(const LLUUID& item_id) +void LLGestureMgr::activateGesture(const LLUUID& item_id) { LLViewerInventoryItem* item = gInventory.getItem(item_id); if (!item) return; @@ -152,7 +152,7 @@ void LLGestureManager::activateGesture(const LLUUID& item_id) } -void LLGestureManager::activateGestures(LLViewerInventoryItem::item_array_t& items) +void LLGestureMgr::activateGestures(LLViewerInventoryItem::item_array_t& items) { // Load up the assets S32 count = 0; @@ -248,7 +248,7 @@ struct LLLoadInfo /** * It will load a gesture from remote storage */ -void LLGestureManager::activateGestureWithAsset(const LLUUID& item_id, +void LLGestureMgr::activateGestureWithAsset(const LLUUID& item_id, const LLUUID& asset_id, BOOL inform_server, BOOL deactivate_similar) @@ -257,7 +257,7 @@ void LLGestureManager::activateGestureWithAsset(const LLUUID& item_id, if( !gAssetStorage ) { - llwarns << "LLGestureManager::activateGestureWithAsset without valid gAssetStorage" << llendl; + llwarns << "LLGestureMgr::activateGestureWithAsset without valid gAssetStorage" << llendl; return; } // If gesture is already active, nothing to do. @@ -299,7 +299,7 @@ void LLGestureManager::activateGestureWithAsset(const LLUUID& item_id, } -void LLGestureManager::deactivateGesture(const LLUUID& item_id) +void LLGestureMgr::deactivateGesture(const LLUUID& item_id) { const LLUUID& base_item_id = get_linked_uuid(item_id); item_map_t::iterator it = mActive.find(base_item_id); @@ -338,16 +338,16 @@ void LLGestureManager::deactivateGesture(const LLUUID& item_id) gAgent.sendReliableMessage(); - LLAppearanceManager::instance().removeCOFItemLinks(base_item_id, false); + LLAppearanceMgr::instance().removeCOFItemLinks(base_item_id, false); notifyObservers(); } -void LLGestureManager::deactivateSimilarGestures(LLMultiGesture* in, const LLUUID& in_item_id) +void LLGestureMgr::deactivateSimilarGestures(LLMultiGesture* in, const LLUUID& in_item_id) { const LLUUID& base_in_item_id = get_linked_uuid(in_item_id); - std::vector<LLUUID> gest_item_ids; + uuid_vec_t gest_item_ids; // Deactivate all gestures that match item_map_t::iterator it; @@ -386,7 +386,7 @@ void LLGestureManager::deactivateSimilarGestures(LLMultiGesture* in, const LLUUI // Inform database of the change LLMessageSystem* msg = gMessageSystem; BOOL start_message = TRUE; - std::vector<LLUUID>::const_iterator vit = gest_item_ids.begin(); + uuid_vec_t::const_iterator vit = gest_item_ids.begin(); while (vit != gest_item_ids.end()) { if (start_message) @@ -431,7 +431,7 @@ void LLGestureManager::deactivateSimilarGestures(LLMultiGesture* in, const LLUUI } -BOOL LLGestureManager::isGestureActive(const LLUUID& item_id) +BOOL LLGestureMgr::isGestureActive(const LLUUID& item_id) { const LLUUID& base_item_id = get_linked_uuid(item_id); item_map_t::iterator it = mActive.find(base_item_id); @@ -439,7 +439,7 @@ BOOL LLGestureManager::isGestureActive(const LLUUID& item_id) } -BOOL LLGestureManager::isGesturePlaying(const LLUUID& item_id) +BOOL LLGestureMgr::isGesturePlaying(const LLUUID& item_id) { const LLUUID& base_item_id = get_linked_uuid(item_id); @@ -452,7 +452,7 @@ BOOL LLGestureManager::isGesturePlaying(const LLUUID& item_id) return gesture->mPlaying; } -BOOL LLGestureManager::isGesturePlaying(LLMultiGesture* gesture) +BOOL LLGestureMgr::isGesturePlaying(LLMultiGesture* gesture) { if(!gesture) { @@ -462,7 +462,7 @@ BOOL LLGestureManager::isGesturePlaying(LLMultiGesture* gesture) return gesture->mPlaying; } -void LLGestureManager::replaceGesture(const LLUUID& item_id, LLMultiGesture* new_gesture, const LLUUID& asset_id) +void LLGestureMgr::replaceGesture(const LLUUID& item_id, LLMultiGesture* new_gesture, const LLUUID& asset_id) { const LLUUID& base_item_id = get_linked_uuid(item_id); @@ -504,11 +504,11 @@ void LLGestureManager::replaceGesture(const LLUUID& item_id, LLMultiGesture* new notifyObservers(); } -void LLGestureManager::replaceGesture(const LLUUID& item_id, const LLUUID& new_asset_id) +void LLGestureMgr::replaceGesture(const LLUUID& item_id, const LLUUID& new_asset_id) { const LLUUID& base_item_id = get_linked_uuid(item_id); - item_map_t::iterator it = LLGestureManager::instance().mActive.find(base_item_id); + item_map_t::iterator it = LLGestureMgr::instance().mActive.find(base_item_id); if (it == mActive.end()) { llwarns << "replaceGesture for inactive gesture " << base_item_id << llendl; @@ -517,10 +517,10 @@ void LLGestureManager::replaceGesture(const LLUUID& item_id, const LLUUID& new_a // mActive owns this gesture pointer, so clean up memory. LLMultiGesture* gesture = (*it).second; - LLGestureManager::instance().replaceGesture(base_item_id, gesture, new_asset_id); + LLGestureMgr::instance().replaceGesture(base_item_id, gesture, new_asset_id); } -void LLGestureManager::playGesture(LLMultiGesture* gesture) +void LLGestureMgr::playGesture(LLMultiGesture* gesture) { if (!gesture) return; @@ -539,7 +539,7 @@ void LLGestureManager::playGesture(LLMultiGesture* gesture) // Convenience function that looks up the item_id for you. -void LLGestureManager::playGesture(const LLUUID& item_id) +void LLGestureMgr::playGesture(const LLUUID& item_id) { const LLUUID& base_item_id = get_linked_uuid(item_id); @@ -556,7 +556,7 @@ void LLGestureManager::playGesture(const LLUUID& item_id) // Iterates through space delimited tokens in string, triggering any gestures found. // Generates a revised string that has the found tokens replaced by their replacement strings // and (as a minor side effect) has multiple spaces in a row replaced by single spaces. -BOOL LLGestureManager::triggerAndReviseString(const std::string &utf8str, std::string* revised_string) +BOOL LLGestureMgr::triggerAndReviseString(const std::string &utf8str, std::string* revised_string) { std::string tokenized = utf8str; @@ -649,7 +649,7 @@ BOOL LLGestureManager::triggerAndReviseString(const std::string &utf8str, std::s } -BOOL LLGestureManager::triggerGesture(KEY key, MASK mask) +BOOL LLGestureMgr::triggerGesture(KEY key, MASK mask) { std::vector <LLMultiGesture *> matching; item_map_t::iterator it; @@ -683,7 +683,7 @@ BOOL LLGestureManager::triggerGesture(KEY key, MASK mask) } -S32 LLGestureManager::getPlayingCount() const +S32 LLGestureMgr::getPlayingCount() const { return mPlaying.size(); } @@ -697,7 +697,7 @@ struct IsGesturePlaying : public std::unary_function<LLMultiGesture*, bool> } }; -void LLGestureManager::update() +void LLGestureMgr::update() { S32 i; for (i = 0; i < (S32)mPlaying.size(); ++i) @@ -740,14 +740,13 @@ void LLGestureManager::update() // Run all steps until you're either done or hit a wait. -void LLGestureManager::stepGesture(LLMultiGesture* gesture) +void LLGestureMgr::stepGesture(LLMultiGesture* gesture) { if (!gesture) { return; } - LLVOAvatar* avatar = gAgent.getAvatarObject(); - if (!avatar) return; + if (!isAgentAvatarValid()) return; // Of the ones that started playing, have any stopped? @@ -758,8 +757,8 @@ void LLGestureManager::stepGesture(LLMultiGesture* gesture) { // look in signaled animations (simulator's view of what is // currently playing. - LLVOAvatar::AnimIterator play_it = avatar->mSignaledAnimations.find(*gest_it); - if (play_it != avatar->mSignaledAnimations.end()) + LLVOAvatar::AnimIterator play_it = gAgentAvatarp->mSignaledAnimations.find(*gest_it); + if (play_it != gAgentAvatarp->mSignaledAnimations.end()) { ++gest_it; } @@ -777,8 +776,8 @@ void LLGestureManager::stepGesture(LLMultiGesture* gesture) gest_it != gesture->mRequestedAnimIDs.end(); ) { - LLVOAvatar::AnimIterator play_it = avatar->mSignaledAnimations.find(*gest_it); - if (play_it != avatar->mSignaledAnimations.end()) + LLVOAvatar::AnimIterator play_it = gAgentAvatarp->mSignaledAnimations.find(*gest_it); + if (play_it != gAgentAvatarp->mSignaledAnimations.end()) { // Hooray, this animation has started playing! // Copy into playing. @@ -888,7 +887,7 @@ void LLGestureManager::stepGesture(LLMultiGesture* gesture) } -void LLGestureManager::runStep(LLMultiGesture* gesture, LLGestureStep* step) +void LLGestureMgr::runStep(LLMultiGesture* gesture, LLGestureStep* step) { switch(step->getType()) { @@ -975,7 +974,7 @@ void LLGestureManager::runStep(LLMultiGesture* gesture, LLGestureStep* step) // static -void LLGestureManager::onLoadComplete(LLVFS *vfs, +void LLGestureMgr::onLoadComplete(LLVFS *vfs, const LLUUID& asset_uuid, LLAssetType::EType type, void* user_data, S32 status, LLExtStat ext_status) @@ -988,7 +987,7 @@ void LLGestureManager::onLoadComplete(LLVFS *vfs, delete info; info = NULL; - LLGestureManager& self = LLGestureManager::instance(); + LLGestureMgr& self = LLGestureMgr::instance(); self.mLoadingCount--; if (0 == status) @@ -1094,12 +1093,12 @@ void LLGestureManager::onLoadComplete(LLVFS *vfs, llwarns << "Problem loading gesture: " << status << llendl; - LLGestureManager::instance().mActive.erase(item_id); + LLGestureMgr::instance().mActive.erase(item_id); } } -void LLGestureManager::stopGesture(LLMultiGesture* gesture) +void LLGestureMgr::stopGesture(LLMultiGesture* gesture) { if (!gesture) return; @@ -1139,7 +1138,7 @@ void LLGestureManager::stopGesture(LLMultiGesture* gesture) } -void LLGestureManager::stopGesture(const LLUUID& item_id) +void LLGestureMgr::stopGesture(const LLUUID& item_id) { const LLUUID& base_item_id = get_linked_uuid(item_id); @@ -1153,12 +1152,12 @@ void LLGestureManager::stopGesture(const LLUUID& item_id) } -void LLGestureManager::addObserver(LLGestureManagerObserver* observer) +void LLGestureMgr::addObserver(LLGestureManagerObserver* observer) { mObservers.push_back(observer); } -void LLGestureManager::removeObserver(LLGestureManagerObserver* observer) +void LLGestureMgr::removeObserver(LLGestureManagerObserver* observer) { std::vector<LLGestureManagerObserver*>::iterator it; it = std::find(mObservers.begin(), mObservers.end(), observer); @@ -1171,9 +1170,9 @@ void LLGestureManager::removeObserver(LLGestureManagerObserver* observer) // Call this method when it's time to update everyone on a new state. // Copy the list because an observer could respond by removing itself // from the list. -void LLGestureManager::notifyObservers() +void LLGestureMgr::notifyObservers() { - lldebugs << "LLGestureManager::notifyObservers" << llendl; + lldebugs << "LLGestureMgr::notifyObservers" << llendl; std::vector<LLGestureManagerObserver*> observers = mObservers; @@ -1185,7 +1184,7 @@ void LLGestureManager::notifyObservers() } } -BOOL LLGestureManager::matchPrefix(const std::string& in_str, std::string* out_str) +BOOL LLGestureMgr::matchPrefix(const std::string& in_str, std::string* out_str) { S32 in_len = in_str.length(); @@ -1216,7 +1215,7 @@ BOOL LLGestureManager::matchPrefix(const std::string& in_str, std::string* out_s } -void LLGestureManager::getItemIDs(std::vector<LLUUID>* ids) +void LLGestureMgr::getItemIDs(uuid_vec_t* ids) { item_map_t::const_iterator it; for (it = mActive.begin(); it != mActive.end(); ++it) @@ -1225,7 +1224,7 @@ void LLGestureManager::getItemIDs(std::vector<LLUUID>* ids) } } -void LLGestureManager::done() +void LLGestureMgr::done() { bool notify = false; for(item_map_t::iterator it = mActive.begin(); it != mActive.end(); ++it) diff --git a/indra/newview/llgesturemgr.h b/indra/newview/llgesturemgr.h index 3dd184ddc7..081ca983a9 100644 --- a/indra/newview/llgesturemgr.h +++ b/indra/newview/llgesturemgr.h @@ -54,7 +54,7 @@ public: virtual void changed() = 0; }; -class LLGestureManager : public LLSingleton<LLGestureManager>, public LLInventoryFetchObserver +class LLGestureMgr : public LLSingleton<LLGestureMgr>, public LLInventoryFetchObserver { public: @@ -63,8 +63,8 @@ public: typedef std::map<LLUUID, LLMultiGesture*> item_map_t; typedef std::map<LLUUID, gesture_loaded_callback_t> callback_map_t; - LLGestureManager(); - ~LLGestureManager(); + LLGestureMgr(); + ~LLGestureMgr(); void init(); @@ -146,7 +146,7 @@ public: BOOL matchPrefix(const std::string& in_str, std::string* out_str); // Copy item ids into the vector - void getItemIDs(std::vector<LLUUID>* ids); + void getItemIDs(uuid_vec_t* ids); protected: // Handle the processing of a single gesture diff --git a/indra/newview/llglsandbox.cpp b/indra/newview/llglsandbox.cpp index 8569e208eb..2aba0b5c09 100644 --- a/indra/newview/llglsandbox.cpp +++ b/indra/newview/llglsandbox.cpp @@ -71,99 +71,6 @@ // Height of the yellow selection highlight posts for land const F32 PARCEL_POST_HEIGHT = 0.666f; -BOOL LLAgent::setLookAt(ELookAtType target_type, LLViewerObject *object, LLVector3 position) -{ - if(object && object->isAttachment()) - { - LLViewerObject* parent = object; - while(parent) - { - if (parent == mAvatarObject) - { - // looking at an attachment on ourselves, which we don't want to do - object = mAvatarObject; - position.clearVec(); - } - parent = (LLViewerObject*)parent->getParent(); - } - } - if(!mLookAt || mLookAt->isDead()) - { - mLookAt = (LLHUDEffectLookAt *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_LOOKAT); - mLookAt->setSourceObject(mAvatarObject); - } - - return mLookAt->setLookAt(target_type, object, position); -} - -BOOL LLAgent::setPointAt(EPointAtType target_type, LLViewerObject *object, LLVector3 position) -{ - // disallow pointing at attachments and avatars - if (object && (object->isAttachment() || object->isAvatar())) - { - return FALSE; - } - - if(!mPointAt || mPointAt->isDead()) - { - mPointAt = (LLHUDEffectPointAt *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_POINTAT); - mPointAt->setSourceObject(mAvatarObject); - } - - return mPointAt->setPointAt(target_type, object, position); -} - -ELookAtType LLAgent::getLookAtType() -{ - if (mLookAt) - { - return mLookAt->getLookAtType(); - } - - return LOOKAT_TARGET_NONE; -} - -EPointAtType LLAgent::getPointAtType() -{ - if (mPointAt) - { - return mPointAt->getPointAtType(); - } - - return POINTAT_TARGET_NONE; -} - -// Draw a representation of current autopilot target -void LLAgent::renderAutoPilotTarget() -{ - if (mAutoPilot) - { - F32 height_meters; - LLVector3d target_global; - - glMatrixMode(GL_MODELVIEW); - gGL.pushMatrix(); - - // not textured - gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); - - // lovely green - glColor4f(0.f, 1.f, 1.f, 1.f); - - target_global = mAutoPilotTargetGlobal; - - gGL.translatef((F32)(target_global.mdV[VX]), (F32)(target_global.mdV[VY]), (F32)(target_global.mdV[VZ])); - - height_meters = 1.f; - - glScalef(height_meters, height_meters, height_meters); - - gSphere.render(1500.f); - - gGL.popMatrix(); - } -} - // Returns true if you got at least one object void LLToolSelectRect::handleRectangleSelection(S32 x, S32 y, MASK mask) { diff --git a/indra/newview/llgroupmgr.cpp b/indra/newview/llgroupmgr.cpp index 7f93a357de..996553ccf7 100644 --- a/indra/newview/llgroupmgr.cpp +++ b/indra/newview/llgroupmgr.cpp @@ -160,7 +160,7 @@ LLGroupRoleData::~LLGroupRoleData() { } -S32 LLGroupRoleData::getMembersInRole(std::vector<LLUUID> members, +S32 LLGroupRoleData::getMembersInRole(uuid_vec_t members, BOOL needs_sort) { if (mRoleID.isNull()) @@ -184,8 +184,8 @@ S32 LLGroupRoleData::getMembersInRole(std::vector<LLUUID> members, // Return the number of members in the intersection. S32 max_size = llmin( members.size(), mMemberIDs.size() ); - std::vector<LLUUID> in_role( max_size ); - std::vector<LLUUID>::iterator in_role_end; + uuid_vec_t in_role( max_size ); + uuid_vec_t::iterator in_role_end; in_role_end = std::set_intersection(mMemberIDs.begin(), mMemberIDs.end(), members.begin(), members.end(), in_role.begin()); @@ -200,7 +200,7 @@ void LLGroupRoleData::addMember(const LLUUID& member) bool LLGroupRoleData::removeMember(const LLUUID& member) { - std::vector<LLUUID>::iterator it = std::find(mMemberIDs.begin(),mMemberIDs.end(),member); + uuid_vec_t::iterator it = std::find(mMemberIDs.begin(),mMemberIDs.end(),member); if (it != mMemberIDs.end()) { @@ -1736,7 +1736,7 @@ void LLGroupMgr::sendGroupMemberInvites(const LLUUID& group_id, std::map<LLUUID, //static void LLGroupMgr::sendGroupMemberEjects(const LLUUID& group_id, - std::vector<LLUUID>& member_ids) + uuid_vec_t& member_ids) { bool start_message = true; LLMessageSystem* msg = gMessageSystem; @@ -1746,7 +1746,7 @@ void LLGroupMgr::sendGroupMemberEjects(const LLUUID& group_id, LLGroupMgrGroupData* group_datap = LLGroupMgr::getInstance()->getGroupData(group_id); if (!group_datap) return; - for (std::vector<LLUUID>::iterator it = member_ids.begin(); + for (uuid_vec_t::iterator it = member_ids.begin(); it != member_ids.end(); ++it) { LLUUID& ejected_member_id = (*it); diff --git a/indra/newview/llgroupmgr.h b/indra/newview/llgroupmgr.h index 2c86de8b97..82df631b8c 100644 --- a/indra/newview/llgroupmgr.h +++ b/indra/newview/llgroupmgr.h @@ -139,8 +139,8 @@ public: const LLUUID& getID() const { return mRoleID; } - const std::vector<LLUUID>& getRoleMembers() const { return mMemberIDs; } - S32 getMembersInRole(std::vector<LLUUID> members, BOOL needs_sort = TRUE); + const uuid_vec_t& getRoleMembers() const { return mMemberIDs; } + S32 getMembersInRole(uuid_vec_t members, BOOL needs_sort = TRUE); S32 getTotalMembersInRole() { return mMemberIDs.size(); } LLRoleData getRoleData() const { return mRoleData; } @@ -150,10 +150,10 @@ public: bool removeMember(const LLUUID& member); void clearMembers(); - const std::vector<LLUUID>::const_iterator getMembersBegin() const + const uuid_vec_t::const_iterator getMembersBegin() const { return mMemberIDs.begin(); } - const std::vector<LLUUID>::const_iterator getMembersEnd() const + const uuid_vec_t::const_iterator getMembersEnd() const { return mMemberIDs.end(); } @@ -164,7 +164,7 @@ protected: LLUUID mRoleID; LLRoleData mRoleData; - std::vector<LLUUID> mMemberIDs; + uuid_vec_t mMemberIDs; S32 mMemberCount; private: @@ -340,7 +340,7 @@ public: static void sendGroupMemberJoin(const LLUUID& group_id); static void sendGroupMemberInvites(const LLUUID& group_id, std::map<LLUUID,LLUUID>& role_member_pairs); static void sendGroupMemberEjects(const LLUUID& group_id, - std::vector<LLUUID>& member_ids); + uuid_vec_t& member_ids); void cancelGroupRoleChanges(const LLUUID& group_id); diff --git a/indra/newview/llhudeffectlookat.cpp b/indra/newview/llhudeffectlookat.cpp index 07b81ef134..3be0fcbc5f 100644 --- a/indra/newview/llhudeffectlookat.cpp +++ b/indra/newview/llhudeffectlookat.cpp @@ -38,6 +38,7 @@ #include "message.h" #include "llagent.h" +#include "llagentcamera.h" #include "llvoavatar.h" #include "lldrawable.h" #include "llviewerobjectlist.h" @@ -316,7 +317,7 @@ void LLHUDEffectLookAt::unpackData(LLMessageSystem *mesgsys, S32 blocknum) LLUUID dataId; mesgsys->getUUIDFast(_PREHASH_Effect, _PREHASH_ID, dataId, blocknum); - if (!gAgent.mLookAt.isNull() && dataId == gAgent.mLookAt->getID()) + if (!gAgentCamera.mLookAt.isNull() && dataId == gAgentCamera.mLookAt->getID()) { return; } @@ -637,7 +638,7 @@ bool LLHUDEffectLookAt::calcTargetPosition() // mouselook and freelook target offsets are absolute target_rot = LLQuaternion::DEFAULT; } - else if (looking_at_self && gAgent.cameraCustomizeAvatar()) + else if (looking_at_self && gAgentCamera.cameraCustomizeAvatar()) { // *NOTE: We have to do this because animation // overrides do not set lookat behavior. diff --git a/indra/newview/llhudeffectpointat.cpp b/indra/newview/llhudeffectpointat.cpp index a13ee8572f..01dfb50b10 100644 --- a/indra/newview/llhudeffectpointat.cpp +++ b/indra/newview/llhudeffectpointat.cpp @@ -38,6 +38,7 @@ #include "llrender.h" #include "llagent.h" +#include "llagentcamera.h" #include "lldrawable.h" #include "llviewerobjectlist.h" #include "llvoavatar.h" @@ -152,7 +153,7 @@ void LLHUDEffectPointAt::unpackData(LLMessageSystem *mesgsys, S32 blocknum) mesgsys->getUUIDFast(_PREHASH_Effect, _PREHASH_ID, dataId, blocknum); // ignore messages from ourselves - if (!gAgent.mPointAt.isNull() && dataId == gAgent.mPointAt->getID()) + if (!gAgentCamera.mPointAt.isNull() && dataId == gAgentCamera.mPointAt->getID()) { return; } diff --git a/indra/newview/llhudobject.cpp b/indra/newview/llhudobject.cpp index dc55aba0db..2b73ed1dcd 100644 --- a/indra/newview/llhudobject.cpp +++ b/indra/newview/llhudobject.cpp @@ -43,6 +43,7 @@ #include "llhudeffectbeam.h" #include "llhudeffecttrail.h" #include "llhudeffectlookat.h" +#include "llhudeffectpointat.h" #include "llvoicevisualizer.h" diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp index 77eaebb0bc..3ec8d11fb0 100644 --- a/indra/newview/llimfloater.cpp +++ b/indra/newview/llimfloater.cpp @@ -44,6 +44,7 @@ #include "llchiclet.h" #include "llfloaterreg.h" #include "llimfloatercontainer.h" // to replace separate IM Floaters with multifloater container +#include "llinventoryfunctions.h" #include "lllayoutstack.h" #include "lllineeditor.h" #include "lllogchat.h" @@ -128,6 +129,11 @@ void LLIMFloater::onFocusReceived() LLIMModel::getInstance()->setActiveSessionID(mSessionID); LLBottomTray::getInstance()->getChicletPanel()->setChicletToggleState(mSessionID, true); + + if (getVisible()) + { + LLIMModel::instance().sendNoUnreadMessages(mSessionID); + } } // virtual @@ -454,7 +460,7 @@ void LLIMFloater::getAllowedRect(LLRect& rect) void LLIMFloater::setDocked(bool docked, bool pop_on_undock) { // update notification channel state - LLNotificationsUI::LLScreenChannel* channel = dynamic_cast<LLNotificationsUI::LLScreenChannel*> + LLNotificationsUI::LLScreenChannel* channel = static_cast<LLNotificationsUI::LLScreenChannel*> (LLNotificationsUI::LLChannelManager::getInstance()-> findChannelByID(LLUUID(gSavedSettings.getString("NotificationChannelUUID")))); @@ -473,7 +479,7 @@ void LLIMFloater::setDocked(bool docked, bool pop_on_undock) void LLIMFloater::setVisible(BOOL visible) { - LLNotificationsUI::LLScreenChannel* channel = dynamic_cast<LLNotificationsUI::LLScreenChannel*> + LLNotificationsUI::LLScreenChannel* channel = static_cast<LLNotificationsUI::LLScreenChannel*> (LLNotificationsUI::LLChannelManager::getInstance()-> findChannelByID(LLUUID(gSavedSettings.getString("NotificationChannelUUID")))); LLTransientDockableFloater::setVisible(visible); @@ -609,7 +615,16 @@ void LLIMFloater::updateMessages() bool use_plain_text_chat_history = gSavedSettings.getBOOL("PlainTextChatHistory"); std::list<LLSD> messages; - LLIMModel::instance().getMessages(mSessionID, messages, mLastMessageIndex+1); + + // we shouldn't reset unread message counters if IM floater doesn't have focus + if (hasFocus()) + { + LLIMModel::instance().getMessages(mSessionID, messages, mLastMessageIndex+1); + } + else + { + LLIMModel::instance().getMessagesSilently(mSessionID, messages, mLastMessageIndex+1); + } if (messages.size()) { @@ -642,6 +657,24 @@ void LLIMFloater::updateMessages() if (msg.has("notification_id")) { chat.mNotifId = msg["notification_id"].asUUID(); + // if notification exists - embed it + if (LLNotificationsUtil::find(chat.mNotifId) != NULL) + { + // remove embedded notification from channel + LLNotificationsUI::LLScreenChannel* channel = static_cast<LLNotificationsUI::LLScreenChannel*> + (LLNotificationsUI::LLChannelManager::getInstance()-> + findChannelByID(LLUUID(gSavedSettings.getString("NotificationChannelUUID")))); + if (getVisible()) + { + // toast will be automatically closed since it is not storable toast + channel->hideToast(chat.mNotifId); + } + } + // if notification doesn't exist - try to use next message which should be log entry + else + { + continue; + } } //process text message else @@ -651,6 +684,19 @@ void LLIMFloater::updateMessages() mChatHistory->appendMessage(chat, chat_args); mLastMessageIndex = msg["index"].asInteger(); + + // if it is a notification - next message is a notification history log, so skip it + if (chat.mNotifId.notNull() && LLNotificationsUtil::find(chat.mNotifId) != NULL) + { + if (++iter == iter_end) + { + break; + } + else + { + mLastMessageIndex++; + } + } } } } @@ -877,7 +923,7 @@ BOOL LLIMFloater::dropCallingCard(LLInventoryItem* item, BOOL drop) { if(drop) { - std::vector<LLUUID> ids; + uuid_vec_t ids; ids.push_back(item->getCreatorUUID()); inviteToSession(ids); } @@ -910,7 +956,7 @@ BOOL LLIMFloater::dropCategory(LLInventoryCategory* category, BOOL drop) } else if(drop) { - std::vector<LLUUID> ids; + uuid_vec_t ids; ids.reserve(count); for(S32 i = 0; i < count; ++i) { @@ -947,7 +993,7 @@ private: LLUUID mSessionID; }; -BOOL LLIMFloater::inviteToSession(const std::vector<LLUUID>& ids) +BOOL LLIMFloater::inviteToSession(const uuid_vec_t& ids) { LLViewerRegion* region = gAgent.getRegion(); if (!region) diff --git a/indra/newview/llimfloater.h b/indra/newview/llimfloater.h index 2f034d02b8..763dd5655b 100644 --- a/indra/newview/llimfloater.h +++ b/indra/newview/llimfloater.h @@ -129,7 +129,7 @@ private: BOOL dropCategory(LLInventoryCategory* category, BOOL drop); BOOL isInviteAllowed() const; - BOOL inviteToSession(const std::vector<LLUUID>& agent_ids); + BOOL inviteToSession(const uuid_vec_t& agent_ids); static void onInputEditorFocusReceived( LLFocusableElement* caller, void* userdata ); static void onInputEditorFocusLost(LLFocusableElement* caller, void* userdata); diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index b3f085ef6d..0099cd114f 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -36,6 +36,7 @@ #include "llfloaterreg.h" #include "llfontgl.h" +#include "llgl.h" #include "llrect.h" #include "llerror.h" #include "llbutton.h" @@ -146,7 +147,7 @@ LLIMModel::LLIMModel() addNewMsgCallback(toast_callback); } -LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string& name, const EInstantMessage& type, const LLUUID& other_participant_id, const std::vector<LLUUID>& ids, bool voice) +LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string& name, const EInstantMessage& type, const LLUUID& other_participant_id, const uuid_vec_t& ids, bool voice) : mSessionID(session_id), mName(name), mType(type), @@ -423,7 +424,7 @@ LLIMModel::LLIMSession* LLIMModel::findIMSession(const LLUUID& session_id) const } //*TODO consider switching to using std::set instead of std::list for holding LLUUIDs across the whole code -LLIMModel::LLIMSession* LLIMModel::findAdHocIMSession(const std::vector<LLUUID>& ids) +LLIMModel::LLIMSession* LLIMModel::findAdHocIMSession(const uuid_vec_t& ids) { S32 num = ids.size(); if (!num) return NULL; @@ -440,7 +441,7 @@ LLIMModel::LLIMSession* LLIMModel::findAdHocIMSession(const std::vector<LLUUID>& std::list<LLUUID> tmp_list(session->mInitialTargetIDs.begin(), session->mInitialTargetIDs.end()); - std::vector<LLUUID>::const_iterator iter = ids.begin(); + uuid_vec_t::const_iterator iter = ids.begin(); while (iter != ids.end()) { tmp_list.remove(*iter); @@ -571,7 +572,7 @@ void LLIMModel::testMessages() //session name should not be empty bool LLIMModel::newSession(const LLUUID& session_id, const std::string& name, const EInstantMessage& type, - const LLUUID& other_participant_id, const std::vector<LLUUID>& ids, bool voice) + const LLUUID& other_participant_id, const uuid_vec_t& ids, bool voice) { if (name.empty()) { @@ -596,7 +597,7 @@ bool LLIMModel::newSession(const LLUUID& session_id, const std::string& name, co bool LLIMModel::newSession(const LLUUID& session_id, const std::string& name, const EInstantMessage& type, const LLUUID& other_participant_id, bool voice) { - std::vector<LLUUID> no_ids; + uuid_vec_t no_ids; return newSession(session_id, name, type, other_participant_id, no_ids, voice); } @@ -608,10 +609,10 @@ bool LLIMModel::clearSession(const LLUUID& session_id) return true; } -void LLIMModel::getMessages(const LLUUID& session_id, std::list<LLSD>& messages, int start_index) +void LLIMModel::getMessagesSilently(const LLUUID& session_id, std::list<LLSD>& messages, int start_index) { LLIMSession* session = findIMSession(session_id); - if (!session) + if (!session) { llwarns << "session " << session_id << "does not exist " << llendl; return; @@ -619,7 +620,7 @@ void LLIMModel::getMessages(const LLUUID& session_id, std::list<LLSD>& messages, int i = session->mMsgs.size() - start_index; - for (std::list<LLSD>::iterator iter = session->mMsgs.begin(); + for (std::list<LLSD>::iterator iter = session->mMsgs.begin(); iter != session->mMsgs.end() && i > 0; iter++) { @@ -628,6 +629,16 @@ void LLIMModel::getMessages(const LLUUID& session_id, std::list<LLSD>& messages, messages.push_back(*iter); i--; } +} + +void LLIMModel::sendNoUnreadMessages(const LLUUID& session_id) +{ + LLIMSession* session = findIMSession(session_id); + if (!session) + { + llwarns << "session " << session_id << "does not exist " << llendl; + return; + } session->mNumUnread = 0; session->mParticipantUnreadMessageCount = 0; @@ -639,6 +650,13 @@ void LLIMModel::getMessages(const LLUUID& session_id, std::list<LLSD>& messages, mNoUnreadMsgsSignal(arg); } +void LLIMModel::getMessages(const LLUUID& session_id, std::list<LLSD>& messages, int start_index) +{ + getMessagesSilently(session_id, messages, start_index); + + sendNoUnreadMessages(session_id); +} + bool LLIMModel::addToHistory(const LLUUID& session_id, const std::string& from, const LLUUID& from_id, const std::string& utf8_text) { LLIMSession* session = findIMSession(session_id); @@ -717,13 +735,22 @@ LLIMModel::LLIMSession* LLIMModel::addMessageSilently(const LLUUID& session_id, return NULL; } - addToHistory(session_id, from, from_id, utf8_text); - if (log2file) logToFile(session_id, from, from_id, utf8_text); + // replace interactive system message marker with correct from string value + std::string from_name = from; + if (INTERACTIVE_SYSTEM_FROM == from) + { + from_name = SYSTEM_FROM; + } + + addToHistory(session_id, from_name, from_id, utf8_text); + if (log2file) logToFile(session_id, from_name, from_id, utf8_text); session->mNumUnread++; //update count of unread messages from real participant - if (!(from_id.isNull() || from_id == gAgentID || SYSTEM_FROM == from)) + if (!(from_id.isNull() || from_id == gAgentID || SYSTEM_FROM == from) + // we should increment counter for interactive system messages() + || INTERACTIVE_SYSTEM_FROM == from) { ++(session->mParticipantUnreadMessageCount); } @@ -976,7 +1003,7 @@ void LLIMModel::sendMessage(const std::string& utf8_text, } else { - for(std::vector<LLUUID>::iterator it = session->mInitialTargetIDs.begin(); + for(uuid_vec_t::iterator it = session->mInitialTargetIDs.begin(); it!=session->mInitialTargetIDs.end();++it) { const LLUUID id = *it; @@ -1108,7 +1135,7 @@ private: bool LLIMModel::sendStartSession( const LLUUID& temp_session_id, const LLUUID& other_participant_id, - const std::vector<LLUUID>& ids, + const uuid_vec_t& ids, EInstantMessage dialog) { if ( dialog == IM_SESSION_GROUP_START ) diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h index e7404074e0..0a23fda9d8 100644 --- a/indra/newview/llimview.h +++ b/indra/newview/llimview.h @@ -61,7 +61,7 @@ public: } SType; LLIMSession(const LLUUID& session_id, const std::string& name, - const EInstantMessage& type, const LLUUID& other_participant_id, const std::vector<LLUUID>& ids, bool voice); + const EInstantMessage& type, const LLUUID& other_participant_id, const uuid_vec_t& ids, bool voice); virtual ~LLIMSession(); void sessionInitReplyReceived(const LLUUID& new_session_id); @@ -93,7 +93,7 @@ public: EInstantMessage mType; SType mSessionType; LLUUID mOtherParticipantID; - std::vector<LLUUID> mInitialTargetIDs; + uuid_vec_t mInitialTargetIDs; std::string mHistoryFileName; // connection to voice channel state change signal @@ -152,7 +152,7 @@ public: * Find an Ad-Hoc IM Session with specified participants * @return first found Ad-Hoc session or NULL if the session does not exist */ - LLIMSession* findAdHocIMSession(const std::vector<LLUUID>& ids); + LLIMSession* findAdHocIMSession(const uuid_vec_t& ids); /** * Rebind session data to a new session id. @@ -167,7 +167,7 @@ public: * @param name session name should not be empty, will return false if empty */ bool newSession(const LLUUID& session_id, const std::string& name, const EInstantMessage& type, const LLUUID& other_participant_id, - const std::vector<LLUUID>& ids, bool voice = false); + const uuid_vec_t& ids, bool voice = false); bool newSession(const LLUUID& session_id, const std::string& name, const EInstantMessage& type, const LLUUID& other_participant_id, bool voice = false); @@ -178,6 +178,17 @@ public: bool clearSession(const LLUUID& session_id); /** + * Populate supplied std::list with messages starting from index specified by start_index without + * emitting no unread messages signal. + */ + void getMessagesSilently(const LLUUID& session_id, std::list<LLSD>& messages, int start_index = 0); + + /** + * Sends no unread messages signal. + */ + void sendNoUnreadMessages(const LLUUID& session_id); + + /** * Populate supplied std::list with messages starting from index specified by start_index */ void getMessages(const LLUUID& session_id, std::list<LLSD>& messages, int start_index = 0); @@ -244,7 +255,7 @@ public: static void sendLeaveSession(const LLUUID& session_id, const LLUUID& other_participant_id); static bool sendStartSession(const LLUUID& temp_session_id, const LLUUID& other_participant_id, - const std::vector<LLUUID>& ids, EInstantMessage dialog); + const uuid_vec_t& ids, EInstantMessage dialog); static void sendTypingState(LLUUID session_id, LLUUID other_participant_id, BOOL typing); static void sendMessage(const std::string& utf8_text, const LLUUID& im_session_id, const LLUUID& other_participant_id, EInstantMessage dialog); diff --git a/indra/newview/llinspectavatar.cpp b/indra/newview/llinspectavatar.cpp index 14bc4376fe..35cb9b3468 100644 --- a/indra/newview/llinspectavatar.cpp +++ b/indra/newview/llinspectavatar.cpp @@ -564,7 +564,6 @@ void LLInspectAvatar::updateVolumeSlider() LLUICtrl* volume_slider = getChild<LLUICtrl>("volume_slider"); volume_slider->setEnabled( !is_muted ); - const F32 DEFAULT_VOLUME = 0.5f; F32 volume; if (is_muted) { @@ -575,13 +574,6 @@ void LLInspectAvatar::updateVolumeSlider() { // actual volume volume = gVoiceClient->getUserVolume(mAvatarID); - - // *HACK: Voice client doesn't have any data until user actually - // says something. - if (volume == 0.f) - { - volume = DEFAULT_VOLUME; - } } volume_slider->setValue( (F64)volume ); } diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index ceeffea1c9..0fbf3148ac 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -31,12 +31,15 @@ */ #include "llviewerprecompiledheaders.h" +#include "llinventorybridge.h" + // external projects #include "lltransfersourceasset.h" -#include "llinventorybridge.h" + #include "llagent.h" +#include "llagentcamera.h" #include "llagentwearables.h" #include "llappearancemgr.h" #include "llavataractions.h" @@ -51,6 +54,7 @@ #include "llinventoryclipboard.h" #include "llinventoryfunctions.h" #include "llinventorymodel.h" +#include "llinventorymodelbackgroundfetch.h" #include "llinventorypanel.h" #include "llnotifications.h" #include "llnotificationsutil.h" @@ -103,7 +107,7 @@ std::string ICON_NAME[ICON_NAME_COUNT] = "Inv_Script", "Inv_Clothing", "Inv_Object", - "Inv_Object", + "Inv_Object_Multi", "Inv_Notecard", "Inv_Skin", "Inv_Snapshot", @@ -192,7 +196,7 @@ BOOL LLInvFVBridge::isItemRemovable() const } // Disable delete from COF folder; have users explicitly choose "detach/take off". - if (LLAppearanceManager::instance().getIsProtectedCOFItem(mUUID)) + if (LLAppearanceMgr::instance().getIsProtectedCOFItem(mUUID)) { return FALSE; } @@ -259,7 +263,7 @@ void LLInvFVBridge::removeBatch(LLDynamicArray<LLFolderViewEventListener*>& batc { if(LLAssetType::AT_GESTURE == item->getType()) { - LLGestureManager::instance().deactivateGesture(item->getUUID()); + LLGestureMgr::instance().deactivateGesture(item->getUUID()); } } } @@ -275,7 +279,7 @@ void LLInvFVBridge::removeBatch(LLDynamicArray<LLFolderViewEventListener*>& batc { if(LLAssetType::AT_GESTURE == descendent_items[j]->getType()) { - LLGestureManager::instance().deactivateGesture(descendent_items[j]->getUUID()); + LLGestureMgr::instance().deactivateGesture(descendent_items[j]->getUUID()); } } } @@ -296,7 +300,7 @@ void LLInvFVBridge::removeBatchNoCheck(LLDynamicArray<LLFolderViewEventListener* LLMessageSystem* msg = gMessageSystem; const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH); LLViewerInventoryItem* item = NULL; - std::vector<LLUUID> move_ids; + uuid_vec_t move_ids; LLInventoryModel::update_map_t update; bool start_new_message = true; S32 count = batch.count(); @@ -397,8 +401,8 @@ void LLInvFVBridge::removeBatchNoCheck(LLDynamicArray<LLFolderViewEventListener* } // move everything. - std::vector<LLUUID>::iterator it = move_ids.begin(); - std::vector<LLUUID>::iterator end = move_ids.end(); + uuid_vec_t::iterator it = move_ids.begin(); + uuid_vec_t::iterator end = move_ids.end(); for(; it != end; ++it) { gInventory.moveObject((*it), trash_id); @@ -592,7 +596,7 @@ void LLInvFVBridge::getClipboardEntries(bool show_asset_id, LLViewerInventoryItem* inv_item = gInventory.getItem(mUUID); if (inv_item) { - is_asset_knowable = is_asset_id_knowable(inv_item->getType()); + is_asset_knowable = LLAssetType::lookupIsAssetIDKnowable(inv_item->getType()); } if ( !is_asset_knowable // disable menu item for Inventory items with unknown asset. EXT-5308 || (! ( isItemPermissive() || gAgent.isGodlike() ) ) @@ -728,7 +732,7 @@ BOOL LLInvFVBridge::startDrag(EDragAndDropType* type, LLUUID* id) const if (*type == DAD_CATEGORY) { - gInventory.startBackgroundFetch(obj->getUUID()); + LLInventoryModelBackgroundFetch::instance().start(obj->getUUID()); } rv = TRUE; @@ -801,7 +805,7 @@ BOOL LLInvFVBridge::isAgentInventory() const BOOL LLInvFVBridge::isCOFFolder() const { - return LLAppearanceManager::instance().getIsInCOF(mUUID); + return LLAppearanceMgr::instance().getIsInCOF(mUUID); } BOOL LLInvFVBridge::isItemPermissive() const @@ -1505,14 +1509,10 @@ BOOL LLFolderBridge::isItemRemovable() const return FALSE; } - LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); - if( !avatar ) - { - return FALSE; - } + if (!isAgentAvatarValid()) return FALSE; LLInventoryCategory* category = model->getCategory(mUUID); - if( !category ) + if(!category) { return FALSE; } @@ -1660,8 +1660,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat, LLInventoryModel* model = getInventoryModel(); if(!model) return FALSE; - LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); - if(!avatar) return FALSE; + if (!isAgentAvatarValid()) return FALSE; // cannot drag categories into library if(!isAgentInventory()) @@ -1747,9 +1746,9 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat, { LLInventoryItem* item = descendent_items[i]; if (item->getType() == LLAssetType::AT_GESTURE - && LLGestureManager::instance().isGestureActive(item->getUUID())) + && LLGestureMgr::instance().isGestureActive(item->getUUID())) { - LLGestureManager::instance().deactivateGesture(item->getUUID()); + LLGestureMgr::instance().deactivateGesture(item->getUUID()); } } } @@ -1762,7 +1761,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat, { // traverse category and add all contents to currently worn. BOOL append = true; - LLAppearanceManager::instance().wearInventoryCategory(inv_cat, false, append); + LLAppearanceMgr::instance().wearInventoryCategory(inv_cat, false, append); } else { @@ -1770,7 +1769,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat, LLInventoryModel::cat_array_t cats; LLInventoryModel::item_array_t items; gInventory.collectDescendents(inv_cat->getUUID(), cats, items, LLInventoryModel::EXCLUDE_TRASH); - LLAppearanceManager::instance().linkAll(mUUID,items,NULL); + LLAppearanceMgr::instance().linkAll(mUUID,items,NULL); } } else @@ -1779,7 +1778,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat, // BAP - should skip if dup. if (move_is_into_current_outfit) { - LLAppearanceManager::instance().addEnsembleLink(inv_cat); + LLAppearanceMgr::instance().addEnsembleLink(inv_cat); } else { @@ -1926,50 +1925,6 @@ BOOL move_inv_category_world_to_agent(const LLUUID& object_id, return accept; } -bool LLFindCOFValidItems::operator()(LLInventoryCategory* cat, - LLInventoryItem* item) -{ - // Valid COF items are: - // - links to wearables (body parts or clothing) - // - links to attachments - // - links to gestures - // - links to ensemble folders - LLViewerInventoryItem *linked_item = ((LLViewerInventoryItem*)item)->getLinkedItem(); - if (linked_item) - { - LLAssetType::EType type = linked_item->getType(); - return (type == LLAssetType::AT_CLOTHING || - type == LLAssetType::AT_BODYPART || - type == LLAssetType::AT_GESTURE || - type == LLAssetType::AT_OBJECT); - } - else - { - LLViewerInventoryCategory *linked_category = ((LLViewerInventoryItem*)item)->getLinkedCategory(); - // BAP remove AT_NONE support after ensembles are fully working? - return (linked_category && - ((linked_category->getPreferredType() == LLFolderType::FT_NONE) || - (LLFolderType::lookupIsEnsembleType(linked_category->getPreferredType())))); - } -} - - -bool LLFindWearables::operator()(LLInventoryCategory* cat, - LLInventoryItem* item) -{ - if(item) - { - if((item->getType() == LLAssetType::AT_CLOTHING) - || (item->getType() == LLAssetType::AT_BODYPART)) - { - return TRUE; - } - } - return FALSE; -} - - - //Used by LLFolderBridge as callback for directory recursion. class LLRightClickInventoryFetchObserver : public LLInventoryFetchObserver { @@ -2137,7 +2092,7 @@ void LLInventoryCopyAndWearObserver::changed(U32 mask) mContentsCount) { gInventory.removeObserver(this); - LLAppearanceManager::instance().wearInventoryCategory(category, FALSE, TRUE); + LLAppearanceMgr::instance().wearInventoryCategory(category, FALSE, TRUE); delete this; } } @@ -2187,7 +2142,7 @@ void LLFolderBridge::performAction(LLFolderView* folder, LLInventoryModel* model if(!model) return; LLViewerInventoryCategory* cat = getCategory(); if(!cat) return; - LLAppearanceManager::instance().addEnsembleLink(cat,true); + LLAppearanceMgr::instance().addEnsembleLink(cat,true); return; } #endif @@ -2417,9 +2372,9 @@ bool LLFolderBridge::removeItemResponse(const LLSD& notification, const LLSD& re const LLViewerInventoryItem* item = (*iter); const LLUUID& item_id = item->getUUID(); if (item->getType() == LLAssetType::AT_GESTURE - && LLGestureManager::instance().isGestureActive(item_id)) + && LLGestureMgr::instance().isGestureActive(item_id)) { - LLGestureManager::instance().deactivateGesture(item_id); + LLGestureMgr::instance().deactivateGesture(item_id); } } @@ -2722,7 +2677,7 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags) addDeleteContextMenuOptions(mItems, mDisabledItems); // EXT-4030: disallow deletion of currently worn outfit - const LLViewerInventoryItem *base_outfit_link = LLAppearanceManager::instance().getBaseOutfitLink(); + const LLViewerInventoryItem *base_outfit_link = LLAppearanceMgr::instance().getBaseOutfitLink(); if (base_outfit_link && (cat == base_outfit_link->getLinkedCategory())) { mDisabledItems.push_back(std::string("Delete")); @@ -2754,7 +2709,7 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags) sSelf = this; LLRightClickInventoryFetchDescendentsObserver* fetch = new LLRightClickInventoryFetchDescendentsObserver(FALSE); - LLInventoryFetchDescendentsObserver::folder_ref_t folders; + uuid_vec_t folders; LLViewerInventoryCategory* category = (LLViewerInventoryCategory*)model->getCategory(mUUID); if (category) { @@ -2970,7 +2925,7 @@ void LLFolderBridge::modifyOutfit(BOOL append) LLViewerInventoryCategory* cat = getCategory(); if(!cat) return; - LLAppearanceManager::instance().wearInventoryCategory( cat, FALSE, append ); + LLAppearanceMgr::instance().wearInventoryCategory( cat, FALSE, append ); } // helper stuff @@ -3025,8 +2980,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item, return FALSE; } - LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); - if(!avatar) return FALSE; + if (!isAgentAvatarValid()) return FALSE; LLToolDragAndDrop::ESource source = LLToolDragAndDrop::getInstance()->getSource(); BOOL accept = FALSE; @@ -3048,7 +3002,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item, const LLUUID current_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT); const BOOL move_is_into_current_outfit = (mUUID == current_outfit_id); const BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT); - const BOOL move_is_outof_current_outfit = LLAppearanceManager::instance().getIsInCOF(inv_item->getUUID()); + const BOOL move_is_outof_current_outfit = LLAppearanceMgr::instance().getIsInCOF(inv_item->getUUID()); // Can't explicitly drag things out of the COF. if (move_is_outof_current_outfit) @@ -3080,9 +3034,9 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item, if(accept && drop) { if (inv_item->getType() == LLAssetType::AT_GESTURE - && LLGestureManager::instance().isGestureActive(inv_item->getUUID()) && move_is_into_trash) + && LLGestureMgr::instance().isGestureActive(inv_item->getUUID()) && move_is_into_trash) { - LLGestureManager::instance().deactivateGesture(inv_item->getUUID()); + LLGestureMgr::instance().deactivateGesture(inv_item->getUUID()); } // If an item is being dragged between windows, unselect // everything in the active window so that we don't follow @@ -3135,7 +3089,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item, // BAP - should skip if dup. if (move_is_into_current_outfit) { - LLAppearanceManager::instance().addCOFItemLink(inv_item); + LLAppearanceMgr::instance().addCOFItemLink(inv_item); } else { @@ -3794,7 +3748,7 @@ LLUIImagePtr LLGestureBridge::getIcon() const LLFontGL::StyleFlags LLGestureBridge::getLabelStyle() const { - if( LLGestureManager::instance().isGestureActive(mUUID) ) + if( LLGestureMgr::instance().isGestureActive(mUUID) ) { return LLFontGL::BOLD; } @@ -3806,9 +3760,11 @@ LLFontGL::StyleFlags LLGestureBridge::getLabelStyle() const std::string LLGestureBridge::getLabelSuffix() const { - if( LLGestureManager::instance().isGestureActive(mUUID) ) + if( LLGestureMgr::instance().isGestureActive(mUUID) ) { - return LLItemBridge::getLabelSuffix() + " (active)"; + LLStringUtil::format_map_t args; + args["[GESLABEL]"] = LLItemBridge::getLabelSuffix(); + return LLTrans::getString("ActiveGesture", args); } else { @@ -3821,7 +3777,7 @@ void LLGestureBridge::performAction(LLFolderView* folder, LLInventoryModel* mode { if (isAddAction(action)) { - LLGestureManager::instance().activateGesture(mUUID); + LLGestureMgr::instance().activateGesture(mUUID); LLViewerInventoryItem* item = gInventory.getItem(mUUID); if (!item) return; @@ -3833,7 +3789,7 @@ void LLGestureBridge::performAction(LLFolderView* folder, LLInventoryModel* mode } else if (isRemoveAction(action)) { - LLGestureManager::instance().deactivateGesture(mUUID); + LLGestureMgr::instance().deactivateGesture(mUUID); LLViewerInventoryItem* item = gInventory.getItem(mUUID); if (!item) return; @@ -3845,17 +3801,17 @@ void LLGestureBridge::performAction(LLFolderView* folder, LLInventoryModel* mode } else if("play" == action) { - if(!LLGestureManager::instance().isGestureActive(mUUID)) + if(!LLGestureMgr::instance().isGestureActive(mUUID)) { // we need to inform server about gesture activating to be consistent with LLPreviewGesture and LLGestureComboList. BOOL inform_server = TRUE; BOOL deactivate_similar = FALSE; - LLGestureManager::instance().setGestureLoadedCallback(mUUID, boost::bind(&LLGestureBridge::playGesture, mUUID)); + LLGestureMgr::instance().setGestureLoadedCallback(mUUID, boost::bind(&LLGestureBridge::playGesture, mUUID)); LLViewerInventoryItem* item = gInventory.getItem(mUUID); llassert(item); if (item) { - LLGestureManager::instance().activateGestureWithAsset(mUUID, item->getAssetUUID(), inform_server, deactivate_similar); + LLGestureMgr::instance().activateGestureWithAsset(mUUID, item->getAssetUUID(), inform_server, deactivate_similar); } } else @@ -3897,7 +3853,7 @@ BOOL LLGestureBridge::removeItem() // This will also force close the preview window, if it exists. // This may actually delete *this, if mUUID is in the COF. - LLGestureManager::instance().deactivateGesture(item_id); + LLGestureMgr::instance().deactivateGesture(item_id); // If deactivateGesture deleted *this, then return out immediately. if (!model->getObject(item_id)) @@ -3930,7 +3886,7 @@ void LLGestureBridge::buildContextMenu(LLMenuGL& menu, U32 flags) getClipboardEntries(true, items, disabled_items, flags); items.push_back(std::string("Gesture Separator")); - if (LLGestureManager::instance().isGestureActive(getUUID())) + if (LLGestureMgr::instance().isGestureActive(getUUID())) { items.push_back(std::string("Deactivate")); } @@ -3945,13 +3901,13 @@ void LLGestureBridge::buildContextMenu(LLMenuGL& menu, U32 flags) // static void LLGestureBridge::playGesture(const LLUUID& item_id) { - if (LLGestureManager::instance().isGesturePlaying(item_id)) + if (LLGestureMgr::instance().isGesturePlaying(item_id)) { - LLGestureManager::instance().stopGesture(item_id); + LLGestureMgr::instance().stopGesture(item_id); } else { - LLGestureManager::instance().playGesture(item_id); + LLGestureMgr::instance().playGesture(item_id); } } @@ -4152,12 +4108,11 @@ std::string LLObjectBridge::getLabelSuffix() const { if (get_is_item_worn(mUUID)) { - LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); - std::string attachment_point_name = avatar->getAttachedPointName(mUUID); + std::string attachment_point_name = gAgentAvatarp->getAttachedPointName(mUUID); // e.g. "(worn on ...)" / "(attached to ...)" LLStringUtil::format_map_t args; - args["[ATTACHMENT_POINT]"] = attachment_point_name.c_str(); + args["[ATTACHMENT_POINT]"] = LLTrans::getString(attachment_point_name); return LLItemBridge::getLabelSuffix() + LLTrans::getString("WornOnAttachmentPoint", args); } else @@ -4172,10 +4127,10 @@ void rez_attachment(LLViewerInventoryItem* item, LLViewerJointAttachment* attach payload["item_id"] = item->getLinkedUUID(); // Wear the base object in case this is a link. S32 attach_pt = 0; - if (gAgent.getAvatarObject() && attachment) + if (isAgentAvatarValid() && attachment) { - for (LLVOAvatar::attachment_map_t::iterator iter = gAgent.getAvatarObject()->mAttachmentPoints.begin(); - iter != gAgent.getAvatarObject()->mAttachmentPoints.end(); ++iter) + for (LLVOAvatar::attachment_map_t::iterator iter = gAgentAvatarp->mAttachmentPoints.begin(); + iter != gAgentAvatarp->mAttachmentPoints.end(); ++iter) { if (iter->second == attachment) { @@ -4201,9 +4156,7 @@ void rez_attachment(LLViewerInventoryItem* item, LLViewerJointAttachment* attach bool confirm_replace_attachment_rez(const LLSD& notification, const LLSD& response) { - LLVOAvatar *avatarp = gAgent.getAvatarObject(); - - if (!avatarp->canAttachMoreObjects()) + if (!gAgentAvatarp->canAttachMoreObjects()) { LLSD args; args["MAX_ATTACHMENTS"] = llformat("%d", MAX_AGENT_ATTACHMENTS); @@ -4265,11 +4218,7 @@ void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags) LLInventoryItem *item = getItem(); if(item) { - LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); - if( !avatarp ) - { - return; - } + if (!isAgentAvatarValid()) return; if( get_is_item_worn( mUUID ) ) { @@ -4285,7 +4234,7 @@ void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags) // commented out for DEV-32347 //items.push_back(std::string("Restore to Last Position")); - if (!avatarp->canAttachMoreObjects()) + if (!gAgentAvatarp->canAttachMoreObjects()) { disabled_items.push_back(std::string("Object Wear")); disabled_items.push_back(std::string("Attach To")); @@ -4293,15 +4242,14 @@ void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags) } LLMenuGL* attach_menu = menu.findChildMenuByName("Attach To", TRUE); LLMenuGL* attach_hud_menu = menu.findChildMenuByName("Attach To HUD", TRUE); - LLVOAvatar *avatarp = gAgent.getAvatarObject(); if (attach_menu && (attach_menu->getChildCount() == 0) && attach_hud_menu && (attach_hud_menu->getChildCount() == 0) - && avatarp) + && isAgentAvatarValid()) { - for (LLVOAvatar::attachment_map_t::iterator iter = avatarp->mAttachmentPoints.begin(); - iter != avatarp->mAttachmentPoints.end(); ) + for (LLVOAvatar::attachment_map_t::iterator iter = gAgentAvatarp->mAttachmentPoints.begin(); + iter != gAgentAvatarp->mAttachmentPoints.end(); ) { LLVOAvatar::attachment_map_t::iterator curiter = iter++; LLViewerJointAttachment* attachment = curiter->second; @@ -4351,11 +4299,10 @@ BOOL LLObjectBridge::renameItem(const std::string& new_name) model->notifyObservers(); - LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); - if( avatar ) + if (isAgentAvatarValid()) { - LLViewerObject* obj = avatar->getWornAttachment( item->getUUID() ); - if( obj ) + LLViewerObject* obj = gAgentAvatarp->getWornAttachment( item->getUUID() ); + if(obj) { LLSelectMgr::getInstance()->deselectAll(); LLSelectMgr::getInstance()->addAsIndividual( obj, SELECT_ALL_TES, FALSE ); @@ -4407,7 +4354,7 @@ void wear_inventory_item_on_avatar( LLInventoryItem* item ) lldebugs << "wear_inventory_item_on_avatar( " << item->getName() << " )" << llendl; - LLAppearanceManager::instance().addCOFItemLink(item); + LLAppearanceMgr::instance().addCOFItemLink(item); } } @@ -4544,7 +4491,7 @@ void remove_inventory_category_from_avatar_step2( BOOL proceed, LLUUID category_ LLViewerInventoryItem *gest_item = gest_item_array.get(i); if (get_is_item_worn(gest_item->getUUID())) { - LLGestureManager::instance().deactivateGesture( gest_item->getLinkedUUID() ); + LLGestureMgr::instance().deactivateGesture( gest_item->getLinkedUUID() ); gInventory.updateItem( gest_item ); gInventory.notifyObservers(); } @@ -4904,10 +4851,10 @@ void LLWearableBridge::editOnAvatar() if (gFloaterCustomize) gFloaterCustomize->setCurrentWearableType( wearable->getType() ); - if( CAMERA_MODE_CUSTOMIZE_AVATAR != gAgent.getCameraMode() ) + if( CAMERA_MODE_CUSTOMIZE_AVATAR != gAgentCamera.getCameraMode() ) { // Start Avatar Customization - gAgent.changeCameraToCustomizeAvatar(); + gAgentCamera.changeCameraToCustomizeAvatar(); } } } @@ -4958,28 +4905,15 @@ void LLWearableBridge::onRemoveFromAvatarArrived(LLWearable* wearable, if( !(type==WT_SHAPE || type==WT_SKIN || type==WT_HAIR || type==WT_EYES ) ) //&& //!((!gAgent.isTeen()) && ( type==WT_UNDERPANTS || type==WT_UNDERSHIRT )) ) { - // MULTI_WEARABLE: FIXME HACK - always remove all bool do_remove_all = false; - gAgentWearables.removeWearable( type, do_remove_all, 0 ); + U32 index = gAgentWearables.getWearableIndex(wearable); + gAgentWearables.removeWearable( type, do_remove_all, index ); } } } // Find and remove this item from the COF. - // FIXME 2.1 - call removeCOFItemLinks in llappearancemgr instead. - LLInventoryModel::item_array_t items = gInventory.collectLinkedItems(item_id, LLAppearanceManager::instance().getCOF()); - if (items.size() != 1) - { - llwarns << "Found " << items.size() << " COF links to " << item_id.asString() << ", expected 1" << llendl; - } - for (LLInventoryModel::item_array_t::const_iterator iter = items.begin(); - iter != items.end(); - ++iter) - { - const LLViewerInventoryItem *linked_item = (*iter); - const LLUUID &item_id = linked_item->getUUID(); - gInventory.purgeObject(item_id); - } + LLAppearanceMgr::instance().removeCOFItemLinks(item_id,false); gInventory.notifyObservers(); delete on_remove_struct; @@ -5005,20 +4939,7 @@ void LLWearableBridge::removeAllClothesFromAvatar() continue; // Find and remove this item from the COF. - LLInventoryModel::item_array_t items = gInventory.collectLinkedItems( - item_id, LLAppearanceManager::instance().getCOF()); - if (items.size() != 1) - { - llwarns << "Found " << items.size() << " COF links to " << item_id.asString() << ", expected 1" << llendl; - } - for (LLInventoryModel::item_array_t::const_iterator iter = items.begin(); - iter != items.end(); - ++iter) - { - const LLViewerInventoryItem *linked_item = (*iter); - const LLUUID &item_id = linked_item->getUUID(); - gInventory.purgeObject(item_id); - } + LLAppearanceMgr::instance().removeCOFItemLinks(item_id,false); } gInventory.notifyObservers(); @@ -5356,7 +5277,10 @@ LLUIImagePtr LLLinkItemBridge::getIcon() const { if (LLViewerInventoryItem *item = getItem()) { - return get_item_icon(item->getActualType(), item->getInventoryType(), 0, FALSE); + U32 attachment_point = (item->getFlags() & 0xff); // low byte of inventory flags + bool is_multi = LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS & item->getFlags(); + + return get_item_icon(item->getActualType(), item->getInventoryType(), attachment_point, is_multi); } return get_item_icon(LLAssetType::AT_LINK, LLInventoryType::IT_NONE, 0, FALSE); } diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp index cd20d64ca8..1a488175ac 100644 --- a/indra/newview/llinventoryfilter.cpp +++ b/indra/newview/llinventoryfilter.cpp @@ -37,7 +37,8 @@ // viewer includes #include "llfoldervieweventlistener.h" #include "llfolderviewitem.h" -#include "llinventorymodel.h" // gInventory.backgroundFetchActive() +#include "llinventorymodel.h" +#include "llinventorymodelbackgroundfetch.h" #include "llviewercontrol.h" #include "llfolderview.h" @@ -713,7 +714,7 @@ const std::string& LLInventoryFilter::getFilterText() filtered_by_all_types = FALSE; } - if (!gInventory.backgroundFetchActive() + if (!LLInventoryModelBackgroundFetch::instance().backgroundFetchActive() && filtered_by_type && !filtered_by_all_types) { diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp index 3553137f53..3e16dfea5f 100644 --- a/indra/newview/llinventoryfunctions.cpp +++ b/indra/newview/llinventoryfunctions.cpp @@ -86,6 +86,218 @@ BOOL LLInventoryState::sWearNewClothing = FALSE; LLUUID LLInventoryState::sWearNewClothingTransactionID; + +///---------------------------------------------------------------------------- +/// LLInventoryCollectFunctor implementations +///---------------------------------------------------------------------------- + +// static +bool LLInventoryCollectFunctor::itemTransferCommonlyAllowed(LLInventoryItem* item) +{ + if (!item) + return false; + + bool allowed = false; + + switch(item->getType()) + { + case LLAssetType::AT_CALLINGCARD: + // not allowed + break; + + case LLAssetType::AT_OBJECT: + if (isAgentAvatarValid() && !gAgentAvatarp->isWearingAttachment(item->getUUID())) + { + allowed = true; + } + break; + + case LLAssetType::AT_BODYPART: + case LLAssetType::AT_CLOTHING: + if(!gAgentWearables.isWearingItem(item->getUUID())) + { + allowed = true; + } + break; + + default: + allowed = true; + break; + } + + return allowed; +} + +bool LLIsType::operator()(LLInventoryCategory* cat, LLInventoryItem* item) +{ + if(mType == LLAssetType::AT_CATEGORY) + { + if(cat) return TRUE; + } + if(item) + { + if(item->getType() == mType) return TRUE; + } + return FALSE; +} + +bool LLIsNotType::operator()(LLInventoryCategory* cat, LLInventoryItem* item) +{ + if(mType == LLAssetType::AT_CATEGORY) + { + if(cat) return FALSE; + } + if(item) + { + if(item->getType() == mType) return FALSE; + else return TRUE; + } + return TRUE; +} + +bool LLIsTypeWithPermissions::operator()(LLInventoryCategory* cat, LLInventoryItem* item) +{ + if(mType == LLAssetType::AT_CATEGORY) + { + if(cat) + { + return TRUE; + } + } + if(item) + { + if(item->getType() == mType) + { + LLPermissions perm = item->getPermissions(); + if ((perm.getMaskBase() & mPerm) == mPerm) + { + return TRUE; + } + } + } + return FALSE; +} + +bool LLBuddyCollector::operator()(LLInventoryCategory* cat, + LLInventoryItem* item) +{ + if(item) + { + if((LLAssetType::AT_CALLINGCARD == item->getType()) + && (!item->getCreatorUUID().isNull()) + && (item->getCreatorUUID() != gAgent.getID())) + { + return true; + } + } + return false; +} + + +bool LLUniqueBuddyCollector::operator()(LLInventoryCategory* cat, + LLInventoryItem* item) +{ + if(item) + { + if((LLAssetType::AT_CALLINGCARD == item->getType()) + && (item->getCreatorUUID().notNull()) + && (item->getCreatorUUID() != gAgent.getID())) + { + mSeen.insert(item->getCreatorUUID()); + return true; + } + } + return false; +} + + +bool LLParticularBuddyCollector::operator()(LLInventoryCategory* cat, + LLInventoryItem* item) +{ + if(item) + { + if((LLAssetType::AT_CALLINGCARD == item->getType()) + && (item->getCreatorUUID() == mBuddyID)) + { + return TRUE; + } + } + return FALSE; +} + + +bool LLNameCategoryCollector::operator()( + LLInventoryCategory* cat, LLInventoryItem* item) +{ + if(cat) + { + if (!LLStringUtil::compareInsensitive(mName, cat->getName())) + { + return true; + } + } + return false; +} + +bool LLFindCOFValidItems::operator()(LLInventoryCategory* cat, + LLInventoryItem* item) +{ + // Valid COF items are: + // - links to wearables (body parts or clothing) + // - links to attachments + // - links to gestures + // - links to ensemble folders + LLViewerInventoryItem *linked_item = ((LLViewerInventoryItem*)item)->getLinkedItem(); + if (linked_item) + { + LLAssetType::EType type = linked_item->getType(); + return (type == LLAssetType::AT_CLOTHING || + type == LLAssetType::AT_BODYPART || + type == LLAssetType::AT_GESTURE || + type == LLAssetType::AT_OBJECT); + } + else + { + LLViewerInventoryCategory *linked_category = ((LLViewerInventoryItem*)item)->getLinkedCategory(); + // BAP remove AT_NONE support after ensembles are fully working? + return (linked_category && + ((linked_category->getPreferredType() == LLFolderType::FT_NONE) || + (LLFolderType::lookupIsEnsembleType(linked_category->getPreferredType())))); + } +} + +bool LLFindWearables::operator()(LLInventoryCategory* cat, + LLInventoryItem* item) +{ + if(item) + { + if((item->getType() == LLAssetType::AT_CLOTHING) + || (item->getType() == LLAssetType::AT_BODYPART)) + { + return TRUE; + } + } + return FALSE; +} + +///---------------------------------------------------------------------------- +/// LLAssetIDMatches +///---------------------------------------------------------------------------- +bool LLAssetIDMatches::operator()(LLInventoryCategory* cat, LLInventoryItem* item) +{ + return (item && item->getAssetUUID() == mAssetID); +} + +///---------------------------------------------------------------------------- +/// LLLinkedItemIDMatches +///---------------------------------------------------------------------------- +bool LLLinkedItemIDMatches::operator()(LLInventoryCategory* cat, LLInventoryItem* item) +{ + return (item && + (item->getIsLinkType()) && + (item->getLinkedUUID() == mBaseItemID)); // A linked item's assetID will be the compared-to item's itemID. +} + void LLSaveFolderState::setApply(BOOL apply) { mApply = apply; @@ -352,8 +564,7 @@ BOOL get_is_item_worn(const LLUUID& id) { case LLAssetType::AT_OBJECT: { - const LLVOAvatarSelf* my_avatar = gAgent.getAvatarObject(); - if(my_avatar && my_avatar->isWearingAttachment(item->getLinkedUUID())) + if (isAgentAvatarValid() && gAgentAvatarp->isWearingAttachment(item->getLinkedUUID())) return TRUE; break; } @@ -363,7 +574,7 @@ BOOL get_is_item_worn(const LLUUID& id) return TRUE; break; case LLAssetType::AT_GESTURE: - if (LLGestureManager::instance().isGestureActive(item->getLinkedUUID())) + if (LLGestureMgr::instance().isGestureActive(item->getLinkedUUID())) return TRUE; break; default: diff --git a/indra/newview/llinventoryfunctions.h b/indra/newview/llinventoryfunctions.h index 968db84819..eb33763670 100644 --- a/indra/newview/llinventoryfunctions.h +++ b/indra/newview/llinventoryfunctions.h @@ -38,15 +38,221 @@ #include "llfolderview.h" #include "llfolderviewitem.h" +/******************************************************************************** + ** ** + ** INVENTORY COLLECTOR FUNCTIONS + **/ + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Class LLInventoryCollectFunctor +// +// Base class for LLInventoryModel::collectDescendentsIf() method +// which accepts an instance of one of these objects to use as the +// function to determine if it should be added. Derive from this class +// and override the () operator to return TRUE if you want to collect +// the category or item passed in. +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +class LLInventoryCollectFunctor +{ +public: + virtual ~LLInventoryCollectFunctor(){}; + virtual bool operator()(LLInventoryCategory* cat, LLInventoryItem* item) = 0; + + static bool itemTransferCommonlyAllowed(LLInventoryItem* item); +}; + + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Class LLAssetIDMatches +// +// This functor finds inventory items pointing to the specified asset +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +class LLViewerInventoryItem; + +class LLAssetIDMatches : public LLInventoryCollectFunctor +{ +public: + LLAssetIDMatches(const LLUUID& asset_id) : mAssetID(asset_id) {} + virtual ~LLAssetIDMatches() {} + bool operator()(LLInventoryCategory* cat, LLInventoryItem* item); + +protected: + LLUUID mAssetID; +}; + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Class LLLinkedItemIDMatches +// +// This functor finds inventory items linked to the specific inventory id. +// Assumes the inventory id is itself not a linked item. +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +class LLLinkedItemIDMatches : public LLInventoryCollectFunctor +{ +public: + LLLinkedItemIDMatches(const LLUUID& item_id) : mBaseItemID(item_id) {} + virtual ~LLLinkedItemIDMatches() {} + bool operator()(LLInventoryCategory* cat, LLInventoryItem* item); + +protected: + LLUUID mBaseItemID; +}; + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Class LLIsType // -// This is a collection of miscellaneous functions and classes -// that don't fit cleanly into any other class header. Eventually, -// we should figure out where to put these functions so that we can -// get rid of this generic file. +// Implementation of a LLInventoryCollectFunctor which returns TRUE if +// the type is the type passed in during construction. +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +class LLIsType : public LLInventoryCollectFunctor +{ +public: + LLIsType(LLAssetType::EType type) : mType(type) {} + virtual ~LLIsType() {} + virtual bool operator()(LLInventoryCategory* cat, + LLInventoryItem* item); +protected: + LLAssetType::EType mType; +}; + + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Class LLIsNotType // +// Implementation of a LLInventoryCollectFunctor which returns FALSE if the +// type is the type passed in during construction, otherwise false. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +class LLIsNotType : public LLInventoryCollectFunctor +{ +public: + LLIsNotType(LLAssetType::EType type) : mType(type) {} + virtual ~LLIsNotType() {} + virtual bool operator()(LLInventoryCategory* cat, + LLInventoryItem* item); +protected: + LLAssetType::EType mType; +}; + +class LLIsTypeWithPermissions : public LLInventoryCollectFunctor +{ +public: + LLIsTypeWithPermissions(LLAssetType::EType type, const PermissionBit perms, const LLUUID &agent_id, const LLUUID &group_id) + : mType(type), mPerm(perms), mAgentID(agent_id), mGroupID(group_id) {} + virtual ~LLIsTypeWithPermissions() {} + virtual bool operator()(LLInventoryCategory* cat, + LLInventoryItem* item); +protected: + LLAssetType::EType mType; + PermissionBit mPerm; + LLUUID mAgentID; + LLUUID mGroupID; +}; + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Class LLBuddyCollector +// +// Simple class that collects calling cards that are not null, and not +// the agent. Duplicates are possible. +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +class LLBuddyCollector : public LLInventoryCollectFunctor +{ +public: + LLBuddyCollector() {} + virtual ~LLBuddyCollector() {} + virtual bool operator()(LLInventoryCategory* cat, + LLInventoryItem* item); +}; + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Class LLUniqueBuddyCollector +// +// Simple class that collects calling cards that are not null, and not +// the agent. Duplicates are discarded. +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +class LLUniqueBuddyCollector : public LLInventoryCollectFunctor +{ +public: + LLUniqueBuddyCollector() {} + virtual ~LLUniqueBuddyCollector() {} + virtual bool operator()(LLInventoryCategory* cat, + LLInventoryItem* item); + +protected: + std::set<LLUUID> mSeen; +}; + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Class LLParticularBuddyCollector +// +// Simple class that collects calling cards that match a particular uuid +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +class LLParticularBuddyCollector : public LLInventoryCollectFunctor +{ +public: + LLParticularBuddyCollector(const LLUUID& id) : mBuddyID(id) {} + virtual ~LLParticularBuddyCollector() {} + virtual bool operator()(LLInventoryCategory* cat, + LLInventoryItem* item); +protected: + LLUUID mBuddyID; +}; + + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Class LLNameCategoryCollector +// +// Collects categories based on case-insensitive match of prefix +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +class LLNameCategoryCollector : public LLInventoryCollectFunctor +{ +public: + LLNameCategoryCollector(const std::string& name) : mName(name) {} + virtual ~LLNameCategoryCollector() {} + virtual bool operator()(LLInventoryCategory* cat, + LLInventoryItem* item); +protected: + std::string mName; +}; + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Class LLFindCOFValidItems +// +// Collects items that can be legitimately linked to in the COF. +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +class LLFindCOFValidItems : public LLInventoryCollectFunctor +{ +public: + LLFindCOFValidItems() {} + virtual ~LLFindCOFValidItems() {} + virtual bool operator()(LLInventoryCategory* cat, + LLInventoryItem* item); + +}; + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Class LLFindWearables +// +// Collects wearables based on item type. +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +class LLFindWearables : public LLInventoryCollectFunctor +{ +public: + LLFindWearables() {} + virtual ~LLFindWearables() {} + virtual bool operator()(LLInventoryCategory* cat, + LLInventoryItem* item); +}; + +/** Inventory Collector Functions + ** ** + *******************************************************************************/ + class LLInventoryState { public: diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index 83a466a243..d1cc0ae936 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -57,32 +57,16 @@ #include "process.h" #endif -BOOL LLInventoryModel::sBackgroundFetchActive = FALSE; -BOOL LLInventoryModel::sAllFoldersFetched = FALSE; -BOOL LLInventoryModel::sMyInventoryFetchStarted = FALSE; -BOOL LLInventoryModel::sLibraryFetchStarted = FALSE; -S32 LLInventoryModel::sNumFetchRetries = 0; -F32 LLInventoryModel::sMinTimeBetweenFetches = 0.3f; -F32 LLInventoryModel::sMaxTimeBetweenFetches = 10.f; -BOOL LLInventoryModel::sTimelyFetchPending = FALSE; -LLFrameTimer LLInventoryModel::sFetchTimer; -S16 LLInventoryModel::sBulkFetchCount = 0; -BOOL LLInventoryModel::sFirstTimeInViewer2 = TRUE; - // Increment this if the inventory contents change in a non-backwards-compatible way. // For viewer 2, the addition of link items makes a pre-viewer-2 cache incorrect. const S32 LLInventoryModel::sCurrentInvCacheVersion = 2; - -// RN: for some reason, using std::queue in the header file confuses the compiler which things it's an xmlrpc_queue -static std::deque<LLUUID> sFetchQueue; +BOOL LLInventoryModel::sFirstTimeInViewer2 = TRUE; ///---------------------------------------------------------------------------- /// Local function declarations, constants, enums, and typedefs ///---------------------------------------------------------------------------- //BOOL decompress_file(const char* src_filename, const char* dst_filename); -const F32 MAX_TIME_FOR_SINGLE_FETCH = 10.f; -const S32 MAX_FETCH_RETRIES = 10; const char CACHE_FORMAT_STRING[] = "%s.inv"; struct InventoryIDPtrLess @@ -1345,542 +1329,6 @@ bool LLInventoryModel::fetchDescendentsOf(const LLUUID& folder_id) return cat->fetchDescendents(); } -//Initialize statics. -bool LLInventoryModel::isBulkFetchProcessingComplete() -{ - return sFetchQueue.empty() && sBulkFetchCount<=0; -} - -class LLInventoryModelFetchDescendentsResponder: public LLHTTPClient::Responder -{ - public: - LLInventoryModelFetchDescendentsResponder(const LLSD& request_sd) : mRequestSD(request_sd) {}; - //LLInventoryModelFetchDescendentsResponder() {}; - void result(const LLSD& content); - void error(U32 status, const std::string& reason); - public: - typedef std::vector<LLViewerInventoryCategory*> folder_ref_t; - protected: - LLSD mRequestSD; -}; - -//If we get back a normal response, handle it here -void LLInventoryModelFetchDescendentsResponder::result(const LLSD& content) -{ - if (content.has("folders")) - { - - for(LLSD::array_const_iterator folder_it = content["folders"].beginArray(); - folder_it != content["folders"].endArray(); - ++folder_it) - { - LLSD folder_sd = *folder_it; - - - //LLUUID agent_id = folder_sd["agent_id"]; - - //if(agent_id != gAgent.getID()) //This should never happen. - //{ - // llwarns << "Got a UpdateInventoryItem for the wrong agent." - // << llendl; - // break; - //} - - LLUUID parent_id = folder_sd["folder_id"]; - LLUUID owner_id = folder_sd["owner_id"]; - S32 version = (S32)folder_sd["version"].asInteger(); - S32 descendents = (S32)folder_sd["descendents"].asInteger(); - LLPointer<LLViewerInventoryCategory> tcategory = new LLViewerInventoryCategory(owner_id); - - if (parent_id.isNull()) - { - LLPointer<LLViewerInventoryItem> titem = new LLViewerInventoryItem; - for(LLSD::array_const_iterator item_it = folder_sd["items"].beginArray(); - item_it != folder_sd["items"].endArray(); - ++item_it) - { - const LLUUID lost_uuid = gInventory.findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND); - if (lost_uuid.notNull()) - { - LLSD item = *item_it; - titem->unpackMessage(item); - - LLInventoryModel::update_list_t update; - LLInventoryModel::LLCategoryUpdate new_folder(lost_uuid, 1); - update.push_back(new_folder); - gInventory.accountForUpdate(update); - - titem->setParent(lost_uuid); - titem->updateParentOnServer(FALSE); - gInventory.updateItem(titem); - gInventory.notifyObservers("fetchDescendents"); - - } - } - } - - LLViewerInventoryCategory* pcat = gInventory.getCategory(parent_id); - if (!pcat) - { - continue; - } - - for(LLSD::array_const_iterator category_it = folder_sd["categories"].beginArray(); - category_it != folder_sd["categories"].endArray(); - ++category_it) - { - LLSD category = *category_it; - tcategory->fromLLSD(category); - - if (LLInventoryModel::sMyInventoryFetchStarted || - LLInventoryModel::sLibraryFetchStarted) - { - sFetchQueue.push_back(tcategory->getUUID()); - } - else if ( !gInventory.isCategoryComplete(tcategory->getUUID()) ) - { - gInventory.updateCategory(tcategory); - } - - } - LLPointer<LLViewerInventoryItem> titem = new LLViewerInventoryItem; - for(LLSD::array_const_iterator item_it = folder_sd["items"].beginArray(); - item_it != folder_sd["items"].endArray(); - ++item_it) - { - LLSD item = *item_it; - titem->unpackMessage(item); - - gInventory.updateItem(titem); - } - - // set version and descendentcount according to message. - LLViewerInventoryCategory* cat = gInventory.getCategory(parent_id); - if(cat) - { - cat->setVersion(version); - cat->setDescendentCount(descendents); - cat->determineFolderType(); - } - - } - } - - if (content.has("bad_folders")) - { - for(LLSD::array_const_iterator folder_it = content["bad_folders"].beginArray(); - folder_it != content["bad_folders"].endArray(); - ++folder_it) - { - LLSD folder_sd = *folder_it; - - //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; - } - } - - LLInventoryModel::incrBulkFetch(-1); - - if (LLInventoryModel::isBulkFetchProcessingComplete()) - { - llinfos << "Inventory fetch completed" << llendl; - LLInventoryModel::setAllFoldersFetched(); - } - - gInventory.notifyObservers("fetchDescendents"); -} - -//If we get back an error (not found, etc...), handle it here -void LLInventoryModelFetchDescendentsResponder::error(U32 status, const std::string& reason) -{ - llinfos << "LLInventoryModelFetchDescendentsResponder::error " - << status << ": " << reason << llendl; - - LLInventoryModel::incrBulkFetch(-1); - - if (status==499) //timed out. Let's be awesome! - { - for(LLSD::array_const_iterator folder_it = mRequestSD["folders"].beginArray(); - folder_it != mRequestSD["folders"].endArray(); - ++folder_it) - { - LLSD folder_sd = *folder_it; - LLUUID folder_id = folder_sd["folder_id"]; - sFetchQueue.push_front(folder_id); - } - } - else - { - if (LLInventoryModel::isBulkFetchProcessingComplete()) - { - LLInventoryModel::setAllFoldersFetched(); - } - } - gInventory.notifyObservers("fetchDescendents"); -} - -//static Bundle up a bunch of requests to send all at once. -void LLInventoryModel::bulkFetch(std::string url) -{ - //Background fetch is called from gIdleCallbacks in a loop until background fetch is stopped. - //If there are items in sFetchQueue, we want to check the time since the last bulkFetch was - //sent. If it exceeds our retry time, go ahead and fire off another batch. - //Stopbackgroundfetch will be run from the Responder instead of here. - - S16 max_concurrent_fetches=8; - F32 new_min_time = 0.5f; //HACK! Clean this up when old code goes away entirely. - if (sMinTimeBetweenFetches < new_min_time) sMinTimeBetweenFetches=new_min_time; //HACK! See above. - - if(gDisconnected - || sBulkFetchCount > max_concurrent_fetches - || sFetchTimer.getElapsedTimeF32() < sMinTimeBetweenFetches) - { - return; // just bail if we are disconnected. - } - - U32 folder_count=0; - U32 max_batch_size=5; - - U32 sort_order = gSavedSettings.getU32(LLInventoryPanel::DEFAULT_SORT_ORDER) & 0x1; - - LLSD body; - LLSD body_lib; - while( !(sFetchQueue.empty() ) && (folder_count < max_batch_size) ) - { - if (sFetchQueue.front().isNull()) //DEV-17797 - { - LLSD folder_sd; - folder_sd["folder_id"] = LLUUID::null.asString(); - folder_sd["owner_id"] = gAgent.getID(); - folder_sd["sort_order"] = (LLSD::Integer)sort_order; - folder_sd["fetch_folders"] = (LLSD::Boolean)FALSE; - folder_sd["fetch_items"] = (LLSD::Boolean)TRUE; - body["folders"].append(folder_sd); - folder_count++; - } - else - { - - - LLViewerInventoryCategory* cat = gInventory.getCategory(sFetchQueue.front()); - - if (cat) - { - if ( LLViewerInventoryCategory::VERSION_UNKNOWN == cat->getVersion()) - { - LLSD folder_sd; - folder_sd["folder_id"] = cat->getUUID(); - folder_sd["owner_id"] = cat->getOwnerID(); - folder_sd["sort_order"] = (LLSD::Integer)sort_order; - folder_sd["fetch_folders"] = TRUE; //(LLSD::Boolean)sFullFetchStarted; - folder_sd["fetch_items"] = (LLSD::Boolean)TRUE; - - if (ALEXANDRIA_LINDEN_ID == cat->getOwnerID()) - body_lib["folders"].append(folder_sd); - else - body["folders"].append(folder_sd); - folder_count++; - } - if (sMyInventoryFetchStarted || - sLibraryFetchStarted) - { //Already have this folder but append child folders to list. - // add all children to queue - parent_cat_map_t::iterator cat_it = gInventory.mParentChildCategoryTree.find(cat->getUUID()); - if (cat_it != gInventory.mParentChildCategoryTree.end()) - { - cat_array_t* child_categories = cat_it->second; - - for (S32 child_num = 0; child_num < child_categories->count(); child_num++) - { - sFetchQueue.push_back(child_categories->get(child_num)->getUUID()); - } - } - - } - } - } - sFetchQueue.pop_front(); - } - - if (folder_count > 0) - { - sBulkFetchCount++; - if (body["folders"].size()) - { - LLHTTPClient::post(url, body, new LLInventoryModelFetchDescendentsResponder(body),300.0); - } - if (body_lib["folders"].size()) - { - std::string url_lib = gAgent.getRegion()->getCapability("FetchLibDescendents"); - LLHTTPClient::post(url_lib, body_lib, new LLInventoryModelFetchDescendentsResponder(body_lib),300.0); - } - sFetchTimer.reset(); - } - else if (isBulkFetchProcessingComplete()) - { - setAllFoldersFetched(); - } -} - -bool fetchQueueContainsNoDescendentsOf(const LLUUID& cat_id) -{ - for (std::deque<LLUUID>::iterator it = sFetchQueue.begin(); - it != sFetchQueue.end(); ++it) - { - const LLUUID& fetch_id = *it; - if (gInventory.isObjectDescendentOf(fetch_id, cat_id)) - return false; - } - return true; -} - -/* static */ -bool LLInventoryModel::libraryFetchStarted() -{ - return sLibraryFetchStarted; -} - -/* static */ -bool LLInventoryModel::libraryFetchCompleted() -{ - return libraryFetchStarted() && fetchQueueContainsNoDescendentsOf(gInventory.getLibraryRootFolderID()); -} - -/* static */ -bool LLInventoryModel::libraryFetchInProgress() -{ - return libraryFetchStarted() && !libraryFetchCompleted(); -} - -/* static */ -bool LLInventoryModel::myInventoryFetchStarted() -{ - return sMyInventoryFetchStarted; -} - -/* static */ -bool LLInventoryModel::myInventoryFetchCompleted() -{ - return myInventoryFetchStarted() && fetchQueueContainsNoDescendentsOf(gInventory.getRootFolderID()); -} - -/* static */ -bool LLInventoryModel::myInventoryFetchInProgress() -{ - return myInventoryFetchStarted() && !myInventoryFetchCompleted(); -} - -// static -bool LLInventoryModel::isEverythingFetched() -{ - return sAllFoldersFetched; -} - -//static -BOOL LLInventoryModel::backgroundFetchActive() -{ - return sBackgroundFetchActive; -} - -void LLInventoryModel::startBackgroundFetch(const LLUUID& cat_id) -{ - if (!sAllFoldersFetched) - { - sBackgroundFetchActive = TRUE; - if (cat_id.isNull()) - { - if (!sMyInventoryFetchStarted) - { - sMyInventoryFetchStarted = TRUE; - sFetchQueue.push_back(gInventory.getRootFolderID()); - gIdleCallbacks.addFunction(&LLInventoryModel::backgroundFetch, NULL); - } - if (!sLibraryFetchStarted) - { - sLibraryFetchStarted = TRUE; - sFetchQueue.push_back(gInventory.getLibraryRootFolderID()); - gIdleCallbacks.addFunction(&LLInventoryModel::backgroundFetch, NULL); - } - } - else - { - // specific folder requests go to front of queue - if (sFetchQueue.empty() || sFetchQueue.front() != cat_id) - { - sFetchQueue.push_front(cat_id); - gIdleCallbacks.addFunction(&LLInventoryModel::backgroundFetch, NULL); - } - if (cat_id == gInventory.getLibraryRootFolderID()) - { - sLibraryFetchStarted = TRUE; - } - if (cat_id == gInventory.getRootFolderID()) - { - sMyInventoryFetchStarted = TRUE; - } - } - } -} - -//static -void LLInventoryModel::findLostItems() -{ - sBackgroundFetchActive = TRUE; - sFetchQueue.push_back(LLUUID::null); - gIdleCallbacks.addFunction(&LLInventoryModel::backgroundFetch, NULL); -} - -//static -void LLInventoryModel::stopBackgroundFetch() -{ - if (sBackgroundFetchActive) - { - sBackgroundFetchActive = FALSE; - gIdleCallbacks.deleteFunction(&LLInventoryModel::backgroundFetch, NULL); - sBulkFetchCount=0; - sMinTimeBetweenFetches=0.0f; - } -} - -// static -void LLInventoryModel::setAllFoldersFetched() -{ - if (sMyInventoryFetchStarted && - sLibraryFetchStarted) - { - sAllFoldersFetched = TRUE; - } - stopBackgroundFetch(); -} - -//static -void LLInventoryModel::backgroundFetch(void*) -{ - if (sBackgroundFetchActive && gAgent.getRegion()) - { - //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()) - { - bulkFetch(url); - return; - } - - //DEPRECATED OLD CODE FOLLOWS. - // no more categories to fetch, stop fetch process - if (sFetchQueue.empty()) - { - llinfos << "Inventory fetch completed" << llendl; - - setAllFoldersFetched(); - return; - } - - F32 fast_fetch_time = lerp(sMinTimeBetweenFetches, sMaxTimeBetweenFetches, 0.1f); - F32 slow_fetch_time = lerp(sMinTimeBetweenFetches, sMaxTimeBetweenFetches, 0.5f); - if (sTimelyFetchPending && sFetchTimer.getElapsedTimeF32() > slow_fetch_time) - { - // double timeouts on failure - sMinTimeBetweenFetches = llmin(sMinTimeBetweenFetches * 2.f, 10.f); - sMaxTimeBetweenFetches = llmin(sMaxTimeBetweenFetches * 2.f, 120.f); - llinfos << "Inventory fetch times grown to (" << sMinTimeBetweenFetches << ", " << sMaxTimeBetweenFetches << ")" << llendl; - // fetch is no longer considered "timely" although we will wait for full time-out - sTimelyFetchPending = FALSE; - } - - while(1) - { - if (sFetchQueue.empty()) - { - break; - } - - if(gDisconnected) - { - // just bail if we are disconnected. - break; - } - - LLViewerInventoryCategory* cat = gInventory.getCategory(sFetchQueue.front()); - - // category has been deleted, remove from queue. - if (!cat) - { - sFetchQueue.pop_front(); - continue; - } - - if (sFetchTimer.getElapsedTimeF32() > sMinTimeBetweenFetches && - 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 - if (cat->fetchDescendents()) - { - sFetchTimer.reset(); - sTimelyFetchPending = TRUE; - } - else - { - // The catagory also tracks if it has expired and here it says it hasn't - // yet. Get out of here because nothing is going to happen until we - // update the timers. - break; - } - } - // do I have all my children? - else if (gInventory.isCategoryComplete(sFetchQueue.front())) - { - // finished with this category, remove from queue - sFetchQueue.pop_front(); - - // add all children to queue - parent_cat_map_t::iterator cat_it = gInventory.mParentChildCategoryTree.find(cat->getUUID()); - if (cat_it != gInventory.mParentChildCategoryTree.end()) - { - cat_array_t* child_categories = cat_it->second; - - for (S32 child_num = 0; child_num < child_categories->count(); child_num++) - { - sFetchQueue.push_back(child_categories->get(child_num)->getUUID()); - } - } - - // we received a response in less than the fast time - if (sTimelyFetchPending && sFetchTimer.getElapsedTimeF32() < fast_fetch_time) - { - // shrink timeouts based on success - sMinTimeBetweenFetches = llmax(sMinTimeBetweenFetches * 0.8f, 0.3f); - sMaxTimeBetweenFetches = llmax(sMaxTimeBetweenFetches * 0.8f, 10.f); - //llinfos << "Inventory fetch times shrunk to (" << sMinTimeBetweenFetches << ", " << sMaxTimeBetweenFetches << ")" << llendl; - } - - sTimelyFetchPending = FALSE; - continue; - } - else if (sFetchTimer.getElapsedTimeF32() > sMaxTimeBetweenFetches) - { - // received first packet, but our num descendants does not match db's num descendants - // so try again later - LLUUID fetch_id = sFetchQueue.front(); - sFetchQueue.pop_front(); - - if (sNumFetchRetries++ < MAX_FETCH_RETRIES) - { - // push on back of queue - sFetchQueue.push_back(fetch_id); - } - sTimelyFetchPending = FALSE; - sFetchTimer.reset(); - break; - } - - // not enough time has elapsed to do a new fetch - break; - } - } -} void LLInventoryModel::cache( const LLUUID& parent_folder_id, @@ -2595,7 +2043,7 @@ void LLInventoryModel::buildParentChildMap() } count = items.count(); lost = 0; - std::vector<LLUUID> lost_item_ids; + uuid_vec_t lost_item_ids; for(i = 0; i < count; ++i) { LLPointer<LLViewerInventoryItem> item; @@ -2634,7 +2082,7 @@ void LLInventoryModel::buildParentChildMap() LLMessageSystem* msg = gMessageSystem; BOOL start_new_message = TRUE; const LLUUID lnf = findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND); - for(std::vector<LLUUID>::iterator it = lost_item_ids.begin() ; it < lost_item_ids.end(); ++it) + for(uuid_vec_t::iterator it = lost_item_ids.begin() ; it < lost_item_ids.end(); ++it) { if(start_new_message) { @@ -3094,7 +2542,7 @@ void LLInventoryModel::processRemoveInventoryItem(LLMessageSystem* msg, void**) return; } S32 count = msg->getNumberOfBlocksFast(_PREHASH_InventoryData); - std::vector<LLUUID> item_ids; + uuid_vec_t item_ids; update_map_t update; for(S32 i = 0; i < count; ++i) { @@ -3110,7 +2558,7 @@ void LLInventoryModel::processRemoveInventoryItem(LLMessageSystem* msg, void**) } } gInventory.accountForUpdate(update); - for(std::vector<LLUUID>::iterator it = item_ids.begin(); it != item_ids.end(); ++it) + for(uuid_vec_t::iterator it = item_ids.begin(); it != item_ids.end(); ++it) { gInventory.deleteObject(*it); } @@ -3190,7 +2638,7 @@ void LLInventoryModel::processRemoveInventoryFolder(LLMessageSystem* msg, << llendl; return; } - std::vector<LLUUID> folder_ids; + uuid_vec_t folder_ids; update_map_t update; S32 count = msg->getNumberOfBlocksFast(_PREHASH_FolderData); for(S32 i = 0; i < count; ++i) @@ -3204,7 +2652,7 @@ void LLInventoryModel::processRemoveInventoryFolder(LLMessageSystem* msg, } } gInventory.accountForUpdate(update); - for(std::vector<LLUUID>::iterator it = folder_ids.begin(); it != folder_ids.end(); ++it) + for(uuid_vec_t::iterator it = folder_ids.begin(); it != folder_ids.end(); ++it) { gInventory.deleteObject(*it); } @@ -3317,7 +2765,7 @@ void LLInventoryModel::processBulkUpdateInventory(LLMessageSystem* msg, void**) count = msg->getNumberOfBlocksFast(_PREHASH_ItemData); - std::vector<LLUUID> wearable_ids; + uuid_vec_t wearable_ids; item_array_t items; std::list<InventoryCallbackInfo> cblist; for(i = 0; i < count; ++i) @@ -3764,207 +3212,6 @@ void LLInventoryModel::dumpInventory() const } ///---------------------------------------------------------------------------- -/// LLInventoryCollectFunctor implementations -///---------------------------------------------------------------------------- - -// static -bool LLInventoryCollectFunctor::itemTransferCommonlyAllowed(LLInventoryItem* item) -{ - if (!item) - return false; - - bool allowed = false; - LLVOAvatarSelf* my_avatar = NULL; - - switch(item->getType()) - { - case LLAssetType::AT_CALLINGCARD: - // not allowed - break; - - case LLAssetType::AT_OBJECT: - my_avatar = gAgent.getAvatarObject(); - if(my_avatar && !my_avatar->isWearingAttachment(item->getUUID())) - { - allowed = true; - } - break; - - case LLAssetType::AT_BODYPART: - case LLAssetType::AT_CLOTHING: - if(!gAgentWearables.isWearingItem(item->getUUID())) - { - allowed = true; - } - break; - - default: - allowed = true; - break; - } - - return allowed; -} - -bool LLIsType::operator()(LLInventoryCategory* cat, LLInventoryItem* item) -{ - if(mType == LLAssetType::AT_CATEGORY) - { - if(cat) return TRUE; - } - if(item) - { - if(item->getType() == mType) return TRUE; - } - return FALSE; -} - -bool LLIsNotType::operator()(LLInventoryCategory* cat, LLInventoryItem* item) -{ - if(mType == LLAssetType::AT_CATEGORY) - { - if(cat) return FALSE; - } - if(item) - { - if(item->getType() == mType) return FALSE; - else return TRUE; - } - return TRUE; -} - -bool LLIsTypeWithPermissions::operator()(LLInventoryCategory* cat, LLInventoryItem* item) -{ - if(mType == LLAssetType::AT_CATEGORY) - { - if(cat) - { - return TRUE; - } - } - if(item) - { - if(item->getType() == mType) - { - LLPermissions perm = item->getPermissions(); - if ((perm.getMaskBase() & mPerm) == mPerm) - { - return TRUE; - } - } - } - return FALSE; -} - - -//bool LLIsClone::operator()(LLInventoryCategory* cat, LLInventoryItem* item) -//{ -// if(cat) return FALSE; -// if(item) -// { -// if(mItemMap->getType() == LLAssetType::AT_CALLINGCARD) -// { -// if((item->getType() == LLAssetType::AT_CALLINGCARD) -// && !(item->getCreatorUUID().isNull()) -// && (item->getCreatorUUID() == mItemMap->getCreatorUUID())) -// { -// return TRUE; -// } -// } -// else -// { -// if((item->getType() == mItemMap->getType()) -// && !(item->getAssetUUID().isNull()) -// && (item->getAssetUUID() == mItemMap->getAssetUUID()) -// && (item->getName() == mItemMap->getName())) -// { -// return TRUE; -// } -// } -// } -// return FALSE; -//} - -bool LLBuddyCollector::operator()(LLInventoryCategory* cat, - LLInventoryItem* item) -{ - if(item) - { - if((LLAssetType::AT_CALLINGCARD == item->getType()) - && (!item->getCreatorUUID().isNull()) - && (item->getCreatorUUID() != gAgent.getID())) - { - return true; - } - } - return false; -} - - -bool LLUniqueBuddyCollector::operator()(LLInventoryCategory* cat, - LLInventoryItem* item) -{ - if(item) - { - if((LLAssetType::AT_CALLINGCARD == item->getType()) - && (item->getCreatorUUID().notNull()) - && (item->getCreatorUUID() != gAgent.getID())) - { - mSeen.insert(item->getCreatorUUID()); - return true; - } - } - return false; -} - - -bool LLParticularBuddyCollector::operator()(LLInventoryCategory* cat, - LLInventoryItem* item) -{ - if(item) - { - if((LLAssetType::AT_CALLINGCARD == item->getType()) - && (item->getCreatorUUID() == mBuddyID)) - { - return TRUE; - } - } - return FALSE; -} - - -bool LLNameCategoryCollector::operator()( - LLInventoryCategory* cat, LLInventoryItem* item) -{ - if(cat) - { - if (!LLStringUtil::compareInsensitive(mName, cat->getName())) - { - return true; - } - } - return false; -} - -///---------------------------------------------------------------------------- -/// LLAssetIDMatches -///---------------------------------------------------------------------------- -bool LLAssetIDMatches::operator()(LLInventoryCategory* cat, LLInventoryItem* item) -{ - return (item && item->getAssetUUID() == mAssetID); -} - -///---------------------------------------------------------------------------- -/// LLLinkedItemIDMatches -///---------------------------------------------------------------------------- -bool LLLinkedItemIDMatches::operator()(LLInventoryCategory* cat, LLInventoryItem* item) -{ - return (item && - (item->getIsLinkType()) && - (item->getLinkedUUID() == mBaseItemID)); // A linked item's assetID will be the compared-to item's itemID. -} - -///---------------------------------------------------------------------------- /// Local function definitions ///---------------------------------------------------------------------------- diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h index 2a2b48ce3c..b7c1b57397 100644 --- a/indra/newview/llinventorymodel.h +++ b/indra/newview/llinventorymodel.h @@ -81,7 +81,6 @@ public: CHILDREN_MAYBE }; - // These are used a lot... typedef LLDynamicArray<LLPointer<LLViewerInventoryCategory> > cat_array_t; typedef LLDynamicArray<LLPointer<LLViewerInventoryItem> > item_array_t; typedef std::set<LLUUID> changed_items_t; @@ -368,8 +367,6 @@ public: // Utility Functions void removeItem(const LLUUID& item_id); - static void findLostItems(); - // Data about the agent's root folder and root library folder // are stored here, rather than in LLAgent where it used to be, because // gInventory is a singleton and represents the agent's inventory. @@ -501,12 +498,6 @@ private: LLUUID mLibraryRootFolderID; LLUUID mLibraryOwnerID; - static BOOL sTimelyFetchPending; - static S32 sNumFetchRetries; - static LLFrameTimer sFetchTimer; - static F32 sMinTimeBetweenFetches; - static F32 sMaxTimeBetweenFetches; - // Expected inventory cache version const static S32 sCurrentInvCacheVersion; @@ -532,41 +523,6 @@ public: // *NOTE: DEBUG functionality void dumpInventory() const; - - //////////////////////////////////////////////////////////////////////////////// - // Bulk fetch -public: - // Start and stop background breadth-first fetching of inventory contents. - // This gets triggered when performing a filter-search - void startBackgroundFetch(const LLUUID& cat_id = LLUUID::null); - static BOOL backgroundFetchActive(); - static bool isEverythingFetched(); - static void backgroundFetch(void*); // background fetch idle function - static void incrBulkFetch(S16 fetching) { sBulkFetchCount+=fetching; if (sBulkFetchCount<0) sBulkFetchCount=0; } - static void stopBackgroundFetch(); // stop fetch process - static bool isBulkFetchProcessingComplete(); - - // Add categories to a list to be fetched in bulk. - static void bulkFetch(std::string url); - - static bool libraryFetchStarted(); - static bool libraryFetchCompleted(); - static bool libraryFetchInProgress(); - - static bool myInventoryFetchStarted(); - static bool myInventoryFetchCompleted(); - static bool myInventoryFetchInProgress(); - -private: - static BOOL sMyInventoryFetchStarted; - static BOOL sLibraryFetchStarted; - static BOOL sAllFoldersFetched; - static void setAllFoldersFetched(); - - // completing the fetch once per session should be sufficient - static BOOL sBackgroundFetchActive; - static S16 sBulkFetchCount; - //////////////////////////////////////////////////////////////////////////////// // Login status public: @@ -578,234 +534,5 @@ private: // a special inventory model for the agent extern LLInventoryModel gInventory; -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// Class LLInventoryCollectFunctor -// -// Base class for LLInventoryModel::collectDescendentsIf() method -// which accepts an instance of one of these objects to use as the -// function to determine if it should be added. Derive from this class -// and override the () operator to return TRUE if you want to collect -// the category or item passed in. -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -class LLInventoryCollectFunctor -{ -public: - virtual ~LLInventoryCollectFunctor(){}; - virtual bool operator()(LLInventoryCategory* cat, LLInventoryItem* item) = 0; - - static bool itemTransferCommonlyAllowed(LLInventoryItem* item); -}; - - -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// Class LLAssetIDMatches -// -// This functor finds inventory items pointing to the specified asset -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -class LLViewerInventoryItem; - -class LLAssetIDMatches : public LLInventoryCollectFunctor -{ -public: - LLAssetIDMatches(const LLUUID& asset_id) : mAssetID(asset_id) {} - virtual ~LLAssetIDMatches() {} - bool operator()(LLInventoryCategory* cat, LLInventoryItem* item); - -protected: - LLUUID mAssetID; -}; - -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// Class LLLinkedItemIDMatches -// -// This functor finds inventory items linked to the specific inventory id. -// Assumes the inventory id is itself not a linked item. -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -class LLLinkedItemIDMatches : public LLInventoryCollectFunctor -{ -public: - LLLinkedItemIDMatches(const LLUUID& item_id) : mBaseItemID(item_id) {} - virtual ~LLLinkedItemIDMatches() {} - bool operator()(LLInventoryCategory* cat, LLInventoryItem* item); - -protected: - LLUUID mBaseItemID; -}; - -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// Class LLIsType -// -// Implementation of a LLInventoryCollectFunctor which returns TRUE if -// the type is the type passed in during construction. -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -class LLIsType : public LLInventoryCollectFunctor -{ -public: - LLIsType(LLAssetType::EType type) : mType(type) {} - virtual ~LLIsType() {} - virtual bool operator()(LLInventoryCategory* cat, - LLInventoryItem* item); -protected: - LLAssetType::EType mType; -}; - - -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// Class LLIsNotType -// -// Implementation of a LLInventoryCollectFunctor which returns FALSE if the -// type is the type passed in during construction, otherwise false. -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -class LLIsNotType : public LLInventoryCollectFunctor -{ -public: - LLIsNotType(LLAssetType::EType type) : mType(type) {} - virtual ~LLIsNotType() {} - virtual bool operator()(LLInventoryCategory* cat, - LLInventoryItem* item); -protected: - LLAssetType::EType mType; -}; - -class LLIsTypeWithPermissions : public LLInventoryCollectFunctor -{ -public: - LLIsTypeWithPermissions(LLAssetType::EType type, const PermissionBit perms, const LLUUID &agent_id, const LLUUID &group_id) - : mType(type), mPerm(perms), mAgentID(agent_id), mGroupID(group_id) {} - virtual ~LLIsTypeWithPermissions() {} - virtual bool operator()(LLInventoryCategory* cat, - LLInventoryItem* item); -protected: - LLAssetType::EType mType; - PermissionBit mPerm; - LLUUID mAgentID; - LLUUID mGroupID; -}; - -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// Class LLIsClone -// -// Implementation of a LLInventoryCollectFunctor which returns TRUE if -// the object is a clone of the item passed in during -// construction. -// -// *NOTE: Since clone information is determined based off of asset id -// (or creator with calling cards), if the id is NULL, it has no -// clones - even itself. -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -//class LLIsClone : public LLInventoryCollectFunctor -//{ -//public: -// LLIsClone(LLViewerInventoryItem* item) : mItem(item) {} -// virtual ~LLIsClone() {} -// virtual bool operator()(LLViewerInventoryCategory* cat, -// LLViewerInventoryItem* item); -//protected: -// LLPointer<LLViewerInventoryItem> mItem; -//}; - -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// Class LLBuddyCollector -// -// Simple class that collects calling cards that are not null, and not -// the agent. Duplicates are possible. -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -class LLBuddyCollector : public LLInventoryCollectFunctor -{ -public: - LLBuddyCollector() {} - virtual ~LLBuddyCollector() {} - virtual bool operator()(LLInventoryCategory* cat, - LLInventoryItem* item); -}; - -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// Class LLUniqueBuddyCollector -// -// Simple class that collects calling cards that are not null, and not -// the agent. Duplicates are discarded. -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -class LLUniqueBuddyCollector : public LLInventoryCollectFunctor -{ -public: - LLUniqueBuddyCollector() {} - virtual ~LLUniqueBuddyCollector() {} - virtual bool operator()(LLInventoryCategory* cat, - LLInventoryItem* item); - -protected: - std::set<LLUUID> mSeen; -}; - -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// Class LLParticularBuddyCollector -// -// Simple class that collects calling cards that match a particular uuid -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -class LLParticularBuddyCollector : public LLInventoryCollectFunctor -{ -public: - LLParticularBuddyCollector(const LLUUID& id) : mBuddyID(id) {} - virtual ~LLParticularBuddyCollector() {} - virtual bool operator()(LLInventoryCategory* cat, - LLInventoryItem* item); -protected: - LLUUID mBuddyID; -}; - - -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// Class LLNameCategoryCollector -// -// Collects categories based on case-insensitive match of prefix -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -class LLNameCategoryCollector : public LLInventoryCollectFunctor -{ -public: - LLNameCategoryCollector(const std::string& name) : mName(name) {} - virtual ~LLNameCategoryCollector() {} - virtual bool operator()(LLInventoryCategory* cat, - LLInventoryItem* item); -protected: - std::string mName; -}; - -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// Class LLFindCOFValidItems -// -// Collects items that can be legitimately linked to in the COF. -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -class LLFindCOFValidItems : public LLInventoryCollectFunctor -{ -public: - LLFindCOFValidItems() {} - virtual ~LLFindCOFValidItems() {} - virtual bool operator()(LLInventoryCategory* cat, - LLInventoryItem* item); - -}; - -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// Class LLFindWearables -// -// Collects wearables based on item type. -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -class LLFindWearables : public LLInventoryCollectFunctor -{ -public: - LLFindWearables() {} - virtual ~LLFindWearables() {} - virtual bool operator()(LLInventoryCategory* cat, - LLInventoryItem* item); -}; - #endif // LL_LLINVENTORYMODEL_H diff --git a/indra/newview/llinventorymodelbackgroundfetch.cpp b/indra/newview/llinventorymodelbackgroundfetch.cpp new file mode 100644 index 0000000000..72e5c0dd75 --- /dev/null +++ b/indra/newview/llinventorymodelbackgroundfetch.cpp @@ -0,0 +1,603 @@ +/** + * @file llinventorymodel.cpp + * @brief Implementation of the inventory model used to track agent inventory. + * + * $LicenseInfo:firstyear=2002&license=viewergpl$ + * + * Copyright (c) 2002-2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" +#include "llinventorymodelbackgroundfetch.h" + +// Seraph clean this up +#include "llagent.h" +#include "llinventorypanel.h" +#include "llviewercontrol.h" +#include "llviewermessage.h" +#include "llviewerwindow.h" +#include "llappviewer.h" +#include "llviewerregion.h" +#include "llcallbacklist.h" + +const F32 MAX_TIME_FOR_SINGLE_FETCH = 10.f; +const S32 MAX_FETCH_RETRIES = 10; + +// RN: for some reason, using std::queue in the header file confuses the compiler which thinks it's an xmlrpc_queue +static std::deque<LLUUID> sFetchQueue; +bool fetchQueueContainsNoDescendentsOf(const LLUUID& cat_id) +{ + for (std::deque<LLUUID>::iterator it = sFetchQueue.begin(); + it != sFetchQueue.end(); ++it) + { + const LLUUID& fetch_id = *it; + if (gInventory.isObjectDescendentOf(fetch_id, cat_id)) + return false; + } + return true; +} + + +LLInventoryModelBackgroundFetch::LLInventoryModelBackgroundFetch() : + mBackgroundFetchActive(FALSE), + mAllFoldersFetched(FALSE), + mInventoryFetchStarted(FALSE), + mLibraryFetchStarted(FALSE), + mNumFetchRetries(0), + mMinTimeBetweenFetches(0.3f), + mMaxTimeBetweenFetches(10.f), + mTimelyFetchPending(FALSE), + mBulkFetchCount(0) +{ +} + +LLInventoryModelBackgroundFetch::~LLInventoryModelBackgroundFetch() +{ +} + +bool LLInventoryModelBackgroundFetch::isBulkFetchProcessingComplete() +{ + return sFetchQueue.empty() && mBulkFetchCount<=0; +} + +bool LLInventoryModelBackgroundFetch::libraryFetchStarted() +{ + return mLibraryFetchStarted; +} + +bool LLInventoryModelBackgroundFetch::libraryFetchCompleted() +{ + return libraryFetchStarted() && fetchQueueContainsNoDescendentsOf(gInventory.getLibraryRootFolderID()); +} + +bool LLInventoryModelBackgroundFetch::libraryFetchInProgress() +{ + return libraryFetchStarted() && !libraryFetchCompleted(); +} + +bool LLInventoryModelBackgroundFetch::inventoryFetchStarted() +{ + return mInventoryFetchStarted; +} + +bool LLInventoryModelBackgroundFetch::inventoryFetchCompleted() +{ + return inventoryFetchStarted() && fetchQueueContainsNoDescendentsOf(gInventory.getRootFolderID()); +} + +bool LLInventoryModelBackgroundFetch::inventoryFetchInProgress() +{ + return inventoryFetchStarted() && !inventoryFetchCompleted(); +} + +bool LLInventoryModelBackgroundFetch::isEverythingFetched() +{ + return mAllFoldersFetched; +} + +BOOL LLInventoryModelBackgroundFetch::backgroundFetchActive() +{ + return mBackgroundFetchActive; +} + +void LLInventoryModelBackgroundFetch::start(const LLUUID& cat_id) +{ + if (!mAllFoldersFetched) + { + mBackgroundFetchActive = TRUE; + if (cat_id.isNull()) + { + if (!mInventoryFetchStarted) + { + mInventoryFetchStarted = TRUE; + sFetchQueue.push_back(gInventory.getRootFolderID()); + gIdleCallbacks.addFunction(&LLInventoryModelBackgroundFetch::backgroundFetchCB, NULL); + } + if (!mLibraryFetchStarted) + { + mLibraryFetchStarted = TRUE; + sFetchQueue.push_back(gInventory.getLibraryRootFolderID()); + gIdleCallbacks.addFunction(&LLInventoryModelBackgroundFetch::backgroundFetchCB, NULL); + } + } + else + { + // specific folder requests go to front of queue + if (sFetchQueue.empty() || sFetchQueue.front() != cat_id) + { + sFetchQueue.push_front(cat_id); + gIdleCallbacks.addFunction(&LLInventoryModelBackgroundFetch::backgroundFetchCB, NULL); + } + if (cat_id == gInventory.getLibraryRootFolderID()) + { + mLibraryFetchStarted = TRUE; + } + if (cat_id == gInventory.getRootFolderID()) + { + mInventoryFetchStarted = TRUE; + } + } + } +} + +void LLInventoryModelBackgroundFetch::findLostItems() +{ + mBackgroundFetchActive = TRUE; + sFetchQueue.push_back(LLUUID::null); + gIdleCallbacks.addFunction(&LLInventoryModelBackgroundFetch::backgroundFetchCB, NULL); +} + +void LLInventoryModelBackgroundFetch::stopBackgroundFetch() +{ + if (mBackgroundFetchActive) + { + mBackgroundFetchActive = FALSE; + gIdleCallbacks.deleteFunction(&LLInventoryModelBackgroundFetch::backgroundFetchCB, NULL); + mBulkFetchCount=0; + mMinTimeBetweenFetches=0.0f; + } +} + +void LLInventoryModelBackgroundFetch::setAllFoldersFetched() +{ + if (mInventoryFetchStarted && + mLibraryFetchStarted) + { + mAllFoldersFetched = TRUE; + } + stopBackgroundFetch(); +} + +void LLInventoryModelBackgroundFetch::backgroundFetchCB(void *) +{ + LLInventoryModelBackgroundFetch::instance().backgroundFetch(); +} + +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. + std::string url = gAgent.getRegion()->getCapability("WebFetchInventoryDescendents"); + if (!url.empty()) + { + bulkFetch(url); + return; + } + + //DEPRECATED OLD CODE FOLLOWS. + // no more categories to fetch, stop fetch process + if (sFetchQueue.empty()) + { + llinfos << "Inventory fetch completed" << llendl; + + setAllFoldersFetched(); + return; + } + + F32 fast_fetch_time = lerp(mMinTimeBetweenFetches, mMaxTimeBetweenFetches, 0.1f); + F32 slow_fetch_time = lerp(mMinTimeBetweenFetches, mMaxTimeBetweenFetches, 0.5f); + if (mTimelyFetchPending && mFetchTimer.getElapsedTimeF32() > slow_fetch_time) + { + // 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 + mTimelyFetchPending = FALSE; + } + + while(1) + { + if (sFetchQueue.empty()) + { + break; + } + + if(gDisconnected) + { + // just bail if we are disconnected. + break; + } + + LLViewerInventoryCategory* cat = gInventory.getCategory(sFetchQueue.front()); + + // category has been deleted, remove from queue. + if (!cat) + { + sFetchQueue.pop_front(); + continue; + } + + 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 + if (cat->fetchDescendents()) + { + mFetchTimer.reset(); + mTimelyFetchPending = TRUE; + } + else + { + // The catagory also tracks if it has expired and here it says it hasn't + // yet. Get out of here because nothing is going to happen until we + // update the timers. + break; + } + } + // do I have all my children? + else if (gInventory.isCategoryComplete(sFetchQueue.front())) + { + // finished with this category, remove from queue + sFetchQueue.pop_front(); + + // add all children to queue + LLInventoryModel::cat_array_t* categories; + LLInventoryModel::item_array_t* items; + gInventory.getDirectDescendentsOf(cat->getUUID(), categories, items); + for (LLInventoryModel::cat_array_t::const_iterator it = categories->begin(); + it != categories->end(); + ++it) + { + sFetchQueue.push_back((*it)->getUUID()); + } + + // we received a response in less than the fast time + if (mTimelyFetchPending && mFetchTimer.getElapsedTimeF32() < fast_fetch_time) + { + // 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; + } + + mTimelyFetchPending = FALSE; + continue; + } + else if (mFetchTimer.getElapsedTimeF32() > mMaxTimeBetweenFetches) + { + // received first packet, but our num descendants does not match db's num descendants + // so try again later + LLUUID fetch_id = sFetchQueue.front(); + sFetchQueue.pop_front(); + + if (mNumFetchRetries++ < MAX_FETCH_RETRIES) + { + // push on back of queue + sFetchQueue.push_back(fetch_id); + } + mTimelyFetchPending = FALSE; + mFetchTimer.reset(); + break; + } + + // not enough time has elapsed to do a new fetch + break; + } + } +} + +void LLInventoryModelBackgroundFetch::incrBulkFetch(S16 fetching) +{ + mBulkFetchCount += fetching; + if (mBulkFetchCount < 0) + { + mBulkFetchCount = 0; + } +} + + +class LLInventoryModelFetchDescendentsResponder: public LLHTTPClient::Responder +{ + public: + LLInventoryModelFetchDescendentsResponder(const LLSD& request_sd) : mRequestSD(request_sd) {}; + //LLInventoryModelFetchDescendentsResponder() {}; + void result(const LLSD& content); + void error(U32 status, const std::string& reason); + public: + typedef std::vector<LLViewerInventoryCategory*> folder_ref_t; + protected: + LLSD mRequestSD; +}; + +//If we get back a normal response, handle it here +void LLInventoryModelFetchDescendentsResponder::result(const LLSD& content) +{ + if (content.has("folders")) + { + + for(LLSD::array_const_iterator folder_it = content["folders"].beginArray(); + folder_it != content["folders"].endArray(); + ++folder_it) + { + LLSD folder_sd = *folder_it; + + + //LLUUID agent_id = folder_sd["agent_id"]; + + //if(agent_id != gAgent.getID()) //This should never happen. + //{ + // llwarns << "Got a UpdateInventoryItem for the wrong agent." + // << llendl; + // break; + //} + + LLUUID parent_id = folder_sd["folder_id"]; + LLUUID owner_id = folder_sd["owner_id"]; + S32 version = (S32)folder_sd["version"].asInteger(); + S32 descendents = (S32)folder_sd["descendents"].asInteger(); + LLPointer<LLViewerInventoryCategory> tcategory = new LLViewerInventoryCategory(owner_id); + + if (parent_id.isNull()) + { + LLPointer<LLViewerInventoryItem> titem = new LLViewerInventoryItem; + for(LLSD::array_const_iterator item_it = folder_sd["items"].beginArray(); + item_it != folder_sd["items"].endArray(); + ++item_it) + { + const LLUUID lost_uuid = gInventory.findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND); + if (lost_uuid.notNull()) + { + LLSD item = *item_it; + titem->unpackMessage(item); + + LLInventoryModel::update_list_t update; + LLInventoryModel::LLCategoryUpdate new_folder(lost_uuid, 1); + update.push_back(new_folder); + gInventory.accountForUpdate(update); + + titem->setParent(lost_uuid); + titem->updateParentOnServer(FALSE); + gInventory.updateItem(titem); + gInventory.notifyObservers("fetchDescendents"); + + } + } + } + + LLViewerInventoryCategory* pcat = gInventory.getCategory(parent_id); + if (!pcat) + { + continue; + } + + for(LLSD::array_const_iterator category_it = folder_sd["categories"].beginArray(); + category_it != folder_sd["categories"].endArray(); + ++category_it) + { + LLSD category = *category_it; + tcategory->fromLLSD(category); + + if (LLInventoryModelBackgroundFetch::instance().inventoryFetchStarted() || + LLInventoryModelBackgroundFetch::instance().libraryFetchStarted()) + { + sFetchQueue.push_back(tcategory->getUUID()); + } + else if ( !gInventory.isCategoryComplete(tcategory->getUUID()) ) + { + gInventory.updateCategory(tcategory); + } + + } + LLPointer<LLViewerInventoryItem> titem = new LLViewerInventoryItem; + for(LLSD::array_const_iterator item_it = folder_sd["items"].beginArray(); + item_it != folder_sd["items"].endArray(); + ++item_it) + { + LLSD item = *item_it; + titem->unpackMessage(item); + + gInventory.updateItem(titem); + } + + // set version and descendentcount according to message. + LLViewerInventoryCategory* cat = gInventory.getCategory(parent_id); + if(cat) + { + cat->setVersion(version); + cat->setDescendentCount(descendents); + cat->determineFolderType(); + } + + } + } + + if (content.has("bad_folders")) + { + for(LLSD::array_const_iterator folder_it = content["bad_folders"].beginArray(); + folder_it != content["bad_folders"].endArray(); + ++folder_it) + { + LLSD folder_sd = *folder_it; + + //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; + } + } + + LLInventoryModelBackgroundFetch::instance().incrBulkFetch(-1); + + if (LLInventoryModelBackgroundFetch::instance().isBulkFetchProcessingComplete()) + { + llinfos << "Inventory fetch completed" << llendl; + LLInventoryModelBackgroundFetch::instance().setAllFoldersFetched(); + } + + gInventory.notifyObservers("fetchDescendents"); +} + +//If we get back an error (not found, etc...), handle it here +void LLInventoryModelFetchDescendentsResponder::error(U32 status, const std::string& reason) +{ + llinfos << "LLInventoryModelFetchDescendentsResponder::error " + << status << ": " << reason << llendl; + + LLInventoryModelBackgroundFetch::instance().incrBulkFetch(-1); + + if (status==499) //timed out. Let's be awesome! + { + for(LLSD::array_const_iterator folder_it = mRequestSD["folders"].beginArray(); + folder_it != mRequestSD["folders"].endArray(); + ++folder_it) + { + LLSD folder_sd = *folder_it; + LLUUID folder_id = folder_sd["folder_id"]; + sFetchQueue.push_front(folder_id); + } + } + else + { + if (LLInventoryModelBackgroundFetch::instance().isBulkFetchProcessingComplete()) + { + LLInventoryModelBackgroundFetch::instance().setAllFoldersFetched(); + } + } + gInventory.notifyObservers("fetchDescendents"); +} + +//static Bundle up a bunch of requests to send all at once. +void LLInventoryModelBackgroundFetch::bulkFetch(std::string url) +{ + //Background fetch is called from gIdleCallbacks in a loop until background fetch is stopped. + //If there are items in sFetchQueue, we want to check the time since the last bulkFetch was + //sent. If it exceeds our retry time, go ahead and fire off another batch. + //Stopbackgroundfetch will be run from the Responder instead of here. + + S16 max_concurrent_fetches=8; + F32 new_min_time = 0.5f; //HACK! Clean this up when old code goes away entirely. + if (mMinTimeBetweenFetches < new_min_time) + { + mMinTimeBetweenFetches=new_min_time; //HACK! See above. + } + + if (gDisconnected || + (mBulkFetchCount > max_concurrent_fetches) || + (mFetchTimer.getElapsedTimeF32() < mMinTimeBetweenFetches)) + { + return; // just bail if we are disconnected. + } + + U32 folder_count=0; + U32 max_batch_size=5; + + U32 sort_order = gSavedSettings.getU32(LLInventoryPanel::DEFAULT_SORT_ORDER) & 0x1; + + LLSD body; + LLSD body_lib; + while (!(sFetchQueue.empty()) && (folder_count < max_batch_size)) + { + if (sFetchQueue.front().isNull()) //DEV-17797 + { + LLSD folder_sd; + folder_sd["folder_id"] = LLUUID::null.asString(); + folder_sd["owner_id"] = gAgent.getID(); + folder_sd["sort_order"] = (LLSD::Integer)sort_order; + folder_sd["fetch_folders"] = (LLSD::Boolean)FALSE; + folder_sd["fetch_items"] = (LLSD::Boolean)TRUE; + body["folders"].append(folder_sd); + folder_count++; + } + else + { + LLViewerInventoryCategory* cat = gInventory.getCategory(sFetchQueue.front()); + + if (cat) + { + if (LLViewerInventoryCategory::VERSION_UNKNOWN == cat->getVersion()) + { + LLSD folder_sd; + folder_sd["folder_id"] = cat->getUUID(); + folder_sd["owner_id"] = cat->getOwnerID(); + folder_sd["sort_order"] = (LLSD::Integer)sort_order; + folder_sd["fetch_folders"] = TRUE; //(LLSD::Boolean)sFullFetchStarted; + folder_sd["fetch_items"] = (LLSD::Boolean)TRUE; + + if (ALEXANDRIA_LINDEN_ID == cat->getOwnerID()) + body_lib["folders"].append(folder_sd); + else + body["folders"].append(folder_sd); + folder_count++; + } + if (mInventoryFetchStarted || mLibraryFetchStarted) + { //Already have this folder but append child folders to list. + // add all children to queue + LLInventoryModel::cat_array_t* categories; + LLInventoryModel::item_array_t* items; + gInventory.getDirectDescendentsOf(cat->getUUID(), categories, items); + for (LLInventoryModel::cat_array_t::const_iterator it = categories->begin(); + it != categories->end(); + ++it) + { + sFetchQueue.push_back((*it)->getUUID()); + } + } + } + } + sFetchQueue.pop_front(); + } + + if (folder_count > 0) + { + mBulkFetchCount++; + if (body["folders"].size()) + { + LLHTTPClient::post(url, body, new LLInventoryModelFetchDescendentsResponder(body),300.0); + } + if (body_lib["folders"].size()) + { + std::string url_lib = gAgent.getRegion()->getCapability("FetchLibDescendents"); + LLHTTPClient::post(url_lib, body_lib, new LLInventoryModelFetchDescendentsResponder(body_lib),300.0); + } + mFetchTimer.reset(); + } + else if (isBulkFetchProcessingComplete()) + { + setAllFoldersFetched(); + } +} diff --git a/indra/newview/llinventorymodelbackgroundfetch.h b/indra/newview/llinventorymodelbackgroundfetch.h new file mode 100644 index 0000000000..94606fae23 --- /dev/null +++ b/indra/newview/llinventorymodelbackgroundfetch.h @@ -0,0 +1,119 @@ +/** + * @file llinventorymodelbackgroundfetch.h + * @brief LLInventoryModelBackgroundFetch class header file + * + * $LicenseInfo:firstyear=2002&license=viewergpl$ + * + * Copyright (c) 2002-2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#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 "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. +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +class LLInventoryModelBackgroundFetch : public LLSingleton<LLInventoryModelBackgroundFetch> +{ +public: + LLInventoryModelBackgroundFetch(); + ~LLInventoryModelBackgroundFetch(); + + // Start and stop background breadth-first fetching of inventory contents. + // This gets triggered when performing a filter-search + void start(const LLUUID& cat_id = LLUUID::null); + 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 libraryFetchStarted(); + bool libraryFetchCompleted(); + bool libraryFetchInProgress(); + + bool inventoryFetchStarted(); + bool inventoryFetchCompleted(); + bool inventoryFetchInProgress(); + void findLostItems(); + + void setAllFoldersFetched(); + + static void backgroundFetchCB(void*); // background fetch idle function + void backgroundFetch(); + +private: + BOOL mInventoryFetchStarted; + BOOL mLibraryFetchStarted; + BOOL mAllFoldersFetched; + + // completing the fetch once per session should be sufficient + BOOL mBackgroundFetchActive; + S16 mBulkFetchCount; + BOOL mTimelyFetchPending; + S32 mNumFetchRetries; + + LLFrameTimer mFetchTimer; + F32 mMinTimeBetweenFetches; + F32 mMaxTimeBetweenFetches; + +}; + +#endif // LL_LLINVENTORYMODELBACKGROUNDFETCH_H + diff --git a/indra/newview/llinventoryobserver.cpp b/indra/newview/llinventoryobserver.cpp index 2fb8aea4e9..9913be2e88 100644 --- a/indra/newview/llinventoryobserver.cpp +++ b/indra/newview/llinventoryobserver.cpp @@ -54,7 +54,6 @@ #include "llappviewer.h" #include "lldbstrings.h" #include "llviewerstats.h" -#include "llmutelist.h" #include "llnotificationsutil.h" #include "llcallbacklist.h" #include "llpreview.h" @@ -78,7 +77,7 @@ void LLInventoryCompletionObserver::changed(U32 mask) // appropriate. if(!mIncomplete.empty()) { - for(item_ref_t::iterator it = mIncomplete.begin(); it < mIncomplete.end(); ) + for(uuid_vec_t::iterator it = mIncomplete.begin(); it < mIncomplete.end(); ) { LLViewerInventoryItem* item = gInventory.getItem(*it); if(!item) @@ -263,7 +262,7 @@ void LLInventoryFetchObserver::fetchItems( // virtual void LLInventoryFetchDescendentsObserver::changed(U32 mask) { - for(folder_ref_t::iterator it = mIncompleteFolders.begin(); it < mIncompleteFolders.end();) + for(uuid_vec_t::iterator it = mIncompleteFolders.begin(); it < mIncompleteFolders.end();) { LLViewerInventoryCategory* cat = gInventory.getCategory(*it); if(!cat) @@ -286,9 +285,9 @@ void LLInventoryFetchDescendentsObserver::changed(U32 mask) } void LLInventoryFetchDescendentsObserver::fetchDescendents( - const folder_ref_t& ids) + const uuid_vec_t& ids) { - for(folder_ref_t::const_iterator it = ids.begin(); it != ids.end(); ++it) + for(uuid_vec_t::const_iterator it = ids.begin(); it != ids.end(); ++it) { LLViewerInventoryCategory* cat = gInventory.getCategory(*it); if(!cat) continue; @@ -356,7 +355,7 @@ void LLInventoryFetchComboObserver::changed(U32 mask) { if(!mIncompleteItems.empty()) { - for(item_ref_t::iterator it = mIncompleteItems.begin(); it < mIncompleteItems.end(); ) + for(uuid_vec_t::iterator it = mIncompleteItems.begin(); it < mIncompleteItems.end(); ) { LLViewerInventoryItem* item = gInventory.getItem(*it); if(!item) @@ -365,7 +364,7 @@ void LLInventoryFetchComboObserver::changed(U32 mask) continue; } if(item->isComplete()) - { + { mCompleteItems.push_back(*it); it = mIncompleteItems.erase(it); continue; @@ -375,7 +374,7 @@ void LLInventoryFetchComboObserver::changed(U32 mask) } if(!mIncompleteFolders.empty()) { - for(folder_ref_t::iterator it = mIncompleteFolders.begin(); it < mIncompleteFolders.end();) + for(uuid_vec_t::iterator it = mIncompleteFolders.begin(); it < mIncompleteFolders.end();) { LLViewerInventoryCategory* cat = gInventory.getCategory(*it); if(!cat) @@ -400,11 +399,11 @@ void LLInventoryFetchComboObserver::changed(U32 mask) } void LLInventoryFetchComboObserver::fetch( - const folder_ref_t& folder_ids, - const item_ref_t& item_ids) + const uuid_vec_t& folder_ids, + const uuid_vec_t& item_ids) { lldebugs << "LLInventoryFetchComboObserver::fetch()" << llendl; - for(folder_ref_t::const_iterator fit = folder_ids.begin(); fit != folder_ids.end(); ++fit) + for(uuid_vec_t::const_iterator fit = folder_ids.begin(); fit != folder_ids.end(); ++fit) { LLViewerInventoryCategory* cat = gInventory.getCategory(*fit); if(!cat) continue; @@ -427,7 +426,7 @@ void LLInventoryFetchComboObserver::fetch( // have to fetch it individually. LLSD items_llsd; LLUUID owner_id; - for(item_ref_t::const_iterator iit = item_ids.begin(); iit != item_ids.end(); ++iit) + for(uuid_vec_t::const_iterator iit = item_ids.begin(); iit != item_ids.end(); ++iit) { LLViewerInventoryItem* item = gInventory.getItem(*iit); if(!item) @@ -565,8 +564,8 @@ void LLInventoryTransactionObserver::changed(U32 mask) if(id == mTransactionID) { // woo hoo, we found it - folder_ref_t folders; - item_ref_t items; + uuid_vec_t folders; + uuid_vec_t items; S32 count; count = msg->getNumberOfBlocksFast(_PREHASH_FolderData); S32 i; diff --git a/indra/newview/llinventoryobserver.h b/indra/newview/llinventoryobserver.h index d6dded52d4..e1c8bd3faf 100644 --- a/indra/newview/llinventoryobserver.h +++ b/indra/newview/llinventoryobserver.h @@ -93,9 +93,8 @@ public: protected: virtual void done() = 0; - typedef std::vector<LLUUID> item_ref_t; - item_ref_t mComplete; - item_ref_t mIncomplete; + uuid_vec_t mComplete; + uuid_vec_t mIncomplete; }; @@ -113,7 +112,7 @@ public: LLInventoryFetchObserver(bool retry_if_missing = false): mRetryIfMissing(retry_if_missing) {} virtual void changed(U32 mask); - typedef std::vector<LLUUID> item_ref_t; + typedef uuid_vec_t item_ref_t; bool isEverythingComplete() const; void fetchItems(const item_ref_t& ids); @@ -138,15 +137,14 @@ public: LLInventoryFetchDescendentsObserver() {} virtual void changed(U32 mask); - typedef std::vector<LLUUID> folder_ref_t; - void fetchDescendents(const folder_ref_t& ids); + void fetchDescendents(const uuid_vec_t& ids); bool isEverythingComplete() const; virtual void done() = 0; protected: bool isComplete(LLViewerInventoryCategory* cat); - folder_ref_t mIncompleteFolders; - folder_ref_t mCompleteFolders; + uuid_vec_t mIncompleteFolders; + uuid_vec_t mCompleteFolders; }; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -163,18 +161,16 @@ public: LLInventoryFetchComboObserver() : mDone(false) {} virtual void changed(U32 mask); - typedef std::vector<LLUUID> folder_ref_t; - typedef std::vector<LLUUID> item_ref_t; - void fetch(const folder_ref_t& folder_ids, const item_ref_t& item_ids); + void fetch(const uuid_vec_t& folder_ids, const uuid_vec_t& item_ids); virtual void done() = 0; protected: bool mDone; - folder_ref_t mCompleteFolders; - folder_ref_t mIncompleteFolders; - item_ref_t mCompleteItems; - item_ref_t mIncompleteItems; + uuid_vec_t mCompleteFolders; + uuid_vec_t mIncompleteFolders; + uuid_vec_t mCompleteItems; + uuid_vec_t mIncompleteItems; }; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -197,7 +193,7 @@ public: protected: virtual void done() = 0; - typedef std::vector<LLUUID> item_ref_t; + typedef uuid_vec_t item_ref_t; item_ref_t mExist; item_ref_t mMIA; }; @@ -221,8 +217,7 @@ public: protected: virtual void done() = 0; - typedef std::vector<LLUUID> item_ref_t; - item_ref_t mAdded; + uuid_vec_t mAdded; }; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -242,9 +237,7 @@ public: virtual void changed(U32 mask); protected: - typedef std::vector<LLUUID> folder_ref_t; - typedef std::vector<LLUUID> item_ref_t; - virtual void done(const folder_ref_t& folders, const item_ref_t& items) = 0; + virtual void done(const uuid_vec_t& folders, const uuid_vec_t& items) = 0; LLTransactionID mTransactionID; }; diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index ec83a1fd6d..83c2d62ee8 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -43,6 +43,8 @@ #include "llimfloater.h" #include "llimview.h" #include "llinventorybridge.h" +#include "llinventoryfunctions.h" +#include "llinventorymodelbackgroundfetch.h" #include "llsidepanelinventory.h" #include "llsidetray.h" #include "llscrollcontainer.h" @@ -293,9 +295,6 @@ void LLInventoryPanel::modelChanged(U32 mask) bridge->clearDisplayName(); view_item->refresh(); - - // Set the new tooltip with the new display name. - view_item->setToolTip(bridge->getDisplayName()); } } } @@ -646,7 +645,7 @@ BOOL LLInventoryPanel::handleHover(S32 x, S32 y, MASK mask) if(handled) { ECursorType cursor = getWindow()->getCursor(); - if (LLInventoryModel::backgroundFetchActive() && cursor == UI_CURSOR_ARROW) + if (LLInventoryModelBackgroundFetch::instance().backgroundFetchActive() && cursor == UI_CURSOR_ARROW) { // replace arrow cursor with arrow and hourglass cursor getWindow()->setCursor(UI_CURSOR_WORKING); @@ -726,7 +725,7 @@ void LLInventoryPanel::setSelection(const LLUUID& obj_id, BOOL take_keyboard_foc { // Don't select objects in COF (e.g. to prevent refocus when items are worn). const LLInventoryObject *obj = gInventory.getObject(obj_id); - if (obj && obj->getParentUUID() == LLAppearanceManager::instance().getCOF()) + if (obj && obj->getParentUUID() == LLAppearanceMgr::instance().getCOF()) { return; } @@ -874,10 +873,9 @@ bool LLInventoryPanel::attachObject(const LLSD& userdata) mFolders->getSelectionList(selected_items); std::string joint_name = userdata.asString(); - LLVOAvatar *avatarp = static_cast<LLVOAvatar*>(gAgent.getAvatarObject()); LLViewerJointAttachment* attachmentp = NULL; - for (LLVOAvatar::attachment_map_t::iterator iter = avatarp->mAttachmentPoints.begin(); - iter != avatarp->mAttachmentPoints.end(); ) + for (LLVOAvatar::attachment_map_t::iterator iter = gAgentAvatarp->mAttachmentPoints.begin(); + iter != gAgentAvatarp->mAttachmentPoints.end(); ) { LLVOAvatar::attachment_map_t::iterator curiter = iter++; LLViewerJointAttachment* attachment = curiter->second; diff --git a/indra/newview/lljoystickbutton.cpp b/indra/newview/lljoystickbutton.cpp index 2cc5c8335d..9e1dc3a4b0 100644 --- a/indra/newview/lljoystickbutton.cpp +++ b/indra/newview/lljoystickbutton.cpp @@ -42,6 +42,7 @@ // Project includes #include "llui.h" #include "llagent.h" +#include "llagentcamera.h" #include "llviewertexture.h" #include "llviewertexturelist.h" #include "llviewerwindow.h" @@ -482,25 +483,25 @@ void LLJoystickCameraRotate::onHeldDown() // left-right rotation if (dx > mHorizSlopNear) { - gAgent.unlockView(); - gAgent.setOrbitLeftKey(getOrbitRate()); + gAgentCamera.unlockView(); + gAgentCamera.setOrbitLeftKey(getOrbitRate()); } else if (dx < -mHorizSlopNear) { - gAgent.unlockView(); - gAgent.setOrbitRightKey(getOrbitRate()); + gAgentCamera.unlockView(); + gAgentCamera.setOrbitRightKey(getOrbitRate()); } // over/under rotation if (dy > mVertSlopNear) { - gAgent.unlockView(); - gAgent.setOrbitUpKey(getOrbitRate()); + gAgentCamera.unlockView(); + gAgentCamera.setOrbitUpKey(getOrbitRate()); } else if (dy < -mVertSlopNear) { - gAgent.unlockView(); - gAgent.setOrbitDownKey(getOrbitRate()); + gAgentCamera.unlockView(); + gAgentCamera.setOrbitDownKey(getOrbitRate()); } } @@ -625,25 +626,25 @@ void LLJoystickCameraTrack::onHeldDown() if (dx > mVertSlopNear) { - gAgent.unlockView(); - gAgent.setPanRightKey(getOrbitRate()); + gAgentCamera.unlockView(); + gAgentCamera.setPanRightKey(getOrbitRate()); } else if (dx < -mVertSlopNear) { - gAgent.unlockView(); - gAgent.setPanLeftKey(getOrbitRate()); + gAgentCamera.unlockView(); + gAgentCamera.setPanLeftKey(getOrbitRate()); } // over/under rotation if (dy > mVertSlopNear) { - gAgent.unlockView(); - gAgent.setPanUpKey(getOrbitRate()); + gAgentCamera.unlockView(); + gAgentCamera.setPanUpKey(getOrbitRate()); } else if (dy < -mVertSlopNear) { - gAgent.unlockView(); - gAgent.setPanDownKey(getOrbitRate()); + gAgentCamera.unlockView(); + gAgentCamera.setPanDownKey(getOrbitRate()); } } @@ -692,26 +693,26 @@ void LLJoystickCameraZoom::onHeldDown() if (dy > mVertSlopFar) { // Zoom in fast - gAgent.unlockView(); - gAgent.setOrbitInKey(FAST_RATE); + gAgentCamera.unlockView(); + gAgentCamera.setOrbitInKey(FAST_RATE); } else if (dy > mVertSlopNear) { // Zoom in slow - gAgent.unlockView(); - gAgent.setOrbitInKey(getOrbitRate()); + gAgentCamera.unlockView(); + gAgentCamera.setOrbitInKey(getOrbitRate()); } else if (dy < -mVertSlopFar) { // Zoom out fast - gAgent.unlockView(); - gAgent.setOrbitOutKey(FAST_RATE); + gAgentCamera.unlockView(); + gAgentCamera.setOrbitOutKey(FAST_RATE); } else if (dy < -mVertSlopNear) { // Zoom out slow - gAgent.unlockView(); - gAgent.setOrbitOutKey(getOrbitRate()); + gAgentCamera.unlockView(); + gAgentCamera.setOrbitOutKey(getOrbitRate()); } } diff --git a/indra/newview/lllandmarkactions.cpp b/indra/newview/lllandmarkactions.cpp index f25d2ef574..7336efb62a 100644 --- a/indra/newview/lllandmarkactions.cpp +++ b/indra/newview/lllandmarkactions.cpp @@ -36,6 +36,7 @@ #include "roles_constants.h" #include "llinventory.h" +#include "llinventoryfunctions.h" #include "lllandmark.h" #include "llparcel.h" #include "llregionhandle.h" diff --git a/indra/newview/lllocationinputctrl.cpp b/indra/newview/lllocationinputctrl.cpp index 4100e2fc61..ba50287ebd 100644 --- a/indra/newview/lllocationinputctrl.cpp +++ b/indra/newview/lllocationinputctrl.cpp @@ -108,7 +108,7 @@ public: private: /*virtual*/ void done() { - std::vector<LLUUID>::const_iterator it = mAdded.begin(), end = mAdded.end(); + uuid_vec_t::const_iterator it = mAdded.begin(), end = mAdded.end(); for(; it != end; ++it) { LLInventoryItem* item = gInventory.getItem(*it); diff --git a/indra/newview/llmanip.cpp b/indra/newview/llmanip.cpp index a96240e31c..957e88960d 100644 --- a/indra/newview/llmanip.cpp +++ b/indra/newview/llmanip.cpp @@ -43,6 +43,7 @@ #include "llviewertexturelist.h" #include "llagent.h" +#include "llagentcamera.h" #include "llviewercontrol.h" #include "lldrawable.h" #include "llfontgl.h" @@ -180,7 +181,7 @@ F32 LLManip::getSubdivisionLevel(const LLVector3 &reference_point, const LLVecto LLVector3 cam_to_reference; if (mObjectSelection->getSelectType() == SELECT_TYPE_HUD) { - cam_to_reference = LLVector3(1.f / gAgent.mHUDCurZoom, 0.f, 0.f); + cam_to_reference = LLVector3(1.f / gAgentCamera.mHUDCurZoom, 0.f, 0.f); } else { @@ -265,8 +266,8 @@ BOOL LLManip::getMousePointOnPlaneGlobal(LLVector3d& point, S32 x, S32 y, LLVect if (mObjectSelection->getSelectType() == SELECT_TYPE_HUD) { BOOL result = FALSE; - F32 mouse_x = ((F32)x / gViewerWindow->getWorldViewWidthScaled() - 0.5f) * LLViewerCamera::getInstance()->getAspect() / gAgent.mHUDCurZoom; - F32 mouse_y = ((F32)y / gViewerWindow->getWorldViewHeightScaled() - 0.5f) / gAgent.mHUDCurZoom; + F32 mouse_x = ((F32)x / gViewerWindow->getWorldViewWidthScaled() - 0.5f) * LLViewerCamera::getInstance()->getAspect() / gAgentCamera.mHUDCurZoom; + F32 mouse_y = ((F32)y / gViewerWindow->getWorldViewHeightScaled() - 0.5f) / gAgentCamera.mHUDCurZoom; LLVector3 origin_agent = gAgent.getPosAgentFromGlobal(origin); LLVector3 mouse_pos = LLVector3(0.f, -mouse_x, mouse_y); @@ -304,15 +305,15 @@ BOOL LLManip::nearestPointOnLineFromMouse( S32 x, S32 y, const LLVector3& b1, co if (mObjectSelection->getSelectType() == SELECT_TYPE_HUD) { - F32 mouse_x = (((F32)x / gViewerWindow->getWindowWidthScaled()) - 0.5f) * LLViewerCamera::getInstance()->getAspect() / gAgent.mHUDCurZoom; - F32 mouse_y = (((F32)y / gViewerWindow->getWindowHeightScaled()) - 0.5f) / gAgent.mHUDCurZoom; + F32 mouse_x = (((F32)x / gViewerWindow->getWindowWidthScaled()) - 0.5f) * LLViewerCamera::getInstance()->getAspect() / gAgentCamera.mHUDCurZoom; + F32 mouse_y = (((F32)y / gViewerWindow->getWindowHeightScaled()) - 0.5f) / gAgentCamera.mHUDCurZoom; a1 = LLVector3(llmin(b1.mV[VX] - 0.1f, b2.mV[VX] - 0.1f, 0.f), -mouse_x, mouse_y); a2 = a1 + LLVector3(1.f, 0.f, 0.f); } else { - a1 = gAgent.getCameraPositionAgent(); - a2 = gAgent.getCameraPositionAgent() + LLVector3(gViewerWindow->mouseDirectionGlobal(x, y)); + a1 = gAgentCamera.getCameraPositionAgent(); + a2 = gAgentCamera.getCameraPositionAgent() + LLVector3(gViewerWindow->mouseDirectionGlobal(x, y)); } BOOL parallel = TRUE; @@ -491,7 +492,7 @@ void LLManip::renderTickText(const LLVector3& pos, const std::string& text, cons LLVector3 render_pos = pos; if (hud_selection) { - F32 zoom_amt = gAgent.mHUDCurZoom; + F32 zoom_amt = gAgentCamera.mHUDCurZoom; F32 inv_zoom_amt = 1.f / zoom_amt; // scale text back up to counter-act zoom level render_pos = pos * zoom_amt; @@ -549,7 +550,7 @@ void LLManip::renderTickValue(const LLVector3& pos, F32 value, const std::string LLVector3 render_pos = pos; if (hud_selection) { - F32 zoom_amt = gAgent.mHUDCurZoom; + F32 zoom_amt = gAgentCamera.mHUDCurZoom; F32 inv_zoom_amt = 1.f / zoom_amt; // scale text back up to counter-act zoom level render_pos = pos * zoom_amt; diff --git a/indra/newview/llmaniprotate.cpp b/indra/newview/llmaniprotate.cpp index 8535d52015..6747bcb9c9 100644 --- a/indra/newview/llmaniprotate.cpp +++ b/indra/newview/llmaniprotate.cpp @@ -45,6 +45,7 @@ // viewer includes #include "llagent.h" +#include "llagentcamera.h" #include "llbox.h" #include "llbutton.h" #include "llviewercontrol.h" @@ -64,6 +65,7 @@ #include "lldrawable.h" #include "llglheaders.h" #include "lltrans.h" +#include "llvoavatarself.h" const F32 RADIUS_PIXELS = 100.f; // size in screen space const F32 SQ_RADIUS = RADIUS_PIXELS * RADIUS_PIXELS; @@ -138,7 +140,7 @@ void LLManipRotate::render() glPushMatrix(); if (mObjectSelection->getSelectType() == SELECT_TYPE_HUD) { - F32 zoom = gAgent.mHUDCurZoom; + F32 zoom = gAgentCamera.mHUDCurZoom; glScalef(zoom, zoom, zoom); } @@ -690,7 +692,7 @@ void LLManipRotate::drag( S32 x, S32 y ) LLSelectMgr::getInstance()->updateSelectionCenter(); // RN: just clear focus so camera doesn't follow spurious object updates - gAgent.clearFocusObject(); + gAgentCamera.clearFocusObject(); dialog_refresh_all(); } @@ -730,7 +732,7 @@ void LLManipRotate::renderSnapGuides() } else { - cam_at_axis = center - gAgent.getCameraPositionAgent(); + cam_at_axis = center - gAgentCamera.getCameraPositionAgent(); cam_at_axis.normVec(); } @@ -738,7 +740,7 @@ void LLManipRotate::renderSnapGuides() LLVector3 test_axis = constraint_axis; BOOL constrain_to_ref_object = FALSE; - if (mObjectSelection->getSelectType() == SELECT_TYPE_ATTACHMENT && gAgent.getAvatarObject()) + if (mObjectSelection->getSelectType() == SELECT_TYPE_ATTACHMENT && isAgentAvatarValid()) { test_axis = test_axis * ~grid_rotation; } @@ -765,7 +767,7 @@ void LLManipRotate::renderSnapGuides() } LLVector3 projected_snap_axis = world_snap_axis; - if (mObjectSelection->getSelectType() == SELECT_TYPE_ATTACHMENT && gAgent.getAvatarObject()) + if (mObjectSelection->getSelectType() == SELECT_TYPE_ATTACHMENT && isAgentAvatarValid()) { projected_snap_axis = projected_snap_axis * grid_rotation; } @@ -1097,12 +1099,12 @@ BOOL LLManipRotate::updateVisiblity() LLVector3 center = gAgent.getPosAgentFromGlobal( mRotationCenter ); if (mObjectSelection->getSelectType() == SELECT_TYPE_HUD) { - mCenterToCam = LLVector3(-1.f / gAgent.mHUDCurZoom, 0.f, 0.f); + mCenterToCam = LLVector3(-1.f / gAgentCamera.mHUDCurZoom, 0.f, 0.f); mCenterToCamNorm = mCenterToCam; mCenterToCamMag = mCenterToCamNorm.normVec(); mRadiusMeters = RADIUS_PIXELS / (F32) LLViewerCamera::getInstance()->getViewHeightInPixels(); - mRadiusMeters /= gAgent.mHUDCurZoom; + mRadiusMeters /= gAgentCamera.mHUDCurZoom; mCenterToProfilePlaneMag = mRadiusMeters * mRadiusMeters / mCenterToCamMag; mCenterToProfilePlane = -mCenterToProfilePlaneMag * mCenterToCamNorm; @@ -1110,8 +1112,8 @@ BOOL LLManipRotate::updateVisiblity() // x axis range is (-aspect * 0.5f, +aspect * 0.5) // y axis range is (-0.5, 0.5) // so use getWorldViewHeightRaw as scale factor when converting to pixel coordinates - mCenterScreen.set((S32)((0.5f - center.mV[VY]) / gAgent.mHUDCurZoom * gViewerWindow->getWorldViewHeightScaled()), - (S32)((center.mV[VZ] + 0.5f) / gAgent.mHUDCurZoom * gViewerWindow->getWorldViewHeightScaled())); + mCenterScreen.set((S32)((0.5f - center.mV[VY]) / gAgentCamera.mHUDCurZoom * gViewerWindow->getWorldViewHeightScaled()), + (S32)((center.mV[VZ] + 0.5f) / gAgentCamera.mHUDCurZoom * gViewerWindow->getWorldViewHeightScaled())); visible = TRUE; } else @@ -1119,7 +1121,7 @@ BOOL LLManipRotate::updateVisiblity() visible = LLViewerCamera::getInstance()->projectPosAgentToScreen(center, mCenterScreen ); if( visible ) { - mCenterToCam = gAgent.getCameraPositionAgent() - center; + mCenterToCam = gAgentCamera.getCameraPositionAgent() - center; mCenterToCamNorm = mCenterToCam; mCenterToCamMag = mCenterToCamNorm.normVec(); LLVector3 cameraAtAxis = LLViewerCamera::getInstance()->getAtAxis(); @@ -1165,7 +1167,7 @@ BOOL LLManipRotate::updateVisiblity() LLQuaternion LLManipRotate::dragUnconstrained( S32 x, S32 y ) { - LLVector3 cam = gAgent.getCameraPositionAgent(); + LLVector3 cam = gAgentCamera.getCameraPositionAgent(); LLVector3 center = gAgent.getPosAgentFromGlobal( mRotationCenter ); mMouseCur = intersectMouseWithSphere( x, y, center, mRadiusMeters); @@ -1281,7 +1283,7 @@ LLQuaternion LLManipRotate::dragConstrained( S32 x, S32 y ) LLVector3 axis2; LLVector3 test_axis = constraint_axis; - if (mObjectSelection->getSelectType() == SELECT_TYPE_ATTACHMENT && gAgent.getAvatarObject()) + if (mObjectSelection->getSelectType() == SELECT_TYPE_ATTACHMENT && isAgentAvatarValid()) { test_axis = test_axis * ~grid_rotation; } @@ -1305,7 +1307,7 @@ LLQuaternion LLManipRotate::dragConstrained( S32 x, S32 y ) axis1 = LLVector3::x_axis; } - if (mObjectSelection->getSelectType() == SELECT_TYPE_ATTACHMENT && gAgent.getAvatarObject()) + if (mObjectSelection->getSelectType() == SELECT_TYPE_ATTACHMENT && isAgentAvatarValid()) { axis1 = axis1 * grid_rotation; } @@ -1333,7 +1335,7 @@ LLQuaternion LLManipRotate::dragConstrained( S32 x, S32 y ) } else { - cam_to_snap_plane = snap_plane_center - gAgent.getCameraPositionAgent(); + cam_to_snap_plane = snap_plane_center - gAgentCamera.getCameraPositionAgent(); cam_to_snap_plane.normVec(); } @@ -1383,7 +1385,7 @@ LLQuaternion LLManipRotate::dragConstrained( S32 x, S32 y ) } else { - cam_to_snap_plane = snap_plane_center - gAgent.getCameraPositionAgent(); + cam_to_snap_plane = snap_plane_center - gAgentCamera.getCameraPositionAgent(); cam_to_snap_plane.normVec(); } @@ -1430,7 +1432,7 @@ LLQuaternion LLManipRotate::dragConstrained( S32 x, S32 y ) } else { - cam_at_axis = snap_plane_center - gAgent.getCameraPositionAgent(); + cam_at_axis = snap_plane_center - gAgentCamera.getCameraPositionAgent(); cam_at_axis.normVec(); } @@ -1627,15 +1629,15 @@ void LLManipRotate::mouseToRay( S32 x, S32 y, LLVector3* ray_pt, LLVector3* ray_ { if (LLSelectMgr::getInstance()->getSelection()->getSelectType() == SELECT_TYPE_HUD) { - F32 mouse_x = (((F32)x / gViewerWindow->getWorldViewRectScaled().getWidth()) - 0.5f) / gAgent.mHUDCurZoom; - F32 mouse_y = ((((F32)y) / gViewerWindow->getWorldViewRectScaled().getHeight()) - 0.5f) / gAgent.mHUDCurZoom; + F32 mouse_x = (((F32)x / gViewerWindow->getWorldViewRectScaled().getWidth()) - 0.5f) / gAgentCamera.mHUDCurZoom; + F32 mouse_y = ((((F32)y) / gViewerWindow->getWorldViewRectScaled().getHeight()) - 0.5f) / gAgentCamera.mHUDCurZoom; *ray_pt = LLVector3(-1.f, -mouse_x, mouse_y); *ray_dir = LLVector3(1.f, 0.f, 0.f); } else { - *ray_pt = gAgent.getCameraPositionAgent(); + *ray_pt = gAgentCamera.getCameraPositionAgent(); LLViewerCamera::getInstance()->projectScreenToPosAgent(x, y, ray_dir); *ray_dir -= *ray_pt; ray_dir->normVec(); diff --git a/indra/newview/llmanipscale.cpp b/indra/newview/llmanipscale.cpp index ee3ffa2450..63643a7fc6 100644 --- a/indra/newview/llmanipscale.cpp +++ b/indra/newview/llmanipscale.cpp @@ -45,6 +45,7 @@ // viewer includes #include "llagent.h" +#include "llagentcamera.h" #include "llbbox.h" #include "llbox.h" #include "llviewercontrol.h" @@ -210,7 +211,7 @@ void LLManipScale::render() glPushMatrix(); if (mObjectSelection->getSelectType() == SELECT_TYPE_HUD) { - F32 zoom = gAgent.mHUDCurZoom; + F32 zoom = gAgentCamera.mHUDCurZoom; glScalef(zoom, zoom, zoom); } @@ -227,11 +228,11 @@ void LLManipScale::render() if (mObjectSelection->getSelectType() == SELECT_TYPE_HUD) { mBoxHandleSize = BOX_HANDLE_BASE_SIZE * BOX_HANDLE_BASE_FACTOR / (F32) LLViewerCamera::getInstance()->getViewHeightInPixels(); - mBoxHandleSize /= gAgent.mHUDCurZoom; + mBoxHandleSize /= gAgentCamera.mHUDCurZoom; } else { - range = dist_vec(gAgent.getCameraPositionAgent(), center_agent); + range = dist_vec(gAgentCamera.getCameraPositionAgent(), center_agent); range_from_agent = dist_vec(gAgent.getPositionAgent(), center_agent); // Don't draw manip if object too far away @@ -438,7 +439,7 @@ void LLManipScale::highlightManipulators(S32 x, S32 y) LLMatrix4 cfr(OGL_TO_CFR_ROTATION); transform *= cfr; LLMatrix4 window_scale; - F32 zoom_level = 2.f * gAgent.mHUDCurZoom; + F32 zoom_level = 2.f * gAgentCamera.mHUDCurZoom; window_scale.initAll(LLVector3(zoom_level / LLViewerCamera::getInstance()->getAspect(), zoom_level, 0.f), LLQuaternion::DEFAULT, LLVector3::zero); @@ -635,7 +636,7 @@ void LLManipScale::renderFaces( const LLBBox& bbox ) } // Find nearest vertex - LLVector3 orientWRTHead = bbox.agentToLocalBasis( bbox.getCenterAgent() - gAgent.getCameraPositionAgent() ); + LLVector3 orientWRTHead = bbox.agentToLocalBasis( bbox.getCenterAgent() - gAgentCamera.getCameraPositionAgent() ); U32 nearest = (orientWRTHead.mV[0] < 0.0f ? 1 : 0) + (orientWRTHead.mV[1] < 0.0f ? 2 : 0) + @@ -825,7 +826,7 @@ void LLManipScale::drag( S32 x, S32 y ) } LLSelectMgr::getInstance()->updateSelectionCenter(); - gAgent.clearFocusObject(); + gAgentCamera.clearFocusObject(); } // Scale around the @@ -1364,7 +1365,7 @@ void LLManipScale::updateSnapGuides(const LLBBox& bbox) if(mObjectSelection->getSelectType() == SELECT_TYPE_HUD) { - mSnapRegimeOffset = SNAP_GUIDE_SCREEN_OFFSET / gAgent.mHUDCurZoom; + mSnapRegimeOffset = SNAP_GUIDE_SCREEN_OFFSET / gAgentCamera.mHUDCurZoom; } else @@ -1377,7 +1378,7 @@ void LLManipScale::updateSnapGuides(const LLBBox& bbox) if (mObjectSelection->getSelectType() == SELECT_TYPE_HUD) { cam_at_axis.setVec(1.f, 0.f, 0.f); - snap_guide_length = SNAP_GUIDE_SCREEN_LENGTH / gAgent.mHUDCurZoom; + snap_guide_length = SNAP_GUIDE_SCREEN_LENGTH / gAgentCamera.mHUDCurZoom; } else { diff --git a/indra/newview/llmaniptranslate.cpp b/indra/newview/llmaniptranslate.cpp index 52fe31fbba..5f0c5e1795 100644 --- a/indra/newview/llmaniptranslate.cpp +++ b/indra/newview/llmaniptranslate.cpp @@ -42,6 +42,7 @@ #include "llrender.h" #include "llagent.h" +#include "llagentcamera.h" #include "llbbox.h" #include "llbox.h" #include "llviewercontrol.h" @@ -437,12 +438,12 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask) { if (x < ROTATE_H_MARGIN) { - gAgent.cameraOrbitAround(rotate_angle); + gAgentCamera.cameraOrbitAround(rotate_angle); rotated = TRUE; } else if (x > world_rect.getWidth() - ROTATE_H_MARGIN) { - gAgent.cameraOrbitAround(-rotate_angle); + gAgentCamera.cameraOrbitAround(-rotate_angle); rotated = TRUE; } } @@ -713,7 +714,7 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask) // in position changes even when the mouse moves object->setPosition(new_position_local); rebuild(object); - gAgent.getAvatarObject()->clampAttachmentPositions(); + gAgentAvatarp->clampAttachmentPositions(); new_position_local = object->getPosition(); if (selectNode->mIndividualSelection) @@ -789,7 +790,7 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask) } LLSelectMgr::getInstance()->updateSelectionCenter(); - gAgent.clearFocusObject(); + gAgentCamera.clearFocusObject(); dialog_refresh_all(); // ??? is this necessary? lldebugst(LLERR_USER_INPUT) << "hover handled by LLManipTranslate (active)" << llendl; @@ -830,7 +831,7 @@ void LLManipTranslate::highlightManipulators(S32 x, S32 y) LLMatrix4 cfr(OGL_TO_CFR_ROTATION); transform *= cfr; LLMatrix4 window_scale; - F32 zoom_level = 2.f * gAgent.mHUDCurZoom; + F32 zoom_level = 2.f * gAgentCamera.mHUDCurZoom; window_scale.initAll(LLVector3(zoom_level / LLViewerCamera::getInstance()->getAspect(), zoom_level, 0.f), LLQuaternion::DEFAULT, LLVector3::zero); @@ -1075,7 +1076,7 @@ void LLManipTranslate::render() gGL.pushMatrix(); if (mObjectSelection->getSelectType() == SELECT_TYPE_HUD) { - F32 zoom = gAgent.mHUDCurZoom; + F32 zoom = gAgentCamera.mHUDCurZoom; glScalef(zoom, zoom, zoom); } { @@ -1239,7 +1240,7 @@ void LLManipTranslate::renderSnapGuides() if (mObjectSelection->getSelectType() == SELECT_TYPE_HUD) { - guide_size_meters = 1.f / gAgent.mHUDCurZoom; + guide_size_meters = 1.f / gAgentCamera.mHUDCurZoom; mSnapOffsetMeters = mArrowLengthMeters * 1.5f; } else @@ -1822,11 +1823,11 @@ void LLManipTranslate::renderTranslationHandles() if (mObjectSelection->getSelectType() == SELECT_TYPE_HUD) { mArrowLengthMeters = mAxisArrowLength / gViewerWindow->getWorldViewHeightRaw(); - mArrowLengthMeters /= gAgent.mHUDCurZoom; + mArrowLengthMeters /= gAgentCamera.mHUDCurZoom; } else { - LLVector3 camera_pos_agent = gAgent.getCameraPositionAgent(); + LLVector3 camera_pos_agent = gAgentCamera.getCameraPositionAgent(); F32 range = dist_vec(camera_pos_agent, selection_center); F32 range_from_agent = dist_vec(gAgent.getPositionAgent(), selection_center); @@ -2108,7 +2109,7 @@ void LLManipTranslate::renderTranslationHandles() // Copied from LLDrawable::updateGeometry LLVector3 pos_agent = first_object->getPositionAgent(); - LLVector3 camera_agent = gAgent.getCameraPositionAgent(); + LLVector3 camera_agent = gAgentCamera.getCameraPositionAgent(); LLVector3 headPos = pos_agent - camera_agent; LLVector3 orientWRTHead = headPos * invRotation; @@ -2150,7 +2151,7 @@ void LLManipTranslate::renderTranslationHandles() } else { - camera_axis.setVec(gAgent.getCameraPositionAgent() - first_object->getPositionAgent()); + camera_axis.setVec(gAgentCamera.getCameraPositionAgent() - first_object->getPositionAgent()); } for (U32 i = 0; i < NUM_AXES*2; i++) diff --git a/indra/newview/llmenucommands.cpp b/indra/newview/llmenucommands.cpp index 8d950f072d..e6ca0dabda 100644 --- a/indra/newview/llmenucommands.cpp +++ b/indra/newview/llmenucommands.cpp @@ -42,7 +42,7 @@ #include "llstring.h" #include "message.h" -#include "llagent.h" +#include "llagentcamera.h" #include "llcallingcard.h" #include "llviewercontrol.h" //#include "llfirstuse.h" @@ -66,7 +66,7 @@ void handle_mouselook(void*) { - gAgent.changeCameraToMouselook(); + gAgentCamera.changeCameraToMouselook(); } diff --git a/indra/newview/llmorphview.cpp b/indra/newview/llmorphview.cpp index b95e8bd3a2..d670eb6ffd 100644 --- a/indra/newview/llmorphview.cpp +++ b/indra/newview/llmorphview.cpp @@ -37,6 +37,7 @@ #include "lljoint.h" #include "llagent.h" +#include "llagentcamera.h" #include "lldrawable.h" #include "lldrawpoolavatar.h" #include "llface.h" @@ -88,15 +89,14 @@ void LLMorphView::initialize() mCameraYaw = 0.f; mCameraDist = -1.f; - LLVOAvatar *avatarp = gAgent.getAvatarObject(); - if (!avatarp || avatarp->isDead()) + if (!isAgentAvatarValid() || gAgentAvatarp->isDead()) { - gAgent.changeCameraToDefault(); + gAgentCamera.changeCameraToDefault(); return; } - avatarp->stopMotion( ANIM_AGENT_BODY_NOISE ); - avatarp->mSpecialRenderMode = 3; + gAgentAvatarp->stopMotion( ANIM_AGENT_BODY_NOISE ); + gAgentAvatarp->mSpecialRenderMode = 3; // set up camera for close look at avatar mOldCameraNearClip = LLViewerCamera::getInstance()->getNear(); @@ -110,11 +110,10 @@ void LLMorphView::shutdown() { LLVOAvatarSelf::onCustomizeEnd(); - LLVOAvatar *avatarp = gAgent.getAvatarObject(); - if(avatarp && !avatarp->isDead()) + if (isAgentAvatarValid()) { - avatarp->startMotion( ANIM_AGENT_BODY_NOISE ); - avatarp->mSpecialRenderMode = 0; + gAgentAvatarp->startMotion( ANIM_AGENT_BODY_NOISE ); + gAgentAvatarp->mSpecialRenderMode = 0; // reset camera LLViewerCamera::getInstance()->setNear(mOldCameraNearClip); } @@ -163,15 +162,11 @@ void LLMorphView::updateCamera() { if (!mCameraTargetJoint) { - setCameraTargetJoint(gAgent.getAvatarObject()->getJoint("mHead")); - } - - LLVOAvatar* avatar = gAgent.getAvatarObject(); - if( !avatar ) - { - return; - } - LLJoint* root_joint = avatar->getRootJoint(); + setCameraTargetJoint(gAgentAvatarp->getJoint("mHead")); + } + if (!isAgentAvatarValid()) return; + + LLJoint* root_joint = gAgentAvatarp->getRootJoint(); if( !root_joint ) { return; @@ -187,7 +182,7 @@ void LLMorphView::updateCamera() LLVector3d camera_pos = joint_pos + mCameraOffset * camera_rot_pitch * camera_rot_yaw * avatar_rot; - gAgent.setCameraPosAndFocusGlobal( camera_pos, target_pos, gAgent.getID() ); + gAgentCamera.setCameraPosAndFocusGlobal( camera_pos, target_pos, gAgent.getID() ); } void LLMorphView::setCameraDrivenByKeys(BOOL b) diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp index 1853b511be..0f22a50093 100644 --- a/indra/newview/llmoveview.cpp +++ b/indra/newview/llmoveview.cpp @@ -41,7 +41,8 @@ // Viewer includes #include "llagent.h" -#include "llvoavatarself.h" // to check gAgent.getAvatarObject()->isSitting() +#include "llagentcamera.h" +#include "llvoavatarself.h" // to check gAgentAvatarp->isSitting() #include "llbottomtray.h" #include "llbutton.h" #include "llfloaterreg.h" @@ -331,7 +332,7 @@ void LLFloaterMove::setMovementMode(const EMovementMode mode) updateButtonsWithMovementMode(mode); bool bHideModeButtons = MM_FLY == mode - || (gAgent.getAvatarObject() && gAgent.getAvatarObject()->isSitting()); + || (isAgentAvatarValid() && gAgentAvatarp->isSitting()); showModeButtons(!bHideModeButtons); @@ -387,9 +388,9 @@ void LLFloaterMove::initMovementMode() } setMovementMode(initMovementMode); - if (gAgent.getAvatarObject()) + if (isAgentAvatarValid()) { - setEnabled(!gAgent.getAvatarObject()->isSitting()); + setEnabled(!gAgentAvatarp->isSitting()); } } @@ -490,7 +491,7 @@ void LLFloaterMove::onOpen(const LLSD& key) showModeButtons(FALSE); } - if (gAgent.getAvatarObject() && gAgent.getAvatarObject()->isSitting()) + if (isAgentAvatarValid() && gAgentAvatarp->isSitting()) { setSittingMode(TRUE); showModeButtons(FALSE); @@ -593,7 +594,7 @@ BOOL LLPanelStandStopFlying::postBuild() void LLPanelStandStopFlying::setVisible(BOOL visible) { //we dont need to show the panel if these buttons are not activated - if (gAgent.getCameraMode() == CAMERA_MODE_MOUSELOOK) visible = false; + if (gAgentCamera.getCameraMode() == CAMERA_MODE_MOUSELOOK) visible = false; if (visible) { diff --git a/indra/newview/llmutelist.cpp b/indra/newview/llmutelist.cpp index 2d3c4b187e..95094f6b52 100644 --- a/indra/newview/llmutelist.cpp +++ b/indra/newview/llmutelist.cpp @@ -128,68 +128,26 @@ LLMute::LLMute(const LLUUID& id, const std::string& name, EType type, U32 flags) } -std::string LLMute::getDisplayName() const +std::string LLMute::getDisplayType() const { - std::string name_with_suffix = mName; switch (mType) { case BY_NAME: default: - name_with_suffix += " " + LLTrans::getString("MuteByName"); + return LLTrans::getString("MuteByName"); break; case AGENT: - name_with_suffix += " " + LLTrans::getString("MuteAgent"); + return LLTrans::getString("MuteAgent"); break; case OBJECT: - name_with_suffix += " " + LLTrans::getString("MuteObject"); + return LLTrans::getString("MuteObject"); break; case GROUP: - name_with_suffix += " " + LLTrans::getString("MuteGroup"); + return LLTrans::getString("MuteGroup"); break; } - return name_with_suffix; } -void LLMute::setFromDisplayName(const std::string& display_name) -{ - size_t pos = 0; - mName = display_name; - - pos = mName.rfind(" " + LLTrans::getString("MuteGroup")); - if (pos != std::string::npos) - { - mName.erase(pos); - mType = GROUP; - return; - } - - pos = mName.rfind(" " + LLTrans::getString("MuteObject")); - if (pos != std::string::npos) - { - mName.erase(pos); - mType = OBJECT; - return; - } - - pos = mName.rfind(" " + LLTrans::getString("MuteAgent")); - if (pos != std::string::npos) - { - mName.erase(pos); - mType = AGENT; - return; - } - - pos = mName.rfind(" " + LLTrans::getString("MuteByName")); - if (pos != std::string::npos) - { - mName.erase(pos); - mType = BY_NAME; - return; - } - - llwarns << "Unable to set mute from display name " << display_name << llendl; - return; -} /* static */ LLMuteList* LLMuteList::getInstance() diff --git a/indra/newview/llmutelist.h b/indra/newview/llmutelist.h index e1e81a24b4..7cb11e6031 100644 --- a/indra/newview/llmutelist.h +++ b/indra/newview/llmutelist.h @@ -63,14 +63,8 @@ public: LLMute(const LLUUID& id, const std::string& name = std::string(), EType type = BY_NAME, U32 flags = 0); - // Returns name + suffix based on type - // For example: "James Tester (resident)" - std::string getDisplayName() const; - - // Converts a UI name into just the agent or object name - // For example: "James Tester (resident)" sets the name to "James Tester" - // and the type to AGENT. - void setFromDisplayName(const std::string& display_name); + // Returns localized type name of muted item + std::string getDisplayType() const; public: LLUUID mID; // agent or object id diff --git a/indra/newview/llnamelistctrl.cpp b/indra/newview/llnamelistctrl.cpp index 883d4cdf4b..7a538e372b 100644 --- a/indra/newview/llnamelistctrl.cpp +++ b/indra/newview/llnamelistctrl.cpp @@ -142,11 +142,12 @@ void LLNameListCtrl::showInspector(const LLUUID& avatar_id, bool is_group) void LLNameListCtrl::mouseOverHighlightNthItem( S32 target_index ) { - if (getHighlightedItemInx()!= target_index) + S32 cur_index = getHighlightedItemInx(); + if (cur_index != target_index) { - if(getHighlightedItemInx()!=-1) + if(0 <= cur_index && cur_index < (S32)getItemList().size()) { - LLScrollListItem* item = getItemList()[getHighlightedItemInx()]; + LLScrollListItem* item = getItemList()[cur_index]; LLScrollListText* cell = dynamic_cast<LLScrollListText*>(item->getColumn(mNameColumnIndex)); if(cell) cell->setTextWidth(cell->getTextWidth() + info_icon_size); diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp index 483756b16e..424b8c9a66 100644 --- a/indra/newview/llnearbychatbar.cpp +++ b/indra/newview/llnearbychatbar.cpp @@ -96,18 +96,14 @@ LLGestureComboList::LLGestureComboList(const LLGestureComboList::Params& p) params.commit_on_keyboard_movement(false); mList = LLUICtrlFactory::create<LLScrollListCtrl>(params); - - // *HACK: adding list as a child to FloaterViewHolder to make it fully visible without - // making it top control (because it would cause problems). - gViewerWindow->getFloaterViewHolder()->addChild(mList); - mList->setVisible(FALSE); + addChild(mList); //****************************Gesture Part********************************/ setCommitCallback(boost::bind(&LLGestureComboList::onCommitGesture, this)); // now register us as observer since we have a place to put the results - LLGestureManager::instance().addObserver(this); + LLGestureMgr::instance().addObserver(this); // refresh list from current active gestures refreshGestures(); @@ -115,7 +111,7 @@ LLGestureComboList::LLGestureComboList(const LLGestureComboList::Params& p) setFocusLostCallback(boost::bind(&LLGestureComboList::hideList, this)); } -BOOL LLGestureComboList::handleKey(KEY key, MASK mask, BOOL called_from_parent) +BOOL LLGestureComboList::handleKeyHere(KEY key, MASK mask) { BOOL handled = FALSE; @@ -126,7 +122,7 @@ BOOL LLGestureComboList::handleKey(KEY key, MASK mask, BOOL called_from_parent) } else { - handled = mList->handleKey(key, mask, called_from_parent); + handled = mList->handleKeyHere(key, mask); } return handled; @@ -135,18 +131,17 @@ BOOL LLGestureComboList::handleKey(KEY key, MASK mask, BOOL called_from_parent) void LLGestureComboList::showList() { LLRect rect = mList->getRect(); - LLRect screen; - mButton->localRectToScreen(getRect(), &screen); + LLRect button_rect = mButton->getRect(); // Calculating amount of space between the navigation bar and gestures combo LLNavigationBar* nb = LLNavigationBar::getInstance(); S32 x, nb_bottom; - nb->localPointToScreen(0, 0, &x, &nb_bottom); + nb->localPointToOtherView(0, 0, &x, &nb_bottom, this); - S32 max_height = nb_bottom - screen.mTop; + S32 max_height = nb_bottom - button_rect.mTop; mList->calcColumnWidths(); - rect.setOriginAndSize(screen.mLeft, screen.mTop, llmax(mList->getMaxContentWidth(),mButton->getRect().getWidth()), max_height); + rect.setOriginAndSize(button_rect.mLeft, button_rect.mTop, llmax(mList->getMaxContentWidth(),mButton->getRect().getWidth()), max_height); mList->setRect(rect); mList->fitContents( llmax(mList->getMaxContentWidth(),mButton->getRect().getWidth()), max_height); @@ -156,6 +151,7 @@ void LLGestureComboList::showList() // Show the list and push the button down mButton->setToggleState(TRUE); mList->setVisible(TRUE); + LLUI::addPopup(mList); } void LLGestureComboList::onButtonCommit() @@ -188,6 +184,7 @@ void LLGestureComboList::hideList() mButton->setToggleState(FALSE); mList->setVisible(FALSE); mList->mouseOverHighlightNthItem(-1); + LLUI::removePopup(mList); gFocusMgr.setKeyboardFocus(NULL); } } @@ -247,8 +244,8 @@ void LLGestureComboList::refreshGestures() mList->clearRows(); mGestures.clear(); - LLGestureManager::item_map_t::const_iterator it; - const LLGestureManager::item_map_t& active_gestures = LLGestureManager::instance().getActiveGestures(); + LLGestureMgr::item_map_t::const_iterator it; + const LLGestureMgr::item_map_t& active_gestures = LLGestureMgr::instance().getActiveGestures(); LLSD::Integer idx(0); for (it = active_gestures.begin(); it != active_gestures.end(); ++it) { @@ -292,7 +289,7 @@ void LLGestureComboList::refreshGestures() gesture = mGestures.at(index); } - if(gesture && LLGestureManager::instance().isGesturePlaying(gesture)) + if(gesture && LLGestureMgr::instance().isGesturePlaying(gesture)) { return; } @@ -324,7 +321,7 @@ void LLGestureComboList::onCommitGesture() LLMultiGesture* gesture = mGestures.at(index); if(gesture) { - LLGestureManager::instance().playGesture(gesture); + LLGestureMgr::instance().playGesture(gesture); if(!gesture->mReplaceText.empty()) { LLNearbyChatBar::sendChatFromViewer(gesture->mReplaceText, CHAT_TYPE_NORMAL, FALSE); @@ -335,7 +332,7 @@ void LLGestureComboList::onCommitGesture() LLGestureComboList::~LLGestureComboList() { - LLGestureManager::instance().removeObserver(this); + LLGestureMgr::instance().removeObserver(this); } LLNearbyChatBar::LLNearbyChatBar() @@ -479,7 +476,7 @@ void LLNearbyChatBar::onChatBoxKeystroke(LLLineEditor* caller, void* userdata) std::string utf8_trigger = wstring_to_utf8str(raw_text); std::string utf8_out_str(utf8_trigger); - if (LLGestureManager::instance().matchPrefix(utf8_trigger, &utf8_out_str)) + if (LLGestureMgr::instance().matchPrefix(utf8_trigger, &utf8_out_str)) { std::string rest_of_match = utf8_out_str.substr(utf8_trigger.size()); self->mChatBox->setText(utf8_trigger + rest_of_match); // keep original capitalization for user-entered part @@ -561,7 +558,7 @@ void LLNearbyChatBar::sendChat( EChatType type ) if (0 == channel) { // discard returned "found" boolean - LLGestureManager::instance().triggerAndReviseString(utf8text, &utf8_revised_text); + LLGestureMgr::instance().triggerAndReviseString(utf8text, &utf8_revised_text); } else { diff --git a/indra/newview/llnearbychatbar.h b/indra/newview/llnearbychatbar.h index 559c1ee091..dd467d7978 100644 --- a/indra/newview/llnearbychatbar.h +++ b/indra/newview/llnearbychatbar.h @@ -70,7 +70,7 @@ public: LLCtrlListInterface* getListInterface() { return (LLCtrlListInterface*)mList; }; virtual void showList(); virtual void hideList(); - virtual BOOL handleKey(KEY key, MASK mask, BOOL called_from_parent); + virtual BOOL handleKeyHere(KEY key, MASK mask); S32 getCurrentIndex() const; void onItemSelected(const LLSD& data); diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp index 08ae93c3a6..e199f9f180 100644 --- a/indra/newview/llnearbychathandler.cpp +++ b/indra/newview/llnearbychathandler.cpp @@ -268,24 +268,23 @@ void LLNearbyChatScreenChannel::showToastsBottom() } break; } - else - { - toast_rect = toast->getRect(); - toast_rect.setLeftTopAndSize(getRect().mLeft , toast_top, toast_rect.getWidth() ,toast_rect.getHeight()); - - toast->setRect(toast_rect); - toast->setIsHidden(false); - toast->setVisible(TRUE); + bottom = toast_top - toast->getTopPad(); + } - if(!toast->hasFocus()) - { - // Fixing Z-order of toasts (EXT-4862) - // Next toast will be positioned under this one. - gFloaterView->sendChildToBack(toast); - } - - bottom = toast->getRect().mTop - toast->getTopPad(); - } + // use reverse order to provide correct z-order and avoid toast blinking + for(std::vector<LLToast*>::reverse_iterator it = m_active_toasts.rbegin(); it != m_active_toasts.rend(); ++it) + { + LLToast* toast = (*it); + S32 toast_top = bottom + toast->getTopPad(); + + toast_rect = toast->getRect(); + toast_rect.setLeftTopAndSize(getRect().mLeft , toast_top, toast_rect.getWidth() ,toast_rect.getHeight()); + + toast->setRect(toast_rect); + toast->setIsHidden(false); + toast->setVisible(TRUE); + + bottom = toast->getRect().mBottom - margin; } } diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp index 05623198ab..a8dee8a24a 100644 --- a/indra/newview/llnetmap.cpp +++ b/indra/newview/llnetmap.cpp @@ -49,6 +49,7 @@ // Viewer includes #include "llagent.h" +#include "llagentcamera.h" #include "llappviewer.h" // for gDisconnected #include "llcallingcard.h" // LLAvatarTracker #include "lltracker.h" @@ -87,7 +88,7 @@ LLNetMap::LLNetMap (const Params & p) mCurPanX(0.f), mCurPanY(0.f), mUpdateNow(FALSE), - mObjectImageCenterGlobal( gAgent.getCameraPositionGlobal() ), + mObjectImageCenterGlobal( gAgentCamera.getCameraPositionGlobal() ), mObjectRawImagep(), mObjectImagep(), mClosestAgentToCursor(), @@ -203,7 +204,7 @@ void LLNetMap::draw() LLViewerRegion* regionp = *iter; // Find x and y position relative to camera's center. LLVector3 origin_agent = regionp->getOriginAgent(); - LLVector3 rel_region_pos = origin_agent - gAgent.getCameraPositionAgent(); + LLVector3 rel_region_pos = origin_agent - gAgentCamera.getCameraPositionAgent(); F32 relative_x = (rel_region_pos.mV[0] / region_width) * mScale; F32 relative_y = (rel_region_pos.mV[1] / region_width) * mScale; @@ -264,7 +265,7 @@ void LLNetMap::draw() LLVector3d old_center = mObjectImageCenterGlobal; - LLVector3d new_center = gAgent.getCameraPositionGlobal(); + LLVector3d new_center = gAgentCamera.getCameraPositionGlobal(); new_center.mdV[0] = (5.f/mObjectMapTPM)*floor(0.2f*mObjectMapTPM*new_center.mdV[0]); new_center.mdV[1] = (5.f/mObjectMapTPM)*floor(0.2f*mObjectMapTPM*new_center.mdV[1]); @@ -289,7 +290,7 @@ void LLNetMap::draw() } LLVector3 map_center_agent = gAgent.getPosAgentFromGlobal(mObjectImageCenterGlobal); - map_center_agent -= gAgent.getCameraPositionAgent(); + map_center_agent -= gAgentCamera.getCameraPositionAgent(); map_center_agent.mV[VX] *= mScale/region_width; map_center_agent.mV[VY] *= mScale/region_width; @@ -461,7 +462,7 @@ void LLNetMap::reshape(S32 width, S32 height, BOOL called_from_parent) LLVector3 LLNetMap::globalPosToView( const LLVector3d& global_pos ) { - LLVector3d relative_pos_global = global_pos - gAgent.getCameraPositionGlobal(); + LLVector3d relative_pos_global = global_pos - gAgentCamera.getCameraPositionGlobal(); LLVector3 pos_local; pos_local.setVec(relative_pos_global); // convert to floats from doubles @@ -529,7 +530,7 @@ LLVector3d LLNetMap::viewPosToGlobal( S32 x, S32 y ) LLVector3d pos_global; pos_global.setVec( pos_local ); - pos_global += gAgent.getCameraPositionGlobal(); + pos_global += gAgentCamera.getCameraPositionGlobal(); return pos_global; } diff --git a/indra/newview/llnotificationhandler.h b/indra/newview/llnotificationhandler.h index a163b6fd62..1dc0e414a2 100644 --- a/indra/newview/llnotificationhandler.h +++ b/indra/newview/llnotificationhandler.h @@ -291,6 +291,11 @@ public: static bool canAddNotifPanelToIM(const LLNotificationPtr& notification); /** + * Checks whether notification can be used multiple times or not. + */ + static bool isNotificationReusable(const LLNotificationPtr& notification); + + /** * Checks if passed notification can create IM session and be written into it. * * This method uses canLogToIM() & canSpawnIMSession(). @@ -298,6 +303,18 @@ public: static bool canSpawnSessionAndLogToIM(const LLNotificationPtr& notification); /** + * Checks if passed notification can create toast. + * + * It returns false only for inventory accepted/declined notifications if respective IM window is open (EXT-5909) + */ + static bool canSpawnToast(const LLNotificationPtr& notification); + + /** + * Determines whether IM floater is opened. + */ + static bool isIMFloaterOpened(const LLNotificationPtr& notification); + + /** * Writes notification message to IM session. */ static void logToIM(const EInstantMessage& session_type, @@ -343,6 +360,21 @@ public: * Adds notification panel to the IM floater. */ static void addNotifPanelToIM(const LLNotificationPtr& notification); + + /** + * Updates messages of IM floater. + */ + static void updateIMFLoaterMesages(const LLUUID& session_id); + + /** + * Updates messages of visible IM floater. + */ + static void updateVisibleIMFLoaterMesages(const LLNotificationPtr& notification); + + /** + * Decrements counter of IM messages. + */ + static void decIMMesageCounter(const LLNotificationPtr& notification); }; } diff --git a/indra/newview/llnotificationhandlerutil.cpp b/indra/newview/llnotificationhandlerutil.cpp index 88bb769109..d3ad61128d 100644 --- a/indra/newview/llnotificationhandlerutil.cpp +++ b/indra/newview/llnotificationhandlerutil.cpp @@ -127,7 +127,9 @@ const static std::string GRANTED_MODIFY_RIGHTS("GrantedModifyRights"), FRIENDSHIP_DECLINED_BYME("FriendshipDeclinedByMe"), FRIEND_ONLINE("FriendOnline"), FRIEND_OFFLINE("FriendOffline"), SERVER_OBJECT_MESSAGE("ServerObjectMessage"), - TELEPORT_OFFERED("TeleportOffered"); + TELEPORT_OFFERED("TeleportOffered"), + TELEPORT_OFFER_SENT("TeleportOfferSent"); + // static bool LLHandlerUtil::canLogToIM(const LLNotificationPtr& notification) @@ -137,11 +139,15 @@ bool LLHandlerUtil::canLogToIM(const LLNotificationPtr& notification) || PAYMENT_RECIVED == notification->getName() || OFFER_FRIENDSHIP == notification->getName() || FRIENDSHIP_OFFERED == notification->getName() + || FRIENDSHIP_ACCEPTED == notification->getName() || FRIENDSHIP_ACCEPTED_BYME == notification->getName() || FRIENDSHIP_DECLINED_BYME == notification->getName() || SERVER_OBJECT_MESSAGE == notification->getName() || INVENTORY_ACCEPTED == notification->getName() - || INVENTORY_DECLINED == notification->getName(); + || INVENTORY_DECLINED == notification->getName() + || USER_GIVE_ITEM == notification->getName() + || TELEPORT_OFFERED == notification->getName() + || TELEPORT_OFFER_SENT == notification->getName(); } // static @@ -158,19 +164,25 @@ bool LLHandlerUtil::canLogToNearbyChat(const LLNotificationPtr& notification) bool LLHandlerUtil::canSpawnIMSession(const LLNotificationPtr& notification) { return OFFER_FRIENDSHIP == notification->getName() - || FRIENDSHIP_ACCEPTED == notification->getName() || USER_GIVE_ITEM == notification->getName() - || INVENTORY_ACCEPTED == notification->getName() - || INVENTORY_DECLINED == notification->getName(); + || TELEPORT_OFFERED == notification->getName(); } // static bool LLHandlerUtil::canAddNotifPanelToIM(const LLNotificationPtr& notification) { return OFFER_FRIENDSHIP == notification->getName() - || USER_GIVE_ITEM == notification->getName(); + || USER_GIVE_ITEM == notification->getName() + || TELEPORT_OFFERED == notification->getName(); } +// static +bool LLHandlerUtil::isNotificationReusable(const LLNotificationPtr& notification) +{ + return OFFER_FRIENDSHIP == notification->getName() + || USER_GIVE_ITEM == notification->getName() + || TELEPORT_OFFERED == notification->getName(); +} // static bool LLHandlerUtil::canSpawnSessionAndLogToIM(const LLNotificationPtr& notification) @@ -179,18 +191,57 @@ bool LLHandlerUtil::canSpawnSessionAndLogToIM(const LLNotificationPtr& notificat } // static +bool LLHandlerUtil::canSpawnToast(const LLNotificationPtr& notification) +{ + bool cannot_spawn = isIMFloaterOpened(notification) && (INVENTORY_DECLINED == notification->getName() + || INVENTORY_ACCEPTED == notification->getName()); + + return !cannot_spawn; +} + +// static +bool LLHandlerUtil::isIMFloaterOpened(const LLNotificationPtr& notification) +{ + bool res = false; + + LLUUID from_id = notification->getPayload()["from_id"]; + LLUUID session_id = LLIMMgr::computeSessionID(IM_NOTHING_SPECIAL, + from_id); + + LLIMFloater* im_floater = LLFloaterReg::findTypedInstance<LLIMFloater>( + "impanel", session_id); + if (im_floater != NULL) + { + res = im_floater->getVisible() == TRUE; + } + + return res; +} + +// static void LLHandlerUtil::logToIM(const EInstantMessage& session_type, const std::string& session_name, const std::string& from_name, const std::string& message, const LLUUID& session_owner_id, const LLUUID& from_id) { + std::string from = from_name; + if (from_name.empty()) + { + from = SYSTEM_FROM; + } + LLUUID session_id = LLIMMgr::computeSessionID(session_type, session_owner_id); LLIMModel::LLIMSession* session = LLIMModel::instance().findIMSession( session_id); if (session == NULL) { - LLIMModel::instance().logToFile(session_name, from_name, from_id, message); + // replace interactive system message marker with correct from string value + if (INTERACTIVE_SYSTEM_FROM == from_name) + { + from = SYSTEM_FROM; + } + LLIMModel::instance().logToFile(session_name, from, from_id, message); } else { @@ -201,8 +252,16 @@ void LLHandlerUtil::logToIM(const EInstantMessage& session_type, // set searched session as active to avoid IM toast popup LLIMModel::instance().setActiveSessionID(session_id); - LLIMModel::instance().addMessage(session_id, from_name, from_id, + S32 unread = session->mNumUnread; + S32 participant_unread = session->mParticipantUnreadMessageCount; + LLIMModel::instance().addMessageSilently(session_id, from, from_id, message); + // we shouldn't increment counters when logging, so restore them + session->mNumUnread = unread; + session->mParticipantUnreadMessageCount = participant_unread; + + // update IM floater messages + updateIMFLoaterMesages(session_id); // restore active session id if (active_session_id.isNull()) @@ -250,13 +309,13 @@ void LLHandlerUtil::logToIMP2P(const LLNotificationPtr& notification, bool to_fi if(to_file_only) { - logToIM(IM_NOTHING_SPECIAL, session_name, name, notification->getMessage(), + logToIM(IM_NOTHING_SPECIAL, session_name, "", notification->getMessage(), LLUUID(), LLUUID()); } else { - logToIM(IM_NOTHING_SPECIAL, session_name, name, notification->getMessage(), - from_id, from_id); + logToIM(IM_NOTHING_SPECIAL, session_name, INTERACTIVE_SYSTEM_FROM, notification->getMessage(), + from_id, LLUUID()); } } } @@ -324,7 +383,16 @@ std::string LLHandlerUtil::getSubstitutionName(const LLNotificationPtr& notifica if (res.empty()) { LLUUID from_id = notification->getPayload()["FROM_ID"]; - gCacheName->getFullName(from_id, res); + + //*TODO all keys everywhere should be made of the same case, there is a mix of keys in lower and upper cases + if (from_id.isNull()) + { + from_id = notification->getPayload()["from_id"]; + } + if(!gCacheName->getFullName(from_id, res)) + { + res = ""; + } } return res; } @@ -343,11 +411,60 @@ void LLHandlerUtil::addNotifPanelToIM(const LLNotificationPtr& notification) LLSD offer; offer["notification_id"] = notification->getID(); - offer["from_id"] = notification->getPayload()["from_id"]; - offer["from"] = name; - offer["time"] = LLLogChat::timestamp(true); + offer["from"] = SYSTEM_FROM; + offer["time"] = LLLogChat::timestamp(false); offer["index"] = (LLSD::Integer)session->mMsgs.size(); session->mMsgs.push_front(offer); - LLIMFloater::show(session_id); + + // update IM floater and counters + LLSD arg; + arg["session_id"] = session_id; + arg["num_unread"] = ++(session->mNumUnread); + arg["participant_unread"] = ++(session->mParticipantUnreadMessageCount); + LLIMModel::getInstance()->mNewMsgSignal(arg); +} + +// static +void LLHandlerUtil::updateIMFLoaterMesages(const LLUUID& session_id) +{ + LLIMFloater* im_floater = LLIMFloater::findInstance(session_id); + if (im_floater != NULL && im_floater->getVisible()) + { + im_floater->updateMessages(); + } +} + +// static +void LLHandlerUtil::updateVisibleIMFLoaterMesages(const LLNotificationPtr& notification) +{ + const std::string name = LLHandlerUtil::getSubstitutionName(notification); + LLUUID from_id = notification->getPayload()["from_id"]; + LLUUID session_id = spawnIMSession(name, from_id); + + updateIMFLoaterMesages(session_id); +} + +// static +void LLHandlerUtil::decIMMesageCounter(const LLNotificationPtr& notification) +{ + const std::string name = LLHandlerUtil::getSubstitutionName(notification); + LLUUID from_id = notification->getPayload()["from_id"]; + LLUUID session_id = LLIMMgr::computeSessionID(IM_NOTHING_SPECIAL, from_id); + + LLIMModel::LLIMSession * session = LLIMModel::getInstance()->findIMSession( + session_id); + + if (session == NULL) + { + return; + } + + LLSD arg; + arg["session_id"] = session_id; + session->mNumUnread--; + arg["num_unread"] = session->mNumUnread; + session->mParticipantUnreadMessageCount--; + arg["participant_unread"] = session->mParticipantUnreadMessageCount; + LLIMModel::getInstance()->mNewMsgSignal(arg); } diff --git a/indra/newview/llnotificationofferhandler.cpp b/indra/newview/llnotificationofferhandler.cpp index 8ebd5de258..e93aec9d01 100644 --- a/indra/newview/llnotificationofferhandler.cpp +++ b/indra/newview/llnotificationofferhandler.cpp @@ -103,6 +103,8 @@ bool LLOfferHandler::processNotification(const LLSD& notify) } else { + notification->setReusable(LLHandlerUtil::isNotificationReusable(notification)); + LLUUID session_id; if (LLHandlerUtil::canSpawnIMSession(notification)) { @@ -113,35 +115,58 @@ bool LLOfferHandler::processNotification(const LLSD& notify) session_id = LLHandlerUtil::spawnIMSession(name, from_id); } - if (LLHandlerUtil::canAddNotifPanelToIM(notification)) + bool show_toast = true; + bool add_notid_to_im = LLHandlerUtil::canAddNotifPanelToIM(notification); + if (add_notid_to_im) { LLHandlerUtil::addNotifPanelToIM(notification); - LLHandlerUtil::logToIMP2P(notification, true); + if (LLHandlerUtil::isIMFloaterOpened(notification)) + { + show_toast = false; + } } - else if (notification->getPayload().has("SUPPRESS_TOAST") + + if (notification->getPayload().has("SUPPRESS_TOAST") && notification->getPayload()["SUPPRESS_TOAST"]) { - LLHandlerUtil::logToIMP2P(notification); LLNotificationsUtil::cancel(notification); } - else + else if(show_toast) { LLToastNotifyPanel* notify_box = new LLToastNotifyPanel(notification); - + // don't close notification on panel destroy since it will be used by IM floater + notify_box->setCloseNotificationOnDestroy(!add_notid_to_im); LLToast::Params p; p.notif_id = notification->getID(); p.notification = notification; p.panel = notify_box; p.on_delete_toast = boost::bind(&LLOfferHandler::onDeleteToast, this, _1); + // we not save offer notifications to the syswell floater that should be added to the IM floater + p.can_be_stored = !add_notid_to_im; LLScreenChannel* channel = dynamic_cast<LLScreenChannel*>(mChannel); if(channel) channel->addToast(p); - LLHandlerUtil::logToIMP2P(notification); + // if we not add notification to IM - add it to notification well + if (!add_notid_to_im) + { + // send a signal to the counter manager + mNewNotificationSignal(); + } + } - // send a signal to the counter manager - mNewNotificationSignal(); + if (LLHandlerUtil::canLogToIM(notification)) + { + // log only to file if notif panel can be embedded to IM and IM is opened + if (add_notid_to_im && LLHandlerUtil::isIMFloaterOpened(notification)) + { + LLHandlerUtil::logToIMP2P(notification, true); + } + else + { + LLHandlerUtil::logToIMP2P(notification); + } } } } @@ -155,6 +180,11 @@ bool LLOfferHandler::processNotification(const LLSD& notify) } else { + if (LLHandlerUtil::canAddNotifPanelToIM(notification) + && !LLHandlerUtil::isIMFloaterOpened(notification)) + { + LLHandlerUtil::decIMMesageCounter(notification); + } mChannel->killToastByNotificationID(notification->getID()); } } @@ -166,8 +196,11 @@ bool LLOfferHandler::processNotification(const LLSD& notify) void LLOfferHandler::onDeleteToast(LLToast* toast) { - // send a signal to the counter manager - mDelNotificationSignal(); + if (!LLHandlerUtil::canAddNotifPanelToIM(toast->getNotification())) + { + // send a signal to the counter manager + mDelNotificationSignal(); + } // send a signal to a listener to let him perform some action // in this case listener is a SysWellWindow and it will remove a corresponding item from its list @@ -181,7 +214,9 @@ void LLOfferHandler::onRejectToast(LLUUID& id) if (notification && LLNotificationManager::getInstance()->getHandlerForNotification( - notification->getType()) == this) + notification->getType()) == this + // don't delete notification since it may be used by IM floater + && !LLHandlerUtil::canAddNotifPanelToIM(notification)) { LLNotifications::instance().cancel(notification); } diff --git a/indra/newview/llnotificationtiphandler.cpp b/indra/newview/llnotificationtiphandler.cpp index 4e2c5085ed..1f1afe293a 100644 --- a/indra/newview/llnotificationtiphandler.cpp +++ b/indra/newview/llnotificationtiphandler.cpp @@ -150,6 +150,12 @@ bool LLTipHandler::processNotification(const LLSD& notify) LLHandlerUtil::spawnIMSession(name, from_id); } + // don't spawn toast for inventory accepted/declined offers if respective IM window is open (EXT-5909) + if (!LLHandlerUtil::canSpawnToast(notification)) + { + return true; + } + LLToastPanel* notify_box = NULL; if("FriendOffline" == notification->getName() || "FriendOnline" == notification->getName()) { diff --git a/indra/newview/llpanelavatar.cpp b/indra/newview/llpanelavatar.cpp index 57b478ffef..a0ba2f739b 100644 --- a/indra/newview/llpanelavatar.cpp +++ b/indra/newview/llpanelavatar.cpp @@ -495,6 +495,7 @@ BOOL LLPanelAvatarProfile::postBuild() &LLPanelAvatarProfile::onMapButtonClick, this)), NULL); LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar; + registrar.add("Profile.ShowOnMap", boost::bind(&LLPanelAvatarProfile::onMapButtonClick, this)); registrar.add("Profile.Pay", boost::bind(&LLPanelAvatarProfile::pay, this)); registrar.add("Profile.Share", boost::bind(&LLPanelAvatarProfile::share, this)); registrar.add("Profile.BlockUnblock", boost::bind(&LLPanelAvatarProfile::toggleBlock, this)); @@ -504,6 +505,7 @@ BOOL LLPanelAvatarProfile::postBuild() registrar.add("Profile.CSR", boost::bind(&LLPanelAvatarProfile::csr, this)); LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable; + enable.add("Profile.EnableShowOnMap", boost::bind(&LLPanelAvatarProfile::enableShowOnMap, this)); enable.add("Profile.EnableGod", boost::bind(&enable_god)); enable.add("Profile.EnableBlock", boost::bind(&LLPanelAvatarProfile::enableBlock, this)); enable.add("Profile.EnableUnblock", boost::bind(&LLPanelAvatarProfile::enableUnblock, this)); @@ -698,6 +700,15 @@ void LLPanelAvatarProfile::toggleBlock() LLAvatarActions::toggleBlock(getAvatarId()); } +bool LLPanelAvatarProfile::enableShowOnMap() +{ + bool is_buddy_online = LLAvatarTracker::instance().isBuddyOnline(getAvatarId()); + + bool enable_map_btn = (is_buddy_online && is_agent_mappable(getAvatarId())) + || gAgent.isGodlike(); + return enable_map_btn; +} + bool LLPanelAvatarProfile::enableBlock() { return LLAvatarActions::canBlock(getAvatarId()) && !LLAvatarActions::isBlocked(getAvatarId()); diff --git a/indra/newview/llpanelavatar.h b/indra/newview/llpanelavatar.h index 2bd23b6e9c..bb8df2ff9c 100644 --- a/indra/newview/llpanelavatar.h +++ b/indra/newview/llpanelavatar.h @@ -202,6 +202,7 @@ protected: void unfreeze(); void csr(); + bool enableShowOnMap(); bool enableBlock(); bool enableUnblock(); bool enableGod(); diff --git a/indra/newview/llpanelblockedlist.cpp b/indra/newview/llpanelblockedlist.cpp index 362657a458..c72f0f8012 100644 --- a/indra/newview/llpanelblockedlist.cpp +++ b/indra/newview/llpanelblockedlist.cpp @@ -119,8 +119,13 @@ void LLPanelBlockedList::refreshBlockedList() std::vector<LLMute>::iterator it; for (it = mutes.begin(); it != mutes.end(); ++it) { - std::string display_name = it->getDisplayName(); - mBlockedList->addStringUUIDItem(display_name, it->mID, ADD_BOTTOM, TRUE); + LLScrollListItem::Params item_p; + item_p.enabled(TRUE); + item_p.value(it->mID); // link UUID of blocked item with ScrollListItem + item_p.columns.add().column("item_name").value(it->mName);//.type("text"); + item_p.columns.add().column("item_type").value(it->getDisplayType());//.type("text").width(111); + + mBlockedList->addRow(item_p, ADD_BOTTOM); } } @@ -145,9 +150,7 @@ void LLPanelBlockedList::onRemoveBtnClick() { std::string name = mBlockedList->getSelectedItemLabel(); LLUUID id = mBlockedList->getStringUUIDSelectedItem(); - LLMute mute(id); - mute.setFromDisplayName(name); - // now mute.mName has the suffix trimmed off + LLMute mute(id, name); S32 last_selected = mBlockedList->getFirstSelectedIndex(); if (LLMuteList::getInstance()->remove(mute)) @@ -183,7 +186,7 @@ void LLPanelBlockedList::onBlockByNameClick() LLFloaterGetBlockedObjectName::show(&LLPanelBlockedList::callbackBlockByName); } -void LLPanelBlockedList::callbackBlockPicked(const std::vector<std::string>& names, const std::vector<LLUUID>& ids) +void LLPanelBlockedList::callbackBlockPicked(const std::vector<std::string>& names, const uuid_vec_t& ids) { if (names.empty() || ids.empty()) return; LLMute mute(ids[0], names[0], LLMute::AGENT); diff --git a/indra/newview/llpanelblockedlist.h b/indra/newview/llpanelblockedlist.h index 1ef16a02f4..a100577e43 100644 --- a/indra/newview/llpanelblockedlist.h +++ b/indra/newview/llpanelblockedlist.h @@ -78,7 +78,7 @@ private: void onPickBtnClick(); void onBlockByNameClick(); - void callbackBlockPicked(const std::vector<std::string>& names, const std::vector<LLUUID>& ids); + void callbackBlockPicked(const std::vector<std::string>& names, const uuid_vec_t& ids); static void callbackBlockByName(const std::string& text); private: diff --git a/indra/newview/llpanelclassified.cpp b/indra/newview/llpanelclassified.cpp index 021e1f5159..70a7bf644b 100644 --- a/indra/newview/llpanelclassified.cpp +++ b/indra/newview/llpanelclassified.cpp @@ -1893,7 +1893,7 @@ void LLPanelClassifiedEdit::resetControls() LLPanelClassifiedInfo::resetControls(); getChild<LLComboBox>("category")->setCurrentByIndex(0); - getChild<LLIconsComboBox>("content_type")->setCurrentByIndex(0); + getChild<LLComboBox>("content_type")->setCurrentByIndex(0); childSetValue("auto_renew", false); childSetValue("price_for_listing", MINIMUM_PRICE_FOR_LISTING); childSetEnabled("price_for_listing", TRUE); @@ -1928,7 +1928,7 @@ U32 LLPanelClassifiedEdit::getContentType() void LLPanelClassifiedEdit::setContentType(U32 content_type) { - LLIconsComboBox* ct_cb = getChild<LLIconsComboBox>("content_type"); + LLComboBox* ct_cb = getChild<LLComboBox>("content_type"); ct_cb->setCurrentByIndex(content_type); ct_cb->resetDirty(); } @@ -1988,7 +1988,7 @@ U8 LLPanelClassifiedEdit::getFlags() { bool auto_renew = childGetValue("auto_renew").asBoolean(); - LLComboBox* content_cb = getChild<LLIconsComboBox>("content_type"); + LLComboBox* content_cb = getChild<LLComboBox>("content_type"); bool mature = content_cb->getCurrentIndex() == CB_ITEM_MATURE; return pack_classified_flags_request(auto_renew, false, mature, false); diff --git a/indra/newview/llpaneleditwearable.cpp b/indra/newview/llpaneleditwearable.cpp index e7acc68b93..805016f089 100644 --- a/indra/newview/llpaneleditwearable.cpp +++ b/indra/newview/llpaneleditwearable.cpp @@ -602,7 +602,7 @@ LLPanel* LLPanelEditWearable::getPanel(EWearableType type) void LLPanelEditWearable::getSortedParams(value_map_t &sorted_params, const std::string &edit_group) { LLWearable::visual_param_vec_t param_list; - ESex avatar_sex = gAgent.getAvatarObject()->getSex(); + ESex avatar_sex = gAgentAvatarp->getSex(); mWearablePtr->getVisualParams(param_list); diff --git a/indra/newview/llpanelgroupgeneral.cpp b/indra/newview/llpanelgroupgeneral.cpp index 517204b232..0a83ba8212 100644 --- a/indra/newview/llpanelgroupgeneral.cpp +++ b/indra/newview/llpanelgroupgeneral.cpp @@ -820,15 +820,15 @@ void LLPanelGroupGeneral::reset() mCtrlListGroup->set(true); - mCtrlReceiveNotices->setEnabled(true); + mCtrlReceiveNotices->setEnabled(false); mCtrlReceiveNotices->setVisible(true); - mCtrlListGroup->setEnabled(true); + mCtrlListGroup->setEnabled(false); mGroupNameEditor->setEnabled(TRUE); mEditCharter->setEnabled(TRUE); - mCtrlShowInGroupList->setEnabled(TRUE); + mCtrlShowInGroupList->setEnabled(false); mComboMature->setEnabled(TRUE); mCtrlOpenEnrollment->setEnabled(TRUE); @@ -934,6 +934,8 @@ void LLPanelGroupGeneral::setGroupID(const LLUUID& id) mCtrlListGroup->setEnabled(data.mID.notNull()); } + mCtrlShowInGroupList->setEnabled(data.mID.notNull()); + mActiveTitleLabel = getChild<LLTextBox>("active_title_label"); mComboActiveTitle = getChild<LLComboBox>("active_title"); diff --git a/indra/newview/llpanelgroupinvite.cpp b/indra/newview/llpanelgroupinvite.cpp index 05261a65de..11d3768a3d 100644 --- a/indra/newview/llpanelgroupinvite.cpp +++ b/indra/newview/llpanelgroupinvite.cpp @@ -57,7 +57,7 @@ public: ~impl(); void addUsers(const std::vector<std::string>& names, - const std::vector<LLUUID>& agent_ids); + const uuid_vec_t& agent_ids); void submitInvitations(); void addRoleNames(LLGroupMgrGroupData* gdatap); void handleRemove(); @@ -69,7 +69,7 @@ public: static void callbackClickRemove(void* userdata); static void callbackSelect(LLUICtrl* ctrl, void* userdata); static void callbackAddUsers(const std::vector<std::string>& names, - const std::vector<LLUUID>& agent_ids, + const uuid_vec_t& agent_ids, void* user_data); bool inviteOwnerCallback(const LLSD& notification, const LLSD& response); @@ -111,7 +111,7 @@ LLPanelGroupInvite::impl::~impl() } void LLPanelGroupInvite::impl::addUsers(const std::vector<std::string>& names, - const std::vector<LLUUID>& agent_ids) + const uuid_vec_t& agent_ids) { std::string name; LLUUID id; @@ -361,7 +361,7 @@ void LLPanelGroupInvite::impl::callbackClickOK(void* userdata) //static void LLPanelGroupInvite::impl::callbackAddUsers(const std::vector<std::string>& names, - const std::vector<LLUUID>& ids, + const uuid_vec_t& ids, void* user_data) { impl* selfp = (impl*) user_data; @@ -399,7 +399,7 @@ void LLPanelGroupInvite::clear() mImplementation->mOKButton->setEnabled(FALSE); } -void LLPanelGroupInvite::addUsers(std::vector<LLUUID>& agent_ids) +void LLPanelGroupInvite::addUsers(uuid_vec_t& agent_ids) { std::vector<std::string> names; for (S32 i = 0; i < (S32)agent_ids.size(); i++) @@ -456,7 +456,7 @@ void LLPanelGroupInvite::addUsers(std::vector<LLUUID>& agent_ids) void LLPanelGroupInvite::addUserCallback(const LLUUID& id, const std::string& first_name, const std::string& last_name) { std::vector<std::string> names; - std::vector<LLUUID> agent_ids; + uuid_vec_t agent_ids; std::string full_name = first_name + " " + last_name; agent_ids.push_back(id); names.push_back(first_name + " " + last_name); diff --git a/indra/newview/llpanelgroupinvite.h b/indra/newview/llpanelgroupinvite.h index b095dd2395..2ed443ed46 100644 --- a/indra/newview/llpanelgroupinvite.h +++ b/indra/newview/llpanelgroupinvite.h @@ -42,7 +42,7 @@ public: LLPanelGroupInvite(const LLUUID& group_id); ~LLPanelGroupInvite(); - void addUsers(std::vector<LLUUID>& agent_ids); + void addUsers(uuid_vec_t& agent_ids); /** * this callback is being used to add a user whose fullname isn't been loaded before invoking of addUsers(). */ diff --git a/indra/newview/llpanelgrouproles.cpp b/indra/newview/llpanelgrouproles.cpp index c6287472fe..0c24e6ad22 100644 --- a/indra/newview/llpanelgrouproles.cpp +++ b/indra/newview/llpanelgrouproles.cpp @@ -859,7 +859,7 @@ void LLPanelGroupMembersSubTab::handleMemberSelect() if (selection.empty()) return; // Build a vector of all selected members, and gather allowed actions. - std::vector<LLUUID> selected_members; + uuid_vec_t selected_members; U64 allowed_by_all = 0xffffffffffffLL; U64 allowed_by_some = 0; @@ -925,8 +925,8 @@ void LLPanelGroupMembersSubTab::handleMemberSelect() if (cb_enable && (count > 0) && role_id == gdatap->mOwnerRole) { // Check if any owners besides this agent are selected. - std::vector<LLUUID>::const_iterator member_iter; - std::vector<LLUUID>::const_iterator member_end = + uuid_vec_t::const_iterator member_iter; + uuid_vec_t::const_iterator member_end = selected_members.end(); for (member_iter = selected_members.begin(); member_iter != member_end; @@ -952,7 +952,7 @@ void LLPanelGroupMembersSubTab::handleMemberSelect() //now see if there are any role changes for the selected //members and remember to include them - std::vector<LLUUID>::iterator sel_mem_iter = selected_members.begin(); + uuid_vec_t::iterator sel_mem_iter = selected_members.begin(); for (; sel_mem_iter != selected_members.end(); sel_mem_iter++) { LLRoleMemberChangeType type; @@ -1009,7 +1009,7 @@ void LLPanelGroupMembersSubTab::handleMemberSelect() check->setTentative( (0 != count) && (selected_members.size() != - (std::vector<LLUUID>::size_type)count)); + (uuid_vec_t::size_type)count)); //NOTE: as of right now a user can break the group //by removing himself from a role if he is the @@ -1084,7 +1084,7 @@ void LLPanelGroupMembersSubTab::onEjectMembers(void *userdata) void LLPanelGroupMembersSubTab::handleEjectMembers() { //send down an eject message - std::vector<LLUUID> selected_members; + uuid_vec_t selected_members; std::vector<LLScrollListItem*> selection = mMembersList->getAllSelected(); if (selection.empty()) return; @@ -1105,13 +1105,13 @@ void LLPanelGroupMembersSubTab::handleEjectMembers() selected_members); } -void LLPanelGroupMembersSubTab::sendEjectNotifications(const LLUUID& group_id, const std::vector<LLUUID>& selected_members) +void LLPanelGroupMembersSubTab::sendEjectNotifications(const LLUUID& group_id, const uuid_vec_t& selected_members) { LLGroupMgrGroupData* group_data = LLGroupMgr::getInstance()->getGroupData(group_id); if (group_data) { - for (std::vector<LLUUID>::const_iterator i = selected_members.begin(); i != selected_members.end(); ++i) + for (uuid_vec_t::const_iterator i = selected_members.begin(); i != selected_members.end(); ++i) { LLSD args; std::string name; @@ -1437,7 +1437,7 @@ U64 LLPanelGroupMembersSubTab::getAgentPowersBasedOnRoleChanges(const LLUUID& ag if ( role_change_datap ) { - std::vector<LLUUID> roles_to_be_removed; + uuid_vec_t roles_to_be_removed; for (role_change_data_map_t::iterator role = role_change_datap->begin(); role != role_change_datap->end(); ++ role) @@ -2086,8 +2086,8 @@ void LLPanelGroupRolesSubTab::buildMembersList() LLGroupRoleData* rdatap = (*rit).second; if (rdatap) { - std::vector<LLUUID>::const_iterator mit = rdatap->getMembersBegin(); - std::vector<LLUUID>::const_iterator end = rdatap->getMembersEnd(); + uuid_vec_t::const_iterator mit = rdatap->getMembersBegin(); + uuid_vec_t::const_iterator end = rdatap->getMembersEnd(); for ( ; mit != end; ++mit) { mAssignedMembersList->addNameItem((*mit)); diff --git a/indra/newview/llpanelgrouproles.h b/indra/newview/llpanelgrouproles.h index eac22a6338..98cebe9882 100644 --- a/indra/newview/llpanelgrouproles.h +++ b/indra/newview/llpanelgrouproles.h @@ -173,7 +173,7 @@ public: static void onEjectMembers(void*); void handleEjectMembers(); - void sendEjectNotifications(const LLUUID& group_id, const std::vector<LLUUID>& selected_members); + void sendEjectNotifications(const LLUUID& group_id, const uuid_vec_t& selected_members); static void onRoleCheck(LLUICtrl* check, void* user_data); void handleRoleCheck(const LLUUID& role_id, diff --git a/indra/newview/llpanellandmarkinfo.cpp b/indra/newview/llpanellandmarkinfo.cpp index 143a64d08b..3dbe9a7f59 100644 --- a/indra/newview/llpanellandmarkinfo.cpp +++ b/indra/newview/llpanellandmarkinfo.cpp @@ -36,6 +36,7 @@ #include "llcombobox.h" #include "lliconctrl.h" +#include "llinventoryfunctions.h" #include "lllineeditor.h" #include "lltextbox.h" #include "lltexteditor.h" diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp index 879fbba9cd..4cde02c1ce 100644 --- a/indra/newview/llpanellandmarks.cpp +++ b/indra/newview/llpanellandmarks.cpp @@ -49,6 +49,7 @@ #include "lldndbutton.h" #include "llfloaterworldmap.h" #include "llfolderviewitem.h" +#include "llinventorymodelbackgroundfetch.h" #include "llinventorypanel.h" #include "lllandmarkactions.h" #include "llplacesinventorybridge.h" @@ -534,7 +535,7 @@ void LLLandmarksPanel::initLandmarksInventoryPanel() // subscribe to have auto-rename functionality while creating New Folder mLandmarksInventoryPanel->setSelectCallback(boost::bind(&LLInventoryPanel::onSelectionChange, mLandmarksInventoryPanel, _1, _2)); - initAccordion("tab_landmarks", mLandmarksInventoryPanel, true); + mMyLandmarksAccordionTab = initAccordion("tab_landmarks", mLandmarksInventoryPanel, true); } void LLLandmarksPanel::initMyInventoryPanel() @@ -556,7 +557,7 @@ void LLLandmarksPanel::initLibraryInventoryPanel() const LLUUID &landmarks_cat = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK, false, true); if (landmarks_cat.notNull()) { - gInventory.startBackgroundFetch(landmarks_cat); + LLInventoryModelBackgroundFetch::instance().start(landmarks_cat); } // Expanding "Library" tab for new users who have no landmarks in "My Inventory". @@ -588,7 +589,7 @@ void LLLandmarksPanel::initLandmarksPanel(LLPlacesInventoryPanel* inventory_list inventory_list->saveFolderState(); } -void LLLandmarksPanel::initAccordion(const std::string& accordion_tab_name, LLPlacesInventoryPanel* inventory_list, bool expand_tab) +LLAccordionCtrlTab* LLLandmarksPanel::initAccordion(const std::string& accordion_tab_name, LLPlacesInventoryPanel* inventory_list, bool expand_tab) { LLAccordionCtrlTab* accordion_tab = getChild<LLAccordionCtrlTab>(accordion_tab_name); @@ -596,6 +597,7 @@ void LLLandmarksPanel::initAccordion(const std::string& accordion_tab_name, LLPl accordion_tab->setDropDownStateChangedCallback( boost::bind(&LLLandmarksPanel::onAccordionExpandedCollapsed, this, _2, inventory_list)); accordion_tab->setDisplayChildren(expand_tab); + return accordion_tab; } void LLLandmarksPanel::onAccordionExpandedCollapsed(const LLSD& param, LLPlacesInventoryPanel* inventory_list) @@ -619,7 +621,7 @@ void LLLandmarksPanel::onAccordionExpandedCollapsed(const LLSD& param, LLPlacesI if (!gInventory.isCategoryComplete(cat_id)) */ { - gInventory.startBackgroundFetch(cat_id); + LLInventoryModelBackgroundFetch::instance().start(cat_id); } // Apply filter substring because it might have been changed @@ -776,6 +778,11 @@ void LLLandmarksPanel::onAddAction(const LLSD& userdata) const //in case My Landmarks tab is completely empty (thus cannot be determined as being selected) menu_create_inventory_item(mLandmarksInventoryPanel->getRootFolder(), NULL, LLSD("category"), gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK)); + + if (mMyLandmarksAccordionTab) + { + mMyLandmarksAccordionTab->changeOpenClose(false); + } } } } @@ -940,7 +947,8 @@ bool LLLandmarksPanel::isActionEnabled(const LLSD& userdata) const ) { // disable some commands for multi-selection. EXT-1757 - if (root_folder_view->getSelectedCount() > 1) + if (root_folder_view && + root_folder_view->getSelectedCount() > 1) { return false; } diff --git a/indra/newview/llpanellandmarks.h b/indra/newview/llpanellandmarks.h index 2b46ba9933..c9217a4b2f 100644 --- a/indra/newview/llpanellandmarks.h +++ b/indra/newview/llpanellandmarks.h @@ -112,7 +112,7 @@ private: void initMyInventoryPanel(); void initLibraryInventoryPanel(); void initLandmarksPanel(LLPlacesInventoryPanel* inventory_list); - void initAccordion(const std::string& accordion_tab_name, LLPlacesInventoryPanel* inventory_list, bool expand_tab); + LLAccordionCtrlTab* initAccordion(const std::string& accordion_tab_name, LLPlacesInventoryPanel* inventory_list, bool expand_tab); void onAccordionExpandedCollapsed(const LLSD& param, LLPlacesInventoryPanel* inventory_list); void deselectOtherThan(const LLPlacesInventoryPanel* inventory_list); @@ -169,6 +169,8 @@ private: typedef std::vector<LLAccordionCtrlTab*> accordion_tabs_t; accordion_tabs_t mAccordionTabs; + + LLAccordionCtrlTab* mMyLandmarksAccordionTab; }; #endif //LL_LLPANELLANDMARKS_H diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp index 7bd03167fd..ee4dcc44fe 100644 --- a/indra/newview/llpanellogin.cpp +++ b/indra/newview/llpanellogin.cpp @@ -679,6 +679,9 @@ void LLPanelLogin::refreshLocation( bool force_visible ) show_start = gSavedSettings.getBOOL("ShowStartLocation"); } + // Update the value of the location combo. + updateLocationUI(); + sInstance->childSetVisible("start_location_combo", show_start); sInstance->childSetVisible("start_location_text", show_start); diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index 421c9df9a1..dbc40959d7 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -40,10 +40,12 @@ #include "llfloaterinventory.h" #include "llinventorybridge.h" #include "llinventoryfunctions.h" +#include "llinventorymodelbackgroundfetch.h" #include "llinventorypanel.h" #include "llfiltereditor.h" #include "llfloaterreg.h" #include "llpreviewtexture.h" +#include "llresmgr.h" #include "llscrollcontainer.h" #include "llsdserialize.h" #include "llspinctrl.h" @@ -418,7 +420,7 @@ void LLPanelMainInventory::onFilterEdit(const std::string& search_string ) return; } - gInventory.startBackgroundFetch(); + LLInventoryModelBackgroundFetch::instance().start(); mFilterSubString = search_string; if (mActivePanel->getFilterSubString().empty() && mFilterSubString.empty()) @@ -498,7 +500,7 @@ void LLPanelMainInventory::onFilterSelected() if (filter->isActive()) { // If our filter is active we may be the first thing requiring a fetch so we better start it here. - gInventory.startBackgroundFetch(); + LLInventoryModelBackgroundFetch::instance().start(); } setFilterTextFromFilter(); } @@ -538,7 +540,7 @@ BOOL LLPanelMainInventory::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, // virtual void LLPanelMainInventory::changed(U32) { - // empty, but must have this defined for abstract base class. + updateItemcountText(); } @@ -550,6 +552,34 @@ void LLPanelMainInventory::draw() mFilterEditor->setText(mFilterSubString); } LLPanel::draw(); + updateItemcountText(); +} + +void LLPanelMainInventory::updateItemcountText() +{ + LLLocale locale(LLLocale::USER_LOCALE); + std::string item_count_string; + LLResMgr::getInstance()->getIntegerString(item_count_string, gInventory.getItemCount()); + + LLStringUtil::format_map_t string_args; + string_args["[ITEM_COUNT]"] = item_count_string; + string_args["[FILTER]"] = getFilterText(); + + std::string text = ""; + + if (LLInventoryModelBackgroundFetch::instance().backgroundFetchActive()) + { + text = getString("ItemcountFetching", string_args); + } + else if (LLInventoryModelBackgroundFetch::instance().isEverythingFetched()) + { + text = getString("ItemcountCompleted", string_args); + } + else + { + text = getString("ItemcountUnknown"); + } + childSetText("ItemcountText",text); } void LLPanelMainInventory::setFilterTextFromFilter() @@ -571,7 +601,7 @@ void LLPanelMainInventory::toggleFindOptions() if (parent_floater) // Seraph: Fix this, shouldn't be null even for sidepanel parent_floater->addDependentFloater(mFinderHandle); // start background fetch of folders - gInventory.startBackgroundFetch(); + LLInventoryModelBackgroundFetch::instance().start(); } else { diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h index d9ea0da2da..b43e057f83 100644 --- a/indra/newview/llpanelmaininventory.h +++ b/indra/newview/llpanelmaininventory.h @@ -113,7 +113,8 @@ protected: void setSortBy(const LLSD& userdata); void saveTexture(const LLSD& userdata); bool isSaveTextureEnabled(const LLSD& userdata); - + void updateItemcountText(); + private: LLFloaterInventoryFinder* getFinder(); diff --git a/indra/newview/llpanelme.cpp b/indra/newview/llpanelme.cpp index 3504cbd1ef..35acf8edcc 100644 --- a/indra/newview/llpanelme.cpp +++ b/indra/newview/llpanelme.cpp @@ -36,6 +36,7 @@ #include "llavatarconstants.h" #include "llpanelme.h" #include "llagent.h" +#include "llagentcamera.h" #include "llagentwearables.h" #include "lliconctrl.h" #include "llsidetray.h" @@ -144,7 +145,7 @@ void LLPanelMe::onEditAppearanceClicked() { if (gAgentWearables.areWearablesLoaded()) { - gAgent.changeCameraToCustomizeAvatar(); + gAgentCamera.changeCameraToCustomizeAvatar(); } } diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp index 9e92ee337f..c43cbf5819 100644 --- a/indra/newview/llpanelobjectinventory.cpp +++ b/indra/newview/llpanelobjectinventory.cpp @@ -609,7 +609,9 @@ void LLTaskInvFVBridge::performAction(LLFolderView* folder, LLInventoryModel* mo { if (price > 0 && price > gStatusBar->getBalance()) { - LLFloaterBuyCurrency::buyCurrency(LLTrans::getString("this_costs"), price); + LLStringUtil::format_map_t args; + args["AMOUNT"] = llformat("%d", price); + LLFloaterBuyCurrency::buyCurrency(LLTrans::getString("this_costs", args), price); } else { @@ -1188,7 +1190,8 @@ public: LLTaskObjectBridge( LLPanelObjectInventory* panel, const LLUUID& uuid, - const std::string& name); + const std::string& name, + U32 flags = 0); virtual LLUIImagePtr getIcon() const; }; @@ -1196,8 +1199,9 @@ public: LLTaskObjectBridge::LLTaskObjectBridge( LLPanelObjectInventory* panel, const LLUUID& uuid, - const std::string& name) : - LLTaskInvFVBridge(panel, uuid, name) + const std::string& name, + U32 flags) : + LLTaskInvFVBridge(panel, uuid, name, flags) { } @@ -1442,9 +1446,15 @@ LLTaskInvFVBridge* LLTaskInvFVBridge::createObjectBridge(LLPanelObjectInventory* // object->getName()); break; case LLAssetType::AT_OBJECT: + { + item = dynamic_cast<LLInventoryItem*>(object); + U32 flags = ( NULL == item ? 0 : item->getFlags() ); + new_bridge = new LLTaskObjectBridge(panel, object->getUUID(), - object->getName()); + object->getName(), + flags); + } break; case LLAssetType::AT_NOTECARD: new_bridge = new LLTaskNotecardBridge(panel, @@ -1578,7 +1588,7 @@ void LLPanelObjectInventory::reset() p.title = "task inventory"; p.task_id = getTaskUUID(); p.parent_panel = this; - p.tool_tip= p.name; + p.tool_tip= LLTrans::getString("PanelContentsTooltip"); mFolders = LLUICtrlFactory::create<LLFolderView>(p); // this ensures that we never say "searching..." or "no items found" mFolders->getFilter()->setShowFolderState(LLInventoryFilter::SHOW_ALL_FOLDERS); diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp index c2f2d32142..dd320f8328 100644 --- a/indra/newview/llpaneloutfitsinventory.cpp +++ b/indra/newview/llpaneloutfitsinventory.cpp @@ -43,6 +43,7 @@ #include "llfloaterinventory.h" #include "llfoldervieweventlistener.h" #include "llinventoryfunctions.h" +#include "llinventorymodelbackgroundfetch.h" #include "llinventorypanel.h" #include "lllandmark.h" #include "lllineeditor.h" @@ -217,7 +218,7 @@ void LLPanelOutfitsInventory::onSearchEdit(const std::string& string) getRootFolder()->scrollToShowSelection(); } - gInventory.startBackgroundFetch(); + LLInventoryModelBackgroundFetch::instance().start(); if (mActivePanel->getFilterSubString().empty() && string.empty()) { @@ -271,7 +272,7 @@ void LLPanelOutfitsInventory::onSave() { std::string outfit_name; - if (!LLAppearanceManager::getInstance()->getBaseOutfitName(outfit_name)) + if (!LLAppearanceMgr::getInstance()->getBaseOutfitName(outfit_name)) { outfit_name = LLViewerFolderType::lookupNewCategoryName(LLFolderType::FT_OUTFIT); } diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 03e8ab644e..8a1be2706c 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -134,13 +134,13 @@ public: typedef std::map < LLUUID, LLVector3d > id_to_pos_map_t; LLAvatarItemDistanceComparator() {}; - void updateAvatarsPositions(std::vector<LLVector3d>& positions, std::vector<LLUUID>& uuids) + void updateAvatarsPositions(std::vector<LLVector3d>& positions, uuid_vec_t& uuids) { std::vector<LLVector3d>::const_iterator pos_it = positions.begin(), pos_end = positions.end(); - std::vector<LLUUID>::const_iterator + uuid_vec_t::const_iterator id_it = uuids.begin(), id_end = uuids.end(); @@ -756,7 +756,7 @@ void LLPanelPeople::updateButtons() //bool recent_tab_active = (cur_tab == RECENT_TAB_NAME); LLUUID selected_id; - std::vector<LLUUID> selected_uuids; + uuid_vec_t selected_uuids; getCurrentItemIDs(selected_uuids); bool item_selected = (selected_uuids.size() == 1); bool multiple_selected = (selected_uuids.size() >= 1); @@ -852,7 +852,7 @@ LLUUID LLPanelPeople::getCurrentItemID() const return LLUUID::null; } -void LLPanelPeople::getCurrentItemIDs(std::vector<LLUUID>& selected_uuids) const +void LLPanelPeople::getCurrentItemIDs(uuid_vec_t& selected_uuids) const { std::string cur_tab = getActiveTabName(); @@ -1063,10 +1063,10 @@ void LLPanelPeople::onAddFriendButtonClicked() } } -bool LLPanelPeople::isItemsFreeOfFriends(const std::vector<LLUUID>& uuids) +bool LLPanelPeople::isItemsFreeOfFriends(const uuid_vec_t& uuids) { const LLAvatarTracker& av_tracker = LLAvatarTracker::instance(); - for ( std::vector<LLUUID>::const_iterator + for ( uuid_vec_t::const_iterator id = uuids.begin(), id_end = uuids.end(); id != id_end; ++id ) @@ -1094,7 +1094,7 @@ void LLPanelPeople::onAddFriendWizButtonClicked() void LLPanelPeople::onDeleteFriendButtonClicked() { - std::vector<LLUUID> selected_uuids; + uuid_vec_t selected_uuids; getCurrentItemIDs(selected_uuids); if (selected_uuids.size() == 1) @@ -1121,7 +1121,7 @@ void LLPanelPeople::onChatButtonClicked() void LLPanelPeople::onImButtonClicked() { - std::vector<LLUUID> selected_uuids; + uuid_vec_t selected_uuids; getCurrentItemIDs(selected_uuids); if ( selected_uuids.size() == 1 ) { @@ -1143,7 +1143,7 @@ void LLPanelPeople::onActivateButtonClicked() // static void LLPanelPeople::onAvatarPicked( const std::vector<std::string>& names, - const std::vector<LLUUID>& ids) + const uuid_vec_t& ids) { if (!names.empty() && !ids.empty()) LLAvatarActions::requestFriendshipDialog(ids[0], names[0]); @@ -1293,7 +1293,7 @@ bool LLPanelPeople::onRecentViewSortMenuItemCheck(const LLSD& userdata) void LLPanelPeople::onCallButtonClicked() { - std::vector<LLUUID> selected_uuids; + uuid_vec_t selected_uuids; getCurrentItemIDs(selected_uuids); if (selected_uuids.size() == 1) diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index 6d3d436156..891381e2de 100644 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -78,12 +78,12 @@ private: void updateRecentList(); bool isFriendOnline(const LLUUID& id); - bool isItemsFreeOfFriends(const std::vector<LLUUID>& uuids); + bool isItemsFreeOfFriends(const uuid_vec_t& uuids); void updateButtons(); std::string getActiveTabName() const; LLUUID getCurrentItemID() const; - void getCurrentItemIDs(std::vector<LLUUID>& selected_uuids) const; + void getCurrentItemIDs(uuid_vec_t& selected_uuids) const; void buttonSetVisible(std::string btn_name, BOOL visible); void buttonSetEnabled(const std::string& btn_name, bool enabled); void buttonSetAction(const std::string& btn_name, const commit_signal_t::slot_type& cb); @@ -134,7 +134,7 @@ private: // misc callbacks static void onAvatarPicked( const std::vector<std::string>& names, - const std::vector<LLUUID>& ids); + const uuid_vec_t& ids); void onFriendsAccordionExpandedCollapsed(LLUICtrl* ctrl, const LLSD& param, LLAvatarList* avatar_list); diff --git a/indra/newview/llpanelpeoplemenus.cpp b/indra/newview/llpanelpeoplemenus.cpp index 854651cd01..8b365c6433 100644 --- a/indra/newview/llpanelpeoplemenus.cpp +++ b/indra/newview/llpanelpeoplemenus.cpp @@ -72,7 +72,7 @@ ContextMenu::~ContextMenu() } } -void ContextMenu::show(LLView* spawning_view, const std::vector<LLUUID>& uuids, S32 x, S32 y) +void ContextMenu::show(LLView* spawning_view, const uuid_vec_t& uuids, S32 x, S32 y) { if (mMenu) { @@ -177,7 +177,7 @@ bool NearbyMenu::enableContextMenuItem(const LLSD& userdata) bool result = (mUUIDs.size() > 0); - std::vector<LLUUID>::const_iterator + uuid_vec_t::const_iterator id = mUUIDs.begin(), uuids_end = mUUIDs.end(); @@ -200,7 +200,7 @@ bool NearbyMenu::enableContextMenuItem(const LLSD& userdata) bool result = (mUUIDs.size() > 0); - std::vector<LLUUID>::const_iterator + uuid_vec_t::const_iterator id = mUUIDs.begin(), uuids_end = mUUIDs.end(); diff --git a/indra/newview/llpanelpeoplemenus.h b/indra/newview/llpanelpeoplemenus.h index 913638d8c8..8e12710afc 100644 --- a/indra/newview/llpanelpeoplemenus.h +++ b/indra/newview/llpanelpeoplemenus.h @@ -52,7 +52,7 @@ public: * * @param uuids - an array of avatar or group ids */ - /*virtual*/ void show(LLView* spawning_view, const std::vector<LLUUID>& uuids, S32 x, S32 y); + /*virtual*/ void show(LLView* spawning_view, const uuid_vec_t& uuids, S32 x, S32 y); virtual void hide(); @@ -60,7 +60,7 @@ protected: virtual LLContextMenu* createMenu() = 0; - std::vector<LLUUID> mUUIDs; + uuid_vec_t mUUIDs; LLContextMenu* mMenu; LLHandle<LLView> mMenuHandle; }; diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp index 4ac57bc7a4..bde8d02885 100644 --- a/indra/newview/llpanelpicks.cpp +++ b/indra/newview/llpanelpicks.cpp @@ -828,7 +828,11 @@ void LLPanelPicks::onPanelClassifiedSave(LLPanelClassifiedEdit* panel) else if(panel->isNewWithErrors()) { LLClassifiedItem* c_item = dynamic_cast<LLClassifiedItem*>(mClassifiedsList->getSelectedItem()); - c_item->fillIn(panel); + llassert(c_item); + if (c_item) + { + c_item->fillIn(panel); + } } else { @@ -971,6 +975,11 @@ void LLPanelPicks::onPanelClassifiedEdit() } LLClassifiedItem* c_item = dynamic_cast<LLClassifiedItem*>(mClassifiedsList->getSelectedItem()); + llassert(c_item); + if (!c_item) + { + return; + } LLSD params; params["classified_id"] = c_item->getClassifiedId(); diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp index cdd79b1559..1a1650c38b 100644 --- a/indra/newview/llpanelplaceprofile.cpp +++ b/indra/newview/llpanelplaceprofile.cpp @@ -567,9 +567,13 @@ void LLPanelPlaceProfile::onForSaleBannerClick() if(parcel->getLocalID() == mSelectedParcelID && mLastSelectedRegionID ==selected_region->getRegionID()) { - if(parcel->getSalePrice() - gStatusBar->getBalance() > 0) + S32 price = parcel->getSalePrice(); + + if(price - gStatusBar->getBalance() > 0) { - LLFloaterBuyCurrency::buyCurrency(LLTrans::getString("buying_selected_land"), parcel->getSalePrice()); + LLStringUtil::format_map_t args; + args["AMOUNT"] = llformat("%d", price); + LLFloaterBuyCurrency::buyCurrency(LLTrans::getString("buying_selected_land", args), price); } else { diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp index 26b57c003b..54455afa4f 100644 --- a/indra/newview/llpanelplaces.cpp +++ b/indra/newview/llpanelplaces.cpp @@ -278,6 +278,11 @@ BOOL LLPanelPlaces::postBuild() mFilterEditor = getChild<LLFilterEditor>("Filter"); if (mFilterEditor) { + //when list item is being clicked the filter editor looses focus + //committing on focus lost leads to detaching list items + //BUT a detached list item cannot be made selected and must not be clicked onto + mFilterEditor->setCommitOnFocusLost(false); + mFilterEditor->setCommitCallback(boost::bind(&LLPanelPlaces::onFilterEdit, this, _2, false)); } @@ -546,7 +551,9 @@ void LLPanelPlaces::onTeleportButtonClicked() { LLSD payload; payload["asset_id"] = mItem->getAssetUUID(); - LLNotificationsUtil::add("TeleportFromLandmark", LLSD(), payload); + LLSD args; + args["LOCATION"] = mItem->getName(); + LLNotificationsUtil::add("TeleportFromLandmark", args, payload); } else if (mPlaceInfoType == AGENT_INFO_TYPE || mPlaceInfoType == REMOTE_PLACE_INFO_TYPE || @@ -1001,9 +1008,9 @@ void LLPanelPlaces::changedGlobalPos(const LLVector3d &global_pos) updateVerbs(); } -void LLPanelPlaces::showAddedLandmarkInfo(const std::vector<LLUUID>& items) +void LLPanelPlaces::showAddedLandmarkInfo(const uuid_vec_t& items) { - for (std::vector<LLUUID>::const_iterator item_iter = items.begin(); + for (uuid_vec_t::const_iterator item_iter = items.begin(); item_iter != items.end(); ++item_iter) { diff --git a/indra/newview/llpanelplaces.h b/indra/newview/llpanelplaces.h index 78fcbbb11d..97cf43d222 100644 --- a/indra/newview/llpanelplaces.h +++ b/indra/newview/llpanelplaces.h @@ -73,7 +73,7 @@ public: void changedGlobalPos(const LLVector3d &global_pos); // Opens landmark info panel when agent creates or receives landmark. - void showAddedLandmarkInfo(const std::vector<LLUUID>& items); + void showAddedLandmarkInfo(const uuid_vec_t& items); void setItem(LLInventoryItem* item); diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp index a53a3ba1ad..ab2f9284f7 100644 --- a/indra/newview/llpanelprimmediacontrols.cpp +++ b/indra/newview/llpanelprimmediacontrols.cpp @@ -33,6 +33,7 @@ //LLPanelPrimMediaControls #include "llagent.h" +#include "llagentcamera.h" #include "llparcel.h" #include "llpanel.h" #include "llselectmgr.h" @@ -1010,7 +1011,7 @@ void LLPanelPrimMediaControls::updateZoom() { case ZOOM_NONE: { - gAgent.setFocusOnAvatar(TRUE, ANIMATE); + gAgentCamera.setFocusOnAvatar(TRUE, ANIMATE); break; } case ZOOM_FAR: @@ -1030,7 +1031,7 @@ void LLPanelPrimMediaControls::updateZoom() } default: { - gAgent.setFocusOnAvatar(TRUE, ANIMATE); + gAgentCamera.setFocusOnAvatar(TRUE, ANIMATE); break; } } diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp index 2748daaffa..0a20ff6226 100644 --- a/indra/newview/llparticipantlist.cpp +++ b/indra/newview/llparticipantlist.cpp @@ -445,7 +445,7 @@ LLContextMenu* LLParticipantList::LLParticipantListMenu::createMenu() return main_menu; } -void LLParticipantList::LLParticipantListMenu::show(LLView* spawning_view, const std::vector<LLUUID>& uuids, S32 x, S32 y) +void LLParticipantList::LLParticipantListMenu::show(LLView* spawning_view, const uuid_vec_t& uuids, S32 x, S32 y) { LLPanelPeopleMenus::ContextMenu::show(spawning_view, uuids, x, y); @@ -615,7 +615,7 @@ bool LLParticipantList::LLParticipantListMenu::enableContextMenuItem(const LLSD& bool result = (mUUIDs.size() > 0); - std::vector<LLUUID>::const_iterator + uuid_vec_t::const_iterator id = mUUIDs.begin(), uuids_end = mUUIDs.end(); diff --git a/indra/newview/llparticipantlist.h b/indra/newview/llparticipantlist.h index e1b1b5af00..d9ca4230a9 100644 --- a/indra/newview/llparticipantlist.h +++ b/indra/newview/llparticipantlist.h @@ -152,7 +152,7 @@ class LLParticipantList public: LLParticipantListMenu(LLParticipantList& parent):mParent(parent){}; /*virtual*/ LLContextMenu* createMenu(); - /*virtual*/ void show(LLView* spawning_view, const std::vector<LLUUID>& uuids, S32 x, S32 y); + /*virtual*/ void show(LLView* spawning_view, const uuid_vec_t& uuids, S32 x, S32 y); protected: LLParticipantList& mParent; private: diff --git a/indra/newview/llpopupview.cpp b/indra/newview/llpopupview.cpp index d8ad59c90c..b010f4d72f 100644 --- a/indra/newview/llpopupview.cpp +++ b/indra/newview/llpopupview.cpp @@ -207,11 +207,7 @@ void LLPopupView::addPopup(LLView* popup) { if (popup) { - popup_list_t::iterator iter = std::find(mPopups.begin(), mPopups.end(), popup->getHandle()); - if(iter != mPopups.end()) - { - mPopups.erase(iter); - } + mPopups.remove(popup->getHandle()); mPopups.push_front(popup->getHandle()); } } @@ -220,11 +216,7 @@ void LLPopupView::removePopup(LLView* popup) { if (popup) { - popup_list_t::iterator iter = std::find(mPopups.begin(), mPopups.end(), popup->getHandle()); - if(iter != mPopups.end()) - { - mPopups.erase(iter); - } + mPopups.remove(popup->getHandle()); popup->onTopLost(); } } diff --git a/indra/newview/llpreview.cpp b/indra/newview/llpreview.cpp index 0b0c03e9e9..d5ec3a36c3 100644 --- a/indra/newview/llpreview.cpp +++ b/indra/newview/llpreview.cpp @@ -179,10 +179,9 @@ void LLPreview::onCommit() // update the object itself. if( item->getType() == LLAssetType::AT_OBJECT ) { - LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); - if( avatar ) + if (isAgentAvatarValid()) { - LLViewerObject* obj = avatar->getWornAttachment( item->getUUID() ); + LLViewerObject* obj = gAgentAvatarp->getWornAttachment( item->getUUID() ); if( obj ) { LLSelectMgr::getInstance()->deselectAll(); diff --git a/indra/newview/llpreviewanim.cpp b/indra/newview/llpreviewanim.cpp index 0cc747f789..262961b73b 100644 --- a/indra/newview/llpreviewanim.cpp +++ b/indra/newview/llpreviewanim.cpp @@ -71,7 +71,7 @@ BOOL LLPreviewAnim::postBuild() const LLInventoryItem* item = getItem(); if(item) { - gAgent.getAvatarObject()->createMotion(item->getAssetUUID()); // preload the animation + gAgentAvatarp->createMotion(item->getAssetUUID()); // preload the animation childSetText("desc", item->getDescription()); } @@ -125,10 +125,7 @@ void LLPreviewAnim::playAnim( void *userdata ) { self->mPauseRequest = NULL; gAgent.sendAnimationRequest(itemID, ANIM_REQUEST_START); - - LLVOAvatar* avatar = gAgent.getAvatarObject(); - LLMotion* motion = avatar->findMotion(itemID); - + LLMotion* motion = gAgentAvatarp->findMotion(itemID); if (motion) { motion->setDeactivateCallback(&endAnimCallback, (void *)(new LLHandle<LLFloater>(self->getHandle()))); @@ -136,7 +133,7 @@ void LLPreviewAnim::playAnim( void *userdata ) } else { - gAgent.getAvatarObject()->stopMotion(itemID); + gAgentAvatarp->stopMotion(itemID); gAgent.sendAnimationRequest(itemID, ANIM_REQUEST_STOP); } } @@ -161,10 +158,8 @@ void LLPreviewAnim::auditionAnim( void *userdata ) if (self->childGetValue("Anim audition btn").asBoolean() ) { self->mPauseRequest = NULL; - gAgent.getAvatarObject()->startMotion(item->getAssetUUID()); - - LLVOAvatar* avatar = gAgent.getAvatarObject(); - LLMotion* motion = avatar->findMotion(itemID); + gAgentAvatarp->startMotion(item->getAssetUUID()); + LLMotion* motion = gAgentAvatarp->findMotion(itemID); if (motion) { @@ -173,7 +168,7 @@ void LLPreviewAnim::auditionAnim( void *userdata ) } else { - gAgent.getAvatarObject()->stopMotion(itemID); + gAgentAvatarp->stopMotion(itemID); gAgent.sendAnimationRequest(itemID, ANIM_REQUEST_STOP); } } @@ -186,11 +181,9 @@ void LLPreviewAnim::onClose(bool app_quitting) if(item) { - gAgent.getAvatarObject()->stopMotion(item->getAssetUUID()); + gAgentAvatarp->stopMotion(item->getAssetUUID()); gAgent.sendAnimationRequest(item->getAssetUUID(), ANIM_REQUEST_STOP); - - LLVOAvatar* avatar = gAgent.getAvatarObject(); - LLMotion* motion = avatar->findMotion(item->getAssetUUID()); + LLMotion* motion = gAgentAvatarp->findMotion(item->getAssetUUID()); if (motion) { diff --git a/indra/newview/llpreviewgesture.cpp b/indra/newview/llpreviewgesture.cpp index 57a8ca3d12..11cde47744 100644 --- a/indra/newview/llpreviewgesture.cpp +++ b/indra/newview/llpreviewgesture.cpp @@ -42,6 +42,8 @@ #include "llstring.h" #include "lldir.h" #include "llfloaterreg.h" +#include "llinventoryfunctions.h" +#include "llinventorymodelbackgroundfetch.h" #include "llmultigesture.h" #include "llnotificationsutil.h" #include "llvfile.h" @@ -97,7 +99,7 @@ protected: void LLInventoryGestureAvailable::done() { - for(item_ref_t::iterator it = mComplete.begin(); it != mComplete.end(); ++it) + for(uuid_vec_t::iterator it = mComplete.begin(); it != mComplete.end(); ++it) { LLPreviewGesture* preview = LLFloaterReg::findTypedInstance<LLPreviewGesture>("preview_gesture", *it); if(preview) @@ -131,10 +133,10 @@ LLPreviewGesture* LLPreviewGesture::show(const LLUUID& item_id, const LLUUID& ob // Start speculative download of sounds and animations const LLUUID animation_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_ANIMATION); - gInventory.startBackgroundFetch(animation_folder_id); + LLInventoryModelBackgroundFetch::instance().start(animation_folder_id); const LLUUID sound_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_SOUND); - gInventory.startBackgroundFetch(sound_folder_id); + LLInventoryModelBackgroundFetch::instance().start(sound_folder_id); // this will call refresh when we have everything. LLViewerInventoryItem* item = (LLViewerInventoryItem*)preview->getItem(); @@ -269,7 +271,7 @@ BOOL LLPreviewGesture::canClose() // virtual void LLPreviewGesture::onClose(bool app_quitting) { - LLGestureManager::instance().stopGesture(mPreviewGesture); + LLGestureMgr::instance().stopGesture(mPreviewGesture); } // virtual @@ -293,13 +295,13 @@ bool LLPreviewGesture::handleSaveChangesDialog(const LLSD& notification, const L switch(option) { case 0: // "Yes" - LLGestureManager::instance().stopGesture(mPreviewGesture); + LLGestureMgr::instance().stopGesture(mPreviewGesture); mCloseAfterSave = TRUE; onClickSave(this); break; case 1: // "No" - LLGestureManager::instance().stopGesture(mPreviewGesture); + LLGestureMgr::instance().stopGesture(mPreviewGesture); mDirty = FALSE; // Force the dirty flag because user has clicked NO on confirm save dialog... closeFloater(); break; @@ -784,7 +786,7 @@ void LLPreviewGesture::refresh() mOptionsText->setText(optionstext); - BOOL active = LLGestureManager::instance().isGestureActive(mItemUUID); + BOOL active = LLGestureMgr::instance().isGestureActive(mItemUUID); mActiveCheck->set(active); // Can only preview if there are steps @@ -1138,10 +1140,10 @@ void LLPreviewGesture::saveIfNeeded() // If this gesture is active, then we need to update the in-memory // active map with the new pointer. - if (!delayedUpload && LLGestureManager::instance().isGestureActive(mItemUUID)) + if (!delayedUpload && LLGestureMgr::instance().isGestureActive(mItemUUID)) { // gesture manager now owns the pointer - LLGestureManager::instance().replaceGesture(mItemUUID, gesture, asset_id); + LLGestureMgr::instance().replaceGesture(mItemUUID, gesture, asset_id); // replaceGesture may deactivate other gestures so let the // inventory know. @@ -1702,13 +1704,13 @@ void LLPreviewGesture::onClickDelete(void* data) void LLPreviewGesture::onCommitActive(LLUICtrl* ctrl, void* data) { LLPreviewGesture* self = (LLPreviewGesture*)data; - if (!LLGestureManager::instance().isGestureActive(self->mItemUUID)) + if (!LLGestureMgr::instance().isGestureActive(self->mItemUUID)) { - LLGestureManager::instance().activateGesture(self->mItemUUID); + LLGestureMgr::instance().activateGesture(self->mItemUUID); } else { - LLGestureManager::instance().deactivateGesture(self->mItemUUID); + LLGestureMgr::instance().deactivateGesture(self->mItemUUID); } // Make sure the (active) label in the inventory gets updated. @@ -1747,14 +1749,14 @@ void LLPreviewGesture::onClickPreview(void* data) self->mPreviewBtn->setLabel(self->getString("stop_txt")); // play it, and delete when done - LLGestureManager::instance().playGesture(self->mPreviewGesture); + LLGestureMgr::instance().playGesture(self->mPreviewGesture); self->refresh(); } else { // Will call onDonePreview() below - LLGestureManager::instance().stopGesture(self->mPreviewGesture); + LLGestureMgr::instance().stopGesture(self->mPreviewGesture); self->refresh(); } diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index f5a9f82d50..4167408fc3 100644 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -1090,8 +1090,7 @@ void LLPreviewLSL::onSave(void* userdata, BOOL close_after_save) // Save needs to compile the text in the buffer. If the compile // succeeds, then save both assets out to the database. If the compile -// fails, go ahead and save the text anyway so that the user doesn't -// get too fucked. +// fails, go ahead and save the text anyway. void LLPreviewLSL::saveIfNeeded() { // llinfos << "LLPreviewLSL::saveIfNeeded()" << llendl; diff --git a/indra/newview/llprogressview.cpp b/indra/newview/llprogressview.cpp index 120b584cd9..9b5e38d0aa 100644 --- a/indra/newview/llprogressview.cpp +++ b/indra/newview/llprogressview.cpp @@ -68,15 +68,16 @@ const F32 TOTAL_LOGIN_TIME = 10.f; // seconds, wild guess at time from GL contex S32 gLastStartAnimationFrame = 0; // human-style indexing, first image = 1 const S32 ANIMATION_FRAMES = 1; //13; +static LLRegisterPanelClassWrapper<LLProgressView> r("progress_view"); + + // XUI: Translate -LLProgressView::LLProgressView(const LLRect &rect) +LLProgressView::LLProgressView() : LLPanel(), mPercentDone( 0.f ), mMouseDownInActiveArea( false ), mUpdateEvents("LLProgressView") { - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_progress.xml"); - reshape(rect.getWidth(), rect.getHeight()); mUpdateEvents.listen("self", boost::bind(&LLProgressView::handleUpdate, this, _1)); } @@ -92,6 +93,9 @@ BOOL LLProgressView::postBuild() getChild<LLTextBox>("message_text")->setClickedCallback(onClickMessage, this); + // hidden initially, until we need it + LLPanel::setVisible(FALSE); + sInstance = this; return TRUE; } @@ -126,19 +130,23 @@ BOOL LLProgressView::handleKeyHere(KEY key, MASK mask) void LLProgressView::setVisible(BOOL visible) { + // hiding progress view if (getVisible() && !visible) { - mFadeTimer.start(); + // hiding progress view, so show menu bars + LLUI::getRootView()->getChildView("menu_bar_holder")->setVisible(TRUE); } + // showing progress view else if (!getVisible() && visible) { - gViewerWindow->addPopup(this); - + // showing progress view, so hide menu bars + LLUI::getRootView()->getChildView("menu_bar_holder")->setVisible(FALSE); + setFocus(TRUE); mFadeTimer.stop(); mProgressTimer.start(); - LLPanel::setVisible(visible); + LLPanel::setVisible(TRUE); } } @@ -148,7 +156,7 @@ void LLProgressView::draw() static LLTimer timer; // Paint bitmap if we've got one - glPushMatrix(); + glPushMatrix(); if (gStartTexture) { LLGLSUIDefault gls_ui; @@ -189,7 +197,7 @@ void LLProgressView::draw() // Fade is complete, release focus gFocusMgr.releaseFocusIfNeeded( this ); LLPanel::setVisible(FALSE); - gViewerWindow->removePopup(this); + mFadeTimer.stop(); gStartTexture = NULL; } diff --git a/indra/newview/llprogressview.h b/indra/newview/llprogressview.h index 6853674d88..374b14be83 100644 --- a/indra/newview/llprogressview.h +++ b/indra/newview/llprogressview.h @@ -44,7 +44,7 @@ class LLProgressBar; class LLProgressView : public LLPanel { public: - LLProgressView(const LLRect& rect); + LLProgressView(); virtual ~LLProgressView(); BOOL postBuild(); diff --git a/indra/newview/llrecentpeople.cpp b/indra/newview/llrecentpeople.cpp index bd46b5b56a..62c2ddfd9f 100644 --- a/indra/newview/llrecentpeople.cpp +++ b/indra/newview/llrecentpeople.cpp @@ -63,7 +63,7 @@ bool LLRecentPeople::contains(const LLUUID& id) const return mPeople.find(id) != mPeople.end(); } -void LLRecentPeople::get(std::vector<LLUUID>& result) const +void LLRecentPeople::get(uuid_vec_t& result) const { result.clear(); for (recent_people_t::const_iterator pos = mPeople.begin(); pos != mPeople.end(); ++pos) diff --git a/indra/newview/llrecentpeople.h b/indra/newview/llrecentpeople.h index e0f2faaec5..c718997f7e 100644 --- a/indra/newview/llrecentpeople.h +++ b/indra/newview/llrecentpeople.h @@ -79,7 +79,7 @@ public: * * @param result where to put the result. */ - void get(std::vector<LLUUID>& result) const; + void get(uuid_vec_t& result) const; const LLDate& getDate(const LLUUID& id) const; diff --git a/indra/newview/llscreenchannel.cpp b/indra/newview/llscreenchannel.cpp index a4426b370e..dffb5e5e12 100644 --- a/indra/newview/llscreenchannel.cpp +++ b/indra/newview/llscreenchannel.cpp @@ -710,9 +710,7 @@ void LLScreenChannel::hideToast(const LLUUID& notification_id) if(mToastList.end() != it) { ToastElem te = *it; - te.toast->setVisible(FALSE); - te.toast->stopTimer(); - mToastList.erase(it); + te.toast->hide(); } } diff --git a/indra/newview/llscrollingpanelparam.cpp b/indra/newview/llscrollingpanelparam.cpp index 32a915608e..7980fe1945 100644 --- a/indra/newview/llscrollingpanelparam.cpp +++ b/indra/newview/llscrollingpanelparam.cpp @@ -168,25 +168,25 @@ void LLScrollingPanelParam::draw() LLPanel::draw(); // Draw the hints over the "less" and "more" buttons. - glPushMatrix(); + gGL.pushUIMatrix(); { const LLRect& r = mHintMin->getRect(); F32 left = (F32)(r.mLeft + BTN_BORDER); F32 bot = (F32)(r.mBottom + BTN_BORDER); - glTranslatef(left, bot, 0.f); + gGL.translateUI(left, bot, 0.f); mHintMin->draw(); } - glPopMatrix(); + gGL.popUIMatrix(); - glPushMatrix(); + gGL.pushUIMatrix(); { const LLRect& r = mHintMax->getRect(); F32 left = (F32)(r.mLeft + BTN_BORDER); F32 bot = (F32)(r.mBottom + BTN_BORDER); - glTranslatef(left, bot, 0.f); + gGL.translateUI(left, bot, 0.f); mHintMax->draw(); } - glPopMatrix(); + gGL.popUIMatrix(); // Draw labels on top of the buttons @@ -209,7 +209,7 @@ void LLScrollingPanelParam::onSliderMoved(LLUICtrl* ctrl, void* userdata) if (current_weight != new_weight ) { self->mWearable->setVisualParamWeight( param->getID(), new_weight, FALSE ); - gAgent.getAvatarObject()->updateVisualParams(); + gAgentAvatarp->updateVisualParams(); } } @@ -298,7 +298,7 @@ void LLScrollingPanelParam::onHintHeldDown( LLVisualParamHint* hint ) && new_percent < slider->getMaxValue()) { mWearable->setVisualParamWeight( hint->getVisualParam()->getID(), new_weight, FALSE); - gAgent.getAvatarObject()->updateVisualParams(); + gAgentAvatarp->updateVisualParams(); slider->setValue( weightToPercent( new_weight ) ); } @@ -344,8 +344,7 @@ void LLScrollingPanelParam::onHintMaxMouseUp( void* userdata ) F32 elapsed_time = self->mMouseDownTimer.getElapsedTimeF32(); - LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); - if (avatar) + if (isAgentAvatarValid()) { LLVisualParamHint* hint = self->mHintMax; diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index d733574a9d..d03a492cd1 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -56,6 +56,7 @@ // viewer includes #include "llagent.h" +#include "llagentcamera.h" #include "llviewerwindow.h" #include "lldrawable.h" #include "llfloaterinspect.h" @@ -1474,7 +1475,7 @@ void LLSelectMgr::selectionSetImage(const LLUUID& imageid) object->sendTEUpdate(); // 1 particle effect per object LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM, TRUE); - effectp->setSourceObject(gAgent.getAvatarObject()); + effectp->setSourceObject(gAgentAvatarp); effectp->setTargetObject(object); effectp->setDuration(LL_HUD_DUR_SHORT); effectp->setColor(LLColor4U(gAgent.getEffectColor())); @@ -2872,7 +2873,7 @@ bool LLSelectMgr::confirmDelete(const LLSD& notification, const LLSD& response, effectp->setDuration(duration); } - gAgent.setLookAt(LOOKAT_TARGET_CLEAR); + gAgentCamera.setLookAt(LOOKAT_TARGET_CLEAR); // Keep track of how many objects have been deleted. F64 obj_delete_count = LLViewerStats::getInstance()->getStat(LLViewerStats::ST_OBJECT_DELETE_COUNT); @@ -3618,7 +3619,7 @@ void LLSelectMgr::sendAttach(U8 attachment_point) { LLViewerObject* attach_object = mSelectedObjects->getFirstRootObject(); - if (!attach_object || !gAgent.getAvatarObject() || mSelectedObjects->mSelectType != SELECT_TYPE_WORLD) + if (!attach_object || !isAgentAvatarValid() || mSelectedObjects->mSelectType != SELECT_TYPE_WORLD) { return; } @@ -3629,7 +3630,7 @@ void LLSelectMgr::sendAttach(U8 attachment_point) BOOL build_mode = LLToolMgr::getInstance()->inEdit(); // Special case: Attach to default location for this object. if (0 == attachment_point || - get_if_there(gAgent.getAvatarObject()->mAttachmentPoints, (S32)attachment_point, (LLViewerJointAttachment*)NULL)) + get_if_there(gAgentAvatarp->mAttachmentPoints, (S32)attachment_point, (LLViewerJointAttachment*)NULL)) { sendListToRegions( "ObjectAttach", @@ -4391,7 +4392,7 @@ void LLSelectMgr::processObjectProperties(LLMessageSystem* msg, void** user_data msg->getStringFast(_PREHASH_ObjectData, _PREHASH_SitName, sit_name, i); //unpack TE IDs - std::vector<LLUUID> texture_ids; + uuid_vec_t texture_ids; S32 size = msg->getSizeFast(_PREHASH_ObjectData, i, _PREHASH_TextureID); if (size > 0) { @@ -4626,8 +4627,8 @@ void LLSelectMgr::updateSilhouettes() { S32 num_sils_genned = 0; - LLVector3d cameraPos = gAgent.getCameraPositionGlobal(); - F32 currentCameraZoom = gAgent.getCurrentCameraBuildOffset(); + LLVector3d cameraPos = gAgentCamera.getCameraPositionGlobal(); + F32 currentCameraZoom = gAgentCamera.getCurrentCameraBuildOffset(); if (!mSilhouetteImagep) { @@ -4648,7 +4649,7 @@ void LLSelectMgr::updateSilhouettes() } func; getSelection()->applyToObjects(&func); - mLastCameraPos = gAgent.getCameraPositionGlobal(); + mLastCameraPos = gAgentCamera.getCameraPositionGlobal(); } std::vector<LLViewerObject*> changed_objects; @@ -4910,12 +4911,11 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud) LLGLEnable blend(GL_BLEND); LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE); - LLVOAvatar* avatar = gAgent.getAvatarObject(); - if (for_hud && avatar) + if (isAgentAvatarValid() && for_hud) { - LLBBox hud_bbox = avatar->getHUDBBox(); + LLBBox hud_bbox = gAgentAvatarp->getHUDBBox(); - F32 cur_zoom = gAgent.mHUDCurZoom; + F32 cur_zoom = gAgentCamera.mHUDCurZoom; // set up transform to encompass bounding box of HUD glMatrixMode(GL_PROJECTION); @@ -4936,17 +4936,18 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud) if (mSelectedObjects->getNumNodes()) { LLUUID inspect_item_id= LLUUID::null; -#if 0 LLFloaterInspect* inspect_instance = LLFloaterReg::getTypedInstance<LLFloaterInspect>("inspect"); - if(inspect_instance) + if(inspect_instance && inspect_instance->getVisible()) { inspect_item_id = inspect_instance->getSelectedUUID(); } -#endif - LLSidepanelTaskInfo *panel_task_info = LLSidepanelTaskInfo::getActivePanel(); - if (panel_task_info) + else { - inspect_item_id = panel_task_info->getSelectedUUID(); + LLSidepanelTaskInfo *panel_task_info = LLSidepanelTaskInfo::getActivePanel(); + if (panel_task_info) + { + inspect_item_id = panel_task_info->getSelectedUUID(); + } } LLUUID focus_item_id = LLViewerMediaFocus::getInstance()->getFocusedObjectID(); @@ -5021,7 +5022,7 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud) } } - if (for_hud && avatar) + if (isAgentAvatarValid() && for_hud) { glMatrixMode(GL_PROJECTION); gGL.popMatrix(); @@ -5206,13 +5207,13 @@ void LLSelectNode::saveColors() } } -void LLSelectNode::saveTextures(const std::vector<LLUUID>& textures) +void LLSelectNode::saveTextures(const uuid_vec_t& textures) { if (mObject.notNull()) { mSavedTextures.clear(); - for (std::vector<LLUUID>::const_iterator texture_it = textures.begin(); + for (uuid_vec_t::const_iterator texture_it = textures.begin(); texture_it != textures.end(); ++texture_it) { mSavedTextures.push_back(*texture_it); @@ -5397,9 +5398,9 @@ void LLSelectNode::renderOneSilhouette(const LLColor4 &color) if (volume) { F32 silhouette_thickness; - if (is_hud_object && gAgent.getAvatarObject()) + if (isAgentAvatarValid() && is_hud_object) { - silhouette_thickness = LLSelectMgr::sHighlightThickness / gAgent.mHUDCurZoom; + silhouette_thickness = LLSelectMgr::sHighlightThickness / gAgentCamera.mHUDCurZoom; } else { @@ -5419,7 +5420,7 @@ void LLSelectNode::renderOneSilhouette(const LLColor4 &color) LLGLEnable fog(GL_FOG); glFogi(GL_FOG_MODE, GL_LINEAR); float d = (LLViewerCamera::getInstance()->getPointOfInterest()-LLViewerCamera::getInstance()->getOrigin()).magVec(); - LLColor4 fogCol = color * (F32)llclamp((LLSelectMgr::getInstance()->getSelectionCenterGlobal()-gAgent.getCameraPositionGlobal()).magVec()/(LLSelectMgr::getInstance()->getBBoxOfSelection().getExtentLocal().magVec()*4), 0.0, 1.0); + LLColor4 fogCol = color * (F32)llclamp((LLSelectMgr::getInstance()->getSelectionCenterGlobal()-gAgentCamera.getCameraPositionGlobal()).magVec()/(LLSelectMgr::getInstance()->getBBoxOfSelection().getExtentLocal().magVec()*4), 0.0, 1.0); glFogf(GL_FOG_START, d); glFogf(GL_FOG_END, d*(1 + (LLViewerCamera::getInstance()->getView() / LLViewerCamera::getInstance()->getDefaultFOV()))); glFogfv(GL_FOG_COLOR, fogCol.mV); @@ -5534,13 +5535,12 @@ void dialog_refresh_all() LLFloaterProperties::dirtyAll(); -#if 0 LLFloaterInspect* inspect_instance = LLFloaterReg::getTypedInstance<LLFloaterInspect>("inspect"); if(inspect_instance) { inspect_instance->dirty(); } -#endif + LLSidepanelTaskInfo *panel_task_info = LLSidepanelTaskInfo::getActivePanel(); if (panel_task_info) { @@ -5608,20 +5608,20 @@ void LLSelectMgr::updateSelectionCenter() { mSelectedObjects->mSelectType = getSelectTypeForObject(object); - if (mSelectedObjects->mSelectType == SELECT_TYPE_ATTACHMENT && gAgent.getAvatarObject()) + if (mSelectedObjects->mSelectType == SELECT_TYPE_ATTACHMENT && isAgentAvatarValid()) { - mPauseRequest = gAgent.getAvatarObject()->requestPause(); + mPauseRequest = gAgentAvatarp->requestPause(); } else { mPauseRequest = NULL; } - if (mSelectedObjects->mSelectType != SELECT_TYPE_HUD && gAgent.getAvatarObject()) + if (mSelectedObjects->mSelectType != SELECT_TYPE_HUD && isAgentAvatarValid()) { // reset hud ZOOM - gAgent.mHUDTargetZoom = 1.f; - gAgent.mHUDCurZoom = 1.f; + gAgentCamera.mHUDTargetZoom = 1.f; + gAgentCamera.mHUDCurZoom = 1.f; } mShowSelection = FALSE; @@ -5640,10 +5640,10 @@ void LLSelectMgr::updateSelectionCenter() LLViewerObject* object = node->getObject(); if (!object) continue; - LLViewerObject *myAvatar = gAgent.getAvatarObject(); + LLViewerObject *root = object->getRootEdit(); if (mSelectedObjects->mSelectType == SELECT_TYPE_WORLD && // not an attachment - !root->isChild(myAvatar) && // not the object you're sitting on + !root->isChild(gAgentAvatarp) && // not the object you're sitting on !object->isAvatar()) // not another avatar { mShowSelection = TRUE; @@ -5713,26 +5713,26 @@ void LLSelectMgr::updatePointAt() select_offset.setVec(pick.mObjectOffset); select_offset.rotVec(~click_object->getRenderRotation()); - gAgent.setPointAt(POINTAT_TARGET_SELECT, click_object, select_offset); - gAgent.setLookAt(LOOKAT_TARGET_SELECT, click_object, select_offset); + gAgentCamera.setPointAt(POINTAT_TARGET_SELECT, click_object, select_offset); + gAgentCamera.setLookAt(LOOKAT_TARGET_SELECT, click_object, select_offset); } else { // didn't click on an object this time, revert to pointing at center of first object - gAgent.setPointAt(POINTAT_TARGET_SELECT, mSelectedObjects->getFirstObject()); - gAgent.setLookAt(LOOKAT_TARGET_SELECT, mSelectedObjects->getFirstObject()); + gAgentCamera.setPointAt(POINTAT_TARGET_SELECT, mSelectedObjects->getFirstObject()); + gAgentCamera.setLookAt(LOOKAT_TARGET_SELECT, mSelectedObjects->getFirstObject()); } } else { - gAgent.setPointAt(POINTAT_TARGET_CLEAR); - gAgent.setLookAt(LOOKAT_TARGET_CLEAR); + gAgentCamera.setPointAt(POINTAT_TARGET_CLEAR); + gAgentCamera.setLookAt(LOOKAT_TARGET_CLEAR); } } else { - gAgent.setPointAt(POINTAT_TARGET_CLEAR); - gAgent.setLookAt(LOOKAT_TARGET_CLEAR); + gAgentCamera.setPointAt(POINTAT_TARGET_CLEAR); + gAgentCamera.setLookAt(LOOKAT_TARGET_CLEAR); } } @@ -5922,20 +5922,20 @@ BOOL LLSelectMgr::setForceSelection(BOOL force) void LLSelectMgr::resetAgentHUDZoom() { - gAgent.mHUDTargetZoom = 1.f; - gAgent.mHUDCurZoom = 1.f; + gAgentCamera.mHUDTargetZoom = 1.f; + gAgentCamera.mHUDCurZoom = 1.f; } void LLSelectMgr::getAgentHUDZoom(F32 &target_zoom, F32 ¤t_zoom) const { - target_zoom = gAgent.mHUDTargetZoom; - current_zoom = gAgent.mHUDCurZoom; + target_zoom = gAgentCamera.mHUDTargetZoom; + current_zoom = gAgentCamera.mHUDCurZoom; } void LLSelectMgr::setAgentHUDZoom(F32 target_zoom, F32 current_zoom) { - gAgent.mHUDTargetZoom = target_zoom; - gAgent.mHUDCurZoom = current_zoom; + gAgentCamera.mHUDTargetZoom = target_zoom; + gAgentCamera.mHUDCurZoom = current_zoom; } ///////////////////////////////////////////////////////////////////////////// diff --git a/indra/newview/llselectmgr.h b/indra/newview/llselectmgr.h index 00474827ca..d315f40ff3 100644 --- a/indra/newview/llselectmgr.h +++ b/indra/newview/llselectmgr.h @@ -147,7 +147,7 @@ public: void setObject(LLViewerObject* object); // *NOTE: invalidate stored textures and colors when # faces change void saveColors(); - void saveTextures(const std::vector<LLUUID>& textures); + void saveTextures(const uuid_vec_t& textures); void saveTextureScaleRatios(); BOOL allowOperationOnNode(PermissionBit op, U64 group_proxy_power) const; @@ -183,7 +183,7 @@ public: std::string mSitName; U64 mCreationDate; std::vector<LLColor4> mSavedColors; - std::vector<LLUUID> mSavedTextures; + uuid_vec_t mSavedTextures; std::vector<LLVector3> mTextureScaleRatios; std::vector<LLVector3> mSilhouetteVertices; // array of vertices to render silhouette of object std::vector<LLVector3> mSilhouetteNormals; // array of normals to render silhouette of object diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp index 4a24a5dec5..c9e9b2815c 100644 --- a/indra/newview/llsidepanelappearance.cpp +++ b/indra/newview/llsidepanelappearance.cpp @@ -34,6 +34,7 @@ #include "llaccordionctrltab.h" #include "llagent.h" +#include "llagentcamera.h" #include "llagentwearables.h" #include "llappearancemgr.h" #include "llinventorypanel.h" @@ -205,7 +206,7 @@ void LLSidepanelAppearance::onFilterEdit(const std::string& search_string) void LLSidepanelAppearance::onOpenOutfitButtonClicked() { - const LLViewerInventoryItem *outfit_link = LLAppearanceManager::getInstance()->getBaseOutfitLink(); + const LLViewerInventoryItem *outfit_link = LLAppearanceMgr::getInstance()->getBaseOutfitLink(); if (!outfit_link) return; if (!outfit_link->getIsLinkType()) @@ -234,7 +235,7 @@ void LLSidepanelAppearance::onEditAppearanceButtonClicked() { if (gAgentWearables.areWearablesLoaded()) { - gAgent.changeCameraToCustomizeAvatar(); + gAgentCamera.changeCameraToCustomizeAvatar(); } } @@ -319,11 +320,11 @@ void LLSidepanelAppearance::updateVerbs() void LLSidepanelAppearance::refreshCurrentOutfitName(const std::string& name) { - mOutfitDirtyTag->setVisible(LLAppearanceManager::getInstance()->isOutfitDirty()); + mOutfitDirtyTag->setVisible(LLAppearanceMgr::getInstance()->isOutfitDirty()); if (name == "") { std::string outfit_name; - if (LLAppearanceManager::getInstance()->getBaseOutfitName(outfit_name)) + if (LLAppearanceMgr::getInstance()->getBaseOutfitName(outfit_name)) { mCurrentLookName->setText(outfit_name); return; @@ -357,19 +358,20 @@ void LLSidepanelAppearance::fetchInventory() LLUUID item_id; for(S32 type = (S32)WT_SHAPE; type < (S32)WT_COUNT; ++type) { - // MULTI_WEARABLE: - item_id = gAgentWearables.getWearableItemID((EWearableType)type,0); - if(item_id.notNull()) + for (U32 index = 0; index < gAgentWearables.getWearableCount((EWearableType)type); ++index) { - ids.push_back(item_id); + item_id = gAgentWearables.getWearableItemID((EWearableType)type, index); + if(item_id.notNull()) + { + ids.push_back(item_id); + } } } - LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); - if( avatar ) + if (isAgentAvatarValid()) { - for (LLVOAvatar::attachment_map_t::const_iterator iter = avatar->mAttachmentPoints.begin(); - iter != avatar->mAttachmentPoints.end(); ++iter) + for (LLVOAvatar::attachment_map_t::const_iterator iter = gAgentAvatarp->mAttachmentPoints.begin(); + iter != gAgentAvatarp->mAttachmentPoints.end(); ++iter) { LLViewerJointAttachment* attachment = iter->second; if (!attachment) continue; diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp index fba1503b4a..3ec1855484 100644 --- a/indra/newview/llsidetray.cpp +++ b/indra/newview/llsidetray.cpp @@ -34,7 +34,7 @@ #include "lltextbox.h" -#include "llagent.h" +#include "llagentcamera.h" #include "llbottomtray.h" #include "llsidetray.h" #include "llviewerwindow.h" @@ -730,7 +730,7 @@ void LLSideTray::updateSidetrayVisibility() // set visibility of parent container based on collapsed state if (getParent()) { - getParent()->setVisible(!mCollapsed && !gAgent.cameraMouselook()); + getParent()->setVisible(!mCollapsed && !gAgentCamera.cameraMouselook()); } } diff --git a/indra/newview/llspeakers.cpp b/indra/newview/llspeakers.cpp index 717a8bda1e..4573520647 100644 --- a/indra/newview/llspeakers.cpp +++ b/indra/newview/llspeakers.cpp @@ -37,7 +37,6 @@ #include "llagent.h" #include "llappviewer.h" #include "llimview.h" -#include "llmutelist.h" #include "llsdutil.h" #include "lluicolortable.h" #include "llviewerobjectlist.h" @@ -880,7 +879,7 @@ void LLLocalSpeakerMgr::updateSpeakerList() } // pick up non-voice speakers in chat range - std::vector<LLUUID> avatar_ids; + uuid_vec_t avatar_ids; std::vector<LLVector3d> positions; LLWorld::getInstance()->getAvatars(&avatar_ids, &positions, gAgent.getPositionGlobal(), CHAT_NORMAL_RADIUS); for(U32 i=0; i<avatar_ids.size(); i++) diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index d4d6a74f0c..b5a73a3143 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -62,6 +62,7 @@ #include "llimfloater.h" #include "lllocationhistory.h" #include "llimageworker.h" + #include "llloginflags.h" #include "llmd5.h" #include "llmemorystream.h" @@ -88,6 +89,7 @@ #include "v3math.h" #include "llagent.h" +#include "llagentcamera.h" #include "llagentpicksinfo.h" #include "llagentwearables.h" #include "llagentpilot.h" @@ -115,6 +117,7 @@ #include "llimagebmp.h" #include "llinventorybridge.h" #include "llinventorymodel.h" +#include "llinventorymodelbackgroundfetch.h" #include "llfriendcard.h" #include "llkeyboard.h" #include "llloginhandler.h" // gLoginHandler, SLURL support @@ -937,6 +940,9 @@ bool idle_startup() // Load Avatars icons cache LLAvatarIconIDCache::getInstance()->load(); + + // Load media plugin cookies + LLViewerMedia::loadCookieFile(); //------------------------------------------------- // Handle startup progress screen @@ -1134,6 +1140,7 @@ bool idle_startup() // Finish agent initialization. (Requires gSavedSettings, builds camera) gAgent.init(); + gAgentCamera.init(); set_underclothes_menu_options(); // Since we connected, save off the settings so the user doesn't have to @@ -1172,7 +1179,7 @@ bool idle_startup() // World initialization must be done after above window init // User might have overridden far clip - LLWorld::getInstance()->setLandFarClip( gAgent.mDrawDistance ); + LLWorld::getInstance()->setLandFarClip(gAgentCamera.mDrawDistance); // Before we create the first region, we need to set the agent's mOriginGlobal // This is necessary because creating objects before this is set will result in a @@ -1336,8 +1343,8 @@ bool idle_startup() gAgent.setPositionAgent(agent_start_position_region); gAgent.resetAxes(gAgentStartLookAt); - gAgent.stopCameraAnimation(); - gAgent.resetCamera(); + gAgentCamera.stopCameraAnimation(); + gAgentCamera.resetCamera(); // Initialize global class data needed for surfaces (i.e. textures) if (!gNoRender) @@ -1741,7 +1748,7 @@ bool idle_startup() { LL_DEBUGS("AppInit") << "Gesture Manager loading " << gesture_options.size() << LL_ENDL; - std::vector<LLUUID> item_ids; + uuid_vec_t item_ids; for(LLSD::array_const_iterator resp_it = gesture_options.beginArray(), end = gesture_options.endArray(); resp_it != end; ++resp_it) { @@ -1755,7 +1762,7 @@ bool idle_startup() // Could schedule and delay these for later. const BOOL no_inform_server = FALSE; const BOOL no_deactivate_similar = FALSE; - LLGestureManager::instance().activateGestureWithAsset(item_id, asset_id, + LLGestureMgr::instance().activateGestureWithAsset(item_id, asset_id, no_inform_server, no_deactivate_similar); // We need to fetch the inventory items for these gestures @@ -1764,7 +1771,7 @@ bool idle_startup() } } // no need to add gesture to inventory observer, it's already made in constructor - LLGestureManager::instance().fetchItems(item_ids); + LLGestureMgr::instance().fetchItems(item_ids); } } gDisplaySwapBuffers = TRUE; @@ -1810,15 +1817,15 @@ bool idle_startup() if (samename) { // restore old camera pos - gAgent.setFocusOnAvatar(FALSE, FALSE); - gAgent.setCameraPosAndFocusGlobal(gSavedSettings.getVector3d("CameraPosOnLogout"), gSavedSettings.getVector3d("FocusPosOnLogout"), LLUUID::null); + gAgentCamera.setFocusOnAvatar(FALSE, FALSE); + gAgentCamera.setCameraPosAndFocusGlobal(gSavedSettings.getVector3d("CameraPosOnLogout"), gSavedSettings.getVector3d("FocusPosOnLogout"), LLUUID::null); BOOL limit_hit = FALSE; - gAgent.calcCameraPositionTargetGlobal(&limit_hit); + gAgentCamera.calcCameraPositionTargetGlobal(&limit_hit); if (limit_hit) { - gAgent.setFocusOnAvatar(TRUE, FALSE); + gAgentCamera.setFocusOnAvatar(TRUE, FALSE); } - gAgent.stopCameraAnimation(); + gAgentCamera.stopCameraAnimation(); } } else @@ -1841,7 +1848,7 @@ bool idle_startup() } //DEV-17797. get null folder. Any items found here moved to Lost and Found - LLInventoryModel::findLostItems(); + LLInventoryModelBackgroundFetch::instance().findLostItems(); LLStartUp::setStartupState( STATE_PRECACHE ); timeout.reset(); @@ -1859,7 +1866,7 @@ bool idle_startup() if (gAgent.isFirstLogin() && !sInitialOutfit.empty() // registration set up an outfit && !sInitialOutfitGender.empty() // and a gender - && gAgent.getAvatarObject() // can't wear clothes without object + && isAgentAvatarValid() // can't wear clothes without object && !gAgent.isGenderChosen() ) // nothing already loading { // Start loading the wearables, textures, gestures @@ -1867,7 +1874,7 @@ bool idle_startup() } // wait precache-delay and for agent's avatar or a lot longer. - if(((timeout_frac > 1.f) && gAgent.getAvatarObject()) + if(((timeout_frac > 1.f) && isAgentAvatarValid()) || (timeout_frac > 3.f)) { LLStartUp::setStartupState( STATE_WEARABLES_WAIT ); @@ -1923,8 +1930,8 @@ bool idle_startup() if (gAgent.isFirstLogin()) { // wait for avatar to be completely loaded - if (gAgent.getAvatarObject() - && gAgent.getAvatarObject()->isFullyLoaded()) + if (isAgentAvatarValid() + && gAgentAvatarp->isFullyLoaded()) { //llinfos << "avatar fully loaded" << llendl; LLStartUp::setStartupState( STATE_CLEANUP ); @@ -2531,7 +2538,7 @@ void LLStartUp::loadInitialOutfit( const std::string& outfit_folder_name, llinfos << "starting" << llendl; // Not going through the processAgentInitialWearables path, so need to set this here. - LLAppearanceManager::instance().setAttachmentInvLinkEnable(true); + LLAppearanceMgr::instance().setAttachmentInvLinkEnable(true); // Initiate creation of COF, since we're also bypassing that. gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT); @@ -2562,13 +2569,13 @@ void LLStartUp::loadInitialOutfit( const std::string& outfit_folder_name, bool do_copy = true; bool do_append = false; LLViewerInventoryCategory *cat = gInventory.getCategory(cat_id); - LLAppearanceManager::instance().wearInventoryCategory(cat, do_copy, do_append); + LLAppearanceMgr::instance().wearInventoryCategory(cat, do_copy, do_append); } // Copy gestures LLUUID dst_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_GESTURE); LLPointer<LLInventoryCallback> cb(NULL); - LLAppearanceManager *app_mgr = &(LLAppearanceManager::instance()); + LLAppearanceMgr *app_mgr = &(LLAppearanceMgr::instance()); // - Copy gender-specific gestures. LLUUID gestures_cat_id = findDescendentCategoryIDByName( @@ -2577,7 +2584,7 @@ void LLStartUp::loadInitialOutfit( const std::string& outfit_folder_name, if (gestures_cat_id.notNull()) { callAfterCategoryFetch(gestures_cat_id, - boost::bind(&LLAppearanceManager::shallowCopyCategory, + boost::bind(&LLAppearanceMgr::shallowCopyCategory, app_mgr, gestures_cat_id, dst_id, @@ -2591,7 +2598,7 @@ void LLStartUp::loadInitialOutfit( const std::string& outfit_folder_name, if (common_gestures_cat_id.notNull()) { callAfterCategoryFetch(common_gestures_cat_id, - boost::bind(&LLAppearanceManager::shallowCopyCategory, + boost::bind(&LLAppearanceMgr::shallowCopyCategory, app_mgr, common_gestures_cat_id, dst_id, @@ -2719,6 +2726,8 @@ void LLStartUp::postStartupState() void reset_login() { + gAgentWearables.cleanup(); + gAgentCamera.cleanup(); gAgent.cleanup(); LLWorld::getInstance()->destroyClass(); @@ -3078,6 +3087,13 @@ bool process_login_success_response() } } + // Start the process of fetching the OpenID session cookie for this user login + std::string openid_url = response["openid_url"]; + if(!openid_url.empty()) + { + std::string openid_token = response["openid_token"]; + LLViewerMedia::openIDSetup(openid_url, openid_token); + } bool success = false; // JC: gesture loading done below, when we have an asset system diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp index 9206b4a43a..58f64ff1f3 100644 --- a/indra/newview/llstatusbar.cpp +++ b/indra/newview/llstatusbar.cpp @@ -36,6 +36,7 @@ // viewer includes #include "llagent.h" +#include "llagentcamera.h" #include "llbutton.h" #include "llcommandhandler.h" #include "llviewercontrol.h" @@ -313,7 +314,7 @@ void LLStatusBar::refresh() childSetVisible("scriptout", false); } - if (gAgent.getCameraMode() == CAMERA_MODE_MOUSELOOK && + if (gAgentCamera.getCameraMode() == CAMERA_MODE_MOUSELOOK && ((region && region->getAllowDamage()) || (parcel && parcel->getAllowDamage()))) { // set visibility based on flashing @@ -444,11 +445,9 @@ void LLStatusBar::setHealth(S32 health) { if (mHealth > (health + gSavedSettings.getF32("UISndHealthReductionThreshold"))) { - LLVOAvatar *me; - - if ((me = gAgent.getAvatarObject())) + if (isAgentAvatarValid()) { - if (me->getSex() == SEX_FEMALE) + if (gAgentAvatarp->getSex() == SEX_FEMALE) { make_ui_sound("UISndHealthReductionF"); } diff --git a/indra/newview/llsurface.cpp b/indra/newview/llsurface.cpp index 1d479bac8c..ddb5d08e07 100644 --- a/indra/newview/llsurface.cpp +++ b/indra/newview/llsurface.cpp @@ -44,6 +44,7 @@ #include "llviewerobjectlist.h" #include "llregionhandle.h" #include "llagent.h" +#include "llagentcamera.h" #include "llappviewer.h" #include "llworld.h" #include "llviewercontrol.h" @@ -606,7 +607,7 @@ void LLSurface::moveZ(const S32 x, const S32 y, const F32 delta) void LLSurface::updatePatchVisibilities(LLAgent &agent) { - LLVector3 pos_region = mRegionp->getPosRegionFromGlobal(gAgent.getCameraPositionGlobal()); + LLVector3 pos_region = mRegionp->getPosRegionFromGlobal(gAgentCamera.getCameraPositionGlobal()); LLSurfacePatch *patchp; diff --git a/indra/newview/lltexlayer.cpp b/indra/newview/lltexlayer.cpp index 386b636367..3f4dab4fea 100644 --- a/indra/newview/lltexlayer.cpp +++ b/indra/newview/lltexlayer.cpp @@ -284,8 +284,6 @@ void LLTexLayerSetBuffer::readBackAndUpload() llinfos << "Baked " << mTexLayerSet->getBodyRegion() << llendl; LLViewerStats::getInstance()->incStat(LLViewerStats::ST_TEX_BAKES); - llassert( gAgent.getAvatarObject() == mTexLayerSet->getAvatar() ); - // We won't need our caches since we're baked now. (Techically, we won't // really be baked until this image is sent to the server and the Avatar // Appearance message is received.) @@ -352,7 +350,7 @@ void LLTexLayerSetBuffer::readBackAndUpload() { // baked_upload_data is owned by the responder and deleted after the request completes LLBakedUploadData* baked_upload_data = - new LLBakedUploadData(gAgent.getAvatarObject(), this->mTexLayerSet, asset_id); + new LLBakedUploadData(gAgentAvatarp, this->mTexLayerSet, asset_id); mUploadID = asset_id; // upload the image @@ -409,12 +407,10 @@ void LLTexLayerSetBuffer::onTextureUploadComplete(const LLUUID& uuid, { LLBakedUploadData* baked_upload_data = (LLBakedUploadData*)userdata; - LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); - if (0 == result && - avatar && - !avatar->isDead() && - baked_upload_data->mAvatar == avatar && // Sanity check: only the user's avatar should be uploading textures. + isAgentAvatarValid() && + !gAgentAvatarp->isDead() && + baked_upload_data->mAvatar == gAgentAvatarp && // Sanity check: only the user's avatar should be uploading textures. baked_upload_data->mTexLayerSet->hasComposite() ) { @@ -439,11 +435,11 @@ void LLTexLayerSetBuffer::onTextureUploadComplete(const LLUUID& uuid, if (result >= 0) { - LLVOAvatarDefines::ETextureIndex baked_te = avatar->getBakedTE(layerset_buffer->mTexLayerSet); + LLVOAvatarDefines::ETextureIndex baked_te = gAgentAvatarp->getBakedTE(layerset_buffer->mTexLayerSet); // Update baked texture info with the new UUID U64 now = LLFrameTimer::getTotalTime(); // Record starting time llinfos << "Baked texture upload took " << (S32)((now - baked_upload_data->mStartTime) / 1000) << " ms" << llendl; - avatar->setNewBakedTexture(baked_te, uuid); + gAgentAvatarp->setNewBakedTexture(baked_te, uuid); } else { @@ -457,7 +453,7 @@ void LLTexLayerSetBuffer::onTextureUploadComplete(const LLUUID& uuid, llinfos << "Received baked texture out of date, ignored." << llendl; } - avatar->dirtyMesh(); + gAgentAvatarp->dirtyMesh(); } else { diff --git a/indra/newview/lltexlayerparams.cpp b/indra/newview/lltexlayerparams.cpp index d55468841d..5e5d344461 100644 --- a/indra/newview/lltexlayerparams.cpp +++ b/indra/newview/lltexlayerparams.cpp @@ -33,7 +33,7 @@ #include "lltexlayerparams.h" -#include "llagent.h" +#include "llagentcamera.h" #include "llimagetga.h" #include "lltexlayer.h" #include "llvoavatarself.h" @@ -180,7 +180,7 @@ void LLTexLayerParamAlpha::setWeight(F32 weight, BOOL upload_bake) if ((mAvatar->getSex() & getSex()) && (mAvatar->isSelf() && !mIsDummy)) // only trigger a baked texture update if we're changing a wearable's visual param. { - if (gAgent.cameraCustomizeAvatar()) + if (gAgentCamera.cameraCustomizeAvatar()) { upload_bake = FALSE; } diff --git a/indra/newview/lltexturecache.cpp b/indra/newview/lltexturecache.cpp index 49770030c6..08bc8220d9 100644 --- a/indra/newview/lltexturecache.cpp +++ b/indra/newview/lltexturecache.cpp @@ -550,7 +550,7 @@ bool LLTextureCacheRemoteWorker::doWrite() S32 cur_imagesize = 0; // Checks if this image is already in the entry list idx = mCache->getHeaderCacheEntry(mID, cur_imagesize); - if (idx >= 0 && (cur_imagesize >= 0)) + if (idx >= 0 && (cur_imagesize > 0)) { alreadyCached = true; // already there and non empty } @@ -846,22 +846,17 @@ bool LLTextureCache::updateTextureEntryList(const LLUUID& id, S32 bodysize) S32 idx = openAndReadEntry(id, entry, false); if (idx < 0) { - llwarns << "Failed to open entry: " << id << llendl; - removeHeaderCacheEntry(id); - LLAPRFile::remove(getTextureFileName(id), getLocalAPRFilePool()); + llwarns << "Failed to open entry: " << id << llendl; + removeCachedTexture(id) ; return false; } else if (oldbodysize != entry.mBodySize) { - // TODO: change to llwarns - llerrs << "Entry mismatch in mTextureSizeMap / mHeaderIDMap" + // only happens to 64 bits systems, do not know why. + llwarns << "Entry mismatch in mTextureSizeMap / mHeaderIDMap" << " idx=" << idx << " oldsize=" << oldbodysize << " entrysize=" << entry.mBodySize << llendl; } - entry.mBodySize = bodysize; - writeEntryAndClose(idx, entry); - - mTexturesSizeTotal -= oldbodysize; - mTexturesSizeTotal += bodysize; + updateEntry(idx, entry, entry.mImageSize, bodysize); if (mTexturesSizeTotal > sCacheMaxTexturesSize) { @@ -1002,7 +997,10 @@ LLAPRFile* LLTextureCache::openHeaderEntriesFile(bool readonly, S32 offset) llassert_always(mHeaderAPRFile == NULL); apr_int32_t flags = readonly ? APR_READ|APR_BINARY : APR_READ|APR_WRITE|APR_BINARY; mHeaderAPRFile = new LLAPRFile(mHeaderEntriesFileName, flags, getLocalAPRFilePool()); - mHeaderAPRFile->seek(APR_SET, offset); + if(offset > 0) + { + mHeaderAPRFile->seek(APR_SET, offset); + } return mHeaderAPRFile; } @@ -1022,6 +1020,12 @@ void LLTextureCache::readEntriesHeader() LLAPRFile::readEx(mHeaderEntriesFileName, (U8*)&mHeaderEntriesInfo, 0, sizeof(EntriesInfo), getLocalAPRFilePool()); } + else //create an empty entries header. + { + mHeaderEntriesInfo.mVersion = sHeaderCacheVersion ; + mHeaderEntriesInfo.mEntries = 0 ; + writeEntriesHeader() ; + } } void LLTextureCache::writeEntriesHeader() @@ -1034,8 +1038,7 @@ void LLTextureCache::writeEntriesHeader() } } -static S32 mHeaderEntriesMaxWriteIdx = 0; - +//mHeaderMutex is locked before calling this. S32 LLTextureCache::openAndReadEntry(const LLUUID& id, Entry& entry, bool create) { S32 idx = -1; @@ -1075,8 +1078,7 @@ S32 LLTextureCache::openAndReadEntry(const LLUUID& id, Entry& entry, bool create if (iter3 != mHeaderIDMap.end() && iter3->second >= 0) { idx = iter3->second; - mHeaderIDMap.erase(oldid); - mTexturesSizeMap.erase(oldid); + removeCachedTexture(oldid) ;//remove the existing cached texture to release the entry index. break; } } @@ -1086,22 +1088,9 @@ S32 LLTextureCache::openAndReadEntry(const LLUUID& id, Entry& entry, bool create } if (idx >= 0) { - // Set the header index - mHeaderIDMap[id] = idx; - llassert_always(mTexturesSizeMap.erase(id) == 0); - // Initialize the entry (will get written later) - entry.init(id, time(NULL)); - // Update Header - writeEntriesHeader(); - - //the new entry, write immediately. - // Write Entry - S32 offset = sizeof(EntriesInfo) + idx * sizeof(Entry); - LLAPRFile* aprfile = openHeaderEntriesFile(false, offset); - S32 bytes_written = aprfile->write((void*)&entry, (S32)sizeof(Entry)); - llassert_always(bytes_written == sizeof(Entry)); - mHeaderEntriesMaxWriteIdx = llmax(mHeaderEntriesMaxWriteIdx, idx); - closeHeaderEntriesFile(); + entry.mID = id ; + entry.mImageSize = -1 ; //mark it is a brand-new entry. + entry.mBodySize = 0 ; } } } @@ -1117,36 +1106,108 @@ S32 LLTextureCache::openAndReadEntry(const LLUUID& id, Entry& entry, bool create } else { - S32 offset = sizeof(EntriesInfo) + idx * sizeof(Entry); - LLAPRFile* aprfile = openHeaderEntriesFile(true, offset); - S32 bytes_read = aprfile->read((void*)&entry, (S32)sizeof(Entry)); - llassert_always(bytes_read == sizeof(Entry)); - closeHeaderEntriesFile(); + readEntryFromHeaderImmediately(idx, entry) ; } - llassert_always(entry.mImageSize == 0 || entry.mImageSize == -1 || entry.mImageSize > entry.mBodySize); + llassert_always(entry.mImageSize > entry.mBodySize); } return idx; } -void LLTextureCache::writeEntryAndClose(S32 idx, Entry& entry) +//mHeaderMutex is locked before calling this. +void LLTextureCache::writeEntryToHeaderImmediately(S32 idx, Entry& entry, bool write_header) +{ + LLAPRFile* aprfile ; + S32 bytes_written ; + S32 offset = sizeof(EntriesInfo) + idx * sizeof(Entry); + if(write_header) + { + aprfile = openHeaderEntriesFile(false, 0); + bytes_written = aprfile->write((U8*)&mHeaderEntriesInfo, sizeof(EntriesInfo)) ; + llassert_always(bytes_written == sizeof(EntriesInfo)); + mHeaderAPRFile->seek(APR_SET, offset); + } + else + { + aprfile = openHeaderEntriesFile(false, offset); + } + bytes_written = aprfile->write((void*)&entry, (S32)sizeof(Entry)); + llassert_always(bytes_written == sizeof(Entry)); + closeHeaderEntriesFile(); + mUpdatedEntryMap.erase(idx) ; +} + +//mHeaderMutex is locked before calling this. +void LLTextureCache::readEntryFromHeaderImmediately(S32 idx, Entry& entry) { + S32 offset = sizeof(EntriesInfo) + idx * sizeof(Entry); + LLAPRFile* aprfile = openHeaderEntriesFile(true, offset); + S32 bytes_read = aprfile->read((void*)&entry, (S32)sizeof(Entry)); + llassert_always(bytes_read == sizeof(Entry)); + closeHeaderEntriesFile(); +} + +//mHeaderMutex is locked before calling this. +//update an existing entry time stamp, delay writing. +void LLTextureCache::updateEntryTimeStamp(S32 idx, Entry& entry) +{ + static const U32 MAX_ENTRIES_WITHOUT_TIME_STAMP = (U32)(LLTextureCache::sCacheMaxEntries * 0.75f) ; + + if(mHeaderEntriesInfo.mEntries < MAX_ENTRIES_WITHOUT_TIME_STAMP) + { + return ; //there are enough empty entry index space, no need to stamp time. + } + if (idx >= 0) { if (!mReadOnly) { - entry.mTime = time(NULL); - llassert_always(entry.mImageSize == 0 || entry.mImageSize == -1 || entry.mImageSize > entry.mBodySize); - if (entry.mBodySize > 0) + llassert_always(entry.mImageSize > entry.mBodySize); + + entry.mTime = time(NULL); + mUpdatedEntryMap[idx] = entry ; + } + } +} + +//mHeaderMutex is locked before calling this. +//update an existing entry, write to header file immediately. +void LLTextureCache::updateEntry(S32 idx, Entry& entry, S32 new_image_size, S32 new_body_size) +{ + llassert_always(new_image_size > -1) ; + + if(new_image_size == entry.mImageSize && new_body_size == entry.mBodySize) + { + updateEntryTimeStamp(idx, entry) ; //nothing changed. + } + else if (idx >= 0) + { + if (!mReadOnly) + { + llassert_always(new_image_size > new_body_size) ; + + bool update_header = false ; + if(entry.mImageSize < 0) //is a brand-new entry { - mTexturesSizeMap[entry.mID] = entry.mBodySize; - } - else if(mTexturesSizeMap.find(entry.mID) != mTexturesSizeMap.end() && mTexturesSizeMap[entry.mID] > 0) + mHeaderIDMap[entry.mID] = idx; + mTexturesSizeMap[entry.mID] = new_body_size ; + mTexturesSizeTotal += new_body_size ; + + // Update Header + update_header = true ; + } + else if (entry.mBodySize != new_body_size) { - llerrs << "mTexturesSizeMap / mHeaderIDMap corrupted." << llendl ; + //already in mHeaderIDMap. + mTexturesSizeMap[entry.mID] = new_body_size ; + mTexturesSizeTotal -= entry.mBodySize ; + mTexturesSizeTotal += new_body_size ; } -// llinfos << "Updating TE: " << idx << ": " << id << " Size: " << entry.mBodySize << " Time: " << entry.mTime << llendl; - mHeaderEntriesMaxWriteIdx = llmax(mHeaderEntriesMaxWriteIdx, idx); - mUpdatedEntryMap[idx] = entry ; + entry.mTime = time(NULL); + entry.mImageSize = new_image_size ; + entry.mBodySize = new_body_size ; + +// llinfos << "Updating TE: " << idx << ": " << id << " Size: " << entry.mBodySize << " Time: " << entry.mTime << llendl; + writeEntryToHeaderImmediately(idx, entry, update_header) ; } } } @@ -1160,8 +1221,17 @@ U32 LLTextureCache::openAndReadEntries(std::vector<Entry>& entries) mFreeList.clear(); mTexturesSizeTotal = 0; - LLAPRFile* aprfile = openHeaderEntriesFile(false, (S32)sizeof(EntriesInfo)); - updatedHeaderEntriesFile() ; + LLAPRFile* aprfile = NULL; + if(mUpdatedEntryMap.empty()) + { + aprfile = openHeaderEntriesFile(true, (S32)sizeof(EntriesInfo)); + } + else //update the header file first. + { + aprfile = openHeaderEntriesFile(false, 0); + updatedHeaderEntriesFile() ; + aprfile->seek(APR_SET, (S32)sizeof(EntriesInfo)); + } for (U32 idx=0; idx<num_entries; idx++) { Entry entry; @@ -1175,19 +1245,15 @@ U32 LLTextureCache::openAndReadEntries(std::vector<Entry>& entries) } entries.push_back(entry); // llinfos << "ENTRY: " << entry.mTime << " TEX: " << entry.mID << " IDX: " << idx << " Size: " << entry.mImageSize << llendl; - if (entry.mImageSize < 0) + if(entry.mImageSize > entry.mBodySize) { - mFreeList.insert(idx); + mHeaderIDMap[entry.mID] = idx; + mTexturesSizeMap[entry.mID] = entry.mBodySize; + mTexturesSizeTotal += entry.mBodySize; } else { - mHeaderIDMap[entry.mID] = idx; - if (entry.mBodySize > 0) - { - mTexturesSizeMap[entry.mID] = entry.mBodySize; - mTexturesSizeTotal += entry.mBodySize; - } - llassert_always(entry.mImageSize == 0 || entry.mImageSize > entry.mBodySize); + mFreeList.insert(idx); } } closeHeaderEntriesFile(); @@ -1207,7 +1273,6 @@ void LLTextureCache::writeEntriesAndClose(const std::vector<Entry>& entries) S32 bytes_written = aprfile->write((void*)(&entries[idx]), (S32)sizeof(Entry)); llassert_always(bytes_written == sizeof(Entry)); } - mHeaderEntriesMaxWriteIdx = llmax(mHeaderEntriesMaxWriteIdx, num_entries-1); closeHeaderEntriesFile(); } } @@ -1280,12 +1345,11 @@ void LLTextureCache::readHeaderCache() U32 empty_entries = 0; typedef std::pair<U32, S32> lru_data_t; std::set<lru_data_t> lru; - std::set<LLUUID> purge_list; + std::set<U32> purge_list; for (U32 i=0; i<num_entries; i++) { Entry& entry = entries[i]; - const LLUUID& id = entry.mID; - if (entry.mImageSize < 0) + if (entry.mImageSize <= 0) { // This will be in the Free List, don't put it in the LRU ++empty_entries; @@ -1298,9 +1362,8 @@ void LLTextureCache::readHeaderCache() if (entry.mBodySize > entry.mImageSize) { // Shouldn't happen, failsafe only - llwarns << "Bad entry: " << i << ": " << id << ": BodySize: " << entry.mBodySize << llendl; - purge_list.insert(entry.mID); - entry.mImageSize = -1; // empty/available + llwarns << "Bad entry: " << i << ": " << entry.mID << ": BodySize: " << entry.mBodySize << llendl; + purge_list.insert(i); } } } @@ -1315,14 +1378,9 @@ void LLTextureCache::readHeaderCache() { for (std::set<lru_data_t>::iterator iter = lru.begin(); iter != lru.end(); ++iter) { - S32 idx = iter->second; - if (entries[idx].mImageSize >= 0) - { - purge_list.insert(entries[idx].mID); - entries[idx].mImageSize = -1; - if (purge_list.size() >= entries_to_purge) - break; - } + purge_list.insert(iter->second); + if (purge_list.size() >= entries_to_purge) + break; } } llassert_always(purge_list.size() >= entries_to_purge); @@ -1332,9 +1390,7 @@ void LLTextureCache::readHeaderCache() S32 lru_entries = (S32)((F32)sCacheMaxEntries * TEXTURE_CACHE_LRU_SIZE); for (std::set<lru_data_t>::iterator iter = lru.begin(); iter != lru.end(); ++iter) { - S32 idx = iter->second; - const LLUUID& id = entries[idx].mID; - mLRU.insert(id); + mLRU.insert(entries[iter->second].mID); // llinfos << "LRU: " << iter->first << " : " << iter->second << llendl; if (--lru_entries <= 0) break; @@ -1343,12 +1399,10 @@ void LLTextureCache::readHeaderCache() if (purge_list.size() > 0) { - for (std::set<LLUUID>::iterator iter = purge_list.begin(); iter != purge_list.end(); ++iter) + for (std::set<U32>::iterator iter = purge_list.begin(); iter != purge_list.end(); ++iter) { - const LLUUID& id = *iter; - bool res = removeHeaderCacheEntry(id); // sets entry size on disk to -1 - llassert_always(res); - LLAPRFile::remove(getTextureFileName(id), getLocalAPRFilePool()); + std::string tex_filename = getTextureFileName(entries[*iter].mID); + removeEntry((S32)*iter, entries[*iter], tex_filename); } // If we removed any entries, we need to rebuild the entries list, // write the header, and call this again @@ -1356,13 +1410,14 @@ void LLTextureCache::readHeaderCache() for (U32 i=0; i<num_entries; i++) { const Entry& entry = entries[i]; - if (entry.mImageSize >=0) + if (entry.mImageSize > 0) { new_entries.push_back(entry); } } llassert_always(new_entries.size() <= sCacheMaxEntries); mHeaderEntriesInfo.mEntries = new_entries.size(); + writeEntriesHeader(); writeEntriesAndClose(new_entries); mHeaderMutex.unlock(); // unlock the mutex before calling again readHeaderCache(); // repeat with new entries file @@ -1370,7 +1425,7 @@ void LLTextureCache::readHeaderCache() } else { - writeEntriesAndClose(entries); + //entries are not changed, nothing here. } } } @@ -1398,6 +1453,7 @@ void LLTextureCache::purgeAllTextures(bool purge_directories) } if (purge_directories) { + gDirUtilp->deleteFilesInDir(mTexturesDirName,mask); LLFile::rmdir(mTexturesDirName); } } @@ -1435,7 +1491,6 @@ void LLTextureCache::purgeTextures(bool validate) U32 num_entries = openAndReadEntries(entries); if (!num_entries) { - writeEntriesAndClose(entries); return; // nothing to purge } @@ -1509,11 +1564,8 @@ void LLTextureCache::purgeTextures(bool validate) { purge_count++; LL_DEBUGS("TextureCache") << "PURGING: " << filename << LL_ENDL; - LLAPRFile::remove(filename, getLocalAPRFilePool()); + removeEntry(idx, entries[idx], filename) ; cache_size -= entries[idx].mBodySize; - mTexturesSizeTotal -= entries[idx].mBodySize; - entries[idx].mBodySize = 0; - mTexturesSizeMap.erase(entries[idx].mID); } } @@ -1568,7 +1620,7 @@ S32 LLTextureCache::getHeaderCacheEntry(const LLUUID& id, S32& imagesize) if (idx >= 0) { imagesize = entry.mImageSize; - writeEntryAndClose(idx, entry); // updates time + updateEntryTimeStamp(idx, entry); // updates time } return idx; } @@ -1582,8 +1634,7 @@ S32 LLTextureCache::setHeaderCacheEntry(const LLUUID& id, S32 imagesize) S32 idx = openAndReadEntry(id, entry, true); if (idx >= 0) { - entry.mImageSize = imagesize; - writeEntryAndClose(idx, entry); + updateEntry(idx, entry, imagesize, entry.mBodySize); mHeaderMutex.unlock(); } else // retry @@ -1722,34 +1773,56 @@ void LLTextureCache::addCompleted(Responder* responder, bool success) ////////////////////////////////////////////////////////////////////////////// -// Called from MAIN thread (endWork()) -// Ensure that mHeaderMutex is locked first! -bool LLTextureCache::removeHeaderCacheEntry(const LLUUID& id) +//called after mHeaderMutex is locked. +void LLTextureCache::removeCachedTexture(const LLUUID& id) { - Entry entry; - S32 idx = openAndReadEntry(id, entry, false); - if (idx >= 0) + if(mTexturesSizeMap.find(id) != mTexturesSizeMap.end()) + { + mTexturesSizeTotal -= mTexturesSizeMap[id] ; + mTexturesSizeMap.erase(id); + } + mHeaderIDMap.erase(id); + LLAPRFile::remove(getTextureFileName(id), getLocalAPRFilePool()); +} + +//called after mHeaderMutex is locked. +void LLTextureCache::removeEntry(S32 idx, Entry& entry, std::string& filename) +{ + if(idx >= 0) //valid entry { entry.mImageSize = -1; entry.mBodySize = 0; - writeEntryAndClose(idx, entry); - mFreeList.insert(idx); - mHeaderIDMap.erase(id); - mTexturesSizeMap.erase(id); - return true; + mHeaderIDMap.erase(entry.mID); + mTexturesSizeMap.erase(entry.mID); + + mTexturesSizeTotal -= entry.mBodySize; + mFreeList.insert(idx); } - return false; + + LLAPRFile::remove(filename, getLocalAPRFilePool()); } -void LLTextureCache::removeFromCache(const LLUUID& id) +bool LLTextureCache::removeFromCache(const LLUUID& id) { //llwarns << "Removing texture from cache: " << id << llendl; + bool ret = false ; if (!mReadOnly) { - LLMutexLock lock(&mHeaderMutex); - removeHeaderCacheEntry(id); - LLAPRFile::remove(getTextureFileName(id), getLocalAPRFilePool()); + lockHeaders() ; + + Entry entry; + S32 idx = openAndReadEntry(id, entry, false); + std::string tex_filename = getTextureFileName(id); + removeEntry(idx, entry, tex_filename) ; + if (idx >= 0) + { + writeEntryToHeaderImmediately(idx, entry); + ret = true; + } + + unlockHeaders() ; } + return ret ; } ////////////////////////////////////////////////////////////////////////////// diff --git a/indra/newview/lltexturecache.h b/indra/newview/lltexturecache.h index b840619c1f..ca8815ee7e 100644 --- a/indra/newview/lltexturecache.h +++ b/indra/newview/lltexturecache.h @@ -123,7 +123,7 @@ public: bool writeComplete(handle_t handle, bool abort = false); void prioritizeWrite(handle_t handle); - void removeFromCache(const LLUUID& id); + bool removeFromCache(const LLUUID& id); // For LLTextureCacheWorker::Responder LLTextureCacheWorker* getReader(handle_t handle); @@ -161,12 +161,16 @@ private: void readEntriesHeader(); void writeEntriesHeader(); S32 openAndReadEntry(const LLUUID& id, Entry& entry, bool create); - void writeEntryAndClose(S32 idx, Entry& entry); + void updateEntry(S32 idx, Entry& entry, S32 new_image_size, S32 new_body_size); + void updateEntryTimeStamp(S32 idx, Entry& entry) ; U32 openAndReadEntries(std::vector<Entry>& entries); void writeEntriesAndClose(const std::vector<Entry>& entries); + void readEntryFromHeaderImmediately(S32 idx, Entry& entry) ; + void writeEntryToHeaderImmediately(S32 idx, Entry& entry, bool write_header = false) ; + void removeEntry(S32 idx, Entry& entry, std::string& filename); + void removeCachedTexture(const LLUUID& id) ; S32 getHeaderCacheEntry(const LLUUID& id, S32& imagesize); S32 setHeaderCacheEntry(const LLUUID& id, S32 imagesize); - bool removeHeaderCacheEntry(const LLUUID& id); void writeUpdatedEntries() ; void updatedHeaderEntriesFile() ; void lockHeaders() { mHeaderMutex.lock(); } diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp index 2b846d33fc..a1b3c8dabd 100644 --- a/indra/newview/lltexturectrl.cpp +++ b/indra/newview/lltexturectrl.cpp @@ -48,6 +48,7 @@ #include "llfoldervieweventlistener.h" #include "llinventory.h" #include "llinventoryfunctions.h" +#include "llinventorymodelbackgroundfetch.h" #include "llinventoryobserver.h" #include "llinventorypanel.h" #include "llfloaterinventory.h" @@ -1053,7 +1054,7 @@ public: { // We need to find textures in all folders, so get the main // background download going. - gInventory.startBackgroundFetch(); + LLInventoryModelBackgroundFetch::instance().start(); gInventory.removeObserver(this); delete this; } @@ -1074,9 +1075,9 @@ BOOL LLTextureCtrl::handleMouseDown(S32 x, S32 y, MASK mask) { showPicker(FALSE); //grab textures first... - gInventory.startBackgroundFetch(gInventory.findCategoryUUIDForType(LLFolderType::FT_TEXTURE)); + LLInventoryModelBackgroundFetch::instance().start(gInventory.findCategoryUUIDForType(LLFolderType::FT_TEXTURE)); //...then start full inventory fetch. - gInventory.startBackgroundFetch(); + LLInventoryModelBackgroundFetch::instance().start(); handled = TRUE; } diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp index b1b3ae473c..2ea6e5936d 100644 --- a/indra/newview/lltexturefetch.cpp +++ b/indra/newview/lltexturefetch.cpp @@ -292,7 +292,10 @@ public: const LLChannelDescriptors& channels, const LLIOPipe::buffer_ptr_t& buffer) { - if ((gSavedSettings.getBOOL("LogTextureDownloadsToViewerLog")) || (gSavedSettings.getBOOL("LogTextureDownloadsToSimulator"))) + static LLCachedControl<bool> log_to_viewer_log(gSavedSettings,"LogTextureDownloadsToViewerLog"); + static LLCachedControl<bool> log_to_sim(gSavedSettings,"LogTextureDownloadsToSimulator"); + + if (log_to_viewer_log || log_to_sim) { mFetcher->mTextureInfo.setRequestStartTime(mID, mStartTime); U64 timeNow = LLTimer::getTotalTime(); @@ -571,7 +574,7 @@ bool LLTextureFetchWorker::doWork(S32 param) if ((mFetcher->isQuitting() || mImagePriority < 1.0f || getFlags(LLWorkerClass::WCF_DELETE_REQUESTED))) { - if (mState < WRITE_TO_CACHE) + if (mState < DECODE_IMAGE) { return true; // abort } @@ -715,10 +718,10 @@ bool LLTextureFetchWorker::doWork(S32 param) if (mState == LOAD_FROM_NETWORK) { - bool get_url = gSavedSettings.getBOOL("ImagePipelineUseHTTP"); - if (!mUrl.empty()) get_url = false; + static LLCachedControl<bool> use_http(gSavedSettings,"ImagePipelineUseHTTP"); + // if (mHost != LLHost::invalid) get_url = false; - if ( get_url ) + if ( use_http && mUrl.empty())//get http url. { LLViewerRegion* region = NULL; if (mHost == LLHost::invalid) @@ -1717,7 +1720,8 @@ S32 LLTextureFetch::update(U32 max_time_ms) { S32 res; - mMaxBandwidth = gSavedSettings.getF32("ThrottleBandwidthKBPS"); + static LLCachedControl<F32> band_width(gSavedSettings,"ThrottleBandwidthKBPS"); + mMaxBandwidth = band_width ; res = LLWorkerThread::update(max_time_ms); @@ -1923,7 +1927,9 @@ void LLTextureFetch::sendRequestListToSimulators() // llinfos << "IMAGE REQUEST: " << req->mID << " Discard: " << req->mDesiredDiscard // << " Packet: " << packet << " Priority: " << req->mImagePriority << llendl; - if ((gSavedSettings.getBOOL("LogTextureDownloadsToViewerLog")) || (gSavedSettings.getBOOL("LogTextureDownloadsToSimulator"))) + static LLCachedControl<bool> log_to_viewer_log(gSavedSettings,"LogTextureDownloadsToViewerLog"); + static LLCachedControl<bool> log_to_sim(gSavedSettings,"LogTextureDownloadsToSimulator"); + if (log_to_viewer_log || log_to_sim) { mTextureInfo.setRequestStartTime(req->mID, LLTimer::getTotalTime()); mTextureInfo.setRequestOffset(req->mID, 0); @@ -2144,7 +2150,10 @@ bool LLTextureFetch::receiveImagePacket(const LLHost& host, const LLUUID& id, U1 if(packet_num >= (worker->mTotalPackets - 1)) { - if ((gSavedSettings.getBOOL("LogTextureDownloadsToViewerLog")) || (gSavedSettings.getBOOL("LogTextureDownloadsToSimulator"))) + static LLCachedControl<bool> log_to_viewer_log(gSavedSettings,"LogTextureDownloadsToViewerLog"); + static LLCachedControl<bool> log_to_sim(gSavedSettings,"LogTextureDownloadsToSimulator"); + + if (log_to_viewer_log || log_to_sim) { U64 timeNow = LLTimer::getTotalTime(); mTextureInfo.setRequestSize(id, worker->mFileSize); diff --git a/indra/newview/lltextureview.cpp b/indra/newview/lltextureview.cpp index 6cd8a78b25..43913f3632 100644 --- a/indra/newview/lltextureview.cpp +++ b/indra/newview/lltextureview.cpp @@ -660,8 +660,9 @@ struct compare_decode_pair struct KillView { - void operator()(LLView* viewp) const + void operator()(LLView* viewp) { + viewp->getParent()->removeChild(viewp); viewp->die(); } }; @@ -676,8 +677,12 @@ void LLTextureView::draw() for_each(mTextureBars.begin(), mTextureBars.end(), KillView()); mTextureBars.clear(); - delete mGLTexMemBar; - mGLTexMemBar = 0; + if (mGLTexMemBar) + { + removeChild(mGLTexMemBar); + mGLTexMemBar->die(); + mGLTexMemBar = 0; + } typedef std::multiset<decode_pair_t, compare_decode_pair > display_list_t; display_list_t display_image_list; diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp index e6d13a7613..907740a88e 100644 --- a/indra/newview/lltoastnotifypanel.cpp +++ b/indra/newview/lltoastnotifypanel.cpp @@ -44,6 +44,7 @@ #include "llrect.h" #include "lltrans.h" #include "llnotificationsutil.h" +#include "llviewermessage.h" const S32 BOTTOM_PAD = VPAD * 3; const S32 IGNORE_BTN_TOP_DELTA = 3*VPAD;//additional ignore_btn padding @@ -53,6 +54,8 @@ S32 BUTTON_WIDTH = 90; const LLFontGL* LLToastNotifyPanel::sFont = NULL; const LLFontGL* LLToastNotifyPanel::sFontSmall = NULL; +LLToastNotifyPanel::button_click_signal_t LLToastNotifyPanel::sButtonClickSignal; + LLToastNotifyPanel::LLToastNotifyPanel(LLNotificationPtr& notification, const LLRect& rect) : LLToastPanel(notification), mTextBox(NULL), @@ -60,7 +63,8 @@ mInfoPanel(NULL), mControlPanel(NULL), mNumOptions(0), mNumButtons(0), -mAddedDefaultBtn(false) +mAddedDefaultBtn(false), +mCloseNotificationOnDestroy(true) { LLUICtrlFactory::getInstance()->buildPanel(this, "panel_notification.xml"); if(rect != LLRect::null) @@ -193,11 +197,25 @@ mAddedDefaultBtn(false) // we need to keep min width and max height to make visible all buttons, because width of the toast can not be changed adjustPanelForScriptNotice(button_panel_width, button_panel_height); updateButtonsLayout(buttons, h_pad); + // save buttons for later use in disableButtons() + mButtons.assign(buttons.begin(), buttons.end()); } } // adjust panel's height to the text size mInfoPanel->setFollowsAll(); snapToMessageHeight(mTextBox, MAX_LENGTH); + + if(notification->isReusable()) + { + mButtonClickConnection = sButtonClickSignal.connect( + boost::bind(&LLToastNotifyPanel::onToastPanelButtonClicked, this, _1, _2)); + + if(notification->isRespondedTo()) + { + // User selected an option in toast, now disable required buttons in IM window + disableRespondedOptions(notification); + } + } } void LLToastNotifyPanel::addDefaultButton() { @@ -265,9 +283,13 @@ LLButton* LLToastNotifyPanel::createButton(const LLSD& form_element, BOOL is_opt LLToastNotifyPanel::~LLToastNotifyPanel() { + mButtonClickConnection.disconnect(); + std::for_each(mBtnCallbackData.begin(), mBtnCallbackData.end(), DeletePointer()); - if (LLNotificationsUtil::find(mNotification->getID()) != NULL) + if (mCloseNotificationOnDestroy && LLNotificationsUtil::find(mNotification->getID()) != NULL) { + // let reusable notification be deleted + mNotification->setReusable(false); LLNotifications::getInstance()->cancel(mNotification); } } @@ -342,6 +364,104 @@ void LLToastNotifyPanel::adjustPanelForTipNotice() } } +typedef std::set<std::string> button_name_set_t; +typedef std::map<std::string, button_name_set_t> disable_button_map_t; + +disable_button_map_t initUserGiveItemDisableButtonMap() +{ + // see EXT-5905 for disable rules + + disable_button_map_t disable_map; + button_name_set_t buttons; + + buttons.insert("Show"); + disable_map.insert(std::make_pair("Show", buttons)); + + buttons.insert("Discard"); + disable_map.insert(std::make_pair("Discard", buttons)); + + buttons.insert("Mute"); + disable_map.insert(std::make_pair("Mute", buttons)); + + return disable_map; +} + +disable_button_map_t initTeleportOfferedDisableButtonMap() +{ + disable_button_map_t disable_map; + button_name_set_t buttons; + + buttons.insert("Teleport"); + buttons.insert("Cancel"); + + disable_map.insert(std::make_pair("Teleport", buttons)); + disable_map.insert(std::make_pair("Cancel", buttons)); + + return disable_map; +} + +disable_button_map_t initFriendshipOfferedDisableButtonMap() +{ + disable_button_map_t disable_map; + button_name_set_t buttons; + + buttons.insert("Accept"); + buttons.insert("Decline"); + + disable_map.insert(std::make_pair("Accept", buttons)); + disable_map.insert(std::make_pair("Decline", buttons)); + + return disable_map; +} + +button_name_set_t getButtonDisableList(const std::string& notification_name, const std::string& button_name) +{ + static disable_button_map_t user_give_item_disable_map = initUserGiveItemDisableButtonMap(); + static disable_button_map_t teleport_offered_disable_map = initTeleportOfferedDisableButtonMap(); + static disable_button_map_t friendship_offered_disable_map = initFriendshipOfferedDisableButtonMap(); + + disable_button_map_t::const_iterator it; + disable_button_map_t::const_iterator it_end; + disable_button_map_t search_map; + + if("UserGiveItem" == notification_name) + { + search_map = user_give_item_disable_map; + } + else if("TeleportOffered" == notification_name) + { + search_map = teleport_offered_disable_map; + } + else if("OfferFriendship" == notification_name) + { + search_map = friendship_offered_disable_map; + } + + it = search_map.find(button_name); + it_end = search_map.end(); + + if(it_end != it) + { + return it->second; + } + return button_name_set_t(); +} + +void LLToastNotifyPanel::disableButtons(const std::string& notification_name, const std::string& selected_button) +{ + button_name_set_t buttons = getButtonDisableList(notification_name, selected_button); + + std::vector<index_button_pair_t>::const_iterator it = mButtons.begin(); + for ( ; it != mButtons.end(); it++) + { + LLButton* btn = it->second; + if(buttons.find(btn->getName()) != buttons.end()) + { + btn->setEnabled(FALSE); + } + } +} + // static void LLToastNotifyPanel::onClickButton(void* data) { @@ -354,8 +474,81 @@ void LLToastNotifyPanel::onClickButton(void* data) { response[button_name] = true; } + + bool is_reusable = self->mNotification->isReusable(); + // When we call respond(), LLOfferInfo will delete itself in inventory_offer_callback(), + // lets copy it while it's still valid. + LLOfferInfo* old_info = static_cast<LLOfferInfo*>(self->mNotification->getResponder()); + LLOfferInfo* new_info = NULL; + if(is_reusable && old_info) + { + new_info = new LLOfferInfo(*old_info); + self->mNotification->setResponder(new_info); + } + self->mNotification->respond(response); - // disable all buttons - self->mControlPanel->setEnabled(FALSE); + if(is_reusable) + { + sButtonClickSignal(self->mNotification->getID(), button_name); + + if(new_info) + { + self->mNotification->setResponseFunctor( + boost::bind(&LLOfferInfo::inventory_offer_callback, new_info, _1, _2)); + } + } + else + { + // disable all buttons + self->mControlPanel->setEnabled(FALSE); + } } + +void LLToastNotifyPanel::onToastPanelButtonClicked(const LLUUID& notification_id, const std::string btn_name) +{ + if(mNotification->getID() == notification_id) + { + disableButtons(mNotification->getName(), btn_name); + } +} + +void LLToastNotifyPanel::disableRespondedOptions(LLNotificationPtr& notification) +{ + LLSD response = notification->getResponse(); + for (LLSD::map_const_iterator response_it = response.beginMap(); + response_it != response.endMap(); ++response_it) + { + if (response_it->second.isBoolean() && response_it->second.asBoolean()) + { + // that after multiple responses there can be many pressed buttons + // need to process them all + disableButtons(notification->getName(), response_it->first); + } + } +} + + +////////////////////////////////////////////////////////////////////////// + +LLIMToastNotifyPanel::LLIMToastNotifyPanel(LLNotificationPtr& pNotification, const LLRect& rect /* = LLRect::null */) + : LLToastNotifyPanel(pNotification, rect) +{ + mTextBox->setFollowsAll(); +} + +void LLIMToastNotifyPanel::reshape(S32 width, S32 height, BOOL called_from_parent /* = TRUE */) +{ + S32 text_height = mTextBox->getTextBoundingRect().getHeight(); + S32 widget_height = mTextBox->getRect().getHeight(); + S32 delta = text_height - widget_height; + LLRect rc = getRect(); + + rc.setLeftTopAndSize(rc.mLeft, rc.mTop, width, height + delta); + height = rc.getHeight(); + width = rc.getWidth(); + + LLToastPanel::reshape(width, height, called_from_parent); +} + +// EOF diff --git a/indra/newview/lltoastnotifypanel.h b/indra/newview/lltoastnotifypanel.h index 152975e7de..a8d2d03236 100644 --- a/indra/newview/lltoastnotifypanel.h +++ b/indra/newview/lltoastnotifypanel.h @@ -65,6 +65,7 @@ public: virtual ~LLToastNotifyPanel(); LLPanel * getControlPanel() { return mControlPanel; } + void setCloseNotificationOnDestroy(bool close) { mCloseNotificationOnDestroy = close; } protected: LLButton* createButton(const LLSD& form_element, BOOL is_option); @@ -76,7 +77,7 @@ protected: }; std::vector<InstanceAndS32*> mBtnCallbackData; -private: + bool mCloseNotificationOnDestroy; typedef std::pair<int,LLButton*> index_button_pair_t; void adjustPanelForScriptNotice(S32 max_width, S32 max_height); @@ -90,6 +91,13 @@ private: */ void updateButtonsLayout(const std::vector<index_button_pair_t>& buttons, S32 h_pad); + /** + * Disable specific button(s) based on notification name and clicked button + */ + void disableButtons(const std::string& notification_name, const std::string& selected_button); + + std::vector<index_button_pair_t> mButtons; + // panel elements LLTextBase* mTextBox; LLPanel* mInfoPanel; // a panel, that contains an information @@ -98,6 +106,21 @@ private: // internal handler for button being clicked static void onClickButton(void* data); + typedef boost::signals2::signal <void (const LLUUID& notification_id, const std::string btn_name)> + button_click_signal_t; + static button_click_signal_t sButtonClickSignal; + boost::signals2::connection mButtonClickConnection; + + /** + * handle sButtonClickSignal (to disable buttons) across all panels with given notification_id + */ + void onToastPanelButtonClicked(const LLUUID& notification_id, const std::string btn_name); + + /** + * Process response data. Will disable selected options + */ + void disableRespondedOptions(LLNotificationPtr& notification); + bool mIsTip; bool mAddedDefaultBtn; bool mIsScriptDialog; @@ -111,4 +134,13 @@ private: static const LLFontGL* sFontSmall; }; +class LLIMToastNotifyPanel : public LLToastNotifyPanel +{ +public: + + LLIMToastNotifyPanel(LLNotificationPtr& pNotification, const LLRect& rect = LLRect::null); + + /*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE); +}; + #endif /* LLTOASTNOTIFYPANEL_H_ */ diff --git a/indra/newview/lltoolcomp.cpp b/indra/newview/lltoolcomp.cpp index fff18df442..d05bfc53e5 100644 --- a/indra/newview/lltoolcomp.cpp +++ b/indra/newview/lltoolcomp.cpp @@ -54,6 +54,7 @@ #include "llviewerobject.h" #include "llviewerwindow.h" #include "llagent.h" +#include "llagentcamera.h" #include "llfloatertools.h" #include "llviewercontrol.h" @@ -784,7 +785,7 @@ BOOL LLToolCompGun::handleScrollWheel(S32 x, S32 y, S32 clicks) { if (clicks > 0) { - gAgent.changeCameraToDefault(); + gAgentCamera.changeCameraToDefault(); } return TRUE; diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp index 125c62474e..394f550f2e 100644 --- a/indra/newview/lltooldraganddrop.cpp +++ b/indra/newview/lltooldraganddrop.cpp @@ -37,6 +37,7 @@ #include "llnotificationsutil.h" // project headers #include "llagent.h" +#include "llagentcamera.h" #include "llagentui.h" #include "llagentwearables.h" #include "llappearancemgr.h" @@ -49,6 +50,7 @@ #include "llhudeffecttrail.h" #include "llimview.h" #include "llinventorybridge.h" +#include "llinventoryfunctions.h" #include "llmutelist.h" #include "llpreviewnotecard.h" #include "llrecentpeople.h" @@ -79,7 +81,7 @@ public: virtual bool operator()(LLInventoryCategory* cat, LLInventoryItem* item) { - if(cat && (cat->getPreferredType() == LLFolderType::FT_NONE)) + if (cat && (cat->getPreferredType() == LLFolderType::FT_NONE)) { return true; } @@ -95,8 +97,8 @@ public: virtual bool operator()(LLInventoryCategory* cat, LLInventoryItem* item) { - if(item) return true; - if(cat && (cat->getPreferredType() == LLFolderType::FT_NONE)) + if (item) return true; + if (cat && (cat->getPreferredType() == LLFolderType::FT_NONE)) { return true; } @@ -123,18 +125,18 @@ bool LLDroppableItem::operator()(LLInventoryCategory* cat, LLInventoryItem* item) { bool allowed = false; - if(item) + if (item) { allowed = itemTransferCommonlyAllowed(item); - if(allowed + if (allowed && mIsTransfer && !item->getPermissions().allowOperationBy(PERM_TRANSFER, gAgent.getID())) { allowed = false; } - if(allowed && !item->getPermissions().allowCopyBy(gAgent.getID())) + if (allowed && !item->getPermissions().allowCopyBy(gAgent.getID())) { ++mCountLosing; } @@ -154,7 +156,7 @@ bool LLUncopyableItems::operator()(LLInventoryCategory* cat, LLInventoryItem* item) { bool uncopyable = false; - if(item) + if (item) { if (itemTransferCommonlyAllowed(item) && !item->getPermissions().allowCopyBy(gAgent.getID())) @@ -179,10 +181,10 @@ bool LLDropCopyableItems::operator()( LLInventoryItem* item) { bool allowed = false; - if(item) + if (item) { allowed = itemTransferCommonlyAllowed(item); - if(allowed && + if (allowed && !item->getPermissions().allowCopyBy(gAgent.getID())) { // whoops, can't copy it - don't allow it. @@ -211,16 +213,16 @@ bool LLGiveable::operator()(LLInventoryCategory* cat, LLInventoryItem* item) return true; bool allowed = false; - if(item) + if (item) { allowed = itemTransferCommonlyAllowed(item); - if(allowed && + if (allowed && !item->getPermissions().allowOperationBy(PERM_TRANSFER, gAgent.getID())) { allowed = FALSE; } - if(allowed && + if (allowed && !item->getPermissions().allowCopyBy(gAgent.getID())) { ++mCountLosing; @@ -261,7 +263,7 @@ void LLCategoryDropObserver::done() { gInventory.removeObserver(this); LLViewerObject* dst_obj = gObjectList.findObject(mObjectID); - if(dst_obj) + if (dst_obj) { // *FIX: coalesce these... LLInventoryItem* item = NULL; @@ -270,7 +272,7 @@ void LLCategoryDropObserver::done() for(; it < end; ++it) { item = gInventory.getItem(*it); - if(item) + if (item) { LLToolDragAndDrop::dropInventory( dst_obj, @@ -303,8 +305,8 @@ void LLCategoryDropDescendentsObserver::done() { gInventory.removeObserver(this); - folder_ref_t::iterator it = mCompleteFolders.begin(); - folder_ref_t::iterator end = mCompleteFolders.end(); + uuid_vec_t::iterator it = mCompleteFolders.begin(); + uuid_vec_t::iterator end = mCompleteFolders.end(); LLViewerInventoryCategory::cat_array_t cats; LLViewerInventoryItem::item_array_t items; for(; it != end; ++it) @@ -317,7 +319,7 @@ void LLCategoryDropDescendentsObserver::done() } S32 count = items.count(); - if(count) + if (count) { std::set<LLUUID> unique_ids; for(S32 i = 0; i < count; ++i) @@ -330,7 +332,7 @@ void LLCategoryDropDescendentsObserver::done() LLCategoryDropObserver* dropper; dropper = new LLCategoryDropObserver(mObjectID, mSource); dropper->fetchItems(ids); - if(dropper->isEverythingComplete()) + if (dropper->isEverythingComplete()) { dropper->done(); } @@ -421,7 +423,7 @@ void LLToolDragAndDrop::beginDrag(EDragAndDropType type, const LLUUID& source_id, const LLUUID& object_id) { - if(type == DAD_NONE) + if (type == DAD_NONE) { llwarns << "Attempted to start drag without a cargo type" << llendl; return; @@ -437,24 +439,24 @@ void LLToolDragAndDrop::beginDrag(EDragAndDropType type, setMouseCapture( TRUE ); LLToolMgr::getInstance()->setTransientTool( this ); mCursor = UI_CURSOR_NO; - if((mCargoTypes[0] == DAD_CATEGORY) + if ((mCargoTypes[0] == DAD_CATEGORY) && ((mSource == SOURCE_AGENT) || (mSource == SOURCE_LIBRARY))) { LLInventoryCategory* cat = gInventory.getCategory(cargo_id); // go ahead and fire & forget the descendents if we are not // dragging a protected folder. - if(cat) + if (cat) { LLViewerInventoryCategory::cat_array_t cats; LLViewerInventoryItem::item_array_t items; LLNoPreferredTypeOrItem is_not_preferred; - LLInventoryFetchComboObserver::folder_ref_t folder_ids; - LLInventoryFetchComboObserver::item_ref_t item_ids; - if(is_not_preferred(cat, NULL)) + uuid_vec_t folder_ids; + uuid_vec_t item_ids; + if (is_not_preferred(cat, NULL)) { folder_ids.push_back(cargo_id); } - gInventory.collectDescendentsIf( + gInventory.collectDescendentsIf ( cargo_id, cats, items, @@ -471,7 +473,7 @@ void LLToolDragAndDrop::beginDrag(EDragAndDropType type, { item_ids.push_back(items.get(i)->getUUID()); } - if(!folder_ids.empty() || !item_ids.empty()) + if (!folder_ids.empty() || !item_ids.empty()) { LLCategoryFireAndForget fetcher; fetcher.fetch(folder_ids, item_ids); @@ -482,7 +484,7 @@ void LLToolDragAndDrop::beginDrag(EDragAndDropType type, void LLToolDragAndDrop::beginMultiDrag( const std::vector<EDragAndDropType> types, - const std::vector<LLUUID>& cargo_ids, + const uuid_vec_t& cargo_ids, ESource source, const LLUUID& source_id) { @@ -492,7 +494,7 @@ void LLToolDragAndDrop::beginMultiDrag( std::vector<EDragAndDropType>::const_iterator types_it; for (types_it = types.begin(); types_it != types.end(); ++types_it) { - if(DAD_NONE == *types_it) + if (DAD_NONE == *types_it) { llwarns << "Attempted to start drag without a cargo type" << llendl; return; @@ -506,7 +508,7 @@ void LLToolDragAndDrop::beginMultiDrag( setMouseCapture( TRUE ); LLToolMgr::getInstance()->setTransientTool( this ); mCursor = UI_CURSOR_NO; - if((mSource == SOURCE_AGENT) || (mSource == SOURCE_LIBRARY)) + if ((mSource == SOURCE_AGENT) || (mSource == SOURCE_LIBRARY)) { // find categories (i.e. inventory folders) in the cargo. LLInventoryCategory* cat = NULL; @@ -515,16 +517,16 @@ void LLToolDragAndDrop::beginMultiDrag( for(S32 i = 0; i < count; ++i) { cat = gInventory.getCategory(cargo_ids[i]); - if(cat) + if (cat) { LLViewerInventoryCategory::cat_array_t cats; LLViewerInventoryItem::item_array_t items; LLNoPreferredType is_not_preferred; - if(is_not_preferred(cat, NULL)) + if (is_not_preferred(cat, NULL)) { cat_ids.insert(cat->getUUID()); } - gInventory.collectDescendentsIf( + gInventory.collectDescendentsIf ( cat->getUUID(), cats, items, @@ -537,11 +539,11 @@ void LLToolDragAndDrop::beginMultiDrag( } } } - if(!cat_ids.empty()) + if (!cat_ids.empty()) { - LLInventoryFetchComboObserver::folder_ref_t folder_ids; - LLInventoryFetchComboObserver::item_ref_t item_ids; - std::back_insert_iterator<LLInventoryFetchDescendentsObserver::folder_ref_t> copier(folder_ids); + uuid_vec_t folder_ids; + uuid_vec_t item_ids; + std::back_insert_iterator<uuid_vec_t> copier(folder_ids); std::copy(cat_ids.begin(), cat_ids.end(), copier); LLCategoryFireAndForget fetcher; fetcher.fetch(folder_ids, item_ids); @@ -569,7 +571,7 @@ void LLToolDragAndDrop::onMouseCaptureLost() BOOL LLToolDragAndDrop::handleMouseUp( S32 x, S32 y, MASK mask ) { - if( hasMouseCapture() ) + if (hasMouseCapture()) { EAcceptance acceptance = ACCEPT_NO; dragOrDrop( x, y, mask, TRUE, &acceptance ); @@ -580,7 +582,7 @@ BOOL LLToolDragAndDrop::handleMouseUp( S32 x, S32 y, MASK mask ) ECursorType LLToolDragAndDrop::acceptanceToCursor( EAcceptance acceptance ) { - switch( acceptance ) + switch (acceptance) { case ACCEPT_YES_MULTI: if (mCargoIDs.size() > 1) @@ -697,7 +699,7 @@ void LLToolDragAndDrop::dragOrDrop( S32 x, S32 y, MASK mask, BOOL drop, mToolTipMsg.clear(); - if(top_view) + if (top_view) { handled = TRUE; @@ -762,7 +764,7 @@ void LLToolDragAndDrop::dragOrDrop( S32 x, S32 y, MASK mask, BOOL drop, } } - if(!handled) + if (!handled) { handled = TRUE; @@ -820,7 +822,7 @@ void LLToolDragAndDrop::dragOrDrop( S32 x, S32 y, MASK mask, BOOL drop, } } - if ( !handled ) + if (!handled) { dragOrDrop3D( x, y, mask, drop, acceptance ); } @@ -873,7 +875,7 @@ void LLToolDragAndDrop::pick(const LLPickInfo& pick_info) if (hit_obj->isAttachment() && !hit_obj->isHUDAttachment()) { LLVOAvatar* avatar = LLVOAvatar::findAvatarFromAttachment( hit_obj ); - if( !avatar ) + if (!avatar) { mLastAccept = ACCEPT_NO; mCursor = UI_CURSOR_NO; @@ -885,7 +887,7 @@ void LLToolDragAndDrop::pick(const LLPickInfo& pick_info) if (hit_obj->isAvatar()) { - if(((LLVOAvatar*) hit_obj)->isSelf()) + if (((LLVOAvatar*) hit_obj)->isSelf()) { target = DT_SELF; hit_face = -1; @@ -959,7 +961,7 @@ void LLToolDragAndDrop::pick(const LLPickInfo& pick_info) gViewerWindow->getWindow()->setCursor( cursor ); mLastHitPos = pick_info.mPosGlobal; - mLastCameraPos = gAgent.getCameraPositionGlobal(); + mLastCameraPos = gAgentCamera.getCameraPositionGlobal(); } // static @@ -971,7 +973,7 @@ BOOL LLToolDragAndDrop::handleDropTextureProtections(LLViewerObject* hit_obj, // Always succeed if.... // texture is from the library // or already in the contents of the object - if(SOURCE_LIBRARY == source) + if (SOURCE_LIBRARY == source) { // dropping a texture from the library always just works. return TRUE; @@ -999,7 +1001,7 @@ BOOL LLToolDragAndDrop::handleDropTextureProtections(LLViewerObject* hit_obj, if (!item) return FALSE; LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item); - if(!item->getPermissions().allowOperationBy(PERM_COPY, gAgent.getID())) + if (!item->getPermissions().allowOperationBy(PERM_COPY, gAgent.getID())) { // Check that we can add the texture as inventory to the object if (willObjectAcceptInventory(hit_obj,item) < ACCEPT_YES_COPY_SINGLE ) @@ -1007,20 +1009,20 @@ BOOL LLToolDragAndDrop::handleDropTextureProtections(LLViewerObject* hit_obj, return FALSE; } // make sure the object has the texture in it's inventory. - if(SOURCE_AGENT == source) + if (SOURCE_AGENT == source) { // Remove the texture from local inventory. The server // will actually remove the item from agent inventory. gInventory.deleteObject(item->getUUID()); gInventory.notifyObservers(); } - else if(SOURCE_WORLD == source) + else if (SOURCE_WORLD == source) { // *FIX: if the objects are in different regions, and the // source region has crashed, you can bypass these // permissions. LLViewerObject* src_obj = gObjectList.findObject(src_id); - if(src_obj) + if (src_obj) { src_obj->removeInventory(item->getUUID()); } @@ -1035,7 +1037,7 @@ BOOL LLToolDragAndDrop::handleDropTextureProtections(LLViewerObject* hit_obj, // TODO: Check to see if adding the item was successful; if not, then // we should return false here. } - else if(!item->getPermissions().allowOperationBy(PERM_TRANSFER, + else if (!item->getPermissions().allowOperationBy(PERM_TRANSFER, gAgent.getID())) { // Check that we can add the texture as inventory to the object @@ -1067,7 +1069,7 @@ void LLToolDragAndDrop::dropTextureAllFaces(LLViewerObject* hit_obj, } LLUUID asset_id = item->getAssetUUID(); BOOL success = handleDropTextureProtections(hit_obj, item, source, src_id); - if(!success) + if (!success) { return; } @@ -1109,7 +1111,7 @@ void LLToolDragAndDrop::dropTextureOneFace(LLViewerObject* hit_obj, } LLUUID asset_id = item->getAssetUUID(); BOOL success = handleDropTextureProtections(hit_obj, item, source, src_id); - if(!success) + if (!success) { return; } @@ -1132,32 +1134,32 @@ void LLToolDragAndDrop::dropScript(LLViewerObject* hit_obj, { // *HACK: In order to resolve SL-22177, we need to block drags // from notecards and objects onto other objects. - if((SOURCE_WORLD == LLToolDragAndDrop::getInstance()->mSource) + if ((SOURCE_WORLD == LLToolDragAndDrop::getInstance()->mSource) || (SOURCE_NOTECARD == LLToolDragAndDrop::getInstance()->mSource)) { llwarns << "Call to LLToolDragAndDrop::dropScript() from world" << " or notecard." << llendl; return; } - if(hit_obj && item) + if (hit_obj && item) { LLPointer<LLViewerInventoryItem> new_script = new LLViewerInventoryItem(item); - if(!item->getPermissions().allowCopyBy(gAgent.getID())) + if (!item->getPermissions().allowCopyBy(gAgent.getID())) { - if(SOURCE_AGENT == source) + if (SOURCE_AGENT == source) { // Remove the script from local inventory. The server // will actually remove the item from agent inventory. gInventory.deleteObject(item->getUUID()); gInventory.notifyObservers(); } - else if(SOURCE_WORLD == source) + else if (SOURCE_WORLD == source) { // *FIX: if the objects are in different regions, and // the source region has crashed, you can bypass // these permissions. LLViewerObject* src_obj = gObjectList.findObject(src_id); - if(src_obj) + if (src_obj) { src_obj->removeInventory(item->getUUID()); } @@ -1173,7 +1175,7 @@ void LLToolDragAndDrop::dropScript(LLViewerObject* hit_obj, // VEFFECT: SetScript LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM, TRUE); - effectp->setSourceObject(gAgent.getAvatarObject()); + effectp->setSourceObject(gAgentAvatarp); effectp->setTargetObject(hit_obj); effectp->setDuration(LL_HUD_DUR_SHORT); effectp->setColor(LLColor4U(gAgent.getEffectColor())); @@ -1197,7 +1199,7 @@ void LLToolDragAndDrop::dropObject(LLViewerObject* raycast_target, LLViewerInventoryItem* item; LLViewerInventoryCategory* cat; locateInventory(item, cat); - if(!item || !item->isComplete()) return; + if (!item || !item->isComplete()) return; //if (regionp // && (regionp->getRegionFlags() & REGION_FLAGS_SANDBOX)) @@ -1208,7 +1210,7 @@ void LLToolDragAndDrop::dropObject(LLViewerObject* raycast_target, // this will remove the object from inventory after rez. Only // bother with this check if we would not normally remove from // inventory. - if(!remove_from_inventory + if (!remove_from_inventory && !item->getPermissions().allowCopyBy(gAgent.getID())) { remove_from_inventory = TRUE; @@ -1219,7 +1221,7 @@ void LLToolDragAndDrop::dropObject(LLViewerObject* raycast_target, // hitting objects that were clipped by the near plane or culled // on the viewer. LLUUID ray_target_id; - if( raycast_target ) + if (raycast_target) { ray_target_id = raycast_target->getID(); } @@ -1231,7 +1233,7 @@ void LLToolDragAndDrop::dropObject(LLViewerObject* raycast_target, // Check if it's in the trash. bool is_in_trash = false; const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); - if(gInventory.isObjectDescendentOf(item->getUUID(), trash_id)) + if (gInventory.isObjectDescendentOf(item->getUUID(), trash_id)) { is_in_trash = true; remove_from_inventory = TRUE; @@ -1289,7 +1291,7 @@ void LLToolDragAndDrop::dropObject(LLViewerObject* raycast_target, pack_permissions_slam(msg, item->getFlags(), item->getPermissions()); LLUUID folder_id = item->getParentUUID(); - if((SOURCE_LIBRARY == mSource) || (is_in_trash)) + if ((SOURCE_LIBRARY == mSource) || (is_in_trash)) { // since it's coming from the library or trash, we want to not // 'take' it back to the same place. @@ -1323,7 +1325,7 @@ void LLToolDragAndDrop::dropObject(LLViewerObject* raycast_target, gViewerWindow->getWindow()->incBusyCount(); } - if(remove_from_inventory) + if (remove_from_inventory) { // Delete it from inventory immediately so that users cannot // easily bypass copy protection in laggy situations. If the @@ -1334,7 +1336,7 @@ void LLToolDragAndDrop::dropObject(LLViewerObject* raycast_target, // VEFFECT: DropObject LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM, TRUE); - effectp->setSourceObject(gAgent.getAvatarObject()); + effectp->setSourceObject(gAgentAvatarp); effectp->setPositionGlobal(mLastHitPos); effectp->setDuration(LL_HUD_DUR_SHORT); effectp->setColor(LLColor4U(gAgent.getEffectColor())); @@ -1349,7 +1351,7 @@ void LLToolDragAndDrop::dropInventory(LLViewerObject* hit_obj, { // *HACK: In order to resolve SL-22177, we need to block drags // from notecards and objects onto other objects. - if((SOURCE_WORLD == LLToolDragAndDrop::getInstance()->mSource) + if ((SOURCE_WORLD == LLToolDragAndDrop::getInstance()->mSource) || (SOURCE_NOTECARD == LLToolDragAndDrop::getInstance()->mSource)) { llwarns << "Call to LLToolDragAndDrop::dropInventory() from world" @@ -1361,9 +1363,9 @@ void LLToolDragAndDrop::dropInventory(LLViewerObject* hit_obj, time_t creation_date = time_corrected(); new_item->setCreationDate(creation_date); - if(!item->getPermissions().allowCopyBy(gAgent.getID())) + if (!item->getPermissions().allowCopyBy(gAgent.getID())) { - if(SOURCE_AGENT == source) + if (SOURCE_AGENT == source) { // Remove the inventory item from local inventory. The // server will actually remove the item from agent @@ -1371,13 +1373,13 @@ void LLToolDragAndDrop::dropInventory(LLViewerObject* hit_obj, gInventory.deleteObject(item->getUUID()); gInventory.notifyObservers(); } - else if(SOURCE_WORLD == source) + else if (SOURCE_WORLD == source) { // *FIX: if the objects are in different regions, and the // source region has crashed, you can bypass these // permissions. LLViewerObject* src_obj = gObjectList.findObject(src_id); - if(src_obj) + if (src_obj) { src_obj->removeInventory(item->getUUID()); } @@ -1397,7 +1399,7 @@ void LLToolDragAndDrop::dropInventory(LLViewerObject* hit_obj, // VEFFECT: AddToInventory LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM, TRUE); - effectp->setSourceObject(gAgent.getAvatarObject()); + effectp->setSourceObject(gAgentAvatarp); effectp->setTargetObject(hit_obj); effectp->setDuration(LL_HUD_DUR_SHORT); effectp->setColor(LLColor4U(gAgent.getEffectColor())); @@ -1410,11 +1412,11 @@ void LLToolDragAndDrop::giveInventory(const LLUUID& to_agent, { llinfos << "LLToolDragAndDrop::giveInventory()" << llendl; - if(!isInventoryGiveAcceptable(item)) + if (!isInventoryGiveAcceptable(item)) { return; } - if(item->getPermissions().allowCopyBy(gAgent.getID())) + if (item->getPermissions().allowCopyBy(gAgent.getID())) { // just give it away. LLToolDragAndDrop::commitGiveInventoryItem(to_agent, item, im_session_id); @@ -1438,7 +1440,7 @@ bool LLToolDragAndDrop::handleCopyProtectedItem(const LLSD& notification, const { case 0: // "Yes" item = gInventory.getItem(notification["payload"]["item_id"].asUUID()); - if(item) + if (item) { LLToolDragAndDrop::commitGiveInventoryItem(notification["payload"]["agent_id"].asUUID(), item); @@ -1465,7 +1467,7 @@ void LLToolDragAndDrop::commitGiveInventoryItem(const LLUUID& to_agent, LLInventoryItem* item, const LLUUID& im_session_id) { - if(!item) return; + if (!item) return; std::string name; LLAgentUI::buildFullname(name); LLUUID transaction_id; @@ -1495,7 +1497,7 @@ void LLToolDragAndDrop::commitGiveInventoryItem(const LLUUID& to_agent, // VEFFECT: giveInventory LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM, TRUE); - effectp->setSourceObject(gAgent.getAvatarObject()); + effectp->setSourceObject(gAgentAvatarp); effectp->setTargetObject(gObjectList.findObject(to_agent)); effectp->setDuration(LL_HUD_DUR_SHORT); effectp->setColor(LLColor4U(gAgent.getEffectColor())); @@ -1503,15 +1505,38 @@ void LLToolDragAndDrop::commitGiveInventoryItem(const LLUUID& to_agent, LLMuteList::getInstance()->autoRemove(to_agent, LLMuteList::AR_INVENTORY); + logInventoryOffer(to_agent, im_session_id); + + // add buddy to recent people list + LLRecentPeople::instance().add(to_agent); +} + +//static +void LLToolDragAndDrop::logInventoryOffer(const LLUUID& to_agent, const LLUUID &im_session_id) +{ + // compute id of possible IM session with agent that has "to_agent" id + LLUUID session_id = LLIMMgr::computeSessionID(IM_NOTHING_SPECIAL, to_agent); // If this item was given by drag-and-drop into an IM panel, log this action in the IM panel chat. - if (im_session_id != LLUUID::null) + if (im_session_id.notNull()) { LLSD args; gIMMgr->addSystemMessage(im_session_id, "inventory_item_offered", args); } - - // add buddy to recent people list - LLRecentPeople::instance().add(to_agent); + // If this item was given by drag-and-drop on avatar while IM panel was open, log this action in the IM panel chat. + else if (LLIMModel::getInstance()->findIMSession(session_id)) + { + LLSD args; + gIMMgr->addSystemMessage(session_id, "inventory_item_offered", args); + } + // If this item was given by drag-and-drop on avatar while IM panel wasn't open, log this action to IM history. + else + { + std::string full_name; + if (gCacheName->getFullName(to_agent, full_name)) + { + LLIMModel::instance().logToFile(full_name, LLTrans::getString("SECOND_LIFE"), im_session_id, LLTrans::getString("inventory_item_offered-im")); + } + } } void LLToolDragAndDrop::giveInventoryCategory(const LLUUID& to_agent, @@ -1519,21 +1544,17 @@ void LLToolDragAndDrop::giveInventoryCategory(const LLUUID& to_agent, const LLUUID& im_session_id) { - if(!cat) return; + if (!cat) return; llinfos << "LLToolDragAndDrop::giveInventoryCategory() - " << cat->getUUID() << llendl; - LLVOAvatar* my_avatar = gAgent.getAvatarObject(); - if( !my_avatar ) - { - return; - } + if (!isAgentAvatarValid()) return; // Test out how many items are being given. LLViewerInventoryCategory::cat_array_t cats; LLViewerInventoryItem::item_array_t items; LLGiveable giveable; - gInventory.collectDescendentsIf(cat->getUUID(), + gInventory.collectDescendentsIf (cat->getUUID(), cats, items, LLInventoryModel::EXCLUDE_TRASH, @@ -1542,31 +1563,31 @@ void LLToolDragAndDrop::giveInventoryCategory(const LLUUID& to_agent, bool complete = true; for(S32 i = 0; i < count; ++i) { - if(!gInventory.isCategoryComplete(cats.get(i)->getUUID())) + if (!gInventory.isCategoryComplete(cats.get(i)->getUUID())) { complete = false; break; } } - if(!complete) + if (!complete) { LLNotificationsUtil::add("IncompleteInventory"); return; } count = items.count() + cats.count(); - if(count > MAX_ITEMS) + if (count > MAX_ITEMS) { LLNotificationsUtil::add("TooManyItems"); return; } - else if(count == 0) + else if (count == 0) { LLNotificationsUtil::add("NoItems"); return; } else { - if(0 == giveable.countNoCopy()) + if (0 == giveable.countNoCopy()) { LLToolDragAndDrop::commitGiveInventoryCategory(to_agent, cat, im_session_id); } @@ -1592,14 +1613,14 @@ bool LLToolDragAndDrop::handleCopyProtectedCategory(const LLSD& notification, co { case 0: // "Yes" cat = gInventory.getCategory(notification["payload"]["folder_id"].asUUID()); - if(cat) + if (cat) { LLToolDragAndDrop::commitGiveInventoryCategory(notification["payload"]["agent_id"].asUUID(), cat); LLViewerInventoryCategory::cat_array_t cats; LLViewerInventoryItem::item_array_t items; LLUncopyableItems remove; - gInventory.collectDescendentsIf(cat->getUUID(), + gInventory.collectDescendentsIf (cat->getUUID(), cats, items, LLInventoryModel::EXCLUDE_TRASH, @@ -1630,7 +1651,7 @@ void LLToolDragAndDrop::commitGiveInventoryCategory(const LLUUID& to_agent, const LLUUID& im_session_id) { - if(!cat) return; + if (!cat) return; llinfos << "LLToolDragAndDrop::commitGiveInventoryCategory() - " << cat->getUUID() << llendl; @@ -1641,7 +1662,7 @@ void LLToolDragAndDrop::commitGiveInventoryCategory(const LLUUID& to_agent, LLViewerInventoryCategory::cat_array_t cats; LLViewerInventoryItem::item_array_t items; LLGiveable giveable; - gInventory.collectDescendentsIf(cat->getUUID(), + gInventory.collectDescendentsIf (cat->getUUID(), cats, items, LLInventoryModel::EXCLUDE_TRASH, @@ -1651,12 +1672,12 @@ void LLToolDragAndDrop::commitGiveInventoryCategory(const LLUUID& to_agent, // MTUBYTES or 18 * count < 1200 => count < 1200/18 => // 66. I've cut it down a bit from there to give some pad. S32 count = items.count() + cats.count(); - if(count > MAX_ITEMS) + if (count > MAX_ITEMS) { LLNotificationsUtil::add("TooManyItems"); return; } - else if(count == 0) + else if (count == 0) { LLNotificationsUtil::add("NoItems"); return; @@ -1715,7 +1736,7 @@ void LLToolDragAndDrop::commitGiveInventoryCategory(const LLUUID& to_agent, // VEFFECT: giveInventoryCategory LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM, TRUE); - effectp->setSourceObject(gAgent.getAvatarObject()); + effectp->setSourceObject(gAgentAvatarp); effectp->setTargetObject(gObjectList.findObject(to_agent)); effectp->setDuration(LL_HUD_DUR_SHORT); effectp->setColor(LLColor4U(gAgent.getEffectColor())); @@ -1723,47 +1744,38 @@ void LLToolDragAndDrop::commitGiveInventoryCategory(const LLUUID& to_agent, LLMuteList::getInstance()->autoRemove(to_agent, LLMuteList::AR_INVENTORY); - // If this item was given by drag-and-drop into an IM panel, log this action in the IM panel chat. - if (im_session_id != LLUUID::null) - { - LLSD args; - gIMMgr->addSystemMessage(im_session_id, "inventory_item_offered", args); - } + logInventoryOffer(to_agent, im_session_id); } } // static BOOL LLToolDragAndDrop::isInventoryGiveAcceptable(LLInventoryItem* item) { - if(!item) + if (!item) { return FALSE; } - if(!item->getPermissions().allowOperationBy(PERM_TRANSFER, gAgent.getID())) + if (!item->getPermissions().allowOperationBy(PERM_TRANSFER, gAgent.getID())) { return FALSE; } BOOL copyable = FALSE; - if(item->getPermissions().allowCopyBy(gAgent.getID())) copyable = TRUE; + if (item->getPermissions().allowCopyBy(gAgent.getID())) copyable = TRUE; - LLVOAvatarSelf* my_avatar = gAgent.getAvatarObject(); - if(!my_avatar) - { - return FALSE; - } + if (!isAgentAvatarValid()) return FALSE; BOOL acceptable = TRUE; switch(item->getType()) { case LLAssetType::AT_OBJECT: - if(my_avatar->isWearingAttachment(item->getUUID())) + if (gAgentAvatarp->isWearingAttachment(item->getUUID())) { acceptable = FALSE; } break; case LLAssetType::AT_BODYPART: case LLAssetType::AT_CLOTHING: - if(!copyable && gAgentWearables.isWearingItem(item->getUUID())) + if (!copyable && gAgentWearables.isWearingItem(item->getUUID())) { acceptable = FALSE; } @@ -1777,33 +1789,29 @@ BOOL LLToolDragAndDrop::isInventoryGiveAcceptable(LLInventoryItem* item) // Static BOOL LLToolDragAndDrop::isInventoryGroupGiveAcceptable(LLInventoryItem* item) { - if(!item) + if (!item) { return FALSE; } // These permissions are double checked in the simulator in // LLGroupNoticeInventoryItemFetch::result(). - if(!item->getPermissions().allowOperationBy(PERM_TRANSFER, gAgent.getID())) + if (!item->getPermissions().allowOperationBy(PERM_TRANSFER, gAgent.getID())) { return FALSE; } - if(!item->getPermissions().allowCopyBy(gAgent.getID())) + if (!item->getPermissions().allowCopyBy(gAgent.getID())) { return FALSE; } - LLVOAvatarSelf* my_avatar = gAgent.getAvatarObject(); - if(!my_avatar) - { - return FALSE; - } + if (!isAgentAvatarValid()) return FALSE; BOOL acceptable = TRUE; switch(item->getType()) { case LLAssetType::AT_OBJECT: - if(my_avatar->isWearingAttachment(item->getUUID())) + if (gAgentAvatarp->isWearingAttachment(item->getUUID())) { acceptable = FALSE; } @@ -1829,7 +1837,7 @@ EAcceptance LLToolDragAndDrop::willObjectAcceptInventory(LLViewerObject* obj, LL // help make sure that drops that are from an object to an object // don't have to worry about order of evaluation. Think of this // like check for self in assignment. - if(obj->getID() == item->getParentUUID()) + if (obj->getID() == item->getParentUUID()) { return ACCEPT_NO; } @@ -1838,19 +1846,17 @@ EAcceptance LLToolDragAndDrop::willObjectAcceptInventory(LLViewerObject* obj, LL // gAgent.getGroupID()) // && (obj->mPermModify || obj->mFlagAllowInventoryAdd)); BOOL worn = FALSE; - LLVOAvatarSelf* my_avatar = NULL; switch(item->getType()) { case LLAssetType::AT_OBJECT: - my_avatar = gAgent.getAvatarObject(); - if(my_avatar && my_avatar->isWearingAttachment(item->getUUID())) + if (isAgentAvatarValid() && gAgentAvatarp->isWearingAttachment(item->getUUID())) { worn = TRUE; } break; case LLAssetType::AT_BODYPART: case LLAssetType::AT_CLOTHING: - if(gAgentWearables.isWearingItem(item->getUUID())) + if (gAgentWearables.isWearingItem(item->getUUID())) { worn = TRUE; } @@ -1861,7 +1867,7 @@ EAcceptance LLToolDragAndDrop::willObjectAcceptInventory(LLViewerObject* obj, LL const LLPermissions& perm = item->getPermissions(); BOOL modify = (obj->permModify() || obj->flagAllowInventoryAdd()); BOOL transfer = FALSE; - if((obj->permYouOwner() && (perm.getOwner() == gAgent.getID())) + if ((obj->permYouOwner() && (perm.getOwner() == gAgent.getID())) || perm.allowOperationBy(PERM_TRANSFER, gAgent.getID())) { transfer = TRUE; @@ -1869,15 +1875,15 @@ EAcceptance LLToolDragAndDrop::willObjectAcceptInventory(LLViewerObject* obj, LL BOOL volume = (LL_PCODE_VOLUME == obj->getPCode()); BOOL attached = obj->isAttachment(); BOOL unrestricted = ((perm.getMaskBase() & PERM_ITEM_UNRESTRICTED) == PERM_ITEM_UNRESTRICTED) ? TRUE : FALSE; - if(attached && !unrestricted) + if (attached && !unrestricted) { return ACCEPT_NO_LOCKED; } - else if(modify && transfer && volume && !worn) + else if (modify && transfer && volume && !worn) { return ACCEPT_YES_MULTI; } - else if(!modify) + else if (!modify) { return ACCEPT_NO_LOCKED; } @@ -1908,12 +1914,12 @@ bool LLToolDragAndDrop::handleGiveDragAndDrop(LLUUID dest_agent, LLUUID session_ case DAD_CALLINGCARD: { LLViewerInventoryItem* inv_item = (LLViewerInventoryItem*)cargo_data; - if(gInventory.getItem(inv_item->getUUID()) + if (gInventory.getItem(inv_item->getUUID()) && LLToolDragAndDrop::isInventoryGiveAcceptable(inv_item)) { // *TODO: get multiple object transfers working *accept = ACCEPT_YES_COPY_SINGLE; - if(drop) + if (drop) { LLToolDragAndDrop::giveInventory(dest_agent, inv_item, session_id); } @@ -1931,11 +1937,11 @@ bool LLToolDragAndDrop::handleGiveDragAndDrop(LLUUID dest_agent, LLUUID session_ case DAD_CATEGORY: { LLViewerInventoryCategory* inv_cat = (LLViewerInventoryCategory*)cargo_data; - if( gInventory.getCategory( inv_cat->getUUID() ) ) + if (gInventory.getCategory(inv_cat->getUUID())) { // *TODO: get multiple object transfers working *accept = ACCEPT_YES_COPY_SINGLE; - if(drop) + if (drop) { LLToolDragAndDrop::giveInventoryCategory(dest_agent, inv_cat, session_id); } @@ -1976,7 +1982,7 @@ EAcceptance LLToolDragAndDrop::dad3dRezAttachmentFromInv( { lldebugs << "LLToolDragAndDrop::dad3dRezAttachmentFromInv()" << llendl; // must be in the user's inventory - if(mSource != SOURCE_AGENT && mSource != SOURCE_LIBRARY) + if (mSource != SOURCE_AGENT && mSource != SOURCE_LIBRARY) { return ACCEPT_NO; } @@ -1984,25 +1990,24 @@ EAcceptance LLToolDragAndDrop::dad3dRezAttachmentFromInv( LLViewerInventoryItem* item; LLViewerInventoryCategory* cat; locateInventory(item, cat); - if(!item || !item->isComplete()) return ACCEPT_NO; + if (!item || !item->isComplete()) return ACCEPT_NO; // must not be in the trash const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); - if( gInventory.isObjectDescendentOf( item->getUUID(), trash_id ) ) + if (gInventory.isObjectDescendentOf(item->getUUID(), trash_id)) { return ACCEPT_NO; } // must not be already wearing it - LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); - if( !avatar || avatar->isWearingAttachment(item->getUUID()) ) + if (!isAgentAvatarValid() || gAgentAvatarp->isWearingAttachment(item->getUUID())) { return ACCEPT_NO; } - if( drop ) + if (drop) { - if(mSource == SOURCE_LIBRARY) + if (mSource == SOURCE_LIBRARY) { LLPointer<LLInventoryCallback> cb = new RezAttachmentCallback(0); copy_inventory_item( @@ -2034,10 +2039,9 @@ EAcceptance LLToolDragAndDrop::dad3dRezObjectOnLand( LLViewerInventoryItem* item; LLViewerInventoryCategory* cat; locateInventory(item, cat); - if(!item || !item->isComplete()) return ACCEPT_NO; + if (!item || !item->isComplete()) return ACCEPT_NO; - LLVOAvatarSelf* my_avatar = gAgent.getAvatarObject(); - if( !my_avatar || my_avatar->isWearingAttachment( item->getUUID() ) ) + if (!isAgentAvatarValid() || gAgentAvatarp->isWearingAttachment(item->getUUID())) { return ACCEPT_NO; } @@ -2062,7 +2066,7 @@ EAcceptance LLToolDragAndDrop::dad3dRezObjectOnLand( // check if the item can be copied. If not, send that to the sim // which will remove the inventory item. - if(!item->getPermissions().allowCopyBy(gAgent.getID())) + if (!item->getPermissions().allowCopyBy(gAgent.getID())) { accept = ACCEPT_YES_SINGLE; remove_inventory = TRUE; @@ -2070,13 +2074,13 @@ EAcceptance LLToolDragAndDrop::dad3dRezObjectOnLand( // Check if it's in the trash. const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); - if(gInventory.isObjectDescendentOf(item->getUUID(), trash_id)) + if (gInventory.isObjectDescendentOf(item->getUUID(), trash_id)) { accept = ACCEPT_YES_SINGLE; remove_inventory = TRUE; } - if(drop) + if (drop) { dropObject(obj, TRUE, FALSE, remove_inventory); } @@ -2097,24 +2101,23 @@ EAcceptance LLToolDragAndDrop::dad3dRezObjectOnObject( LLViewerInventoryItem* item; LLViewerInventoryCategory* cat; locateInventory(item, cat); - if(!item || !item->isComplete()) return ACCEPT_NO; - LLVOAvatarSelf* my_avatar = gAgent.getAvatarObject(); - if( !my_avatar || my_avatar->isWearingAttachment( item->getUUID() ) ) + if (!item || !item->isComplete()) return ACCEPT_NO; + if (!isAgentAvatarValid() || gAgentAvatarp->isWearingAttachment(item->getUUID())) { return ACCEPT_NO; } - if((mask & MASK_CONTROL)) + if ((mask & MASK_CONTROL)) { // *HACK: In order to resolve SL-22177, we need to block drags // from notecards and objects onto other objects. - if(mSource == SOURCE_NOTECARD) + if (mSource == SOURCE_NOTECARD) { return ACCEPT_NO; } EAcceptance rv = willObjectAcceptInventory(obj, item); - if(drop && (ACCEPT_YES_SINGLE <= rv)) + if (drop && (ACCEPT_YES_SINGLE <= rv)) { dropInventory(obj, item, mSource, mSourceID); } @@ -2140,7 +2143,7 @@ EAcceptance LLToolDragAndDrop::dad3dRezObjectOnObject( // check if the item can be copied. If not, send that to the sim // which will remove the inventory item. - if(!item->getPermissions().allowCopyBy(gAgent.getID())) + if (!item->getPermissions().allowCopyBy(gAgent.getID())) { accept = ACCEPT_YES_SINGLE; remove_inventory = TRUE; @@ -2148,13 +2151,13 @@ EAcceptance LLToolDragAndDrop::dad3dRezObjectOnObject( // Check if it's in the trash. const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); - if(gInventory.isObjectDescendentOf(item->getUUID(), trash_id)) + if (gInventory.isObjectDescendentOf(item->getUUID(), trash_id)) { accept = ACCEPT_YES_SINGLE; remove_inventory = TRUE; } - if(drop) + if (drop) { dropObject(obj, FALSE, FALSE, remove_inventory); } @@ -2169,7 +2172,7 @@ EAcceptance LLToolDragAndDrop::dad3dRezScript( // *HACK: In order to resolve SL-22177, we need to block drags // from notecards and objects onto other objects. - if((SOURCE_WORLD == mSource) || (SOURCE_NOTECARD == mSource)) + if ((SOURCE_WORLD == mSource) || (SOURCE_NOTECARD == mSource)) { return ACCEPT_NO; } @@ -2177,9 +2180,9 @@ EAcceptance LLToolDragAndDrop::dad3dRezScript( LLViewerInventoryItem* item; LLViewerInventoryCategory* cat; locateInventory(item, cat); - if(!item || !item->isComplete()) return ACCEPT_NO; + if (!item || !item->isComplete()) return ACCEPT_NO; EAcceptance rv = willObjectAcceptInventory(obj, item); - if(drop && (ACCEPT_YES_SINGLE <= rv)) + if (drop && (ACCEPT_YES_SINGLE <= rv)) { // rez in the script active by default, rez in inactive if the // control key is being held down. @@ -2207,7 +2210,7 @@ EAcceptance LLToolDragAndDrop::dad3dTextureObject( // *HACK: In order to resolve SL-22177, we need to block drags // from notecards and objects onto other objects. - if((SOURCE_WORLD == mSource) || (SOURCE_NOTECARD == mSource)) + if ((SOURCE_WORLD == mSource) || (SOURCE_NOTECARD == mSource)) { return ACCEPT_NO; } @@ -2215,29 +2218,29 @@ EAcceptance LLToolDragAndDrop::dad3dTextureObject( LLViewerInventoryItem* item; LLViewerInventoryCategory* cat; locateInventory(item, cat); - if(!item || !item->isComplete()) return ACCEPT_NO; + if (!item || !item->isComplete()) return ACCEPT_NO; EAcceptance rv = willObjectAcceptInventory(obj, item); - if((mask & MASK_CONTROL)) + if ((mask & MASK_CONTROL)) { - if((ACCEPT_YES_SINGLE <= rv) && drop) + if ((ACCEPT_YES_SINGLE <= rv) && drop) { dropInventory(obj, item, mSource, mSourceID); } return rv; } - if(!obj->permModify()) + if (!obj->permModify()) { return ACCEPT_NO_LOCKED; } //If texture !copyable don't texture or you'll never get it back. - if(!item->getPermissions().allowCopyBy(gAgent.getID())) + if (!item->getPermissions().allowCopyBy(gAgent.getID())) { return ACCEPT_NO; } - if(drop && (ACCEPT_YES_SINGLE <= rv)) + if (drop && (ACCEPT_YES_SINGLE <= rv)) { - if((mask & MASK_SHIFT)) + if ((mask & MASK_SHIFT)) { dropTextureAllFaces(obj, item, mSource, mSourceID); } @@ -2248,7 +2251,7 @@ EAcceptance LLToolDragAndDrop::dad3dTextureObject( // VEFFECT: SetTexture LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM, TRUE); - effectp->setSourceObject(gAgent.getAvatarObject()); + effectp->setSourceObject(gAgentAvatarp); effectp->setTargetObject(obj); effectp->setDuration(LL_HUD_DUR_SHORT); effectp->setColor(LLColor4U(gAgent.getEffectColor())); @@ -2262,9 +2265,9 @@ EAcceptance LLToolDragAndDrop::dad3dTextureSelf( LLViewerObject* obj, S32 face, MASK mask, BOOL drop) { lldebugs << "LLToolDragAndDrop::dad3dTextureAvatar()" << llendl; - if(drop) + if (drop) { - if( !(mask & MASK_SHIFT) ) + if (!(mask & MASK_SHIFT)) { dropTextureOneFaceAvatar( (LLVOAvatar*)obj, face, (LLInventoryItem*)mCargoData); } @@ -2280,18 +2283,18 @@ EAcceptance LLToolDragAndDrop::dad3dWearItem( LLViewerInventoryItem* item; LLViewerInventoryCategory* cat; locateInventory(item, cat); - if(!item || !item->isComplete()) return ACCEPT_NO; + if (!item || !item->isComplete()) return ACCEPT_NO; - if(mSource == SOURCE_AGENT || mSource == SOURCE_LIBRARY) + if (mSource == SOURCE_AGENT || mSource == SOURCE_LIBRARY) { // it's in the agent inventory const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); - if( gInventory.isObjectDescendentOf( item->getUUID(), trash_id ) ) + if (gInventory.isObjectDescendentOf(item->getUUID(), trash_id)) { return ACCEPT_NO; } - if( drop ) + if (drop) { // Don't wear anything until initial wearables are loaded, can // destroy clothing items. @@ -2301,7 +2304,7 @@ EAcceptance LLToolDragAndDrop::dad3dWearItem( return ACCEPT_NO; } - if(mSource == SOURCE_LIBRARY) + if (mSource == SOURCE_LIBRARY) { // create item based on that one, and put it on if that // was a success. @@ -2335,21 +2338,21 @@ EAcceptance LLToolDragAndDrop::dad3dActivateGesture( LLViewerInventoryItem* item; LLViewerInventoryCategory* cat; locateInventory(item, cat); - if(!item || !item->isComplete()) return ACCEPT_NO; + if (!item || !item->isComplete()) return ACCEPT_NO; - if(mSource == SOURCE_AGENT || mSource == SOURCE_LIBRARY) + if (mSource == SOURCE_AGENT || mSource == SOURCE_LIBRARY) { // it's in the agent inventory const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); - if( gInventory.isObjectDescendentOf( item->getUUID(), trash_id ) ) + if (gInventory.isObjectDescendentOf(item->getUUID(), trash_id)) { return ACCEPT_NO; } - if( drop ) + if (drop) { LLUUID item_id; - if(mSource == SOURCE_LIBRARY) + if (mSource == SOURCE_LIBRARY) { // create item based on that one, and put it on if that // was a success. @@ -2364,7 +2367,7 @@ EAcceptance LLToolDragAndDrop::dad3dActivateGesture( } else { - LLGestureManager::instance().activateGesture(item->getUUID()); + LLGestureMgr::instance().activateGesture(item->getUUID()); gInventory.updateItem(item); gInventory.notifyObservers(); } @@ -2384,7 +2387,7 @@ EAcceptance LLToolDragAndDrop::dad3dWearCategory( LLViewerInventoryItem* item; LLViewerInventoryCategory* category; locateInventory(item, category); - if(!category) return ACCEPT_NO; + if (!category) return ACCEPT_NO; if (drop) { @@ -2397,26 +2400,26 @@ EAcceptance LLToolDragAndDrop::dad3dWearCategory( } } - if(mSource == SOURCE_AGENT) + if (mSource == SOURCE_AGENT) { const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); - if( gInventory.isObjectDescendentOf( category->getUUID(), trash_id ) ) + if (gInventory.isObjectDescendentOf(category->getUUID(), trash_id)) { return ACCEPT_NO; } - if(drop) + if (drop) { BOOL append = ( (mask & MASK_SHIFT) ? TRUE : FALSE ); - LLAppearanceManager::instance().wearInventoryCategory(category, false, append); + LLAppearanceMgr::instance().wearInventoryCategory(category, false, append); } return ACCEPT_YES_MULTI; } - else if(mSource == SOURCE_LIBRARY) + else if (mSource == SOURCE_LIBRARY) { - if(drop) + if (drop) { - LLAppearanceManager::instance().wearInventoryCategory(category, true, false); + LLAppearanceMgr::instance().wearInventoryCategory(category, true, false); } return ACCEPT_YES_MULTI; } @@ -2435,7 +2438,7 @@ EAcceptance LLToolDragAndDrop::dad3dUpdateInventory( // *HACK: In order to resolve SL-22177, we need to block drags // from notecards and objects onto other objects. - if((SOURCE_WORLD == mSource) || (SOURCE_NOTECARD == mSource)) + if ((SOURCE_WORLD == mSource) || (SOURCE_NOTECARD == mSource)) { return ACCEPT_NO; } @@ -2443,7 +2446,7 @@ EAcceptance LLToolDragAndDrop::dad3dUpdateInventory( LLViewerInventoryItem* item; LLViewerInventoryCategory* cat; locateInventory(item, cat); - if(!item || !item->isComplete()) return ACCEPT_NO; + if (!item || !item->isComplete()) return ACCEPT_NO; LLViewerObject* root_object = obj; if (obj && obj->getParent()) { @@ -2455,7 +2458,7 @@ EAcceptance LLToolDragAndDrop::dad3dUpdateInventory( } EAcceptance rv = willObjectAcceptInventory(root_object, item); - if(root_object && drop && (ACCEPT_YES_COPY_SINGLE <= rv)) + if (root_object && drop && (ACCEPT_YES_COPY_SINGLE <= rv)) { dropInventory(root_object, item, mSource, mSourceID); } @@ -2499,7 +2502,7 @@ EAcceptance LLToolDragAndDrop::dad3dUpdateInventoryCategory( LLDroppableItem droppable(!obj->permYouOwner()); LLInventoryModel::cat_array_t cats; LLInventoryModel::item_array_t items; - gInventory.collectDescendentsIf(cat->getUUID(), + gInventory.collectDescendentsIf (cat->getUUID(), cats, items, LLInventoryModel::EXCLUDE_TRASH, @@ -2528,7 +2531,7 @@ EAcceptance LLToolDragAndDrop::dad3dUpdateInventoryCategory( { const LLViewerInventoryCategory *cat = (*cat_iter); rv = gInventory.isCategoryComplete(cat->getUUID()) ? ACCEPT_YES_MULTI : ACCEPT_NO; - if(rv < ACCEPT_YES_SINGLE) + if (rv < ACCEPT_YES_SINGLE) { lldebugs << "Category " << cat->getUUID() << "is not complete." << llendl; break; @@ -2571,7 +2574,7 @@ EAcceptance LLToolDragAndDrop::dad3dUpdateInventoryCategory( } LLCategoryDropObserver* dropper = new LLCategoryDropObserver(obj->getID(), mSource); dropper->fetchItems(ids); - if(dropper->isEverythingComplete()) + if (dropper->isEverythingComplete()) { dropper->done(); } @@ -2596,27 +2599,26 @@ EAcceptance LLToolDragAndDrop::dad3dGiveInventoryObject( lldebugs << "LLToolDragAndDrop::dad3dGiveInventoryObject()" << llendl; // item has to be in agent inventory. - if(mSource != SOURCE_AGENT) return ACCEPT_NO; + if (mSource != SOURCE_AGENT) return ACCEPT_NO; // find the item now. LLViewerInventoryItem* item; LLViewerInventoryCategory* cat; locateInventory(item, cat); - if(!item || !item->isComplete()) return ACCEPT_NO; - if(!item->getPermissions().allowOperationBy(PERM_TRANSFER, gAgent.getID())) + if (!item || !item->isComplete()) return ACCEPT_NO; + if (!item->getPermissions().allowOperationBy(PERM_TRANSFER, gAgent.getID())) { // cannot give away no-transfer objects return ACCEPT_NO; } - LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); - if(avatar && avatar->isWearingAttachment( item->getUUID() ) ) + if (isAgentAvatarValid() && gAgentAvatarp->isWearingAttachment(item->getUUID())) { // You can't give objects that are attached to you return ACCEPT_NO; } - if( obj && avatar ) + if (obj && isAgentAvatarValid()) { - if(drop) + if (drop) { giveInventory(obj->getID(), item ); } @@ -2633,16 +2635,16 @@ EAcceptance LLToolDragAndDrop::dad3dGiveInventory( { lldebugs << "LLToolDragAndDrop::dad3dGiveInventory()" << llendl; // item has to be in agent inventory. - if(mSource != SOURCE_AGENT) return ACCEPT_NO; + if (mSource != SOURCE_AGENT) return ACCEPT_NO; LLViewerInventoryItem* item; LLViewerInventoryCategory* cat; locateInventory(item, cat); - if(!item || !item->isComplete()) return ACCEPT_NO; - if(!isInventoryGiveAcceptable(item)) + if (!item || !item->isComplete()) return ACCEPT_NO; + if (!isInventoryGiveAcceptable(item)) { return ACCEPT_NO; } - if(drop && obj) + if (drop && obj) { giveInventory(obj->getID(), item); } @@ -2655,12 +2657,12 @@ EAcceptance LLToolDragAndDrop::dad3dGiveInventoryCategory( LLViewerObject* obj, S32 face, MASK mask, BOOL drop) { lldebugs << "LLToolDragAndDrop::dad3dGiveInventoryCategory()" << llendl; - if(drop && obj) + if (drop && obj) { LLViewerInventoryItem* item; LLViewerInventoryCategory* cat; locateInventory(item, cat); - if(!cat) return ACCEPT_NO; + if (!cat) return ACCEPT_NO; giveInventoryCategory(obj->getID(), cat); } // *TODO: deal with all the issues surrounding multi-object @@ -2676,14 +2678,14 @@ EAcceptance LLToolDragAndDrop::dad3dRezFromObjectOnLand( LLViewerInventoryItem* item = NULL; LLViewerInventoryCategory* cat = NULL; locateInventory(item, cat); - if(!item || !item->isComplete()) return ACCEPT_NO; + if (!item || !item->isComplete()) return ACCEPT_NO; - if(!gAgent.allowOperation(PERM_COPY, item->getPermissions()) + if (!gAgent.allowOperation(PERM_COPY, item->getPermissions()) || !item->getPermissions().allowTransferTo(LLUUID::null)) { return ACCEPT_NO_LOCKED; } - if(drop) + if (drop) { dropObject(obj, TRUE, TRUE, FALSE); } @@ -2697,8 +2699,8 @@ EAcceptance LLToolDragAndDrop::dad3dRezFromObjectOnObject( LLViewerInventoryItem* item; LLViewerInventoryCategory* cat; locateInventory(item, cat); - if(!item || !item->isComplete()) return ACCEPT_NO; - if((mask & MASK_CONTROL)) + if (!item || !item->isComplete()) return ACCEPT_NO; + if ((mask & MASK_CONTROL)) { // *HACK: In order to resolve SL-22177, we need to block drags // from notecards and objects onto other objects. @@ -2706,19 +2708,19 @@ EAcceptance LLToolDragAndDrop::dad3dRezFromObjectOnObject( // *HACK: uncomment this when appropriate //EAcceptance rv = willObjectAcceptInventory(obj, item); - //if(drop && (ACCEPT_YES_SINGLE <= rv)) + //if (drop && (ACCEPT_YES_SINGLE <= rv)) //{ // dropInventory(obj, item, mSource, mSourceID); //} //return rv; } - if(!item->getPermissions().allowCopyBy(gAgent.getID(), + if (!item->getPermissions().allowCopyBy(gAgent.getID(), gAgent.getGroupID()) || !item->getPermissions().allowTransferTo(LLUUID::null)) { return ACCEPT_NO_LOCKED; } - if(drop) + if (drop) { dropObject(obj, FALSE, TRUE, FALSE); } @@ -2734,23 +2736,23 @@ EAcceptance LLToolDragAndDrop::dad3dCategoryOnLand( LLInventoryItem* item; LLInventoryCategory* cat; locateInventory(item, cat); - if(!cat) return ACCEPT_NO; + if (!cat) return ACCEPT_NO; EAcceptance rv = ACCEPT_NO; // find all the items in the category LLViewerInventoryCategory::cat_array_t cats; LLViewerInventoryItem::item_array_t items; LLDropCopyableItems droppable; - gInventory.collectDescendentsIf(cat->getUUID(), + gInventory.collectDescendentsIf (cat->getUUID(), cats, items, LLInventoryModel::EXCLUDE_TRASH, droppable); - if(items.count() > 0) + if (items.count() > 0) { rv = ACCEPT_YES_SINGLE; } - if((rv >= ACCEPT_YES_COPY_SINGLE) && drop) + if ((rv >= ACCEPT_YES_COPY_SINGLE) && drop) { createContainer(items, cat->getName()); return ACCEPT_NO; @@ -2773,19 +2775,19 @@ EAcceptance LLToolDragAndDrop::dad3dAssetOnLand( LLViewerInventoryItem::item_array_t items; LLViewerInventoryItem::item_array_t copyable_items; locateMultipleInventory(items, cats); - if(!items.count()) return ACCEPT_NO; + if (!items.count()) return ACCEPT_NO; EAcceptance rv = ACCEPT_NO; for (S32 i = 0; i < items.count(); i++) { LLInventoryItem* item = items[i]; - if(item->getPermissions().allowCopyBy(gAgent.getID())) + if (item->getPermissions().allowCopyBy(gAgent.getID())) { copyable_items.put(item); rv = ACCEPT_YES_SINGLE; } } - if((rv >= ACCEPT_YES_COPY_SINGLE) && drop) + if ((rv >= ACCEPT_YES_COPY_SINGLE) && drop) { createContainer(copyable_items, NULL); } @@ -2800,20 +2802,20 @@ LLInventoryObject* LLToolDragAndDrop::locateInventory( { item = NULL; cat = NULL; - if(mCargoIDs.empty()) return NULL; - if((mSource == SOURCE_AGENT) || (mSource == SOURCE_LIBRARY)) + if (mCargoIDs.empty()) return NULL; + if ((mSource == SOURCE_AGENT) || (mSource == SOURCE_LIBRARY)) { // The object should be in user inventory. item = (LLViewerInventoryItem*)gInventory.getItem(mCargoIDs[mCurItemIndex]); cat = (LLViewerInventoryCategory*)gInventory.getCategory(mCargoIDs[mCurItemIndex]); } - else if(mSource == SOURCE_WORLD) + else if (mSource == SOURCE_WORLD) { // This object is in some task inventory somewhere. LLViewerObject* obj = gObjectList.findObject(mSourceID); - if(obj) + if (obj) { - if((mCargoTypes[mCurItemIndex] == DAD_CATEGORY) + if ((mCargoTypes[mCurItemIndex] == DAD_CATEGORY) || (mCargoTypes[mCurItemIndex] == DAD_ROOT_CATEGORY)) { cat = (LLViewerInventoryCategory*)obj->getInventoryObject(mCargoIDs[mCurItemIndex]); @@ -2824,16 +2826,16 @@ LLInventoryObject* LLToolDragAndDrop::locateInventory( } } } - else if(mSource == SOURCE_NOTECARD) + else if (mSource == SOURCE_NOTECARD) { LLPreviewNotecard* preview = LLFloaterReg::findTypedInstance<LLPreviewNotecard>("preview_notecard", mSourceID); - if(preview) + if (preview) { item = (LLViewerInventoryItem*)preview->getDragItem(); } } - if(item) return item; - if(cat) return cat; + if (item) return item; + if (cat) return cat; return NULL; } @@ -2841,8 +2843,8 @@ LLInventoryObject* LLToolDragAndDrop::locateInventory( LLInventoryObject* LLToolDragAndDrop::locateMultipleInventory(LLViewerInventoryCategory::cat_array_t& cats, LLViewerInventoryItem::item_array_t& items) { - if(mCargoIDs.count() == 0) return NULL; - if((mSource == SOURCE_AGENT) || (mSource == SOURCE_LIBRARY)) + if (mCargoIDs.count() == 0) return NULL; + if ((mSource == SOURCE_AGENT) || (mSource == SOURCE_LIBRARY)) { // The object should be in user inventory. for (S32 i = 0; i < mCargoIDs.count(); i++) @@ -2859,13 +2861,13 @@ LLInventoryObject* LLToolDragAndDrop::locateMultipleInventory(LLViewerInventoryC } } } - else if(mSource == SOURCE_WORLD) + else if (mSource == SOURCE_WORLD) { // This object is in some task inventory somewhere. LLViewerObject* obj = gObjectList.findObject(mSourceID); - if(obj) + if (obj) { - if((mCargoType == DAD_CATEGORY) + if ((mCargoType == DAD_CATEGORY) || (mCargoType == DAD_ROOT_CATEGORY)) { // The object should be in user inventory. @@ -2891,17 +2893,17 @@ LLInventoryObject* LLToolDragAndDrop::locateMultipleInventory(LLViewerInventoryC } } } - else if(mSource == SOURCE_NOTECARD) + else if (mSource == SOURCE_NOTECARD) { LLPreviewNotecard* card; card = (LLPreviewNotecard*)LLPreview::find(mSourceID); - if(card) + if (card) { items.put((LLInventoryItem*)card->getDragItem()); } } - if(items.count()) return items[0]; - if(cats.count()) return cats[0]; + if (items.count()) return items[0]; + if (cats.count()) return cats[0]; return NULL; } */ diff --git a/indra/newview/lltooldraganddrop.h b/indra/newview/lltooldraganddrop.h index 79b2bc32a3..85d003e5fc 100644 --- a/indra/newview/lltooldraganddrop.h +++ b/indra/newview/lltooldraganddrop.h @@ -81,7 +81,7 @@ public: const LLUUID& source_id = LLUUID::null, const LLUUID& object_id = LLUUID::null); void beginMultiDrag(const std::vector<EDragAndDropType> types, - const std::vector<LLUUID>& cargo_ids, + const uuid_vec_t& cargo_ids, ESource source, const LLUUID& source_id = LLUUID::null); void endDrag(); @@ -125,7 +125,7 @@ protected: std::vector<EDragAndDropType> mCargoTypes; //void* mCargoData; - std::vector<LLUUID> mCargoIDs; + uuid_vec_t mCargoIDs; ESource mSource; LLUUID mSourceID; LLUUID mObjectID; @@ -227,6 +227,10 @@ protected: LLInventoryCategory* cat, const LLUUID &im_session_id = LLUUID::null); + // log "Inventory item offered" to IM + static void logInventoryOffer(const LLUUID& to_agent, + const LLUUID &im_session_id = LLUUID::null); + public: // helper functions static BOOL isInventoryDropAcceptable(LLViewerObject* obj, LLInventoryItem* item) { return (ACCEPT_YES_COPY_SINGLE <= willObjectAcceptInventory(obj, item)); } diff --git a/indra/newview/lltoolfocus.cpp b/indra/newview/lltoolfocus.cpp index 2320ae57df..032714cabf 100644 --- a/indra/newview/lltoolfocus.cpp +++ b/indra/newview/lltoolfocus.cpp @@ -42,6 +42,7 @@ // Viewer includes #include "llagent.h" +#include "llagentcamera.h" #include "llbutton.h" #include "llviewercontrol.h" #include "lldrawable.h" @@ -167,19 +168,17 @@ void LLToolCamera::pickCallback(const LLPickInfo& pick_info) } } - if( CAMERA_MODE_CUSTOMIZE_AVATAR == gAgent.getCameraMode() ) + if( CAMERA_MODE_CUSTOMIZE_AVATAR == gAgentCamera.getCameraMode() ) { BOOL good_customize_avatar_hit = FALSE; if( hit_obj ) { - LLVOAvatar* avatar = gAgent.getAvatarObject(); - if( hit_obj == avatar) + if (isAgentAvatarValid() && (hit_obj == gAgentAvatarp)) { // It's you good_customize_avatar_hit = TRUE; } - else - if( hit_obj->isAttachment() && hit_obj->permYouOwner() ) + else if (hit_obj->isAttachment() && hit_obj->permYouOwner()) { // It's an attachment that you're wearing good_customize_avatar_hit = TRUE; @@ -207,23 +206,23 @@ void LLToolCamera::pickCallback(const LLPickInfo& pick_info) // ...clicked on a world object, so focus at its position if (!hit_obj->isHUDAttachment()) { - gAgent.setFocusOnAvatar(FALSE, ANIMATE); - gAgent.setFocusGlobal(pick_info); + gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE); + gAgentCamera.setFocusGlobal(pick_info); } } else if (!pick_info.mPosGlobal.isExactlyZero()) { // Hit the ground - gAgent.setFocusOnAvatar(FALSE, ANIMATE); - gAgent.setFocusGlobal(pick_info); + gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE); + gAgentCamera.setFocusGlobal(pick_info); } if (!(pick_info.mKeyMask & MASK_ALT) && - gAgent.cameraThirdPerson() && + gAgentCamera.cameraThirdPerson() && gViewerWindow->getLeftMouseDown() && !gSavedSettings.getBOOL("FreezeTime") && - (hit_obj == gAgent.getAvatarObject() || - (hit_obj && hit_obj->isAttachment() && LLVOAvatar::findAvatarFromAttachment(hit_obj)->isSelf()))) + (hit_obj == gAgentAvatarp || + (hit_obj && hit_obj->isAttachment() && LLVOAvatar::findAvatarFromAttachment(hit_obj)->isSelf()))) { LLToolCamera::getInstance()->mMouseSteering = TRUE; } @@ -232,14 +231,14 @@ void LLToolCamera::pickCallback(const LLPickInfo& pick_info) LLToolCamera::getInstance()->mValidClickPoint = TRUE; - if( CAMERA_MODE_CUSTOMIZE_AVATAR == gAgent.getCameraMode() ) + if( CAMERA_MODE_CUSTOMIZE_AVATAR == gAgentCamera.getCameraMode() ) { - gAgent.setFocusOnAvatar(FALSE, FALSE); + gAgentCamera.setFocusOnAvatar(FALSE, FALSE); - LLVector3d cam_pos = gAgent.getCameraPositionGlobal(); - cam_pos -= LLVector3d(LLViewerCamera::getInstance()->getLeftAxis() * gAgent.calcCustomizeAvatarUIOffset( cam_pos )); + LLVector3d cam_pos = gAgentCamera.getCameraPositionGlobal(); + cam_pos -= LLVector3d(LLViewerCamera::getInstance()->getLeftAxis() * gAgentCamera.calcCustomizeAvatarUIOffset( cam_pos )); - gAgent.setCameraPosAndFocusGlobal( cam_pos, pick_info.mPosGlobal, pick_info.mObjectID); + gAgentCamera.setCameraPosAndFocusGlobal( cam_pos, pick_info.mPosGlobal, pick_info.mObjectID); } } @@ -280,10 +279,10 @@ BOOL LLToolCamera::handleMouseUp(S32 x, S32 y, MASK mask) { if (mValidClickPoint) { - if( CAMERA_MODE_CUSTOMIZE_AVATAR == gAgent.getCameraMode() ) + if( CAMERA_MODE_CUSTOMIZE_AVATAR == gAgentCamera.getCameraMode() ) { LLCoordGL mouse_pos; - LLVector3 focus_pos = gAgent.getPosAgentFromGlobal(gAgent.getFocusGlobal()); + LLVector3 focus_pos = gAgent.getPosAgentFromGlobal(gAgentCamera.getFocusGlobal()); BOOL success = LLViewerCamera::getInstance()->projectPosAgentToScreen(focus_pos, mouse_pos); if (success) { @@ -369,12 +368,12 @@ BOOL LLToolCamera::handleHover(S32 x, S32 y, MASK mask) if (dx != 0) { - gAgent.cameraOrbitAround( -dx * RADIANS_PER_PIXEL ); + gAgentCamera.cameraOrbitAround( -dx * RADIANS_PER_PIXEL ); } if (dy != 0) { - gAgent.cameraOrbitOver( -dy * RADIANS_PER_PIXEL ); + gAgentCamera.cameraOrbitOver( -dy * RADIANS_PER_PIXEL ); } gViewerWindow->moveCursorToCenter(); @@ -388,8 +387,8 @@ BOOL LLToolCamera::handleHover(S32 x, S32 y, MASK mask) // Pan tool if (hasMouseCapture()) { - LLVector3d camera_to_focus = gAgent.getCameraPositionGlobal(); - camera_to_focus -= gAgent.getFocusGlobal(); + LLVector3d camera_to_focus = gAgentCamera.getCameraPositionGlobal(); + camera_to_focus -= gAgentCamera.getFocusGlobal(); F32 dist = (F32) camera_to_focus.normVec(); // Fudge factor for pan @@ -397,12 +396,12 @@ BOOL LLToolCamera::handleHover(S32 x, S32 y, MASK mask) if (dx != 0) { - gAgent.cameraPanLeft( dx * meters_per_pixel ); + gAgentCamera.cameraPanLeft( dx * meters_per_pixel ); } if (dy != 0) { - gAgent.cameraPanUp( -dy * meters_per_pixel ); + gAgentCamera.cameraPanUp( -dy * meters_per_pixel ); } gViewerWindow->moveCursorToCenter(); @@ -419,7 +418,7 @@ BOOL LLToolCamera::handleHover(S32 x, S32 y, MASK mask) if (dx != 0) { - gAgent.cameraOrbitAround( -dx * RADIANS_PER_PIXEL ); + gAgentCamera.cameraOrbitAround( -dx * RADIANS_PER_PIXEL ); } const F32 IN_FACTOR = 0.99f; @@ -428,11 +427,11 @@ BOOL LLToolCamera::handleHover(S32 x, S32 y, MASK mask) { if (mMouseSteering) { - gAgent.cameraOrbitOver( -dy * RADIANS_PER_PIXEL ); + gAgentCamera.cameraOrbitOver( -dy * RADIANS_PER_PIXEL ); } else { - gAgent.cameraZoomIn( pow( IN_FACTOR, dy ) ); + gAgentCamera.cameraZoomIn( pow( IN_FACTOR, dy ) ); } } diff --git a/indra/newview/lltoolgrab.cpp b/indra/newview/lltoolgrab.cpp index d837a334f1..04d873f91b 100644 --- a/indra/newview/lltoolgrab.cpp +++ b/indra/newview/lltoolgrab.cpp @@ -46,6 +46,7 @@ // newview headers #include "llagent.h" +#include "llagentcamera.h" #include "lldrawable.h" #include "llfloatertools.h" #include "llhudeffect.h" @@ -225,7 +226,7 @@ BOOL LLToolGrab::handleObjectHit(const LLPickInfo& info) // non-touchable objects. If it has a touch handler, we // do grab it (so llDetectedGrab works), but movement is // blocked on the server side. JC - if (gAgent.cameraMouselook()) + if (gAgentCamera.cameraMouselook()) { mMode = GRAB_LOCKED; } @@ -285,8 +286,8 @@ BOOL LLToolGrab::handleObjectHit(const LLPickInfo& info) LLVector3 local_edit_point = gAgent.getPosAgentFromGlobal(info.mPosGlobal); local_edit_point -= edit_object->getPositionAgent(); local_edit_point = local_edit_point * ~edit_object->getRenderRotation(); - gAgent.setPointAt(POINTAT_TARGET_GRAB, edit_object, local_edit_point ); - gAgent.setLookAt(LOOKAT_TARGET_SELECT, edit_object, local_edit_point ); + gAgentCamera.setPointAt(POINTAT_TARGET_GRAB, edit_object, local_edit_point ); + gAgentCamera.setLookAt(LOOKAT_TARGET_SELECT, edit_object, local_edit_point ); } // on transient grabs (clicks on world objects), kill the grab immediately @@ -390,7 +391,7 @@ void LLToolGrab::startGrab() // This planar drag starts at the grab point mDragStartPointGlobal = grab_start_global; - mDragStartFromCamera = grab_start_global - gAgent.getCameraPositionGlobal(); + mDragStartFromCamera = grab_start_global - gAgentCamera.getCameraPositionGlobal(); LLMessageSystem *msg = gMessageSystem; msg->newMessageFast(_PREHASH_ObjectGrab); @@ -502,7 +503,7 @@ void LLToolGrab::handleHoverActive(S32 x, S32 y, MASK mask) mVerticalDragging = FALSE; mDragStartPointGlobal = gViewerWindow->clickPointInWorldGlobal(x, y, objectp); - mDragStartFromCamera = mDragStartPointGlobal - gAgent.getCameraPositionGlobal(); + mDragStartFromCamera = mDragStartPointGlobal - gAgentCamera.getCameraPositionGlobal(); } else if (!mVerticalDragging && (mask == MASK_VERTICAL) ) { @@ -510,7 +511,7 @@ void LLToolGrab::handleHoverActive(S32 x, S32 y, MASK mask) mVerticalDragging = TRUE; mDragStartPointGlobal = gViewerWindow->clickPointInWorldGlobal(x, y, objectp); - mDragStartFromCamera = mDragStartPointGlobal - gAgent.getCameraPositionGlobal(); + mDragStartFromCamera = mDragStartPointGlobal - gAgentCamera.getCameraPositionGlobal(); } const F32 RADIANS_PER_PIXEL_X = 0.01f; @@ -598,7 +599,7 @@ void LLToolGrab::handleHoverActive(S32 x, S32 y, MASK mask) // need to return offset from mGrabStartPoint LLVector3d grab_point_global; - grab_point_global = gAgent.getCameraPositionGlobal() + mGrabHiddenOffsetFromCamera; + grab_point_global = gAgentCamera.getCameraPositionGlobal() + mGrabHiddenOffsetFromCamera; /* Snap to grid disabled for grab tool - very confusing // Handle snapping to grid, but only when the tool is formally selected. @@ -632,7 +633,7 @@ void LLToolGrab::handleHoverActive(S32 x, S32 y, MASK mask) grab_point_global = LLWorld::getInstance()->clipToVisibleRegions(mDragStartPointGlobal, grab_point_global); // propagate constrained grab point back to grab offset - mGrabHiddenOffsetFromCamera = grab_point_global - gAgent.getCameraPositionGlobal(); + mGrabHiddenOffsetFromCamera = grab_point_global - gAgentCamera.getCameraPositionGlobal(); // Handle auto-rotation at screen edge. LLVector3 grab_pos_agent = gAgent.getPosAgentFromGlobal( grab_point_global ); @@ -646,24 +647,24 @@ void LLToolGrab::handleHoverActive(S32 x, S32 y, MASK mask) // ...build mode moves camera about focus point if (grab_center_gl.mX < ROTATE_H_MARGIN) { - if (gAgent.getFocusOnAvatar()) + if (gAgentCamera.getFocusOnAvatar()) { gAgent.yaw(rotate_angle); } else { - gAgent.cameraOrbitAround(rotate_angle); + gAgentCamera.cameraOrbitAround(rotate_angle); } } else if (grab_center_gl.mX > gViewerWindow->getWorldViewWidthScaled() - ROTATE_H_MARGIN) { - if (gAgent.getFocusOnAvatar()) + if (gAgentCamera.getFocusOnAvatar()) { gAgent.yaw(-rotate_angle); } else { - gAgent.cameraOrbitAround(-rotate_angle); + gAgentCamera.cameraOrbitAround(-rotate_angle); } } @@ -705,17 +706,17 @@ void LLToolGrab::handleHoverActive(S32 x, S32 y, MASK mask) // once we've initiated a drag, lock the camera down if (mHasMoved) { - if (!gAgent.cameraMouselook() && + if (!gAgentCamera.cameraMouselook() && !objectp->isHUDAttachment() && - objectp->getRoot() == gAgent.getAvatarObject()->getRoot()) + objectp->getRoot() == gAgentAvatarp->getRoot()) { // force focus to point in space where we were looking previously - gAgent.setFocusGlobal(gAgent.calcFocusPositionTargetGlobal(), LLUUID::null); - gAgent.setFocusOnAvatar(FALSE, ANIMATE); + gAgentCamera.setFocusGlobal(gAgentCamera.calcFocusPositionTargetGlobal(), LLUUID::null); + gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE); } else { - gAgent.clearFocusObject(); + gAgentCamera.clearFocusObject(); } } @@ -814,7 +815,7 @@ void LLToolGrab::handleHoverNonPhysical(S32 x, S32 y, MASK mask) } // need to return offset from mGrabStartPoint - LLVector3d grab_point_global = gAgent.getCameraPositionGlobal() + mGrabHiddenOffsetFromCamera; + LLVector3d grab_point_global = gAgentCamera.getCameraPositionGlobal() + mGrabHiddenOffsetFromCamera; grab_pos_region = objectp->getRegion()->getPosRegionFromGlobal( grab_point_global ); } @@ -872,8 +873,8 @@ void LLToolGrab::handleHoverNonPhysical(S32 x, S32 y, MASK mask) LLVector3 local_edit_point = pick.mIntersection; local_edit_point -= objectp->getPositionAgent(); local_edit_point = local_edit_point * ~objectp->getRenderRotation(); - gAgent.setPointAt(POINTAT_TARGET_GRAB, objectp, local_edit_point ); - gAgent.setLookAt(LOOKAT_TARGET_SELECT, objectp, local_edit_point ); + gAgentCamera.setPointAt(POINTAT_TARGET_GRAB, objectp, local_edit_point ); + gAgentCamera.setLookAt(LOOKAT_TARGET_SELECT, objectp, local_edit_point ); } @@ -892,7 +893,7 @@ void LLToolGrab::handleHoverInactive(S32 x, S32 y, MASK mask) // Only works in fullscreen if (gSavedSettings.getBOOL("WindowFullScreen")) { - if (gAgent.cameraThirdPerson() ) + if (gAgentCamera.cameraThirdPerson() ) { if (x == 0) { @@ -994,7 +995,7 @@ void LLToolGrab::onMouseCaptureLost() return; } // First, fix cursor placement - if( !gAgent.cameraMouselook() + if( !gAgentCamera.cameraMouselook() && (GRAB_ACTIVE_CENTER == mMode)) { if (objectp->isHUDAttachment()) @@ -1035,8 +1036,8 @@ void LLToolGrab::onMouseCaptureLost() mGrabPick.mObjectID.setNull(); LLSelectMgr::getInstance()->updateSelectionCenter(); - gAgent.setPointAt(POINTAT_TARGET_CLEAR); - gAgent.setLookAt(LOOKAT_TARGET_CLEAR); + gAgentCamera.setPointAt(POINTAT_TARGET_CLEAR); + gAgentCamera.setLookAt(LOOKAT_TARGET_CLEAR); dialog_refresh_all(); } @@ -1128,7 +1129,7 @@ LLVector3d LLToolGrab::getGrabPointGlobal() case GRAB_ACTIVE_CENTER: case GRAB_NONPHYSICAL: case GRAB_LOCKED: - return gAgent.getCameraPositionGlobal() + mGrabHiddenOffsetFromCamera; + return gAgentCamera.getCameraPositionGlobal() + mGrabHiddenOffsetFromCamera; case GRAB_NOOBJECT: case GRAB_INACTIVE: diff --git a/indra/newview/lltoolgun.cpp b/indra/newview/lltoolgun.cpp index a441d653c7..c815f1e96a 100644 --- a/indra/newview/lltoolgun.cpp +++ b/indra/newview/lltoolgun.cpp @@ -36,6 +36,7 @@ #include "llviewerwindow.h" #include "llagent.h" +#include "llagentcamera.h" #include "llviewercontrol.h" #include "llsky.h" #include "llappviewer.h" @@ -83,7 +84,7 @@ BOOL LLToolGun::handleMouseDown(S32 x, S32 y, MASK mask) BOOL LLToolGun::handleHover(S32 x, S32 y, MASK mask) { - if( gAgent.cameraMouselook() && mIsSelected ) + if( gAgentCamera.cameraMouselook() && mIsSelected ) { const F32 NOMINAL_MOUSE_SENSITIVITY = 0.0025f; diff --git a/indra/newview/lltoolmgr.cpp b/indra/newview/lltoolmgr.cpp index fd12163fd3..a8696c22ef 100644 --- a/indra/newview/lltoolmgr.cpp +++ b/indra/newview/lltoolmgr.cpp @@ -56,6 +56,7 @@ #include "lltoolobjpicker.h" #include "lltoolpipette.h" #include "llagent.h" +#include "llagentcamera.h" #include "llviewercontrol.h" #include "llviewerjoystick.h" #include "llviewermenu.h" @@ -262,7 +263,7 @@ void LLToolMgr::toggleBuildMode() else { // manually disable edit mode, but do not affect the camera - gAgent.resetView(false); + gAgentCamera.resetView(false); LLFloaterReg::hideInstance("build"); gViewerWindow->showCursor(); } @@ -271,7 +272,7 @@ void LLToolMgr::toggleBuildMode() } else { - ECameraMode camMode = gAgent.getCameraMode(); + ECameraMode camMode = gAgentCamera.getCameraMode(); if (CAMERA_MODE_MOUSELOOK == camMode || CAMERA_MODE_CUSTOMIZE_AVATAR == camMode) { // pull the user out of mouselook or appearance mode when entering build mode @@ -286,13 +287,13 @@ void LLToolMgr::toggleBuildMode() handle_toggle_flycam(); } - if (gAgent.getFocusOnAvatar()) + if (gAgentCamera.getFocusOnAvatar()) { // zoom in if we're looking at the avatar - gAgent.setFocusOnAvatar(FALSE, ANIMATE); - gAgent.setFocusGlobal(gAgent.getPositionGlobal() + 2.0 * LLVector3d(gAgent.getAtAxis())); - gAgent.cameraZoomIn(0.666f); - gAgent.cameraOrbitOver( 30.f * DEG_TO_RAD ); + gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE); + gAgentCamera.setFocusGlobal(gAgent.getPositionGlobal() + 2.0 * LLVector3d(gAgent.getAtAxis())); + gAgentCamera.cameraZoomIn(0.666f); + gAgentCamera.cameraOrbitOver( 30.f * DEG_TO_RAD ); } } @@ -303,7 +304,7 @@ void LLToolMgr::toggleBuildMode() // Could be first use //LLFirstUse::useBuild(); - gAgent.resetView(false); + gAgentCamera.resetView(false); // avoid spurious avatar movements LLViewerJoystick::getInstance()->setNeedsReset(); @@ -317,7 +318,7 @@ bool LLToolMgr::inBuildMode() // cameraMouselook() actually starts returning true. Also, appearance edit // sets build mode to true, so let's exclude that. bool b=(inEdit() - && !gAgent.cameraMouselook() + && !gAgentCamera.cameraMouselook() && mCurrentToolset != gFaceEditToolset); return b; diff --git a/indra/newview/lltoolmorph.cpp b/indra/newview/lltoolmorph.cpp index 5f825b461e..969049ee65 100644 --- a/indra/newview/lltoolmorph.cpp +++ b/indra/newview/lltoolmorph.cpp @@ -139,22 +139,20 @@ void LLVisualParamHint::requestHintUpdates( LLVisualParamHint* exception1, LLVis BOOL LLVisualParamHint::needsRender() { - return mNeedsUpdate && mDelayFrames-- <= 0 && !gAgent.getAvatarObject()->mAppearanceAnimating && mAllowsUpdates; + return mNeedsUpdate && mDelayFrames-- <= 0 && !gAgentAvatarp->mAppearanceAnimating && mAllowsUpdates; } void LLVisualParamHint::preRender(BOOL clear_depth) { - LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); - mLastParamWeight = mVisualParam->getWeight(); mVisualParam->setWeight(mVisualParamWeight, FALSE); - avatarp->setVisualParamWeight(mVisualParam->getID(), mVisualParamWeight, FALSE); - avatarp->setVisualParamWeight("Blink_Left", 0.f); - avatarp->setVisualParamWeight("Blink_Right", 0.f); - avatarp->updateComposites(); - avatarp->updateVisualParams(); - avatarp->updateGeometry(avatarp->mDrawable); - avatarp->updateLOD(); + gAgentAvatarp->setVisualParamWeight(mVisualParam->getID(), mVisualParamWeight, FALSE); + gAgentAvatarp->setVisualParamWeight("Blink_Left", 0.f); + gAgentAvatarp->setVisualParamWeight("Blink_Right", 0.f); + gAgentAvatarp->updateComposites(); + gAgentAvatarp->updateVisualParams(); + gAgentAvatarp->updateGeometry(gAgentAvatarp->mDrawable); + gAgentAvatarp->updateLOD(); LLViewerDynamicTexture::preRender(clear_depth); } @@ -165,7 +163,6 @@ void LLVisualParamHint::preRender(BOOL clear_depth) BOOL LLVisualParamHint::render() { LLVisualParamReset::sDirty = TRUE; - LLVOAvatar* avatarp = gAgent.getAvatarObject(); gGL.pushUIMatrix(); gGL.loadUIIdentity(); @@ -196,7 +193,7 @@ BOOL LLVisualParamHint::render() const std::string& cam_target_mesh_name = mVisualParam->getCameraTargetName(); if( !cam_target_mesh_name.empty() ) { - cam_target_joint = (LLViewerJointMesh*)avatarp->getJoint( cam_target_mesh_name ); + cam_target_joint = (LLViewerJointMesh*)gAgentAvatarp->getJoint( cam_target_mesh_name ); } if( !cam_target_joint ) { @@ -204,11 +201,11 @@ BOOL LLVisualParamHint::render() } if( !cam_target_joint ) { - cam_target_joint = (LLViewerJointMesh*)avatarp->getJoint("mHead"); + cam_target_joint = (LLViewerJointMesh*)gAgentAvatarp->getJoint("mHead"); } LLQuaternion avatar_rotation; - LLJoint* root_joint = avatarp->getRootJoint(); + LLJoint* root_joint = gAgentAvatarp->getRootJoint(); if( root_joint ) { avatar_rotation = root_joint->getWorldRotation(); @@ -236,17 +233,17 @@ BOOL LLVisualParamHint::render() LLViewerCamera::getInstance()->setPerspective(FALSE, mOrigin.mX, mOrigin.mY, mFullWidth, mFullHeight, FALSE); - if (avatarp->mDrawable.notNull()) + if (gAgentAvatarp->mDrawable.notNull()) { - LLDrawPoolAvatar *avatarPoolp = (LLDrawPoolAvatar *)avatarp->mDrawable->getFace(0)->getPool(); + LLDrawPoolAvatar *avatarPoolp = (LLDrawPoolAvatar *)gAgentAvatarp->mDrawable->getFace(0)->getPool(); LLGLDepthTest gls_depth(GL_TRUE, GL_TRUE); gGL.setAlphaRejectSettings(LLRender::CF_ALWAYS); gGL.setSceneBlendType(LLRender::BT_REPLACE); - avatarPoolp->renderAvatars(avatarp); // renders only one avatar + avatarPoolp->renderAvatars(gAgentAvatarp); // renders only one avatar gGL.setSceneBlendType(LLRender::BT_ALPHA); gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); } - avatarp->setVisualParamWeight(mVisualParam->getID(), mLastParamWeight); + gAgentAvatarp->setVisualParamWeight(mVisualParam->getID(), mLastParamWeight); mVisualParam->setWeight(mLastParamWeight, FALSE); gGL.color4f(1,1,1,1); mGLTexturep->setGLTextureCreated(true); @@ -297,10 +294,9 @@ BOOL LLVisualParamReset::render() { if (sDirty) { - LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); - avatarp->updateComposites(); - avatarp->updateVisualParams(); - avatarp->updateGeometry(avatarp->mDrawable); + gAgentAvatarp->updateComposites(); + gAgentAvatarp->updateVisualParams(); + gAgentAvatarp->updateGeometry(gAgentAvatarp->mDrawable); sDirty = FALSE; } diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index 2f4a69a53c..84c463495b 100644 --- a/indra/newview/lltoolpie.cpp +++ b/indra/newview/lltoolpie.cpp @@ -39,6 +39,7 @@ #include "llparcel.h" #include "llagent.h" +#include "llagentcamera.h" #include "llviewercontrol.h" #include "llfocusmgr.h" //#include "llfirstuse.h" @@ -204,15 +205,15 @@ BOOL LLToolPie::pickLeftMouseDownCallback() // touch behavior down below... break; case CLICK_ACTION_SIT: - - if ((gAgent.getAvatarObject() != NULL) && (!gAgent.getAvatarObject()->isSitting())) // agent not already sitting { - handle_object_sit_or_stand(); - // put focus in world when sitting on an object - gFocusMgr.setKeyboardFocus(NULL); - return TRUE; - } // else nothing (fall through to touch) - + if (isAgentAvatarValid() && !gAgentAvatarp->isSitting()) // agent not already sitting + { + handle_object_sit_or_stand(); + // put focus in world when sitting on an object + gFocusMgr.setKeyboardFocus(NULL); + return TRUE; + } // else nothing (fall through to touch) + } case CLICK_ACTION_PAY: if ((object && object->flagTakesMoney()) || (parent && parent->flagTakesMoney())) @@ -263,7 +264,7 @@ BOOL LLToolPie::pickLeftMouseDownCallback() if (object) { - gAgent.setFocusOnAvatar(FALSE, ANIMATE); + gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE); LLBBox bbox = object->getBoundingBoxAgent() ; F32 angle_of_view = llmax(0.1f, LLViewerCamera::getInstance()->getAspect() > 1.f ? LLViewerCamera::getInstance()->getView() * LLViewerCamera::getInstance()->getAspect() : LLViewerCamera::getInstance()->getView()); @@ -273,7 +274,7 @@ BOOL LLToolPie::pickLeftMouseDownCallback() obj_to_cam.normVec(); LLVector3d object_center_global = gAgent.getPosGlobalFromAgent(bbox.getCenterAgent()); - gAgent.setCameraPosAndFocusGlobal(object_center_global + LLVector3d(obj_to_cam * distance), + gAgentCamera.setCameraPosAndFocusGlobal(object_center_global + LLVector3d(obj_to_cam * distance), object_center_global, mPick.mObjectID ); } @@ -329,14 +330,14 @@ BOOL LLToolPie::pickLeftMouseDownCallback() } object = (LLViewerObject*)object->getParent(); } - if (object && object == gAgent.getAvatarObject()) + if (object && object == gAgentAvatarp) { // we left clicked on avatar, switch to focus mode LLToolMgr::getInstance()->setTransientTool(LLToolCamera::getInstance()); gViewerWindow->hideCursor(); LLToolCamera::getInstance()->setMouseCapture(TRUE); LLToolCamera::getInstance()->pickCallback(mPick); - gAgent.setFocusOnAvatar(TRUE, TRUE); + gAgentCamera.setFocusOnAvatar(TRUE, TRUE); return TRUE; } @@ -410,26 +411,28 @@ ECursorType cursor_from_object(LLViewerObject* object) switch(click_action) { case CLICK_ACTION_SIT: - if ((gAgent.getAvatarObject() != NULL) && (!gAgent.getAvatarObject()->isSitting())) // not already sitting? { - cursor = UI_CURSOR_HAND; + if (isAgentAvatarValid() && !gAgentAvatarp->isSitting()) // not already sitting? + { + cursor = UI_CURSOR_TOOLSIT; + } } break; case CLICK_ACTION_BUY: - cursor = UI_CURSOR_HAND; + cursor = UI_CURSOR_TOOLBUY; break; case CLICK_ACTION_OPEN: // Open always opens the parent. if (parent && parent->allowOpen()) { - cursor = UI_CURSOR_HAND; + cursor = UI_CURSOR_TOOLOPEN; } break; case CLICK_ACTION_PAY: if ((object && object->flagTakesMoney()) || (parent && parent->flagTakesMoney())) { - cursor = UI_CURSOR_HAND; + cursor = UI_CURSOR_TOOLBUY; } break; case CLICK_ACTION_ZOOM: @@ -496,6 +499,8 @@ void LLToolPie::selectionPropertiesReceived() BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask) { mHoverPick = gViewerWindow->pickImmediate(x, y, FALSE); + // perform a separate pick that detects transparent objects since they respond to 1-click actions + LLPickInfo click_action_pick = gViewerWindow->pickImmediate(x, y, TRUE); // Show screen-space highlight glow effect bool show_highlight = false; @@ -507,10 +512,11 @@ BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask) parent = object->getRootEdit(); } - if (object && useClickAction(mask, object, parent)) + LLViewerObject* click_action_object = click_action_pick.getObject(); + if (click_action_object && useClickAction(mask, click_action_object, click_action_object->getRootEdit())) { show_highlight = true; - ECursorType cursor = cursor_from_object(object); + ECursorType cursor = cursor_from_object(click_action_object); gViewerWindow->setCursor(cursor); lldebugst(LLERR_USER_INPUT) << "hover handled by LLToolPie (inactive)" << llendl; } @@ -592,7 +598,7 @@ BOOL LLToolPie::handleMouseUp(S32 x, S32 y, MASK mask) mGrabMouseButtonDown = FALSE; LLToolMgr::getInstance()->clearTransientTool(); - gAgent.setLookAt(LOOKAT_TARGET_CONVERSATION, obj); // maybe look at object/person clicked on + gAgentCamera.setLookAt(LOOKAT_TARGET_CONVERSATION, obj); // maybe look at object/person clicked on return LLTool::handleMouseUp(x, y, mask); } @@ -964,7 +970,7 @@ BOOL LLToolPie::handleTooltipObject( LLViewerObject* hover_object, std::string l } } } - + // Avoid showing tip over media that's displaying unless it's for sale // also check the primary node since sometimes it can have an action even though @@ -972,9 +978,9 @@ BOOL LLToolPie::handleTooltipObject( LLViewerObject* hover_object, std::string l bool needs_tip = (!is_media_displaying || for_sale) && - (has_media || - needs_tooltip(nodep) || - needs_tooltip(LLSelectMgr::getInstance()->getPrimaryHoverNode())); + (has_media || + needs_tooltip(nodep) || + needs_tooltip(LLSelectMgr::getInstance()->getPrimaryHoverNode())); if (show_all_object_tips || needs_tip) { diff --git a/indra/newview/lltoolplacer.cpp b/indra/newview/lltoolplacer.cpp index 612bcc03bd..91f01f0b36 100644 --- a/indra/newview/lltoolplacer.cpp +++ b/indra/newview/lltoolplacer.cpp @@ -56,11 +56,13 @@ #include "llvolumemessage.h" #include "llhudmanager.h" #include "llagent.h" +#include "llagentcamera.h" #include "llaudioengine.h" #include "llhudeffecttrail.h" #include "llviewerobjectlist.h" #include "llviewercamera.h" #include "llviewerstats.h" +#include "llvoavatarself.h" // linden library headers #include "llprimitive.h" @@ -120,7 +122,7 @@ BOOL LLToolPlacer::raycastForNewObjPos( S32 x, S32 y, LLViewerObject** hit_obj, } // Make sure the surface isn't too far away. - LLVector3d ray_start_global = gAgent.getCameraPositionGlobal(); + LLVector3d ray_start_global = gAgentCamera.getCameraPositionGlobal(); F32 dist_to_surface_sq = (F32)((surface_pos_global - ray_start_global).magVecSquared()); if( dist_to_surface_sq > (max_dist_from_camera * max_dist_from_camera) ) { @@ -432,7 +434,7 @@ BOOL LLToolPlacer::addObject( LLPCode pcode, S32 x, S32 y, U8 use_physics ) // VEFFECT: AddObject LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM, TRUE); - effectp->setSourceObject((LLViewerObject*)gAgent.getAvatarObject()); + effectp->setSourceObject((LLViewerObject*)gAgentAvatarp); effectp->setPositionGlobal(regionp->getPosGlobalFromRegion(ray_end_region)); effectp->setDuration(LL_HUD_DUR_SHORT); effectp->setColor(LLColor4U(gAgent.getEffectColor())); diff --git a/indra/newview/lltoolselect.cpp b/indra/newview/lltoolselect.cpp index 97e2865179..2065ba1791 100644 --- a/indra/newview/lltoolselect.cpp +++ b/indra/newview/lltoolselect.cpp @@ -35,6 +35,7 @@ #include "lltoolselect.h" #include "llagent.h" +#include "llagentcamera.h" #include "llviewercontrol.h" #include "lldrawable.h" #include "llmanip.h" @@ -167,9 +168,9 @@ LLObjectSelectionHandle LLToolSelect::handleObjectSelection(const LLPickInfo& pi LLSelectMgr::getInstance()->setAgentHUDZoom(target_zoom, current_zoom); } - if (!gAgent.getFocusOnAvatar() && // if camera not glued to avatar - LLVOAvatar::findAvatarFromAttachment(object) != gAgent.getAvatarObject() && // and it's not one of your attachments - object != gAgent.getAvatarObject()) // and it's not you + if (!gAgentCamera.getFocusOnAvatar() && // if camera not glued to avatar + LLVOAvatar::findAvatarFromAttachment(object) != gAgentAvatarp && // and it's not one of your attachments + object != gAgentAvatarp) // and it's not you { // have avatar turn to face the selected object(s) LLVector3d selection_center = LLSelectMgr::getInstance()->getSelectionCenterGlobal(); diff --git a/indra/newview/lltracker.cpp b/indra/newview/lltracker.cpp index 407cc23d0d..9a69adae31 100644 --- a/indra/newview/lltracker.cpp +++ b/indra/newview/lltracker.cpp @@ -50,6 +50,7 @@ #include "llappviewer.h" #include "lltracker.h" #include "llagent.h" +#include "llagentcamera.h" #include "llcallingcard.h" #include "llfloaterworldmap.h" #include "llhudtext.h" @@ -480,14 +481,14 @@ void LLTracker::renderBeacon(LLVector3d pos_global, const std::string& label ) { sCheesyBeacon = gSavedSettings.getBOOL("CheesyBeacon"); - LLVector3d to_vec = pos_global - gAgent.getCameraPositionGlobal(); + LLVector3d to_vec = pos_global - gAgentCamera.getCameraPositionGlobal(); F32 dist = (F32)to_vec.magVec(); F32 color_frac = 1.f; if (dist > 0.99f * LLViewerCamera::getInstance()->getFar()) { color_frac = 0.4f; - // pos_global = gAgent.getCameraPositionGlobal() + 0.99f*(LLViewerCamera::getInstance()->getFar()/dist)*to_vec; + // pos_global = gAgentCamera.getCameraPositionGlobal() + 0.99f*(LLViewerCamera::getInstance()->getFar()/dist)*to_vec; } else { diff --git a/indra/newview/llvieweraudio.cpp b/indra/newview/llvieweraudio.cpp index 1d935f5ab8..2661c9f32b 100644 --- a/indra/newview/llvieweraudio.cpp +++ b/indra/newview/llvieweraudio.cpp @@ -34,6 +34,7 @@ #include "llaudioengine.h" #include "llagent.h" +#include "llagentcamera.h" #include "llappviewer.h" #include "llvieweraudio.h" #include "llviewercamera.h" @@ -51,7 +52,7 @@ void init_audio() llwarns << "Failed to create an appropriate Audio Engine" << llendl; return; } - LLVector3d lpos_global = gAgent.getCameraPositionGlobal(); + LLVector3d lpos_global = gAgentCamera.getCameraPositionGlobal(); LLVector3 lpos_global_f; lpos_global_f.setVec(lpos_global); @@ -180,7 +181,7 @@ void audio_update_listener() if (gAudiop) { // update listener position because agent has moved - LLVector3d lpos_global = gAgent.getCameraPositionGlobal(); + LLVector3d lpos_global = gAgentCamera.getCameraPositionGlobal(); LLVector3 lpos_global_f; lpos_global_f.setVec(lpos_global); @@ -203,7 +204,7 @@ void audio_update_wind(bool force_update) if (region) { static F32 last_camera_water_height = -1000.f; - LLVector3 camera_pos = gAgent.getCameraPositionAgent(); + LLVector3 camera_pos = gAgentCamera.getCameraPositionAgent(); F32 camera_water_height = camera_pos.mV[VZ] - region->getWaterHeight(); // diff --git a/indra/newview/llviewercamera.cpp b/indra/newview/llviewercamera.cpp index 0051f46716..aa82c216d9 100644 --- a/indra/newview/llviewercamera.cpp +++ b/indra/newview/llviewercamera.cpp @@ -37,6 +37,7 @@ // Viewer includes #include "llagent.h" +#include "llagentcamera.h" #include "llviewercontrol.h" #include "llviewerobjectlist.h" #include "llviewerregion.h" @@ -354,7 +355,7 @@ void LLViewerCamera::setPerspective(BOOL for_selection, } else { - z_far = gAgent.mDrawDistance; + z_far = gAgentCamera.mDrawDistance; } } else diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp index 5daea96123..23349ab916 100644 --- a/indra/newview/llviewercontrol.cpp +++ b/indra/newview/llviewercontrol.cpp @@ -41,6 +41,7 @@ // For Listeners #include "llaudioengine.h" #include "llagent.h" +#include "llagentcamera.h" #include "llconsole.h" #include "lldrawpoolterrain.h" #include "llflexibleobject.h" @@ -102,7 +103,7 @@ static bool handleRenderAvatarMouselookChanged(const LLSD& newvalue) static bool handleRenderFarClipChanged(const LLSD& newvalue) { F32 draw_distance = (F32) newvalue.asReal(); - gAgent.mDrawDistance = draw_distance; + gAgentCamera.mDrawDistance = draw_distance; LLWorld::getInstance()->setLandFarClip(draw_distance); return true; } diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp index 6c1c1d1096..823466e33e 100644 --- a/indra/newview/llviewerdisplay.cpp +++ b/indra/newview/llviewerdisplay.cpp @@ -38,6 +38,7 @@ #include "llrender.h" #include "llglheaders.h" #include "llagent.h" +#include "llagentcamera.h" #include "llviewercontrol.h" #include "llcoord.h" #include "llcriticaldamp.h" @@ -174,8 +175,8 @@ void display_update_camera() // Cut draw distance in half when customizing avatar, // but on the viewer only. - F32 final_far = gAgent.mDrawDistance; - if (CAMERA_MODE_CUSTOMIZE_AVATAR == gAgent.getCameraMode()) + F32 final_far = gAgentCamera.mDrawDistance; + if (CAMERA_MODE_CUSTOMIZE_AVATAR == gAgentCamera.getCameraMode()) { final_far *= 0.5f; } @@ -344,9 +345,9 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) const F32 TELEPORT_ARRIVAL_DELAY = 2.f; // Time to preload the world before raising the curtain after we've actually already arrived. S32 attach_count = 0; - if (gAgent.getAvatarObject()) + if (isAgentAvatarValid()) { - attach_count = gAgent.getAvatarObject()->getAttachmentCount(); + attach_count = gAgentAvatarp->getAttachmentCount(); } F32 teleport_save_time = TELEPORT_EXPIRY + TELEPORT_EXPIRY_PER_ATTACHMENT * attach_count; F32 teleport_elapsed = gTeleportDisplayTimer.getElapsedTimeF32(); @@ -393,7 +394,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) gAgent.setTeleportMessage( LLAgent::sTeleportProgressMessages["arriving"]); gTextureList.mForceResetTextureStats = TRUE; - gAgent.resetView(TRUE, TRUE); + gAgentCamera.resetView(TRUE, TRUE); break; case LLAgent::TELEPORT_ARRIVING: @@ -920,9 +921,9 @@ void render_hud_attachments() glh::matrix4f current_mod = glh_get_current_modelview(); // clamp target zoom level to reasonable values - gAgent.mHUDTargetZoom = llclamp(gAgent.mHUDTargetZoom, 0.1f, 1.f); + gAgentCamera.mHUDTargetZoom = llclamp(gAgentCamera.mHUDTargetZoom, 0.1f, 1.f); // smoothly interpolate current zoom level - gAgent.mHUDCurZoom = lerp(gAgent.mHUDCurZoom, gAgent.mHUDTargetZoom, LLCriticalDamp::getInterpolant(0.03f)); + gAgentCamera.mHUDCurZoom = lerp(gAgentCamera.mHUDCurZoom, gAgentCamera.mHUDTargetZoom, LLCriticalDamp::getInterpolant(0.03f)); if (LLPipeline::sShowHUDAttachments && !gDisconnected && setup_hud_matrices()) { @@ -1031,11 +1032,10 @@ LLRect get_whole_screen_region() bool get_hud_matrices(const LLRect& screen_region, glh::matrix4f &proj, glh::matrix4f &model) { - LLVOAvatar* my_avatarp = gAgent.getAvatarObject(); - if (my_avatarp && my_avatarp->hasHUDAttachment()) + if (isAgentAvatarValid() && gAgentAvatarp->hasHUDAttachment()) { - F32 zoom_level = gAgent.mHUDCurZoom; - LLBBox hud_bbox = my_avatarp->getHUDBBox(); + F32 zoom_level = gAgentCamera.mHUDCurZoom; + LLBBox hud_bbox = gAgentAvatarp->getHUDBBox(); F32 hud_depth = llmax(1.f, hud_bbox.getExtentLocal().mV[VX] * 1.1f); proj = gl_ortho(-0.5f * LLViewerCamera::getInstance()->getAspect(), 0.5f * LLViewerCamera::getInstance()->getAspect(), -0.5f, 0.5f, 0.f, hud_depth); @@ -1299,14 +1299,14 @@ void render_ui_2d() gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); // render outline for HUD - if (gAgent.getAvatarObject() && gAgent.mHUDCurZoom < 0.98f) + if (isAgentAvatarValid() && gAgentCamera.mHUDCurZoom < 0.98f) { glPushMatrix(); S32 half_width = (gViewerWindow->getWorldViewWidthScaled() / 2); S32 half_height = (gViewerWindow->getWorldViewHeightScaled() / 2); glScalef(LLUI::sGLScaleFactor.mV[0], LLUI::sGLScaleFactor.mV[1], 1.f); glTranslatef((F32)half_width, (F32)half_height, 0.f); - F32 zoom = gAgent.mHUDCurZoom; + F32 zoom = gAgentCamera.mHUDCurZoom; glScalef(zoom,zoom,1.f); gGL.color4fv(LLColor4::white.mV); gl_rect_2d(-half_width, half_height, half_width, -half_height, FALSE); diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp index 80336e5c5a..b42d25c1d8 100644 --- a/indra/newview/llviewerinventory.cpp +++ b/indra/newview/llviewerinventory.cpp @@ -39,11 +39,14 @@ #include "indra_constants.h" #include "llagent.h" +#include "llagentcamera.h" #include "llviewerfoldertype.h" #include "llfolderview.h" #include "llviewercontrol.h" #include "llconsole.h" +#include "llinventoryfunctions.h" #include "llinventorymodel.h" +#include "llinventorymodelbackgroundfetch.h" #include "llgesturemgr.h" #include "llsidetray.h" @@ -101,7 +104,7 @@ public: const std::string verb = params[1].asString(); if (verb == "select") { - std::vector<LLUUID> items_to_open; + uuid_vec_t items_to_open; items_to_open.push_back(inventory_id); //inventory_handler is just a stub, because we don't know from who this offer open_inventory_offer(items_to_open, "inventory_handler"); @@ -537,7 +540,7 @@ bool LLViewerInventoryCategory::fetchDescendents() std::string url = gAgent.getRegion()->getCapability("WebFetchInventoryDescendents"); if (!url.empty()) //Capability found. Build up LLSD and use it. { - gInventory.startBackgroundFetch(mUUID); + LLInventoryModelBackgroundFetch::instance().start(mUUID); } else { //Deprecated, but if we don't have a capability, use the old system. @@ -790,8 +793,8 @@ void WearOnAvatarCallback::fire(const LLUUID& inv_item) void ModifiedCOFCallback::fire(const LLUUID& inv_item) { - LLAppearanceManager::instance().updateAppearanceFromCOF(); - if( CAMERA_MODE_CUSTOMIZE_AVATAR == gAgent.getCameraMode() ) + LLAppearanceMgr::instance().updateAppearanceFromCOF(); + if( CAMERA_MODE_CUSTOMIZE_AVATAR == gAgentCamera.getCameraMode() ) { // If we're in appearance editing mode, the current tab may need to be refreshed if (gFloaterCustomize) @@ -826,7 +829,7 @@ void ActivateGestureCallback::fire(const LLUUID& inv_item) if (inv_item.isNull()) return; - LLGestureManager::instance().activateGesture(inv_item); + LLGestureMgr::instance().activateGesture(inv_item); } void CreateGestureCallback::fire(const LLUUID& inv_item) @@ -834,7 +837,7 @@ void CreateGestureCallback::fire(const LLUUID& inv_item) if (inv_item.isNull()) return; - LLGestureManager::instance().activateGesture(inv_item); + LLGestureMgr::instance().activateGesture(inv_item); LLViewerInventoryItem* item = gInventory.getItem(inv_item); if (!item) return; diff --git a/indra/newview/llviewerjoystick.cpp b/indra/newview/llviewerjoystick.cpp index b593fbfb00..b758f6c701 100644 --- a/indra/newview/llviewerjoystick.cpp +++ b/indra/newview/llviewerjoystick.cpp @@ -43,6 +43,7 @@ #include "llselectmgr.h" #include "llviewermenu.h" #include "llagent.h" +#include "llagentcamera.h" #include "llfocusmgr.h" @@ -106,7 +107,7 @@ void LLViewerJoystick::setOverrideCamera(bool val) if (mOverrideCamera) { - gAgent.changeCameraToDefault(); + gAgentCamera.changeCameraToDefault(); } } @@ -432,7 +433,7 @@ void LLViewerJoystick::agentPitch(F32 pitch_inc) void LLViewerJoystick::agentYaw(F32 yaw_inc) { // Cannot steer some vehicles in mouselook if the script grabs the controls - if (gAgent.cameraMouselook() && !gSavedSettings.getBOOL("JoystickMouselookYaw")) + if (gAgentCamera.cameraMouselook() && !gSavedSettings.getBOOL("JoystickMouselookYaw")) { gAgent.rotate(-yaw_inc, gAgent.getReferenceUpVector()); } @@ -1005,7 +1006,7 @@ bool LLViewerJoystick::toggleFlycam() if (!mOverrideCamera) { - gAgent.changeCameraToDefault(); + gAgentCamera.changeCameraToDefault(); } if (gAwayTimer.getElapsedTimeF32() > MIN_AFK_TIME) diff --git a/indra/newview/llviewerkeyboard.cpp b/indra/newview/llviewerkeyboard.cpp index f757155b94..dd7390a907 100644 --- a/indra/newview/llviewerkeyboard.cpp +++ b/indra/newview/llviewerkeyboard.cpp @@ -36,6 +36,7 @@ #include "llviewerkeyboard.h" #include "llmath.h" #include "llagent.h" +#include "llagentcamera.h" #include "llnearbychatbar.h" #include "llviewercontrol.h" #include "llfocusmgr.h" @@ -279,22 +280,22 @@ F32 get_orbit_rate() void camera_spin_around_ccw( EKeystate s ) { if( KEYSTATE_UP == s ) return; - gAgent.unlockView(); - gAgent.setOrbitLeftKey( get_orbit_rate() ); + gAgentCamera.unlockView(); + gAgentCamera.setOrbitLeftKey( get_orbit_rate() ); } void camera_spin_around_cw( EKeystate s ) { if( KEYSTATE_UP == s ) return; - gAgent.unlockView(); - gAgent.setOrbitRightKey( get_orbit_rate() ); + gAgentCamera.unlockView(); + gAgentCamera.setOrbitRightKey( get_orbit_rate() ); } void camera_spin_around_ccw_sitting( EKeystate s ) { if( KEYSTATE_UP == s ) return; - if (gAgent.rotateGrabbed() || gAgent.sitCameraEnabled()) + if (gAgent.rotateGrabbed() || gAgentCamera.sitCameraEnabled()) { //send keystrokes, but do not change camera agent_turn_right(s); @@ -302,7 +303,7 @@ void camera_spin_around_ccw_sitting( EKeystate s ) else { //change camera but do not send keystrokes - gAgent.setOrbitLeftKey( get_orbit_rate() ); + gAgentCamera.setOrbitLeftKey( get_orbit_rate() ); } } @@ -310,7 +311,7 @@ void camera_spin_around_ccw_sitting( EKeystate s ) void camera_spin_around_cw_sitting( EKeystate s ) { if( KEYSTATE_UP == s ) return; - if (gAgent.rotateGrabbed() || gAgent.sitCameraEnabled()) + if (gAgent.rotateGrabbed() || gAgentCamera.sitCameraEnabled()) { //send keystrokes, but do not change camera agent_turn_left(s); @@ -318,7 +319,7 @@ void camera_spin_around_cw_sitting( EKeystate s ) else { //change camera but do not send keystrokes - gAgent.setOrbitRightKey( get_orbit_rate() ); + gAgentCamera.setOrbitRightKey( get_orbit_rate() ); } } @@ -326,22 +327,22 @@ void camera_spin_around_cw_sitting( EKeystate s ) void camera_spin_over( EKeystate s ) { if( KEYSTATE_UP == s ) return; - gAgent.unlockView(); - gAgent.setOrbitUpKey( get_orbit_rate() ); + gAgentCamera.unlockView(); + gAgentCamera.setOrbitUpKey( get_orbit_rate() ); } void camera_spin_under( EKeystate s ) { if( KEYSTATE_UP == s ) return; - gAgent.unlockView(); - gAgent.setOrbitDownKey( get_orbit_rate() ); + gAgentCamera.unlockView(); + gAgentCamera.setOrbitDownKey( get_orbit_rate() ); } void camera_spin_over_sitting( EKeystate s ) { if( KEYSTATE_UP == s ) return; - if (gAgent.upGrabbed() || gAgent.sitCameraEnabled()) + if (gAgent.upGrabbed() || gAgentCamera.sitCameraEnabled()) { //send keystrokes, but do not change camera agent_jump(s); @@ -349,7 +350,7 @@ void camera_spin_over_sitting( EKeystate s ) else { //change camera but do not send keystrokes - gAgent.setOrbitUpKey( get_orbit_rate() ); + gAgentCamera.setOrbitUpKey( get_orbit_rate() ); } } @@ -357,7 +358,7 @@ void camera_spin_over_sitting( EKeystate s ) void camera_spin_under_sitting( EKeystate s ) { if( KEYSTATE_UP == s ) return; - if (gAgent.downGrabbed() || gAgent.sitCameraEnabled()) + if (gAgent.downGrabbed() || gAgentCamera.sitCameraEnabled()) { //send keystrokes, but do not change camera agent_push_down(s); @@ -365,35 +366,35 @@ void camera_spin_under_sitting( EKeystate s ) else { //change camera but do not send keystrokes - gAgent.setOrbitDownKey( get_orbit_rate() ); + gAgentCamera.setOrbitDownKey( get_orbit_rate() ); } } void camera_move_forward( EKeystate s ) { if( KEYSTATE_UP == s ) return; - gAgent.unlockView(); - gAgent.setOrbitInKey( get_orbit_rate() ); + gAgentCamera.unlockView(); + gAgentCamera.setOrbitInKey( get_orbit_rate() ); } void camera_move_backward( EKeystate s ) { if( KEYSTATE_UP == s ) return; - gAgent.unlockView(); - gAgent.setOrbitOutKey( get_orbit_rate() ); + gAgentCamera.unlockView(); + gAgentCamera.setOrbitOutKey( get_orbit_rate() ); } void camera_move_forward_sitting( EKeystate s ) { if( KEYSTATE_UP == s ) return; - if (gAgent.forwardGrabbed() || gAgent.sitCameraEnabled()) + if (gAgent.forwardGrabbed() || gAgentCamera.sitCameraEnabled()) { agent_push_forward(s); } else { - gAgent.setOrbitInKey( get_orbit_rate() ); + gAgentCamera.setOrbitInKey( get_orbit_rate() ); } } @@ -402,70 +403,70 @@ void camera_move_backward_sitting( EKeystate s ) { if( KEYSTATE_UP == s ) return; - if (gAgent.backwardGrabbed() || gAgent.sitCameraEnabled()) + if (gAgent.backwardGrabbed() || gAgentCamera.sitCameraEnabled()) { agent_push_backward(s); } else { - gAgent.setOrbitOutKey( get_orbit_rate() ); + gAgentCamera.setOrbitOutKey( get_orbit_rate() ); } } void camera_pan_up( EKeystate s ) { if( KEYSTATE_UP == s ) return; - gAgent.unlockView(); - gAgent.setPanUpKey( get_orbit_rate() ); + gAgentCamera.unlockView(); + gAgentCamera.setPanUpKey( get_orbit_rate() ); } void camera_pan_down( EKeystate s ) { if( KEYSTATE_UP == s ) return; - gAgent.unlockView(); - gAgent.setPanDownKey( get_orbit_rate() ); + gAgentCamera.unlockView(); + gAgentCamera.setPanDownKey( get_orbit_rate() ); } void camera_pan_left( EKeystate s ) { if( KEYSTATE_UP == s ) return; - gAgent.unlockView(); - gAgent.setPanLeftKey( get_orbit_rate() ); + gAgentCamera.unlockView(); + gAgentCamera.setPanLeftKey( get_orbit_rate() ); } void camera_pan_right( EKeystate s ) { if( KEYSTATE_UP == s ) return; - gAgent.unlockView(); - gAgent.setPanRightKey( get_orbit_rate() ); + gAgentCamera.unlockView(); + gAgentCamera.setPanRightKey( get_orbit_rate() ); } void camera_pan_in( EKeystate s ) { if( KEYSTATE_UP == s ) return; - gAgent.unlockView(); - gAgent.setPanInKey( get_orbit_rate() ); + gAgentCamera.unlockView(); + gAgentCamera.setPanInKey( get_orbit_rate() ); } void camera_pan_out( EKeystate s ) { if( KEYSTATE_UP == s ) return; - gAgent.unlockView(); - gAgent.setPanOutKey( get_orbit_rate() ); + gAgentCamera.unlockView(); + gAgentCamera.setPanOutKey( get_orbit_rate() ); } void camera_move_forward_fast( EKeystate s ) { if( KEYSTATE_UP == s ) return; - gAgent.unlockView(); - gAgent.setOrbitInKey(2.5f); + gAgentCamera.unlockView(); + gAgentCamera.setOrbitInKey(2.5f); } void camera_move_backward_fast( EKeystate s ) { if( KEYSTATE_UP == s ) return; - gAgent.unlockView(); - gAgent.setOrbitOutKey(2.5f); + gAgentCamera.unlockView(); + gAgentCamera.setOrbitOutKey(2.5f); } @@ -473,7 +474,7 @@ void edit_avatar_spin_ccw( EKeystate s ) { if( KEYSTATE_UP == s ) return; gMorphView->setCameraDrivenByKeys( TRUE ); - gAgent.setOrbitLeftKey( get_orbit_rate() ); + gAgentCamera.setOrbitLeftKey( get_orbit_rate() ); //gMorphView->orbitLeft( get_orbit_rate() ); } @@ -482,7 +483,7 @@ void edit_avatar_spin_cw( EKeystate s ) { if( KEYSTATE_UP == s ) return; gMorphView->setCameraDrivenByKeys( TRUE ); - gAgent.setOrbitRightKey( get_orbit_rate() ); + gAgentCamera.setOrbitRightKey( get_orbit_rate() ); //gMorphView->orbitRight( get_orbit_rate() ); } @@ -490,7 +491,7 @@ void edit_avatar_spin_over( EKeystate s ) { if( KEYSTATE_UP == s ) return; gMorphView->setCameraDrivenByKeys( TRUE ); - gAgent.setOrbitUpKey( get_orbit_rate() ); + gAgentCamera.setOrbitUpKey( get_orbit_rate() ); //gMorphView->orbitUp( get_orbit_rate() ); } @@ -499,7 +500,7 @@ void edit_avatar_spin_under( EKeystate s ) { if( KEYSTATE_UP == s ) return; gMorphView->setCameraDrivenByKeys( TRUE ); - gAgent.setOrbitDownKey( get_orbit_rate() ); + gAgentCamera.setOrbitDownKey( get_orbit_rate() ); //gMorphView->orbitDown( get_orbit_rate() ); } @@ -507,7 +508,7 @@ void edit_avatar_move_forward( EKeystate s ) { if( KEYSTATE_UP == s ) return; gMorphView->setCameraDrivenByKeys( TRUE ); - gAgent.setOrbitInKey( get_orbit_rate() ); + gAgentCamera.setOrbitInKey( get_orbit_rate() ); //gMorphView->orbitIn(); } @@ -516,7 +517,7 @@ void edit_avatar_move_backward( EKeystate s ) { if( KEYSTATE_UP == s ) return; gMorphView->setCameraDrivenByKeys( TRUE ); - gAgent.setOrbitOutKey( get_orbit_rate() ); + gAgentCamera.setOrbitOutKey( get_orbit_rate() ); //gMorphView->orbitOut(); } @@ -868,7 +869,7 @@ S32 LLViewerKeyboard::loadBindings(const std::string& filename) EKeyboardMode LLViewerKeyboard::getMode() { - if ( gAgent.cameraMouselook() ) + if ( gAgentCamera.cameraMouselook() ) { return MODE_FIRST_PERSON; } @@ -876,7 +877,7 @@ EKeyboardMode LLViewerKeyboard::getMode() { return MODE_EDIT_AVATAR; } - else if (gAgent.getAvatarObject() && gAgent.getAvatarObject()->isSitting()) + else if (isAgentAvatarValid() && gAgentAvatarp->isSitting()) { return MODE_SITTING; } diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index 64dcd62a6a..d9fabc7d64 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -45,6 +45,7 @@ #include "llviewertexturelist.h" #include "llvovolume.h" #include "llpluginclassmedia.h" +#include "llplugincookiestore.h" #include "llviewerwindow.h" #include "llfocusmgr.h" #include "llcallbacklist.h" @@ -256,6 +257,43 @@ public: LLViewerMediaImpl *mMediaImpl; bool mInitialized; }; + +class LLViewerMediaOpenIDResponder : public LLHTTPClient::Responder +{ +LOG_CLASS(LLViewerMediaOpenIDResponder); +public: + LLViewerMediaOpenIDResponder( ) + { + } + + ~LLViewerMediaOpenIDResponder() + { + } + + /* virtual */ void completedHeader(U32 status, const std::string& reason, const LLSD& content) + { + LL_DEBUGS("MediaAuth") << "status = " << status << ", reason = " << reason << LL_ENDL; + LL_DEBUGS("MediaAuth") << content << LL_ENDL; + std::string cookie = content["set-cookie"].asString(); + + LLViewerMedia::openIDCookieResponse(cookie); + } + + /* virtual */ void completedRaw( + U32 status, + const std::string& reason, + const LLChannelDescriptors& channels, + const LLIOPipe::buffer_ptr_t& buffer) + { + // This is just here to disable the default behavior (attempting to parse the response as llsd). + // We don't care about the content of the response, only the set-cookie header. + } + +}; + +LLPluginCookieStore *LLViewerMedia::sCookieStore = NULL; +LLURL LLViewerMedia::sOpenIDURL; +std::string LLViewerMedia::sOpenIDCookie; static LLViewerMedia::impl_list sViewerMediaImplList; static LLViewerMedia::impl_id_map sViewerMediaTextureIDMap; static LLTimer sMediaCreateTimer; @@ -264,6 +302,8 @@ static F32 sGlobalVolume = 1.0f; static F64 sLowestLoadableImplInterest = 0.0f; static bool sAnyMediaShowing = false; static boost::signals2::connection sTeleportFinishConnection; +static std::string sUpdatedCookies; +static const char *PLUGIN_COOKIE_FILE_NAME = "plugin_cookies.txt"; ////////////////////////////////////////////////////////////////////////////////////////// static void add_media_impl(LLViewerMediaImpl* media) @@ -399,7 +439,6 @@ viewer_media_t LLViewerMedia::updateMediaImpl(LLMediaEntry* media_entry, const s media_impl->setHomeURL(media_entry->getHomeURL()); media_impl->mMediaAutoPlay = media_entry->getAutoPlay(); media_impl->mMediaEntryURL = media_entry->getCurrentURL(); - if(media_impl->isAutoPlayable()) { needs_navigate = true; @@ -698,6 +737,13 @@ static bool proximity_comparitor(const LLViewerMediaImpl* i1, const LLViewerMedi void LLViewerMedia::updateMedia(void *dummy_arg) { sAnyMediaShowing = false; + sUpdatedCookies = getCookieStore()->getChangedCookies(); + if(!sUpdatedCookies.empty()) + { + lldebugs << "updated cookies will be sent to all loaded plugins: " << llendl; + lldebugs << sUpdatedCookies << llendl; + } + impl_list::iterator iter = sViewerMediaImplList.begin(); impl_list::iterator end = sViewerMediaImplList.end(); @@ -982,6 +1028,314 @@ bool LLViewerMedia::isParcelAudioPlaying() return (LLViewerMedia::hasParcelAudio() && gAudiop && LLAudioEngine::AUDIO_PLAYING == gAudiop->isInternetStreamPlaying()); } +///////////////////////////////////////////////////////////////////////////////////////// +// static +void LLViewerMedia::clearAllCookies() +{ + // Clear all cookies for all plugins + impl_list::iterator iter = sViewerMediaImplList.begin(); + impl_list::iterator end = sViewerMediaImplList.end(); + for (; iter != end; iter++) + { + LLViewerMediaImpl* pimpl = *iter; + if(pimpl->mMediaSource) + { + pimpl->mMediaSource->clear_cookies(); + } + } + + // Clear all cookies from the cookie store + getCookieStore()->setAllCookies(""); + + // FIXME: this may not be sufficient, since the on-disk cookie file won't get written until some browser instance exits cleanly. + // It also won't clear cookies for other accounts, or for any account if we're not logged in, and won't do anything at all if there are no webkit plugins loaded. + // Until such time as we can centralize cookie storage, the following hack should cover these cases: + + // HACK: Look for cookie files in all possible places and delete them. + // NOTE: this assumes knowledge of what happens inside the webkit plugin (it's what adds 'browser_profile' to the path and names the cookie file) + + // Places that cookie files can be: + // <getOSUserAppDir>/browser_profile/cookies + // <getOSUserAppDir>/first_last/browser_profile/cookies (note that there may be any number of these!) + // <getOSUserAppDir>/first_last/plugin_cookies.txt (note that there may be any number of these!) + + std::string base_dir = gDirUtilp->getOSUserAppDir() + gDirUtilp->getDirDelimiter(); + std::string target; + std::string filename; + + lldebugs << "base dir = " << base_dir << llendl; + + // The non-logged-in version is easy + target = base_dir; + target += "browser_profile"; + target += gDirUtilp->getDirDelimiter(); + target += "cookies"; + lldebugs << "target = " << target << llendl; + if(LLFile::isfile(target)) + { + LLFile::remove(target); + } + + // the hard part: iterate over all user directories and delete the cookie file from each one + while(gDirUtilp->getNextFileInDir(base_dir, "*_*", filename, false)) + { + target = base_dir; + target += filename; + target += gDirUtilp->getDirDelimiter(); + target += "browser_profile"; + target += gDirUtilp->getDirDelimiter(); + target += "cookies"; + lldebugs << "target = " << target << llendl; + if(LLFile::isfile(target)) + { + LLFile::remove(target); + } + + // Other accounts may have new-style cookie files too -- delete them as well + target = base_dir; + target += filename; + target += gDirUtilp->getDirDelimiter(); + target += PLUGIN_COOKIE_FILE_NAME; + lldebugs << "target = " << target << llendl; + if(LLFile::isfile(target)) + { + LLFile::remove(target); + } + } + + // If we have an OpenID cookie, re-add it to the cookie store. + setOpenIDCookie(); +} + +///////////////////////////////////////////////////////////////////////////////////////// +// static +void LLViewerMedia::clearAllCaches() +{ + // Clear all plugins' caches + impl_list::iterator iter = sViewerMediaImplList.begin(); + impl_list::iterator end = sViewerMediaImplList.end(); + for (; iter != end; iter++) + { + LLViewerMediaImpl* pimpl = *iter; + pimpl->clearCache(); + } +} + +///////////////////////////////////////////////////////////////////////////////////////// +// static +void LLViewerMedia::setCookiesEnabled(bool enabled) +{ + // Set the "cookies enabled" flag for all loaded plugins + impl_list::iterator iter = sViewerMediaImplList.begin(); + impl_list::iterator end = sViewerMediaImplList.end(); + for (; iter != end; iter++) + { + LLViewerMediaImpl* pimpl = *iter; + if(pimpl->mMediaSource) + { + pimpl->mMediaSource->enable_cookies(enabled); + } + } +} + +///////////////////////////////////////////////////////////////////////////////////////// +// static +void LLViewerMedia::setProxyConfig(bool enable, const std::string &host, int port) +{ + // Set the proxy config for all loaded plugins + impl_list::iterator iter = sViewerMediaImplList.begin(); + impl_list::iterator end = sViewerMediaImplList.end(); + for (; iter != end; iter++) + { + LLViewerMediaImpl* pimpl = *iter; + if(pimpl->mMediaSource) + { + pimpl->mMediaSource->proxy_setup(enable, host, port); + } + } +} + +///////////////////////////////////////////////////////////////////////////////////////// +// static +///////////////////////////////////////////////////////////////////////////////////////// +// static +LLPluginCookieStore *LLViewerMedia::getCookieStore() +{ + if(sCookieStore == NULL) + { + sCookieStore = new LLPluginCookieStore; + } + + return sCookieStore; +} + +///////////////////////////////////////////////////////////////////////////////////////// +// static +void LLViewerMedia::loadCookieFile() +{ + // build filename for each user + std::string resolved_filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PLUGIN_COOKIE_FILE_NAME); + + if (resolved_filename.empty()) + { + llinfos << "can't get path to plugin cookie file - probably not logged in yet." << llendl; + return; + } + + // open the file for reading + llifstream file(resolved_filename); + if (!file.is_open()) + { + llwarns << "can't load plugin cookies from file \"" << PLUGIN_COOKIE_FILE_NAME << "\"" << llendl; + return; + } + + getCookieStore()->readAllCookies(file, true); + + file.close(); + + // send the clear_cookies message to all loaded plugins + impl_list::iterator iter = sViewerMediaImplList.begin(); + impl_list::iterator end = sViewerMediaImplList.end(); + for (; iter != end; iter++) + { + LLViewerMediaImpl* pimpl = *iter; + if(pimpl->mMediaSource) + { + pimpl->mMediaSource->clear_cookies(); + } + } + + // If we have an OpenID cookie, re-add it to the cookie store. + setOpenIDCookie(); +} + + +///////////////////////////////////////////////////////////////////////////////////////// +// static +void LLViewerMedia::saveCookieFile() +{ + // build filename for each user + std::string resolved_filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PLUGIN_COOKIE_FILE_NAME); + + if (resolved_filename.empty()) + { + llinfos << "can't get path to plugin cookie file - probably not logged in yet." << llendl; + return; + } + + // open a file for writing + llofstream file (resolved_filename); + if (!file.is_open()) + { + llwarns << "can't open plugin cookie file \"" << PLUGIN_COOKIE_FILE_NAME << "\" for writing" << llendl; + return; + } + + getCookieStore()->writePersistentCookies(file); + + file.close(); +} + +///////////////////////////////////////////////////////////////////////////////////////// +// static +void LLViewerMedia::addCookie(const std::string &name, const std::string &value, const std::string &domain, const LLDate &expires, const std::string &path, bool secure) +{ + std::stringstream cookie; + + cookie << name << "=" << LLPluginCookieStore::quoteString(value); + + if(expires.notNull()) + { + cookie << "; expires=" << expires.asRFC1123(); + } + + cookie << "; domain=" << domain; + + cookie << "; path=" << path; + + if(secure) + { + cookie << "; secure"; + } + + getCookieStore()->setCookies(cookie.str()); +} + +///////////////////////////////////////////////////////////////////////////////////////// +// static +void LLViewerMedia::addSessionCookie(const std::string &name, const std::string &value, const std::string &domain, const std::string &path, bool secure) +{ + // A session cookie just has a NULL date. + addCookie(name, value, domain, LLDate(), path, secure); +} + +///////////////////////////////////////////////////////////////////////////////////////// +// static +void LLViewerMedia::removeCookie(const std::string &name, const std::string &domain, const std::string &path ) +{ + // To remove a cookie, add one with the same name, domain, and path that expires in the past. + + addCookie(name, "", domain, LLDate(LLDate::now().secondsSinceEpoch() - 1.0), path); +} + + +///////////////////////////////////////////////////////////////////////////////////////// +// static +void LLViewerMedia::setOpenIDCookie() +{ + if(!sOpenIDCookie.empty()) + { + getCookieStore()->setCookiesFromHost(sOpenIDCookie, sOpenIDURL.mAuthority); + } +} + +///////////////////////////////////////////////////////////////////////////////////////// +// static +void LLViewerMedia::openIDSetup(const std::string &openid_url, const std::string &openid_token) +{ + LL_DEBUGS("MediaAuth") << "url = \"" << openid_url << "\", token = \"" << openid_token << "\"" << LL_ENDL; + + // post the token to the url + // the responder will need to extract the cookie(s). + + // Save the OpenID URL for later -- we may need the host when adding the cookie. + sOpenIDURL.init(openid_url.c_str()); + + // We shouldn't ever do this twice, but just in case this code gets repurposed later, clear existing cookies. + sOpenIDCookie.clear(); + + LLSD headers = LLSD::emptyMap(); + // Keep LLHTTPClient from adding an "Accept: application/llsd+xml" header + headers["Accept"] = "*/*"; + // and use the expected content-type for a post, instead of the LLHTTPClient::postRaw() default of "application/octet-stream" + headers["Content-Type"] = "application/x-www-form-urlencoded"; + + // postRaw() takes ownership of the buffer and releases it later, so we need to allocate a new buffer here. + size_t size = openid_token.size(); + U8 *data = new U8[size]; + memcpy(data, openid_token.data(), size); + + LLHTTPClient::postRaw( + openid_url, + data, + size, + new LLViewerMediaOpenIDResponder(), + headers); + +} + +///////////////////////////////////////////////////////////////////////////////////////// +// static +void LLViewerMedia::openIDCookieResponse(const std::string &cookie) +{ + LL_DEBUGS("MediaAuth") << "Cookie received: \"" << cookie << "\"" << LL_ENDL; + + sOpenIDCookie += cookie; + + setOpenIDCookie(); +} + bool LLViewerMedia::hasInWorldMedia() { if (sInWorldMediaDisabled) return false; @@ -1258,8 +1612,22 @@ LLPluginClassMedia* LLViewerMediaImpl::newSourceFromMediaType(std::string media_ { LLPluginClassMedia* media_source = new LLPluginClassMedia(owner); media_source->setSize(default_width, default_height); - std::string language_code = LLUI::getLanguage(); - if (media_source->init(launcher_name, plugin_name, gSavedSettings.getBOOL("PluginAttachDebuggerToPlugins"), user_data_path, language_code)) + media_source->setUserDataPath(user_data_path); + media_source->setLanguageCode(LLUI::getLanguage()); + + // collect 'cookies enabled' setting from prefs and send to embedded browser + bool cookies_enabled = gSavedSettings.getBOOL( "CookiesEnabled" ); + media_source->enable_cookies( cookies_enabled ); + + // collect 'plugins enabled' setting from prefs and send to embedded browser + bool plugins_enabled = gSavedSettings.getBOOL( "BrowserPluginsEnabled" ); + media_source->setPluginsEnabled( plugins_enabled ); + + // collect 'javascript enabled' setting from prefs and send to embedded browser + bool javascript_enabled = gSavedSettings.getBOOL( "BrowserJavascriptEnabled" ); + media_source->setJavascriptEnabled( javascript_enabled ); + + if (media_source->init(launcher_name, plugin_name, gSavedSettings.getBOOL("PluginAttachDebuggerToPlugins"))) { return media_source; } @@ -1320,12 +1688,25 @@ bool LLViewerMediaImpl::initializePlugin(const std::string& media_type) media_source->focus(mHasFocus); media_source->setBackgroundColor(mBackgroundColor); + media_source->proxy_setup(gSavedSettings.getBOOL("BrowserProxyEnabled"), gSavedSettings.getString("BrowserProxyAddress"), gSavedSettings.getS32("BrowserProxyPort")); + if(mClearCache) { mClearCache = false; media_source->clear_cache(); } + // TODO: Only send cookies to plugins that need them + // Ideally, the plugin should tell us whether it handles cookies or not -- either via the init response or through a separate message. + // Due to the ordering of messages, it's possible we wouldn't get that information back in time to send cookies before sending a navigate message, + // which could cause odd race conditions. + std::string all_cookies = LLViewerMedia::getCookieStore()->getAllCookies(); + lldebugs << "setting cookies: " << all_cookies << llendl; + if(!all_cookies.empty()) + { + media_source->set_cookies(all_cookies); + } + mMediaSource = media_source; updateVolume(); @@ -2023,6 +2404,16 @@ void LLViewerMediaImpl::update() } } } + else + { + // If we didn't just create the impl, it may need to get cookie updates. + if(!sUpdatedCookies.empty()) + { + // TODO: Only send cookies to plugins that need them + mMediaSource->set_cookies(sUpdatedCookies); + } + } + if(mMediaSource == NULL) { @@ -2485,6 +2876,13 @@ void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginCla //////////////////////////////////////////////////////////////////////////////// // virtual +void LLViewerMediaImpl::handleCookieSet(LLPluginClassMedia* self, const std::string &cookie) +{ + LLViewerMedia::getCookieStore()->setCookies(cookie); +} + +//////////////////////////////////////////////////////////////////////////////// +// virtual void LLViewerMediaImpl::cut() { @@ -2896,7 +3294,7 @@ bool LLViewerMediaImpl::isObjectAttachedToAnotherAvatar(LLVOVolume *obj) if (NULL != object) { LLVOAvatar *avatar = object->asAvatar(); - if (NULL != avatar && avatar != gAgent.getAvatarObject()) + if ((NULL != avatar) && (avatar != gAgentAvatarp)) { result = true; break; diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h index bc51e713a1..e829d7a5b4 100644 --- a/indra/newview/llviewermedia.h +++ b/indra/newview/llviewermedia.h @@ -44,12 +44,15 @@ #include "llpluginclassmedia.h" #include "v4color.h" +#include "llurl.h" + class LLViewerMediaImpl; class LLUUID; class LLViewerMediaTexture; class LLMediaEntry; class LLVOVolume; class LLMimeDiscoveryResponder; +class LLPluginCookieStore; typedef LLPointer<LLViewerMediaImpl> viewer_media_t; /////////////////////////////////////////////////////////////////////////////// @@ -133,8 +136,35 @@ public: static bool isParcelMediaPlaying(); static bool isParcelAudioPlaying(); + // Clear all cookies for all plugins + static void clearAllCookies(); + + // Clear all plugins' caches + static void clearAllCaches(); + + // Set the "cookies enabled" flag for all loaded plugins + static void setCookiesEnabled(bool enabled); + + // Set the proxy config for all loaded plugins + static void setProxyConfig(bool enable, const std::string &host, int port); + + static LLPluginCookieStore *getCookieStore(); + static void loadCookieFile(); + static void saveCookieFile(); + static void addCookie(const std::string &name, const std::string &value, const std::string &domain, const LLDate &expires, const std::string &path = std::string("/"), bool secure = false ); + static void addSessionCookie(const std::string &name, const std::string &value, const std::string &domain, const std::string &path = std::string("/"), bool secure = false ); + static void removeCookie(const std::string &name, const std::string &domain, const std::string &path = std::string("/") ); + + static void openIDSetup(const std::string &openid_url, const std::string &openid_token); + static void openIDCookieResponse(const std::string &cookie); + private: + static void setOpenIDCookie(); static void onTeleportFinished(); + + static LLPluginCookieStore *sCookieStore; + static LLURL sOpenIDURL; + static std::string sOpenIDCookie; }; // Implementation functions not exported into header file @@ -282,6 +312,7 @@ public: // Inherited from LLPluginClassMediaOwner /*virtual*/ void handleMediaEvent(LLPluginClassMedia* plugin, LLPluginClassMediaOwner::EMediaEvent); + /*virtual*/ void handleCookieSet(LLPluginClassMedia* self, const std::string &cookie); // LLEditMenuHandler overrides /*virtual*/ void cut(); diff --git a/indra/newview/llviewermediafocus.cpp b/indra/newview/llviewermediafocus.cpp index b8179f7fc2..c1e851350b 100644 --- a/indra/newview/llviewermediafocus.cpp +++ b/indra/newview/llviewermediafocus.cpp @@ -38,6 +38,7 @@ #include "llpanelprimmediacontrols.h" #include "llpluginclassmedia.h" #include "llagent.h" +#include "llagentcamera.h" #include "lltoolpie.h" #include "llviewercamera.h" #include "llviewermedia.h" @@ -201,7 +202,7 @@ void LLViewerMediaFocus::setCameraZoom(LLViewerObject* object, LLVector3 normal, { if (object) { - gAgent.setFocusOnAvatar(FALSE, ANIMATE); + gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE); LLBBox bbox = object->getBoundingBoxAgent(); LLVector3d center = gAgent.getPosGlobalFromAgent(bbox.getCenterAgent()); @@ -260,7 +261,7 @@ void LLViewerMediaFocus::setCameraZoom(LLViewerObject* object, LLVector3 normal, // orientation with respect to the face. In other words, if before zoom // the media appears "upside down" from the camera, after zooming it will // still be upside down, but at least it will not flip. - LLVector3d cur_camera_pos = LLVector3d(gAgent.getCameraPositionGlobal()); + LLVector3d cur_camera_pos = LLVector3d(gAgentCamera.getCameraPositionGlobal()); LLVector3d delta = (cur_camera_pos - camera_pos); F64 len = delta.length(); delta.normalize(); @@ -271,18 +272,18 @@ void LLViewerMediaFocus::setCameraZoom(LLViewerObject* object, LLVector3 normal, // If we are not allowing zooming out and the old camera position is closer to // the center then the new intended camera position, don't move camera and return if (zoom_in_only && - (dist_vec_squared(gAgent.getCameraPositionGlobal(), target_pos) < dist_vec_squared(camera_pos, target_pos))) + (dist_vec_squared(gAgentCamera.getCameraPositionGlobal(), target_pos) < dist_vec_squared(camera_pos, target_pos))) { return; } - gAgent.setCameraPosAndFocusGlobal(camera_pos, target_pos, object->getID() ); + gAgentCamera.setCameraPosAndFocusGlobal(camera_pos, target_pos, object->getID() ); } else { // If we have no object, focus back on the avatar. - gAgent.setFocusOnAvatar(TRUE, ANIMATE); + gAgentCamera.setFocusOnAvatar(TRUE, ANIMATE); } } void LLViewerMediaFocus::onFocusReceived() diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 1d58daba2c..b54305f021 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -42,6 +42,7 @@ // newview includes #include "llagent.h" +#include "llagentcamera.h" #include "llagentwearables.h" #include "llagentpilot.h" #include "llbottomtray.h" @@ -72,6 +73,7 @@ #include "llhudmanager.h" #include "llimview.h" #include "llinventorybridge.h" +#include "llinventoryfunctions.h" #include "llpanellogin.h" #include "llpanelblockedlist.h" #include "llmenucommands.h" @@ -86,6 +88,7 @@ #include "lltoolmgr.h" #include "lltoolpie.h" #include "lltoolselectland.h" +#include "lltrans.h" #include "llviewergenericmessage.h" #include "llviewerhelp.h" #include "llviewermenufile.h" // init_menu_file() @@ -435,7 +438,8 @@ void init_menus() gMenuBarView->setRect(LLRect(0, top, 0, top - MENU_BAR_HEIGHT)); gMenuBarView->setBackgroundColor( color ); - gMenuHolder->addChild(gMenuBarView); + LLView* menu_bar_holder = gViewerWindow->getRootView()->getChildView("menu_bar_holder"); + menu_bar_holder->addChild(gMenuBarView); gViewerWindow->setMenuBackgroundColor(false, LLViewerLogin::getInstance()->isInProductionGrid()); @@ -470,9 +474,10 @@ void init_menus() gLoginMenuBarView = LLUICtrlFactory::getInstance()->createFromFile<LLMenuBarGL>("menu_login.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); gLoginMenuBarView->arrangeAndClear(); LLRect menuBarRect = gLoginMenuBarView->getRect(); - gLoginMenuBarView->setRect(LLRect(menuBarRect.mLeft, menuBarRect.mTop, gViewerWindow->getRootView()->getRect().getWidth() - menuBarRect.mLeft, menuBarRect.mBottom)); + menuBarRect.setLeftTopAndSize(0, menu_bar_holder->getRect().getHeight(), menuBarRect.getWidth(), menuBarRect.getHeight()); + gLoginMenuBarView->setRect(menuBarRect); gLoginMenuBarView->setBackgroundColor( color ); - gMenuHolder->addChild(gLoginMenuBarView); + menu_bar_holder->addChild(gLoginMenuBarView); // tooltips are on top of EVERYTHING, including menus gViewerWindow->getRootView()->sendChildToFront(gToolTipView); @@ -1797,9 +1802,10 @@ class LLAdvancedDebugAvatarTextures : public view_listener_t { bool handleEvent(const LLSD& userdata) { -#ifndef LL_RELEASE_FOR_DOWNLOAD - handle_debug_avatar_textures(NULL); -#endif + if (gAgent.isGodlike()) + { + handle_debug_avatar_textures(NULL); + } return true; } }; @@ -2479,18 +2485,18 @@ class LLObjectBuild : public view_listener_t { bool handleEvent(const LLSD& userdata) { - if (gAgent.getFocusOnAvatar() && !LLToolMgr::getInstance()->inEdit() && gSavedSettings.getBOOL("EditCameraMovement") ) + if (gAgentCamera.getFocusOnAvatar() && !LLToolMgr::getInstance()->inEdit() && gSavedSettings.getBOOL("EditCameraMovement") ) { // zoom in if we're looking at the avatar - gAgent.setFocusOnAvatar(FALSE, ANIMATE); - gAgent.setFocusGlobal(LLToolPie::getInstance()->getPick()); - gAgent.cameraZoomIn(0.666f); - gAgent.cameraOrbitOver( 30.f * DEG_TO_RAD ); + gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE); + gAgentCamera.setFocusGlobal(LLToolPie::getInstance()->getPick()); + gAgentCamera.cameraZoomIn(0.666f); + gAgentCamera.cameraOrbitOver( 30.f * DEG_TO_RAD ); gViewerWindow->moveCursorToCenter(); } else if ( gSavedSettings.getBOOL("EditCameraMovement") ) { - gAgent.setFocusGlobal(LLToolPie::getInstance()->getPick()); + gAgentCamera.setFocusGlobal(LLToolPie::getInstance()->getPick()); gViewerWindow->moveCursorToCenter(); } @@ -2508,7 +2514,7 @@ void handle_object_edit() { LLViewerParcelMgr::getInstance()->deselectLand(); - if (gAgent.getFocusOnAvatar() && !LLToolMgr::getInstance()->inEdit()) + if (gAgentCamera.getFocusOnAvatar() && !LLToolMgr::getInstance()->inEdit()) { LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection(); @@ -2516,19 +2522,19 @@ void handle_object_edit() { // always freeze camera in space, even if camera doesn't move // so, for example, follow cam scripts can't affect you when in build mode - gAgent.setFocusGlobal(gAgent.calcFocusPositionTargetGlobal(), LLUUID::null); - gAgent.setFocusOnAvatar(FALSE, ANIMATE); + gAgentCamera.setFocusGlobal(gAgentCamera.calcFocusPositionTargetGlobal(), LLUUID::null); + gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE); } else { - gAgent.setFocusOnAvatar(FALSE, ANIMATE); + gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE); LLViewerObject* selected_objectp = selection->getFirstRootObject(); if (selected_objectp) { // zoom in on object center instead of where we clicked, as we need to see the manipulator handles - gAgent.setFocusGlobal(selected_objectp->getPositionGlobal(), selected_objectp->getID()); - gAgent.cameraZoomIn(0.666f); - gAgent.cameraOrbitOver( 30.f * DEG_TO_RAD ); + gAgentCamera.setFocusGlobal(selected_objectp->getPositionGlobal(), selected_objectp->getID()); + gAgentCamera.cameraZoomIn(0.666f); + gAgentCamera.cameraOrbitOver( 30.f * DEG_TO_RAD ); gViewerWindow->moveCursorToCenter(); } } @@ -2573,19 +2579,19 @@ class LLLandBuild : public view_listener_t { LLViewerParcelMgr::getInstance()->deselectLand(); - if (gAgent.getFocusOnAvatar() && !LLToolMgr::getInstance()->inEdit() && gSavedSettings.getBOOL("EditCameraMovement") ) + if (gAgentCamera.getFocusOnAvatar() && !LLToolMgr::getInstance()->inEdit() && gSavedSettings.getBOOL("EditCameraMovement") ) { // zoom in if we're looking at the avatar - gAgent.setFocusOnAvatar(FALSE, ANIMATE); - gAgent.setFocusGlobal(LLToolPie::getInstance()->getPick()); - gAgent.cameraZoomIn(0.666f); - gAgent.cameraOrbitOver( 30.f * DEG_TO_RAD ); + gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE); + gAgentCamera.setFocusGlobal(LLToolPie::getInstance()->getPick()); + gAgentCamera.cameraZoomIn(0.666f); + gAgentCamera.cameraOrbitOver( 30.f * DEG_TO_RAD ); gViewerWindow->moveCursorToCenter(); } else if ( gSavedSettings.getBOOL("EditCameraMovement") ) { // otherwise just move focus - gAgent.setFocusGlobal(LLToolPie::getInstance()->getPick()); + gAgentCamera.setFocusGlobal(LLToolPie::getInstance()->getPick()); gViewerWindow->moveCursorToCenter(); } @@ -2688,11 +2694,10 @@ class LLSelfEnableRemoveAllAttachments : public view_listener_t bool handleEvent(const LLSD& userdata) { bool new_value = false; - if (gAgent.getAvatarObject()) + if (isAgentAvatarValid()) { - LLVOAvatar* avatarp = gAgent.getAvatarObject(); - for (LLVOAvatar::attachment_map_t::iterator iter = avatarp->mAttachmentPoints.begin(); - iter != avatarp->mAttachmentPoints.end(); ) + for (LLVOAvatar::attachment_map_t::iterator iter = gAgentAvatarp->mAttachmentPoints.begin(); + iter != gAgentAvatarp->mAttachmentPoints.end(); ) { LLVOAvatar::attachment_map_t::iterator curiter = iter++; LLViewerJointAttachment* attachment = curiter->second; @@ -2820,14 +2825,14 @@ bool handle_go_to() LLViewerParcelMgr::getInstance()->deselectLand(); - if (gAgent.getAvatarObject() && !gSavedSettings.getBOOL("AutoPilotLocksCamera")) + if (isAgentAvatarValid() && !gSavedSettings.getBOOL("AutoPilotLocksCamera")) { - gAgent.setFocusGlobal(gAgent.getFocusTargetGlobal(), gAgent.getAvatarObject()->getID()); + gAgentCamera.setFocusGlobal(gAgentCamera.getFocusTargetGlobal(), gAgentAvatarp->getID()); } else { // Snap camera back to behind avatar - gAgent.setFocusOnAvatar(TRUE, ANIMATE); + gAgentCamera.setFocusOnAvatar(TRUE, ANIMATE); } // Could be first use @@ -3273,7 +3278,9 @@ void handle_buy_object(LLSaleInfo sale_info) if (price > 0 && price > gStatusBar->getBalance()) { - LLFloaterBuyCurrency::buyCurrency(LLTrans::getString("this_object_costs"), price); + LLStringUtil::format_map_t args; + args["AMOUNT"] = llformat("%d", price); + LLFloaterBuyCurrency::buyCurrency(LLTrans::getString("this_object_costs", args), price); return; } @@ -3359,7 +3366,7 @@ class LLSelfStandUp : public view_listener_t bool enable_standup_self() { - bool new_value = gAgent.getAvatarObject() && gAgent.getAvatarObject()->isSitting(); + bool new_value = isAgentAvatarValid() && gAgentAvatarp->isSitting(); return new_value; } @@ -3688,9 +3695,9 @@ class LLLandSit : public view_listener_t LLVector3d posGlobal = LLToolPie::getInstance()->getPick().mPosGlobal; LLQuaternion target_rot; - if (gAgent.getAvatarObject()) + if (isAgentAvatarValid()) { - target_rot = gAgent.getAvatarObject()->getRotation(); + target_rot = gAgentAvatarp->getRotation(); } else { @@ -3712,14 +3719,14 @@ void reset_view_final( BOOL proceed ); void handle_reset_view() { - if( (CAMERA_MODE_CUSTOMIZE_AVATAR == gAgent.getCameraMode()) && gFloaterCustomize ) + if( (CAMERA_MODE_CUSTOMIZE_AVATAR == gAgentCamera.getCameraMode()) && gFloaterCustomize ) { // Show dialog box if needed. gFloaterCustomize->askToSaveIfDirty( reset_view_final ); } else { - gAgent.switchCameraPreset(CAMERA_PRESET_REAR_VIEW); + gAgentCamera.switchCameraPreset(CAMERA_PRESET_REAR_VIEW); reset_view_final( TRUE ); LLFloaterCamera::resetCameraMode(); } @@ -3742,15 +3749,15 @@ void reset_view_final( BOOL proceed ) return; } - gAgent.resetView(TRUE, TRUE); - gAgent.setLookAt(LOOKAT_TARGET_CLEAR); + gAgentCamera.resetView(TRUE, TRUE); + gAgentCamera.setLookAt(LOOKAT_TARGET_CLEAR); } class LLViewLookAtLastChatter : public view_listener_t { bool handleEvent(const LLSD& userdata) { - gAgent.lookAtLastChat(); + gAgentCamera.lookAtLastChat(); return true; } }; @@ -3759,13 +3766,13 @@ class LLViewMouselook : public view_listener_t { bool handleEvent(const LLSD& userdata) { - if (!gAgent.cameraMouselook()) + if (!gAgentCamera.cameraMouselook()) { - gAgent.changeCameraToMouselook(); + gAgentCamera.changeCameraToMouselook(); } else { - gAgent.changeCameraToDefault(); + gAgentCamera.changeCameraToDefault(); } return true; } @@ -3984,9 +3991,9 @@ void handle_god_request_avatar_geometry(void *) void derez_objects(EDeRezDestination dest, const LLUUID& dest_id) { - if(gAgent.cameraMouselook()) + if(gAgentCamera.cameraMouselook()) { - gAgent.changeCameraToDefault(); + gAgentCamera.changeCameraToDefault(); } //gInventoryView->setPanelOpen(TRUE); @@ -4403,8 +4410,10 @@ void handle_buy_or_take() } else { + LLStringUtil::format_map_t args; + args["AMOUNT"] = llformat("%d", total_price); LLFloaterBuyCurrency::buyCurrency( - "Buying this costs", total_price); + LLTrans::getString("BuyingCosts", args), total_price); } } else @@ -4579,13 +4588,9 @@ BOOL sitting_on_selection() } // Need to determine if avatar is sitting on this object - LLVOAvatar* avatar = gAgent.getAvatarObject(); - if (!avatar) - { - return FALSE; - } + if (!isAgentAvatarValid()) return FALSE; - return (avatar->isSitting() && avatar->getRoot() == root_object); + return (gAgentAvatarp->isSitting() && gAgentAvatarp->getRoot() == root_object); } class LLToolsSaveToInventory : public view_listener_t @@ -5027,7 +5032,7 @@ class LLViewEnableLastChatter : public view_listener_t bool handleEvent(const LLSD& userdata) { // *TODO: add check that last chatter is in range - bool new_value = (gAgent.cameraThirdPerson() && gAgent.getLastChatter().notNull()); + bool new_value = (gAgentCamera.cameraThirdPerson() && gAgent.getLastChatter().notNull()); return new_value; } }; @@ -5141,7 +5146,7 @@ void print_agent_nvpairs(void*) llinfos << "Can't find agent object" << llendl; } - llinfos << "Camera at " << gAgent.getCameraPositionGlobal() << llendl; + llinfos << "Camera at " << gAgentCamera.getCameraPositionGlobal() << llendl; } void show_debug_menus() @@ -5332,7 +5337,7 @@ void handle_look_at_selection(const LLSD& param) BOOL zoom = (param.asString() == "zoom"); if (!LLSelectMgr::getInstance()->getSelection()->isEmpty()) { - gAgent.setFocusOnAvatar(FALSE, ANIMATE); + gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE); LLBBox selection_bbox = LLSelectMgr::getInstance()->getBBoxOfSelection(); F32 angle_of_view = llmax(0.1f, LLViewerCamera::getInstance()->getAspect() > 1.f ? LLViewerCamera::getInstance()->getView() * LLViewerCamera::getInstance()->getAspect() : LLViewerCamera::getInstance()->getView()); @@ -5349,17 +5354,17 @@ void handle_look_at_selection(const LLSD& param) if (zoom) { // Make sure we are not increasing the distance between the camera and object - LLVector3d orig_distance = gAgent.getCameraPositionGlobal() - LLSelectMgr::getInstance()->getSelectionCenterGlobal(); + LLVector3d orig_distance = gAgentCamera.getCameraPositionGlobal() - LLSelectMgr::getInstance()->getSelectionCenterGlobal(); distance = llmin(distance, (F32) orig_distance.length()); - gAgent.setCameraPosAndFocusGlobal(LLSelectMgr::getInstance()->getSelectionCenterGlobal() + LLVector3d(obj_to_cam * distance), + gAgentCamera.setCameraPosAndFocusGlobal(LLSelectMgr::getInstance()->getSelectionCenterGlobal() + LLVector3d(obj_to_cam * distance), LLSelectMgr::getInstance()->getSelectionCenterGlobal(), object_id ); } else { - gAgent.setFocusGlobal( LLSelectMgr::getInstance()->getSelectionCenterGlobal(), object_id ); + gAgentCamera.setFocusGlobal( LLSelectMgr::getInstance()->getSelectionCenterGlobal(), object_id ); } } } @@ -5372,7 +5377,7 @@ void handle_zoom_to_object(LLUUID object_id) if (object) { - gAgent.setFocusOnAvatar(FALSE, ANIMATE); + gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE); LLBBox bbox = object->getBoundingBoxAgent() ; F32 angle_of_view = llmax(0.1f, LLViewerCamera::getInstance()->getAspect() > 1.f ? LLViewerCamera::getInstance()->getView() * LLViewerCamera::getInstance()->getAspect() : LLViewerCamera::getInstance()->getView()); @@ -5384,7 +5389,7 @@ void handle_zoom_to_object(LLUUID object_id) LLVector3d object_center_global = gAgent.getPosGlobalFromAgent(bbox.getCenterAgent()); - gAgent.setCameraPosAndFocusGlobal(object_center_global + LLVector3d(obj_to_cam * distance), + gAgentCamera.setCameraPosAndFocusGlobal(object_center_global + LLVector3d(obj_to_cam * distance), object_center_global, object_id ); } @@ -5582,7 +5587,7 @@ void handle_customize_avatar() { if (gAgentWearables.areWearablesLoaded()) { - gAgent.changeCameraToCustomizeAvatar(); + gAgentCamera.changeCameraToCustomizeAvatar(); } } @@ -5768,18 +5773,18 @@ class LLLandEdit : public view_listener_t { bool handleEvent(const LLSD& userdata) { - if (gAgent.getFocusOnAvatar() && gSavedSettings.getBOOL("EditCameraMovement") ) + if (gAgentCamera.getFocusOnAvatar() && gSavedSettings.getBOOL("EditCameraMovement") ) { // zoom in if we're looking at the avatar - gAgent.setFocusOnAvatar(FALSE, ANIMATE); - gAgent.setFocusGlobal(LLToolPie::getInstance()->getPick()); + gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE); + gAgentCamera.setFocusGlobal(LLToolPie::getInstance()->getPick()); - gAgent.cameraOrbitOver( F_PI * 0.25f ); + gAgentCamera.cameraOrbitOver( F_PI * 0.25f ); gViewerWindow->moveCursorToCenter(); } else if ( gSavedSettings.getBOOL("EditCameraMovement") ) { - gAgent.setFocusGlobal(LLToolPie::getInstance()->getPick()); + gAgentCamera.setFocusGlobal(LLToolPie::getInstance()->getPick()); gViewerWindow->moveCursorToCenter(); } @@ -5838,7 +5843,7 @@ private: S32 index = userdata.asInteger(); LLViewerJointAttachment* attachment_point = NULL; if (index > 0) - attachment_point = get_if_there(gAgent.getAvatarObject()->mAttachmentPoints, index, (LLViewerJointAttachment*)NULL); + attachment_point = get_if_there(gAgentAvatarp->mAttachmentPoints, index, (LLViewerJointAttachment*)NULL); confirm_replace_attachment(0, attachment_point); } return true; @@ -5859,8 +5864,8 @@ void near_attach_object(BOOL success, void *user_data) U8 attachment_id = 0; if (attachment) { - for (LLVOAvatar::attachment_map_t::const_iterator iter = gAgent.getAvatarObject()->mAttachmentPoints.begin(); - iter != gAgent.getAvatarObject()->mAttachmentPoints.end(); ++iter) + for (LLVOAvatar::attachment_map_t::const_iterator iter = gAgentAvatarp->mAttachmentPoints.begin(); + iter != gAgentAvatarp->mAttachmentPoints.end(); ++iter) { if (iter->second == attachment) { @@ -5905,7 +5910,7 @@ void confirm_replace_attachment(S32 option, void* user_data) walkToSpot -= delta; gAgent.startAutoPilotGlobal(gAgent.getPosGlobalFromAgent(walkToSpot), "Attach", NULL, near_attach_object, user_data, stop_distance); - gAgent.clearFocusObject(); + gAgentCamera.clearFocusObject(); } } } @@ -5985,7 +5990,7 @@ class LLAttachmentDetachFromPoint : public view_listener_t { bool handleEvent(const LLSD& user_data) { - const LLViewerJointAttachment *attachment = get_if_there(gAgent.getAvatarObject()->mAttachmentPoints, user_data.asInteger(), (LLViewerJointAttachment*)NULL); + const LLViewerJointAttachment *attachment = get_if_there(gAgentAvatarp->mAttachmentPoints, user_data.asInteger(), (LLViewerJointAttachment*)NULL); if (attachment->getNumObjects() > 0) { gMessageSystem->newMessage("ObjectDetach"); @@ -6013,7 +6018,7 @@ static bool onEnableAttachmentLabel(LLUICtrl* ctrl, const LLSD& data) LLMenuItemGL* menu = dynamic_cast<LLMenuItemGL*>(ctrl); if (menu) { - const LLViewerJointAttachment *attachment = get_if_there(gAgent.getAvatarObject()->mAttachmentPoints, data["index"].asInteger(), (LLViewerJointAttachment*)NULL); + const LLViewerJointAttachment *attachment = get_if_there(gAgentAvatarp->mAttachmentPoints, data["index"].asInteger(), (LLViewerJointAttachment*)NULL); if (attachment) { label = data["label"].asString(); @@ -6131,7 +6136,7 @@ class LLAttachmentEnableDrop : public view_listener_t if (object && LLSelectMgr::getInstance()->getSelection()->contains(object,SELECT_ALL_TES )) { S32 attachmentID = ATTACHMENT_ID_FROM_STATE(object->getState()); - attachment = get_if_there(gAgent.getAvatarObject()->mAttachmentPoints, attachmentID, (LLViewerJointAttachment*)NULL); + attachment = get_if_there(gAgentAvatarp->mAttachmentPoints, attachmentID, (LLViewerJointAttachment*)NULL); if (attachment) { @@ -6263,8 +6268,8 @@ class LLAttachmentPointFilled : public view_listener_t bool handleEvent(const LLSD& user_data) { bool enable = false; - LLVOAvatar::attachment_map_t::iterator found_it = gAgent.getAvatarObject()->mAttachmentPoints.find(user_data.asInteger()); - if (found_it != gAgent.getAvatarObject()->mAttachmentPoints.end()) + LLVOAvatar::attachment_map_t::iterator found_it = gAgentAvatarp->mAttachmentPoints.find(user_data.asInteger()); + if (found_it != gAgentAvatarp->mAttachmentPoints.end()) { enable = found_it->second->getNumObjects() > 0; } @@ -6460,13 +6465,13 @@ void handle_selected_texture_info(void*) void handle_test_male(void*) { - LLAppearanceManager::instance().wearOutfitByName("Male Shape & Outfit"); + LLAppearanceMgr::instance().wearOutfitByName("Male Shape & Outfit"); //gGestureList.requestResetFromServer( TRUE ); } void handle_test_female(void*) { - LLAppearanceManager::instance().wearOutfitByName("Female Shape & Outfit"); + LLAppearanceMgr::instance().wearOutfitByName("Female Shape & Outfit"); //gGestureList.requestResetFromServer( FALSE ); } @@ -6481,15 +6486,10 @@ void handle_toggle_pg(void*) void handle_dump_attachments(void*) { - LLVOAvatar* avatar = gAgent.getAvatarObject(); - if( !avatar ) - { - llinfos << "NO AVATAR" << llendl; - return; - } + if(!isAgentAvatarValid()) return; - for (LLVOAvatar::attachment_map_t::iterator iter = avatar->mAttachmentPoints.begin(); - iter != avatar->mAttachmentPoints.end(); ) + for (LLVOAvatar::attachment_map_t::iterator iter = gAgentAvatarp->mAttachmentPoints.begin(); + iter != gAgentAvatarp->mAttachmentPoints.end(); ) { LLVOAvatar::attachment_map_t::iterator curiter = iter++; LLViewerJointAttachment* attachment = curiter->second; @@ -6751,7 +6751,7 @@ class LLViewEnableMouselook : public view_listener_t { // You can't go directly from customize avatar to mouselook. // TODO: write code with appropriate dialogs to handle this transition. - bool new_value = (CAMERA_MODE_CUSTOMIZE_AVATAR != gAgent.getCameraMode() && !gSavedSettings.getBOOL("FreezeTime")); + bool new_value = (CAMERA_MODE_CUSTOMIZE_AVATAR != gAgentCamera.getCameraMode() && !gSavedSettings.getBOOL("FreezeTime")); return new_value; } }; @@ -6909,7 +6909,7 @@ void reload_vertex_shader(void *) void handle_dump_avatar_local_textures(void*) { - gAgent.getAvatarObject()->dumpLocalTextures(); + gAgentAvatarp->dumpLocalTextures(); } void handle_dump_timers() @@ -6929,86 +6929,83 @@ void handle_debug_avatar_textures(void*) void handle_grab_texture(void* data) { ETextureIndex tex_index = (ETextureIndex)((intptr_t)data); - const LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); - if ( avatar ) - { - // MULTI-WEARABLE: change to support an index - const LLUUID& asset_id = avatar->grabLocalTexture(tex_index, 0); - LL_INFOS("texture") << "Adding baked texture " << asset_id << " to inventory." << llendl; - LLAssetType::EType asset_type = LLAssetType::AT_TEXTURE; - LLInventoryType::EType inv_type = LLInventoryType::IT_TEXTURE; - const LLUUID folder_id = gInventory.findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(asset_type)); - if(folder_id.notNull()) - { - std::string name = "Unknown"; - const LLVOAvatarDictionary::TextureEntry *texture_dict = LLVOAvatarDictionary::getInstance()->getTexture(tex_index); - if (texture_dict->mIsBakedTexture) - { - EBakedTextureIndex baked_index = texture_dict->mBakedTextureIndex; - name = "Baked " + LLVOAvatarDictionary::getInstance()->getBakedTexture(baked_index)->mNameCapitalized; - } - name += " Texture"; - - LLUUID item_id; - item_id.generate(); - LLPermissions perm; - perm.init(gAgentID, - gAgentID, - LLUUID::null, - LLUUID::null); - U32 next_owner_perm = PERM_MOVE | PERM_TRANSFER; - perm.initMasks(PERM_ALL, - PERM_ALL, - PERM_NONE, - PERM_NONE, - next_owner_perm); - time_t creation_date_now = time_corrected(); - LLPointer<LLViewerInventoryItem> item - = new LLViewerInventoryItem(item_id, - folder_id, - perm, - asset_id, - asset_type, - inv_type, - name, - LLStringUtil::null, - LLSaleInfo::DEFAULT, - LLInventoryItem::II_FLAGS_NONE, - creation_date_now); - - item->updateServer(TRUE); - gInventory.updateItem(item); - gInventory.notifyObservers(); - - // Show the preview panel for textures to let - // user know that the image is now in inventory. - LLInventoryPanel *active_panel = LLInventoryPanel::getActiveInventoryPanel(); - if(active_panel) - { - LLFocusableElement* focus_ctrl = gFocusMgr.getKeyboardFocus(); - - active_panel->setSelection(item_id, TAKE_FOCUS_NO); - active_panel->openSelected(); - //LLFloaterInventory::dumpSelectionInformation((void*)view); - // restore keyboard focus - gFocusMgr.setKeyboardFocus(focus_ctrl); - } - } - else - { - llwarns << "Can't find a folder to put it in" << llendl; + if (!isAgentAvatarValid()) return; + + // MULTI-WEARABLE: change to support an index + const LLUUID& asset_id = gAgentAvatarp->grabLocalTexture(tex_index, 0); + LL_INFOS("texture") << "Adding baked texture " << asset_id << " to inventory." << llendl; + LLAssetType::EType asset_type = LLAssetType::AT_TEXTURE; + LLInventoryType::EType inv_type = LLInventoryType::IT_TEXTURE; + const LLUUID folder_id = gInventory.findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(asset_type)); + if(folder_id.notNull()) + { + std::string name = "Unknown"; + const LLVOAvatarDictionary::TextureEntry *texture_dict = LLVOAvatarDictionary::getInstance()->getTexture(tex_index); + if (texture_dict->mIsBakedTexture) + { + EBakedTextureIndex baked_index = texture_dict->mBakedTextureIndex; + name = "Baked " + LLVOAvatarDictionary::getInstance()->getBakedTexture(baked_index)->mNameCapitalized; + } + name += " Texture"; + + LLUUID item_id; + item_id.generate(); + LLPermissions perm; + perm.init(gAgentID, + gAgentID, + LLUUID::null, + LLUUID::null); + U32 next_owner_perm = PERM_MOVE | PERM_TRANSFER; + perm.initMasks(PERM_ALL, + PERM_ALL, + PERM_NONE, + PERM_NONE, + next_owner_perm); + time_t creation_date_now = time_corrected(); + LLPointer<LLViewerInventoryItem> item + = new LLViewerInventoryItem(item_id, + folder_id, + perm, + asset_id, + asset_type, + inv_type, + name, + LLStringUtil::null, + LLSaleInfo::DEFAULT, + LLInventoryItem::II_FLAGS_NONE, + creation_date_now); + + item->updateServer(TRUE); + gInventory.updateItem(item); + gInventory.notifyObservers(); + + // Show the preview panel for textures to let + // user know that the image is now in inventory. + LLInventoryPanel *active_panel = LLInventoryPanel::getActiveInventoryPanel(); + if(active_panel) + { + LLFocusableElement* focus_ctrl = gFocusMgr.getKeyboardFocus(); + + active_panel->setSelection(item_id, TAKE_FOCUS_NO); + active_panel->openSelected(); + //LLFloaterInventory::dumpSelectionInformation((void*)view); + // restore keyboard focus + gFocusMgr.setKeyboardFocus(focus_ctrl); } } + else + { + llwarns << "Can't find a folder to put it in" << llendl; + } } BOOL enable_grab_texture(void* data) { ETextureIndex index = (ETextureIndex)((intptr_t)data); - const LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); - if ( avatar ) + if (isAgentAvatarValid()) { // MULTI-WEARABLE: - return avatar->canGrabLocalTexture(index,0); + return gAgentAvatarp->canGrabLocalTexture(index,0); } return FALSE; } @@ -7047,7 +7044,7 @@ LLVOAvatar* find_avatar_from_object( const LLUUID& object_id ) void handle_disconnect_viewer(void *) { - LLAppViewer::instance()->forceDisconnect("Testing viewer disconnect"); + LLAppViewer::instance()->forceDisconnect(LLTrans::getString("TestingDisconnect")); } void force_error_breakpoint(void *) @@ -7219,12 +7216,11 @@ void handle_buy_currency_test(void*) void handle_rebake_textures(void*) { - LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); - if (!avatar) return; + if (!isAgentAvatarValid()) return; // Slam pending upload count to "unstick" things bool slam_for_debug = true; - avatar->forceBakeAllTextures(slam_for_debug); + gAgentAvatarp->forceBakeAllTextures(slam_for_debug); } void toggle_visibility(void* user_data) diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp index 00762894cd..c575656b24 100644 --- a/indra/newview/llviewermenufile.cpp +++ b/indra/newview/llviewermenufile.cpp @@ -36,6 +36,7 @@ // project includes #include "llagent.h" +#include "llagentcamera.h" #include "llfilepicker.h" #include "llfloaterreg.h" #include "llfloaterbuycurrency.h" @@ -140,9 +141,9 @@ std::string build_extensions_string(LLFilePicker::ELoadFilter filter) **/ const std::string upload_pick(void* data) { - if( gAgent.cameraMouselook() ) + if( gAgentCamera.cameraMouselook() ) { - gAgent.changeCameraToDefault(); + gAgentCamera.changeCameraToDefault(); // This doesn't seem necessary. JC // display(); } @@ -289,9 +290,9 @@ class LLFileUploadBulk : public view_listener_t { bool handleEvent(const LLSD& userdata) { - if( gAgent.cameraMouselook() ) + if( gAgentCamera.cameraMouselook() ) { - gAgent.changeCameraToDefault(); + gAgentCamera.changeCameraToDefault(); } // TODO: @@ -317,13 +318,11 @@ class LLFileUploadBulk : public view_listener_t LLStringUtil::trim(asset_name); std::string display_name = LLStringUtil::null; - LLAssetStorage::LLStoreAssetCallback callback = NULL; S32 expected_upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload(); - void *userdata = NULL; - upload_new_resource(filename, asset_name, asset_name, 0, LLFolderType::FT_NONE, LLInventoryType::IT_NONE, + upload_new_resource(filename, asset_name, asset_name, LLFolderType::FT_NONE, LLInventoryType::IT_NONE, LLFloaterPerms::getNextOwnerPerms(), LLFloaterPerms::getGroupPerms(), LLFloaterPerms::getEveryonePerms(), display_name, - callback, expected_upload_cost, userdata); + NULL, expected_upload_cost); // *NOTE: Ew, we don't iterate over the file list here, // we handle the next files in upload_done_callback() @@ -480,16 +479,15 @@ void handle_compress_image(void*) } void upload_new_resource(const std::string& src_filename, std::string name, - std::string desc, S32 compression_info, + std::string desc, LLFolderType::EType destination_folder_type, LLInventoryType::EType inv_type, U32 next_owner_perms, U32 group_perms, U32 everyone_perms, const std::string& display_name, - LLAssetStorage::LLStoreAssetCallback callback, - S32 expected_upload_cost, - void *userdata) + boost::function<void(const LLUUID& uuid)> callback, + S32 expected_upload_cost) { // Generate the temporary UUID. std::string filename = gDirUtilp->getTempFilename(); @@ -771,9 +769,9 @@ void upload_new_resource(const std::string& src_filename, std::string name, { t_disp_name = src_filename; } - upload_new_resource(tid, asset_type, name, desc, compression_info, // tid + upload_new_resource(tid, asset_type, name, desc, destination_folder_type, inv_type, next_owner_perms, group_perms, everyone_perms, - display_name, callback, expected_upload_cost, userdata); + display_name, callback, expected_upload_cost); } else { @@ -811,10 +809,10 @@ void upload_done_callback(const LLUUID& uuid, void* user_data, S32 result, LLExt if(!(can_afford_transaction(expected_upload_cost))) { - LLFloaterBuyCurrency::buyCurrency( - llformat(LLTrans::getString("UploadingCosts").c_str(), - data->mAssetInfo.getName().c_str()), - expected_upload_cost); + LLStringUtil::format_map_t args; + args["NAME"] = data->mAssetInfo.getName(); + args["AMOUNT"] = llformat("%d", expected_upload_cost); + LLFloaterBuyCurrency::buyCurrency(LLTrans::getString("UploadingCosts", args), expected_upload_cost); is_balance_sufficient = FALSE; } else if(region) @@ -892,30 +890,28 @@ void upload_done_callback(const LLUUID& uuid, void* user_data, S32 result, LLExt LLStringUtil::trim(asset_name); std::string display_name = LLStringUtil::null; - LLAssetStorage::LLStoreAssetCallback callback = NULL; - void *userdata = NULL; upload_new_resource(next_file, asset_name, asset_name, // file - 0, LLFolderType::FT_NONE, LLInventoryType::IT_NONE, + LLFolderType::FT_NONE, LLInventoryType::IT_NONE, PERM_NONE, PERM_NONE, PERM_NONE, display_name, - callback, - expected_upload_cost, // assuming next in a group of uploads is of roughly the same type, i.e. same upload cost - userdata); + NULL, + expected_upload_cost); // assuming next in a group of uploads is of roughly the same type, i.e. same upload cost + } } -void upload_new_resource(const LLTransactionID &tid, LLAssetType::EType asset_type, +void upload_new_resource(const LLTransactionID &tid, + LLAssetType::EType asset_type, std::string name, - std::string desc, S32 compression_info, + std::string desc, LLFolderType::EType destination_folder_type, LLInventoryType::EType inv_type, U32 next_owner_perms, U32 group_perms, U32 everyone_perms, const std::string& display_name, - LLAssetStorage::LLStoreAssetCallback callback, - S32 expected_upload_cost, - void *userdata) + boost::function<void(const LLUUID& uuid)> callback, + S32 expected_upload_cost) { if(gDisconnected) { @@ -959,76 +955,26 @@ void upload_new_resource(const LLTransactionID &tid, LLAssetType::EType asset_ty upload_message.append(display_name); LLUploadDialog::modalUploadDialog(upload_message); - llinfos << "*** Uploading: " << llendl; - llinfos << "Type: " << LLAssetType::lookup(asset_type) << llendl; - llinfos << "UUID: " << uuid << llendl; - llinfos << "Name: " << name << llendl; - llinfos << "Desc: " << desc << llendl; - llinfos << "Expected Upload Cost: " << expected_upload_cost << llendl; - lldebugs << "Folder: " << gInventory.findCategoryUUIDForType((destination_folder_type == LLFolderType::FT_NONE) ? LLFolderType::assetTypeToFolderType(asset_type) : destination_folder_type) << llendl; - lldebugs << "Asset Type: " << LLAssetType::lookup(asset_type) << llendl; std::string url = gAgent.getRegion()->getCapability("NewFileAgentInventory"); - if (!url.empty()) - { - llinfos << "New Agent Inventory via capability" << llendl; - LLSD body; - body["folder_id"] = gInventory.findCategoryUUIDForType((destination_folder_type == LLFolderType::FT_NONE) ? LLFolderType::assetTypeToFolderType(asset_type) : destination_folder_type); - body["asset_type"] = LLAssetType::lookup(asset_type); - body["inventory_type"] = LLInventoryType::lookup(inv_type); - body["name"] = name; - body["description"] = desc; - body["next_owner_mask"] = LLSD::Integer(next_owner_perms); - body["group_mask"] = LLSD::Integer(group_perms); - body["everyone_mask"] = LLSD::Integer(everyone_perms); - body["expected_upload_cost"] = LLSD::Integer(expected_upload_cost); - - //std::ostringstream llsdxml; - //LLSDSerialize::toPrettyXML(body, llsdxml); - //llinfos << "posting body to capability: " << llsdxml.str() << llendl; - - LLHTTPClient::post(url, body, new LLNewAgentInventoryResponder(body, uuid, asset_type)); + + if (url.empty()) { + llwarns << "Could not get NewFileAgentInventory capability" << llendl; + return; } - else - { - llinfos << "NewAgentInventory capability not found, new agent inventory via asset system." << llendl; - // check for adequate funds - // TODO: do this check on the sim - if (LLAssetType::AT_SOUND == asset_type || - LLAssetType::AT_TEXTURE == asset_type || - LLAssetType::AT_ANIMATION == asset_type) - { - S32 balance = gStatusBar->getBalance(); - if (balance < expected_upload_cost) - { - // insufficient funds, bail on this upload - LLFloaterBuyCurrency::buyCurrency(LLTrans::getString("uploading_costs"), expected_upload_cost); - return; - } - } - LLResourceData* data = new LLResourceData; - data->mAssetInfo.mTransactionID = tid; - data->mAssetInfo.mUuid = uuid; - data->mAssetInfo.mType = asset_type; - data->mAssetInfo.mCreatorID = gAgentID; - data->mInventoryType = inv_type; - data->mNextOwnerPerm = next_owner_perms; - data->mExpectedUploadCost = expected_upload_cost; - data->mUserData = userdata; - data->mAssetInfo.setName(name); - data->mAssetInfo.setDescription(desc); - data->mPreferredLocation = destination_folder_type; - - LLAssetStorage::LLStoreAssetCallback asset_callback = &upload_done_callback; - if (callback) - { - asset_callback = callback; - } - gAssetStorage->storeAssetData(data->mAssetInfo.mTransactionID, data->mAssetInfo.mType, - asset_callback, - (void*)data, - FALSE); - } + llinfos << "New Agent Inventory via capability" << llendl; + LLSD body; + body["folder_id"] = gInventory.findCategoryUUIDForType((destination_folder_type == LLFolderType::FT_NONE) ? LLFolderType::assetTypeToFolderType(asset_type) : destination_folder_type); + body["asset_type"] = LLAssetType::lookup(asset_type); + body["inventory_type"] = LLInventoryType::lookup(inv_type); + body["name"] = name; + body["description"] = desc; + body["next_owner_mask"] = LLSD::Integer(next_owner_perms); + body["group_mask"] = LLSD::Integer(group_perms); + body["everyone_mask"] = LLSD::Integer(everyone_perms); + body["expected_upload_cost"] = LLSD::Integer(expected_upload_cost); + + LLHTTPClient::post(url, body, new LLNewAgentInventoryResponder(body, uuid, asset_type, callback)); } void init_menu_file() diff --git a/indra/newview/llviewermenufile.h b/indra/newview/llviewermenufile.h index 1e6d13f1c6..33f8243ac0 100644 --- a/indra/newview/llviewermenufile.h +++ b/indra/newview/llviewermenufile.h @@ -34,41 +34,35 @@ #define LLVIEWERMENUFILE_H #include "llfoldertype.h" -#include "llassetstorage.h" #include "llinventorytype.h" class LLTransactionID; - void init_menu_file(); void upload_new_resource(const std::string& src_filename, std::string name, std::string desc, - S32 compression_info, LLFolderType::EType destination_folder_type, LLInventoryType::EType inv_type, U32 next_owner_perms, U32 group_perms, U32 everyone_perms, const std::string& display_name, - LLAssetStorage::LLStoreAssetCallback callback, - S32 expected_upload_cost, - void *userdata); + boost::function<void(const LLUUID& uuid)> callback, + S32 expected_upload_cost); void upload_new_resource(const LLTransactionID &tid, LLAssetType::EType type, std::string name, std::string desc, - S32 compression_info, LLFolderType::EType destination_folder_type, LLInventoryType::EType inv_type, U32 next_owner_perms, U32 group_perms, U32 everyone_perms, const std::string& display_name, - LLAssetStorage::LLStoreAssetCallback callback, - S32 expected_upload_cost, - void *userdata); + boost::function<void(const LLUUID& uuid)> callback, + S32 expected_upload_cost); #endif diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 5f7b19a5cb..5f8c03b545 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -51,6 +51,7 @@ #include "mean_collision_data.h" #include "llagent.h" +#include "llagentcamera.h" #include "llcallingcard.h" //#include "llfirstuse.h" #include "llfloaterbuycurrency.h" @@ -62,6 +63,7 @@ #include "llfloaterpreference.h" #include "llhudeffecttrail.h" #include "llhudmanager.h" +#include "llinventoryfunctions.h" #include "llinventoryobserver.h" #include "llinventorypanel.h" #include "llnearbychat.h" @@ -105,6 +107,7 @@ #include "llpanelplaceprofile.h" #include <boost/algorithm/string/split.hpp> // +#include <boost/regex.hpp> #if LL_WINDOWS // For Windows specific error handler #include "llwindebug.h" // For the invalid message handler @@ -272,7 +275,9 @@ void give_money(const LLUUID& uuid, LLViewerRegion* region, S32 amount, BOOL is_ } else { - LLFloaterBuyCurrency::buyCurrency(LLTrans::getString("giving"), amount); + LLStringUtil::format_map_t args; + args["AMOUNT"] = llformat("%d", amount); + LLFloaterBuyCurrency::buyCurrency(LLTrans::getString("giving", args), amount); } } @@ -866,9 +871,9 @@ bool check_offer_throttle(const std::string& from_name, bool check_only) } } -void open_inventory_offer(const std::vector<LLUUID>& items, const std::string& from_name) +void open_inventory_offer(const uuid_vec_t& items, const std::string& from_name) { - for (std::vector<LLUUID>::const_iterator item_iter = items.begin(); + for (uuid_vec_t::const_iterator item_iter = items.begin(); item_iter != items.end(); ++item_iter) { @@ -1081,6 +1086,21 @@ LLOfferInfo::LLOfferInfo(const LLSD& sd) mHost = LLHost(sd["sender"].asString()); } +LLOfferInfo::LLOfferInfo(const LLOfferInfo& info) +{ + mIM = info.mIM; + mFromID = info.mFromID; + mFromGroup = info.mFromGroup; + mFromObject = info.mFromObject; + mTransactionID = info.mTransactionID; + mFolderID = info.mFolderID; + mObjectID = info.mObjectID; + mType = info.mType; + mFromName = info.mFromName; + mDesc = info.mDesc; + mHost = info.mHost; +} + LLSD LLOfferInfo::asLLSD() { LLSD sd; @@ -1244,8 +1264,8 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD& // Disabled logging to old chat floater to fix crash in group notices - EXT-4149 // LLFloaterChat::addChatHistory(chat); - LLInventoryFetchComboObserver::folder_ref_t folders; - LLInventoryFetchComboObserver::item_ref_t items; + uuid_vec_t folders; + uuid_vec_t items; items.push_back(mObjectID); LLDiscardAgentOffer* discard_agent_offer; discard_agent_offer = new LLDiscardAgentOffer(mFolderID, mObjectID); @@ -1572,7 +1592,11 @@ void inventory_offer_handler(LLOfferInfo* info) } else // Agent -> Agent Inventory Offer { + p.responder = info; // Note: sets inventory_offer_callback as the callback + // *TODO fix memory leak + // inventory_offer_callback() is not invoked if user received notification and + // closes viewer(without responding the notification) p.substitutions(args).payload(payload).functor.function(boost::bind(&LLOfferInfo::inventory_offer_callback, info, _1, _2)); p.name = "UserGiveItem"; @@ -2821,8 +2845,8 @@ public: LLInventoryModel::cat_array_t land_cats; LLInventoryModel::item_array_t land_items; - folder_ref_t::iterator it = mCompleteFolders.begin(); - folder_ref_t::iterator end = mCompleteFolders.end(); + uuid_vec_t::iterator it = mCompleteFolders.begin(); + uuid_vec_t::iterator end = mCompleteFolders.end(); for(; it != end; ++it) { gInventory.collectDescendentsIf( @@ -2883,7 +2907,7 @@ BOOL LLPostTeleportNotifiers::tick() if ( gAgent.getTeleportState() == LLAgent::TELEPORT_NONE ) { // get callingcards and landmarks available to the user arriving. - LLInventoryFetchDescendentsObserver::folder_ref_t folders; + uuid_vec_t folders; const LLUUID callingcard_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CALLINGCARD); if(callingcard_id.notNull()) folders.push_back(callingcard_id); @@ -2971,18 +2995,18 @@ void process_teleport_finish(LLMessageSystem* msg, void**) /* // send camera update to new region - gAgent.updateCamera(); + gAgentCamera.updateCamera(); // likewise make sure the camera is behind the avatar - gAgent.resetView(TRUE); + gAgentCamera.resetView(TRUE); LLVector3 shift_vector = regionp->getPosRegionFromGlobal(gAgent.getRegion()->getOriginGlobal()); gAgent.setRegion(regionp); gObjectList.shiftObjects(shift_vector); - if (gAgent.getAvatarObject()) + if (isAgentAvatarValid()) { - gAgent.getAvatarObject()->clearChatText(); - gAgent.slamLookAt(look_at); + gAgentAvatarp->clearChatText(); + gAgentCamera.slamLookAt(look_at); } gAgent.setPositionAgent(pos); gAssetStorage->setUpstream(sim); @@ -3061,8 +3085,7 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**) std::string version_channel; msg->getString("SimData", "ChannelVersion", version_channel); - LLVOAvatar* avatarp = gAgent.getAvatarObject(); - if (!avatarp) + if (!isAgentAvatarValid()) { // Could happen if you were immediately god-teleported away on login, // maybe other cases. Continue, but warn. @@ -3083,7 +3106,7 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**) << x << ":" << y << " current pos " << gAgent.getPositionGlobal() << LL_ENDL; - LLAppViewer::instance()->forceDisconnect("You were sent to an invalid region."); + LLAppViewer::instance()->forceDisconnect(LLTrans::getString("SentToInvalidRegion")); return; } @@ -3106,9 +3129,9 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**) if( is_teleport ) { // Force the camera back onto the agent, don't animate. - gAgent.setFocusOnAvatar(TRUE, FALSE); - gAgent.slamLookAt(look_at); - gAgent.updateCamera(); + gAgentCamera.setFocusOnAvatar(TRUE, FALSE); + gAgentCamera.slamLookAt(look_at); + gAgentCamera.updateCamera(); gAgent.setTeleportState( LLAgent::TELEPORT_START_ARRIVAL ); @@ -3116,7 +3139,7 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**) // know what you look like. gAgent.sendAgentSetAppearance(); - if (avatarp) + if (isAgentAvatarValid()) { // Chat the "back" SLURL. (DEV-4907) @@ -3129,9 +3152,9 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**) LLNotificationsUtil::add("SystemMessageTip", args); // Set the new position - avatarp->setPositionAgent(agent_pos); - avatarp->clearChat(); - avatarp->slamPosition(); + gAgentAvatarp->setPositionAgent(agent_pos); + gAgentAvatarp->clearChat(); + gAgentAvatarp->slamPosition(); } } else @@ -3157,7 +3180,7 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**) global_agent_pos[1] += y; look_at = (LLVector3)beacon_pos - global_agent_pos; look_at.normVec(); - gAgent.slamLookAt(look_at); + gAgentCamera.slamLookAt(look_at); } } @@ -3191,9 +3214,9 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**) gAgent.clearBusy(); } - if (avatarp) + if (isAgentAvatarValid()) { - avatarp->mFootPlane.clearVec(); + gAgentAvatarp->mFootPlane.clearVec(); } // send walk-vs-run status @@ -3334,7 +3357,7 @@ void send_agent_update(BOOL force_send, BOOL send_reliable) LLQuaternion body_rotation = gAgent.getFrameAgent().getQuaternion(); LLQuaternion head_rotation = gAgent.getHeadRotation(); - camera_pos_agent = gAgent.getCameraPositionAgent(); + camera_pos_agent = gAgentCamera.getCameraPositionAgent(); render_state = gAgent.getRenderState(); @@ -3457,7 +3480,7 @@ void send_agent_update(BOOL force_send, BOOL send_reliable) msg->addVector3Fast(_PREHASH_CameraAtAxis, LLViewerCamera::getInstance()->getAtAxis()); msg->addVector3Fast(_PREHASH_CameraLeftAxis, LLViewerCamera::getInstance()->getLeftAxis()); msg->addVector3Fast(_PREHASH_CameraUpAxis, LLViewerCamera::getInstance()->getUpAxis()); - msg->addF32Fast(_PREHASH_Far, gAgent.mDrawDistance); + msg->addF32Fast(_PREHASH_Far, gAgentCamera.mDrawDistance); msg->addU32Fast(_PREHASH_ControlFlags, control_flags); @@ -4094,7 +4117,7 @@ void process_avatar_appearance(LLMessageSystem *mesgsys, void **user_data) mesgsys->getUUIDFast(_PREHASH_Sender, _PREHASH_ID, uuid); LLVOAvatar* avatarp = (LLVOAvatar *)gObjectList.findObject(uuid); - if( avatarp ) + if (avatarp) { avatarp->processAvatarAppearance( mesgsys ); } @@ -4109,7 +4132,7 @@ void process_camera_constraint(LLMessageSystem *mesgsys, void **user_data) LLVector4 cameraCollidePlane; mesgsys->getVector4Fast(_PREHASH_CameraCollidePlane, _PREHASH_Plane, cameraCollidePlane); - gAgent.setCameraCollidePlane(cameraCollidePlane); + gAgentCamera.setCameraCollidePlane(cameraCollidePlane); } void near_sit_object(BOOL success, void *data) @@ -4142,20 +4165,18 @@ void process_avatar_sit_response(LLMessageSystem *mesgsys, void **user_data) BOOL force_mouselook; mesgsys->getBOOLFast(_PREHASH_SitTransform, _PREHASH_ForceMouselook, force_mouselook); - LLVOAvatar* avatar = gAgent.getAvatarObject(); - - if (avatar && dist_vec_squared(camera_eye, camera_at) > 0.0001f) + if (isAgentAvatarValid() && dist_vec_squared(camera_eye, camera_at) > 0.0001f) { - gAgent.setSitCamera(sitObjectID, camera_eye, camera_at); + gAgentCamera.setSitCamera(sitObjectID, camera_eye, camera_at); } - gAgent.setForceMouselook(force_mouselook); + gAgentCamera.setForceMouselook(force_mouselook); LLViewerObject* object = gObjectList.findObject(sitObjectID); if (object) { LLVector3 sit_spot = object->getPositionAgent() + (sitPosition * object->getRotation()); - if (!use_autopilot || (avatar && avatar->isSitting() && avatar->getRoot() == object->getRoot())) + if (!use_autopilot || isAgentAvatarValid() && gAgentAvatarp->isSitting() && gAgentAvatarp->getRoot() == object->getRoot()) { //we're already sitting on this object, so don't autopilot } @@ -4501,8 +4522,64 @@ void process_money_balance_reply( LLMessageSystem* msg, void** ) payload["from_id"] = from_id; LLNotificationsUtil::add("PaymentRecived", args, payload); } + //AD *HACK: Parsing incoming string to localize messages that come from server! EXT-5986 + // It's only a temporarily and ineffective measure. It doesn't affect performance much + // because we get here only for specific type of messages, but anyway it is not right to do it! + // *TODO: Server-side changes should be made and this code removed. else { + if(desc.find("You paid")==0) + { + // Regular expression for message parsing- change it in case of server-side changes. + // Each set of parenthesis will later be used to find arguments of message we generate + // in the end of this if- (.*) gives us name of money receiver, (\\d+)-amount of money we pay + // and ([^$]*)- reason of payment + boost::regex expr("You paid (?:.{0}|(.*) )L\\$(\\d+)\\s?([^$]*)\\."); + boost::match_results <std::string::const_iterator> matches; + if(boost::regex_match(desc, matches, expr)) + { + // Name of full localizable notification string + // there are three types of this string- with name of receiver and reason of payment, + // without name and without reason (but not simultaneously) + // example of string without name - You paid L$100 to create a group. + // example of string without reason - You paid Smdby Linden L$100. + // example of string with reason and name - You paid Smbdy Linden L$100 for a land access pass. + std::string line = "you_paid_ldollars_no_name"; + + // arguments of string which will be in notification + LLStringUtil::format_map_t str_args; + + // extracting amount of money paid (without L$ symbols). It is always present. + str_args["[AMOUNT]"] = std::string(matches[2]); + + // extracting name of person/group you are paying (it may be absent) + std::string name = std::string(matches[1]); + if(!name.empty()) + { + str_args["[NAME]"] = name; + line = "you_paid_ldollars"; + } + + // extracting reason of payment (it may be absent) + std::string reason = std::string(matches[3]); + if (reason.empty()) + { + line = "you_paid_ldollars_no_reason"; + } + else + { + std::string localized_reason; + // if we haven't found localized string for reason of payment leave it as it was + str_args["[REASON]"] = LLTrans::findString(localized_reason, reason) ? localized_reason : reason; + } + + // forming final message string by retrieving localized version from xml + // and applying previously found arguments + line = LLTrans::getString(line, str_args); + args["MESSAGE"] = line; + } + } + LLNotificationsUtil::add("SystemMessage", args); } @@ -5144,9 +5221,9 @@ void container_inventory_arrived(LLViewerObject* object, void* data) { LL_DEBUGS("Messaging") << "container_inventory_arrived()" << LL_ENDL; - if( gAgent.cameraMouselook() ) + if( gAgentCamera.cameraMouselook() ) { - gAgent.changeCameraToDefault(); + gAgentCamera.changeCameraToDefault(); } LLInventoryPanel *active_panel = LLInventoryPanel::getActiveInventoryPanel(); @@ -5371,13 +5448,13 @@ void process_teleport_local(LLMessageSystem *msg,void**) } gAgent.setPositionAgent(pos); - gAgent.slamLookAt(look_at); + gAgentCamera.slamLookAt(look_at); // likewise make sure the camera is behind the avatar - gAgent.resetView(TRUE, TRUE); + gAgentCamera.resetView(TRUE, TRUE); // send camera update to new region - gAgent.updateCamera(); + gAgentCamera.updateCamera(); send_agent_update(TRUE, TRUE); @@ -5489,6 +5566,8 @@ bool handle_lure_callback(const LLSD& notification, const LLSD& response) args["TO_NAME"] = target_name; LLSD payload; + + //*TODO please rewrite all keys to the same case, lower or upper payload["from_id"] = target_id; payload["SESSION_NAME"] = target_name; payload["SUPPRESS_TOAST"] = true; @@ -5509,7 +5588,7 @@ void handle_lure(const LLUUID& invitee) } // Prompt for a message to the invited user. -void handle_lure(const std::vector<LLUUID>& ids) +void handle_lure(const uuid_vec_t& ids) { LLSD edit_args; edit_args["REGION"] = gAgent.getRegion()->getName(); diff --git a/indra/newview/llviewermessage.h b/indra/newview/llviewermessage.h index 7dd629dcfd..0ba4ac0c8d 100644 --- a/indra/newview/llviewermessage.h +++ b/indra/newview/llviewermessage.h @@ -157,7 +157,7 @@ void send_group_notice(const LLUUID& group_id, const LLInventoryItem* item); void handle_lure(const LLUUID& invitee); -void handle_lure(const std::vector<LLUUID>& ids); +void handle_lure(const uuid_vec_t& ids); // always from gAgent and // routes through the gAgent's current simulator @@ -201,7 +201,7 @@ void invalid_message_callback(LLMessageSystem*, void*, EMessageException); void process_initiate_download(LLMessageSystem* msg, void**); void start_new_inventory_observer(); -void open_inventory_offer(const std::vector<LLUUID>& items, const std::string& from_name); +void open_inventory_offer(const uuid_vec_t& items, const std::string& from_name); // Returns true if item is not in certain "quiet" folder which don't need UI // notification (e.g. trash, cof, lost-and-found) and agent is not AFK, false otherwise. @@ -215,6 +215,8 @@ struct LLOfferInfo mIM(IM_NOTHING_SPECIAL), mType(LLAssetType::AT_NONE) {}; LLOfferInfo(const LLSD& sd); + LLOfferInfo(const LLOfferInfo& info); + void forceResponse(InventoryOfferResponse response); EInstantMessage mIM; diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index b5642d07a5..8860b734bb 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -60,6 +60,7 @@ #include "llaudiosourcevo.h" #include "llagent.h" +#include "llagentcamera.h" #include "llbbox.h" #include "llbox.h" #include "llcylinder.h" @@ -133,7 +134,15 @@ LLViewerObject *LLViewerObject::createObject(const LLUUID &id, const LLPCode pco { if (id == gAgentID) { - res = new LLVOAvatarSelf(id, pcode, regionp); + if (!gAgentAvatarp) + { + gAgentAvatarp = new LLVOAvatarSelf(id, pcode, regionp); + } + else + { + gAgentAvatarp->updateRegion(regionp); + } + res = gAgentAvatarp; } else { @@ -222,7 +231,7 @@ LLViewerObject::LLViewerObject(const LLUUID &id, const LLPCode pcode, LLViewerRe mClickAction(0), mAttachmentItemID(LLUUID::null) { - if(!is_global) + if (!is_global) { llassert(mRegionp); } @@ -234,7 +243,7 @@ LLViewerObject::LLViewerObject(const LLUUID &id, const LLPCode pcode, LLViewerRe mPositionRegion = LLVector3(0.f, 0.f, 0.f); - if(!is_global) + if (!is_global && mRegionp) { mPositionAgent = mRegionp->getOriginAgent(); } @@ -376,11 +385,10 @@ void LLViewerObject::markDead() if (flagAnimSource()) { - LLVOAvatar* avatarp = gAgent.getAvatarObject(); - if (avatarp && !avatarp->isDead()) + if (isAgentAvatarValid()) { // stop motions associated with this object - avatarp->stopMotionFromSource(mID); + gAgentAvatarp->stopMotionFromSource(mID); } } @@ -2757,7 +2765,7 @@ void LLViewerObject::setPixelAreaAndAngle(LLAgent &agent) return; } - LLVector3 viewer_pos_agent = agent.getCameraPositionAgent(); + LLVector3 viewer_pos_agent = gAgentCamera.getCameraPositionAgent(); LLVector3 pos_agent = getRenderPosition(); F32 dx = viewer_pos_agent.mV[VX] - pos_agent.mV[VX]; @@ -4029,7 +4037,8 @@ LLBBox LLViewerObject::getBoundingBoxAgent() const avatar_parent = (LLViewerObject*)root_edit->getParent(); } - if (avatar_parent && avatar_parent->isAvatar() && root_edit && root_edit->mDrawable.notNull()) + if (avatar_parent && avatar_parent->isAvatar() && + root_edit && root_edit->mDrawable.notNull() && root_edit->mDrawable->getXform()->getParent()) { LLXform* parent_xform = root_edit->mDrawable->getXform()->getParent(); position_agent = (getPositionEdit() * parent_xform->getWorldRotation()) + parent_xform->getWorldPosition(); @@ -4918,7 +4927,6 @@ void LLViewerObject::setIncludeInSearch(bool include_in_search) void LLViewerObject::setRegion(LLViewerRegion *regionp) { - llassert(regionp); mLatestRecvPacketID = 0; mRegionp = regionp; diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp index 6347090f71..752aeaaab0 100644 --- a/indra/newview/llviewerobjectlist.cpp +++ b/indra/newview/llviewerobjectlist.cpp @@ -47,6 +47,7 @@ #include "llviewerwindow.h" #include "llnetmap.h" #include "llagent.h" +#include "llagentcamera.h" #include "pipeline.h" #include "llspatialpartition.h" #include "lltooltip.h" @@ -288,7 +289,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys, LLMemType mt(LLMemType::MTYPE_OBJECT_PROCESS_UPDATE); LLFastTimer t(FTM_PROCESS_OBJECTS); - LLVector3d camera_global = gAgent.getCameraPositionGlobal(); + LLVector3d camera_global = gAgentCamera.getCameraPositionGlobal(); LLViewerObject *objectp; S32 num_objects; U32 local_id; @@ -473,7 +474,6 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys, if (objectp->getRegion() != regionp) { // Object changed region, so update it - objectp->setRegion(regionp); objectp->updateRegion(regionp); // for LLVOAvatar } } @@ -614,7 +614,7 @@ void LLViewerObjectList::updateApparentAngles(LLAgent &agent) } // Focused - objectp = gAgent.getFocusObject(); + objectp = gAgentCamera.getFocusObject(); if (objectp) { objectp->boostTexturePriority(); @@ -894,6 +894,13 @@ void LLViewerObjectList::removeDrawable(LLDrawable* drawablep) BOOL LLViewerObjectList::killObject(LLViewerObject *objectp) { + // Don't ever kill gAgentAvatarp, just mark it as null region instead. + if (objectp == gAgentAvatarp) + { + objectp->setRegion(NULL); + return FALSE; + } + // When we're killing objects, all we do is mark them as dead. // We clean up the dead objects later. @@ -942,7 +949,8 @@ void LLViewerObjectList::killAllObjects() { objectp = *iter; killObject(objectp); - llassert(objectp->isDead()); + // Object must be dead, or it's the LLVOAvatarSelf which never dies. + llassert((objectp == gAgentAvatarp) || objectp->isDead()); } cleanDeadObjects(FALSE); @@ -1209,11 +1217,10 @@ void LLViewerObjectList::generatePickList(LLCamera &camera) } // add all hud objects to pick list - LLVOAvatar* avatarp = gAgent.getAvatarObject(); - if (avatarp) + if (isAgentAvatarValid()) { - for (LLVOAvatar::attachment_map_t::iterator iter = avatarp->mAttachmentPoints.begin(); - iter != avatarp->mAttachmentPoints.end(); ) + for (LLVOAvatar::attachment_map_t::iterator iter = gAgentAvatarp->mAttachmentPoints.begin(); + iter != gAgentAvatarp->mAttachmentPoints.end(); ) { LLVOAvatar::attachment_map_t::iterator curiter = iter++; LLViewerJointAttachment* attachment = curiter->second; @@ -1281,7 +1288,7 @@ void LLViewerObjectList::renderPickList(const LLRect& screen_rect, BOOL pick_par gViewerWindow->renderSelections( TRUE, pick_parcel_wall, FALSE ); //fix for DEV-19335. Don't pick hud objects when customizing avatar (camera mode doesn't play nice with nametags). - if (!gAgent.cameraCustomizeAvatar()) + if (!gAgentCamera.cameraCustomizeAvatar()) { // render pickable ui elements, like names, etc. LLHUDObject::renderAllForSelect(); diff --git a/indra/newview/llviewerparcelmedia.cpp b/indra/newview/llviewerparcelmedia.cpp index 2c5c0a37e8..b967436df6 100644 --- a/indra/newview/llviewerparcelmedia.cpp +++ b/indra/newview/llviewerparcelmedia.cpp @@ -210,25 +210,29 @@ void LLViewerParcelMedia::play(LLParcel* parcel) // A new impl will be created below. } } - - if(!sMediaImpl) + + // Don't ever try to play if the media type is set to "none/none" + if(stricmp(mime_type.c_str(), "none/none") != 0) { - LL_DEBUGS("Media") << "new media impl with mime type " << mime_type << ", url " << media_url << LL_ENDL; - - // There is no media impl, make a new one - sMediaImpl = LLViewerMedia::newMediaImpl( - placeholder_texture_id, - media_width, - media_height, - media_auto_scale, - media_loop); - sMediaImpl->setIsParcelMedia(true); - sMediaImpl->navigateTo(media_url, mime_type, true); - } + if(!sMediaImpl) + { + LL_DEBUGS("Media") << "new media impl with mime type " << mime_type << ", url " << media_url << LL_ENDL; + + // There is no media impl, make a new one + sMediaImpl = LLViewerMedia::newMediaImpl( + placeholder_texture_id, + media_width, + media_height, + media_auto_scale, + media_loop); + sMediaImpl->setIsParcelMedia(true); + sMediaImpl->navigateTo(media_url, mime_type, true); + } - //LLFirstUse::useMedia(); + //LLFirstUse::useMedia(); - LLViewerParcelMediaAutoPlay::playStarted(); + LLViewerParcelMediaAutoPlay::playStarted(); + } } // static @@ -312,11 +316,14 @@ std::string LLViewerParcelMedia::getURL() if(sMediaImpl.notNull()) url = sMediaImpl->getMediaURL(); - if (url.empty()) - url = LLViewerParcelMgr::getInstance()->getAgentParcel()->getMediaCurrentURL(); - - if (url.empty()) - url = LLViewerParcelMgr::getInstance()->getAgentParcel()->getMediaURL(); + if(stricmp(LLViewerParcelMgr::getInstance()->getAgentParcel()->getMediaType().c_str(), "none/none") != 0) + { + if (url.empty()) + url = LLViewerParcelMgr::getInstance()->getAgentParcel()->getMediaCurrentURL(); + + if (url.empty()) + url = LLViewerParcelMgr::getInstance()->getAgentParcel()->getMediaURL(); + } return url; } diff --git a/indra/newview/llviewerparcelmediaautoplay.cpp b/indra/newview/llviewerparcelmediaautoplay.cpp index ad2723b66b..f55d6d89c4 100644 --- a/indra/newview/llviewerparcelmediaautoplay.cpp +++ b/indra/newview/llviewerparcelmediaautoplay.cpp @@ -86,6 +86,7 @@ BOOL LLViewerParcelMediaAutoPlay::tick() LLParcel *this_parcel = NULL; LLViewerRegion *this_region = NULL; std::string this_media_url; + std::string this_media_type; LLUUID this_media_texture_id; S32 this_parcel_id = 0; LLUUID this_region_id; @@ -101,7 +102,9 @@ BOOL LLViewerParcelMediaAutoPlay::tick() if (this_parcel) { - this_media_url = std::string(this_parcel->getMediaURL()); + this_media_url = this_parcel->getMediaURL(); + + this_media_type = this_parcel->getMediaType(); this_media_texture_id = this_parcel->getMediaID(); @@ -118,14 +121,15 @@ BOOL LLViewerParcelMediaAutoPlay::tick() mLastRegionID = this_region_id; } - mTimeInParcel += mPeriod; // increase mTimeInParcel by the amount of time between ticks + mTimeInParcel += mPeriod; // increase mTimeInParcel by the amount of time between ticks - if ((!mPlayed) && // if we've never played - (mTimeInParcel > AUTOPLAY_TIME) && // and if we've been here for so many seconds - (this_media_url.size() != 0) && // and if the parcel has media - (LLViewerParcelMedia::sMediaImpl.isNull())) // and if the media is not already playing + if ((!mPlayed) && // if we've never played + (mTimeInParcel > AUTOPLAY_TIME) && // and if we've been here for so many seconds + (!this_media_url.empty()) && // and if the parcel has media + (stricmp(this_media_type.c_str(), "none/none") != 0) && + (LLViewerParcelMedia::sMediaImpl.isNull())) // and if the media is not already playing { - if (this_media_texture_id.notNull()) // and if the media texture is good + if (this_media_texture_id.notNull()) // and if the media texture is good { LLViewerMediaTexture *image = LLViewerTextureManager::getMediaTexture(this_media_texture_id, FALSE) ; diff --git a/indra/newview/llviewerparceloverlay.cpp b/indra/newview/llviewerparceloverlay.cpp index 9de1ef7190..2d17ea7bcd 100644 --- a/indra/newview/llviewerparceloverlay.cpp +++ b/indra/newview/llviewerparceloverlay.cpp @@ -43,11 +43,11 @@ #include "v2math.h" // newview includes +#include "llagentcamera.h" #include "llviewertexture.h" #include "llviewercontrol.h" #include "llsurface.h" #include "llviewerregion.h" -#include "llagent.h" #include "llviewercamera.h" #include "llviewertexturelist.h" #include "llselectmgr.h" @@ -760,7 +760,7 @@ S32 LLViewerParcelOverlay::renderPropertyLines () LLGLDepthTest mDepthTest(GL_TRUE); // Find camera height off the ground (not from zero) - F32 ground_height_at_camera = land.resolveHeightGlobal( gAgent.getCameraPositionGlobal() ); + F32 ground_height_at_camera = land.resolveHeightGlobal( gAgentCamera.getCameraPositionGlobal() ); F32 camera_z = LLViewerCamera::getInstance()->getOrigin().mV[VZ]; F32 camera_height = camera_z - ground_height_at_camera; @@ -791,7 +791,7 @@ S32 LLViewerParcelOverlay::renderPropertyLines () const S32 vertex_per_edge = 3 + 2 * (GRID_STEP-1) + 3; // Stomp the camera into two dimensions - LLVector3 camera_region = mRegion->getPosRegionFromGlobal( gAgent.getCameraPositionGlobal() ); + LLVector3 camera_region = mRegion->getPosRegionFromGlobal( gAgentCamera.getCameraPositionGlobal() ); // Set up a cull plane 2 * PARCEL_GRID_STEP_METERS behind // the camera. The cull plane normal is the camera's at axis. diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index ce627494c8..07d4ac664f 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -47,6 +47,7 @@ #include "v4math.h" #include "llagent.h" +#include "llagentcamera.h" #include "llcallingcard.h" #include "llcaphttpsender.h" #include "llcommandhandler.h" @@ -819,7 +820,7 @@ void LLViewerRegion::calculateCenterGlobal() void LLViewerRegion::calculateCameraDistance() { - mCameraDistanceSquared = (F32)(gAgent.getCameraPositionGlobal() - getCenterGlobal()).magVecSquared(); + mCameraDistanceSquared = (F32)(gAgentCamera.getCameraPositionGlobal() - getCenterGlobal()).magVecSquared(); } std::ostream& operator<<(std::ostream &s, const LLViewerRegion ®ion) diff --git a/indra/newview/llviewerstats.cpp b/indra/newview/llviewerstats.cpp index 8059f866ba..b7c265be59 100644 --- a/indra/newview/llviewerstats.cpp +++ b/indra/newview/llviewerstats.cpp @@ -52,6 +52,7 @@ #include "llsurface.h" #include "llvlmanager.h" #include "llagent.h" +#include "llagentcamera.h" #include "llviewercontrol.h" #include "llfloatertools.h" #include "lldebugview.h" @@ -577,11 +578,11 @@ void update_statistics(U32 frame_count) // make sure we have a valid time delta for this frame if (gFrameIntervalSeconds > 0.f) { - if (gAgent.getCameraMode() == CAMERA_MODE_MOUSELOOK) + if (gAgentCamera.getCameraMode() == CAMERA_MODE_MOUSELOOK) { LLViewerStats::getInstance()->incStat(LLViewerStats::ST_MOUSELOOK_SECONDS, gFrameIntervalSeconds); } - else if (gAgent.getCameraMode() == CAMERA_MODE_CUSTOMIZE_AVATAR) + else if (gAgentCamera.getCameraMode() == CAMERA_MODE_CUSTOMIZE_AVATAR) { LLViewerStats::getInstance()->incStat(LLViewerStats::ST_AVATAR_EDIT_SECONDS, gFrameIntervalSeconds); } @@ -827,7 +828,11 @@ void send_stats() S32 window_height = gViewerWindow->getWindowHeightRaw(); S32 window_size = (window_width * window_height) / 1024; misc["string_1"] = llformat("%d", window_size); - // misc["string_2"] = + if (gDebugTimers.find(0) != gDebugTimers.end() && gFrameTimeSeconds > 0) + { + misc["string_2"] = llformat("Texture Time: %.2f, Total Time: %.2f", gDebugTimers[0].getElapsedTimeF32(), gFrameTimeSeconds); + } + // misc["int_1"] = LLSD::Integer(gSavedSettings.getU32("RenderQualityPerformance")); // Steve: 1.21 // misc["int_2"] = LLSD::Integer(gFrameStalls); // Steve: 1.21 diff --git a/indra/newview/llviewertexteditor.cpp b/indra/newview/llviewertexteditor.cpp index ea8af223c3..c9b3886fef 100644 --- a/indra/newview/llviewertexteditor.cpp +++ b/indra/newview/llviewertexteditor.cpp @@ -524,7 +524,10 @@ LLUIImagePtr LLEmbeddedItems::getItemImage(llwchar ext_char) const break; case LLAssetType::AT_SOUND: img_name = "Inv_Sound"; break; case LLAssetType::AT_CLOTHING: img_name = "Inv_Clothing"; break; - case LLAssetType::AT_OBJECT: img_name = "Inv_Object"; break; + case LLAssetType::AT_OBJECT: + img_name = LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS & item->getFlags() ? + "Inv_Object_Multi" : "Inv_Object"; + break; case LLAssetType::AT_CALLINGCARD: img_name = "Inv_CallingCard"; break; case LLAssetType::AT_LANDMARK: img_name = "Inv_Landmark"; break; case LLAssetType::AT_NOTECARD: img_name = "Inv_Notecard"; break; diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index 133b6ee8c9..af0dcd8e35 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -1546,8 +1546,7 @@ F32 LLViewerFetchedTexture::calcDecodePriority() } else { - // Leave the priority as-is - return mDecodePriority; + priority = -1.f; //stop fetching } } else if (cur_discard < 0) @@ -1579,12 +1578,12 @@ F32 LLViewerFetchedTexture::calcDecodePriority() } else if (!isJustBound() && mCachedRawImageReady) { - //if(mBoostLevel < BOOST_HIGH) - //{ - // // We haven't rendered this in a while, de-prioritize it - // desired_discard += 2; - //} - //else + if(mBoostLevel < BOOST_HIGH) + { + // We haven't rendered this in a while, de-prioritize it + desired_discard += 2; + } + else { // We haven't rendered this in the last half second, and we have a cached raw image, leave the desired discard as-is desired_discard = cur_discard; @@ -1592,7 +1591,7 @@ F32 LLViewerFetchedTexture::calcDecodePriority() } S32 ddiscard = cur_discard - desired_discard; - ddiscard = llclamp(ddiscard, 0, MAX_DELTA_DISCARD_LEVEL_FOR_PRIORITY); + ddiscard = llclamp(ddiscard, -1, MAX_DELTA_DISCARD_LEVEL_FOR_PRIORITY); priority = (ddiscard + 1) * PRIORITY_DELTA_DISCARD_LEVEL_FACTOR; } @@ -2262,11 +2261,14 @@ void LLViewerFetchedTexture::destroyRawImage() { sRawCount--; - if(mForceToSaveRawImage) + if(mIsRawImageValid) { - saveRawImage() ; - } - setCachedRawImage() ; + if(mForceToSaveRawImage) + { + saveRawImage() ; + } + setCachedRawImage() ; + } } mRawImage = NULL; diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index adac4b9b40..85c961f34a 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -44,6 +44,8 @@ #include <fstream> #include <algorithm> +#include "llagent.h" +#include "llagentcamera.h" #include "llfloaterreg.h" #include "llpanellogin.h" #include "llviewerkeyboard.h" @@ -363,9 +365,9 @@ public: agent_center_text = llformat("AgentCenter %f %f %f", (F32)(tvector.mdV[VX]), (F32)(tvector.mdV[VY]), (F32)(tvector.mdV[VZ])); - if (gAgent.getAvatarObject()) + if (isAgentAvatarValid()) { - tvector = gAgent.getPosGlobalFromAgent(gAgent.getAvatarObject()->mRoot.getWorldPosition()); + tvector = gAgent.getPosGlobalFromAgent(gAgentAvatarp->mRoot.getWorldPosition()); agent_root_center_text = llformat("AgentRootCenter %f %f %f", (F32)(tvector.mdV[VX]), (F32)(tvector.mdV[VY]), (F32)(tvector.mdV[VZ])); } @@ -383,7 +385,7 @@ public: agent_left_text = llformat("AgentLeftAxis %f %f %f", (F32)(tvector.mdV[VX]), (F32)(tvector.mdV[VY]), (F32)(tvector.mdV[VZ])); - tvector = gAgent.getCameraPositionGlobal(); + tvector = gAgentCamera.getCameraPositionGlobal(); camera_center_text = llformat("CameraCenter %f %f %f", (F32)(tvector.mdV[VX]), (F32)(tvector.mdV[VY]), (F32)(tvector.mdV[VZ])); @@ -776,7 +778,7 @@ BOOL LLViewerWindow::handleRightMouseDown(LLWindow *window, LLCoordGL pos, MASK // *HACK: this should be rolled into the composite tool logic, not // hardcoded at the top level. - if (CAMERA_MODE_CUSTOMIZE_AVATAR != gAgent.getCameraMode() && LLToolMgr::getInstance()->getCurrentTool() != LLToolPie::getInstance()) + if (CAMERA_MODE_CUSTOMIZE_AVATAR != gAgentCamera.getCameraMode() && LLToolMgr::getInstance()->getCurrentTool() != LLToolPie::getInstance()) { // If the current tool didn't process the click, we should show // the pie menu. This can be done by passing the event to the pie @@ -1151,9 +1153,9 @@ BOOL LLViewerWindow::handleActivate(LLWindow *window, BOOL activated) } // SL-53351: Make sure we're not in mouselook when minimised, to prevent control issues - if (gAgent.getCameraMode() == CAMERA_MODE_MOUSELOOK) + if (gAgentCamera.getCameraMode() == CAMERA_MODE_MOUSELOOK) { - gAgent.changeCameraToDefault(); + gAgentCamera.changeCameraToDefault(); } send_agent_pause(); @@ -1171,7 +1173,7 @@ BOOL LLViewerWindow::handleActivate(LLWindow *window, BOOL activated) BOOL LLViewerWindow::handleActivateApp(LLWindow *window, BOOL activating) { - //if (!activating) gAgent.changeCameraToDefault(); + //if (!activating) gAgentCamera.changeCameraToDefault(); LLViewerJoystick::getInstance()->setNeedsReset(true); return FALSE; @@ -1351,7 +1353,8 @@ LLViewerWindow::LLViewerWindow( mStatesDirty(false), mIsFullscreenChecked(false), mCurrResolutionIndex(0), - mViewerWindowListener(new LLViewerWindowListener(this)) + mViewerWindowListener(new LLViewerWindowListener(this)), + mProgressView(NULL) { LLNotificationChannel::buildChannel("VW_alerts", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "alert")); LLNotificationChannel::buildChannel("VW_alertmodal", "Visible", LLNotificationFilters::filterBy<std::string>(&LLNotification::getType, "alertmodal")); @@ -1588,8 +1591,7 @@ void LLViewerWindow::initBase() gToolTipView = getRootView()->getChild<LLToolTipView>("tooltip view"); // Add the progress bar view (startup view), which overrides everything - mProgressView = new LLProgressView(full_window); - getRootView()->addChild(mProgressView); + mProgressView = getRootView()->getChild<LLProgressView>("progress_view"); setShowProgress(FALSE); setProgressCancelButtonVisible(FALSE); @@ -1608,8 +1610,8 @@ void LLViewerWindow::initWorldUI() gIMMgr = LLIMMgr::getInstance(); - getRootView()->sendChildToFront(gFloaterView); - getRootView()->sendChildToFront(gSnapshotFloaterView); + //getRootView()->sendChildToFront(gFloaterView); + //getRootView()->sendChildToFront(gSnapshotFloaterView); // new bottom panel LLPanel* bottom_tray_container = getRootView()->getChild<LLPanel>("bottom_tray_container"); @@ -2088,7 +2090,7 @@ void LLViewerWindow::draw() // Draw tool specific overlay on world LLToolMgr::getInstance()->getCurrentTool()->draw(); - if( gAgent.cameraMouselook() ) + if( gAgentCamera.cameraMouselook() ) { drawMouselookInstructions(); stop_glerror(); @@ -2270,7 +2272,7 @@ BOOL LLViewerWindow::handleKey(KEY key, MASK mask) } // Try for a new-format gesture - if (LLGestureManager::instance().triggerGesture(key, mask)) + if (LLGestureMgr::instance().triggerGesture(key, mask)) { return TRUE; } @@ -2424,7 +2426,7 @@ void LLViewerWindow::handleScrollWheel(S32 clicks) // Zoom the camera in and out behavior if(top_ctrl == 0 && getWorldViewRectScaled().pointInRect(mCurrentMousePoint.mX, mCurrentMousePoint.mY) ) - gAgent.handleScrollWheel(clicks); + gAgentCamera.handleScrollWheel(clicks); return; } @@ -3148,7 +3150,7 @@ void LLViewerWindow::renderSelections( BOOL for_gl_pick, BOOL pick_parcel_walls, // setup HUD render if (selection->getSelectType() == SELECT_TYPE_HUD && LLSelectMgr::getInstance()->getSelection()->getObjectCount()) { - LLBBox hud_bbox = gAgent.getAvatarObject()->getHUDBBox(); + LLBBox hud_bbox = gAgentAvatarp->getHUDBBox(); // set up transform to encompass bounding box of HUD glMatrixMode(GL_PROJECTION); @@ -3175,7 +3177,7 @@ void LLViewerWindow::renderSelections( BOOL for_gl_pick, BOOL pick_parcel_walls, glPushMatrix(); if (selection->getSelectType() == SELECT_TYPE_HUD) { - F32 zoom = gAgent.mHUDCurZoom; + F32 zoom = gAgentCamera.mHUDCurZoom; glScalef(zoom, zoom, zoom); } @@ -3294,7 +3296,7 @@ LLVector3d LLViewerWindow::clickPointInWorldGlobal(S32 x, S32 y_from_bot, LLView // world at the location of the mouse click LLVector3 mouse_direction_global = mouseDirectionGlobal( x, y_from_bot ); - LLVector3d relative_object = clicked_object->getPositionGlobal() - gAgent.getCameraPositionGlobal(); + LLVector3d relative_object = clicked_object->getPositionGlobal() - gAgentCamera.getCameraPositionGlobal(); // make mouse vector as long as object vector, so it touchs a point near // where the user clicked on the object @@ -3303,7 +3305,7 @@ LLVector3d LLViewerWindow::clickPointInWorldGlobal(S32 x, S32 y_from_bot, LLView LLVector3d new_pos; new_pos.setVec(mouse_direction_global); // transform mouse vector back to world coords - new_pos += gAgent.getCameraPositionGlobal(); + new_pos += gAgentCamera.getCameraPositionGlobal(); return new_pos; } @@ -3570,7 +3572,7 @@ LLVector3 LLViewerWindow::mousePointHUD(const S32 x, const S32 y) const F32 hud_x = -((F32)x - center_x) / height; F32 hud_y = ((F32)y - center_y) / height; - return LLVector3(0.f, hud_x/gAgent.mHUDCurZoom, hud_y/gAgent.mHUDCurZoom); + return LLVector3(0.f, hud_x/gAgentCamera.mHUDCurZoom, hud_y/gAgentCamera.mHUDCurZoom); } // Returns unit vector relative to camera in camera space @@ -3617,7 +3619,7 @@ BOOL LLViewerWindow::mousePointOnPlaneGlobal(LLVector3d& point, const S32 x, con LLVector3d plane_normal_global_d; plane_normal_global_d.setVec(plane_normal_global); F64 plane_mouse_dot = (plane_normal_global_d * mouse_direction_global_d); - LLVector3d plane_origin_camera_rel = plane_point_global - gAgent.getCameraPositionGlobal(); + LLVector3d plane_origin_camera_rel = plane_point_global - gAgentCamera.getCameraPositionGlobal(); F64 mouse_look_at_scale = (plane_normal_global_d * plane_origin_camera_rel) / plane_mouse_dot; if (llabs(plane_mouse_dot) < 0.00001) @@ -3631,7 +3633,7 @@ BOOL LLViewerWindow::mousePointOnPlaneGlobal(LLVector3d& point, const S32 x, con mouse_look_at_scale = plane_origin_camera_rel.magVec() / (plane_origin_dir * mouse_direction_global_d); } - point = gAgent.getCameraPositionGlobal() + mouse_look_at_scale * mouse_direction_global_d; + point = gAgentCamera.getCameraPositionGlobal() + mouse_look_at_scale * mouse_direction_global_d; return mouse_look_at_scale > 0.0; } @@ -3649,12 +3651,12 @@ BOOL LLViewerWindow::mousePointOnLandGlobal(const S32 x, const S32 y, LLVector3d const F32 SECOND_PASS_STEP = 0.1f; // meters LLVector3d camera_pos_global; - camera_pos_global = gAgent.getCameraPositionGlobal(); + camera_pos_global = gAgentCamera.getCameraPositionGlobal(); LLVector3d probe_point_global; LLVector3 probe_point_region; // walk forwards to find the point - for (mouse_dir_scale = FIRST_PASS_STEP; mouse_dir_scale < gAgent.mDrawDistance; mouse_dir_scale += FIRST_PASS_STEP) + for (mouse_dir_scale = FIRST_PASS_STEP; mouse_dir_scale < gAgentCamera.mDrawDistance; mouse_dir_scale += FIRST_PASS_STEP) { LLVector3d mouse_direction_global_d; mouse_direction_global_d.setVec(mouse_direction_global * mouse_dir_scale); @@ -5039,9 +5041,9 @@ bool LLViewerWindow::onAlert(const LLSD& notify) // If we're in mouselook, the mouse is hidden and so the user can't click // the dialog buttons. In that case, change to First Person instead. - if( gAgent.cameraMouselook() ) + if( gAgentCamera.cameraMouselook() ) { - gAgent.changeCameraToDefault(); + gAgentCamera.changeCameraToDefault(); } return false; } @@ -5153,7 +5155,7 @@ void LLPickInfo::fetchResults() { mPickType = PICK_OBJECT; } - mObjectOffset = gAgent.calcFocusOffset(objectp, intersection, mPickPt.mX, mPickPt.mY); + mObjectOffset = gAgentCamera.calcFocusOffset(objectp, intersection, mPickPt.mX, mPickPt.mY); mObjectID = objectp->mID; mObjectFace = (te_offset == NO_FACE) ? -1 : (S32)te_offset; diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index f5e83ed025..c400e8510e 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -48,6 +48,7 @@ #include "sound_ids.h" #include "llagent.h" // Get state values from here +#include "llagentcamera.h" #include "llagentwearables.h" #include "llanimationstates.h" #include "llavatarpropertiesprocessor.h" @@ -754,11 +755,6 @@ LLVOAvatar::~LLVOAvatar() { lldebugs << "LLVOAvatar Destructor (0x" << this << ") id:" << mID << llendl; - if (isSelf()) - { - gAgent.setAvatarObject(NULL); - } - mRoot.removeAllChildren(); deleteAndClearArray(mSkeleton); @@ -885,7 +881,7 @@ BOOL LLVOAvatar::areAllNearbyInstancesBaked(S32& grey_avatars) // static void LLVOAvatar::dumpBakedStatus() { - LLVector3d camera_pos_global = gAgent.getCameraPositionGlobal(); + LLVector3d camera_pos_global = gAgentCamera.getCameraPositionGlobal(); for (std::vector<LLCharacter*>::iterator iter = LLCharacter::sInstances.begin(); iter != LLCharacter::sInstances.end(); ++iter) @@ -964,15 +960,14 @@ void LLVOAvatar::dumpBakedStatus() //static void LLVOAvatar::restoreGL() { - LLVOAvatar* self = gAgent.getAvatarObject(); - if (!self) - return; - self->setCompositeUpdatesEnabled(TRUE); - for (U32 i = 0; i < self->mBakedTextureDatas.size(); i++) + if (!isAgentAvatarValid()) return; + + gAgentAvatarp->setCompositeUpdatesEnabled(TRUE); + for (U32 i = 0; i < gAgentAvatarp->mBakedTextureDatas.size(); i++) { - self->invalidateComposite(self->mBakedTextureDatas[i].mTexLayerSet, FALSE); + gAgentAvatarp->invalidateComposite(gAgentAvatarp->mBakedTextureDatas[i].mTexLayerSet, FALSE); } - self->updateMeshTextures(); + gAgentAvatarp->updateMeshTextures(); } //static @@ -2084,7 +2079,7 @@ U32 LLVOAvatar::processUpdateMessage(LLMessageSystem *mesgsys, if(retval & LLViewerObject::INVALID_UPDATE) { - if(this == gAgent.getAvatarObject()) + if (isSelf()) { //tell sim to cancel this update gAgent.teleportViaLocation(gAgent.getPositionGlobal()); @@ -2225,7 +2220,7 @@ BOOL LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time) void LLVOAvatar::idleUpdateVoiceVisualizer(bool voice_enabled) { // disable voice visualizer when in mouselook - mVoiceVisualizer->setVoiceEnabled( voice_enabled && !(isSelf() && gAgent.cameraMouselook()) ); + mVoiceVisualizer->setVoiceEnabled( voice_enabled && !(isSelf() && gAgentCamera.cameraMouselook()) ); if ( voice_enabled ) { //---------------------------------------------------------------- @@ -2253,7 +2248,7 @@ void LLVOAvatar::idleUpdateVoiceVisualizer(bool voice_enabled) else { llinfos << "oops - CurrentGesticulationLevel can be only 0, 1, or 2" << llendl; } // this is the call that Karl S. created for triggering gestures from within the code. - LLGestureManager::instance().triggerAndReviseString( gestureString ); + LLGestureMgr::instance().triggerAndReviseString( gestureString ); } } @@ -2546,7 +2541,7 @@ void LLVOAvatar::idleUpdateLoadingEffect() llinfos << "self isFullyLoaded, first_fully_visible" << llendl; first_fully_visible = false; - LLAppearanceManager::instance().onFirstFullyVisible(); + LLAppearanceMgr::instance().onFirstFullyVisible(); } } if (isFullyLoaded()) @@ -2671,7 +2666,7 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last) if (isSelf()) { render_name = render_name - && !gAgent.cameraMouselook() + && !gAgentCamera.cameraMouselook() && (visible_chat || (gSavedSettings.getBOOL("RenderNameShowSelf") && gSavedSettings.getS32("AvatarNameTagMode") )); } @@ -3235,7 +3230,7 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent) } } LLVector3 fwdDir = lerp(primDir, velDir, clamp_rescale(speed, 0.5f, 2.0f, 0.0f, 1.0f)); - if (isSelf() && gAgent.cameraMouselook()) + if (isSelf() && gAgentCamera.cameraMouselook()) { // make sure fwdDir stays in same general direction as primdir if (gAgent.getFlying()) @@ -3266,7 +3261,7 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent) // When moving very slow, the pelvis is allowed to deviate from the // forward direction to allow it to hold it's position while the torso // and head turn. Once in motion, it must conform however. - BOOL self_in_mouselook = isSelf() && gAgent.cameraMouselook(); + BOOL self_in_mouselook = isSelf() && gAgentCamera.cameraMouselook(); LLVector3 pelvisDir( mRoot.getWorldMatrix().getFwdRow4().mV ); F32 pelvis_rot_threshold = clamp_rescale(speed, 0.1f, 1.0f, PELVIS_ROT_THRESHOLD_SLOW, PELVIS_ROT_THRESHOLD_FAST); @@ -5206,7 +5201,7 @@ BOOL LLVOAvatar::updateJointLODs() { if (isSelf()) { - if(gAgent.cameraCustomizeAvatar() || gAgent.cameraMouselook()) + if(gAgentCamera.cameraCustomizeAvatar() || gAgentCamera.cameraMouselook()) { mAdjustedPixelArea = MAX_PIXEL_AREA; } @@ -5352,7 +5347,7 @@ void LLVOAvatar::updateShadowFaces() // Render sprite sprite.setNormal(normal); - if (isSelf() && gAgent.getCameraMode() == CAMERA_MODE_MOUSELOOK) + if (isSelf() && gAgentCamera.getCameraMode() == CAMERA_MODE_MOUSELOOK) { sprite.setColor(0.f, 0.f, 0.f, 0.f); } @@ -5385,7 +5380,7 @@ void LLVOAvatar::updateShadowFaces() // Render sprite sprite.setNormal(normal); - if (isSelf() && gAgent.getCameraMode() == CAMERA_MODE_MOUSELOOK) + if (isSelf() && gAgentCamera.getCameraMode() == CAMERA_MODE_MOUSELOOK) { sprite.setColor(0.f, 0.f, 0.f, 0.f); } @@ -5440,7 +5435,7 @@ BOOL LLVOAvatar::setParent(LLViewerObject* parent) ret = LLViewerObject::setParent(parent); if (isSelf()) { - gAgent.resetCamera(); + gAgentCamera.resetCamera(); } } else @@ -5625,15 +5620,15 @@ void LLVOAvatar::sitOnObject(LLViewerObject *sit_object) //LLFirstUse::useSit(); gAgent.setFlying(FALSE); - gAgent.setThirdPersonHeadOffset(LLVector3::zero); + gAgentCamera.setThirdPersonHeadOffset(LLVector3::zero); //interpolate to new camera position - gAgent.startCameraAnimation(); + gAgentCamera.startCameraAnimation(); // make sure we are not trying to autopilot gAgent.stopAutoPilot(); - gAgent.setupSitCamera(); - if (gAgent.getForceMouselook()) + gAgentCamera.setupSitCamera(); + if (gAgentCamera.getForceMouselook()) { - gAgent.changeCameraToMouselook(); + gAgentCamera.changeCameraToMouselook(); } } @@ -5720,9 +5715,9 @@ void LLVOAvatar::getOffObject() //reset orientation // mRoot.setRotation(avWorldRot); - gAgent.setThirdPersonHeadOffset(LLVector3(0.f, 0.f, 1.f)); + gAgentCamera.setThirdPersonHeadOffset(LLVector3(0.f, 0.f, 1.f)); - gAgent.setSitCamera(LLUUID::null); + gAgentCamera.setSitCamera(LLUUID::null); } } @@ -5937,7 +5932,7 @@ void LLVOAvatar::updateMeshTextures() } } - const BOOL self_customizing = isSelf() && gAgent.cameraCustomizeAvatar(); // During face edit mode, we don't use baked textures + const BOOL self_customizing = isSelf() && gAgentCamera.cameraCustomizeAvatar(); // During face edit mode, we don't use baked textures const BOOL other_culled = !isSelf() && mCulled; std::vector<BOOL> is_layer_baked; @@ -6858,8 +6853,7 @@ void LLVOAvatar::useBakedTexture( const LLUUID& id ) // static void LLVOAvatar::dumpArchetypeXML( void* ) { - LLVOAvatar* avatar = gAgent.getAvatarObject(); - LLAPRFile outfile ; + LLAPRFile outfile; outfile.open(gDirUtilp->getExpandedFilename(LL_PATH_CHARACTER,"new archetype.xml"), LL_APR_WB ); apr_file_t* file = outfile.getFileHandle() ; if (!file) @@ -6877,7 +6871,7 @@ void LLVOAvatar::dumpArchetypeXML( void* ) const std::string& wearable_name = LLWearableDictionary::getTypeName((EWearableType)type); apr_file_printf( file, "\n\t\t<!-- wearable: %s -->\n", wearable_name.c_str() ); - for (LLVisualParam* param = avatar->getFirstVisualParam(); param; param = avatar->getNextVisualParam()) + for (LLVisualParam* param = gAgentAvatarp->getFirstVisualParam(); param; param = gAgentAvatarp->getNextVisualParam()) { LLViewerVisualParam* viewer_param = (LLViewerVisualParam*)param; if( (viewer_param->getWearableType() == type) && @@ -6893,7 +6887,7 @@ void LLVOAvatar::dumpArchetypeXML( void* ) if (LLVOAvatarDictionary::getTEWearableType((ETextureIndex)te) == type) { // MULTIPLE_WEARABLES: extend to multiple wearables? - LLViewerTexture* te_image = avatar->getImage((ETextureIndex)te, 0); + LLViewerTexture* te_image = ((LLVOAvatar *)(gAgentAvatarp))->getImage((ETextureIndex)te, 0); if( te_image ) { std::string uuid_str; diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index 32c24b3ebd..fe6990eae9 100644 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -44,9 +44,11 @@ #include "pipeline.h" #include "llagent.h" // Get state values from here +#include "llagentcamera.h" #include "llagentwearables.h" #include "llhudeffecttrail.h" #include "llhudmanager.h" +#include "llinventoryfunctions.h" #include "llselectmgr.h" #include "lltoolgrab.h" // for needsRenderBeam #include "lltoolmgr.h" // for needsRenderBeam @@ -66,6 +68,14 @@ #include <boost/lexical_cast.hpp> +LLVOAvatarSelf *gAgentAvatarp = NULL; +BOOL isAgentAvatarValid() +{ + return (gAgentAvatarp && + (gAgentAvatarp->getRegion() != NULL) && + (!gAgentAvatarp->isDead())); +} + using namespace LLVOAvatarDefines; /********************************************************************************* @@ -132,7 +142,6 @@ LLVOAvatarSelf::LLVOAvatarSelf(const LLUUID& id, mLastRegionHandle(0), mRegionCrossingCount(0) { - gAgent.setAvatarObject(this); gAgentWearables.setAvatarObject(this); lldebugs << "Marking avatar as self " << id << llendl; @@ -489,7 +498,7 @@ BOOL LLVOAvatarSelf::buildMenus() { LLMenuItemCallGL::Params item_params; item_params.name = attachment->getName(); - item_params.label = attachment->getName(); + item_params.label = LLTrans::getString(attachment->getName()); item_params.on_click.function_name = "Object.AttachToAvatar"; item_params.on_click.parameter = attach_index; item_params.on_enable.function_name = "Object.EnableWear"; @@ -510,16 +519,17 @@ BOOL LLVOAvatarSelf::buildMenus() return TRUE; } +void LLVOAvatarSelf::cleanup() +{ + markDead(); + delete mScreenp; + mScreenp = NULL; + mRegionp = NULL; +} + LLVOAvatarSelf::~LLVOAvatarSelf() { - // gAgents pointer might have been set to a different Avatar Self, don't get rid of it if so. - if (gAgent.getAvatarObject() == this) - { - gAgent.setAvatarObject(NULL); - gAgentWearables.setAvatarObject(NULL); - } - delete mScreenp; - mScreenp = NULL; + cleanup(); } /** @@ -610,6 +620,17 @@ BOOL LLVOAvatarSelf::updateCharacter(LLAgent &agent) } // virtual +BOOL LLVOAvatarSelf::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time) +{ + if (!isAgentAvatarValid()) + { + return TRUE; + } + LLVOAvatar::idleUpdate(agent, world, time); + return TRUE; +} + +// virtual LLJoint *LLVOAvatarSelf::getJoint(const std::string &name) { if (mScreenp) @@ -620,7 +641,8 @@ LLJoint *LLVOAvatarSelf::getJoint(const std::string &name) return LLVOAvatar::getJoint(name); } -/*virtual*/ BOOL LLVOAvatarSelf::setVisualParamWeight(LLVisualParam *which_param, F32 weight, BOOL upload_bake ) +// virtual +BOOL LLVOAvatarSelf::setVisualParamWeight(LLVisualParam *which_param, F32 weight, BOOL upload_bake ) { if (!which_param) { @@ -630,7 +652,8 @@ LLJoint *LLVOAvatarSelf::getJoint(const std::string &name) return setParamWeight(param,weight,upload_bake); } -/*virtual*/ BOOL LLVOAvatarSelf::setVisualParamWeight(const char* param_name, F32 weight, BOOL upload_bake ) +// virtual +BOOL LLVOAvatarSelf::setVisualParamWeight(const char* param_name, F32 weight, BOOL upload_bake ) { if (!param_name) { @@ -640,7 +663,8 @@ LLJoint *LLVOAvatarSelf::getJoint(const std::string &name) return setParamWeight(param,weight,upload_bake); } -/*virtual*/ BOOL LLVOAvatarSelf::setVisualParamWeight(S32 index, F32 weight, BOOL upload_bake ) +// virtual +BOOL LLVOAvatarSelf::setVisualParamWeight(S32 index, F32 weight, BOOL upload_bake ) { LLViewerVisualParam *param = (LLViewerVisualParam*) LLCharacter::getVisualParam(index); return setParamWeight(param,weight,upload_bake); @@ -776,7 +800,8 @@ void LLVOAvatarSelf::removeMissingBakedTextures() //virtual void LLVOAvatarSelf::updateRegion(LLViewerRegion *regionp) { - if (regionp->getHandle() != mLastRegionHandle) + setRegion(regionp); + if (!regionp || (regionp->getHandle() != mLastRegionHandle)) { if (mLastRegionHandle != 0) { @@ -790,7 +815,10 @@ void LLVOAvatarSelf::updateRegion(LLViewerRegion *regionp) max = llmax(delta, max); LLViewerStats::getInstance()->setStat(LLViewerStats::ST_CROSSING_MAX, max); } - mLastRegionHandle = regionp->getHandle(); + if (regionp) + { + mLastRegionHandle = regionp->getHandle(); + } } mRegionCrossingTimer.reset(); } @@ -819,10 +847,10 @@ void LLVOAvatarSelf::idleUpdateTractorBeam() { LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection(); - if (gAgent.mPointAt.notNull()) + if (gAgentCamera.mPointAt.notNull()) { // get point from pointat effect - mBeam->setPositionGlobal(gAgent.mPointAt->getPointAtPosGlobal()); + mBeam->setPositionGlobal(gAgentCamera.mPointAt->getPointAtPosGlobal()); mBeam->triggerLocal(); } else if (selection->getFirstRootObject() && @@ -873,7 +901,7 @@ void LLVOAvatarSelf::restoreMeshData() //llinfos << "Restoring" << llendl; mMeshValid = TRUE; updateJointLODs(); - updateAttachmentVisibility(gAgent.getCameraMode()); + updateAttachmentVisibility(gAgentCamera.getCameraMode()); // force mesh update as LOD might not have changed to trigger this gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_GEOMETRY, TRUE); @@ -938,7 +966,7 @@ void LLVOAvatarSelf::wearableUpdated( EWearableType type, BOOL upload_result ) // 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 (gAgent.cameraCustomizeAvatar()) + if (gAgentCamera.cameraCustomizeAvatar()) { setNewBakedTexture(index,IMG_DEFAULT_AVATAR); } @@ -1027,7 +1055,7 @@ const LLViewerJointAttachment *LLVOAvatarSelf::attachObject(LLViewerObject *view return 0; } - updateAttachmentVisibility(gAgent.getCameraMode()); + updateAttachmentVisibility(gAgentCamera.getCameraMode()); // Then make sure the inventory is in sync with the avatar. @@ -1035,7 +1063,7 @@ const LLViewerJointAttachment *LLVOAvatarSelf::attachObject(LLViewerObject *view if (attachment->isObjectAttached(viewer_object)) { const LLUUID& attachment_id = viewer_object->getItemID(); - LLAppearanceManager::instance().registerAttachment(attachment_id); + LLAppearanceMgr::instance().registerAttachment(attachment_id); } return attachment; @@ -1068,13 +1096,13 @@ BOOL LLVOAvatarSelf::detachObject(LLViewerObject *viewer_object) // Make sure the inventory is in sync with the avatar. // Update COF contents, don't trigger appearance update. - if (gAgent.getAvatarObject() == NULL) + if (!isAgentAvatarValid()) { llinfos << "removeItemLinks skipped, avatar is under destruction" << llendl; } else { - LLAppearanceManager::instance().unregisterAttachment(attachment_id); + LLAppearanceMgr::instance().unregisterAttachment(attachment_id); } return TRUE; @@ -1115,11 +1143,11 @@ void LLVOAvatarSelf::localTextureLoaded(BOOL success, LLViewerFetchedTexture *sr discard_level < local_tex_obj->getDiscard()) { local_tex_obj->setDiscard(discard_level); - if (!gAgent.cameraCustomizeAvatar()) + if (!gAgentCamera.cameraCustomizeAvatar()) { requestLayerSetUpdate(index); } - else if (gAgent.cameraCustomizeAvatar()) + else if (gAgentCamera.cameraCustomizeAvatar()) { LLVisualParamHint::requestHintUpdates(); } @@ -1523,11 +1551,11 @@ void LLVOAvatarSelf::setLocalTexture(ETextureIndex type, LLViewerTexture* src_te if (tex_discard >= 0 && tex_discard <= desired_discard) { local_tex_obj->setDiscard(tex_discard); - if (isSelf() && !gAgent.cameraCustomizeAvatar()) + if (isSelf() && !gAgentCamera.cameraCustomizeAvatar()) { requestLayerSetUpdate(type); } - else if (isSelf() && gAgent.cameraCustomizeAvatar()) + else if (isSelf() && gAgentCamera.cameraCustomizeAvatar()) { LLVisualParamHint::requestHintUpdates(); } @@ -1667,7 +1695,7 @@ void LLVOAvatarSelf::onLocalTextureLoaded(BOOL success, LLViewerFetchedTexture * void LLVOAvatarSelf::dumpTotalLocalTextureByteCount() { S32 gl_bytes = 0; - gAgent.getAvatarObject()->getLocalTextureByteCount(&gl_bytes); + gAgentAvatarp->getLocalTextureByteCount(&gl_bytes); llinfos << "Total Avatar LocTex GL:" << (gl_bytes/1024) << "KB" << llendl; } @@ -1924,9 +1952,7 @@ void LLVOAvatarSelf::processRebakeAvatarTextures(LLMessageSystem* msg, void**) { LLUUID texture_id; msg->getUUID("TextureData", "TextureID", texture_id); - - LLVOAvatarSelf* self = gAgent.getAvatarObject(); - if (!self) return; + if (!isAgentAvatarValid()) return; // If this is a texture corresponding to one of our baked entries, // just rebake that layer set. @@ -1943,13 +1969,13 @@ void LLVOAvatarSelf::processRebakeAvatarTextures(LLMessageSystem* msg, void**) const LLVOAvatarDictionary::TextureEntry *texture_dict = iter->second; if (texture_dict->mIsBakedTexture) { - if (texture_id == self->getTEImage(index)->getID()) + if (texture_id == gAgentAvatarp->getTEImage(index)->getID()) { - LLTexLayerSet* layer_set = self->getLayerSet(index); + LLTexLayerSet* layer_set = gAgentAvatarp->getLayerSet(index); if (layer_set) { llinfos << "TAT: rebake - matched entry " << (S32)index << llendl; - self->invalidateComposite(layer_set, TRUE); + gAgentAvatarp->invalidateComposite(layer_set, TRUE); found = TRUE; LLViewerStats::getInstance()->incStat(LLViewerStats::ST_TEX_REBAKES); } @@ -1960,12 +1986,12 @@ void LLVOAvatarSelf::processRebakeAvatarTextures(LLMessageSystem* msg, void**) // If texture not found, rebake all entries. if (!found) { - self->forceBakeAllTextures(); + gAgentAvatarp->forceBakeAllTextures(); } else { // Not sure if this is necessary, but forceBakeAllTextures() does it. - self->updateMeshTextures(); + gAgentAvatarp->updateMeshTextures(); } } @@ -2045,10 +2071,9 @@ void LLVOAvatarSelf::onCustomizeStart() // static void LLVOAvatarSelf::onCustomizeEnd() { - LLVOAvatarSelf *avatarp = gAgent.getAvatarObject(); - if (avatarp) + if (isAgentAvatarValid()) { - avatarp->invalidateAll(); + gAgentAvatarp->invalidateAll(); } } diff --git a/indra/newview/llvoavatarself.h b/indra/newview/llvoavatarself.h index 9514abc5bc..4960d4d103 100644 --- a/indra/newview/llvoavatarself.h +++ b/indra/newview/llvoavatarself.h @@ -55,7 +55,8 @@ public: LLVOAvatarSelf(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp); virtual ~LLVOAvatarSelf(); virtual void markDead(); - virtual void initInstance(); // Called after construction to initialize the class. + virtual void initInstance(); // Called after construction to initialize the class. + void cleanup(); protected: /*virtual*/ BOOL loadAvatar(); BOOL loadAvatarSelf(); @@ -77,6 +78,7 @@ protected: //-------------------------------------------------------------------- public: /*virtual*/ void updateRegion(LLViewerRegion *regionp); + /*virtual*/ BOOL idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time); //-------------------------------------------------------------------- // LLCharacter interface and related @@ -333,4 +335,8 @@ public: }; +extern LLVOAvatarSelf *gAgentAvatarp; + +BOOL isAgentAvatarValid(); + #endif // LL_VO_AVATARSELF_H diff --git a/indra/newview/llvograss.cpp b/indra/newview/llvograss.cpp index e311f07912..a82afbeb76 100644 --- a/indra/newview/llvograss.cpp +++ b/indra/newview/llvograss.cpp @@ -37,7 +37,7 @@ #include "imageids.h" #include "llviewercontrol.h" -#include "llagent.h" +#include "llagentcamera.h" #include "llnotificationsutil.h" #include "lldrawable.h" #include "llface.h" @@ -306,7 +306,7 @@ BOOL LLVOGrass::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time) void LLVOGrass::setPixelAreaAndAngle(LLAgent &agent) { // This should be the camera's center, as soon as we move to all region-local. - LLVector3 relative_position = getPositionAgent() - agent.getCameraPositionAgent(); + LLVector3 relative_position = getPositionAgent() - gAgentCamera.getCameraPositionAgent(); F32 range = relative_position.length(); F32 max_scale = getMaxScale(); diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp index 5ba13efca2..2238acd643 100644 --- a/indra/newview/llvoiceclient.cpp +++ b/indra/newview/llvoiceclient.cpp @@ -60,6 +60,7 @@ #include "llappviewer.h" // for gDisconnected, gDisableVoice #include "llmutelist.h" // to check for muted avatars #include "llagent.h" +#include "llvoavatarself.h" #include "llcachename.h" #include "llimview.h" // for LLIMMgr #include "llparcel.h" @@ -86,6 +87,12 @@ static bool sConnectingToAgni = false; F32 LLVoiceClient::OVERDRIVEN_POWER_LEVEL = 0.7f; +const F32 LLVoiceClient::VOLUME_MIN = 0.f; +const F32 LLVoiceClient::VOLUME_DEFAULT = 0.5f; +const F32 LLVoiceClient::VOLUME_MAX = 1.0f; + +const F32 VOLUME_SCALE_VIVOX = 0.01f; + const F32 SPEAKING_TIMEOUT = 1.f; const int VOICE_MAJOR_VERSION = 1; @@ -1111,24 +1118,28 @@ class LLSpeakerVolumeStorage : public LLSingleton<LLSpeakerVolumeStorage> public: /** - * Sets internal voluem level for specified user. + * Stores volume level for specified user. * - * @param[in] speaker_id - LLUUID of user to store volume level for - * @param[in] volume - external (vivox) volume level to be stored for user. + * @param[in] speaker_id - LLUUID of user to store volume level for. + * @param[in] volume - volume level to be stored for user. */ void storeSpeakerVolume(const LLUUID& speaker_id, F32 volume); /** - * Gets stored external (vivox) volume level for specified speaker and - * transforms it into internal (viewer) level. + * Gets stored volume level for specified speaker * - * If specified user is not found -1 will be returned. - * Internal level is calculated as: internal = 400 * external^2 - * Maps 0.0 to 1.0 to internal values 0-400 + * @param[in] speaker_id - LLUUID of user to retrieve volume level for. + * @param[out] volume - set to stored volume if found, otherwise unmodified. + * @return - true if a stored volume is found. + */ + bool getSpeakerVolume(const LLUUID& speaker_id, F32& volume); + + /** + * Removes stored volume level for specified user. * - * @param[in] speaker_id - LLUUID of user to get his volume level + * @param[in] speaker_id - LLUUID of user to remove. */ - S32 getSpeakerVolume(const LLUUID& speaker_id); + void removeSpeakerVolume(const LLUUID& speaker_id); private: friend class LLSingleton<LLSpeakerVolumeStorage>; @@ -1140,6 +1151,9 @@ private: void load(); void save(); + static F32 transformFromLegacyVolume(F32 volume_in); + static F32 transformToLegacyVolume(F32 volume_in); + typedef std::map<LLUUID, F32> speaker_data_map_t; speaker_data_map_t mSpeakersData; }; @@ -1158,23 +1172,85 @@ LLSpeakerVolumeStorage::~LLSpeakerVolumeStorage() void LLSpeakerVolumeStorage::storeSpeakerVolume(const LLUUID& speaker_id, F32 volume) { - mSpeakersData[speaker_id] = volume; + if ((volume >= LLVoiceClient::VOLUME_MIN) && (volume <= LLVoiceClient::VOLUME_MAX)) + { + mSpeakersData[speaker_id] = volume; + + // Enable this when debugging voice slider issues. It's way to spammy even for debug-level logging. + // LL_DEBUGS("Voice") << "Stored volume = " << volume << " for " << id << LL_ENDL; + } + else + { + LL_WARNS("Voice") << "Attempted to store out of range volume " << volume << " for " << speaker_id << LL_ENDL; + llassert(0); + } } -S32 LLSpeakerVolumeStorage::getSpeakerVolume(const LLUUID& speaker_id) +bool LLSpeakerVolumeStorage::getSpeakerVolume(const LLUUID& speaker_id, F32& volume) { - // Return value of -1 indicates no level is stored for this speaker - S32 ret_val = -1; speaker_data_map_t::const_iterator it = mSpeakersData.find(speaker_id); if (it != mSpeakersData.end()) { - F32 f_val = it->second; - // volume can amplify by as much as 4x! - S32 ivol = (S32)(400.f * f_val * f_val); - ret_val = llclamp(ivol, 0, 400); + volume = it->second; + + // Enable this when debugging voice slider issues. It's way to spammy even for debug-level logging. + // LL_DEBUGS("Voice") << "Retrieved stored volume = " << volume << " for " << id << LL_ENDL; + + return true; } - return ret_val; + + return false; +} + +void LLSpeakerVolumeStorage::removeSpeakerVolume(const LLUUID& speaker_id) +{ + mSpeakersData.erase(speaker_id); + + // Enable this when debugging voice slider issues. It's way to spammy even for debug-level logging. + // LL_DEBUGS("Voice") << "Removing stored volume for " << id << LL_ENDL; +} + +/* static */ F32 LLSpeakerVolumeStorage::transformFromLegacyVolume(F32 volume_in) +{ + // Convert to linear-logarithmic [0.0..1.0] with 0.5 = 0dB + // from legacy characteristic composed of two square-curves + // that intersect at volume_in = 0.5, volume_out = 0.56 + + F32 volume_out = 0.f; + volume_in = llclamp(volume_in, 0.f, 1.0f); + + if (volume_in <= 0.5f) + { + volume_out = volume_in * volume_in * 4.f * 0.56f; + } + else + { + volume_out = (1.f - 0.56f) * (4.f * volume_in * volume_in - 1.f) / 3.f + 0.56f; + } + + return volume_out; +} + +/* static */ F32 LLSpeakerVolumeStorage::transformToLegacyVolume(F32 volume_in) +{ + // Convert from linear-logarithmic [0.0..1.0] with 0.5 = 0dB + // to legacy characteristic composed of two square-curves + // that intersect at volume_in = 0.56, volume_out = 0.5 + + F32 volume_out = 0.f; + volume_in = llclamp(volume_in, 0.f, 1.0f); + + if (volume_in <= 0.56f) + { + volume_out = sqrt(volume_in / (4.f * 0.56f)); + } + else + { + volume_out = sqrt((3.f * (volume_in - 0.56f) / (1.f - 0.56f) + 1.f) / 4.f); + } + + return volume_out; } void LLSpeakerVolumeStorage::load() @@ -1182,6 +1258,8 @@ void LLSpeakerVolumeStorage::load() // load per-resident voice volume information std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, SETTINGS_FILE_NAME); + LL_INFOS("Voice") << "Loading stored speaker volumes from: " << filename << LL_ENDL; + LLSD settings_llsd; llifstream file; file.open(filename); @@ -1193,7 +1271,10 @@ void LLSpeakerVolumeStorage::load() for (LLSD::map_const_iterator iter = settings_llsd.beginMap(); iter != settings_llsd.endMap(); ++iter) { - mSpeakersData.insert(std::make_pair(LLUUID(iter->first), (F32)iter->second.asReal())); + // Maintain compatibility with 1.23 non-linear saved volume levels + F32 volume = transformFromLegacyVolume((F32)iter->second.asReal()); + + storeSpeakerVolume(LLUUID(iter->first), volume); } } @@ -1208,9 +1289,14 @@ void LLSpeakerVolumeStorage::save() std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, SETTINGS_FILE_NAME); LLSD settings_llsd; + LL_INFOS("Voice") << "Saving stored speaker volumes to: " << filename << LL_ENDL; + for(speaker_data_map_t::const_iterator iter = mSpeakersData.begin(); iter != mSpeakersData.end(); ++iter) { - settings_llsd[iter->first.asString()] = iter->second; + // Maintain compatibility with 1.23 non-linear saved volume levels + F32 volume = transformToLegacyVolume(iter->second); + + settings_llsd[iter->first.asString()] = volume; } llofstream file; @@ -2419,9 +2505,10 @@ void LLVoiceClient::stateMachine() enforceTether(); } - // Send an update if the ptt state has changed (which shouldn't be able to happen that often -- the user can only click so fast) - // or every 10hz, whichever is sooner. - if((mAudioSession && mAudioSession->mVolumeDirty) || mPTTDirty || mSpeakerVolumeDirty || mUpdateTimer.hasExpired()) + // Send an update only if the ptt or mute state has changed (which shouldn't be able to happen that often + // -- the user can only click so fast) or every 10hz, whichever is sooner. + // Sending for every volume update causes an excessive flood of messages whenever a volume slider is dragged. + if((mAudioSession && mAudioSession->mMuteDirty) || mPTTDirty || mUpdateTimer.hasExpired()) { mUpdateTimer.setTimerExpirySec(UPDATE_THROTTLE_SECONDS); sendPositionalUpdate(); @@ -3416,38 +3503,26 @@ void LLVoiceClient::sendPositionalUpdate(void) stream << "</Request>\n\n\n"; } - if(mAudioSession && mAudioSession->mVolumeDirty) + if(mAudioSession && (mAudioSession->mVolumeDirty || mAudioSession->mMuteDirty)) { participantMap::iterator iter = mAudioSession->mParticipantsByURI.begin(); mAudioSession->mVolumeDirty = false; + mAudioSession->mMuteDirty = false; for(; iter != mAudioSession->mParticipantsByURI.end(); iter++) { participantState *p = iter->second; - + if(p->mVolumeDirty) { // Can't set volume/mute for yourself if(!p->mIsSelf) { - int volume = 56; // nominal default value + // scale from the range 0.0-1.0 to vivox volume in the range 0-100 + S32 volume = llround(p->mVolume / VOLUME_SCALE_VIVOX); + bool mute = p->mOnMuteList; - - if(p->mUserVolume != -1) - { - // scale from user volume in the range 0-400 (with 100 as "normal") to vivox volume in the range 0-100 (with 56 as "normal") - if(p->mUserVolume < 100) - volume = (p->mUserVolume * 56) / 100; - else - volume = (((p->mUserVolume - 100) * (100 - 56)) / 300) + 56; - } - else if(p->mVolume != -1) - { - // Use the previously reported internal volume (comes in with a ParticipantUpdatedEvent) - volume = p->mVolume; - } - if(mute) { @@ -3455,10 +3530,16 @@ void LLVoiceClient::sendPositionalUpdate(void) // If we want the user to be muted, set their volume to 0 as well. // This isn't perfect, but it will at least reduce their volume to a minimum. volume = 0; + + // Mark the current volume level as set to prevent incoming events + // changing it to 0, so that we can return to it when unmuting. + p->mVolumeSet = true; } - + if(volume == 0) + { mute = true; + } LL_DEBUGS("Voice") << "Setting volume/mute for avatar " << p->mAvatarID << " to " << volume << (mute?"/true":"/false") << LL_ENDL; @@ -4598,9 +4679,14 @@ void LLVoiceClient::participantUpdatedEvent( { participant->mPower = 0.0f; } - participant->mVolume = volume; - + // Ignore incoming volume level if it has been explicitly set, or there + // is a volume or mute change pending. + if ( !participant->mVolumeSet && !participant->mVolumeDirty) + { + participant->mVolume = (F32)volume * VOLUME_SCALE_VIVOX; + } + // *HACK: mantipov: added while working on EXT-3544 /* Sometimes LLVoiceClient::participantUpdatedEvent callback is called BEFORE @@ -4984,7 +5070,7 @@ void LLVoiceClient::muteListChanged() // Check to see if this participant is on the mute list already if(p->updateMuteState()) - mAudioSession->mVolumeDirty = true; + mAudioSession->mMuteDirty = true; } } } @@ -5007,10 +5093,10 @@ LLVoiceClient::participantState::participantState(const std::string &uri) : mIsModeratorMuted(false), mLastSpokeTimestamp(0.f), mPower(0.f), - mVolume(-1), - mOnMuteList(false), - mUserVolume(-1), - mVolumeDirty(false), + mVolume(VOLUME_DEFAULT), + mOnMuteList(false), + mVolumeSet(false), + mVolumeDirty(false), mAvatarIDValid(false), mIsSelf(false) { @@ -5059,7 +5145,7 @@ LLVoiceClient::participantState *LLVoiceClient::sessionState::addParticipant(con result->mAvatarID = id; if(result->updateMuteState()) - mVolumeDirty = true; + mMuteDirty = true; } else { @@ -5071,8 +5157,7 @@ LLVoiceClient::participantState *LLVoiceClient::sessionState::addParticipant(con mParticipantsByUUID.insert(participantUUIDMap::value_type(&(result->mAvatarID), result)); - result->mUserVolume = LLSpeakerVolumeStorage::getInstance()->getSpeakerVolume(result->mAvatarID); - if (result->mUserVolume != -1) + if (LLSpeakerVolumeStorage::getInstance()->getSpeakerVolume(result->mAvatarID, result->mVolume)) { result->mVolumeDirty = true; mVolumeDirty = true; @@ -5863,12 +5948,10 @@ void LLVoiceClient::enforceTether(void) void LLVoiceClient::updatePosition(void) { - if(gVoiceClient) { - LLVOAvatar *agent = gAgent.getAvatarObject(); LLViewerRegion *region = gAgent.getRegion(); - if(region && agent) + if(region && isAgentAvatarValid()) { LLMatrix3 rot; LLVector3d pos; @@ -5886,9 +5969,9 @@ void LLVoiceClient::updatePosition(void) rot); // rotation matrix // Send the current avatar position to the voice code - rot = agent->getRootJoint()->getWorldRotation().getMatrix3(); + rot = gAgentAvatarp->getRootJoint()->getWorldRotation().getMatrix3(); - pos = agent->getPositionGlobal(); + pos = gAgentAvatarp->getPositionGlobal(); // TODO: Can we get the head offset from outside the LLVOAvatar? // pos += LLVector3d(mHeadOffset); pos += LLVector3d(0.f, 0.f, 1.f); @@ -6272,51 +6355,21 @@ BOOL LLVoiceClient::getOnMuteList(const LLUUID& id) return result; } -// External accessiors. Maps 0.0 to 1.0 to internal values 0-400 with .5 == 100 -// internal = 400 * external^2 +// External accessors. F32 LLVoiceClient::getUserVolume(const LLUUID& id) { - F32 result = 0.0f; + // Minimum volume will be returned for users with voice disabled + F32 result = VOLUME_MIN; participantState *participant = findParticipantByID(id); if(participant) { - S32 ires = 100; // nominal default volume - - if(participant->mIsSelf) - { - // Always make it look like the user's own volume is set at the default. - } - else if(participant->mUserVolume != -1) - { - // Use the internal volume - ires = participant->mUserVolume; - - // Enable this when debugging voice slider issues. It's way to spammy even for debug-level logging. -// LL_DEBUGS("Voice") << "mapping from mUserVolume " << ires << LL_ENDL; - } - else if(participant->mVolume != -1) - { - // Map backwards from vivox volume - - // Enable this when debugging voice slider issues. It's way to spammy even for debug-level logging. -// LL_DEBUGS("Voice") << "mapping from mVolume " << participant->mVolume << LL_ENDL; + result = participant->mVolume; - if(participant->mVolume < 56) - { - ires = (participant->mVolume * 100) / 56; - } - else - { - ires = (((participant->mVolume - 56) * 300) / (100 - 56)) + 100; - } - } - result = sqrtf(((F32)ires) / 400.f); + // Enable this when debugging voice slider issues. It's way to spammy even for debug-level logging. + // LL_DEBUGS("Voice") << "mVolume = " << result << " for " << id << LL_ENDL; } - // Enable this when debugging voice slider issues. It's way to spammy even for debug-level logging. -// LL_DEBUGS("Voice") << "returning " << result << LL_ENDL; - return result; } @@ -6325,16 +6378,23 @@ void LLVoiceClient::setUserVolume(const LLUUID& id, F32 volume) if(mAudioSession) { participantState *participant = findParticipantByID(id); - if (participant) + if (participant && !participant->mIsSelf) { - // store this volume setting for future sessions - LLSpeakerVolumeStorage::getInstance()->storeSpeakerVolume(id, volume); + if (!is_approx_equal(volume, VOLUME_DEFAULT)) + { + // Store this volume setting for future sessions if it has been + // changed from the default + LLSpeakerVolumeStorage::getInstance()->storeSpeakerVolume(id, volume); + } + else + { + // Remove stored volume setting if it is returned to the default + LLSpeakerVolumeStorage::getInstance()->removeSpeakerVolume(id); + } - // volume can amplify by as much as 4x! - S32 ivol = (S32)(400.f * volume * volume); - participant->mUserVolume = llclamp(ivol, 0, 400); - participant->mVolumeDirty = TRUE; - mAudioSession->mVolumeDirty = TRUE; + participant->mVolume = llclamp(volume, VOLUME_MIN, VOLUME_MAX); + participant->mVolumeDirty = true; + mAudioSession->mVolumeDirty = true; } } } @@ -6475,6 +6535,7 @@ LLVoiceClient::sessionState::sessionState() : mVoiceEnabled(false), mReconnect(false), mVolumeDirty(false), + mMuteDirty(false), mParticipantsChanged(false) { } diff --git a/indra/newview/llvoiceclient.h b/indra/newview/llvoiceclient.h index aaacab69e0..a29c386182 100644 --- a/indra/newview/llvoiceclient.h +++ b/indra/newview/llvoiceclient.h @@ -101,6 +101,10 @@ class LLVoiceClient: public LLSingleton<LLVoiceClient> static F32 OVERDRIVEN_POWER_LEVEL; + static const F32 VOLUME_MIN; + static const F32 VOLUME_DEFAULT; + static const F32 VOLUME_MAX; + void updateSettings(); // call after loading settings and whenever they change void getCaptureDevicesSendMessage(); @@ -269,7 +273,7 @@ static void updatePosition(void); public: participantState(const std::string &uri); - bool updateMuteState(); + bool updateMuteState(); // true if mute state has changed bool isAvatar(); std::string mURI; @@ -279,13 +283,13 @@ static void updatePosition(void); LLFrameTimer mSpeakingTimeout; F32 mLastSpokeTimestamp; F32 mPower; - int mVolume; + F32 mVolume; std::string mGroupID; - int mUserVolume; bool mPTT; bool mIsSpeaking; bool mIsModeratorMuted; bool mOnMuteList; // true if this avatar is on the user's mute list (and should be muted) + bool mVolumeSet; // true if incoming volume messages should not change the volume bool mVolumeDirty; // true if this participant needs a volume command sent (either mOnMuteList or mUserVolume has changed) bool mAvatarIDValid; bool mIsSelf; @@ -349,6 +353,7 @@ static void updatePosition(void); // Set to true when the mute state of someone in the participant list changes. // The code will have to walk the list to find the changed participant(s). bool mVolumeDirty; + bool mMuteDirty; bool mParticipantsChanged; participantMap mParticipantsByURI; diff --git a/indra/newview/llvopartgroup.cpp b/indra/newview/llvopartgroup.cpp index 139d2fbd88..3ba4ecad0c 100644 --- a/indra/newview/llvopartgroup.cpp +++ b/indra/newview/llvopartgroup.cpp @@ -40,7 +40,7 @@ #include "message.h" #include "v2math.h" -#include "llagent.h" +#include "llagentcamera.h" #include "lldrawable.h" #include "llface.h" #include "llsky.h" @@ -136,7 +136,7 @@ F32 LLVOPartGroup::getPartSize(S32 idx) LLVector3 LLVOPartGroup::getCameraPosition() const { - return gAgent.getCameraPositionAgent(); + return gAgentCamera.getCameraPositionAgent(); } static LLFastTimer::DeclareTimer FTM_UPDATE_PARTICLES("Update Particles"); diff --git a/indra/newview/llvosky.cpp b/indra/newview/llvosky.cpp index 0550ed770b..d73850cb49 100644 --- a/indra/newview/llvosky.cpp +++ b/indra/newview/llvosky.cpp @@ -41,6 +41,7 @@ #include "timing.h" #include "llagent.h" +#include "llagentcamera.h" #include "lldrawable.h" #include "llface.h" #include "llcubemap.h" @@ -357,7 +358,7 @@ LLVOSky::LLVOSky(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp) mFace[i] = NULL; } - mCameraPosAgent = gAgent.getCameraPositionAgent(); + mCameraPosAgent = gAgentCamera.getCameraPositionAgent(); mAtmHeight = ATM_HEIGHT; mEarthCenter = LLVector3(mCameraPosAgent.mV[0], mCameraPosAgent.mV[1], -EARTH_RADIUS); @@ -2034,7 +2035,7 @@ void LLVOSky::updateFog(const F32 distance) const F32 water_height = gAgent.getRegion() ? gAgent.getRegion()->getWaterHeight() : 0.f; // LLWorld::getInstance()->getWaterHeight(); - F32 camera_height = gAgent.getCameraPositionAgent().mV[2]; + F32 camera_height = gAgentCamera.getCameraPositionAgent().mV[2]; F32 near_clip_height = LLViewerCamera::getInstance()->getAtAxis().mV[VZ] * LLViewerCamera::getInstance()->getNear(); camera_height += near_clip_height; diff --git a/indra/newview/llvotree.cpp b/indra/newview/llvotree.cpp index 55e2c58a52..b89c0cd638 100644 --- a/indra/newview/llvotree.cpp +++ b/indra/newview/llvotree.cpp @@ -44,7 +44,7 @@ #include "material_codes.h" #include "object_flags.h" -#include "llagent.h" +#include "llagentcamera.h" #include "lldrawable.h" #include "llface.h" #include "llviewercamera.h" @@ -444,7 +444,7 @@ void LLVOTree::setPixelAreaAndAngle(LLAgent &agent) // Re-calculate mPixelArea accurately // This should be the camera's center, as soon as we move to all region-local. - LLVector3 relative_position = getPositionAgent() - agent.getCameraPositionAgent(); + LLVector3 relative_position = getPositionAgent() - gAgentCamera.getCameraPositionAgent(); F32 range = relative_position.length(); // ugh, square root F32 max_scale = mBillboardScale * getMaxScale(); diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 86d8204473..6b052b8e99 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -369,7 +369,7 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys, S32 res2 = unpackTEMessage(*dp); if (TEM_INVALID == res2) { - // Well, crap, there's something bogus in the data that we're unpacking. + // There's something bogus in the data that we're unpacking. dp->dumpBufferToLog(); llwarns << "Flushing cache files" << llendl; std::string mask; @@ -962,8 +962,11 @@ void LLVOVolume::updateSculptTexture() if (isSculpted()) { LLSculptParams *sculpt_params = (LLSculptParams *)getParameterEntry(LLNetworkData::PARAMS_SCULPT); - LLUUID id = sculpt_params->getSculptTexture(); - mSculptTexture = LLViewerTextureManager::getFetchedTexture(id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE); + LLUUID id = sculpt_params->getSculptTexture(); + if (id.notNull()) + { + mSculptTexture = LLViewerTextureManager::getFetchedTexture(id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE); + } } else { diff --git a/indra/newview/llwaterparammanager.cpp b/indra/newview/llwaterparammanager.cpp index 8be8f494da..436cd478b4 100644 --- a/indra/newview/llwaterparammanager.cpp +++ b/indra/newview/llwaterparammanager.cpp @@ -54,6 +54,7 @@ #include "llviewercontrol.h" #include "lldrawpoolwater.h" #include "llagent.h" +#include "llagentcamera.h" #include "llviewerregion.h" #include "llwlparammanager.h" @@ -434,7 +435,7 @@ F32 LLWaterParamManager::getFogDensity(void) // modify if we're underwater const F32 water_height = gAgent.getRegion() ? gAgent.getRegion()->getWaterHeight() : 0.f; - F32 camera_height = gAgent.getCameraPositionAgent().mV[2]; + F32 camera_height = gAgentCamera.getCameraPositionAgent().mV[2]; if(camera_height <= water_height) { // raise it to the underwater fog density modifier diff --git a/indra/newview/llwearable.cpp b/indra/newview/llwearable.cpp index 3334c17a8f..63f99273fe 100644 --- a/indra/newview/llwearable.cpp +++ b/indra/newview/llwearable.cpp @@ -62,13 +62,12 @@ class LLOverrideBakedTextureUpdate public: LLOverrideBakedTextureUpdate(bool temp_state) { - mAvatar = gAgent.getAvatarObject(); U32 num_bakes = (U32) LLVOAvatarDefines::BAKED_NUM_INDICES; for( U32 index = 0; index < num_bakes; ++index ) { - composite_enabled[index] = mAvatar->isCompositeUpdateEnabled(index); + composite_enabled[index] = gAgentAvatarp->isCompositeUpdateEnabled(index); } - mAvatar->setCompositeUpdatesEnabled(temp_state); + gAgentAvatarp->setCompositeUpdatesEnabled(temp_state); } ~LLOverrideBakedTextureUpdate() @@ -76,13 +75,11 @@ public: U32 num_bakes = (U32)LLVOAvatarDefines::BAKED_NUM_INDICES; for( U32 index = 0; index < num_bakes; ++index ) { - mAvatar->setCompositeUpdatesEnabled(index, composite_enabled[index]); - } + gAgentAvatarp->setCompositeUpdatesEnabled(index, composite_enabled[index]); + } } - private: bool composite_enabled[LLVOAvatarDefines::BAKED_NUM_INDICES]; - LLVOAvatarSelf *mAvatar; }; // Private local functions @@ -205,10 +202,9 @@ BOOL LLWearable::exportFile(LLFILE* file) const void LLWearable::createVisualParams() { - LLVOAvatar* avatar = gAgent.getAvatarObject(); - for (LLViewerVisualParam* param = (LLViewerVisualParam*) avatar->getFirstVisualParam(); + for (LLViewerVisualParam* param = (LLViewerVisualParam*) gAgentAvatarp->getFirstVisualParam(); param; - param = (LLViewerVisualParam*) avatar->getNextVisualParam()) + param = (LLViewerVisualParam*) gAgentAvatarp->getNextVisualParam()) { if (param->getWearableType() == mType) { @@ -228,7 +224,7 @@ void LLWearable::createVisualParams() param->resetDrivenParams(); if(!param->linkDrivenParams(boost::bind(wearable_function,(LLWearable*)this, _1), false)) { - if( !param->linkDrivenParams(boost::bind(avatar_function,(LLVOAvatarSelf*)avatar,_1 ), true)) + if( !param->linkDrivenParams(boost::bind(avatar_function,gAgentAvatarp,_1 ), true)) { llwarns << "could not link driven params for wearable " << getName() << " id: " << param->getID() << llendl; continue; @@ -464,12 +460,7 @@ BOOL LLWearable::importFile( LLFILE* file ) // since this wearable was created. BOOL LLWearable::isOldVersion() const { - LLVOAvatar* avatar = gAgent.getAvatarObject(); - llassert( avatar ); - if( !avatar ) - { - return FALSE; - } + if (!isAgentAvatarValid()) return FALSE; if( LLWearable::sCurrentDefinitionVersion < mDefinitionVersion ) { @@ -483,9 +474,9 @@ BOOL LLWearable::isOldVersion() const } S32 param_count = 0; - for( LLViewerVisualParam* param = (LLViewerVisualParam*) avatar->getFirstVisualParam(); + for( LLViewerVisualParam* param = (LLViewerVisualParam*) gAgentAvatarp->getFirstVisualParam(); param; - param = (LLViewerVisualParam*) avatar->getNextVisualParam() ) + param = (LLViewerVisualParam*) gAgentAvatarp->getNextVisualParam() ) { if( (param->getWearableType() == mType) && (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE ) ) { @@ -531,17 +522,11 @@ BOOL LLWearable::isOldVersion() const // only if those values are the same as the defaults. BOOL LLWearable::isDirty() const { - LLVOAvatar* avatar = gAgent.getAvatarObject(); - llassert( avatar ); - if( !avatar ) - { - return FALSE; - } - + if (!isAgentAvatarValid()) return FALSE; - for( LLViewerVisualParam* param = (LLViewerVisualParam*) avatar->getFirstVisualParam(); + for( LLViewerVisualParam* param = (LLViewerVisualParam*) gAgentAvatarp->getFirstVisualParam(); param; - param = (LLViewerVisualParam*) avatar->getNextVisualParam() ) + param = (LLViewerVisualParam*) gAgentAvatarp->getNextVisualParam() ) { if( (param->getWearableType() == mType) && (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE ) @@ -602,14 +587,9 @@ BOOL LLWearable::isDirty() const void LLWearable::setParamsToDefaults() { - LLVOAvatar* avatar = gAgent.getAvatarObject(); - llassert( avatar ); - if( !avatar ) - { - return; - } + if (!isAgentAvatarValid()) return; - for( LLVisualParam* param = avatar->getFirstVisualParam(); param; param = avatar->getNextVisualParam() ) + for( LLVisualParam* param = gAgentAvatarp->getFirstVisualParam(); param; param = gAgentAvatarp->getNextVisualParam() ) { if( (((LLViewerVisualParam*)param)->getWearableType() == mType ) && (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE ) ) { @@ -645,18 +625,12 @@ void LLWearable::setTexturesToDefaults() // Updates the user's avatar's appearance void LLWearable::writeToAvatar() { - LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); - llassert( avatar ); - if( !avatar ) - { - llerrs << "could not get avatar object to write to for wearable " << this->getName() << llendl; - return; - } + if (!isAgentAvatarValid()) return; - ESex old_sex = avatar->getSex(); + ESex old_sex = gAgentAvatarp->getSex(); // Pull params - for( LLVisualParam* param = avatar->getFirstVisualParam(); param; param = avatar->getNextVisualParam() ) + for( LLVisualParam* param = gAgentAvatarp->getFirstVisualParam(); param; param = gAgentAvatarp->getNextVisualParam() ) { // cross-wearable parameters are not authoritative, as they are driven by a different wearable. So don't copy the values to the // avatar object if cross wearable. Cross wearable params get their values from the avatar, they shouldn't write the other way. @@ -665,7 +639,7 @@ void LLWearable::writeToAvatar() S32 param_id = param->getID(); F32 weight = getVisualParamWeight(param_id); - avatar->setVisualParamWeight( param_id, weight, FALSE ); + gAgentAvatarp->setVisualParamWeight( param_id, weight, FALSE ); } } @@ -686,14 +660,14 @@ void LLWearable::writeToAvatar() } LLViewerTexture* image = LLViewerTextureManager::getFetchedTexture( image_id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE ); // MULTI-WEARABLE: replace hard-coded 0 - avatar->setLocalTextureTE(te, image, 0); + gAgentAvatarp->setLocalTextureTE(te, image, 0); } } - ESex new_sex = avatar->getSex(); + ESex new_sex = gAgentAvatarp->getSex(); if( old_sex != new_sex ) { - avatar->updateSexDependentLayerSets( FALSE ); + gAgentAvatarp->updateSexDependentLayerSets( FALSE ); } // if( upload_bake ) @@ -707,12 +681,7 @@ void LLWearable::writeToAvatar() // static void LLWearable::removeFromAvatar( EWearableType type, BOOL upload_bake ) { - LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); - llassert( avatar ); - if( !avatar ) - { - return; - } + if (!isAgentAvatarValid()) return; // You can't just remove body parts. if( (type == WT_SHAPE) || @@ -724,12 +693,12 @@ void LLWearable::removeFromAvatar( EWearableType type, BOOL upload_bake ) } // Pull params - for( LLVisualParam* param = avatar->getFirstVisualParam(); param; param = avatar->getNextVisualParam() ) + for( LLVisualParam* param = gAgentAvatarp->getFirstVisualParam(); param; param = gAgentAvatarp->getNextVisualParam() ) { if( (((LLViewerVisualParam*)param)->getWearableType() == type) && (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE ) ) { S32 param_id = param->getID(); - avatar->setVisualParamWeight( param_id, param->getDefaultWeight(), upload_bake ); + gAgentAvatarp->setVisualParamWeight( param_id, param->getDefaultWeight(), upload_bake ); } } @@ -738,8 +707,8 @@ void LLWearable::removeFromAvatar( EWearableType type, BOOL upload_bake ) gFloaterCustomize->setWearable(type, NULL, PERM_ALL, TRUE); } - avatar->updateVisualParams(); - avatar->wearableUpdated(type, TRUE); + gAgentAvatarp->updateVisualParams(); + gAgentAvatarp->wearableUpdated(type, TRUE); // if( upload_bake ) // { @@ -751,12 +720,7 @@ void LLWearable::removeFromAvatar( EWearableType type, BOOL upload_bake ) // Definition version is current: removes obsolete enties and creates default values for new ones. void LLWearable::copyDataFrom(const LLWearable* src) { - LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); - llassert( avatar ); - if( !avatar ) - { - return; - } + if (!isAgentAvatarValid()) return; mDefinitionVersion = LLWearable::sCurrentDefinitionVersion; @@ -769,9 +733,9 @@ void LLWearable::copyDataFrom(const LLWearable* src) mSavedVisualParamMap.clear(); // Deep copy of mVisualParamMap (copies only those params that are current, filling in defaults where needed) - for( LLViewerVisualParam* param = (LLViewerVisualParam*) avatar->getFirstVisualParam(); + for (LLViewerVisualParam* param = (LLViewerVisualParam*) gAgentAvatarp->getFirstVisualParam(); param; - param = (LLViewerVisualParam*) avatar->getNextVisualParam() ) + param = (LLViewerVisualParam*) gAgentAvatarp->getNextVisualParam() ) { if( (param->getWearableType() == mType) ) { @@ -783,7 +747,7 @@ void LLWearable::copyDataFrom(const LLWearable* src) destroyTextures(); // Deep copy of mTEMap (copies only those tes that are current, filling in defaults where needed) - for( S32 te = 0; te < TEX_NUM_INDICES; te++ ) + for (S32 te = 0; te < TEX_NUM_INDICES; te++) { if (LLVOAvatarDictionary::getTEWearableType((ETextureIndex) te) == mType) { @@ -876,14 +840,12 @@ void LLWearable::addVisualParam(LLVisualParam *param) void LLWearable::setVisualParams() { - LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); - for (visual_param_index_map_t::const_iterator iter = mVisualParamIndexMap.begin(); iter != mVisualParamIndexMap.end(); iter++) { S32 id = iter->first; LLVisualParam *wearable_param = iter->second; F32 value = wearable_param->getWeight(); - avatar->setVisualParamWeight(id, value, FALSE); + gAgentAvatarp->setVisualParamWeight(id, value, FALSE); } } @@ -1024,9 +986,8 @@ BOOL LLWearable::isOnTop() const void LLWearable::createLayers(S32 te) { - LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); - LLTexLayerSet *layer_set = avatar->getLayerSet((ETextureIndex)te); - if( layer_set ) + LLTexLayerSet *layer_set = gAgentAvatarp->getLayerSet((ETextureIndex)te); + if (layer_set) { layer_set->cloneTemplates(mTEMap[te], (ETextureIndex)te, this); } @@ -1123,10 +1084,9 @@ void LLWearable::destroyTextures() void LLWearable::pullCrossWearableValues() { // scan through all of the avatar's visual parameters - LLVOAvatar* avatar = gAgent.getAvatarObject(); - for (LLViewerVisualParam* param = (LLViewerVisualParam*) avatar->getFirstVisualParam(); + for (LLViewerVisualParam* param = (LLViewerVisualParam*) gAgentAvatarp->getFirstVisualParam(); param; - param = (LLViewerVisualParam*) avatar->getNextVisualParam()) + param = (LLViewerVisualParam*) gAgentAvatarp->getNextVisualParam()) { if( param ) { diff --git a/indra/newview/llwearablelist.h b/indra/newview/llwearablelist.h index cf1a9bddff..5e564ba953 100644 --- a/indra/newview/llwearablelist.h +++ b/indra/newview/llwearablelist.h @@ -39,6 +39,12 @@ #include "llassetstorage.h" // Globally constructed; be careful that there's no dependency with gAgent. +/* + BUG: mList's system of mapping between assetIDs and wearables is flawed + since LLWearable* has an associated itemID, and you can have multiple + inventory items pointing to the same asset (i.e. more than one ItemID + per assetID). EXT-6252 +*/ class LLWearableList : public LLSingleton<LLWearableList> { public: diff --git a/indra/newview/llweb.cpp b/indra/newview/llweb.cpp index 3385b75c65..1a64f9d881 100644 --- a/indra/newview/llweb.cpp +++ b/indra/newview/llweb.cpp @@ -103,8 +103,18 @@ void LLWeb::loadURLInternal(const std::string &url) // static void LLWeb::loadURLExternal(const std::string& url) { + loadURLExternal(url, true); +} + + +// static +void LLWeb::loadURLExternal(const std::string& url, bool async) +{ std::string escaped_url = escapeURL(url); - gViewerWindow->getWindow()->spawnWebBrowser(escaped_url); + if (gViewerWindow) + { + gViewerWindow->getWindow()->spawnWebBrowser(escaped_url, async); + } } diff --git a/indra/newview/llweb.h b/indra/newview/llweb.h index f4666c9280..1119b80bb4 100644 --- a/indra/newview/llweb.h +++ b/indra/newview/llweb.h @@ -54,8 +54,10 @@ public: static void loadURL(const char* url) { loadURL( ll_safe_string(url) ); } /// Load the given url in the Second Life internal web browser static void loadURLInternal(const std::string &url); - /// Load the given url in the operating system's web browser + /// Load the given url in the operating system's web browser, async if we want to return immediately + /// before browser has spawned static void loadURLExternal(const std::string& url); + static void loadURLExternal(const std::string& url, bool async); /// Returns escaped url (eg, " " to "%20") - used by all loadURL methods static std::string escapeURL(const std::string& url); diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp index d7e5b464a6..0b63f5efbd 100644 --- a/indra/newview/llworld.cpp +++ b/indra/newview/llworld.cpp @@ -45,6 +45,7 @@ #include "llhttpnode.h" #include "llregionhandle.h" #include "llsurface.h" +#include "lltrans.h" #include "llviewercamera.h" #include "llviewertexture.h" #include "llviewertexturelist.h" @@ -258,7 +259,7 @@ void LLWorld::removeRegion(const LLHost &host) llwarns << "gFrameTimeSeconds " << gFrameTimeSeconds << llendl; llwarns << "Disabling region " << regionp->getName() << " that agent is in!" << llendl; - LLAppViewer::instance()->forceDisconnect("You have been disconnected from the region you were in."); + LLAppViewer::instance()->forceDisconnect(LLTrans::getString("YouHaveBeenDisconnected")); return; } @@ -1208,7 +1209,7 @@ static LLVector3d unpackLocalToGlobalPosition(U32 compact_local, const LLVector3 return pos_global; } -void LLWorld::getAvatars(std::vector<LLUUID>* avatar_ids, std::vector<LLVector3d>* positions, const LLVector3d& relative_to, F32 radius) const +void LLWorld::getAvatars(uuid_vec_t* avatar_ids, std::vector<LLVector3d>* positions, const LLVector3d& relative_to, F32 radius) const { if(avatar_ids != NULL) { diff --git a/indra/newview/llworld.h b/indra/newview/llworld.h index 48025c700b..502f7b0320 100644 --- a/indra/newview/llworld.h +++ b/indra/newview/llworld.h @@ -158,7 +158,7 @@ public: // All arguments are optional. Given containers will be emptied and then filled. // Not supplying origin or radius input returns data on all avatars in the known regions. void getAvatars( - std::vector<LLUUID>* avatar_ids = NULL, + uuid_vec_t* avatar_ids = NULL, std::vector<LLVector3d>* positions = NULL, const LLVector3d& relative_to = LLVector3d(), F32 radius = FLT_MAX) const; diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp index 5edf72d4ae..7afe81b436 100644 --- a/indra/newview/llworldmapview.cpp +++ b/indra/newview/llworldmapview.cpp @@ -44,7 +44,9 @@ #include "lltooltip.h" #include "llagent.h" +#include "llagentcamera.h" #include "llcallingcard.h" +#include "llcommandhandler.h" #include "llviewercontrol.h" #include "llfloatermap.h" #include "llfloaterworldmap.h" @@ -310,7 +312,7 @@ void LLWorldMapView::draw() const S32 height = getRect().getHeight(); const F32 half_width = F32(width) / 2.0f; const F32 half_height = F32(height) / 2.0f; - LLVector3d camera_global = gAgent.getCameraPositionGlobal(); + LLVector3d camera_global = gAgentCamera.getCameraPositionGlobal(); S32 level = LLWorldMipmap::scaleToLevel(sMapScale); @@ -912,7 +914,7 @@ void LLWorldMapView::drawFrustum() LLVector3 LLWorldMapView::globalPosToView( const LLVector3d& global_pos ) { - LLVector3d relative_pos_global = global_pos - gAgent.getCameraPositionGlobal(); + LLVector3d relative_pos_global = global_pos - gAgentCamera.getCameraPositionGlobal(); LLVector3 pos_local; pos_local.setVec(relative_pos_global); // convert to floats from doubles @@ -1005,7 +1007,7 @@ LLVector3d LLWorldMapView::viewPosToGlobal( S32 x, S32 y ) LLVector3d pos_global; pos_global.setVec( pos_local ); - pos_global += gAgent.getCameraPositionGlobal(); + pos_global += gAgentCamera.getCameraPositionGlobal(); if(gAgent.isGodlike()) { pos_global.mdV[VZ] = GODLY_TELEPORT_HEIGHT; // Godly height should always be 200. @@ -1637,7 +1639,7 @@ void LLWorldMapView::updateVisibleBlocks() // Load the blocks visible in the current World Map view // Get the World Map view coordinates and boundaries - LLVector3d camera_global = gAgent.getCameraPositionGlobal(); + LLVector3d camera_global = gAgentCamera.getCameraPositionGlobal(); const S32 width = getRect().getWidth(); const S32 height = getRect().getHeight(); const F32 half_width = F32(width) / 2.0f; @@ -1726,7 +1728,10 @@ BOOL LLWorldMapView::handleDoubleClick( S32 x, S32 y, MASK mask ) id.toString(uuid_str); uuid_str = uuid_str.substr(28); sscanf(uuid_str.c_str(), "%X", &event_id); - LLFloaterReg::showInstance("search", LLSD().with("category", "events").with("id", event_id)); + // Invoke the event details floater if someone is clicking on an event. + LLSD params(LLSD::emptyArray()); + params.append(event_id); + LLCommandDispatcher::dispatch("event", params, LLSD(), NULL, true); break; } case MAP_ITEM_LAND_FOR_SALE: diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 259ca21e93..4ca251af3e 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -56,6 +56,7 @@ // newview includes #include "llagent.h" +#include "llagentcamera.h" #include "lldrawable.h" #include "lldrawpoolalpha.h" #include "lldrawpoolavatar.h" @@ -3855,15 +3856,14 @@ void LLPipeline::renderForSelect(std::set<LLViewerObject*>& objects, BOOL render } // pick HUD objects - LLVOAvatar* avatarp = gAgent.getAvatarObject(); - if (avatarp && sShowHUDAttachments) + if (isAgentAvatarValid() && sShowHUDAttachments) { glh::matrix4f save_proj(glh_get_current_projection()); glh::matrix4f save_model(glh_get_current_modelview()); setup_hud_matrices(screen_rect); - for (LLVOAvatar::attachment_map_t::iterator iter = avatarp->mAttachmentPoints.begin(); - iter != avatarp->mAttachmentPoints.end(); ) + for (LLVOAvatar::attachment_map_t::iterator iter = gAgentAvatarp->mAttachmentPoints.begin(); + iter != gAgentAvatarp->mAttachmentPoints.end(); ) { LLVOAvatar::attachment_map_t::iterator curiter = iter++; LLViewerJointAttachment* attachment = curiter->second; @@ -3963,9 +3963,9 @@ void LLPipeline::rebuildPools() max_count--; } - if (gAgent.getAvatarObject()) + if (isAgentAvatarValid()) { - gAgent.getAvatarObject()->rebuildHUD(); + gAgentAvatarp->rebuildHUD(); } } @@ -4361,7 +4361,7 @@ void LLPipeline::calcNearbyLights(LLCamera& camera) // mNearbyLight (and all light_set_t's) are sorted such that // begin() == the closest light and rbegin() == the farthest light const S32 MAX_LOCAL_LIGHTS = 6; -// LLVector3 cam_pos = gAgent.getCameraPositionAgent(); +// LLVector3 cam_pos = gAgentCamera.getCameraPositionAgent(); LLVector3 cam_pos = LLViewerJoystick::getInstance()->getOverrideCamera() ? camera.getOrigin() : gAgent.getPositionAgent(); @@ -4597,8 +4597,8 @@ void LLPipeline::setupHWLights(LLDrawPool* pool) glLightfv(gllight, GL_SPECULAR, LLColor4::black.mV); } - if (gAgent.getAvatarObject() && - gAgent.getAvatarObject()->mSpecialRenderMode == 3) + if (isAgentAvatarValid() && + gAgentAvatarp->mSpecialRenderMode == 3) { LLColor4 light_color = LLColor4::white; light_color.mV[3] = 0.0f; @@ -4707,15 +4707,13 @@ void LLPipeline::enableLightsDynamic() glColor4f(0.f, 0.f, 0.f, 1.f); // no local lighting by default } - LLVOAvatar* avatarp = gAgent.getAvatarObject(); - - if (avatarp && getLightingDetail() <= 0) + if (isAgentAvatarValid() && getLightingDetail() <= 0) { - if (avatarp->mSpecialRenderMode == 0) // normal + if (gAgentAvatarp->mSpecialRenderMode == 0) // normal { gPipeline.enableLightsAvatar(); } - else if (avatarp->mSpecialRenderMode >= 1) // anim preview + else if (gAgentAvatarp->mSpecialRenderMode >= 1) // anim preview { gPipeline.enableLightsAvatarEdit(LLColor4(0.7f, 0.6f, 0.3f, 1.f)); } @@ -7100,15 +7098,15 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in) { if (LLPipeline::sWaterReflections && assertInitialized() && LLDrawPoolWater::sNeedsReflectionUpdate) { - LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); - if (gAgent.getCameraAnimating() || gAgent.getCameraMode() != CAMERA_MODE_MOUSELOOK) + BOOL skip_avatar_update = FALSE; + if (gAgentCamera.getCameraAnimating() || gAgentCamera.getCameraMode() != CAMERA_MODE_MOUSELOOK) { - avatar = NULL; + skip_avatar_update = TRUE; } - if (avatar) + if (!skip_avatar_update) { - avatar->updateAttachmentVisibility(CAMERA_MODE_THIRD_PERSON); + gAgentAvatarp->updateAttachmentVisibility(CAMERA_MODE_THIRD_PERSON); } LLVertexBuffer::unbind(); @@ -7332,9 +7330,9 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in) LLGLState::checkTextureChannels(); LLGLState::checkClientArrays(); - if (avatar) + if (!skip_avatar_update) { - avatar->updateAttachmentVisibility(gAgent.getCameraMode()); + gAgentAvatarp->updateAttachmentVisibility(gAgentCamera.getCameraMode()); } } } diff --git a/indra/newview/res-sdl/ll_icon.BMP b/indra/newview/res-sdl/ll_icon.BMP Binary files differindex 4a44aafbfa..6f9366df41 100644 --- a/indra/newview/res-sdl/ll_icon.BMP +++ b/indra/newview/res-sdl/ll_icon.BMP diff --git a/indra/newview/res-sdl/toolbuy.BMP b/indra/newview/res-sdl/toolbuy.BMP Binary files differnew file mode 100644 index 0000000000..07e9273721 --- /dev/null +++ b/indra/newview/res-sdl/toolbuy.BMP diff --git a/indra/newview/res-sdl/toolopen.BMP b/indra/newview/res-sdl/toolopen.BMP Binary files differnew file mode 100644 index 0000000000..5b87979304 --- /dev/null +++ b/indra/newview/res-sdl/toolopen.BMP diff --git a/indra/newview/res-sdl/toolsit.BMP b/indra/newview/res-sdl/toolsit.BMP Binary files differnew file mode 100644 index 0000000000..8ce59ae97a --- /dev/null +++ b/indra/newview/res-sdl/toolsit.BMP diff --git a/indra/newview/res/ll_icon.png b/indra/newview/res/ll_icon.png Binary files differindex 414b703111..ae573b3874 100644 --- a/indra/newview/res/ll_icon.png +++ b/indra/newview/res/ll_icon.png diff --git a/indra/newview/res/toolbuy.cur b/indra/newview/res/toolbuy.cur Binary files differnew file mode 100644 index 0000000000..7fd552a78e --- /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..1562f5bc95 --- /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..a1f99cfe6d --- /dev/null +++ b/indra/newview/res/toolsit.cur diff --git a/indra/newview/res/viewerRes.rc b/indra/newview/res/viewerRes.rc index 38291e45c9..ecdcacec46 100644 --- a/indra/newview/res/viewerRes.rc +++ b/indra/newview/res/viewerRes.rc @@ -2,19 +2,12 @@ // #include "resource.h" -#ifdef IDC_STATIC -#undef IDC_STATIC -#endif -#define IDC_STATIC (-1) -#include "winresrc.h" - #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 2 resource. // -// Commented out because it only compiles if you have MFC installed. -//#include "winres.h" +#include "winres.h" ///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS @@ -34,18 +27,18 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US // TEXTINCLUDE // -1 TEXTINCLUDE +1 TEXTINCLUDE BEGIN "resource.h\0" END -2 TEXTINCLUDE +2 TEXTINCLUDE BEGIN "#include ""winres.h""\r\n" "\0" END -3 TEXTINCLUDE +3 TEXTINCLUDE BEGIN "\r\n" "\0" @@ -84,9 +77,8 @@ END // #ifdef APSTUDIO_INVOKED -GUIDELINES DESIGNINFO +GUIDELINES DESIGNINFO BEGIN - "SPLASHSCREEN", DIALOG BEGIN LEFTMARGIN, 7 @@ -127,6 +119,9 @@ TOOLPIPETTE CURSOR "toolpipette.cur" TOOLPLAY CURSOR "toolplay.cur" TOOLPAUSE CURSOR "toolpause.cur" TOOLMEDIAOPEN CURSOR "toolmediaopen.cur" +TOOLOPEN CURSOR "toolopen.cur" +TOOLSIT CURSOR "toolsit.cur" +TOOLBUY CURSOR "toolbuy.cur" ///////////////////////////////////////////////////////////////////////////// // @@ -134,8 +129,8 @@ TOOLMEDIAOPEN CURSOR "toolmediaopen.cur" // VS_VERSION_INFO VERSIONINFO - FILEVERSION 2,0,0,200030 - PRODUCTVERSION 2,0,0,200030 + FILEVERSION 2,0,0,203110 + PRODUCTVERSION 2,0,0,203110 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -152,12 +147,12 @@ BEGIN BEGIN VALUE "CompanyName", "Linden Lab" VALUE "FileDescription", "Second Life" - VALUE "FileVersion", "2.0.0.200030" + VALUE "FileVersion", "2.0.0.203110" VALUE "InternalName", "Second Life" VALUE "LegalCopyright", "Copyright 2001-2008, Linden Research, Inc." VALUE "OriginalFilename", "SecondLife.exe" VALUE "ProductName", "Second Life" - VALUE "ProductVersion", "2.0.0.200030" + VALUE "ProductVersion", "2.0.0.203110" END END BLOCK "VarFileInfo" @@ -166,12 +161,6 @@ BEGIN END END - -///////////////////////////////////////////////////////////////////////////// -// -// Bitmap -// - #endif // English (U.S.) resources ///////////////////////////////////////////////////////////////////////////// diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml index d45d6155dd..fcf5cfadb2 100644 --- a/indra/newview/skins/default/colors.xml +++ b/indra/newview/skins/default/colors.xml @@ -392,7 +392,7 @@ reference="Yellow" /> <color name="HighlightInspectColor" - value="1 0.5 0 1" /> + value="1 0 1 1" /> <color name="HighlightParentColor" value="0.67 0.83 0.96 1" /> diff --git a/indra/newview/skins/default/textures/arrow_down.tga b/indra/newview/skins/default/textures/arrow_down.tga Binary files differdeleted file mode 100644 index 81dc9d3b6c..0000000000 --- a/indra/newview/skins/default/textures/arrow_down.tga +++ /dev/null diff --git a/indra/newview/skins/default/textures/icons/Inv_Object_Multi.png b/indra/newview/skins/default/textures/icons/Inv_Object_Multi.png Binary files differnew file mode 100644 index 0000000000..11f4871ad8 --- /dev/null +++ b/indra/newview/skins/default/textures/icons/Inv_Object_Multi.png diff --git a/indra/newview/skins/default/textures/icons/SL_Logo.png b/indra/newview/skins/default/textures/icons/SL_Logo.png Binary files differindex c9fbde987a..8342d7cfee 100644 --- a/indra/newview/skins/default/textures/icons/SL_Logo.png +++ b/indra/newview/skins/default/textures/icons/SL_Logo.png diff --git a/indra/newview/skins/default/textures/locked_image.j2c b/indra/newview/skins/default/textures/locked_image.j2c Binary files differdeleted file mode 100644 index 9e8998d675..0000000000 --- a/indra/newview/skins/default/textures/locked_image.j2c +++ /dev/null diff --git a/indra/newview/skins/default/textures/map_infohub.tga b/indra/newview/skins/default/textures/map_infohub.tga Binary files differdeleted file mode 100644 index 545b8e532c..0000000000 --- a/indra/newview/skins/default/textures/map_infohub.tga +++ /dev/null diff --git a/indra/newview/skins/default/textures/navbar/BuyArrow_Over.png b/indra/newview/skins/default/textures/navbar/BuyArrow_Over.png Binary files differindex 95913dd55b..0b3f252ccf 100644 --- a/indra/newview/skins/default/textures/navbar/BuyArrow_Over.png +++ b/indra/newview/skins/default/textures/navbar/BuyArrow_Over.png diff --git a/indra/newview/skins/default/textures/navbar/BuyArrow_Press.png b/indra/newview/skins/default/textures/navbar/BuyArrow_Press.png Binary files differindex a02675502a..5c4c150bed 100644 --- a/indra/newview/skins/default/textures/navbar/BuyArrow_Press.png +++ b/indra/newview/skins/default/textures/navbar/BuyArrow_Press.png diff --git a/indra/newview/skins/default/textures/taskpanel/TabIcon_Home_Off.png b/indra/newview/skins/default/textures/taskpanel/TabIcon_Home_Off.png Binary files differindex 1e7d7beafa..421f5e1705 100644 --- a/indra/newview/skins/default/textures/taskpanel/TabIcon_Home_Off.png +++ b/indra/newview/skins/default/textures/taskpanel/TabIcon_Home_Off.png diff --git a/indra/newview/skins/default/textures/taskpanel/TabIcon_Home_Selected.png b/indra/newview/skins/default/textures/taskpanel/TabIcon_Home_Selected.png Binary files differindex a70d3abbbf..293aeef5e6 100644 --- a/indra/newview/skins/default/textures/taskpanel/TabIcon_Home_Selected.png +++ b/indra/newview/skins/default/textures/taskpanel/TabIcon_Home_Selected.png diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index b1594816b2..fed326c25e 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -247,6 +247,7 @@ with the same filename but different name <texture name="Inv_Landmark" file_name="icons/Inv_Landmark.png" preload="false" /> <texture name="Inv_Notecard" file_name="icons/Inv_Notecard.png" preload="false" /> <texture name="Inv_Object" file_name="icons/Inv_Object.png" preload="false" /> + <texture name="Inv_Object_Multi" file_name="icons/Inv_Object_Multi.png" preload="false" /> <texture name="Inv_Pants" file_name="icons/Inv_Pants.png" preload="false" /> <texture name="Inv_Script" file_name="icons/Inv_Script.png" preload="false" /> <texture name="Inv_Shirt" file_name="icons/Inv_Shirt.png" preload="false" /> @@ -615,12 +616,15 @@ with the same filename but different name <texture name="Toolbar_Divider" file_name="containers/Toolbar_Divider.png" preload="false" /> <texture name="Toolbar_Left_Off" file_name="containers/Toolbar_Left_Off.png" preload="false" scale.left="5" scale.bottom="4" scale.top="24" scale.right="30" /> + <texture name="Toolbar_Left_Over" file_name="containers/Toolbar_Left_Over.png" preload="false" scale.left="5" scale.bottom="4" scale.top="24" scale.right="30" /> <texture name="Toolbar_Left_Press" file_name="containers/Toolbar_Left_Press.png" preload="false" scale.left="5" scale.bottom="4" scale.top="24" scale.right="30" /> <texture name="Toolbar_Left_Selected" file_name="containers/Toolbar_Left_Selected.png" preload="false" scale.left="5" scale.bottom="4" scale.top="24" scale.right="30" /> <texture name="Toolbar_Middle_Off" file_name="containers/Toolbar_Middle_Off.png" preload="false" scale.left="1" scale.bottom="2" scale.top="24" scale.right="30" /> + <texture name="Toolbar_Middle_Over" file_name="containers/Toolbar_Middle_Over.png" preload="false" scale.left="1" scale.bottom="2" scale.top="24" scale.right="30" /> <texture name="Toolbar_Middle_Press" file_name="containers/Toolbar_Middle_Press.png" preload="false" scale.left="1" scale.bottom="2" scale.top="24" scale.right="30" /> <texture name="Toolbar_Middle_Selected" file_name="containers/Toolbar_Middle_Selected.png" preload="false" scale.left="1" scale.bottom="2" scale.top="24" scale.right="30" /> <texture name="Toolbar_Right_Off" file_name="containers/Toolbar_Right_Off.png" preload="false" scale.left="1" scale.bottom="4" scale.top="24" scale.right="26" /> + <texture name="Toolbar_Right_Over" file_name="containers/Toolbar_Right_Over.png" preload="false" scale.left="1" scale.bottom="4" scale.top="24" scale.right="26" /> <texture name="Toolbar_Right_Press" file_name="containers/Toolbar_Right_Press.png" preload="false" scale.left="1" scale.bottom="4" scale.top="24" scale.right="26" /> <texture name="Toolbar_Right_Selected" file_name="containers/Toolbar_Right_Selected.png" preload="false" scale.left="1" scale.bottom="4" scale.top="24" scale.right="26" /> diff --git a/indra/newview/skins/default/xui/da/floater_about_land.xml b/indra/newview/skins/default/xui/da/floater_about_land.xml index 9bda1397bc..fd1fe4aa19 100644 --- a/indra/newview/skins/default/xui/da/floater_about_land.xml +++ b/indra/newview/skins/default/xui/da/floater_about_land.xml @@ -1,5 +1,14 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floaterland" title="OM LAND"> + <floater.string name="maturity_icon_general"> + "Parcel_PG_Dark" + </floater.string> + <floater.string name="maturity_icon_moderate"> + "Parcel_M_Dark" + </floater.string> + <floater.string name="maturity_icon_adult"> + "Parcel_R_Dark" + </floater.string> <floater.string name="Minutes"> [MINUTES] minutter </floater.string> @@ -15,7 +24,7 @@ <tab_container name="landtab"> <panel label="GENERELT" name="land_general_panel"> <panel.string name="new users only"> - Kun nye brugere + Kun nye beboere </panel.string> <panel.string name="anyone"> Alle @@ -84,9 +93,9 @@ Gå til 'Verden' > 'Om land' eller vælg en anden parcel <text name="GroupText"> Leyla Linden </text> - <button label="Vælg..." label_selected="Vælg..." name="Set..."/> + <button label="Vælg" name="Set..."/> <check_box label="Tillad dedikering til gruppe" name="check deed" tool_tip="En gruppe administrator kan dedikere denne jord til gruppen, så det vil blive støttet af gruppen's jord tildeling."/> - <button label="Dedikér..." label_selected="Dedikér..." name="Deed..." tool_tip="Du kan kun dedikere jord, hvis du er en administrator i den valgte gruppe."/> + <button label="Dedikér" name="Deed..." tool_tip="Du kan kun dedikere jord, hvis du er en administrator i den valgte gruppe."/> <check_box label="Ejer bidrager ved dedikering" name="check contrib" tool_tip="Når land dedikeres til gruppe, kan den tidligere bidrage med nok land til at dække krav."/> <text name="For Sale:"> Til salg: @@ -97,7 +106,7 @@ Gå til 'Verden' > 'Om land' eller vælg en anden parcel <text name="For Sale: Price L$[PRICE]."> Pris: L$[PRICE] (L$[PRICE_PER_SQM]/m²). </text> - <button label="Sælg land..." label_selected="Sælg land..." name="Sell Land..."/> + <button label="Sælg land" name="Sell Land..."/> <text name="For sale to"> Til salg til: [BUYER] </text> @@ -126,13 +135,13 @@ Gå til 'Verden' > 'Om land' eller vælg en anden parcel <text name="DwellText"> 0 </text> - <button label="Køb land..." label_selected="Køb land..." name="Buy Land..."/> + <button label="Køb land" name="Buy Land..."/> <button label="Script Info" name="Scripts..."/> - <button label="Køb til gruppe..." label_selected="Køb til gruppe..." name="Buy For Group..."/> - <button label="Køb adgang..." label_selected="Køb adgang..." name="Buy Pass..." tool_tip="Giver adgang til midlertidig adgang til dette område."/> - <button label="Efterlad land..." label_selected="Efterlad land..." name="Abandon Land..."/> - <button label="Kræv tilbage..." label_selected="Kræv tilbage..." name="Reclaim Land..."/> - <button label="Linden salg..." label_selected="Linden salg..." name="Linden Sale..." tool_tip="Land skal være ejet, indholdsrating sat og ikke allerede på auktion."/> + <button label="Køb til gruppe" name="Buy For Group..."/> + <button label="Køb adgang" name="Buy Pass..." tool_tip="Giver adgang til midlertidig adgang til dette område."/> + <button label="Efterlad land" name="Abandon Land..."/> + <button label="Kræv tilbage" name="Reclaim Land..."/> + <button label="Linden salg" name="Linden Sale..." tool_tip="Land skal være ejet, indholdsrating sat og ikke allerede på auktion."/> </panel> <panel label="REGLER" name="land_covenant_panel"> <panel.string name="can_resell"> @@ -231,7 +240,7 @@ Gå til 'Verden' > 'Om land' eller vælg en anden parcel [COUNT] </text> <button label="Vis" label_selected="Vis" name="ShowOwner"/> - <button label="Returnér..." label_selected="Returnér..." name="ReturnOwner..." tool_tip="Returnér objekter til deres ejere."/> + <button label="Returnér" name="ReturnOwner..." tool_tip="Returnér objekter til deres ejere."/> <text name="Set to group:"> Sat til gruppe: </text> @@ -239,7 +248,7 @@ Gå til 'Verden' > 'Om land' eller vælg en anden parcel [COUNT] </text> <button label="Vis" label_selected="Vis" name="ShowGroup"/> - <button label="Returnér..." label_selected="Returnér..." name="ReturnGroup..." tool_tip="Returnér objekter til deres ejere."/> + <button label="Returnér" name="ReturnGroup..." tool_tip="Returnér objekter til deres ejere."/> <text name="Owned by others:"> Ejet af andre: </text> @@ -247,7 +256,7 @@ Gå til 'Verden' > 'Om land' eller vælg en anden parcel [COUNT] </text> <button label="Vis" label_selected="Vis" name="ShowOther"/> - <button label="Returnér..." label_selected="Returnér..." name="ReturnOther..." tool_tip="Returnér objekter til deres ejere."/> + <button label="Returnér" name="ReturnOther..." tool_tip="Returnér objekter til deres ejere."/> <text name="Selected / sat upon:"> Valgt/siddet på: </text> @@ -261,7 +270,7 @@ Gå til 'Verden' > 'Om land' eller vælg en anden parcel Objekt ejere: </text> <button label="Gentegn liste" label_selected="Gentegn liste" name="Refresh List" tool_tip="Refresh Object List"/> - <button label="Returnér objekter..." label_selected="Returnér objekter..." name="Return objects..."/> + <button label="Returnér objekter" name="Return objects..."/> <name_list name="owner list"> <name_list.columns label="Type" name="type"/> <name_list.columns label="Navn" name="name"/> @@ -383,7 +392,7 @@ Kun større parceller kan vises i søgning. <text left="4" name="at URL:"> Hjemmeside: </text> - <button label="Vælg..." label_selected="Vælg..." name="set_media_url"/> + <button label="Vælg" name="set_media_url"/> <check_box label="Skjul medie URL" name="hide_media_url" tool_tip="Klik her for at skjule medie adressen så det kun er dig og evt. parcel gruppens ejer/administratorer der kan se den."/> <text left="4" name="Description:"> Beskrivelse: @@ -421,6 +430,9 @@ Kun større parceller kan vises i søgning. <panel.string name="access_estate_defined"> (Defineret via estate) </panel.string> + <panel.string name="allow_public_access"> + Tillad adgang for alle ([MATURITY]) + </panel.string> <panel.string name="estate_override"> En eller flere af disse valg er indstillet på estate niveau </panel.string> diff --git a/indra/newview/skins/default/xui/da/floater_build_options.xml b/indra/newview/skins/default/xui/da/floater_build_options.xml index 9196f19b78..d3c3ac1899 100644 --- a/indra/newview/skins/default/xui/da/floater_build_options.xml +++ b/indra/newview/skins/default/xui/da/floater_build_options.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="build options floater" title="GITTER VALG"> - <spinner label="Gitter enheder (meter)" label_width="136" name="GridResolution" width="200"/> - <spinner label="Gitter rækkevidde (meter)" label_width="136" name="GridDrawSize" width="200"/> + <spinner label="Enheder (meter)" label_width="136" name="GridResolution" width="200"/> + <spinner label="Rækkevidde (meter)" label_width="136" name="GridDrawSize" width="200"/> <check_box label="Aktivér låsning til underenheder" name="GridSubUnit"/> <check_box label="Vis 'cross-sections'" name="GridCrossSection"/> <text name="grid_opacity_label" tool_tip="Gitter synlighed"> diff --git a/indra/newview/skins/default/xui/da/floater_buy_currency.xml b/indra/newview/skins/default/xui/da/floater_buy_currency.xml index 49c2264956..ec6ac5b2a8 100644 --- a/indra/newview/skins/default/xui/da/floater_buy_currency.xml +++ b/indra/newview/skins/default/xui/da/floater_buy_currency.xml @@ -37,7 +37,7 @@ Estimerer... </text> <text name="buy_action"> - [NAME] L$ [PRICE] + [ACTION] </text> <text name="total_label"> Min nye beholdning vil være diff --git a/indra/newview/skins/default/xui/da/floater_buy_land.xml b/indra/newview/skins/default/xui/da/floater_buy_land.xml index 57bcc7ad9d..970491b41f 100644 --- a/indra/newview/skins/default/xui/da/floater_buy_land.xml +++ b/indra/newview/skins/default/xui/da/floater_buy_land.xml @@ -41,7 +41,7 @@ Prøv at vælge et mindre område. Det valgte område har ingen offentlige arealer. </floater.string> <floater.string name="not_owned_by_you"> - Jord, der ejes af en anden bruger er valgt. + Land ejet af en anden beboer valgt. Prøv at vælge et mindre område. </floater.string> <floater.string name="processing"> diff --git a/indra/newview/skins/default/xui/da/floater_camera.xml b/indra/newview/skins/default/xui/da/floater_camera.xml index 2596559609..37e3307960 100644 --- a/indra/newview/skins/default/xui/da/floater_camera.xml +++ b/indra/newview/skins/default/xui/da/floater_camera.xml @@ -9,6 +9,18 @@ <floater.string name="move_tooltip"> Flyt kamera op og ned, til venstre og højre </floater.string> + <floater.string name="orbit_mode_title"> + Kredsløb + </floater.string> + <floater.string name="pan_mode_title"> + Panorér + </floater.string> + <floater.string name="avatar_view_mode_title"> + Forvalg + </floater.string> + <floater.string name="free_mode_title"> + Se objekt + </floater.string> <panel name="controls"> <joystick_track name="cam_track_stick" tool_tip="Flyt kamera op og ned, til venstre og højre"/> <panel name="zoom" tool_tip="Zoom kamera mod fokus"> @@ -25,7 +37,7 @@ <panel name="buttons"> <button label="" name="orbit_btn" tool_tip="Rotér kamera"/> <button label="" name="pan_btn" tool_tip="Panorér kamera"/> - <button label="" name="avatarview_btn" tool_tip="Se som avatar"/> + <button label="" name="avatarview_btn" tool_tip="Forvalg"/> <button label="" name="freecamera_btn" tool_tip="Se objekt"/> </panel> </floater> diff --git a/indra/newview/skins/default/xui/da/floater_event.xml b/indra/newview/skins/default/xui/da/floater_event.xml index 267a36b26c..1816144b45 100644 --- a/indra/newview/skins/default/xui/da/floater_event.xml +++ b/indra/newview/skins/default/xui/da/floater_event.xml @@ -9,6 +9,18 @@ <floater.string name="dont_notify"> Meddel ikke </floater.string> + <floater.string name="moderate"> + Moderat + </floater.string> + <floater.string name="adult"> + Voksent + </floater.string> + <floater.string name="general"> + Generelt + </floater.string> + <floater.string name="unknown"> + Ukendt + </floater.string> <layout_stack name="layout"> <layout_panel name="profile_stack"> <text name="event_name"> @@ -21,12 +33,21 @@ Afholdt af: </text> <text initial_value="(henter)" name="event_runby"/> + <text name="event_date_label"> + Dato: + </text> <text name="event_date"> 10/10/2010 </text> + <text name="event_duration_label"> + Varighed: + </text> <text name="event_duration"> 1 time </text> + <text name="event_covercharge_label"> + Pris: + </text> <text name="event_cover"> Gratis </text> @@ -36,6 +57,9 @@ <text name="event_location" value="SampleParcel, Name Long (145, 228, 26)"/> <text name="rating_label" value="Rating:"/> <text name="rating_value" value="ukendt"/> + <expandable_text name="event_desc"> + Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + </expandable_text> </layout_panel> <layout_panel name="button_panel"> <button name="create_event_btn" tool_tip="Opret event"/> diff --git a/indra/newview/skins/default/xui/da/floater_god_tools.xml b/indra/newview/skins/default/xui/da/floater_god_tools.xml index ea045538c5..6b7f9ef209 100644 --- a/indra/newview/skins/default/xui/da/floater_god_tools.xml +++ b/indra/newview/skins/default/xui/da/floater_god_tools.xml @@ -1,6 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="godtools floater" title="GOD TOOLS"> <tab_container name="GodTools Tabs"> + <panel label="Grid" name="grid"> + <button label="Spark alle beboere" label_selected="Spark alle beboere" name="Kick all users"/> + </panel> <panel label="Region" name="region"> <check_box label="Reset Home On Teleport" name="check reset home" tool_tip="Når beboere teleporterer væk, så sæt deres hjemmeadresse til deres destinations position."/> </panel> diff --git a/indra/newview/skins/default/xui/da/floater_im.xml b/indra/newview/skins/default/xui/da/floater_im.xml index 2ef8a7ce36..776bc9ab13 100644 --- a/indra/newview/skins/default/xui/da/floater_im.xml +++ b/indra/newview/skins/default/xui/da/floater_im.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <multi_floater name="im_floater" title="Personlig samtale (IM)"> <string name="only_user_message"> - Du er den eneste deltager i denne samtale + Du er den eneste beboer i denne session. </string> <string name="offline_message"> [FIRST] [LAST] er ikke logget på. @@ -31,7 +31,7 @@ Du er blevet "blokeret". </string> <string name="add_session_event"> - Ikke muligt at tilføge brugere til samtale med [RECIPIENT]. + Kunne ikke tilføje beboere til chat session med [RECIPIENT]. </string> <string name="message_session_event"> Ikke muligt at sende din besked til samtalen med [RECIPIENT]. diff --git a/indra/newview/skins/default/xui/da/floater_moveview.xml b/indra/newview/skins/default/xui/da/floater_moveview.xml index 258af489e7..8385924bda 100644 --- a/indra/newview/skins/default/xui/da/floater_moveview.xml +++ b/indra/newview/skins/default/xui/da/floater_moveview.xml @@ -18,6 +18,15 @@ <string name="fly_back_tooltip"> Flyv baglæns (Tryk på Ned piletast eller S) </string> + <string name="walk_title"> + Gå + </string> + <string name="run_title"> + Løb + </string> + <string name="fly_title"> + Flyv + </string> <panel name="panel_actions"> <button label="" label_selected="" name="turn left btn" tool_tip="xxx Drej til venstre (Tryk på venstre piletast eller A)"/> <button label="" label_selected="" name="turn right btn" tool_tip="Drej til højre (Tryk på højre piletast eller D)"/> @@ -30,6 +39,5 @@ <button label="" name="mode_walk_btn" tool_tip="Gå tilstand"/> <button label="" name="mode_run_btn" tool_tip="Løbe tilstand"/> <button label="" name="mode_fly_btn" tool_tip="Flyve tilstand"/> - <button label="Stop flyvning" name="stop_fly_btn" tool_tip="Stop flyvning"/> </panel> </floater> diff --git a/indra/newview/skins/default/xui/da/floater_publish_classified.xml b/indra/newview/skins/default/xui/da/floater_publish_classified.xml new file mode 100644 index 0000000000..220042f015 --- /dev/null +++ b/indra/newview/skins/default/xui/da/floater_publish_classified.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="publish_classified" title="Publicerer annoncer"> + <text name="explanation_text"> + Din annonce vil blive vist i en uge fra den dato den publiceres. + +Husk, annonceomkostninger kan ikke refunderes. + </text> + <spinner label="Pris for annonce:" name="price_for_listing" tool_tip="Pris for optagelse af annonce." value="50"/> + <text name="l$_text" value="L$"/> + <text name="more_info_text"> + Mere info (link til hjælp om annoncer) + </text> + <button label="Publicér" name="publish_btn"/> + <button label="Annullér" name="cancel_btn"/> +</floater> diff --git a/indra/newview/skins/default/xui/da/floater_tools.xml b/indra/newview/skins/default/xui/da/floater_tools.xml index 2e35811133..a39a7e8698 100644 --- a/indra/newview/skins/default/xui/da/floater_tools.xml +++ b/indra/newview/skins/default/xui/da/floater_tools.xml @@ -63,7 +63,7 @@ <radio_item label="Stræk (Ctrl+Shift)" name="radio stretch"/> <radio_item label="Vælg overflade" name="radio select face"/> </radio_group> - <check_box label="Redigér sammenlænkede dele" name="checkbox edit linked parts"/> + <check_box label="Redigér lænkede" name="checkbox edit linked parts"/> <text name="RenderingCost" tool_tip="Hvis beregnede rendering omkostninger for dette objekt"> þ: [COUNT] </text> @@ -184,12 +184,12 @@ Klik for at: </text> <combo_box name="clickaction"> - <combo_box.item label="Rør (Standard)" name="Touch/grab(default)"/> - <combo_box.item label="Sid på objekt" name="Sitonobject"/> - <combo_box.item label="Køb objekt" name="Buyobject"/> - <combo_box.item label="Betal objekt" name="Payobject"/> - <combo_box.item label="Åben" name="Open"/> - <combo_box.item label="Zoom" name="Zoom"/> + <combo_box.item label="Røre (Standard)" name="Touch/grab(default)"/> + <combo_box.item label="Sidde på objekt" name="Sitonobject"/> + <combo_box.item label="Købe objekt" name="Buyobject"/> + <combo_box.item label="Betale objekt" name="Payobject"/> + <combo_box.item label="Åbne" name="Open"/> + <combo_box.item label="Zoome" name="Zoom"/> </combo_box> <check_box label="Til salg:" name="checkbox for sale"/> <combo_box name="sale type"> @@ -206,8 +206,8 @@ <text name="Anyone can:"> Enhver: </text> - <check_box label="Flyt" name="checkbox allow everyone move"/> - <check_box label="Kopi" name="checkbox allow everyone copy"/> + <check_box label="Flytte" name="checkbox allow everyone move"/> + <check_box label="Kopiere" name="checkbox allow everyone copy"/> <text name="Next owner can:"> Næste ejer: </text> @@ -417,21 +417,21 @@ <combo_box.item label="Ingen" name="None"/> <combo_box.item label="Lysintensitet" name="Brightness"/> <combo_box.item label="Mørke" name="Darkness"/> - <combo_box.item label="træårer" name="woodgrain"/> - <combo_box.item label="bark" name="bark"/> - <combo_box.item label="mursten" name="bricks"/> - <combo_box.item label="tern" name="checker"/> - <combo_box.item label="beton" name="concrete"/> - <combo_box.item label="rustik flise" name="crustytile"/> + <combo_box.item label="Træårer" name="woodgrain"/> + <combo_box.item label="Bark" name="bark"/> + <combo_box.item label="Mursten" name="bricks"/> + <combo_box.item label="Tern" name="checker"/> + <combo_box.item label="Beton" name="concrete"/> + <combo_box.item label="Rustik flise" name="crustytile"/> <combo_box.item label="Skåret sten" name="cutstone"/> - <combo_box.item label="plader" name="discs"/> - <combo_box.item label="grus" name="gravel"/> - <combo_box.item label="petriskål" name="petridish"/> - <combo_box.item label="udvendig beklædning" name="siding"/> - <combo_box.item label="stenflise" name="stonetile"/> - <combo_box.item label="puds" name="stucco"/> - <combo_box.item label="rør" name="suction"/> - <combo_box.item label="væv" name="weave"/> + <combo_box.item label="Plader" name="discs"/> + <combo_box.item label="Grus" name="gravel"/> + <combo_box.item label="Petriskål" name="petridish"/> + <combo_box.item label="Udvendig beklædning" name="siding"/> + <combo_box.item label="Stenflise" name="stonetile"/> + <combo_box.item label="Puds" name="stucco"/> + <combo_box.item label="Rør" name="suction"/> + <combo_box.item label="Væv" name="weave"/> </combo_box> <text name="tex scale"> Gentagelser på overflade @@ -440,8 +440,8 @@ <check_box label="Vend" name="checkbox flip s"/> <spinner label="Lodret (V)" name="TexScaleV"/> <check_box label="Vend" name="checkbox flip t"/> - <spinner label="Rotation˚" left="125" name="TexRot" width="55"/> - <spinner label="Gentagelser pr. meter" left="125" name="rptctrl" width="55"/> + <spinner label="Rotation˚"/> + <spinner label="Gentagelser pr. m."/> <button label="Gem" label_selected="Gem" left_delta="62" name="button apply"/> <text name="tex offset"> Tekstur offset @@ -488,7 +488,7 @@ Grå = Offentligt ejet"/> <button label="Opdel" label_selected="Opdel" name="button subdivide land"/> <button label="Saml" label_selected="Saml" name="button join land"/> <text name="label_parcel_trans"> - Transaktioner for land + Transaktioner - land </text> <button label="Køb land" label_selected="Køb land" name="button buy land"/> <button label="Efterlad land" label_selected="Efterlad land" name="button abandon land"/> diff --git a/indra/newview/skins/default/xui/da/floater_tos.xml b/indra/newview/skins/default/xui/da/floater_tos.xml index 6f61d9b310..c87fe8162f 100644 --- a/indra/newview/skins/default/xui/da/floater_tos.xml +++ b/indra/newview/skins/default/xui/da/floater_tos.xml @@ -2,9 +2,9 @@ <floater name="modal container" title=""> <button label="Fortsæt" label_selected="Fortsæt" name="Continue"/> <button label="Annullér" label_selected="Annullér" name="Cancel"/> - <check_box label="Jeg accepterer vilkårene for brug af tjenesten" name="agree_chk"/> + <check_box label="Jeg er enig med "Terms of Service and Privacy Policy"" name="agree_chk"/> <text name="tos_heading"> - Læs venligst følgende servicebetingelser grundigt. For at kunne logge på [SECOND_LIFE], skal du acceptere aftalen. + Læs venligst følgende "Terms of Service and Privacy Policy" grundigt. For at fortsætte med at logge på [SECOND_LIFE], skal du acceptere aftale. </text> <text_editor name="tos_text"> TOS_TEXT diff --git a/indra/newview/skins/default/xui/da/floater_water.xml b/indra/newview/skins/default/xui/da/floater_water.xml index 103feaa879..aedd1b442c 100644 --- a/indra/newview/skins/default/xui/da/floater_water.xml +++ b/indra/newview/skins/default/xui/da/floater_water.xml @@ -7,7 +7,7 @@ <button label="Gem" label_selected="Gem" name="WaterSavePreset"/> <button label="Slet" label_selected="Slet" name="WaterDeletePreset"/> <tab_container name="Water Tabs"> - <panel label="Opsætning" name="Settings"> + <panel label="INDSTILLINGER" name="Settings"> <text name="BHText"> Vandtåge farve </text> @@ -65,7 +65,7 @@ <button label="?" name="WaterBlurMultiplierHelp"/> <slider label="" name="WaterBlurMult"/> </panel> - <panel label="Billede" name="Waves"> + <panel label="BILLEDE" name="Waves"> <text name="BHText"> Retning for store bølger </text> diff --git a/indra/newview/skins/default/xui/da/floater_windlight_options.xml b/indra/newview/skins/default/xui/da/floater_windlight_options.xml index 4786609b53..65f3f67a70 100644 --- a/indra/newview/skins/default/xui/da/floater_windlight_options.xml +++ b/indra/newview/skins/default/xui/da/floater_windlight_options.xml @@ -1,18 +1,18 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="WindLight floater" title="AVANCERET OPSÆTNING FOR HIMMEL"> <text name="KeyFramePresetsText"> Faste indstillinger: </text> - <button label="Ny" label_selected="Ny" name="WLNewPreset" /> - <button label="Gem" label_selected="Gem" name="WLSavePreset" /> - <button label="Slet" label_selected="Slet" name="WLDeletePreset" /> - <button label="Dags cyklus" label_selected="Dags cyklus" name="WLDayCycleMenuButton" /> + <button label="Ny" label_selected="Ny" name="WLNewPreset"/> + <button label="Gem" label_selected="Gem" name="WLSavePreset"/> + <button label="Slet" label_selected="Slet" name="WLDeletePreset"/> + <button label="Dags cyklus" label_selected="Dags cyklus" name="WLDayCycleMenuButton"/> <tab_container name="WindLight Tabs"> - <panel label="Atmosfære" name="Atmosphere"> + <panel label="ATMOSFÆRE" name="Atmosphere"> <text name="BHText"> Blå - horisont </text> - <button label="?" name="WLBlueHorizonHelp" /> + <button label="?" name="WLBlueHorizonHelp"/> <text name="BHText2"> R </text> @@ -25,19 +25,19 @@ <text name="BHText5"> I </text> - <slider label="" name="WLBlueHorizonR" /> - <slider label="" name="WLBlueHorizonG" /> - <slider label="" name="WLBlueHorizonB" /> - <slider label="" name="WLBlueHorizonI" /> + <slider label="" name="WLBlueHorizonR"/> + <slider label="" name="WLBlueHorizonG"/> + <slider label="" name="WLBlueHorizonB"/> + <slider label="" name="WLBlueHorizonI"/> <text name="BDensText"> Dis - horisont </text> - <button label="?" name="WLHazeHorizonHelp" /> - <slider label="" name="WLHazeHorizon" /> + <button label="?" name="WLHazeHorizonHelp"/> + <slider label="" name="WLHazeHorizon"/> <text name="BDensText2"> Blå - tæthed </text> - <button label="?" name="WLBlueDensityHelp" /> + <button label="?" name="WLBlueDensityHelp"/> <text name="BHText6"> R </text> @@ -50,36 +50,36 @@ <text name="BHText9"> I </text> - <slider label="" name="WLBlueDensityR" /> - <slider label="" name="WLBlueDensityG" /> - <slider label="" name="WLBlueDensityB" /> - <slider label="" name="WLBlueDensityI" /> + <slider label="" name="WLBlueDensityR"/> + <slider label="" name="WLBlueDensityG"/> + <slider label="" name="WLBlueDensityB"/> + <slider label="" name="WLBlueDensityI"/> <text name="HDText"> Dis - intensitet </text> - <button label="?" name="WLHazeDensityHelp" /> - <slider label="" name="WLHazeDensity" /> + <button label="?" name="WLHazeDensityHelp"/> + <slider label="" name="WLHazeDensity"/> <text name="DensMultText"> Densitet faktor </text> - <button label="?" name="WLDensityMultHelp" /> - <slider label="" name="WLDensityMult" /> + <button label="?" name="WLDensityMultHelp"/> + <slider label="" name="WLDensityMult"/> <text name="WLDistanceMultText"> Distance faktor </text> - <button label="?" name="WLDistanceMultHelp" /> - <slider label="" name="WLDistanceMult" /> + <button label="?" name="WLDistanceMultHelp"/> + <slider label="" name="WLDistanceMult"/> <text name="MaxAltText"> Maximum højde </text> - <button label="?" name="WLMaxAltitudeHelp" /> - <slider label="" name="WLMaxAltitude" /> + <button label="?" name="WLMaxAltitudeHelp"/> + <slider label="" name="WLMaxAltitude"/> </panel> - <panel label="Lys" name="Lighting"> + <panel label="LYS" name="Lighting"> <text name="SLCText"> Sol/Måne farve </text> - <button label="?" name="WLSunlightColorHelp" /> + <button label="?" name="WLSunlightColorHelp"/> <text name="BHText"> R </text> @@ -92,19 +92,19 @@ <text name="BHText4"> I </text> - <slider label="" name="WLSunlightR" /> - <slider label="" name="WLSunlightG" /> - <slider label="" name="WLSunlightB" /> - <slider label="" name="WLSunlightI" /> + <slider label="" name="WLSunlightR"/> + <slider label="" name="WLSunlightG"/> + <slider label="" name="WLSunlightB"/> + <slider label="" name="WLSunlightI"/> <text name="TODText"> Sol/Måne position </text> - <button label="?" name="WLTimeOfDayHelp" /> - <slider label="" name="WLSunAngle" /> + <button label="?" name="WLTimeOfDayHelp"/> + <slider label="" name="WLSunAngle"/> <text name="WLAmbientText"> Omgivende </text> - <button label="?" name="WLAmbientHelp" /> + <button label="?" name="WLAmbientHelp"/> <text name="BHText5"> R </text> @@ -117,37 +117,37 @@ <text name="BHText8"> I </text> - <slider label="" name="WLAmbientR" /> - <slider label="" name="WLAmbientG" /> - <slider label="" name="WLAmbientB" /> - <slider label="" name="WLAmbientI" /> + <slider label="" name="WLAmbientR"/> + <slider label="" name="WLAmbientG"/> + <slider label="" name="WLAmbientB"/> + <slider label="" name="WLAmbientI"/> <text name="WLEastAngleText"> Øst vinkel </text> - <button label="?" name="WLEastAngleHelp" /> - <slider label="" name="WLEastAngle" /> + <button label="?" name="WLEastAngleHelp"/> + <slider label="" name="WLEastAngle"/> <text name="SunGlowText"> Sol glød </text> - <button label="?" name="WLSunGlowHelp" /> - <slider label="Fokus " name="WLGlowB" /> - <slider label="Størr. " name="WLGlowR" /> + <button label="?" name="WLSunGlowHelp"/> + <slider label="Fokus " name="WLGlowB"/> + <slider label="Størr. " name="WLGlowR"/> <text name="SceneGammaText"> Lysintensitet (gamma) </text> - <button label="?" name="WLSceneGammaHelp" /> - <slider label="" name="WLGamma" /> + <button label="?" name="WLSceneGammaHelp"/> + <slider label="" name="WLGamma"/> <text name="WLStarText"> Stjerne intensitet </text> - <button label="?" name="WLStarBrightnessHelp" /> - <slider label="" name="WLStarAlpha" /> + <button label="?" name="WLStarBrightnessHelp"/> + <slider label="" name="WLStarAlpha"/> </panel> - <panel label="Skyer" name="Clouds"> + <panel label="SKYER" name="Clouds"> <text name="WLCloudColorText"> Farve på skyer </text> - <button label="?" name="WLCloudColorHelp" /> + <button label="?" name="WLCloudColorHelp"/> <text name="BHText"> R </text> @@ -160,14 +160,14 @@ <text name="BHText4"> I </text> - <slider label="" name="WLCloudColorR" /> - <slider label="" name="WLCloudColorG" /> - <slider label="" name="WLCloudColorB" /> - <slider label="" name="WLCloudColorI" /> + <slider label="" name="WLCloudColorR"/> + <slider label="" name="WLCloudColorG"/> + <slider label="" name="WLCloudColorB"/> + <slider label="" name="WLCloudColorI"/> <text name="WLCloudColorText2"> Skyer XY/Tæthed </text> - <button label="?" name="WLCloudDensityHelp" /> + <button label="?" name="WLCloudDensityHelp"/> <text name="BHText5"> X </text> @@ -177,23 +177,23 @@ <text name="BHText7"> T </text> - <slider label="" name="WLCloudX" /> - <slider label="" name="WLCloudY" /> - <slider label="" name="WLCloudDensity" /> + <slider label="" name="WLCloudX"/> + <slider label="" name="WLCloudY"/> + <slider label="" name="WLCloudDensity"/> <text name="WLCloudCoverageText"> Skydække </text> - <button label="?" name="WLCloudCoverageHelp" /> - <slider label="" name="WLCloudCoverage" /> + <button label="?" name="WLCloudCoverageHelp"/> + <slider label="" name="WLCloudCoverage"/> <text name="WLCloudScaleText"> Skystørrelse </text> - <button label="?" name="WLCloudScaleHelp" /> - <slider label="" name="WLCloudScale" /> + <button label="?" name="WLCloudScaleHelp"/> + <slider label="" name="WLCloudScale"/> <text name="WLCloudDetailText"> Sky detaljer(XY/tæthed) </text> - <button label="?" name="WLCloudDetailHelp" /> + <button label="?" name="WLCloudDetailHelp"/> <text name="BHText8"> X </text> @@ -203,23 +203,23 @@ <text name="BHText10"> T </text> - <slider label="" name="WLCloudDetailX" /> - <slider label="" name="WLCloudDetailY" /> - <slider label="" name="WLCloudDetailDensity" /> + <slider label="" name="WLCloudDetailX"/> + <slider label="" name="WLCloudDetailY"/> + <slider label="" name="WLCloudDetailDensity"/> <text name="WLCloudScrollXText"> Sky drift X </text> - <button label="?" name="WLCloudScrollXHelp" /> - <check_box label="Lås" name="WLCloudLockX" /> - <slider label="" name="WLCloudScrollX" /> + <button label="?" name="WLCloudScrollXHelp"/> + <check_box label="Lås" name="WLCloudLockX"/> + <slider label="" name="WLCloudScrollX"/> <text name="WLCloudScrollYText"> Sky drift Y </text> - <button label="?" name="WLCloudScrollYHelp" /> - <check_box label="Lås" name="WLCloudLockY" /> - <slider label="" name="WLCloudScrollY" /> - <check_box label="Benyt simple skyer" name="DrawClassicClouds" /> - <button label="?" name="WLClassicCloudsHelp" /> + <button label="?" name="WLCloudScrollYHelp"/> + <check_box label="Lås" name="WLCloudLockY"/> + <slider label="" name="WLCloudScrollY"/> + <check_box label="Benyt simple skyer" name="DrawClassicClouds"/> + <button label="?" name="WLClassicCloudsHelp"/> </panel> </tab_container> <string name="WLDefaultSkyNames"> diff --git a/indra/newview/skins/default/xui/da/floater_world_map.xml b/indra/newview/skins/default/xui/da/floater_world_map.xml index 7d4a81d655..898d291f1c 100644 --- a/indra/newview/skins/default/xui/da/floater_world_map.xml +++ b/indra/newview/skins/default/xui/da/floater_world_map.xml @@ -5,30 +5,66 @@ Forklaring </text> </panel> - <panel> + <panel name="layout_panel_2"> + <button name="Show My Location" tool_tip="Centrer kortet på din avatars lokation"/> <text name="me_label"> Mig </text> <text name="person_label"> Person </text> + <text name="infohub_label"> + Infohub + </text> + <text name="land_sale_label"> + Land til salg + </text> <text name="by_owner_label"> efter ejer </text> <text name="auction_label"> land auktion </text> + <button name="Go Home" tool_tip="Teleportér til min hjemmelokation"/> + <text name="Home_label"> + Hjem + </text> + <text name="events_label"> + Events: + </text> <text name="pg_label"> Generelt </text> + <check_box initial_value="sandt" name="event_mature_chk"/> <text name="mature_label"> Moderat </text> <text name="adult_label"> - Voksen + Voksent </text> </panel> - <panel> + <panel name="layout_panel_3"> + <text name="find_on_map_label"> + Find på kort + </text> + </panel> + <panel name="layout_panel_4"> + <combo_box label="Venner online" name="friend combo" tool_tip="Vis venner på kortet"> + <combo_box.item label="Mine venner som er online" name="item1"/> + </combo_box> + <combo_box label="Mine landemærker" name="landmark combo" tool_tip="Landemærke der skal vises på kort"> + <combo_box.item label="Mine landemærker" name="item1"/> + </combo_box> + <search_editor label="Regioner efter navn" name="location" tool_tip="Indtast navn på en region"/> + <button label="Find" name="DoSearch" tool_tip="Led efter region"/> <button name="Clear" tool_tip="Fjern søgelinier og nulstil kort"/> + <button label="Teleport" name="Teleport" tool_tip="Teleportér til valgte sted"/> + <button label="Kopiér SLurl" name="copy_slurl" tool_tip="Kopierer nuværende lokation som SLurl der kan sendes på web."/> + <button label="Vis valgte" name="Show Destination" tool_tip="Centrér kortet på valgte lokation"/> + </panel> + <panel name="layout_panel_5"> + <text name="zoom_label"> + Zoom + </text> </panel> </floater> diff --git a/indra/newview/skins/default/xui/da/menu_mini_map.xml b/indra/newview/skins/default/xui/da/menu_mini_map.xml index 0e2d04ffbb..38486cdecb 100644 --- a/indra/newview/skins/default/xui/da/menu_mini_map.xml +++ b/indra/newview/skins/default/xui/da/menu_mini_map.xml @@ -4,6 +4,6 @@ <menu_item_call label="Zoom mellem" name="Zoom Medium"/> <menu_item_call label="Zoom langt" name="Zoom Far"/> <menu_item_check label="Rotér kort" name="Rotate Map"/> - <menu_item_call label="Stop Tracking" name="Stop Tracking"/> + <menu_item_call label="Fjern ref." name="Stop Tracking"/> <menu_item_call label="Verdenskort" name="World Map"/> </menu> diff --git a/indra/newview/skins/default/xui/da/menu_object.xml b/indra/newview/skins/default/xui/da/menu_object.xml index 232f3f64e2..c98a07e140 100644 --- a/indra/newview/skins/default/xui/da/menu_object.xml +++ b/indra/newview/skins/default/xui/da/menu_object.xml @@ -5,6 +5,7 @@ <menu_item_call label="Byg" name="Build"/> <menu_item_call label="Åben" name="Open"/> <menu_item_call label="Sid her" name="Object Sit"/> + <menu_item_call label="Stå op" name="Object Stand Up"/> <menu_item_call label="Objekt profil" name="Object Inspect"/> <menu_item_call label="Zoom In" name="Zoom In"/> <context_menu label="Tag på ▶" name="Put On"> diff --git a/indra/newview/skins/default/xui/da/menu_profile_overflow.xml b/indra/newview/skins/default/xui/da/menu_profile_overflow.xml index 9609b424a1..6745007c99 100644 --- a/indra/newview/skins/default/xui/da/menu_profile_overflow.xml +++ b/indra/newview/skins/default/xui/da/menu_profile_overflow.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <toggleable_menu name="profile_overflow_menu"> + <menu_item_call label="Kort" name="show_on_map"/> <menu_item_call label="Betal" name="pay"/> <menu_item_call label="Del" name="share"/> <menu_item_call label="Blokér" name="block"/> diff --git a/indra/newview/skins/default/xui/da/menu_viewer.xml b/indra/newview/skins/default/xui/da/menu_viewer.xml index 18ad7cfffa..7e7d1b190a 100644 --- a/indra/newview/skins/default/xui/da/menu_viewer.xml +++ b/indra/newview/skins/default/xui/da/menu_viewer.xml @@ -36,7 +36,7 @@ <menu_item_call label="Mit land" name="My Land"/> <menu label="Vis" name="LandShow"> <menu_item_check label="Bevægelses kontrol" name="Movement Controls"/> - <menu_item_check label="Vis kontroller" name="Camera Controls"/> + <menu_item_check label="Kontroller" name="Camera Controls"/> <menu_item_check label="'Ingen adgang' markering" name="Ban Lines"/> <menu_item_check label="Pejlelys" name="beacons"/> <menu_item_check label="Parcel skel" name="Property Lines"/> @@ -75,7 +75,7 @@ <menu_item_call label="Vælg alt" name="Select All"/> <menu_item_call label="Fravælg" name="Deselect"/> </menu> - <menu_item_call label="Sammenkæde" name="Link"/> + <menu_item_call label="Sammenkæd" name="Link"/> <menu_item_call label="Adskil" name="Unlink"/> <menu_item_check label="Redigér sammekædede objekter" name="Edit Linked Parts"/> <menu_item_call label="Fokusér på valgte" name="Focus on Selection"/> @@ -88,10 +88,10 @@ <menu_item_call label="Opdater ændringer i indhold til objekt" name="Save Object Back to Object Contents"/> </menu> <menu label="Scripts" name="Scripts"> - <menu_item_call label="Rekompilér scripts (Mono)" name="Mono"/> + <menu_item_call label="Genoversæt scripts (Mono)" name="Mono"/> <menu_item_call label="Genoversæt scripts (LSL)" name="LSL"/> <menu_item_call label="Genstart scripts" name="Reset Scripts"/> - <menu_item_call label="sæt scripts til "Running"" name="Set Scripts to Running"/> + <menu_item_call label="Sæt scripts til "Running"" name="Set Scripts to Running"/> <menu_item_call label="Sæt scripts til "Not Running"" name="Set Scripts to Not Running"/> </menu> <menu label="Valg" name="Options"> @@ -111,7 +111,7 @@ <menu label="Vis lænkede dele" name="Select Linked Parts"> <menu_item_call label="Vælg næste del" name="Select Next Part"/> <menu_item_call label="Vælg forrige del" name="Select Previous Part"/> - <menu_item_call label="Inkludér næste valg" name="Include Next Part"/> + <menu_item_call label="Inkludér næste del" name="Include Next Part"/> <menu_item_call label="Inkludér forrige del" name="Include Previous Part"/> </menu> </menu> @@ -128,7 +128,7 @@ <menu_item_check label="Begræns valg afstand" name="Limit Select Distance"/> <menu_item_check label="Fjern kamerabegrænsninger" name="Disable Camera Distance"/> <menu_item_check label="Højopløsningsfoto" name="HighResSnapshot"/> - <menu_item_check label="Lydløse foto's til disk" name="QuietSnapshotsToDisk"/> + <menu_item_check label="Lydløse fotos til disk" name="QuietSnapshotsToDisk"/> <menu_item_check label="Komprimér fotos til disk" name="CompressSnapshotsToDisk"/> <menu label="Værktøjer til ydelse" name="Performance Tools"> <menu_item_call label="Lag meter" name="Lag Meter"/> @@ -149,7 +149,7 @@ <menu_item_check label="Alpha" name="Alpha"/> <menu_item_check label="Træer" name="Tree"/> <menu_item_check label="Avatarer" name="Character"/> - <menu_item_check label="SurfacePath" name="SurfacePath"/> + <menu_item_check label="Overflade" name="SurfacePath"/> <menu_item_check label="Himmel" name="Sky"/> <menu_item_check label="Vand" name="Water"/> <menu_item_check label="Jord" name="Ground"/> @@ -168,7 +168,7 @@ <menu_item_check label="Tåge" name="Fog"/> <menu_item_check label="Fleksible objekter" name="Flexible Objects"/> </menu> - <menu_item_check label="Kør flere tråde" name="Run Multiple Threads"/> + <menu_item_check label="Kør flere 'threats'" name="Run Multiple Threads"/> <menu_item_call label="Tøm gruppe cache" name="ClearGroupCache"/> <menu_item_check label="Muse udjævning" name="Mouse Smoothing"/> <menu label="Shortcuts" name="Shortcuts"> diff --git a/indra/newview/skins/default/xui/da/notifications.xml b/indra/newview/skins/default/xui/da/notifications.xml index 9193bd43e8..30e19ee901 100644 --- a/indra/newview/skins/default/xui/da/notifications.xml +++ b/indra/newview/skins/default/xui/da/notifications.xml @@ -107,7 +107,7 @@ Vælg kun en genstand, og prøv igen. </notification> <notification name="FriendsAndGroupsOnly"> 'Ikke-venner' vil ikke vide, at du har valgt at ignorere deres opkald og personlige beskeder (IM) - <usetemplate name="okbutton" yestext="Ja"/> + <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="GrantModifyRights"> At give redigerings rettigheder til en anden beboer, giver dem mulighed for at ændre, slette eller tage ALLE genstande, du måtte have i verden. Vær MEGET forsigtig når uddeler denne tilladelse. @@ -228,7 +228,7 @@ Er du sikker på at du vil fortsætte? Cache vil blive tømt ved næste genstart af [APP_NAME]. </notification> <notification name="CacheWillBeMoved"> - Cache vil blive flyttet ved næste genstart af [APP_NAME]. + Cache vil blive fjernet ved næste genstart af [APP_NAME]. Note: This will clear the cache. </notification> <notification name="ChangeConnectionPort"> @@ -243,9 +243,9 @@ Indtast venligst navn på region i Start lokation feltet eller vælg "Min s <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="UnsupportedHardware"> - Bare så du ved det, din computer opfylder ikke minimumskravene til [APP_NAME]. Du kan opleve dårlig hastighed. Desværre kan [SUPPORT_SITE] ikke give teknisk support til ikke-supporterede konfigurationer. -MINSPECS -Besøg [_URL] for mere information? + Din computer opfylder ikke minimumskravene til [APP_NAME]. Du kan risikere nedsat hastighed. Desværre kan [SUPPORT_SITE] ikke tilbyde teknisk support til konfigurationer der ikke er understøttet. + +Besøg [_URL] for yderligere information? <usetemplate ignoretext="Din computer hardware understøttes ikke" name="okcancelignore" notext="No" yestext="Yes"/> </notification> <notification name="UnknownGPU"> @@ -525,6 +525,10 @@ Download til dit Program bibliotek? <notification name="ReturnToOwner"> <usetemplate ignoretext="Bekræft før objekter returneres til deres ejere" name="okcancelignore" notext="Cancel" yestext="OK"/> </notification> + <notification name="ConfirmKick"> + Er du SIKKER på at du vil sparke alle beboere ud? + <usetemplate name="okcancelbuttons" notext="Cancel" yestext="Spark alle beboere ud"/> + </notification> <notification name="MuteLinden"> Beklager, men du kan ikke blokere en Linden. </notification> @@ -547,6 +551,15 @@ Chat og personlige beskeder vil blive skjult. Personlige beskeder vil få din &a Du er oppe på det maksimale antal grupper. Forlad venligst en gruppe inden du melder dig ind i enndnu en gruppe eller opretter en ny. <usetemplate name="okbutton" yestext="OK"/> </notification> + <notification name="KickUser"> + Spark beboere ud med hvilken besked? + </notification> + <notification name="FreezeUser"> + Frys beboeren med hvilken besked? + </notification> + <notification name="UnFreezeUser"> + Fjern frysning af beboeren med hvilken besked? + </notification> <notification name="OfferTeleport"> <form name="form"> <input name="message"> @@ -556,6 +569,9 @@ Chat og personlige beskeder vil blive skjult. Personlige beskeder vil få din &a <button name="Cancel" text="Annullér"/> </form> </notification> + <notification name="OfferTeleportFromGod"> + Tilkald beboer til din lokation? + </notification> <notification name="TeleportFromLandmark"> Er du sikker på at du vil teleportere til <nolink>[LOCATION]</nolink>? <usetemplate ignoretext="Bekræft at jeg vil teleportere til et landemærke" name="okcancelignore" notext="Cancel" yestext="Teleport"/> @@ -568,6 +584,13 @@ Chat og personlige beskeder vil blive skjult. Personlige beskeder vil få din &a Teleport til [CLASSIFIED]? <usetemplate ignoretext="Bekræft at du ønsker at teleportere til lokation in annoncer" name="okcancelignore" notext="Annullér" yestext="Teleport"/> </notification> + <notification label="Change Linden Estate" name="ChangeLindenEstate"> + Du er i færd med at ændre et Linden ejet estate (mainland, teeen grid, orientation etc.). + +Dette er EKSTREMT FARLIGT da det kan ændre beboernes oplevelse fundamentalt. På mainland vil dette betyde ændring af tusinder af regioner og få spaceserveren til at kløjs i det. + +Fortsæt? + </notification> <notification name="RegionEntryAccessBlocked"> Du har ikke adgang til denne region på grund af din valgte indholdsrating. Dette kan skyldes manglende validering af din alder. @@ -1273,14 +1296,6 @@ Tillad denne anmodning? <button name="Ignore" text="Ignorér"/> </form> </notification> - <notification name="ScriptToast"> - [FIRST] [LAST]'s '[TITLE]' ønsker bruger-input. - <form name="form"> - <button name="Open" text="Åben dialog"/> - <button name="Ignore" text="Ignorér"/> - <button name="Block" text="Blokér"/> - </form> - </notification> <notification name="BuyLindenDollarSuccess"> Tak for din betaling! @@ -1407,7 +1422,7 @@ De vil blive blokeret nogle få sekunder af sikkerhedsmæssige årsager. </notification> <notification name="ConfirmCloseAll"> Er du sikker på at du vil lukke alle personlige samtaler (IM)? - <usetemplate name="okcancelignore" notext="Annullér" yestext="OK"/> + <usetemplate ignoretext="Bekræft før du lukker alle IMer" name="okcancelignore" notext="Annullér" yestext="OK"/> </notification> <notification name="AttachmentSaved"> Vedhæng er blevet gemt. diff --git a/indra/newview/skins/default/xui/da/panel_classified_info.xml b/indra/newview/skins/default/xui/da/panel_classified_info.xml index 6eba024981..28f8936457 100644 --- a/indra/newview/skins/default/xui/da/panel_classified_info.xml +++ b/indra/newview/skins/default/xui/da/panel_classified_info.xml @@ -3,16 +3,46 @@ <panel.string name="l$_price"> L$[PRICE] </panel.string> + <panel.string name="click_through_text_fmt"> + [TELEPORT] teleport, [MAP] kort, [PROFILE] profil + </panel.string> + <panel.string name="date_fmt"> + [mthnum,datetime,slt]/[day,datetime,slt]/[year,datetime,slt] + </panel.string> + <panel.string name="auto_renew_on"> + Aktiv + </panel.string> + <panel.string name="auto_renew_off"> + Ikke aktiv + </panel.string> <text name="title" value="Annonce info"/> <scroll_container name="profile_scroll"> <panel name="scroll_content_panel"> <text_editor name="classified_name" value="[name]"/> + <text name="classified_location_label" value="Sted:"/> <text_editor name="classified_location" value="[loading...]"/> + <text name="content_type_label" value="Indholdsype:"/> <text_editor name="content_type" value="[content type]"/> + <text name="category_label" value="Kategori:"/> <text_editor name="category" value="[category]"/> - <check_box label="Forny automatisk hver uge" name="auto_renew"/> - <text_editor name="price_for_listing" tool_tip="Pris for optagelse."/> - <text_editor name="classified_desc" value="[description]"/> + <text name="creation_date_label" value="Oprettet d.:"/> + <text_editor name="creation_date" tool_tip="Oprettet d." value="[date]"/> + <text name="price_for_listing_label" value="Pris for optagelse i lister:"/> + <text_editor name="price_for_listing" tool_tip="Pris for optagelse." value="[price]"/> + <layout_stack name="descr_stack"> + <layout_panel name="clickthrough_layout_panel"> + <text name="click_through_label" value="Klik:"/> + <text_editor name="click_through_text" tool_tip="Klik gennem data" value="[clicks]"/> + </layout_panel> + <layout_panel name="price_layout_panel"> + <text name="auto_renew_label" value="Forny automatisk:"/> + <text name="auto_renew" value="Aktiv"/> + </layout_panel> + <layout_panel name="descr_layout_panel"> + <text name="classified_desc_label" value="Beskrivelse:"/> + <text_editor name="classified_desc" value="[description]"/> + </layout_panel> + </layout_stack> </panel> </scroll_container> <panel name="buttons"> diff --git a/indra/newview/skins/default/xui/da/panel_edit_classified.xml b/indra/newview/skins/default/xui/da/panel_edit_classified.xml index 18689105ae..7fb2f930fa 100644 --- a/indra/newview/skins/default/xui/da/panel_edit_classified.xml +++ b/indra/newview/skins/default/xui/da/panel_edit_classified.xml @@ -3,12 +3,20 @@ <panel.string name="location_notice"> (vil blive opdateret efter gemning) </panel.string> + <string name="publish_label"> + Publicér + </string> + <string name="save_label"> + Gem + </string> <text name="title"> Rediger annonce </text> <scroll_container name="profile_scroll"> <panel name="scroll_content_panel"> - <icon label="" name="edit_icon" tool_tip="Klik for at forstørre billede"/> + <panel name="snapshot_panel"> + <icon label="" name="edit_icon" tool_tip="Klik for at vælge et billede"/> + </panel> <text name="Name:"> Titel: </text> @@ -22,12 +30,19 @@ henter... </text> <button label="Sæt til nuværende lokation" name="set_to_curr_location_btn"/> + <text name="category_label" value="Kategori:"/> + <text name="content_type_label" value="Indholdstype:"/> + <icons_combo_box label="Generelt" name="content_type"> + <icons_combo_box.item label="Moderat" name="mature_ci" value="Voksent"/> + <icons_combo_box.item label="Generelt" name="pg_ci" value="PG"/> + </icons_combo_box> + <text name="price_for_listing_label" value="Pris for optagelse:"/> <spinner label="L$" name="price_for_listing" tool_tip="Pris for optagelse." value="50"/> <check_box label="Forny automatisk hver uge" name="auto_renew"/> </panel> </scroll_container> <panel label="bottom_panel" name="bottom_panel"> - <button label="Gem" name="save_changes_btn"/> + <button label="[LABEL]" name="save_changes_btn"/> <button label="Annullér" name="cancel_btn"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/da/panel_edit_pick.xml b/indra/newview/skins/default/xui/da/panel_edit_pick.xml index 41db2be5e8..dcc4e7a4b6 100644 --- a/indra/newview/skins/default/xui/da/panel_edit_pick.xml +++ b/indra/newview/skins/default/xui/da/panel_edit_pick.xml @@ -1,5 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Redigér Pick" name="panel_edit_pick"> + <panel.string name="location_notice"> + (vil blive opdateret ved gemning) + </panel.string> <text name="title"> Redigér favorit </text> @@ -22,7 +25,7 @@ </panel> </scroll_container> <panel label="bottom_panel" name="bottom_panel"> - <button label="Gem [WHAT]" name="save_changes_btn"/> + <button label="Gem favorit Pick" name="save_changes_btn"/> <button label="Annullér" name="cancel_btn"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/da/panel_im_control_panel.xml b/indra/newview/skins/default/xui/da/panel_im_control_panel.xml index 1ba6b8b97f..be9bfab1f6 100644 --- a/indra/newview/skins/default/xui/da/panel_im_control_panel.xml +++ b/indra/newview/skins/default/xui/da/panel_im_control_panel.xml @@ -13,7 +13,7 @@ <layout_panel name="share_btn_panel"> <button label="Del" name="share_btn"/> </layout_panel> - <layout_panel name="share_btn_panel"> + <layout_panel name="pay_btn_panel"> <button label="Betal" name="pay_btn"/> </layout_panel> <layout_panel name="call_btn_panel"> diff --git a/indra/newview/skins/default/xui/da/panel_landmarks.xml b/indra/newview/skins/default/xui/da/panel_landmarks.xml index 8adce2c819..9a0a2fb207 100644 --- a/indra/newview/skins/default/xui/da/panel_landmarks.xml +++ b/indra/newview/skins/default/xui/da/panel_landmarks.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="Landmarks"> <accordion name="landmarks_accordion"> - <accordion_tab name="tab_favorites" title="Favorites bjælke"/> + <accordion_tab name="tab_favorites" title="Favoritter"/> <accordion_tab name="tab_landmarks" title="Mine landmærker"/> <accordion_tab name="tab_inventory" title="Min beholdning"/> <accordion_tab name="tab_library" title="Bibliotek"/> diff --git a/indra/newview/skins/default/xui/da/panel_main_inventory.xml b/indra/newview/skins/default/xui/da/panel_main_inventory.xml index ac3a2844db..16bd22c21a 100644 --- a/indra/newview/skins/default/xui/da/panel_main_inventory.xml +++ b/indra/newview/skins/default/xui/da/panel_main_inventory.xml @@ -1,18 +1,14 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Ting" name="main inventory panel"> - <panel.string name="Title"> - Ting + <panel.string name="ItemcountFetching"> + Henter [ITEM_COUNT] Genstande... [FILTER] </panel.string> - <filter_editor label="Filter" name="inventory search editor"/> - <tab_container name="inventory filter tabs"> - <inventory_panel label="Alle ting" name="All Items"/> - <inventory_panel label="Nye ting" name="Recent Items"/> - </tab_container> - <panel name="bottom_panel"> - <button name="options_gear_btn" tool_tip="Vis flere valgmuligheder"/> - <button name="add_btn" tool_tip="Opret ny genstand"/> - <dnd_button name="trash_btn" tool_tip="Fjern valgt genstand"/> - </panel> + <panel.string name="ItemcountCompleted"> + [ITEM_COUNT] Genstande [FILTER] + </panel.string> + <text name="ItemcountText"> + Genstande: + </text> <menu_bar name="Inventory Menu"> <menu label="Filer" name="File"> <menu_item_call label="Åben" name="Open"/> @@ -61,4 +57,14 @@ <menu_item_check label="System-mapper i toppen" name="System Folders To Top"/> </menu> </menu_bar> + <filter_editor label="Filter" name="inventory search editor"/> + <tab_container name="inventory filter tabs"> + <inventory_panel label="Alle ting" name="All Items"/> + <inventory_panel label="Nye ting" name="Recent Items"/> + </tab_container> + <panel name="bottom_panel"> + <button name="options_gear_btn" tool_tip="Vis flere valgmuligheder"/> + <button name="add_btn" tool_tip="Opret ny genstand"/> + <dnd_button name="trash_btn" tool_tip="Fjern valgt genstand"/> + </panel> </panel> diff --git a/indra/newview/skins/default/xui/da/panel_navigation_bar.xml b/indra/newview/skins/default/xui/da/panel_navigation_bar.xml index 79f7e81b35..2ee87433a4 100644 --- a/indra/newview/skins/default/xui/da/panel_navigation_bar.xml +++ b/indra/newview/skins/default/xui/da/panel_navigation_bar.xml @@ -11,7 +11,7 @@ </panel> <favorites_bar name="favorite" tool_tip="Træk landemærker hertil for at få hurtig adgang til dine favoritsteder i Second Life!"> <label name="favorites_bar_label" tool_tip="Træk landemærker hertil for at få hurtig adgang til dine favoritsteder i Second Life!"> - Favorit bar + Favoritter </label> <chevron_button name=">>" tool_tip="Søg mere af mine favoritter"/> </favorites_bar> diff --git a/indra/newview/skins/default/xui/da/panel_nearby_media.xml b/indra/newview/skins/default/xui/da/panel_nearby_media.xml index 32905a2deb..7a8b5a6389 100644 --- a/indra/newview/skins/default/xui/da/panel_nearby_media.xml +++ b/indra/newview/skins/default/xui/da/panel_nearby_media.xml @@ -19,10 +19,17 @@ <button label="Mere >>" label_selected="Mindre <<" name="more_less_btn" tool_tip="Avanceret opsætning"/> </panel> <panel name="nearby_media_panel"> + <text name="nearby_media"> + Media i nærheden + </text> + <text name="show"> + Vis: + </text> <combo_box name="show_combo"> <combo_box.item label="Overalt" name="All"/> <combo_box.item label="På dette sted" name="WithinParcel"/> <combo_box.item label="Udenfor dette sted" name="OutsideParcel"/> + <combo_box.item label="På andre avatarer" name="OnOthers"/> </combo_box> <scroll_list name="media_list"> <scroll_list.columns label="I nærheden" name="media_proximity"/> @@ -31,7 +38,7 @@ <scroll_list.columns label="Navn" name="media_name"/> <scroll_list.columns label="Debug" name="media_debug"/> </scroll_list> - <panel> + <panel name="media_controls_panel"> <layout_stack name="media_controls"> <layout_panel name="stop"> <button name="stop_btn" tool_tip="Stop valgte medie"/> diff --git a/indra/newview/skins/default/xui/da/panel_people.xml b/indra/newview/skins/default/xui/da/panel_people.xml index ecfac67b1a..93aac7d08b 100644 --- a/indra/newview/skins/default/xui/da/panel_people.xml +++ b/indra/newview/skins/default/xui/da/panel_people.xml @@ -7,6 +7,8 @@ <string name="no_friends" value="Ingen venner"/> <string name="people_filter_label" value="Filtrér personer"/> <string name="groups_filter_label" value="Filtrér grupper"/> + <string name="no_filtered_groups_msg" value="[secondlife:///app/search/groups Try finding the group in search?]"/> + <string name="no_groups_msg" value="[secondlife:///app/search/groups Try searching for some groups to join.]"/> <filter_editor label="Filtrér" name="filter_input"/> <tab_container name="tabs"> <panel label="TÆT PÅ" name="nearby_panel"> diff --git a/indra/newview/skins/default/xui/da/panel_place_profile.xml b/indra/newview/skins/default/xui/da/panel_place_profile.xml index c1ed95f580..05ef22328f 100644 --- a/indra/newview/skins/default/xui/da/panel_place_profile.xml +++ b/indra/newview/skins/default/xui/da/panel_place_profile.xml @@ -48,10 +48,63 @@ <text name="owner_label" value="Ejer:"/> <text name="maturity_value" value="ukendt"/> <accordion name="advanced_info_accordion"> - <accordion_tab name="parcel_characteristics_tab" title="Parcel"/> - <accordion_tab name="region_information_tab" title="Region"/> - <accordion_tab name="estate_information_tab" title="Estate"/> - <accordion_tab name="sales_tab" title="Til salg"/> + <accordion_tab name="parcel_characteristics_tab" title="Parcel"> + <panel name="parcel_characteristics_panel"> + <text name="rating_label" value="Rating:"/> + <text name="rating_value" value="ukendt"/> + <text name="voice_label" value="Stemme:"/> + <text name="voice_value" value="Til"/> + <text name="fly_label" value="Flyv:"/> + <text name="fly_value" value="Til"/> + <text name="push_label" value="Skub:"/> + <text name="push_value" value="Fra"/> + <text name="build_label" value="Bygge:"/> + <text name="build_value" value="Til"/> + <text name="scripts_label" value="Scripts:"/> + <text name="scripts_value" value="Til"/> + <text name="damage_label" value="Skade:"/> + <text name="damage_value" value="Fra"/> + <button label="Om land" name="about_land_btn"/> + </panel> + </accordion_tab> + <accordion_tab name="region_information_tab" title="Region"> + <panel name="region_information_panel"> + <text name="region_name_label" value="Region:"/> + <text name="region_name" value="Mooseland"/> + <text name="region_type_label" value="Type:"/> + <text name="region_type" value="Moose"/> + <text name="region_rating_label" value="Rating:"/> + <text name="region_rating" value="Voksent"/> + <text name="region_owner_label" value="Ejer:"/> + <text name="region_owner" value="moose Van Moose"/> + <text name="region_group_label" value="Gruppe:"/> + <text name="region_group"> + The Mighty Moose of mooseville soundvillemoose + </text> + <button label="Region/Estate" name="region_info_btn"/> + </panel> + </accordion_tab> + <accordion_tab name="estate_information_tab" title="Estate"> + <panel name="estate_information_panel"> + <text name="estate_name_label" value="Estate:"/> + <text name="estate_rating_label" value="Rating:"/> + <text name="estate_owner_label" value="Ejer:"/> + <text name="covenant_label" value="Regler:"/> + </panel> + </accordion_tab> + <accordion_tab name="sales_tab" title="Til salg"> + <panel name="sales_panel"> + <text name="sales_price_label" value="Pris:"/> + <text name="area_label" value="Areal:"/> + <text name="traffic_label" value="Trafik:"/> + <text name="primitives_label" value="Prims:"/> + <text name="parcel_scripts_label" value="Scripts:"/> + <text name="terraform_limits_label" value="Begræns terrænredigering:"/> + <text name="subdivide_label" value="Opdel/saml mulighed:"/> + <text name="resale_label" value="Mulighed for videresalg:"/> + <text name="sale_to_label" value="Til salg til:"/> + </panel> + </accordion_tab> </accordion> </panel> </scroll_container> diff --git a/indra/newview/skins/default/xui/da/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/da/panel_preferences_advanced.xml index 30665dfa0e..1570960745 100644 --- a/indra/newview/skins/default/xui/da/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/da/panel_preferences_advanced.xml @@ -3,6 +3,9 @@ <panel.string name="aspect_ratio_text"> [NUM]:[DEN] </panel.string> + <panel.string name="middle_mouse"> + Midterste mus + </panel.string> <slider label="Synsvinkel" name="camera_fov"/> <slider label="Distance" name="camera_offset_scale"/> <text name="heading2"> @@ -15,7 +18,7 @@ <check_box label="Tast-tast-hold for at løbe" name="tap_tap_hold_to_run"/> <check_box label="Bevæg avatarlæber når der tales" name="enable_lip_sync"/> <check_box label="Talebobler" name="bubble_text_chat"/> - <slider label="Gennemsigtighed" name="bubble_chat_opacity"/> + <slider label="Synlighed" name="bubble_chat_opacity"/> <color_swatch name="background" tool_tip="Vælg farve for talebobler"/> <check_box label="Vis script fejl i:" name="show_script_errors"/> <radio_group name="show_location"> diff --git a/indra/newview/skins/default/xui/da/panel_preferences_chat.xml b/indra/newview/skins/default/xui/da/panel_preferences_chat.xml index 3345bceff7..df97193598 100644 --- a/indra/newview/skins/default/xui/da/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/da/panel_preferences_chat.xml @@ -1,10 +1,16 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Tekst chat" name="chat"> + <text name="font_size"> + Skriftstørrelse: + </text> <radio_group name="chat_font_size"> <radio_item label="Lille" name="radio" value="0"/> <radio_item label="Mellem" name="radio2" value="1"/> <radio_item label="Stor" name="radio3" value="2"/> </radio_group> + <text name="font_colors"> + Skriftfarve: + </text> <color_swatch label="Dig" name="user"/> <text name="text_box1"> Dig @@ -39,6 +45,12 @@ </text> <check_box initial_value="true" label="Afspil skrive animation ved chat" name="play_typing_animation"/> <check_box label="Send e-mail til mig når jeg modtager IM og er offline" name="send_im_to_email"/> + <text name="show_ims_in_label"> + Vis IM'er i: + </text> + <text name="requires_restart_label"> + (kræver genstart) + </text> <radio_group name="chat_window" tool_tip="Vise dine personlige beskeder i separate vinduer, eller i ét vindue med flere faner (Kræver genstart)"> <radio_item label="Separate vinduer" name="radio" value="0"/> <radio_item label="Faner" name="radio2" value="1"/> diff --git a/indra/newview/skins/default/xui/da/panel_preferences_general.xml b/indra/newview/skins/default/xui/da/panel_preferences_general.xml index f2c59f3d81..e70cb48262 100644 --- a/indra/newview/skins/default/xui/da/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/da/panel_preferences_general.xml @@ -23,7 +23,7 @@ <text name="maturity_desired_textbox"/> <combo_box name="maturity_desired_combobox"> <combo_box.item label="PG, Mature og Adult" name="Desired_Adult"/> - <combo_box.item label="PG and Mature" name="Desired_Mature"/> + <combo_box.item label="PG og Mature" name="Desired_Mature"/> <combo_box.item label="PG" name="Desired_PG"/> </combo_box> <text name="start_location_textbox"> diff --git a/indra/newview/skins/default/xui/da/panel_preferences_setup.xml b/indra/newview/skins/default/xui/da/panel_preferences_setup.xml index 279e288096..8202c78947 100644 --- a/indra/newview/skins/default/xui/da/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/da/panel_preferences_setup.xml @@ -34,9 +34,12 @@ Web: </text> <radio_group name="use_external_browser"> - <radio_item label="Benyt den indbyggede browser" name="internal" tool_tip="Brug den indbyggede web browser til hjælp, web links m.v. Denne browser åbner et nyt vindue i [APP_NAME]." value="0"/> <radio_item label="Benyt min browser(IE, Firefox, Safari)" name="external" tool_tip="Brug systemets standard web browser til hjælp, web links, m.v. Ikke anbefalet hvis du kører i fuld-skærm." value="1"/> + <radio_item label="Benyt den indbyggede browser" name="internal" tool_tip="Brug den indbyggede web browser til hjælp, web links m.v. Denne browser åbner et nyt vindue i [APP_NAME]." value=""/> </radio_group> + <check_box initial_value="sand" label="Aktivér plugins" name="browser_plugins_enabled"/> + <check_box initial_value="sand" label="Acceptér cookies" name="cookies_enabled"/> + <check_box initial_value="sand" label="Aktivér Javascript" name="browser_javascript_enabled"/> <check_box initial_value="false" label="Aktivér web proxy" name="web_proxy_enabled"/> <text name="Proxy location"> Proxy placering: diff --git a/indra/newview/skins/default/xui/da/panel_region_covenant.xml b/indra/newview/skins/default/xui/da/panel_region_covenant.xml index 564d8e6665..4b9c7539ea 100644 --- a/indra/newview/skins/default/xui/da/panel_region_covenant.xml +++ b/indra/newview/skins/default/xui/da/panel_region_covenant.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Covenant" name="Covenant"> +<panel label="Regler" name="Covenant"> <text name="estate_section_lbl"> Estate </text> diff --git a/indra/newview/skins/default/xui/da/panel_region_estate.xml b/indra/newview/skins/default/xui/da/panel_region_estate.xml index c21fd9db37..65948ce481 100644 --- a/indra/newview/skins/default/xui/da/panel_region_estate.xml +++ b/indra/newview/skins/default/xui/da/panel_region_estate.xml @@ -39,7 +39,7 @@ </string> <button label="?" name="abuse_email_address_help"/> <button label="Gem" name="apply_btn"/> - <button label="Smid bruger ud fra estate..." name="kick_user_from_estate_btn"/> + <button label="Fjern en beboer fra estate..." name="kick_user_from_estate_btn"/> <button label="Send besked til estate..." name="message_estate_btn"/> <text name="estate_manager_label"> Administratorer: diff --git a/indra/newview/skins/default/xui/da/panel_region_general.xml b/indra/newview/skins/default/xui/da/panel_region_general.xml index 6ffe1f34f3..5b5dd411ac 100644 --- a/indra/newview/skins/default/xui/da/panel_region_general.xml +++ b/indra/newview/skins/default/xui/da/panel_region_general.xml @@ -19,35 +19,25 @@ ukendt </text> <check_box label="Blokér for redigering af terræn" name="block_terraform_check"/> - <button label="?" name="terraform_help"/> <check_box label="Blokér for flyvning" name="block_fly_check"/> - <button label="?" name="fly_help"/> <check_box label="Tillad skader" name="allow_damage_check"/> - <button label="?" name="damage_help"/> <check_box label="Begræns skubning" name="restrict_pushobject"/> - <button label="?" name="restrict_pushobject_help"/> <check_box label="Tillad at sælge land" name="allow_land_resell_check"/> - <button label="?" name="land_resell_help"/> <check_box label="Tillad at samle/dele land" name="allow_parcel_changes_check"/> - <button label="?" name="parcel_changes_help"/> <check_box label="Blokér visning af land i Søgning" name="block_parcel_search_check" tool_tip="Lad beboere se denne region og dens parceller i søgeresultater"/> - <button label="?" name="parcel_search_help"/> <spinner label="Max besøgende" name="agent_limit_spin"/> - <button label="?" name="agent_limit_help"/> <spinner label="Objekt bonus" name="object_bonus_spin"/> - <button label="?" name="object_bonus_help"/> <text label="Indhold" name="access_text"> Rating: </text> - <combo_box label="Mature" name="access_combo"> - <combo_box.item label="Adult" name="Adult"/> - <combo_box.item label="Mature" name="Mature"/> - <combo_box.item label="PG" name="PG"/> - </combo_box> - <button label="?" name="access_help"/> + <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="PG" name="PG" value="13"/> + </icons_combo_box> <button label="Gem" name="apply_btn"/> - <button label="Send en beboer hjem ..." name="kick_btn"/> - <button label="Send alle beboere hjem..." name="kick_all_btn"/> + <button label="Teleportér en beboer hjem..." name="kick_btn"/> + <button label="Teleportér alle beboere hjem..." name="kick_all_btn"/> <button label="Send besked til region..." name="im_btn"/> <button label="Vedligehold telehub..." name="manage_telehub_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/da/panel_region_general_layout.xml b/indra/newview/skins/default/xui/da/panel_region_general_layout.xml index 467684f712..f3c32d6169 100644 --- a/indra/newview/skins/default/xui/da/panel_region_general_layout.xml +++ b/indra/newview/skins/default/xui/da/panel_region_general_layout.xml @@ -36,8 +36,8 @@ <combo_box.item label="Generel" name="PG"/> </combo_box> <button label="Gem" name="apply_btn"/> - <button label="Send en beboer hjem ..." name="kick_btn"/> - <button label="Send alle beboere hjem..."" name="kick_all_btn"/> + <button label="Teleportér en beboer hjem..." name="kick_btn"/> + <button label="Teleportér alle beboere hjem..." name="kick_all_btn"/> <button label="Send besked til region..." name="im_btn"/> <button label="Vedligehold telehub..." name="manage_telehub_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/da/panel_region_texture.xml b/indra/newview/skins/default/xui/da/panel_region_texture.xml index 8e324ab777..45946fd222 100644 --- a/indra/newview/skins/default/xui/da/panel_region_texture.xml +++ b/indra/newview/skins/default/xui/da/panel_region_texture.xml @@ -25,16 +25,16 @@ Texture højde intervaller </text> <text name="height_text_lbl6"> - Sydvest + Nordvest </text> <text name="height_text_lbl7"> - Nordvest + Nordøst </text> <text name="height_text_lbl8"> - Sydøst + Sydvest </text> <text name="height_text_lbl9"> - Nordøst + Sydøst </text> <spinner label="Lav" name="height_start_spin_0"/> <spinner label="Lav" name="height_start_spin_1"/> diff --git a/indra/newview/skins/default/xui/da/panel_side_tray.xml b/indra/newview/skins/default/xui/da/panel_side_tray.xml index ec430d6fd4..66c3e69904 100644 --- a/indra/newview/skins/default/xui/da/panel_side_tray.xml +++ b/indra/newview/skins/default/xui/da/panel_side_tray.xml @@ -3,27 +3,27 @@ partially on screen to hold tab buttons. --> <side_tray name="sidebar"> <sidetray_tab description="Åbn/luk sidebar" name="sidebar_openclose" tab_title="Åbn/luk sidebar"/> - <sidetray_tab description="Hjem." name="sidebar_home" tab_title="Home"> + <sidetray_tab description="Hjem." name="sidebar_home" tab_title="Hjem"> <panel label="hjem" name="panel_home"/> </sidetray_tab> - <sidetray_tab description="Redigér din profile og favoritter." name="sidebar_me" tab_title="My Profile"> + <sidetray_tab description="Redigér din profile og favoritter." name="sidebar_me" tab_title="Min profil"> <panel_container name="panel_container"> <panel label="Mig" name="panel_me"/> </panel_container> </sidetray_tab> - <sidetray_tab description="Find venner, kontakter og personer tæt på." name="sidebar_people" tab_title="People"> + <sidetray_tab description="Find venner, kontakter og personer tæt på." name="sidebar_people" tab_title="Personer"> <panel_container name="panel_container"> <panel label="Gruppe profil" name="panel_group_info_sidetray"/> <panel label="Blokerede beboere og objekter" name="panel_block_list_sidetray"/> </panel_container> </sidetray_tab> - <sidetray_tab description="Find steder du vil hen og steder du har været før." label="Steder" name="sidebar_places" tab_title="Places"> + <sidetray_tab description="Find steder du vil hen og steder du har været før." label="Steder" name="sidebar_places" tab_title="Steder"> <panel label="Steder" name="panel_places"/> </sidetray_tab> - <sidetray_tab description="Browse din beholdning." name="sidebar_inventory" tab_title="My Inventory"> + <sidetray_tab description="Browse din beholdning." name="sidebar_inventory" tab_title="Min beholdning"> <panel label="Redigér beholdning" name="sidepanel_inventory"/> </sidetray_tab> - <sidetray_tab description="Ændre dit nuværende udseende" name="sidebar_appearance" tab_title="My Appearance"> - <panel label="Redigér fremtoning" name="sidepanel_appearance"/> + <sidetray_tab description="Ændre dit nuværende udseende" name="sidebar_appearance" tab_title="Mit udseende"> + <panel label="Redigér udseende" name="sidepanel_appearance"/> </sidetray_tab> </side_tray> diff --git a/indra/newview/skins/default/xui/da/panel_status_bar.xml b/indra/newview/skins/default/xui/da/panel_status_bar.xml index 08ffafd5a6..4618fe536d 100644 --- a/indra/newview/skins/default/xui/da/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/da/panel_status_bar.xml @@ -22,7 +22,7 @@ L$ [AMT] </panel.string> <button label="" label_selected="" name="buycurrency" tool_tip="Min balance"/> - <button label="Køb L$" name="buyL" tool_tip="Klik for at købe flere L$"/> + <button label="Køb" name="buyL" tool_tip="Klik for at købe flere L$"/> <text name="TimeText" tool_tip="Nuværende tid (Pacific)"> 24:00 PST </text> diff --git a/indra/newview/skins/default/xui/da/panel_teleport_history.xml b/indra/newview/skins/default/xui/da/panel_teleport_history.xml index a1859b64d8..8a01659ffa 100644 --- a/indra/newview/skins/default/xui/da/panel_teleport_history.xml +++ b/indra/newview/skins/default/xui/da/panel_teleport_history.xml @@ -13,6 +13,6 @@ <accordion_tab name="6_months_and_older" title="6 måneder eller ældre"/> </accordion> <panel name="bottom_panel"> - <button name="gear_btn" tool_tip="Vi flere valgmuligheder"/> + <button name="gear_btn" tool_tip="Vis flere valgmuligheder"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/da/sidepanel_item_info.xml b/indra/newview/skins/default/xui/da/sidepanel_item_info.xml index 77db828c20..701a59bade 100644 --- a/indra/newview/skins/default/xui/da/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/da/sidepanel_item_info.xml @@ -42,27 +42,27 @@ <text name="perm_modify"> Du kan: </text> - <check_box label="Redigér" name="CheckOwnerModify"/> - <check_box label="Kopi" name="CheckOwnerCopy"/> - <check_box label="Giv væk" name="CheckOwnerTransfer"/> + <check_box label="Redigere" name="CheckOwnerModify"/> + <check_box label="Kopiere" name="CheckOwnerCopy"/> + <check_box label="Give væk" name="CheckOwnerTransfer"/> <text name="AnyoneLabel"> Enhver: </text> - <check_box label="Kopi" name="CheckEveryoneCopy"/> + <check_box label="Kopiere" name="CheckEveryoneCopy"/> <text name="GroupLabel"> Gruppe: </text> - <check_box label="Del" name="CheckShareWithGroup" tool_tip="Tillad alle medlemmer i den aktive gruppe at dele dine 'redigere' rettigheder for dette objekt. Du skal dedikere for at åbne for rolle begrænsninger."/> + <check_box label="Dele" name="CheckShareWithGroup" tool_tip="Tillad alle medlemmer i den aktive gruppe at dele dine 'redigere' rettigheder for dette objekt. Du skal dedikere for at åbne for rolle begrænsninger."/> <text name="NextOwnerLabel"> Næste ejer: </text> <check_box label="Redigere" name="CheckNextOwnerModify"/> - <check_box label="Kopi" name="CheckNextOwnerCopy"/> - <check_box label="Giv væk" name="CheckNextOwnerTransfer" tool_tip="Næste ejer kan give væk eller sælge dette objekt"/> + <check_box label="Kopiere" name="CheckNextOwnerCopy"/> + <check_box label="Give væk" name="CheckNextOwnerTransfer" tool_tip="Næste ejer kan give væk eller sælge dette objekt"/> </panel> <check_box label="Til salg" name="CheckPurchase"/> <combo_box name="combobox sale copy"> - <combo_box.item label="Kopiér" name="Copy"/> + <combo_box.item label="Kopi" name="Copy"/> <combo_box.item label="Original" name="Original"/> </combo_box> <spinner label="Pris: L$" name="Edit Cost"/> diff --git a/indra/newview/skins/default/xui/da/sidepanel_task_info.xml b/indra/newview/skins/default/xui/da/sidepanel_task_info.xml index add2fa3c73..bec97734e4 100644 --- a/indra/newview/skins/default/xui/da/sidepanel_task_info.xml +++ b/indra/newview/skins/default/xui/da/sidepanel_task_info.xml @@ -38,16 +38,41 @@ </panel.string> <text name="title" value="Objekt profil"/> <text name="where" value="(verden)"/> - <panel label=""> + <panel label="" name="properties_panel"> + <text name="Name:"> + Navn: + </text> + <text name="Description:"> + Beskrivelse: + </text> <text name="CreatorNameLabel"> - Skaber + Skaber: </text> <text name="Creator Name"> Erica Linden </text> + <text name="Owner:"> + Ejer: + </text> + <text name="Owner Name"> + Erica Linden + </text> <text name="Group_label"> Gruppe: </text> + <button name="button set group" tool_tip="Vælg en gruppe for at dele dette objekts rettigheder"/> + <name_box initial_value="Henter..." name="Group Name Proxy"/> + <button label="Dedikér" label_selected="Dedikér" name="button deed" tool_tip="Dedikering giver denne genstand væk med den næste ejers rettigheder. Gruppe delte objekter kan dedikeres af en gruppe administrator."/> + <text name="label click action"> + Klik for at: + </text> + <combo_box name="clickaction"> + <combo_box.item label="Berøre (standard)" name="Touch/grab(default)"/> + <combo_box.item label="Sidde på objekt" name="Sitonobject"/> + <combo_box.item label="Købe objekt" name="Buyobject"/> + <combo_box.item label="Betale objekt" name="Payobject"/> + <combo_box.item label="Åbne" name="Open"/> + </combo_box> <panel name="perms_inv"> <text name="perm_modify"> Du kan redigere dette objekt @@ -55,31 +80,38 @@ <text name="Anyone can:"> Enhver: </text> - <check_box label="Kopi" name="checkbox allow everyone copy"/> - <check_box label="Flyt" name="checkbox allow everyone move"/> + <check_box label="Kopiere" name="checkbox allow everyone copy"/> + <check_box label="Flytte" name="checkbox allow everyone move"/> <text name="GroupLabel"> Gruppe: </text> - <check_box label="Del" name="checkbox share with group" tool_tip="Tillad alle medlemmer i den aktive gruppe at dele dine 'rediger' rettigheder for dette objekt. Du skal dedikere for at åbne for rolle begrænsninger."/> + <check_box label="Dele" name="checkbox share with group" tool_tip="Tillad alle gruppemedlemmer i den valgte gruppe at dele dine redigeringsrettigheder for dette objekt. Du skal dedikere for at aktivere rollebegrænsninger"/> <text name="NextOwnerLabel"> Næste ejer: </text> <check_box label="Redigere" name="checkbox next owner can modify"/> - <check_box label="Kopi" name="checkbox next owner can copy"/> - <check_box label="Give væk" name="checkbox next owner can transfer" tool_tip="Næste ejer kan give væk eller sælge objekt"/> + <check_box label="Kopiere" name="checkbox next owner can copy"/> + <check_box label="Overføre" name="checkbox next owner can transfer" tool_tip="Næste ejer kan give væk eller sælge dette objekt"/> </panel> <check_box label="Til salg" name="checkbox for sale"/> + <combo_box name="sale type"> + <combo_box.item label="Kopi" name="Copy"/> + <combo_box.item label="Indhold" name="Contents"/> + <combo_box.item label="Original" name="Original"/> + </combo_box> + <spinner label="Pris: L$" name="Edit Cost"/> + <check_box label="Vis i søgning" name="search_check" tool_tip="Lad personer se dette objekt i søgeresultater"/> <text name="B:"> - B: + S: </text> <text name="O:"> - O: + E: </text> <text name="G:"> G: </text> <text name="E:"> - E: + A: </text> <text name="N:"> N: @@ -92,5 +124,6 @@ <button label="Åben" name="open_btn"/> <button label="Betal" name="pay_btn"/> <button label="Køb" name="buy_btn"/> + <button label="Detaljer" name="details_btn"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/da/strings.xml b/indra/newview/skins/default/xui/da/strings.xml index 412f946acc..37501a3534 100644 --- a/indra/newview/skins/default/xui/da/strings.xml +++ b/indra/newview/skins/default/xui/da/strings.xml @@ -14,7 +14,22 @@ Detekterer hardware... </string> <string name="StartupLoading"> - Indlæser + Henter [APP_NAME]... + </string> + <string name="StartupClearingCache"> + Tømmer cache... + </string> + <string name="StartupInitializingTextureCache"> + Initialiserer tekstur cache... + </string> + <string name="StartupInitializingVFS"> + Initialiserer VFS... + </string> + <string name="ProgressRestoring"> + Gendanner... + </string> + <string name="ProgressChangingResolution"> + Ændrer opløsning... </string> <string name="LoginInProgress"> Logger p. [APP_NAME] kan virke laast. Vent venligst. @@ -41,7 +56,7 @@ Klargør multimedia... </string> <string name="LoginInitializingFonts"> - Indlæser fonts... + Indlæser skriftstyper... </string> <string name="LoginVerifyingCache"> Checker cache filer (kan tage 60-90 sekunder)... @@ -76,12 +91,33 @@ <string name="LoginFailedNoNetwork"> Netværksfejl: Kunne ikke etablere forbindelse, check venligst din netværksforbindelse. </string> + <string name="LoginFailed"> + Login fejlede. + </string> <string name="Quit"> Afslut </string> <string name="AgentLostConnection"> Denne region kan have problemer. Tjek venligst din forbindelse til internettet. </string> + <string name="SavingSettings"> + Gemmer indstillinger... + </string> + <string name="LoggingOut"> + Logger ud... + </string> + <string name="ShuttingDown"> + Lukker ned... + </string> + <string name="YouHaveBeenDisconnected"> + Du er blevet frakoblet den region du var i. + </string> + <string name="SentToInvalidRegion"> + Du blev sendt til en ugyldig region. + </string> + <string name="TestingDisconnect"> + Tester frakobling af klient + </string> <string name="TooltipPerson"> Person </string> @@ -136,6 +172,24 @@ <string name="TooltipAgentUrl"> Klik for at se beboers profil </string> + <string name="TooltipAgentMute"> + Klik for at slukke for denne beboer + </string> + <string name="TooltipAgentUnmute"> + Klik for at fjern slukning for denne beboer + </string> + <string name="TooltipAgentIM"> + Klik for at sende IM til denne beboer + </string> + <string name="TooltipAgentPay"> + Klik for at betale denne beboer + </string> + <string name="TooltipAgentOfferTeleport"> + Klik for at tilbyde teleport til denne beboer + </string> + <string name="TooltipAgentRequestFriend"> + Klik for at sende venneforespørgsel + </string> <string name="TooltipGroupUrl"> Klik for at se denne gruppes beskrivelse </string> @@ -161,12 +215,31 @@ Klik for at starte secondlife:// kommando </string> <string name="CurrentURL" value=" Nuværende URL: [CurrentURL]"/> + <string name="TooltipPrice" value="L$[PRICE]-"/> <string name="SLurlLabelTeleport"> Teleportér til </string> <string name="SLurlLabelShowOnMap"> Vis kort for </string> + <string name="SLappAgentMute"> + Sluk + </string> + <string name="SLappAgentUnmute"> + Fjern sluk + </string> + <string name="SLappAgentIM"> + IM + </string> + <string name="SLappAgentPay"> + Betal + </string> + <string name="SLappAgentOfferTeleport"> + Tilbyd teleport til + </string> + <string name="SLappAgentRequestFriend"> + Venneforespørgsel + </string> <string name="BUTTON_CLOSE_DARWIN"> Luk (⌘W) </string> @@ -317,6 +390,9 @@ <string name="symbolic link"> link </string> + <string name="symbolic folder link"> + link til mappe + </string> <string name="AvatarAway"> Væk </string> @@ -734,6 +810,9 @@ <string name="invalid"> ugyldig </string> + <string name="NewWearable"> + Ny [WEARABLE_ITEM] + </string> <string name="next"> Næste </string> @@ -765,7 +844,7 @@ Teleport tilbud </string> <string name="StartUpNotifications"> - %d nye beskeder modtaget mens du var væk...... + Nye beskeder modtaget mens du var væk...... </string> <string name="OverflowInfoChannelString"> Du har %d mere besked(er) @@ -813,8 +892,8 @@ <string name="no_modify" value=" (ikke redigere)"/> <string name="no_copy" value=" (ikke kopiere)"/> <string name="worn" value=" (båret)"/> - <string name="link" value=" (sammenkæde)"/> - <string name="broken_link" value=" (brudt_kæde)"/> + <string name="link" value=" (link)"/> + <string name="broken_link" value=" (brudt link)"/> <string name="LoadingContents"> Henter indhold... </string> @@ -822,6 +901,7 @@ Intet indhold </string> <string name="WornOnAttachmentPoint" value=" (båret på [ATTACHMENT_POINT])"/> + <string name="ActiveGesture" value="[GESLABEL] (aktiv)"/> <string name="Chat" value=" Chat : "/> <string name="Sound" value=" Lyd : "/> <string name="Wait" value=" --- Vent : "/> @@ -915,6 +995,9 @@ <string name="InvFolder My Outfits"> Mine sæt </string> + <string name="InvFolder Accessories"> + Tilbehør + </string> <string name="InvFolder Friends"> Venner </string> @@ -1432,6 +1515,12 @@ <string name="PanelContentsNewScript"> Nyt script </string> + <string name="PanelContentsTooltip"> + Indhold i objekt + </string> + <string name="BusyModeResponseDefault"> + Beboeren du sendte en besked er 'optaget', hvilket betyder at han/hun ikke vil forstyrres. Din besked vil blive vis i hans/hendes IM panel til senere visning. + </string> <string name="MuteByName"> (efter navn) </string> @@ -1546,7 +1635,10 @@ Annullér </string> <string name="UploadingCosts"> - Uploader [%s] omkostninger + Uploader [NAME] pris L$ [AMOUNT] + </string> + <string name="BuyingCosts"> + At købe dette koster L$ [AMOUNT] </string> <string name="UnknownFileExtension"> Ukendt fil efternavn [.%s] @@ -1703,7 +1795,7 @@ Forventet .wav, .tga, .bmp, .jpg, .jpeg, or .bvh Enhver </string> <string name="You"> - Dig + Du </string> <string name="Multiple Media"> Flere medietyper @@ -2512,7 +2604,7 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE]. Mere </string> <string name="More Gravity"> - More + Mere </string> <string name="More Lipstick"> Mere læbestift @@ -3184,10 +3276,10 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE]. (Moderator) </string> <string name="started_call"> - Startet et stemme opkald + startede et stemme opkald </string> <string name="joined_call"> - Tilsluttet stemme opkaldet + tilsluttede stemme opkald </string> <string name="ringing-im"> Tilslutter stemme opkald... @@ -3264,4 +3356,120 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE]. <string name="unread_chat_multiple"> [SOURCES] har sagt noget nyt </string> + <string name="paid_you_ldollars"> + [NAME] betalte dig L$[AMOUNT] + </string> + <string name="you_paid_ldollars"> + Du betalte [NAME] L$[AMOUNT] [REASON]. + </string> + <string name="you_paid_ldollars_no_reason"> + Du betalte [NAME] L$[AMOUNT]. + </string> + <string name="you_paid_ldollars_no_name"> + Du betalte L$[AMOUNT] [REASON]. + </string> + <string name="for a parcel of land"> + for en parcel land + </string> + <string name="for a land access pass"> + for en billet til land + </string> + <string name="for deeding land"> + for dedikering af land + </string> + <string name="to create a group"> + for at oprette gruppe + </string> + <string name="to join a group"> + for at blive medlem i gruppe + </string> + <string name="to upload"> + for at uploade + </string> + <string name="giving"> + Giver L$ [AMOUNT] + </string> + <string name="uploading_costs"> + Pris for upload er L$ [AMOUNT] + </string> + <string name="this_costs"> + Prisen er L$ [AMOUNT] + </string> + <string name="buying_selected_land"> + Køber valgte land L$ [AMOUNT] + </string> + <string name="this_object_costs"> + Dette objekt koster L$ [AMOUNT] + </string> + <string name="group_role_everyone"> + Enhver + </string> + <string name="group_role_officers"> + Administratorer + </string> + <string name="group_role_owners"> + Ejere + </string> + <string name="uploading_abuse_report"> + Uploader... + +Krænkelsesanmeldelse + </string> + <string name="New Shape"> + Ny kropsbygning + </string> + <string name="New Skin"> + Ny hud + </string> + <string name="New Hair"> + Nyt hår + </string> + <string name="New Eyes"> + Nye øjne + </string> + <string name="New Shirt"> + Ny trøje + </string> + <string name="New Pants"> + Nye bukser + </string> + <string name="New Shoes"> + Nye sko + </string> + <string name="New Socks"> + Nye strømper + </string> + <string name="New Jacket"> + Ny jakke + </string> + <string name="New Gloves"> + Nye handsker + </string> + <string name="New Undershirt"> + Ny undertrøje + </string> + <string name="New Underpants"> + Nye underbukser + </string> + <string name="New Skirt"> + Ny nederdel + </string> + <string name="New Alpha"> + Ny alpha + </string> + <string name="New Tattoo"> + Ny tatovering + </string> + <string name="Invalid Wearable"> + Kan ikke tages på + </string> + <string name="New Script"> + Nyt script + </string> + <string name="New Folder"> + Ny folder + </string> + <string name="Contents"> + Indhold + </string> </strings> diff --git a/indra/newview/skins/default/xui/da/teleport_strings.xml b/indra/newview/skins/default/xui/da/teleport_strings.xml index 43f8e5144d..071aab46f4 100644 --- a/indra/newview/skins/default/xui/da/teleport_strings.xml +++ b/indra/newview/skins/default/xui/da/teleport_strings.xml @@ -63,6 +63,9 @@ Prøv evt. igen om lidt. <message name="completing"> Fuldfører teleport. </message> + <message name="completed_from"> + Teleport fuldført fra [T_SLURL] + </message> <message name="resolving"> Finder destination. </message> diff --git a/indra/newview/skins/default/xui/de/floater_about_land.xml b/indra/newview/skins/default/xui/de/floater_about_land.xml index 186c2932c3..5322febe27 100644 --- a/indra/newview/skins/default/xui/de/floater_about_land.xml +++ b/indra/newview/skins/default/xui/de/floater_about_land.xml @@ -24,7 +24,7 @@ <tab_container name="landtab" tab_min_width="40" width="489"> <panel label="ALLGEMEIN" name="land_general_panel"> <panel.string name="new users only"> - Nur neue Einwohner + Nur neue Benutzer </panel.string> <panel.string name="anyone"> Jeder @@ -151,15 +151,13 @@ Gekauftes Land in dieser Region kann nicht wiederverkauft werden. </panel.string> <panel.string name="can_change"> - Gekauftes Land in dieser Region kann zusammengelegt und -geteilt werden. + Gekauftes Land in dieser Region kann zusammengelegt und geteilt werden. </panel.string> <panel.string name="can_not_change"> - Gekauftes Land in dieser Region kann nicht zusammengelegt -und geteilt werden. + Gekauftes Land in dieser Region kann nicht zusammengelegt und geteilt werden. </panel.string> <text name="estate_section_lbl"> - Grundstück: + Grundbesitz: </text> <text name="estate_name_text"> Mainland @@ -171,7 +169,7 @@ und geteilt werden. (keiner) </text> <text_editor name="covenant_editor"> - Für dieses Grundstück fehlt der Vertrag. + Für diesen Grundbesitz fehlt der Vertrag. </text_editor> <text name="covenant_timestamp_text"> Letzte Änderung am Mittwoch, den 31. Dez. 1969, 16:00:00 @@ -278,8 +276,8 @@ werden. <name_list name="owner list"> <name_list.columns label="Typ" name="type"/> <name_list.columns label="Name" name="name"/> - <name_list.columns label="Zählen" name="count" width="80"/> - <name_list.columns label="Aktuellster" name="mostrecent"/> + <name_list.columns label="Anzahl" name="count" width="80"/> + <name_list.columns label="Aktuellstes" name="mostrecent"/> </name_list> </panel> <panel label="OPTIONEN" name="land_options_panel"> @@ -337,8 +335,8 @@ Nur große Parzellen können in der Suche aufgeführt werden. <text name="land_options_label"> Landoptionen: </text> - <check_box label="Sicher (kein Schaden)" name="check safe" tool_tip="Falls aktiviert, wird Land auf Option „Sicher“ eingestellt, Kampfschäden sind deaktiviert. Falls nicht aktiviert, sind Kampfschäden aktiviert."/> - <check_box label="Kein Stoßen" name="PushRestrictCheck" tool_tip="Verhindert Skripte am Stoßen. Durch Aktivieren dieser Option verhindern Sie störendes Verhalten auf Ihrem Land."/> + <check_box label="Sicher (kein Schaden)" name="check safe" tool_tip="Falls aktiviert, wird Land auf Option „Sicher“ eingestellt, Kampfschäden sind deaktiviert. Ansonsten sind Kampfschäden aktiviert."/> + <check_box label="Kein Stoßen" name="PushRestrictCheck" tool_tip="Verhindert Stoßen durch Skripte. Durch Aktivieren dieser Option verhindern Sie störendes Verhalten auf Ihrem Land."/> <check_box label="Ort in Suche anzeigen (30 L$/Woche)" name="ShowDirectoryCheck" tool_tip="Diese Parzelle in Suchergebnissen anzeigen."/> <combo_box name="land category with adult"> <combo_box.item label="Alle Kategorien" name="item0"/> @@ -377,7 +375,7 @@ Nur große Parzellen können in der Suche aufgeführt werden. <text name="landing_point"> Landepunkt: [LANDING] </text> - <button label="Festlegen" label_selected="Festlegen" left="234" name="Set" right="-88" tool_tip="Legt den Landepunkt fest, an dem Besucher ankommen. Legt die Position Ihres Avatars innerhalb dieser Parzelle fest." width="70"/> + <button label="Festlegen" label_selected="Festlegen" left="234" name="Set" right="-88" tool_tip="Legt Ihren Standort als Landepunkt fest, an dem Besucher ankommen. Legt die Position Ihres Avatars innerhalb dieser Parzelle fest." width="70"/> <button label="Löschen" label_selected="Löschen" left="312" name="Clear" tool_tip="Landepunkt löschen" width="70"/> <text name="Teleport Routing: "> Teleport-Route: @@ -396,7 +394,7 @@ Nur große Parzellen können in der Suche aufgeführt werden. <text name="at URL:"> Homepage: </text> - <button label="Festlegen" label_selected="Einstellen..." name="set_media_url"/> + <button label="Festlegen" name="set_media_url"/> <check_box label="URL ausblenden" name="hide_media_url" tool_tip="Aktivieren Sie diese Option, wenn Sie nicht möchten, dass unautorisierte Personen die Medien-URL sehen können. Diese Option ist für HTML-Medien nicht verfügbar."/> <text name="Description:"> Inhalt: @@ -436,15 +434,18 @@ Nur große Parzellen können in der Suche aufgeführt werden. Voice: </text> <check_box label="Voice aktivieren" name="parcel_enable_voice_channel"/> - <check_box label="Voice aktivieren (vom Grundstück eingerichtet)" name="parcel_enable_voice_channel_is_estate_disabled"/> + <check_box label="Voice aktivieren (vom Grundbesitz eingerichtet)" name="parcel_enable_voice_channel_is_estate_disabled"/> <check_box label="Voice auf diese Parzelle beschränken" name="parcel_enable_voice_channel_local"/> </panel> <panel label="ZUGANG" name="land_access_panel"> <panel.string name="access_estate_defined"> - (Durch Grundstück festgelegt) + (Durch Grundbesitz festgelegt) + </panel.string> + <panel.string name="allow_public_access"> + Öffentlichen Zugang erlauben ([MATURITY]) </panel.string> <panel.string name="estate_override"> - Eine oder mehrere dieser Optionen gelten auf Grundstücksebene + Eine oder mehrere dieser Optionen gelten auf Grundbesitzebene </panel.string> <text name="Limit access to this parcel to:"> Zugang zu dieser Parzelle @@ -453,8 +454,8 @@ Nur große Parzellen können in der Suche aufgeführt werden. <text name="Only Allow" width="400"> Zugang auf Einwohner beschränken, die überprüft wurden von: </text> - <check_box label="Zahlungsinformation gespeichert [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="Nicht identifizierte Einwohner verbannen."/> - <check_box label="Altersüberprüfung [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="Einwohner ohne Altersüberprüfung verbannen. Weitere Informationen finden Sie auf [SUPPORT_SITE]."/> + <check_box label="Zahlungsinformation gespeichert [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="Einwohner ohne Zahlungsinformation nicht zulassen."/> + <check_box label="Altersüberprüfung [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="Einwohner ohne Altersüberprüfung nicht zulassen. Weitere Informationen finden Sie im [SUPPORT_SITE]."/> <check_box label="Gruppenzugang erlauben: [GROUP]" name="GroupCheck" tool_tip="Gruppe im Register „Allgemein“ festlegen."/> <check_box label="Pässe verkaufen an:" name="PassCheck" tool_tip="Ermöglicht befristeten Zugang zu dieser Parzelle"/> <combo_box name="pass_combo"> diff --git a/indra/newview/skins/default/xui/de/floater_build_options.xml b/indra/newview/skins/default/xui/de/floater_build_options.xml index b70c859490..e90eb2c00b 100644 --- a/indra/newview/skins/default/xui/de/floater_build_options.xml +++ b/indra/newview/skins/default/xui/de/floater_build_options.xml @@ -2,7 +2,7 @@ <floater name="build options floater" title="RASTER-OPTIONEN"> <spinner label="Raster-Einheiten (Meter)" name="GridResolution"/> <spinner label="Rastergröße (Meter)" name="GridDrawSize"/> - <check_box label="Einrasten von Untereinheiten aktivieren" name="GridSubUnit"/> + <check_box label="An Untereinheiten ausrichten" name="GridSubUnit"/> <check_box label="Überschneidungen anzeigen" name="GridCrossSection"/> <text name="grid_opacity_label" tool_tip="Raster-Deckkraft"> Deckkraft: diff --git a/indra/newview/skins/default/xui/de/floater_buy_currency.xml b/indra/newview/skins/default/xui/de/floater_buy_currency.xml index d0d3628448..21e3bd280f 100644 --- a/indra/newview/skins/default/xui/de/floater_buy_currency.xml +++ b/indra/newview/skins/default/xui/de/floater_buy_currency.xml @@ -37,7 +37,7 @@ Schätzung erfolgt... </text> <text name="buy_action"> - [NAME] L$ [PRICE] + [ACTION] </text> <text name="total_label"> Mein neuer Kontostand wird sein @@ -59,7 +59,7 @@ </text> <button label="Jetzt kaufen" name="buy_btn"/> <button label="Abbrechen" name="cancel_btn"/> - <text name="info_cannot_buy" left="160" width="200" height="40"> + <text height="40" left="160" name="info_cannot_buy" width="200"> Kauf nicht möglich </text> diff --git a/indra/newview/skins/default/xui/de/floater_buy_land.xml b/indra/newview/skins/default/xui/de/floater_buy_land.xml index f380393163..5708a3f80a 100644 --- a/indra/newview/skins/default/xui/de/floater_buy_land.xml +++ b/indra/newview/skins/default/xui/de/floater_buy_land.xml @@ -41,8 +41,8 @@ Verkleinern Sie Ihre Auswahl. Das ausgewählte Land beinhaltet kein öffentliches Land. </floater.string> <floater.string name="not_owned_by_you"> - Sie haben Land ausgewählt, das einem anderen Einwohner gehört. -Wählen Sie ein kleineres Gebiet aus. + Sie haben Land ausgewählt, das einer anderen Person gehört. +Verkleinern Sie Ihre Auswahl. </floater.string> <floater.string name="processing"> Kauf wird abgewickelt... @@ -140,13 +140,13 @@ unterstützt [AMOUNT2] Objekte (unbekannt) </text> <text name="estate_name_label"> - Grundstück: + Grundbesitz: </text> <text left="680" left_delta="140" name="estate_name_text"> (unbekannt) </text> <text name="estate_owner_label" right="600" width="200"> - Grundstückseigentümer: + Grundbesitzer: </text> <text left="680" left_delta="140" name="estate_owner_text"> (unbekannt) @@ -161,7 +161,7 @@ unterstützt [AMOUNT2] Objekte Darft oder darf nicht zusammengelegt/unterteilt werden. </text> <text left="410" name="covenant_text"> - Sie müssen dem Grundstücksvertrag zustimmen: + Sie müssen dem Grundbesitzvertrag zustimmen: </text> <text left="470" name="covenant_timestamp_text"/> <text_editor left="470" name="covenant_editor"> diff --git a/indra/newview/skins/default/xui/de/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/de/floater_day_cycle_options.xml index 9baf30fb53..54a8a43edf 100644 --- a/indra/newview/skins/default/xui/de/floater_day_cycle_options.xml +++ b/indra/newview/skins/default/xui/de/floater_day_cycle_options.xml @@ -86,7 +86,7 @@ </text> <button label="Start" label_selected="Start" name="WLAnimSky" /> <button label="Stopp" label_selected="Stopp" name="WLStopAnimSky" /> - <button label="Grundstückszeit verw" label_selected="Zur Grundstückszeit" + <button label="Grundbesitzzeit verw" label_selected="Zur Grundbesitzzeit" name="WLUseLindenTime" /> <button label="Testtag speichern" label_selected="Testtag speichern" name="WLSaveDayCycle" /> diff --git a/indra/newview/skins/default/xui/de/floater_env_settings.xml b/indra/newview/skins/default/xui/de/floater_env_settings.xml index 0f2370771f..0c78909108 100644 --- a/indra/newview/skins/default/xui/de/floater_env_settings.xml +++ b/indra/newview/skins/default/xui/de/floater_env_settings.xml @@ -20,7 +20,7 @@ Wasser- trübung </text> - <button label="Grundstückszeit verw." name="EnvUseEstateTimeButton"/> + <button label="Grundbesitzzeit verw." name="EnvUseEstateTimeButton"/> <button label="Himmel (erweitert)" name="EnvAdvancedSkyButton"/> <button label="Wasser (erweitert)" name="EnvAdvancedWaterButton"/> </floater> diff --git a/indra/newview/skins/default/xui/de/floater_gesture.xml b/indra/newview/skins/default/xui/de/floater_gesture.xml index 0b27b362c3..7b35da8d5c 100644 --- a/indra/newview/skins/default/xui/de/floater_gesture.xml +++ b/indra/newview/skins/default/xui/de/floater_gesture.xml @@ -9,7 +9,7 @@ <floater.string name="copy_name"> Kopie von [COPY_NAME] </floater.string> - <scroll_list bottom_delta="-385" height="360" name="gesture_list"> + <scroll_list name="gesture_list"> <scroll_list.columns label="Name" name="name"/> <scroll_list.columns label="Chat" name="trigger"/> <scroll_list.columns label="" name="key"/> diff --git a/indra/newview/skins/default/xui/de/floater_god_tools.xml b/indra/newview/skins/default/xui/de/floater_god_tools.xml index 108baee4a4..9708d7603f 100644 --- a/indra/newview/skins/default/xui/de/floater_god_tools.xml +++ b/indra/newview/skins/default/xui/de/floater_god_tools.xml @@ -2,7 +2,7 @@ <floater name="godtools floater" title="GOTT-WERKZEUGE"> <tab_container name="GodTools Tabs"> <panel label="Raster" name="grid"> - <button label="Alle Einwohner hinauswerfen" label_selected="Alle Einwohner hinauswerfen" name="Kick all users" width="175"/> + <button label="Alle Benutzer hinauswerfen" label_selected="Alle Benutzer hinauswerfen" name="Kick all users" width="175"/> <button label="Sichtbarkeits-Cache dieser Regionskarte leeren" label_selected="Sichtbarkeits-Cache dieser Regionskarte leeren" name="Flush This Region's Map Visibility Caches" width="285"/> </panel> <panel label="Region" name="region"> @@ -10,7 +10,7 @@ Sim: </text> <check_box label="Startbereich Einleitung" name="check prelude" tool_tip="Diese Region zu einem Startbereich machen."/> - <check_box label="Sonne fest" name="check fixed sun" tool_tip="Fixiert den Sonnenstand (wie in „Region/Grundstück“ > „Terrain“."/> + <check_box label="Sonne fest" name="check fixed sun" tool_tip="Fixiert den Sonnenstand (wie in „Region/Grundbesitz“ > „Terrain“."/> <check_box label="Zuhause auf Teleport zurücksetzen" name="check reset home" tool_tip="Wenn Einwohner weg teleportieren, ihr Zuhause auf Zielposition setzen."/> <check_box label="Sichtbar" name="check visible" tool_tip="Diese Region für Nicht-Götter sichtbar machen."/> <check_box label="Schaden" name="check damage" tool_tip="Schaden in dieser Region aktivieren."/> @@ -21,12 +21,12 @@ <button label="Terrain zurücksetzen" label_selected="Terrain zurücksetzen" name="Revert Terrain" tool_tip="Das aktuelle Terrain mit dem Standard ersetzen." width="120"/> <button label="Terrain tauschen" label_selected="Terrain tauschen" name="Swap Terrain" tool_tip="Aktuelles Terrain gegen Standard austauschen." width="120"/> <text name="estate id"> - Grundstücks-ID: + Grundbesitz-ID: </text> <text name="parent id"> Parent ID: </text> - <line_editor name="parentestate" tool_tip="Das übergeordnete Grundstück dieser Region"/> + <line_editor name="parentestate" tool_tip="Der übergeordnete Grundbesitz dieser Region"/> <text name="Grid Pos: "> Raster-Pos.: </text> @@ -35,8 +35,8 @@ <text name="Redirect to Grid: " width="110"> Auf Raster umleiten: </text> - <line_editor left_delta="110" left_pad="0" name="redirectx" width="35"/> - <line_editor left_delta="45" name="redirecty" width="35"/> + <line_editor left_delta="110" name="redirectx" width="35" left_pad="0"/> + <line_editor left_delta="45" name="redirecty" width="35" /> <text font="SansSerifSmall" name="billable factor text"> Abrechnungsfaktor: </text> diff --git a/indra/newview/skins/default/xui/de/floater_region_info.xml b/indra/newview/skins/default/xui/de/floater_region_info.xml index 354cdaa272..c0dc47a67d 100644 --- a/indra/newview/skins/default/xui/de/floater_region_info.xml +++ b/indra/newview/skins/default/xui/de/floater_region_info.xml @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="regioninfo" title="REGION/GRUNDSTÜCK"/> +<floater name="regioninfo" title="REGION/GRUNDBESITZ"/> diff --git a/indra/newview/skins/default/xui/de/floater_tools.xml b/indra/newview/skins/default/xui/de/floater_tools.xml index 46023bcf19..bb28f1b33f 100644 --- a/indra/newview/skins/default/xui/de/floater_tools.xml +++ b/indra/newview/skins/default/xui/de/floater_tools.xml @@ -7,7 +7,7 @@ Klicken und ziehen, um die ausgewählte Seite zu dehnen </floater.string> <floater.string name="status_move"> - Maus verschiebt, Umschalt-Taste und Maus kopiert + Maus verschiebt, Umschalt + Maus kopiert </floater.string> <floater.string name="status_modifyland"> Klicken und halten, um das Land zu bearbeiten @@ -70,7 +70,7 @@ <check_box label="Beide Seiten dehnen" name="checkbox uniform"/> <check_box initial_value="true" label="Texturen dehnen" name="checkbox stretch textures"/> <check_box initial_value="true" label="An Raster ausrichten" name="checkbox snap to grid" top_pad="10"/> - <combo_box name="combobox grid mode" tool_tip="Wählen Sie das Rasterlineal aus, um das Objekt zu positionieren."> + <combo_box name="combobox grid mode" tool_tip="Wählen Sie ein Rasterlineal zum Positionieren des Objekts aus."> <combo_box.item label="Globales Raster" name="World"/> <combo_box.item label="Lokales Raster" name="Local"/> <combo_box.item label="Referenzraster" name="Reference"/> @@ -238,10 +238,10 @@ </panel> </panel> <panel label="Objekt" name="Object"> - <check_box label="Gesperrt" name="checkbox locked" tool_tip="Verhindert, dass Objekt verschoben oder gelöscht wird. Oft beim Bauen nützlich, um unbeabsichtigte Bearbeitungen zu vermeiden."/> - <check_box label="Physisch" name="Physical Checkbox Ctrl" tool_tip="Gestattet, das Objekt geschoben und von Schwerkraft beeinflusst wird"/> + <check_box label="Gesperrt" name="checkbox locked" tool_tip="Verhindert, dass das Objekt verschoben oder gelöscht wird. Oft beim Bauen nützlich, um unbeabsichtigte Bearbeitungen zu vermeiden."/> + <check_box label="Physisch" name="Physical Checkbox Ctrl" tool_tip="Gestattet, dass das Objekt geschoben und von Schwerkraft beeinflusst wird"/> <check_box label="Temporär" name="Temporary Checkbox Ctrl" tool_tip="Bewirkt, dass das Objekt 1 Minute nach seiner Erstellung gelöscht wird."/> - <check_box label="Phantom" name="Phantom Checkbox Ctrl" tool_tip="Verursacht, dass Objekt nicht mit anderen Objekten oder Avataren kollidiert"/> + <check_box label="Phantom" name="Phantom Checkbox Ctrl" tool_tip="Verhindert, dass das Objekt mit anderen Objekten oder Avataren kollidiert"/> <text name="label position"> Position (Meter) </text> diff --git a/indra/newview/skins/default/xui/de/floater_tos.xml b/indra/newview/skins/default/xui/de/floater_tos.xml index e11b453b41..27c15a0337 100644 --- a/indra/newview/skins/default/xui/de/floater_tos.xml +++ b/indra/newview/skins/default/xui/de/floater_tos.xml @@ -3,15 +3,15 @@ <button label="Weiter" label_selected="Weiter" name="Continue"/> <button label="Abbrechen" label_selected="Abbrechen" name="Cancel"/> <radio_group name="tos_agreement"> - <radio_item label="Ich stimme den Nutzungsbedingungen nicht zu" name="radio_disagree"/> - <radio_item label="Ich stimme den Nutzungsbedingungen zu" name="radio_agree"/> + <radio_item label="Ich stimme den Servicebedingungen nicht zu" name="radio_disagree"/> + <radio_item label="Ich stimme den Servicebedingungen zu" name="radio_agree"/> </radio_group> <text name="tos_title"> Nutzungsvereinbarung </text> - <check_box label="Ich stimme den Nutzungsbedingungen zu" name="agree_chk"/> + <check_box label="Ich stimme den Servicebedingungen und Datenschutzbestimmungen zu." name="agree_chk"/> <text name="tos_heading"> - Lesen Sie die folgenden Servicebedingungen sorgfältig durch. Sie müssen den Servicebedinungen zustimmen, um [SECOND_LIFE] weiterhin verwenden zu können. + Lesen Sie die folgenden Servicebedingungen und Datenbestimmungen sorgfältig durch. Sie müssen den Servicebedingungen zustimmen, um sich bei [SECOND_LIFE] anmelden zu können. </text> <text_editor name="tos_text"> TOS_TEXT diff --git a/indra/newview/skins/default/xui/de/menu_land.xml b/indra/newview/skins/default/xui/de/menu_land.xml index 9b1e6727b7..de679da3d8 100644 --- a/indra/newview/skins/default/xui/de/menu_land.xml +++ b/indra/newview/skins/default/xui/de/menu_land.xml @@ -5,5 +5,5 @@ <menu_item_call label="Dieses Land kaufen" name="Land Buy"/> <menu_item_call label="Pass kaufen" name="Land Buy Pass"/> <menu_item_call label="Bauen" name="Create"/> - <menu_item_call label="Terrain bearbeiten" name="Edit Terrain"/> + <menu_item_call label="Land bearbeiten" name="Edit Terrain"/> </context_menu> diff --git a/indra/newview/skins/default/xui/de/menu_profile_overflow.xml b/indra/newview/skins/default/xui/de/menu_profile_overflow.xml index 03bc19aa3f..9f3fcbca1d 100644 --- a/indra/newview/skins/default/xui/de/menu_profile_overflow.xml +++ b/indra/newview/skins/default/xui/de/menu_profile_overflow.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <toggleable_menu name="profile_overflow_menu"> + <menu_item_call label="Karte" name="show_on_map"/> <menu_item_call label="Bezahlen" name="pay"/> <menu_item_call label="Teilen" name="share"/> <menu_item_call label="Ignorieren" name="block"/> diff --git a/indra/newview/skins/default/xui/de/menu_viewer.xml b/indra/newview/skins/default/xui/de/menu_viewer.xml index c628cb4b61..84ed19e253 100644 --- a/indra/newview/skins/default/xui/de/menu_viewer.xml +++ b/indra/newview/skins/default/xui/de/menu_viewer.xml @@ -32,7 +32,7 @@ <menu_item_call label="Landmarke für diesen Ort setzen" name="Create Landmark Here"/> <menu label="Ortsprofil" name="Land"> <menu_item_call label="Land-Info" name="About Land"/> - <menu_item_call label="Region/Grundstück" name="Region/Estate"/> + <menu_item_call label="Region/Grundbesitz" name="Region/Estate"/> </menu> <menu_item_call label="Dieses Land kaufen" name="Buy Land"/> <menu_item_call label="Mein Land" name="My Land"/> @@ -53,7 +53,7 @@ <menu_item_call label="Mittag" name="Noon"/> <menu_item_call label="Sonnenuntergang" name="Sunset"/> <menu_item_call label="Mitternacht" name="Midnight"/> - <menu_item_call label="Grundstückszeit" name="Revert to Region Default"/> + <menu_item_call label="Grundbesitzzeit" name="Revert to Region Default"/> <menu_item_call label="Umwelt-Editor" name="Environment Editor"/> </menu> </menu> diff --git a/indra/newview/skins/default/xui/de/mime_types.xml b/indra/newview/skins/default/xui/de/mime_types.xml index e01649e911..de93107e94 100644 --- a/indra/newview/skins/default/xui/de/mime_types.xml +++ b/indra/newview/skins/default/xui/de/mime_types.xml @@ -22,14 +22,6 @@ Video wiedergeben </playtip> </widgetset> - <widgetset name="none"> - <label name="none_label"> - Keine Inhalte - </label> - <tooltip name="none_tooltip"> - Keine Medien gefunden - </tooltip> - </widgetset> <widgetset name="image"> <label name="image_label"> Bild diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml index 864e579c3d..c2f25c84b8 100644 --- a/indra/newview/skins/default/xui/de/notifications.xml +++ b/indra/newview/skins/default/xui/de/notifications.xml @@ -107,10 +107,10 @@ Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut. </notification> <notification name="FriendsAndGroupsOnly"> Leute, die nicht auf Ihrer Freundesliste stehen, werden nicht wissen, dass Sie deren Anrufe oder Sofortnachrichten ignoriert haben. - <usetemplate name="okbutton" yestext="OK"/> + <usetemplate name="okbutton" yestext="Ja"/> </notification> <notification name="GrantModifyRights"> - Wenn Sie einem anderen Einwohner, die Erlaubnis zum Bearbeiten erteilen, dann kann dieser JEDES Objekt, das Sie inworld besitzen, verändern, löschen oder nehmen. Seien Sie SEHR vorsichtig, wenn Sie diese Erlaubnis gewähren! + Wenn Sie einem anderen Einwohner die Erlaubnis zum Bearbeiten erteilen, dann kann dieser JEDES Objekt, das Sie inworld besitzen, verändern, löschen oder nehmen. Seien Sie SEHR vorsichtig, wenn Sie diese Erlaubnis gewähren! Möchten Sie [FIRST_NAME] [LAST_NAME] die Erlaubnis zum Bearbeiten gewähren? <usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/> </notification> @@ -1189,7 +1189,7 @@ Ersetzen Sie die Textur [TEXTURE_NUM] mit einer Bilddatei von maximal 512x512 un Es sind maximal [MAX_MANAGER] verbannte Einwohner erlaub. </notification> <notification name="OwnerCanNotBeDenied"> - Der Eigentümer des Grundstücks kann nicht zur Liste der „Verbannten Einwohner“ hinzugefügt werden. + Der Eigentümer des Grundbesitzes kann nicht zur Liste der „Verbannten Einwohner“ hinzugefügt werden. </notification> <notification name="CanNotChangeAppearanceUntilLoaded"> Das Aussehen lässt sich erst ändern, wenn Kleider und Form/Gestalt geladen sind. @@ -1314,8 +1314,8 @@ Diese Gruppe verlassen? <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> </notification> <notification name="ConfirmKick"> - Möchten Sie WIRKLICH alle Einwohner aus dem Grid werfen? - <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Alle Einwohner hinauswerfen"/> + Möchten Sie WIRKLICH alle Benutzer aus dem Grid werfen? + <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Alle Benutzer hinauswerfen"/> </notification> <notification name="MuteLinden"> Lindens können nicht ignoriert werden. @@ -1355,7 +1355,7 @@ Chat und Instant Messages werden ausgeblendet. Instant Messages (Sofortnachricht <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="KickUser"> - Beim Hinauswerfen dieses Einwohners welche Meldung anzeigen? + Beim Hinauswerfen dieses Benutzers welche Meldung anzeigen? <form name="form"> <input name="message"> Sie wurden von einem Administrator abgemeldet. @@ -1375,7 +1375,7 @@ Chat und Instant Messages werden ausgeblendet. Instant Messages (Sofortnachricht </form> </notification> <notification name="FreezeUser"> - Beim Einfrieren dieses Einwohners welche Meldung anzeigen? + Beim Einfrieren dieses Benutzers welche Meldung anzeigen? <form name="form"> <input name="message"> Sie wurden eingefroren. Bewegen oder Chatten ist nicht mehr möglich. Ein Administrator wird sich über IM an Sie wenden @@ -1385,7 +1385,7 @@ Chat und Instant Messages werden ausgeblendet. Instant Messages (Sofortnachricht </form> </notification> <notification name="UnFreezeUser"> - Beim Auftauen dieses Einwohners welche Meldung anzeigen? + Beim Auftauen dieses Benutzers welche Meldung anzeigen? <form name="form"> <input name="message"> Sie sind nicht mehr eingefroren. @@ -1405,7 +1405,7 @@ Chat und Instant Messages werden ausgeblendet. Instant Messages (Sofortnachricht </form> </notification> <notification name="OfferTeleportFromGod"> - Einwohner an Ihrem Standort herbeirufen? + Einwohner zu Ihrem Standort einladen? <form name="form"> <input name="message"> Triff mich in [REGION] @@ -1426,67 +1426,67 @@ Chat und Instant Messages werden ausgeblendet. Instant Messages (Sofortnachricht Zu [CLASSIFIED] teleportieren? <usetemplate ignoretext="Bestätigen, dass ich zu einer Position in Anzeigen teleportieren möchte." name="okcancelignore" notext="Abbrechen" yestext="Teleportieren"/> </notification> - <notification label="Nachricht an alle auf diesem Grundstück" name="MessageEstate"> - Geben Sie eine kurze Nachricht ein, die an jede Person auf Ihrem Grundstück gesendet wird. + <notification label="Nachricht an alle auf diesem Grundbesitz" name="MessageEstate"> + Geben Sie eine kurze Nachricht ein, die an jede Person auf Ihrem Grundbesitz gesendet wird. <form name="form"> <input name="message"/> <button name="OK" text="OK"/> <button name="Cancel" text="Abbrechen"/> </form> </notification> - <notification label="Linden-Grundstück ändern" name="ChangeLindenEstate"> - Sie sind im Begriff, ein Grundstück in Linden-Besitz (Mainland, Teen-Grid, Orientation, usw.) zu verändern. + <notification label="Linden-Grundbesitz ändern" name="ChangeLindenEstate"> + Sie sind im Begriff, einen Grundbesitz in Linden-Besitz (Mainland, Teen-Raster, Orientierung usw.) zu verändern. -Dies hat EXTREME KONSEQUENZEN und wirkt sich auf die Einwohner aus! Auf dem Mainland kann dies zu Veränderungen in Tausenden von Regionen und zu Problemen mit dem Spaceserver führen! +Dies ist ÄUSSERST GEFÄHRLICH, da es grundlegende Auswirkungen auf das Benutzererlebnis hat. Auf dem Mainland werden tausende Regionen geändert, was den Spaceserver stark belastet. Fortfahren? <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> </notification> - <notification label="Zugang zu Linden-Grundstück ändern" name="ChangeLindenAccess"> - Sie sind im Begriff, die Zugangsliste für ein Grundstück in Linden-Besitz (Mainland, Teen-Raster, Orientierung usw.) zu verändern. + <notification label="Zugang zu Linden-Grundbesitz ändern" name="ChangeLindenAccess"> + Sie sind im Begriff, die Zugangsliste für einen Grundbesitz in Linden-Besitz (Mainland, Teen-Raster, Orientierung usw.) zu verändern. Dies ist GEFÄHRLICH und sollte nur erfolgen, um Objekte/L$ per Hack in und aus dem Raster zu entfernen. Tausende Regionen werden verändert und der Spaceserver wird dadurch stark belastet. <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> </notification> - <notification label="Grundstück wählen" name="EstateAllowedAgentAdd"> - Nur für dieses Grundstück oder für alle [ALL_ESTATES] zur Erlaubnisliste hinzufügen? - <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/> + <notification label="Grundbesitz wählen" name="EstateAllowedAgentAdd"> + Nur für diesen Grundbesitz oder für alle [ALL_ESTATES] zur Erlaubnisliste hinzufügen? + <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundbesitze" yestext="Dieser Grundbesitz"/> </notification> - <notification label="Grundstück wählen" name="EstateAllowedAgentRemove"> - Nur für dieses Grundstück oder für alle [ALL_ESTATES] von Erlaubnisliste entfernen? - <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/> + <notification label="Grundbesitz wählen" name="EstateAllowedAgentRemove"> + Nur für diesen Grundbesitz oder für alle [ALL_ESTATES] von Erlaubnisliste entfernen? + <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundbesitze" yestext="Diesen Grundbesitz"/> </notification> - <notification label="Grundstück wählen" name="EstateAllowedGroupAdd"> - Nur für dieses Grundstück oder für alle [ALL_ESTATES] zur Gruppen-Erlaubnisliste hinzufügen? - <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/> + <notification label="Grundbesitz wählen" name="EstateAllowedGroupAdd"> + Nur für diesen Grundbesitz oder für alle [ALL_ESTATES] zur Gruppen-Erlaubnisliste hinzufügen? + <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundbesitze" yestext="Diesen Grundbesitz"/> </notification> - <notification label="Grundstück wählen" name="EstateAllowedGroupRemove"> - Nur für dieses Grundstück oder für alle [ALL_ESTATES] von Gruppen-Erlaubnisliste entfernen? - <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/> + <notification label="Grundbesitz wählen" name="EstateAllowedGroupRemove"> + Nur für diesen Grundbesitz oder für alle [ALL_ESTATES] von Gruppen-Erlaubnisliste entfernen? + <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundbesitze" yestext="Diesen Grundbesitz"/> </notification> - <notification label="Grundstück wählen" name="EstateBannedAgentAdd"> - Zugang nur für dieses Grundstück oder für [ALL_ESTATES] verweigern? - <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/> + <notification label="Grundbesitz wählen" name="EstateBannedAgentAdd"> + Zugang nur für diesen Grundbesitz oder für [ALL_ESTATES] verweigern? + <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundbesitze" yestext="Diesen Grundbesitz"/> </notification> - <notification label="Grundstück wählen" name="EstateBannedAgentRemove"> - Einwohner nur für dieses Grundstück oder für alle [ALL_ESTATES] von der Bannliste entfernen? - <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/> + <notification label="Grundbesitz wählen" name="EstateBannedAgentRemove"> + Einwohner nur für diesen Grundbesitz oder für alle [ALL_ESTATES] von der Bannliste entfernen? + <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundbesitze" yestext="Diesen Grundbesitz"/> </notification> - <notification label="Grundstück wählen" name="EstateManagerAdd"> - Verwalter nur für dieses Grundstück oder für [ALL_ESTATES] festlegen? - <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/> + <notification label="Grundbesitz wählen" name="EstateManagerAdd"> + Verwalter nur für diesen Grundbesitz oder für [ALL_ESTATES] festlegen? + <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundbesitze" yestext="Diesen Grundbesitz"/> </notification> - <notification label="Grundstück wählen" name="EstateManagerRemove"> - Verwalter nur für dieses Grundstück oder für [ALL_ESTATES] entfernen? - <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundstücke" yestext="Dieses Grundstück"/> + <notification label="Grundbesitz wählen" name="EstateManagerRemove"> + Verwalter nur für diesen Grundbesitz oder für [ALL_ESTATES] entfernen? + <usetemplate canceltext="Abbrechen" name="yesnocancelbuttons" notext="Alle Grundbesitze" yestext="Diesen Grundbesitz"/> </notification> <notification label="Rauswurf bestätigen" name="EstateKickUser"> - Benutzer [EVIL_USER] von diesem Grundstück werfen? + Benutzer [EVIL_USER] von diesem Grundbesitz werfen? <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> </notification> <notification name="EstateChangeCovenant"> - Möchten Sie den Grundstücksvertrag wirklich ändern? + Möchten Sie den Grundbesitzvertrag wirklich ändern? <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> </notification> <notification name="RegionEntryAccessBlocked"> @@ -1570,14 +1570,14 @@ Klicken Sie auf „Einstellung ändern“, um Ihre Einstellung für Altereinstuf <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="ProblemImportingEstateCovenant"> - Problem beim Import des Grundstückvertrags. + Problem beim Import des Grundbesitzvertrags. <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="ProblemAddingEstateManager"> - Es gibt Probleme beim Hinzufügen eines neuen Grundstücksverwalters. Bei mindestens einem Grundstück ist die Verwalterliste voll. + Es gibt Probleme beim Hinzufügen eines neuen Grundbesitzverwalters. Bei mindestens einem Grundbesitz ist die Verwalterliste voll. </notification> <notification name="ProblemAddingEstateGeneric"> - Problem beim Hinzufügen zu dieser Grundstücksliste. Bei mindestens einem Grundstück ist die Liste voll. + Problem beim Hinzufügen zu dieser Grundbesitzliste. Bei mindestens einem Grundbesitz ist die Liste voll. </notification> <notification name="UnableToLoadNotecardAsset"> Notizkarten-Asset konnte nicht geladen werden. @@ -2287,7 +2287,7 @@ Versuchen Sie es in einigen Minuten erneut. <form name="form"> <button name="Show" text="Anzeigen"/> <button name="Discard" text="Verwerfen"/> - <button name="Mute" text="Ignorieren"/> + <button name="Mute" text="Blockieren"/> </form> </notification> <notification name="GodMessage"> @@ -2433,7 +2433,7 @@ Anfrage gestatten? </form> </notification> <notification name="ScriptToast"> - [FIRST] [LAST]s '[TITLE]' fordert Eingaben vom Einwohner an. + [FIRST] [LAST]s '[TITLE]' fordert Eingaben vom Benutzer an. <form name="form"> <button name="Open" text="Dialog öffnen"/> <button name="Ignore" text="Ignorieren"/> diff --git a/indra/newview/skins/default/xui/de/panel_bottomtray.xml b/indra/newview/skins/default/xui/de/panel_bottomtray.xml index d3f89b0ad3..d52b8dcf4d 100644 --- a/indra/newview/skins/default/xui/de/panel_bottomtray.xml +++ b/indra/newview/skins/default/xui/de/panel_bottomtray.xml @@ -9,7 +9,7 @@ <layout_stack name="toolbar_stack"> <layout_panel name="speak_panel"> <talk_button name="talk"> - <speak_button label="Sprechen" label_selected="Sprechen" name="speak_btn"/> + <speak_button label="Sprechen" label_selected="Sprechen" name="speak_btn" halign="right" /> </talk_button> </layout_panel> <layout_panel name="gesture_panel"> diff --git a/indra/newview/skins/default/xui/de/panel_classified_info.xml b/indra/newview/skins/default/xui/de/panel_classified_info.xml index 6480b640cd..ac1cd7ba88 100644 --- a/indra/newview/skins/default/xui/de/panel_classified_info.xml +++ b/indra/newview/skins/default/xui/de/panel_classified_info.xml @@ -26,7 +26,7 @@ <panel name="scroll_content_panel"> <text_editor name="classified_name" value="[name]"/> <text name="classified_location_label" value="Standort:"/> - <text_editor name="classified_location" value="[wird geladen...]"/> + <text_editor name="classified_location" value="[loading...]"/> <text name="content_type_label" value="Inhaltsart:"/> <text_editor name="content_type" value="[Inhalts-Art]"/> <text name="category_label" value="Kategorie:"/> diff --git a/indra/newview/skins/default/xui/de/panel_edit_pick.xml b/indra/newview/skins/default/xui/de/panel_edit_pick.xml index 0cb14177af..1ec4f09161 100644 --- a/indra/newview/skins/default/xui/de/panel_edit_pick.xml +++ b/indra/newview/skins/default/xui/de/panel_edit_pick.xml @@ -1,5 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Auswahl bearbeiten" name="panel_edit_pick"> + <panel.string name="location_notice"> + (wird nach Speichern aktualisiert) + </panel.string> <text name="title"> Auswahl bearbeiten </text> @@ -22,7 +25,7 @@ </panel> </scroll_container> <panel label="bottom_panel" name="bottom_panel"> - <button label="[WHAT] speichern" name="save_changes_btn"/> + <button label="Auswahl speichern" name="save_changes_btn"/> <button label="Abbrechen" name="cancel_btn"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_main_inventory.xml b/indra/newview/skins/default/xui/de/panel_main_inventory.xml index 7d57a3b3f2..d3eb9ae04c 100644 --- a/indra/newview/skins/default/xui/de/panel_main_inventory.xml +++ b/indra/newview/skins/default/xui/de/panel_main_inventory.xml @@ -1,18 +1,14 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Sonstiges" name="main inventory panel"> - <panel.string name="Title"> - Sonstiges + <panel.string name="ItemcountFetching"> + Inventar ([ITEM_COUNT] Artikel werden abgerufen... [FILTER] </panel.string> - <filter_editor label="Inventar filtern" name="inventory search editor"/> - <tab_container name="inventory filter tabs"> - <inventory_panel label="MEIN INVENTAR" name="All Items"/> - <inventory_panel label="AKTUELL" name="Recent Items"/> - </tab_container> - <panel name="bottom_panel"> - <button name="options_gear_btn" tool_tip="Zusätzliche Optionen anzeigen"/> - <button name="add_btn" tool_tip="Neues Objekt hinzufügen"/> - <dnd_button name="trash_btn" tool_tip="Auswahl löschen"/> - </panel> + <panel.string name="ItemcountCompleted"> + [ITEM_COUNT] Objekte [FILTER] + </panel.string> + <text name="ItemcountText"> + Objekte: + </text> <menu_bar name="Inventory Menu"> <menu label="Datei" name="File"> <menu_item_call label="Öffnen" name="Open"/> @@ -61,4 +57,14 @@ <menu_item_check label="Systemordner nach oben" name="System Folders To Top"/> </menu> </menu_bar> + <filter_editor label="Inventar filtern" name="inventory search editor"/> + <tab_container name="inventory filter tabs"> + <inventory_panel label="MEIN INVENTAR" name="All Items"/> + <inventory_panel label="AKTUELL" name="Recent Items"/> + </tab_container> + <panel name="bottom_panel"> + <button name="options_gear_btn" tool_tip="Zusätzliche Optionen anzeigen"/> + <button name="add_btn" tool_tip="Neues Objekt hinzufügen"/> + <dnd_button name="trash_btn" tool_tip="Auswahl löschen"/> + </panel> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_nearby_media.xml b/indra/newview/skins/default/xui/de/panel_nearby_media.xml index 2d97a25fa9..32750f14d4 100644 --- a/indra/newview/skins/default/xui/de/panel_nearby_media.xml +++ b/indra/newview/skins/default/xui/de/panel_nearby_media.xml @@ -13,16 +13,23 @@ (wird abgespielt) </string> <panel name="minimized_controls"> - <button label="Alle stoppen" name="all_nearby_media_disable_btn" tool_tip="Alle Medien in der Nähe ausschalten"/> - <button label="Alle starten" name="all_nearby_media_enable_btn" tool_tip="Alle Medien in der Nähe einschalten"/> + <button label="Stoppen" name="all_nearby_media_disable_btn" tool_tip="Alle Medien in der Nähe ausschalten"/> + <button label="Starten" name="all_nearby_media_enable_btn" tool_tip="Alle Medien in der Nähe einschalten"/> <button name="open_prefs_btn" tool_tip="Medien-Einstellungen öffnen"/> <button label="Mehr >>" label_selected="Weniger <<" name="more_less_btn" tool_tip="Erweiterte Steuerung"/> </panel> <panel name="nearby_media_panel"> + <text name="nearby_media"> + Medien in der Nähe + </text> + <text name="show"> + Anzeigen: + </text> <combo_box name="show_combo"> <combo_box.item label="Alle" name="All"/> <combo_box.item label="Auf dieser Parzelle" name="WithinParcel"/> <combo_box.item label="Außerhalb dieser Parzelle" name="OutsideParcel"/> + <combo_box.item label="An anderen Avataren" name="OnOthers"/> </combo_box> <scroll_list name="media_list"> <scroll_list.columns label="Umgebung" name="media_proximity"/> @@ -31,7 +38,7 @@ <scroll_list.columns label="Name" name="media_name"/> <scroll_list.columns label="Fehler beseitigen" name="media_debug"/> </scroll_list> - <panel> + <panel name="media_controls_panel"> <layout_stack name="media_controls"> <layout_panel name="stop"> <button name="stop_btn" tool_tip="Ausgewählte Medien stoppen"/> diff --git a/indra/newview/skins/default/xui/de/panel_place_profile.xml b/indra/newview/skins/default/xui/de/panel_place_profile.xml index 82e5febf8d..ed1421aa60 100644 --- a/indra/newview/skins/default/xui/de/panel_place_profile.xml +++ b/indra/newview/skins/default/xui/de/panel_place_profile.xml @@ -83,7 +83,7 @@ <text name="scripts_value" value="Ein"/> <text name="damage_label" value="Schaden:"/> <text name="damage_value" value="Aus"/> - <button label="Land-Info" name="about_land_btn"/> + <button label="Über Land" name="about_land_btn"/> </panel> </accordion_tab> <accordion_tab name="region_information_tab" title="Region"> @@ -100,12 +100,12 @@ <text name="region_group"> The Mighty Moose of mooseville soundvillemoose </text> - <button label="Region/Grundstück" name="region_info_btn"/> + <button label="Region/Grundbesitz" name="region_info_btn"/> </panel> </accordion_tab> - <accordion_tab name="estate_information_tab" title="Grundstück"> + <accordion_tab name="estate_information_tab" title="Grundbesitz"> <panel name="estate_information_panel"> - <text name="estate_name_label" value="Grundstück:"/> + <text name="estate_name_label" value="Grundbesitz:"/> <text name="estate_rating_label" value="Einstufung:"/> <text name="estate_owner_label" value="Eigentümer:"/> <text name="covenant_label" value="Vertrag:"/> diff --git a/indra/newview/skins/default/xui/de/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/de/panel_preferences_advanced.xml index 78c495e377..c0ab69fcdf 100644 --- a/indra/newview/skins/default/xui/de/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_advanced.xml @@ -3,6 +3,9 @@ <panel.string name="aspect_ratio_text"> [NUM]:[DEN] </panel.string> + <panel.string name="middle_mouse"> + Mittlere Maustaste + </panel.string> <slider label="Sichtwinkel" name="camera_fov"/> <slider label="Abstand" name="camera_offset_scale"/> <text name="heading2"> @@ -16,7 +19,7 @@ <check_box label="Avatarlippen beim Sprechen bewegen" name="enable_lip_sync"/> <check_box label="Blasen-Chat" name="bubble_text_chat"/> <slider label="Deckkraft" label_width="66" name="bubble_chat_opacity"/> - <color_swatch name="background" tool_tip="Farbe für Blasen-Chat auswählen" left_pad="35"/> + <color_swatch left_pad="35" name="background" tool_tip="Farbe für Blasen-Chat auswählen"/> <check_box label="Skript-Fehler anzeigen:" name="show_script_errors"/> <radio_group name="show_location"> <radio_item label="Chat in der Nähe" name="0"/> diff --git a/indra/newview/skins/default/xui/de/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/de/panel_preferences_alerts.xml index 0a0534c739..fcb45e26be 100644 --- a/indra/newview/skins/default/xui/de/panel_preferences_alerts.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_alerts.xml @@ -3,7 +3,7 @@ <text name="tell_me_label"> Anzeigen: </text> - <check_box label="Wenn ich Geld ausgebe oder L$ erhalte" name="notify_money_change_checkbox"/> + <check_box label="Wenn ich L$ ausgebe oder erhalte" name="notify_money_change_checkbox"/> <check_box label="Wenn meine Freunde sich an- oder abmelden" name="friends_online_notify_checkbox"/> <text name="show_label"> Immer anzeigen: diff --git a/indra/newview/skins/default/xui/de/panel_preferences_chat.xml b/indra/newview/skins/default/xui/de/panel_preferences_chat.xml index 45b560c759..aa1a93efac 100644 --- a/indra/newview/skins/default/xui/de/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_chat.xml @@ -46,6 +46,12 @@ <check_box initial_value="true" label="Beim Chatten Tippanimation abspielen" name="play_typing_animation"/> <check_box label="IMs per Email zuschicken, wenn ich offline bin" name="send_im_to_email"/> <check_box label="Kompakten Text-Chatverlauf aktivieren" name="plain_text_chat_history"/> + <text name="show_ims_in_label"> + IMs anzeigen in: + </text> + <text name="requires_restart_label"> + (Neustart erforderlich) + </text> <radio_group name="chat_window" tool_tip="Zeigen Sie Ihre Sofortnachrichten (Instant Messages) in einem anderen Fenster oder in einem einzigen Fenster mit viele Registerkarten an (Neustart erforderlich)."> <radio_item label="Getrennte Fenster" name="radio" value="0"/> <radio_item label="Registerkarten" name="radio2" value="1"/> diff --git a/indra/newview/skins/default/xui/de/panel_preferences_setup.xml b/indra/newview/skins/default/xui/de/panel_preferences_setup.xml index 2516cd3a40..02c6fb0606 100644 --- a/indra/newview/skins/default/xui/de/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_setup.xml @@ -34,9 +34,12 @@ Web: </text> <radio_group name="use_external_browser"> - <radio_item label="Integrierten Browser verwenden" name="internal" tool_tip="Integrierten Webbrowser verwenden, um die Hilfe, Weblinks usw. anzuzeigen. Dieser Browser öffnet als neues Fenster innerhalb von [APP_NAME]." value="0"/> <radio_item label="Meinen Browser verwenden (IE, Firefox, Safari)" name="external" tool_tip="Standard Webbrowser des Systems verwenden, um die Hilfe, Weblinks usw. anzuzeigen. Bei Vollbildmodus nicht empfohlen." value="1"/> + <radio_item label="Integrierten Browser verwenden" name="internal" tool_tip="Integrierten Webbrowser verwenden, um die Hilfe, Weblinks usw. anzuzeigen. Dieser Browser öffnet als neues Fenster innerhalb von [APP_NAME]." value=""/> </radio_group> + <check_box initial_value="true" label="Plugins aktivieren" name="browser_plugins_enabled"/> + <check_box initial_value="true" label="Cookies annehmen" name="cookies_enabled"/> + <check_box initial_value="true" label="Javascript aktivieren" name="browser_javascript_enabled"/> <check_box initial_value="false" label="Web-Proxy aktivieren" name="web_proxy_enabled"/> <text name="Proxy location"> Proxy-Standort: diff --git a/indra/newview/skins/default/xui/de/panel_profile.xml b/indra/newview/skins/default/xui/de/panel_profile.xml index cb598f89f6..cda2788e40 100644 --- a/indra/newview/skins/default/xui/de/panel_profile.xml +++ b/indra/newview/skins/default/xui/de/panel_profile.xml @@ -41,10 +41,10 @@ </scroll_container> </layout_panel> <layout_panel name="profile_buttons_panel"> - <button label="Freund hinzufügen" name="add_friend" tool_tip="Bieten Sie dem Einwohner die Freundschaft an" width="109"/> - <button label="IM" name="im" tool_tip="Instant Messenger öffnen" width="24"/> + <button label="Freund hinzufügen" name="add_friend" tool_tip="Bieten Sie dem Einwohner die Freundschaft an"/> + <button label="IM" name="im" tool_tip="Instant Messenger öffnen"/> <button label="Anrufen" name="call" tool_tip="Diesen Einwohner anrufen"/> - <button label="Karte" name="show_on_map_btn" tool_tip="Einwohner auf Karte anzeigen" width="36"/> + <button label="Karte" name="show_on_map_btn" tool_tip="Einwohner auf Karte anzeigen"/> <button label="Teleportieren" name="teleport" tool_tip="Teleport anbieten"/> <button label="▼" name="overflow_btn" tool_tip="Dem Einwohner Geld geben oder Inventar an den Einwohner schicken"/> </layout_panel> diff --git a/indra/newview/skins/default/xui/de/panel_region_covenant.xml b/indra/newview/skins/default/xui/de/panel_region_covenant.xml index 153082909a..225c98b84f 100644 --- a/indra/newview/skins/default/xui/de/panel_region_covenant.xml +++ b/indra/newview/skins/default/xui/de/panel_region_covenant.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Vertrag" name="Covenant"> <text name="estate_section_lbl"> - Grundstück + Grundbesitz </text> <text name="estate_name_lbl"> Name: @@ -23,15 +23,15 @@ </text> <button label="?" name="covenant_help"/> <text_editor bottom="-247" height="162" name="covenant_editor"> - Für dieses Grundstück fehlt der Vertrag. + Für diesen Grundbesitz fehlt der Vertrag. </text_editor> <button label="Zurücksetzen" name="reset_covenant"/> <text name="covenant_help_text"> Änderungen am Vertrag werden für alle Parzellen auf dem -Grundstück übernommen. +Grundbesitz übernommen. </text> <text bottom_delta="-36" name="covenant_instructions"> - Ziehen Sie eine Notizkarte an diese Stelle, um den Vertrag für dieses Grundstück zu ändern. + Ziehen Sie eine Notizkarte an diese Stelle, um den Vertrag für diesen Grundbesitz zu ändern. </text> <text bottom_delta="-36" name="region_section_lbl"> Region diff --git a/indra/newview/skins/default/xui/de/panel_region_debug.xml b/indra/newview/skins/default/xui/de/panel_region_debug.xml index 920a513308..d1b8f0d78a 100644 --- a/indra/newview/skins/default/xui/de/panel_region_debug.xml +++ b/indra/newview/skins/default/xui/de/panel_region_debug.xml @@ -28,7 +28,7 @@ </text> <check_box label="Mit Skripten" name="return_scripts" tool_tip="Es werden nur die Objekte zurückgegeben, die über Skripte verfügen."/> <check_box label="Auf dem Land von jemand anderem" name="return_other_land" tool_tip="Es werden nur die Objekte zurückgegeben, die sich auf dem Land eines anderen Einwohners befinden"/> - <check_box label="In jeder Region auf diesem Grundstück" name="return_estate_wide" tool_tip="Es werden die Objekte in allen Regionen dieses Grundstücks zurückgegeben"/> + <check_box label="In jeder Region auf diesem Grundbesitz" name="return_estate_wide" tool_tip="Es werden die Objekte in allen Regionen dieses Grundbesitzes zurückgegeben"/> <button label="Zurückgeben" name="return_btn" width="90"/> <button label="Top-Kollisionsobjekte..." name="top_colliders_btn" tool_tip="Liste der Objekte mit den meisten potenziellen Kollisionen"/> <button label="?" name="top_colliders_help"/> diff --git a/indra/newview/skins/default/xui/de/panel_region_estate.xml b/indra/newview/skins/default/xui/de/panel_region_estate.xml index 92ad9741bc..b93bd3e442 100644 --- a/indra/newview/skins/default/xui/de/panel_region_estate.xml +++ b/indra/newview/skins/default/xui/de/panel_region_estate.xml @@ -1,16 +1,16 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Grundstück" name="Estate"> +<panel label="Grundbesitz" name="Estate"> <text name="estate_help_text"> - Änderungen wirken sich auf alle Regionen des Grundstücks aus. + Änderungen wirken sich auf alle Regionen des Grundbesitzes aus. </text> <text name="estate_text"> - Grundstück: + Grundbesitz: </text> <text name="estate_name"> (unbekannt) </text> <text name="owner_text"> - Grundstückseigentümer: + Grundbesitzer: </text> <text name="estate_owner"> (unbekannt) @@ -18,7 +18,7 @@ <text name="Only Allow"> Zugang nur dann, wenn überprüft mit: </text> - <check_box label="Zahlungsinformation gespeichert" name="limit_payment" tool_tip="Nicht identifizierte Einwohner verbannen"/> + <check_box label="Zahlungsinformation gespeichert" name="limit_payment" tool_tip="Einwohner ohne Zahlungsinformation nicht zulassen."/> <check_box label="Altersüberprüfung" name="limit_age_verified" tool_tip="Einwohner ohne Altersüberprüfung verbannen. Weitere Informationen finden Sie auf [SUPPORT_SITE]."/> <check_box label="Voice-Chat erlauben" name="voice_chat_check"/> <button label="?" name="voice_chat_help"/> @@ -49,7 +49,7 @@ <check_box label="Verweigern - Zahlungsinfo verwendet" name="deny_transacted"/> <button label="Übernehmen" name="apply_btn"/> <text name="estate_manager_label"> - Grundstücksverwalter: + Grundbesitzsverwalter: </text> <text name="allow_resident_label"> Zulässige Einwohner: @@ -69,6 +69,6 @@ <button label="?" name="ban_resident_help"/> <button label="Hinzufügen..." name="add_banned_avatar_btn"/> <button label="Entfernen..." name="remove_banned_avatar_btn"/> - <button label="Nachricht an Grundstück" name="message_estate_btn"/> - <button label="Einwohner hinauswerfen..." name="kick_user_from_estate_btn"/> + <button label="Nachricht an Grundbesitz" name="message_estate_btn"/> + <button label="Einwohner hinauswerfen" name="kick_user_from_estate_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_region_general.xml b/indra/newview/skins/default/xui/de/panel_region_general.xml index 2bf8721c86..be8507ebbd 100644 --- a/indra/newview/skins/default/xui/de/panel_region_general.xml +++ b/indra/newview/skins/default/xui/de/panel_region_general.xml @@ -33,7 +33,7 @@ <icons_combo_box label="Moderat" name="access_combo"> <icons_combo_box.item label="Adult" name="Adult" value="42"/> <icons_combo_box.item label="Moderat" name="Mature" value="21"/> - <icons_combo_box.item label="Allgemein" name="PG" value="13"/> + <icons_combo_box.item label="Generell" name="PG" value="13"/> </icons_combo_box> <button label="Übernehmen" name="apply_btn"/> <button label="Einen Einwohner nach Hause teleportieren..." name="kick_btn"/> diff --git a/indra/newview/skins/default/xui/de/panel_region_terrain.xml b/indra/newview/skins/default/xui/de/panel_region_terrain.xml index e79c8584ba..01721791a7 100644 --- a/indra/newview/skins/default/xui/de/panel_region_terrain.xml +++ b/indra/newview/skins/default/xui/de/panel_region_terrain.xml @@ -12,17 +12,17 @@ <button label="?" name="terrain_raise_help" /> <spinner label="Untere Terraingrenze" name="terrain_lower_spin" /> <button label="?" name="terrain_lower_help" /> - <check_box label="Grundstücksonne verwenden" name="use_estate_sun_check" /> + <check_box label="Grundbesitzsonne verwenden" name="use_estate_sun_check" /> <button label="?" name="use_estate_sun_help" /> <check_box label="Sonne fest" name="fixed_sun_check" /> <button label="?" name="fixed_sun_help" /> <slider label="Phase" name="sun_hour_slider" /> <button label="Übernehmen" name="apply_btn" /> <button label="RAW-Terrain herunterladen..." name="download_raw_btn" - tool_tip="Nur für Grundstückseigentümer verfügbar, nicht für Verwalter" /> + tool_tip="Nur für Grundbesitzeigentümer verfügbar, nicht für Verwalter" /> <button label="?" name="download_raw_help" /> <button label="RAW-Terrain hochladen..." name="upload_raw_btn" - tool_tip="Nur für Grundstückseigentümer verfügbar, nicht für Verwalter" /> + tool_tip="Nur für Grundbesitzeigentümer verfügbar, nicht für Verwalter" /> <button label="?" name="upload_raw_help" /> <button label="Terrain formen" name="bake_terrain_btn" tool_tip="Das aktuelle Terrain zum Mittelpunkt für die oberen/unteren Terraingrenzen machen" /> 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 0e182fa417..803bd1b5ab 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="Kaufen" name="buyL" tool_tip="Hier klicken, um mehr L$ zu kaufen"/> + <button label=" " 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/de/role_actions.xml b/indra/newview/skins/default/xui/de/role_actions.xml index 554a5c27a4..b20fcabc82 100644 --- a/indra/newview/skins/default/xui/de/role_actions.xml +++ b/indra/newview/skins/default/xui/de/role_actions.xml @@ -30,7 +30,7 @@ </action_set> <action_set description="Diese Fähigkeiten ermöglichen es, Parzellenoptionen wie „Objekte erstellen“, „Terrain bearbeiten“ sowie Musik- und Medieneinstellungen zu ändern." name="Parcel Settings"> <action description="Musik- und Medieneinstellungen ändern" longdescription="Die Einstellungen für Streaming-Musik und Filme finden Sie unter „Land-Info“ > „Medien“." name="land change media"/> - <action description="„Terrain bearbeiten“ ein/aus" longdescription="„Terrain bearbeiten“ ein/aus. *WARNUNG* „Land-Info“ > „Optionen“ > „Terrain bearbeiten“ ermöglicht jedem das Terraformen Ihres Grundstücks und das Setzen und Verschieben von Linden-Pflanzen. Überlegen Sie sich, wem Sie diese Fähigkeit verleihen. Diese Einstellung finden Sie unter „Land-Info“ > „Optionen“." name="land edit"/> + <action description="„Terrain bearbeiten“ ein/aus" longdescription="„Terrain bearbeiten“ ein/aus. *WARNUNG* „Land-Info“ > „Optionen“ > „Terrain bearbeiten“ ermöglicht jedem das Terraformen Ihres Grundbesitzes und das Setzen und Verschieben von Linden-Pflanzen. Überlegen Sie sich, wem Sie diese Fähigkeit verleihen. Diese Einstellung finden Sie unter „Land-Info“ > „Optionen“." name="land edit"/> <action description="„Land-Info“-Optionen einstellen" longdescription="„Sicher (kein Schaden)“ und „Fliegen“ ein- und ausschalten und Einwohnern folgende Aktionen erlauben: „Terrain bearbeiten“, „Bauen“, „Landmarken erstellen“ und „Skripts ausführen“ auf gruppeneigenem Land in „Land-Info“ > Registerkarte „Optionen“." name="land options"/> </action_set> <action_set description="Diese Fähigkeiten ermöglichen es, Mitgliedern das Umgehen von Restriktionen auf gruppeneigenen Parzellen zu erlauben." name="Parcel Powers"> @@ -46,7 +46,7 @@ <action description="Parzelleneinstellungen für „Pässe verkaufen“ ändern" longdescription="Die Parzellen-Einstellungen für „Pässe verkaufen“ ändern Sie unter „Land-Info“ > Registerkarte „Zugang“." name="land manage passes"/> <action description="Einwohner aus Parzellen werfen und einfrieren" longdescription="Mitglieder in einer Rolle mit dieser Fähigkeit können gegen unerwünschte Einwohner auf einer gruppeneigenen Parzelle Maßnahmen ergreifen. Klicken Sie den Einwohner mit rechts an und wählen Sie „Hinauswerfen“ oder „Einfrieren“." name="land admin"/> </action_set> - <action_set description="Diese Fähigkeiten ermöglichen es, Mitgliedern das Zurückgeben von Objekten sowie das Platzieren und Verschieben von Linden-Pflanzen zu erlauben. Mitglieder können das Grundstück aufräumen und an der Landschaftsgestaltung mitwirken. Aber Vorsicht: Zurückgegebene Objekte können nicht mehr zurückgeholt werden." name="Parcel Content"> + <action_set description="Diese Fähigkeiten ermöglichen es, Mitgliedern das Zurückgeben von Objekten sowie das Platzieren und Verschieben von Linden-Pflanzen zu erlauben. Mitglieder können den Grundbesitz aufräumen und an der Landschaftsgestaltung mitwirken. Aber Vorsicht: Zurückgegebene Objekte können nicht mehr zurückgeholt werden." name="Parcel Content"> <action description="Gruppeneigene Objekte zurückgeben" longdescription="Gruppeneigene Objekte auf gruppeneigenen Parzellen können Sie unter „Land-Info“ > „Objekte“ zurückgeben." name="land return group owned"/> <action description="Gruppenobjekte zurückgeben" longdescription="Gruppenobjekte auf gruppeneigenen Parzellen können Sie unter „Land-Info“ > „Objekte“ zurückgeben." name="land return group set"/> <action description="Gruppenfremde Objekte zurückgeben" longdescription="Objekte von gruppenfremden Personen auf gruppeneigenen Parzellen können Sie unter „Land-Info“ > „Objekte“ zurückgeben." name="land return non group"/> diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml index fc01b69461..fd05f02ceb 100644 --- a/indra/newview/skins/default/xui/de/strings.xml +++ b/indra/newview/skins/default/xui/de/strings.xml @@ -23,7 +23,22 @@ Hardware wird erfasst... </string> <string name="StartupLoading"> - Wird geladen + [APP_NAME] wird geladen... + </string> + <string name="StartupClearingCache"> + Cache wird gelöscht... + </string> + <string name="StartupInitializingTextureCache"> + Textur-Cache wird initialisiert... + </string> + <string name="StartupInitializingVFS"> + VFS wird initialisiert... + </string> + <string name="ProgressRestoring"> + Wird wiederhergestellt... + </string> + <string name="ProgressChangingResolution"> + Auflösung wird geändert... </string> <string name="Fullbright"> Fullbright (Legacy) @@ -88,6 +103,9 @@ <string name="LoginFailedNoNetwork"> Netzwerk Fehler: Eine Verbindung konnte nicht hergestellt werden. Bitte überprüfen Sie Ihre Netzwerkverbindung. </string> + <string name="LoginFailed"> + Anmeldung fehlgeschlagen + </string> <string name="Quit"> Beenden </string> @@ -97,6 +115,24 @@ <string name="AgentLostConnection"> In dieser Region kann es zu Problemen kommen. Bitte überprüfen Sie Ihre Internetverbindung. </string> + <string name="SavingSettings"> + Ihr Einstellungen werden gespeichert... + </string> + <string name="LoggingOut"> + Abmeldung erfolgt... + </string> + <string name="ShuttingDown"> + Programm wird beendet... + </string> + <string name="YouHaveBeenDisconnected"> + Die Verbindung zu der Region ist abgebrochen. + </string> + <string name="SentToInvalidRegion"> + Sie wurden in eine ungültige Region geschickt. + </string> + <string name="TestingDisconnect"> + Verbindungsabbruch wird getestet + </string> <string name="TooltipPerson"> Person </string> @@ -151,6 +187,24 @@ <string name="TooltipAgentUrl"> Anklicken, um das Profil dieses Einwohners anzuzeigen </string> + <string name="TooltipAgentMute"> + Klicken, um diesen Einwohner stummzuschalten + </string> + <string name="TooltipAgentUnmute"> + Klicken, um diesen Einwohner freizuschalten + </string> + <string name="TooltipAgentIM"> + Klicken, um diesem Einwohner eine IM zu schicken. + </string> + <string name="TooltipAgentPay"> + Klicken, um diesen Einwohner zu bezahlen + </string> + <string name="TooltipAgentOfferTeleport"> + Klicken, um diesem Einwohner einen Teleport anzubieten. + </string> + <string name="TooltipAgentRequestFriend"> + Klicken, um diesem Einwohner ein Freundschaftsangebot zu schicken. + </string> <string name="TooltipGroupUrl"> Anklicken, um Beschreibung der Gruppe anzuzeigen </string> @@ -176,12 +230,31 @@ Anklicken, um Befehl secondlife:// auszuführen </string> <string name="CurrentURL" value=" CurrentURL: [CurrentURL]"/> + <string name="TooltipPrice" value="[PRICE] L$"/> <string name="SLurlLabelTeleport"> Teleportieren nach </string> <string name="SLurlLabelShowOnMap"> Karte anzeigen für </string> + <string name="SLappAgentMute"> + Stummschalten + </string> + <string name="SLappAgentUnmute"> + Stummschaltung aufheben + </string> + <string name="SLappAgentIM"> + IM + </string> + <string name="SLappAgentPay"> + Bezahlen + </string> + <string name="SLappAgentOfferTeleport"> + Teleportangebot an + </string> + <string name="SLappAgentRequestFriend"> + Freundschaftsangebot + </string> <string name="BUTTON_CLOSE_DARWIN"> Schließen (⌘W) </string> @@ -335,6 +408,9 @@ <string name="symbolic link"> Link </string> + <string name="symbolic folder link"> + Link zu Ordner + </string> <string name="AvatarEditingAppearance"> (Aussehen wird bearbeitet) </string> @@ -849,6 +925,7 @@ Keine Inhalte </string> <string name="WornOnAttachmentPoint" value=" (getragen am [ATTACHMENT_POINT])"/> + <string name="ActiveGesture" value="[GESLABEL] (aktiviert)"/> <string name="PermYes"> Ja </string> @@ -948,6 +1025,9 @@ <string name="InvFolder My Outfits"> Meine Outfits </string> + <string name="InvFolder Accessories"> + Zubehör + </string> <string name="InvFolder Friends"> Freunde </string> @@ -1183,7 +1263,7 @@ Oben links </string> <string name="Center"> - Zentrieren + Mitte </string> <string name="Bottom Left"> Unten links @@ -1289,13 +1369,13 @@ Fehler </string> <string name="RegionInfoAllEstatesOwnedBy"> - alle Grundstücke gehören [OWNER] + alle Grundbesitze gehören [OWNER] </string> <string name="RegionInfoAllEstatesYouOwn"> - alle Grundstücke, die Sie besitzen + alle Grundbesitze, die Sie besitzen </string> <string name="RegionInfoAllEstatesYouManage"> - alle Grundstücke, die Sie für [OWNER] verwalten + alle Grundbesitze, die Sie für [OWNER] verwalten </string> <string name="RegionInfoAllowedResidents"> Zulässige Einwohner: ([ALLOWEDAGENTS], max [MAXACCESS]) @@ -1471,6 +1551,9 @@ <string name="PanelContentsNewScript"> Neues Skript </string> + <string name="PanelContentsTooltip"> + Objektinhalt + </string> <string name="BusyModeResponseDefault"> Der Einwohner/Die Einwohnerin ist „beschäftigt", d.h. er/sie möchte im Moment nicht gestört werden. Ihre Nachricht wird dem Einwohner/der Einwohnerin als IM angezeigt, und kann später beantwortet werden. </string> @@ -1487,10 +1570,10 @@ (Gruppe) </string> <string name="RegionNoCovenant"> - Für dieses Grundstück liegt kein Vertrag vor. + Für diesen Grundbesitz liegt kein Vertrag vor. </string> <string name="RegionNoCovenantOtherOwner"> - Für dieses Grundstück liegt kein Vertrag vor. Das Land auf diesem Grundstück wird vom Grundstückseigentümer und nicht von Linden Lab verkauft. Für Informationen zum Verkauf setzen Sie sich bitte mit dem Grundstückseigentümer in Verbindung. + Für diesen Grundbesitz liegt kein Vertrag vor. Das Land auf diesem Grundbesitz wird vom Grundbesitzer und nicht von Linden Lab verkauft. Für Informationen zum Verkauf setzen Sie sich bitte mit dem Grundbesitzer in Verbindung. </string> <string name="covenant_last_modified"> Zuletzt geändert: @@ -1588,7 +1671,10 @@ Abbrechen </string> <string name="UploadingCosts"> - Hochladen von %s kostet + Das Hochladen von [NAME] kostet [AMOUNT] L$ + </string> + <string name="BuyingCosts"> + Die Kosten betragen: [AMOUNT] L$ </string> <string name="UnknownFileExtension"> Unbekanntes Dateiformat .%s @@ -3375,4 +3461,120 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_ <string name="unread_chat_multiple"> [SOURCES] haben etwas Neues gesagt </string> + <string name="paid_you_ldollars"> + [NAME] hat Ihnen [AMOUNT] L$ bezahlt. + </string> + <string name="you_paid_ldollars"> + Sie haben [REASON] [AMOUNT] L$ an [NAME] bezahlt. + </string> + <string name="you_paid_ldollars_no_reason"> + Sie haben [AMOUNT] L$ an [NAME] bezahlt. + </string> + <string name="you_paid_ldollars_no_name"> + Sie haben [REASON] [AMOUNT] L$ bezahlt. + </string> + <string name="for a parcel of land"> + für eine Landparzelle + </string> + <string name="for a land access pass"> + für einen Pass + </string> + <string name="for deeding land"> + für die Landübertragung + </string> + <string name="to create a group"> + für die Gründung einer Gruppe + </string> + <string name="to join a group"> + für den Beitritt zur Gruppe + </string> + <string name="to upload"> + fürs Hochladen + </string> + <string name="giving"> + [AMOUNT] L$ werden bezahlt + </string> + <string name="uploading_costs"> + Kosten für Hochladen [AMOUNT] L$ + </string> + <string name="this_costs"> + Kosten: [AMOUNT] L$ + </string> + <string name="buying_selected_land"> + Ausgewähltes Land wird für [AMOUNT] L$ gekauft. + </string> + <string name="this_object_costs"> + Dieses Objekt kostet [AMOUNT] L$ + </string> + <string name="group_role_everyone"> + Jeder + </string> + <string name="group_role_officers"> + Offiziere + </string> + <string name="group_role_owners"> + Eigentümer + </string> + <string name="uploading_abuse_report"> + Bericht wird hochgeladen... + +Missbrauchsbericht + </string> + <string name="New Shape"> + Neue Form/Gestalt + </string> + <string name="New Skin"> + Neue Haut + </string> + <string name="New Hair"> + Neues Haar + </string> + <string name="New Eyes"> + Neue Augen + </string> + <string name="New Shirt"> + Neues Hemd + </string> + <string name="New Pants"> + Neue Hose + </string> + <string name="New Shoes"> + Neue Schuhe + </string> + <string name="New Socks"> + Neue Socken + </string> + <string name="New Jacket"> + Neue Jacke + </string> + <string name="New Gloves"> + Neue Handschuhe + </string> + <string name="New Undershirt"> + Neues Unterhemd + </string> + <string name="New Underpants"> + Neue Unterhose + </string> + <string name="New Skirt"> + Neuer Rock + </string> + <string name="New Alpha"> + Neues Alpha + </string> + <string name="New Tattoo"> + Neue Tätowierung + </string> + <string name="Invalid Wearable"> + Ungültiges Objekt + </string> + <string name="New Script"> + Neues Skript + </string> + <string name="New Folder"> + Neuer Ordner + </string> + <string name="Contents"> + Inhalt + </string> </strings> diff --git a/indra/newview/skins/default/xui/en/floater_about_land.xml b/indra/newview/skins/default/xui/en/floater_about_land.xml index 2764befeac..51bd7a0a16 100644 --- a/indra/newview/skins/default/xui/en/floater_about_land.xml +++ b/indra/newview/skins/default/xui/en/floater_about_land.xml @@ -275,7 +275,7 @@ Leyla Linden </text> left_pad="4" right="-10" name="Set..." - width="50" + width="90" top_delta="-2"/> <check_box enabled="false" @@ -407,7 +407,7 @@ Leyla Linden </text> name="Cancel Land Sale" left_pad="5" top_pad="-25" - width="155" /> + width="180" /> <text type="string" length="1" @@ -486,10 +486,10 @@ Leyla Linden </text> height="23" label="Buy Land" layout="topleft" - left_delta="82" + left_delta="52" name="Buy Land..." top_pad="7" - width="100" /> + width="130" /> <button enabled="true" follows="left|top" @@ -499,7 +499,7 @@ Leyla Linden </text> left="10" name="Scripts..." top_pad="1" - width="100" /> + width="150" /> <button enabled="false" follows="left|top" @@ -516,11 +516,11 @@ Leyla Linden </text> height="23" label="Buy Pass" layout="topleft" - left_delta="-105" + left_delta="-135" name="Buy Pass..." tool_tip="A pass gives you temporary access to this land." top_delta="0" - width="100" /> + width="130" /> <button follows="left|top" height="23" @@ -559,21 +559,26 @@ Leyla Linden </text> left="0" top="0" help_topic="land_covenant_tab" - name="land_covenant_panel"> + name="land_covenant_panel" + word_wrap="true"> <panel.string - name="can_resell"> + name="can_resell" + word_wrap="true"> Purchased land in this region may be resold. </panel.string> <panel.string - name="can_not_resell"> + name="can_not_resell" + word_wrap="true"> Purchased land in this region may not be resold. </panel.string> <panel.string - name="can_change"> + name="can_change" + word_wrap="true"> Purchased land in this region may be joined or subdivided. </panel.string> <panel.string - name="can_not_change"> + name="can_not_change" + word_wrap="true"> Purchased land in this region may not be joined or subdivided. </panel.string> <text @@ -748,6 +753,7 @@ Leyla Linden </text> left_pad="10" mouse_opaque="false" name="resellable_clause" + word_wrap="true" width="330"> Land in this region may not be resold. </text> @@ -1056,7 +1062,7 @@ Leyla Linden </text> left="10" name="Autoreturn" top_pad="0" - width="294"> + width="310"> Auto return other Residents' objects (minutes, 0 for off): </text> <line_editor @@ -1234,7 +1240,7 @@ Only large parcels can be listed in search. layout="topleft" left_pad="2" name="edit objects check" - width="120" /> + width="130" /> <check_box height="16" label="Group" @@ -1260,7 +1266,7 @@ Only large parcels can be listed in search. left_pad="2" name="all object entry check" top_delta="0" - width="120" /> + width="130" /> <check_box height="16" label="Group" @@ -1287,7 +1293,7 @@ Only large parcels can be listed in search. left_pad="2" name="check other scripts" top_delta="0" - width="120" /> + width="130" /> <check_box height="16" label="Group" @@ -1341,7 +1347,7 @@ Only large parcels can be listed in search. left="30" name="land category with adult" visible="false" - width="130"> + width="140"> <combo_box.item label="Any Category" name="item0" @@ -1402,7 +1408,7 @@ Only large parcels can be listed in search. left="30" name="land category" visible="false" - width="130"> + width="140"> <combo_box.item label="Any Category" name="item0" @@ -1619,7 +1625,7 @@ Only large parcels can be listed in search. layout="topleft" left_pad="5" name="set_media_url" - width="50" + width="70" top_delta="0"/> <check_box follows="top|left" diff --git a/indra/newview/skins/default/xui/en/floater_animation_preview.xml b/indra/newview/skins/default/xui/en/floater_animation_preview.xml index 1ffedde29b..9dff4abe2c 100644 --- a/indra/newview/skins/default/xui/en/floater_animation_preview.xml +++ b/indra/newview/skins/default/xui/en/floater_animation_preview.xml @@ -218,14 +218,14 @@ Maximum animation length is [MAX_LENGTH] seconds. increment="1" initial_value="0" label="In(%)" - label_width="49" + label_width="70" layout="topleft" top_pad="5" - left="30" + left="15" max_val="100" name="loop_in_point" tool_tip="Sets point in animation that looping returns to" - width="115" /> + width="130" /> <spinner bottom_delta="0" follows="left|top" @@ -238,8 +238,8 @@ Maximum animation length is [MAX_LENGTH] seconds. max_val="100" name="loop_out_point" tool_tip="Sets point in animation that ends a loop" - label_width="49" - width="115" /> + label_width="60" + width="120" /> <text type="string" length="1" @@ -256,10 +256,10 @@ Maximum animation length is [MAX_LENGTH] seconds. <combo_box height="23" layout="topleft" - left_pad="0" + left_pad="20" name="hand_pose_combo" tool_tip="Controls what hands do during animation" - width="150"> + width="130"> <combo_box.item label="Spread" name="Spread" @@ -328,9 +328,9 @@ Maximum animation length is [MAX_LENGTH] seconds. </text> <combo_box height="23" - width="150" + width="130" layout="topleft" - left_pad="0" + left_pad="20" name="emote_combo" tool_tip="Controls what face does during animation"> <combo_box.item @@ -409,9 +409,9 @@ Maximum animation length is [MAX_LENGTH] seconds. </text> <combo_box height="23" - width="150" + width="130" layout="topleft" - left_pad="0" + left_pad="20" name="preview_base_anim" tool_tip="Use this to test your animation behavior while your avatar performs common actions."> <combo_box.item @@ -433,27 +433,27 @@ Maximum animation length is [MAX_LENGTH] seconds. increment="0.01" initial_value="0" label="Ease In (sec)" - label_width="110" + label_width="140" layout="topleft" left="10" max_val="10" name="ease_in_time" tool_tip="Amount of time (in seconds) over which animations blends in" top_pad="10" - width="200" /> + width="210" /> <spinner follows="left|top" height="23" increment="0.01" initial_value="0" label="Ease Out (sec)" - label_width="110" + label_width="140" layout="topleft" top_pad="0" max_val="10" name="ease_out_time" tool_tip="Amount of time (in seconds) over which animations blends out" - width="200" /> + width="210" /> <button follows="top|right" height="23" diff --git a/indra/newview/skins/default/xui/en/floater_buy_currency.xml b/indra/newview/skins/default/xui/en/floater_buy_currency.xml index 961bd6b5e4..e02d32596a 100644 --- a/indra/newview/skins/default/xui/en/floater_buy_currency.xml +++ b/indra/newview/skins/default/xui/en/floater_buy_currency.xml @@ -182,7 +182,7 @@ width="180" layout="topleft" name="buy_action"> - [NAME] L$ [PRICE] + [ACTION] </text> <text type="string" diff --git a/indra/newview/skins/default/xui/en/floater_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml index 25016e0673..422e50f035 100644 --- a/indra/newview/skins/default/xui/en/floater_im_session.xml +++ b/indra/newview/skins/default/xui/en/floater_im_session.xml @@ -13,7 +13,7 @@ can_minimize="true" can_close="true" visible="false" - width="360" + width="385" can_resize="true" min_width="250" min_height="190"> @@ -22,7 +22,7 @@ default_tab_group="2" follows="all" height="320" - width="360" + width="385" layout="topleft" orientation="horizontal" name="im_panels" diff --git a/indra/newview/skins/default/xui/en/floater_inventory.xml b/indra/newview/skins/default/xui/en/floater_inventory.xml index 0d381fe5cb..ba2e0d3277 100644 --- a/indra/newview/skins/default/xui/en/floater_inventory.xml +++ b/indra/newview/skins/default/xui/en/floater_inventory.xml @@ -14,22 +14,6 @@ single_instance="false" title="MY INVENTORY" width="467"> - <floater.string - name="Title"> - MY INVENTORY - </floater.string> - <floater.string - name="TitleFetching"> - MY INVENTORY (Fetching [ITEM_COUNT] Items...) [FILTER] - </floater.string> - <floater.string - name="TitleCompleted"> - MY INVENTORY ([ITEM_COUNT] Items) [FILTER] - </floater.string> - <floater.string - name="Fetched"> - Fetched - </floater.string> <panel bottom="560" class="panel_main_inventory" diff --git a/indra/newview/skins/default/xui/en/floater_preferences.xml b/indra/newview/skins/default/xui/en/floater_preferences.xml index d7a7daf30c..49361784ae 100644 --- a/indra/newview/skins/default/xui/en/floater_preferences.xml +++ b/indra/newview/skins/default/xui/en/floater_preferences.xml @@ -10,7 +10,7 @@ help_topic="preferences" single_instance="true" title="PREFERENCES" - width="620"> + width="658"> <button follows="right|bottom" height="23" @@ -39,6 +39,7 @@ </button> <tab_container follows="all" + halign="left" height="410" layout="topleft" left="0" @@ -48,7 +49,7 @@ tab_width="115" tab_padding_right="5" top="21" - width="620"> + width="658"> <panel class="panel_preference" filename="panel_preferences_general.xml" diff --git a/indra/newview/skins/default/xui/en/floater_sell_land.xml b/indra/newview/skins/default/xui/en/floater_sell_land.xml index afc44c41b8..4cae42bcfe 100644 --- a/indra/newview/skins/default/xui/en/floater_sell_land.xml +++ b/indra/newview/skins/default/xui/en/floater_sell_land.xml @@ -203,13 +203,13 @@ name="none" visible="false" /> <radio_item - bottom="20" + top_pad="10" height="16" label="No, keep ownership of objects" left="10" name="no" /> <radio_item - bottom="40" + top_pad="10" height="16" label="Yes, sell objects with land" left="10" diff --git a/indra/newview/skins/default/xui/en/floater_snapshot.xml b/indra/newview/skins/default/xui/en/floater_snapshot.xml index 89712efbb7..7dcf2aab99 100644 --- a/indra/newview/skins/default/xui/en/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/en/floater_snapshot.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater legacy_header_height="18" - can_minimize="false" - can_close="true" + can_minimize="true" + can_close="false" follows="left|top" height="340" layout="topleft" @@ -23,7 +23,7 @@ </floater.string> <view height="160" - width="225" + width="230" layout="topleft" name="thumbnail_placeholder" top_pad="30" @@ -45,74 +45,74 @@ follows="left|top" height="20" layout="topleft" - left="15" + left="10" max_length="500" name="description" - top_pad="20" - width="225" + top_pad="15" + width="230" label="Description"/> <button - label="Share to Web" + label="Share Snapshot" name="share" - top_pad="15" - left="15" + top_pad="20" + left="10" width="130"/> <button label="Share to Web" name="share_to_web" top_delta="0" - left="15" + left="10" width="130"/> <button label="Save to My Inventory" name="save_to_inventory" top_delta="0" - left="15" + left="10" width="130"/> <button label="Save Snapshot" name="save" top_pad="7" - left="15" + left="10" width="130"/> <button label="Email Snapshot" name="share_to_email" top_delta="0" - left="15" + left="10" width="130"/> <button label="Save to My Computer" name="save_to_computer" top_delta="0" - left="15" + left="10" width="130"/> <button label="Set As Profile Pic" name="set_profile_pic" top_pad="7" - left="15" + left="10" width="130"/> <button label="Back" name="cancel" top_delta="0" - left="15" + left="10" width="130"/> <button - follows="right" - height="22" - layout="topleft" - right="-12" + follows="left" + height="22" + layout="topleft" + left="210" name="show_advanced" image_overlay="TabIcon_Close_Off" top_delta="1" width="30"/> <button - follows="right" + follows="left" height="22" layout="topleft" - right="-12" + left="210" visible="false" name="hide_advanced" image_overlay="TabIcon_Open_Off" @@ -121,7 +121,7 @@ <panel visible="false" left="250" - top="35" + top="17" name="snapshot_advanced" filename="panel_snapshot_advanced.xml"/> </floater> diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml index 12d169b70a..957ab240ee 100644 --- a/indra/newview/skins/default/xui/en/floater_tools.xml +++ b/indra/newview/skins/default/xui/en/floater_tools.xml @@ -12,7 +12,7 @@ short_title="BUILD TOOLS" single_instance="true" sound_flags="0" - width="280"> + width="295"> <floater.string name="status_rotate"> Drag colored bands to rotate object @@ -152,7 +152,7 @@ left="8" name="text status" top_pad="3" - width="275"> + width="285"> Drag to move, shift-drag to copy </text> <radio_group @@ -249,10 +249,10 @@ <check_box left="10" follows="left|top" - height="16" + height="28" control_name="EditLinkedParts" label="Edit linked" - layout="topleft" + layout="topleft" name="checkbox edit linked parts" > <check_box.commit_callback function="BuildTool.selectComponent"/> @@ -265,7 +265,7 @@ left="13" name="RenderingCost" tool_tip="Shows the rendering cost calculated for this object" - top_pad="9" + top_pad="2" type="string" width="100"> þ: [COUNT] @@ -330,7 +330,7 @@ top_delta="0" right="-10" width="18" - height="19" > + height="23" > <button.commit_callback function="BuildTool.gridOptions"/> </button> @@ -342,7 +342,7 @@ image_selected="Object_Cube_Selected" image_unselected="Object_Cube" layout="topleft" - left="4" + left="10" name="ToolCube" tool_tip="Cube" top="51" @@ -355,7 +355,7 @@ image_selected="Object_Prism_Selected" image_unselected="Object_Prism" layout="topleft" - left_delta="26" + left_delta="29" name="ToolPrism" tool_tip="Prism" top_delta="0" @@ -368,7 +368,7 @@ image_selected="Object_Pyramid_Selected" image_unselected="Object_Pyramid" layout="topleft" - left_delta="26" + left_delta="29" name="ToolPyramid" tool_tip="Pyramid" top_delta="0" @@ -381,7 +381,7 @@ image_selected="Object_Tetrahedron_Selected" image_unselected="Object_Tetrahedron" layout="topleft" - left_delta="26" + left_delta="29" name="ToolTetrahedron" tool_tip="Tetrahedron" top_delta="0" @@ -394,7 +394,7 @@ image_selected="Object_Cylinder_Selected" image_unselected="Object_Cylinder" layout="topleft" - left_delta="26" + left_delta="29" name="ToolCylinder" tool_tip="Cylinder" top_delta="0" @@ -407,7 +407,7 @@ image_selected="Object_Hemi_Cylinder_Selected" image_unselected="Object_Hemi_Cylinder" layout="topleft" - left_delta="26" + left_delta="29" name="ToolHemiCylinder" tool_tip="Hemicylinder" top_delta="0" @@ -420,7 +420,7 @@ image_selected="Object_Cone_Selected" image_unselected="Object_Cone" layout="topleft" - left_delta="26" + left_delta="29" name="ToolCone" tool_tip="Cone" top_delta="0" @@ -433,7 +433,7 @@ image_selected="Object_Hemi_Cone_Selected" image_unselected="Object_Hemi_Cone" layout="topleft" - left_delta="26" + left_delta="29" name="ToolHemiCone" tool_tip="Hemicone" top_delta="0" @@ -446,7 +446,7 @@ image_selected="Object_Sphere_Selected" image_unselected="Object_Sphere" layout="topleft" - left_delta="26" + left_delta="29" name="ToolSphere" tool_tip="Sphere" top_delta="0" @@ -459,7 +459,7 @@ image_selected="Object_Hemi_Sphere_Selected" image_unselected="Object_Hemi_Sphere" layout="topleft" - left_delta="26" + left_delta="29" name="ToolHemiSphere" tool_tip="Hemisphere" top_delta="0" @@ -472,7 +472,7 @@ image_selected="Object_Torus_Selected" image_unselected="Object_Torus" layout="topleft" - left="4" + left="10" name="ToolTorus" tool_tip="Torus" top="77" @@ -485,7 +485,7 @@ image_selected="Object_Tube_Selected" image_unselected="Object_Tube" layout="topleft" - left_delta="26" + left_delta="29" name="ToolTube" tool_tip="Tube" top_delta="0" @@ -498,7 +498,7 @@ image_selected="Object_Ring_Selected" image_unselected="Object_Ring" layout="topleft" - left_delta="26" + left_delta="29" name="ToolRing" tool_tip="Ring" top_delta="0" @@ -511,7 +511,7 @@ image_selected="Object_Tree_Selected" image_unselected="Object_Tree" layout="topleft" - left_delta="26" + left_delta="29" name="ToolTree" tool_tip="Tree" top_delta="0" @@ -525,7 +525,7 @@ image_unselected="Object_Grass" image_overlay_color="Red" layout="topleft" - left_delta="26" + left_delta="29" name="ToolGrass" tool_tip="Grass" top_delta="0" @@ -639,7 +639,7 @@ follows="left|top" height="12" layout="topleft" - left="150" + left="135" name="Bulldozer:" top="57" width="100"> @@ -697,7 +697,7 @@ </slider_bar> <button follows="left|top" - height="19" + height="23" label="Apply" label_selected="Apply" top_pad="5" @@ -705,7 +705,7 @@ left="135" name="button apply to selection" tool_tip="Modify selected land" - width="78"> + width="82"> <button.commit_callback function="BuildTool.applyToSelection"/> </button> @@ -713,13 +713,13 @@ text_color="LtGray_50" type="string" length="1" - height="12" + height="10" follows="left|top" halign="right" layout="topleft" right="-10" name="obj_count" - top_pad="6" + top_pad="5" width="143"> Objects: [COUNT] </text> @@ -741,12 +741,12 @@ halign="center" left="0" name="Object Info Tabs" - tab_max_width="54" + tab_max_width="100" tab_min_width="40" tab_position="top" tab_height="25" top="170" - width="280"> + width="295"> <panel border="false" follows="all" @@ -756,8 +756,8 @@ help_topic="toolbox_general_tab" name="General" top="16" - width="280"> - <panel.string + width="295"> +<panel.string name="text deed continued"> Deed </panel.string> @@ -922,13 +922,13 @@ width="150" /> <button follows="top|left" - height="20" + height="23" label="Deed" label_selected="Deed" layout="topleft" name="button deed" top_pad="0" - left="100" + left="108" tool_tip="Deeding gives this item away with next owner permissions. Group shared objects can be deeded by a group officer." width="80" /> <check_box @@ -949,12 +949,12 @@ top_pad="15" left="10" name="label click action" - width="90"> + width="98"> Click to: </text> <combo_box follows="left|top" - height="20" + height="23" layout="topleft" name="clickaction" width="168" @@ -985,25 +985,24 @@ value="Zoom" /> </combo_box> <check_box - height="16" - top_pad="15" + height="23" label="For Sale:" layout="topleft" name="checkbox for sale" left="7" - width="93" /> + width="100" /> <!-- NEW SALE TYPE COMBO BOX --> <combo_box - left_pad="3" + left_pad="0" layout="topleft" follows="left|top" allow_text_entry="false" - height="20" + height="23" intial_value="2" max_chars="20" mouse_opaque="true" name="sale type" - width="158"> + width="168"> <combo_box.item name="Copy" label="Copy" @@ -1026,12 +1025,12 @@ even though the user gets a free copy. decimal_digits="0" increment="1" top_pad="8" - left="100" + left="108" control_name="Edit Cost" name="Edit Cost" label="Price: L$" label_width="65" - width="150" + width="165" min_val="0" height="20" max_val="999999999" /> @@ -1055,7 +1054,7 @@ even though the user gets a free copy. left="0" top="241" height="130" - width="278"> + width="290"> <text type="string" length="1" @@ -1082,7 +1081,7 @@ even though the user gets a free copy. label="Move" layout="topleft" name="checkbox allow everyone move" - left="15" + left="10" width="85" /> <check_box height="19" @@ -1104,9 +1103,9 @@ even though the user gets a free copy. follows="left|top|right" label="Modify" layout="topleft" - left="5" + left="10" name="checkbox next owner can modify" - width="80" /> + width="85" /> <check_box follows="left|top|right" height="19" @@ -1212,7 +1211,7 @@ even though the user gets a free copy. help_topic="toolbox_object_tab" name="Object" top="16" - width="280"> + width="295"> <check_box height="19" label="Locked" @@ -1553,7 +1552,7 @@ even though the user gets a free copy. layout="topleft" left="125" name="text hollow" - top_pad="5" + top_pad="6" width="68"> Hollow </text> @@ -1601,16 +1600,16 @@ even though the user gets a free copy. layout="topleft" left="125" name="Hollow Shape" - top_pad="0" + top_pad="4" width="150"> Hollow Shape </text> <combo_box - height="19" + height="23" layout="topleft" left_delta="0" name="hole" - top_pad="3" + top_pad="-2" width="150"> <combo_box.item label="Default" @@ -1882,7 +1881,7 @@ even though the user gets a free copy. layout="topleft" left="125" name="text radius delta" - top_pad="0" + top_pad="2" width="78"> Radius </text> @@ -1999,7 +1998,6 @@ even though the user gets a free copy. value="Cylinder" /> </combo_box> </panel> - <panel border="false" follows="all" @@ -2011,7 +2009,7 @@ even though the user gets a free copy. help_topic="toolbox_features_tab" name="Features" top_delta="0" - width="280"> + width="295"> <text type="string" length="1" @@ -2249,7 +2247,7 @@ even though the user gets a free copy. help_topic="toolbox_texture_tab" name="Texture" top_delta="0" - width="280"> + width="295"> <panel.string name="string repeats per meter"> Repeats Per Meter @@ -2313,7 +2311,7 @@ even though the user gets a free copy. layout="topleft" left_delta="0" name="glow label" - top_pad="2" + top_pad="8" width="80"> Glow </text> @@ -2344,7 +2342,7 @@ even though the user gets a free copy. left="10" name="tex gen" top_pad="5" - width="85"> + width="90"> Mapping </text> <combo_box @@ -2353,7 +2351,7 @@ even though the user gets a free copy. left_delta="0" name="combobox texgen" top_pad="4" - width="85"> + width="90"> <combo_box.item label="Default" name="Default" @@ -2372,7 +2370,7 @@ even though the user gets a free copy. name="label shininess" left_pad="4" top_pad="-36" - width="85"> + width="90"> Shininess </text> <combo_box @@ -2381,7 +2379,7 @@ even though the user gets a free copy. left_delta="0" name="combobox shininess" top_pad="4" - width="85"> + width="90"> <combo_box.item label="None" name="None" @@ -2408,7 +2406,7 @@ even though the user gets a free copy. left_pad="4" name="label bumpiness" top_pad="-36" - width="85"> + width="90"> Bumpiness </text> <combo_box @@ -2417,7 +2415,7 @@ even though the user gets a free copy. left_delta="0" name="combobox bumpiness" top_pad="4" - width="85"> + width="90"> <combo_box.item label="None" name="None" @@ -2533,7 +2531,7 @@ even though the user gets a free copy. layout="topleft" left="10" name="tex scale" - top_pad="5" + top_pad="4" width="200"> Repeats / Face </text> @@ -2567,7 +2565,6 @@ even though the user gets a free copy. left="20" max_val="100" name="TexScaleV" - top_pad="0" width="160" /> <check_box height="19" @@ -2577,7 +2574,6 @@ even though the user gets a free copy. name="checkbox flip t" top_delta="0" width="70" /> - <spinner decimal_digits="2" follows="left|top" @@ -2591,13 +2587,12 @@ even though the user gets a free copy. max_val="9999" min_val="-9999" name="TexRot" - top_delta="25" width="170" /> <spinner decimal_digits="1" follows="left|top" - height="19" + height="23" initial_value="1" label="Repeats / Meter" layout="topleft" @@ -2606,7 +2601,6 @@ even though the user gets a free copy. max_val="10" min_val="0.1" name="rptctrl" - top_delta="20" width="170" /> <button follows="left|top" @@ -2625,7 +2619,6 @@ even though the user gets a free copy. layout="topleft" left="10" name="tex offset" - top_delta="20" width="200"> Texture Offset </text> @@ -2639,7 +2632,6 @@ even though the user gets a free copy. left="20" min_val="-1" name="TexOffsetU" - top_pad="6" width="160" /> <spinner follows="left|top" @@ -2662,30 +2654,20 @@ even though the user gets a free copy. bg_alpha_color="DkGray" name="Add_Media" left="0" - top_pad="0" - height="75" - width="278"> + height="63" + width="290"> <text type="string" length="1" follows="left|top" - height="12" + height="18" layout="topleft" left="10" - top_pad="5" + top_pad="3" name="media_tex" - width="260"> + width="190"> Media </text> - <text - follows="left|top|right" - height="18" - layout="topleft" - left="10" - use_ellipses="true" - read_only="true" - name="media_info" - width="180" /> <button follows="top|left" height="18" @@ -2731,6 +2713,15 @@ even though the user gets a free copy. <button.commit_callback function="BuildTool.EditMedia"/> </button> + <text + follows="left|top|right" + height="9" + layout="topleft" + left="10" + use_ellipses="true" + read_only="true" + name="media_info" + width="280" /> <web_browser visible="false" enabled="false" @@ -2744,16 +2735,15 @@ even though the user gets a free copy. start_url="about:blank" decouple_texture_size="true" /> <button - follows="left|top" - height="23" + follows="right|top" + height="22" label="Align" label_selected="Align Media" layout="topleft" - left="10" + right="-10" name="button align" - top_pad="5" tool_tip="Align media texture (must load first)" - width="100" /> + width="80" /> </panel> </panel> <panel @@ -2766,36 +2756,36 @@ even though the user gets a free copy. help_topic="toolbox_contents_tab" name="Contents" top_delta="0" - width="280"> + width="295"> <button follows="left|top" - height="19" + height="23" label="New Script" label_selected="New Script" layout="topleft" left="10" name="button new script" top="10" - width="120" /> + width="134" /> <button follows="left|top" - height="19" + height="23" label="Permissions" layout="topleft" left_pad="8" name="button permissions" - width="130" /> + width="134" /> <panel_inventory_object border="true" border_visible="true" bevel_style="in" - follows="left|top" + follows="left|top|right" height="325" layout="topleft" left="10" name="contents_inventory" top="50" - width="260" /> + width="275" /> </panel> </tab_container> <panel @@ -2805,7 +2795,7 @@ even though the user gets a free copy. left_delta="0" name="land info panel" top_delta="0" - width="280"> + width="295"> <text type="string" length="1" @@ -2845,14 +2835,14 @@ even though the user gets a free copy. </text> <button follows="left|top" - height="20" + height="23" label="About Land" label_selected="About Land" layout="topleft" left_delta="0" name="button about land" top_pad="4" - width="112" /> + width="125" /> <check_box control_name="ShowParcelOwners" height="19" @@ -2873,29 +2863,29 @@ even though the user gets a free copy. left="20" name="label_parcel_modify" top="152" - width="150"> + width="240"> Modify Parcel </text> <button follows="left|top" - height="20" + height="23" label="Subdivide" label_selected="Subdivide" layout="topleft" left="30" name="button subdivide land" top="172" - width="112" /> + width="125" /> <button follows="left|top" - height="20" + height="23" label="Join" label_selected="Join" layout="topleft" left_delta="0" name="button join land" top_pad="4" - width="112" /> + width="125" /> <text type="string" length="1" @@ -2906,28 +2896,28 @@ even though the user gets a free copy. left="20" name="label_parcel_trans" top="256" - width="150"> + width="240"> Land Transactions </text> <button follows="left|top" - height="20" + height="23" label="Buy Land" label_selected="Buy Land" layout="topleft" left="30" name="button buy land" top="276" - width="112" /> + width="125" /> <button follows="left|top" - height="20" + height="23" label="Abandon Land" label_selected="Abandon Land" layout="topleft" left_delta="0" name="button abandon land" top_pad="4" - width="112" /> + width="125" /> </panel> </floater> diff --git a/indra/newview/skins/default/xui/en/floater_tos.xml b/indra/newview/skins/default/xui/en/floater_tos.xml index 5e168fe4aa..f3665e87ed 100644 --- a/indra/newview/skins/default/xui/en/floater_tos.xml +++ b/indra/newview/skins/default/xui/en/floater_tos.xml @@ -33,7 +33,7 @@ <check_box follows="top|right" height="16" - label="I Agree to the Terms of Service" + label="I Agree to the Terms of Service and Privacy Policy" layout="topleft" left_delta="0" name="agree_chk" @@ -51,7 +51,7 @@ top_delta="-399" word_wrap="true" width="552"> - Please read the following Terms of Service carefully. To continue logging in to [SECOND_LIFE], you must accept the agreement. + Please read the following Terms of Service and Privacy Policy carefully. To continue logging in to [SECOND_LIFE], you must accept the agreement. </text> <web_browser follows="left|top" diff --git a/indra/newview/skins/default/xui/en/main_view.xml b/indra/newview/skins/default/xui/en/main_view.xml index 85853f39bb..e8f9d65be5 100644 --- a/indra/newview/skins/default/xui/en/main_view.xml +++ b/indra/newview/skins/default/xui/en/main_view.xml @@ -143,12 +143,19 @@ <panel mouse_opaque="false" follows="left|right|top" name="status_bar_container" - tab_stop="false" + tab_stop="false" height="19" left="0" top="0" width="1024" visible="false"/> + <view mouse_opaque="false" + follows="all" + name="menu_bar_holder" + left="0" + top="0" + width="1024" + height="768"/> <notify_box_view top="0" follows="all" height="768" @@ -159,6 +166,33 @@ <panel top="0" follows="all" height="768" + mouse_opaque="true" + name="progress_view" + filename="panel_progress.xml" + class="progress_view" + width="1024" + visible="false"/> + <panel top="0" + follows="all" + mouse_opaque="false" + left="0" + name="snapshot_floater_view_holder" + width="1024" + height="798"> + <snapshot_floater_view enabled="false" + follows="all" + height="768" + left="0" + mouse_opaque="false" + name="Snapshot Floater View" + tab_stop="false" + top="0" + visible="false" + width="1024"/> + </panel> + <panel top="0" + follows="all" + height="768" mouse_opaque="false" name="popup_holder" class="popup_holder" @@ -169,16 +203,6 @@ mouse_opaque="false" name="Menu Holder" width="1024"/> - <snapshot_floater_view enabled="false" - follows="all" - height="768" - left="0" - mouse_opaque="false" - name="Snapshot Floater View" - tab_stop="false" - top="0" - visible="false" - width="1024"/> <tooltip_view top="0" follows="all" height="768" diff --git a/indra/newview/skins/default/xui/en/menu_profile_overflow.xml b/indra/newview/skins/default/xui/en/menu_profile_overflow.xml index 5162a4902f..b0b7b554b0 100644 --- a/indra/newview/skins/default/xui/en/menu_profile_overflow.xml +++ b/indra/newview/skins/default/xui/en/menu_profile_overflow.xml @@ -6,6 +6,15 @@ name="profile_overflow_menu" width="120"> <menu_item_call + label="Map" + layout="topleft" + name="show_on_map"> + <menu_item_call.on_click + function="Profile.ShowOnMap" /> + <menu_item_call.on_enable + function="Profile.EnableShowOnMap" /> + </menu_item_call> + <menu_item_call label="Pay" layout="topleft" name="pay"> diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 158e764eae..a08bc16066 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -177,7 +177,8 @@ label="Nearby Chat" layout="topleft" name="Nearby Chat" - shortcut="control|H"> + shortcut="control|H" + use_mac_ctrl="true"> <menu_item_check.on_check function="Floater.Visible" parameter="nearby_chat" /> diff --git a/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml index 1e2e74f882..876ff9961b 100644 --- a/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml +++ b/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml @@ -69,7 +69,7 @@ name="last_interaction" text_color="LtGray_50" value="0s" - width="24" /> + width="35" /> <button follows="right" height="16" diff --git a/indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml index 072ea882e6..d3f6695375 100644 --- a/indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml +++ b/indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml @@ -39,7 +39,13 @@ name="blocked" tool_tip="List of currently blocked Residents" top="30" - width="270" /> + width="270"> + <scroll_list.columns + name="item_name" /> + <scroll_list.columns + name="item_type" + width="96" /> + </scroll_list> <button follows="left|bottom" height="23" diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml index e70a0512d6..58c5c11e51 100644 --- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml +++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml @@ -74,12 +74,15 @@ name="talk" top="5" width="105"> + <!-- do not remove halign attribute with default value. otherwise it can't be overridden in other locales. + & pad_right is default value for long label which can be right aligned. See EXT-6318 --> <speak_button - halign="left" + halign="center" name="speak_btn" label="Speak" label_selected="Speak" - pad_left="12" + pad_right="22" + use_ellipses="true" /> <show_button> <show_button.init_callback diff --git a/indra/newview/skins/default/xui/en/panel_edit_profile.xml b/indra/newview/skins/default/xui/en/panel_edit_profile.xml index 26be8440e7..dff2b9a214 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_profile.xml @@ -146,7 +146,7 @@ layout="topleft" left="123" top="25" - max_length="512" + max_length="511" name="sl_description_edit" width="157" word_wrap="true"> @@ -200,7 +200,7 @@ height="102" layout="topleft" left="123" - max_length="512" + max_length="254" top="157" name="fl_description_edit" width="157" diff --git a/indra/newview/skins/default/xui/en/panel_group_general.xml b/indra/newview/skins/default/xui/en/panel_group_general.xml index f913c58cc9..9341d433e8 100644 --- a/indra/newview/skins/default/xui/en/panel_group_general.xml +++ b/indra/newview/skins/default/xui/en/panel_group_general.xml @@ -241,14 +241,17 @@ Hover your mouse over the options for more help. tool_tip="Sets whether your group contains information rated as Moderate" top_pad="4" width="190"> + <combo_item name="select_mature" value="Select"> + - Select Mature - + </combo_item> <combo_box.item - label="General Content" - name="pg" - value="Not Mature" /> - <combo_box.item label="Moderate Content" name="mature" value="Mature" /> + <combo_box.item + label="General Content" + name="pg" + value="Not Mature" /> </combo_box> <check_box follows="left|top" diff --git a/indra/newview/skins/default/xui/en/panel_group_roles.xml b/indra/newview/skins/default/xui/en/panel_group_roles.xml index 19c0da4f08..0eb5c47f85 100644 --- a/indra/newview/skins/default/xui/en/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/en/panel_group_roles.xml @@ -385,7 +385,7 @@ things in this group. There's a broad variety of Abilities. left="0" follows="left|top|right" right="-1" - max_length="295" + max_length="20" name="role_name" top_pad="0" width="300"> @@ -408,7 +408,7 @@ things in this group. There's a broad variety of Abilities. left="0" follows="left|top|right" right="-1" - max_length="295" + max_length="20" name="role_title" top_pad="0" width="300"> diff --git a/indra/newview/skins/default/xui/en/panel_landmarks.xml b/indra/newview/skins/default/xui/en/panel_landmarks.xml index ee8bca6f83..639e5d30ef 100644 --- a/indra/newview/skins/default/xui/en/panel_landmarks.xml +++ b/indra/newview/skins/default/xui/en/panel_landmarks.xml @@ -3,22 +3,25 @@ name="Landmarks" top="0" height="400" - layout="topleft" + layout="topleft" left="0" - width="380" + width="313" help_topic="panel_landmarks" border="false" background_visible="true" - bg_alpha_color="DkGray2" + bg_alpha_color="DkGray" follows="all"> <accordion + background_visible="true" + bg_alpha_color="DkGray2" + bg_opaque_color="DkGray2" follows="all" - height="360" + height="369" layout="topleft" - left="0" + left="3" name="landmarks_accordion" top="0" - width="380"> + width="307"> <accordion_tab layout="topleft" name="tab_favorites" @@ -33,7 +36,7 @@ mouse_opaque="true" name="favorites_list" start_folder="Favorites" - width="380"/> + width="307"/> </accordion_tab> <accordion_tab layout="topleft" @@ -49,7 +52,7 @@ mouse_opaque="true" name="landmarks_list" start_folder="Landmarks" - width="380"/> + width="307"/> </accordion_tab> <accordion_tab layout="topleft" @@ -65,7 +68,7 @@ mouse_opaque="true" name="my_inventory_list" start_folder="My Inventory" - width="380"/> + width="307"/> </accordion_tab> <accordion_tab layout="topleft" @@ -81,55 +84,64 @@ mouse_opaque="true" name="library_list" start_folder="LIBRARY" - width="380"/> + width="313"/> </accordion_tab> </accordion> <panel - bg_opaque_color="DkGray2" - bg_alpha_color="DkGray2" - background_visible="true" - background_opaque="true" + background_visible="true" bevel_style="none" bottom="0" follows="left|right|bottom" - height="38" + height="27" layout="bottomleft" - left="0" + left="3" name="bottom_panel" - width="380"> + width="313"> <button follows="bottom|left" tool_tip="Show additional options" - height="18" - image_disabled="OptionsMenu_Disabled" - image_selected="OptionsMenu_Press" - image_unselected="OptionsMenu_Off" + height="25" + image_hover_unselected="Toolbar_Left_Over" + image_overlay="OptionsMenu_Off" + image_selected="Toolbar_Left_Selected" + image_unselected="Toolbar_Left_Off" layout="topleft" - left="10" + left="0" name="options_gear_btn" - top="14" - width="18" /> + top="1" + width="31" /> <button follows="bottom|left" - height="18" - image_selected="AddItem_Press" - image_unselected="AddItem_Off" - image_disabled="AddItem_Disabled" + height="25" + image_hover_unselected="Toolbar_Middle_Over" + image_overlay="AddItem_Off" + image_selected="Toolbar_Middle_Selected" + image_unselected="Toolbar_Middle_Off" layout="topleft" - left_pad="10" + left_pad="1" name="add_btn" tool_tip="Add new landmark" - width="18" /> + width="31" /> + <icon + follows="bottom|left" + height="25" + image_name="Toolbar_Middle_Off" + layout="topleft" + left_pad="1" + name="dummy_icon" + width="209" + /> <dnd_button - follows="bottom|right" - height="18" - image_selected="TrashItem_Press" - image_unselected="TrashItem_Off" + follows="bottom|left" + height="25" + image_hover_unselected="Toolbar_Right_Over" + image_overlay="TrashItem_Off" + image_selected="Toolbar_Right_Selected" + image_unselected="Toolbar_Right_Off" layout="topleft" - right="-8" + left_pad="1" name="trash_btn" tool_tip="Remove selected landmark" - top="14" - width="18" /> + width="31" /> </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml index 627e616af5..cc68ec2bdc 100644 --- a/indra/newview/skins/default/xui/en/panel_login.xml +++ b/indra/newview/skins/default/xui/en/panel_login.xml @@ -204,7 +204,7 @@ height="16" name="forgot_password_text" top_pad="12" right="-10" - width="180"> + width="210"> Forgot your name or password? </text> <text @@ -216,7 +216,7 @@ height="16" name="login_help" top_pad="2" right="-10" - width="180"> + width="190"> Need help logging in? </text> <!-- <text follows="right|bottom" diff --git a/indra/newview/skins/default/xui/en/panel_main_inventory.xml b/indra/newview/skins/default/xui/en/panel_main_inventory.xml index 50983d2976..bef62f48e0 100644 --- a/indra/newview/skins/default/xui/en/panel_main_inventory.xml +++ b/indra/newview/skins/default/xui/en/panel_main_inventory.xml @@ -10,9 +10,34 @@ name="main inventory panel" width="330"> <panel.string - name="Title"> - Things + name="Itemcount"> </panel.string> + <panel.string + name="ItemcountFetching"> + Fetching [ITEM_COUNT] Items... [FILTER] + </panel.string> + <panel.string + name="ItemcountCompleted"> + [ITEM_COUNT] Items [FILTER] + </panel.string> + <panel.string + name="ItemcountUnknown"> + + </panel.string> + <text + type="string" + length="1" + follows="left|top" + height="13" + layout="topleft" + left="12" + name="ItemcountText" + font="SansSerifMedium" + text_color="EmphasisColor" + top_pad="0" + width="300"> + Items: + </text> <menu_bar bg_visible="false" follows="left|top|right" @@ -21,8 +46,8 @@ left="10" mouse_opaque="false" name="Inventory Menu" - top="0" - visible="true" + top="+10" + visible="true" width="290"> <menu height="101" @@ -377,30 +402,30 @@ <filter_editor text_pad_left="10" follows="left|top|right" - height="23" + height="23" label="Filter Inventory" layout="topleft" left="10" -max_length="300" + max_length="300" name="inventory search editor" - top="26" + top="+31" width="303" /> <tab_container - bg_opaque_color="DkGray2" + bg_opaque_color="DkGray2" bg_alpha_color="DkGray2" background_visible="true" background_opaque="true" -follows="all" -halign="center" - height="305" - layout="topleft" - left="6" - name="inventory filter tabs" - tab_height="30" - tab_position="top" - tab_min_width="100" - top_pad="10" - width="315"> + follows="all" + halign="center" + height="306" + layout="topleft" + left="7" + name="inventory filter tabs" + tab_height="30" + tab_position="top" + tab_min_width="100" + top_pad="10" + width="312"> <inventory_panel bg_opaque_color="DkGray2" bg_alpha_color="DkGray2" @@ -417,7 +442,7 @@ halign="center" name="All Items" sort_order_setting="InventorySortOrder" top="16" - width="290" /> + width="288" /> <inventory_panel bg_opaque_color="DkGray2" bg_alpha_color="DkGray2" @@ -426,7 +451,7 @@ halign="center" border="false" bevel_style="none" follows="all" - height="295" + height="293" label="RECENT" help_topic="recent_inventory_tab" layout="topleft" @@ -436,52 +461,61 @@ halign="center" </tab_container> <panel - bg_opaque_color="DkGray2" - bg_alpha_color="DkGray2" background_visible="true" - background_opaque="true" bevel_style="none" follows="left|right|bottom" - height="38" + height="27" layout="topleft" - top_pad="-1" - left="9" + top_pad="4" + left="10" name="bottom_panel" width="310"> <button follows="bottom|left" tool_tip="Show additional options" - height="18" - image_disabled="OptionsMenu_Disabled" - image_selected="OptionsMenu_Press" - image_unselected="OptionsMenu_Off" + height="25" + image_hover_unselected="Toolbar_Left_Over" + image_overlay="OptionsMenu_Off" + image_selected="Toolbar_Left_Selected" + image_unselected="Toolbar_Left_Off" layout="topleft" - left="8" + left="0" name="options_gear_btn" - top="14" - width="18" /> + top="1" + width="31" /> <button follows="bottom|left" - height="18" - image_selected="AddItem_Press" - image_unselected="AddItem_Off" - image_disabled="AddItem_Disabled" + height="25" + image_hover_unselected="Toolbar_Middle_Over" + image_overlay="AddItem_Off" + image_selected="Toolbar_Middle_Selected" + image_unselected="Toolbar_Middle_Off" layout="topleft" - left_pad="10" + left_pad="1" name="add_btn" tool_tip="Add new item" - width="18" /> + width="31" /> + <icon + follows="bottom|left" + height="25" + image_name="Toolbar_Middle_Off" + layout="topleft" + left_pad="1" + name="dummy_icon" + width="209" + /> <dnd_button - follows="bottom|right" - height="18" - image_selected="TrashItem_Press" - image_unselected="TrashItem_Off" + follows="bottom|left" + height="25" + image_hover_unselected="Toolbar_Right_Over" + image_overlay="TrashItem_Off" + image_selected="Toolbar_Right_Selected" + image_unselected="Toolbar_Right_Off" + left_pad="1" layout="topleft" - right="-7" name="trash_btn" tool_tip="Remove selected item" - top="14" - width="18" /> + width="31"/> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_nearby_media.xml b/indra/newview/skins/default/xui/en/panel_nearby_media.xml index d14712a7fa..53dda1927a 100644 --- a/indra/newview/skins/default/xui/en/panel_nearby_media.xml +++ b/indra/newview/skins/default/xui/en/panel_nearby_media.xml @@ -2,34 +2,34 @@ <panel can_resize="true" can_close="false" - mouse_opaque="true" - bg_opaque_image="Volume_Background" - bg_alpha_image="Volume_Background" - background_opaque="true" + bg_opaque_image="Volume_Background" + bg_alpha_image="Volume_Background" + background_opaque="true" background_visible="true" layout="topleft" width="270" - height="235" + height="230" name="nearby_media" help_topic="nearby_media"> + <string name="media_item_count_format">(%ld media items)</string> <string name="empty_item_text"><empty></string> <string name="parcel_media_name">Parcel Streaming Media</string> <string name="parcel_audio_name">Parcel Streaming Audio</string> <string name="playing_suffix">(playing)</string> <panel bevel_style="in" - background_visible="false" + background_visible="false" follows="left|right|top" top="0" - height="30" + height="35" name="minimized_controls" left="0"> <button name="all_nearby_media_disable_btn" follows="left" tool_tip="Turn all nearby media off" - left="15" - width="60" + left="8" + width="66" height="22" label="Stop All"> <button.commit_callback @@ -40,7 +40,7 @@ follows="left" tool_tip="Turn all nearby media on" left_pad="4" - width="60" + width="66" height="22" label="Start All"> <button.commit_callback @@ -68,8 +68,8 @@ follows="right" tool_tip="Advanced Controls" top_delta="0" - right="-10" - width="60" + right="-8" + width="66" height="22" toggle="true" label="More >>" @@ -95,7 +95,6 @@ follows="top|left" font="SansSerif" left="10" - name="nearby_media" width="100"> Nearby Media </text> @@ -106,7 +105,6 @@ font="SansSerif" top_pad="15" left="10" - name="show" width="40"> Show: </text> @@ -135,7 +133,6 @@ name="OnOthers" /> </combo_box> <scroll_list - name="media_list" follows="left|top|bottom|right" column_padding="0" height="105" @@ -144,7 +141,8 @@ bg_stripe_color="0.25 0.25 0.25 0.25" top_pad="8" left="10" - right="-10"> + right="-10" + name="media_list"> <scroll_list.columns type="checkbox" width="-1" @@ -181,7 +179,6 @@ top_pad="5" height="30" left="10" - name="media_controls_panel" right="-10"> <layout_stack name="media_controls" @@ -190,12 +187,14 @@ height="26" layout="topleft" top="4" - left="10" + left="8" right="-10" border_size="0" + mouse_opaque="false" orientation="horizontal"> <layout_panel name="stop" + mouse_opaque="false" auto_resize="false" user_resize="false" layout="topleft" @@ -223,6 +222,7 @@ </layout_panel> <layout_panel name="play" + mouse_opaque="false" auto_resize="false" user_resize="false" layout="topleft" @@ -250,6 +250,7 @@ </layout_panel> <layout_panel name="pause" + mouse_opaque="false" auto_resize="false" user_resize="false" layout="topleft" @@ -276,6 +277,7 @@ </layout_panel> <layout_panel name="volume_slider_ctrl" + mouse_opaque="false" auto_resize="true" user_resize="false" follows="left|right" @@ -300,6 +302,7 @@ </layout_panel> <layout_panel name="mute" + mouse_opaque="false" auto_resize="false" user_resize="false" layout="topleft" @@ -328,6 +331,7 @@ </layout_panel> <layout_panel name="zoom" + mouse_opaque="false" auto_resize="false" user_resize="false" layout="topleft" @@ -355,6 +359,7 @@ </layout_panel> <layout_panel name="unzoom" + mouse_opaque="false" auto_resize="false" user_resize="false" layout="topleft" @@ -383,6 +388,7 @@ <layout_panel name="right_bookend" width="0" + mouse_opaque="false" user_resize="false" /> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml index cc60b97f92..66ef373168 100644 --- a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml +++ b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml @@ -1,5 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel name="Outfits" + bg_alpha_color="DkGray" + bg_opaque_color="DkGray" + background_opaque="true" background_visible="true" follows="all" height="570" @@ -11,15 +14,15 @@ border="false"> <tab_container follows="all" - height="490" + height="497" layout="topleft" - left="6" + left="7" name="appearance_tabs" tab_min_width="140" tab_height="30" tab_position="top" halign="center" - width="315"> + width="312"> <inventory_panel background_visible="true" background_opaque="true" @@ -30,7 +33,7 @@ border="false" left="0" top="0" - width="314" + width="315" mouse_opaque="true" name="outfitslist_tab" start_folder="My Outfits" /> @@ -47,53 +50,53 @@ mouse_opaque="true" name="cof_tab" start_folder="Current Outfit" - width="313" /> + width="315" /> </tab_container> <panel - bg_opaque_color="DkGray2" - bg_alpha_color="DkGray2" background_visible="true" - background_opaque="true" - follows="left|right|bottom" - height="38" - layout="topleft" - left="9" - visible="true" - top_pad="-1" - width="310" /> - <panel - background_visible="false" follows="bottom|left" height="73" layout="topleft" left="9" + top_pad="3" visible="true" name="bottom_panel" - top_pad="-38" width="310"> <button follows="bottom|left" tool_tip="Show additional options" - height="18" - image_disabled="OptionsMenu_Disabled" - image_selected="OptionsMenu_Press" - image_unselected="OptionsMenu_Off" + height="25" + image_hover_unselected="Toolbar_Left_Over" + image_overlay="OptionsMenu_Off" + image_selected="Toolbar_Left_Selected" + image_unselected="Toolbar_Left_Off" layout="topleft" - left="8" + left="1" name="options_gear_btn" - top="14" - width="18" /> + top="1" + width="31" /> + <icon + follows="bottom|left" + height="25" + image_name="Toolbar_Middle_Off" + layout="topleft" + left_pad="1" + name="dummy_icon" + width="241" + /> + <dnd_button - follows="bottom|right" - height="18" - image_selected="TrashItem_Press" - image_unselected="TrashItem_Off" + follows="bottom|left" + height="25" + image_hover_unselected="Toolbar_Right_Over" + image_overlay="TrashItem_Off" + image_selected="Toolbar_Right_Selected" + image_unselected="Toolbar_Right_Off" layout="topleft" - right="-9" + left_pad="1" name="trash_btn" tool_tip="Remove selected item" - top="14" - width="18" /> + width="31"/> <button follows="bottom|left" height="23" @@ -101,7 +104,7 @@ layout="topleft" name="make_outfit_btn" tool_tip="Save appearance as an outfit" - top="43" + top_pad="6" left="0" width="153" /> <button @@ -111,7 +114,6 @@ layout="topleft" name="wear_btn" left_pad="3" - top="43" tool_tip="Wear selected outfit" width="152" /> <button @@ -126,4 +128,4 @@ width="20" /> </panel> -</panel> +</panel>
\ No newline at end of file diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml index 13791a6d32..85841da48f 100644 --- a/indra/newview/skins/default/xui/en/panel_people.xml +++ b/indra/newview/skins/default/xui/en/panel_people.xml @@ -2,13 +2,13 @@ <!-- Side tray panel --> <panel follows="all" + height="449" label="People" layout="topleft" - height="449" + left="0" min_height="350" name="people_panel" top="0" - left="0" width="333"> <string name="no_people" @@ -39,7 +39,6 @@ name="no_groups_msg" value="[secondlife:///app/search/groups Try searching for some groups to join.]" /> <filter_editor - text_pad_left="10" follows="left|top|right" height="23" layout="topleft" @@ -48,6 +47,7 @@ max_length="300" name="filter_input" text_color="Black" + text_pad_left="10" top="3" width="303" /> <tab_container @@ -63,10 +63,10 @@ halign="center" width="317"> <panel - bg_opaque_color="DkGray2" - bg_alpha_color="DkGray2" - background_visible="true" - background_opaque="true" + background_opaque="true" + background_visible="true" + bg_alpha_color="DkGray" + bg_opaque_color="DkGray" follows="all" height="383" label="NEARBY" @@ -78,56 +78,70 @@ width="313"> <avatar_list allow_select="true" + bg_alpha_color="DkGray2" + bg_opaque_color="DkGray2" follows="all" - height="345" + height="352" ignore_online_status="true" layout="topleft" - left="0" + left="3" multi_select="true" name="avatar_list" top="0" - width="313" /> + width="307" /> <panel + background_visible="true" follows="left|right|bottom" - height="38" + height="27" label="bottom_panel" layout="topleft" - left="0" + left="3" name="bottom_panel" width="313"> <button follows="bottom|left" - tool_tip="Options" - height="18" - image_disabled="OptionsMenu_Disabled" - image_selected="OptionsMenu_Press" - image_unselected="OptionsMenu_Off" + height="25" + image_hover_unselected="Toolbar_Left_Over" + image_overlay="OptionsMenu_Off" + image_selected="Toolbar_Left_Selected" + image_unselected="Toolbar_Left_Off" layout="topleft" - left="10" + left="0" name="nearby_view_sort_btn" - top="10" - width="18" /> + tool_tip="Options" + top="1" + width="31" /> <button follows="bottom|left" - height="18" - image_selected="AddItem_Press" - image_unselected="AddItem_Off" - image_disabled="AddItem_Disabled" + height="25" + image_hover_unselected="Toolbar_Middle_Over" + image_overlay="AddItem_Off" + image_selected="Toolbar_Middle_Selected" + image_unselected="Toolbar_Middle_Off" layout="topleft" - left_pad="10" + left_pad="1" name="add_friend_btn" tool_tip="Add selected Resident to your friends List" - width="18"> + width="31"> <commit_callback function="People.addFriend" /> </button> + <icon + follows="bottom|left" + height="25" + image_name="Toolbar_Right_Off" + layout="topleft" + left_pad="1" + name="dummy_icon" + width="241" + /> </panel> </panel> <panel - bg_opaque_color="DkGray2" - bg_alpha_color="DkGray2" - background_visible="true" - background_opaque="true" + background_opaque="true" + background_visible="true" + bg_alpha_color="DkGray" + bg_opaque_color="DkGray" follows="all" height="383" label="MY FRIENDS" @@ -138,13 +152,16 @@ top="0" width="313"> <accordion + background_visible="true" + bg_alpha_color="DkGray2" + bg_opaque_color="DkGray2" follows="all" - height="345" + height="352" layout="topleft" - left="0" + left="3" name="friends_accordion" top="0" - width="313"> + width="307"> <accordion_tab layout="topleft" height="172" @@ -160,7 +177,7 @@ multi_select="true" name="avatars_online" top="0" - width="313" /> + width="307" /> </accordion_tab> <accordion_tab layout="topleft" @@ -176,53 +193,64 @@ multi_select="true" name="avatars_all" top="0" - width="313" /> + width="307" /> </accordion_tab> </accordion> <panel + background_visible="true" follows="left|right|bottom" - height="38" + height="27" label="bottom_panel" layout="topleft" - left="0" + left="3" name="bottom_panel" width="313"> <button follows="bottom|left" tool_tip="Options" - height="18" - image_disabled="OptionsMenu_Disabled" - image_selected="OptionsMenu_Press" - image_unselected="OptionsMenu_Off" + height="25" + image_hover_unselected="Toolbar_Left_Over" + image_overlay="OptionsMenu_Off" + image_selected="Toolbar_Left_Selected" + image_unselected="Toolbar_Left_Off" layout="topleft" - left="10" + left="0" name="friends_viewsort_btn" - top="10" - width="18" /> + top="1" + width="31" /> <button follows="bottom|left" - height="18" - image_selected="AddItem_Press" - image_unselected="AddItem_Off" - image_disabled="AddItem_Disabled" + height="25" + image_hover_unselected="Toolbar_Middle_Over" + image_overlay="AddItem_Off" + image_selected="Toolbar_Middle_Selected" + image_unselected="Toolbar_Middle_Off" layout="topleft" - left_pad="10" + left_pad="1" name="add_btn" tool_tip="Offer friendship to a Resident" - width="18" /> + width="31" /> + <icon + follows="bottom|left" + height="25" + image_name="Toolbar_Middle_Off" + layout="topleft" + left_pad="1" + name="dummy_icon" + width="210" + /> <button follows="bottom|left" - height="18" - image_selected="TrashItem_Press" - image_unselected="TrashItem_Off" - image_disabled="TrashItem_Disabled" + height="25" + image_hover_unselected="Toolbar_Right_Over" + image_overlay="TrashItem_Off" + image_selected="Toolbar_Right_Selected" + image_unselected="Toolbar_Right_Off" layout="topleft" - left_pad="10" - right="-10" + left_pad="1" name="del_btn" tool_tip="Remove selected person from your Friends list" - top_delta="0" - width="18" /> + width="31" /> </panel> <text follows="all" @@ -237,10 +265,10 @@ If you're looking for people to hang out with, [secondlife:///app/worldmap try t </text> </panel> <panel - bg_opaque_color="DkGray2" - bg_alpha_color="DkGray2" - background_visible="true" - background_opaque="true" + background_opaque="true" + background_visible="true" + bg_alpha_color="DkGray" + bg_opaque_color="DkGray" follows="all" height="383" label="MY GROUPS" @@ -255,18 +283,22 @@ If you're looking for people to hang out with, [secondlife:///app/worldmap try t Values are set from appropriate strings at the top of file via LLPeoplePanel::postBuild() --> <group_list + background_visible="true" + bg_alpha_color="DkGray2" + bg_opaque_color="DkGray2" follows="all" - height="345" + height="352" layout="topleft" - left="0" + left="3" name="group_list" no_filtered_groups_msg="[secondlife:///app/search/groups Try finding the group in search?]" no_groups_msg="[secondlife:///app/search/groups Try searching for some groups to join.]" top="0" - width="313" /> + width="307" /> <panel + background_visible="true" follows="left|right|bottom" - height="38" + height="27" label="bottom_panel" layout="topleft" left="0" @@ -275,45 +307,56 @@ If you're looking for people to hang out with, [secondlife:///app/worldmap try t <button follows="bottom|left" tool_tip="Options" - height="18" - image_disabled="OptionsMenu_Disabled" - image_selected="OptionsMenu_Press" - image_unselected="OptionsMenu_Off" + height="25" + image_hover_unselected="Toolbar_Left_Over" + image_overlay="OptionsMenu_Off" + image_selected="Toolbar_Left_Selected" + image_unselected="Toolbar_Left_Off" layout="topleft" - left="10" + left="3" name="groups_viewsort_btn" - top="10" - width="18" /> + top="1" + width="31" /> <button follows="bottom|left" - height="18" - image_selected="AddItem_Press" - image_unselected="AddItem_Off" - image_disabled="AddItem_Disabled" + height="25" + image_hover_unselected="Toolbar_Middle_Over" + image_overlay="AddItem_Off" + image_selected="Toolbar_Middle_Selected" + image_unselected="Toolbar_Middle_Off" layout="topleft" - left_pad="10" + left_pad="1" name="plus_btn" tool_tip="Join group/Create new group" - width="18" /> + width="31" /> <button follows="bottom|left" - height="10" - image_hover_selected="Activate_Checkmark" - image_selected="Activate_Checkmark" - image_unselected="Activate_Checkmark" + height="25" + image_hover_unselected="Toolbar_Middle_Over" + image_overlay="Activate_Checkmark" + image_selected="Toolbar_Middle_Selected" + image_unselected="Toolbar_Middle_Off" layout="topleft" - left_pad="10" + left_pad="1" name="activate_btn" tool_tip="Activate selected group" - top_delta="4" - width="10" /> + width="31" /> + <icon + follows="bottom|left" + height="25" + image_name="Toolbar_Right_Off" + layout="topleft" + left_pad="1" + name="dummy_icon" + width="209" + /> </panel> </panel> <panel - bg_opaque_color="DkGray2" - bg_alpha_color="DkGray2" - background_visible="true" - background_opaque="true" + background_opaque="true" + background_visible="true" + bg_alpha_color="DkGray" + bg_opaque_color="DkGray" follows="all" height="383" label="RECENT" @@ -325,18 +368,22 @@ If you're looking for people to hang out with, [secondlife:///app/worldmap try t width="313"> <avatar_list allow_select="true" + background_visible="true" + bg_alpha_color="DkGray2" + bg_opaque_color="DkGray2" follows="all" - height="345" + height="352" layout="topleft" - left="0" + left="3" multi_select="true" name="avatar_list" show_last_interaction_time="true" top="0" - width="313" /> + width="307" /> <panel + background_visible="true" follows="left|right|bottom" - height="38" + height="27" label="bottom_panel" layout="topleft" left="0" @@ -345,30 +392,40 @@ If you're looking for people to hang out with, [secondlife:///app/worldmap try t <button follows="bottom|left" tool_tip="Options" - height="18" - image_disabled="OptionsMenu_Disabled" - image_selected="OptionsMenu_Press" - image_unselected="OptionsMenu_Off" + height="25" + image_hover_unselected="Toolbar_Left_Over" + image_overlay="OptionsMenu_Off" + image_selected="Toolbar_Left_Selected" + image_unselected="Toolbar_Left_Off" layout="topleft" - left="10" + left="3" name="recent_viewsort_btn" - top="10" - width="18" /> + top="1" + width="31" /> <button follows="bottom|left" - height="18" - image_selected="AddItem_Press" - image_unselected="AddItem_Off" - image_disabled="AddItem_Disabled" + height="25" + image_hover_unselected="Toolbar_Middle_Over" + image_overlay="AddItem_Off" + image_selected="Toolbar_Middle_Selected" + image_unselected="Toolbar_Middle_Off" layout="topleft" - left_pad="10" + left_pad="1" name="add_friend_btn" - top_delta="0" tool_tip="Add selected Resident to your friends List" - width="18"> + width="31"> <commit_callback function="People.addFriend" /> </button> + <icon + follows="bottom|left" + height="25" + image_name="Toolbar_Right_Off" + layout="topleft" + left_pad="1" + name="dummy_icon" + width="241" + /> </panel> </panel> </tab_container> @@ -377,7 +434,7 @@ If you're looking for people to hang out with, [secondlife:///app/worldmap try t height="23" layout="topleft" left="8" - top_pad="0" + top_pad="4" name="button_bar" width="313"> <button @@ -387,6 +444,7 @@ If you're looking for people to hang out with, [secondlife:///app/worldmap try t layout="topleft" name="view_profile_btn" tool_tip="Show picture, groups, and other Residents information" + top="0" width="70" /> <button follows="bottom|left" diff --git a/indra/newview/skins/default/xui/en/panel_places.xml b/indra/newview/skins/default/xui/en/panel_places.xml index ff5d89470c..c61007a9e1 100644 --- a/indra/newview/skins/default/xui/en/panel_places.xml +++ b/indra/newview/skins/default/xui/en/panel_places.xml @@ -65,7 +65,7 @@ background_visible="true" visible="false" width="315" /> <panel - height="19" + height="23" layout="topleft" left="4" name="button_panel" diff --git a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml index 4be4d6b432..e604e401f6 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml @@ -13,6 +13,10 @@ name="aspect_ratio_text"> [NUM]:[DEN] </panel.string> + <panel.string + name="middle_mouse"> + Middle Mouse + </panel.string> <icon follows="left|top" height="18" @@ -160,7 +164,7 @@ Automatic position for: label="Opacity" layout="topleft" left="80" - label_width="50" + label_width="60" name="bubble_chat_opacity" width="200" /> <color_swatch diff --git a/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml index 188fd3b7bc..516457dd93 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml @@ -51,13 +51,13 @@ Always show: </text> <scroll_list - follows="top|left" + follows="top|left|right" height="140" layout="topleft" left="10" multi_select="true" name="enabled_popups" - width="475" /> + width="495" /> <button enabled_control="FirstSelectedDisabledPopups" follows="top|left" @@ -99,11 +99,11 @@ Never show: </text> <scroll_list - follows="top|left" + follows="top|left|right" height="140" layout="topleft" left="10" multi_select="true" name="disabled_popups" - width="475" /> + width="495" /> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_preferences_general.xml b/indra/newview/skins/default/xui/en/panel_preferences_general.xml index d11aebe943..e667fa9a2b 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_general.xml @@ -365,12 +365,12 @@ use_ellipses="false" hover="false" commit_on_focus_lost = "true" - follows="left|top" + follows="left|top|right" height="60" layout="topleft" left="50" name="busy_response" - width="440" + width="450" word_wrap="true"> log_in_to_change </text_editor> diff --git a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml index f232a69482..3d7f392404 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml @@ -69,15 +69,6 @@ name="auto_disengage_mic_check" top_pad="10" width="350" /> - <check_box - control_name="CookiesEnabled" - height="16" - label="Accept cookies" - layout="topleft" - left="30" - name="cookies_enabled" - top_pad="10" - width="350" /> <text type="string" length="1" diff --git a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml index 8723e0a832..2123e62daa 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml @@ -142,14 +142,14 @@ increment="1" initial_value="13000" label="Port number:" - label_width="75" + label_width="105" layout="topleft" left_delta="160" max_val="13050" min_val="13000" name="connection_port" - top_delta="-2" - width="140" /> + top_delta="3" + width="170" /> <text type="string" length="1" @@ -265,35 +265,80 @@ layout="topleft" left_delta="50" name="use_external_browser" - top_pad="4" + top_pad="-2" width="480"> <radio_item height="20" - label="Use built-in browser" - layout="topleft" - left="0" - name="internal" - value="0" - tool_tip="Use the built-in web browser for help, web links, etc. This browser opens as a new window inside [APP_NAME]." - top="0" - width="480" /> - <radio_item - height="20" label="Use my browser (IE, Firefox, Safari)" layout="topleft" left_delta="0" name="external" value="1" + top="0" tool_tip="Use the default system web browser for help, web links, etc. Not recommended if running full screen." + width="480" /> + <radio_item + height="20" + label="Use built-in browser" + layout="topleft" + left="0" + name="internal" + value="" + tool_tip="Use the built-in web browser for help, web links, etc. This browser opens as a new window inside [APP_NAME]." top_delta="20" width="480" /> </radio_group> <check_box + top_delta="2" + enabled="true" + follows="left|top" + height="18" + initial_value="true" + control_name="BrowserPluginsEnabled" + label="Enable plugins" + left_delta="20" + mouse_opaque="true" + name="browser_plugins_enabled" + radio_style="false" + width="400" + top_pad="5"/> + + <check_box + top_delta="4" + enabled="true" + follows="left|top" + height="14" + initial_value="true" + control_name="CookiesEnabled" + label="Accept cookies" + left_delta="0" + mouse_opaque="true" + name="cookies_enabled" + radio_style="false" + width="400" + top_pad="5"/> + + <check_box top_delta="4" enabled="true" follows="left|top" - height="16" + height="14" + initial_value="true" + control_name="BrowserJavascriptEnabled" + label="Enable Javascript" + left_delta="0" + mouse_opaque="true" + name="browser_javascript_enabled" + radio_style="false" + width="400" + top_pad="5"/> + + <check_box + top_delta="4" + enabled="true" + follows="left|top" + height="14" initial_value="false" control_name="BrowserProxyEnabled" label="Enable Web Proxy" @@ -308,9 +353,9 @@ follows="left|top" height="10" layout="topleft" - left_delta="1" + left_delta="20" name="Proxy location" - top_delta="20" + top_delta="16" width="300"> Proxy location: </text> @@ -335,9 +380,9 @@ increment="1" initial_value="80" label="Port number:" - label_width="75" + label_width="95" layout="topleft" - left_delta="230" + left_delta="210" max_val="12000" min_val="10" name="web_proxy_port" diff --git a/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml index 6b5f0c3896..6bf00373ea 100644 --- a/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml +++ b/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel follows="left|right|top|bottom" - name="MediaControlsPanel" + name="MediaControls" background_visible="false" height="200" layout="topleft" diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml index 412485e03f..30191aecb6 100644 --- a/indra/newview/skins/default/xui/en/panel_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_profile.xml @@ -314,9 +314,12 @@ left="2" mouse_opaque="false" name="add_friend" + pad_left="1" + pad_right="1" tool_tip="Offer friendship to the Resident" top="5" - width="80" /> + use_ellipses="true" + width="117" /> <button follows="bottom|left" height="23" @@ -325,8 +328,8 @@ name="im" tool_tip="Open instant message session" top="5" - left_pad="3" - width="39" /> + left_pad="1" + width="21" /> <button follows="bottom|left" height="23" @@ -334,20 +337,12 @@ layout="topleft" name="call" tool_tip="Call this Resident" - left_pad="3" + left_pad="1" + pad_left="1" + pad_right="1" top="5" - width="43" /> - <button - enabled="false" - follows="bottom|left" - height="23" - label="Map" - layout="topleft" - name="show_on_map_btn" - tool_tip="Show the Resident on the map" - top="5" - left_pad="3" - width="41" /> + use_ellipses="true" + width="51" /> <button follows="bottom|left" height="23" @@ -355,9 +350,12 @@ layout="topleft" name="teleport" tool_tip="Offer teleport" - left_pad="3" + left_pad="1" + pad_left="1" + pad_right="1" top="5" - width="69" /> + use_ellipses="true" + width="92" /> <button follows="bottom|right" height="23" @@ -367,7 +365,6 @@ tool_tip="Pay money to or share inventory with the Resident" right="-1" top="5" - left_pad="3" width="23" /> </layout_panel> <layout_panel diff --git a/indra/newview/skins/default/xui/en/panel_status_bar.xml b/indra/newview/skins/default/xui/en/panel_status_bar.xml index 0c870e155b..8c7de22cf8 100644 --- a/indra/newview/skins/default/xui/en/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_status_bar.xml @@ -94,12 +94,12 @@ <button follows="right|top" height="16" - image_selected="Pause_Off" - image_unselected="Play_Off" - image_pressed="Play_Press" - image_pressed_selected="Pause_Press" + image_selected="Play_Off" + image_unselected="Pause_Off" + image_pressed="Pause_Press" + image_pressed_selected="Play_Press" is_toggle="true" - left_pad="15" + left_pad="20" top="1" name="media_toggle_btn" tool_tip="Start/Stop All Media (Music, Video, Web pages)" @@ -112,12 +112,12 @@ image_pressed="Audio_Press" image_unselected="Audio_Off" is_toggle="true" - left_pad="5" + left_pad="10" top="2" name="volume_btn" tool_tip="Global Volume Control" width="16" /> - <text + <!-- <text follows="right|top" halign="center" height="12" @@ -125,5 +125,5 @@ left_delta="0" name="stat_btn" top_delta="0" - width="20"/> + width="20"/>--> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_teleport_history.xml b/indra/newview/skins/default/xui/en/panel_teleport_history.xml index 0d4f67f94c..cbcaf1a58c 100644 --- a/indra/newview/skins/default/xui/en/panel_teleport_history.xml +++ b/indra/newview/skins/default/xui/en/panel_teleport_history.xml @@ -1,17 +1,19 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel name="Teleport History" bottom="0" height="400" left="0" width="380" +<panel name="Teleport History" bottom="0" height="400" left="0" width="313" help_topic="panel_teleport_history" - border="false" follows="left|top|right|bottom"> + border="false" follows="left|top|right|bottom" + background_visible="true" + bg_alpha_color="DkGray"> <accordion follows="left|top|right|bottom" - height="368" + height="369" layout="topleft" - left="0" + left="3" top="0" name="history_accordion" background_visible="true" bg_alpha_color="DkGray2" - width="380"> + width="307"> <accordion_tab layout="topleft" name="today" @@ -23,7 +25,7 @@ left="0" name="today_items" top="0" - width="380"> + width="307"> </flat_list_view> </accordion_tab> <accordion_tab @@ -37,7 +39,7 @@ left="0" name="yesterday_items" top="0" - width="380"> + width="307"> </flat_list_view> </accordion_tab> <accordion_tab @@ -51,7 +53,7 @@ left="0" name="2_days_ago" top="0" - width="380"> + width="307"> </flat_list_view> </accordion_tab> <accordion_tab @@ -65,7 +67,7 @@ left="0" name="3_days_ago" top="0" - width="380"> + width="307"> </flat_list_view> </accordion_tab> <accordion_tab @@ -79,7 +81,7 @@ left="0" name="4_days_ago" top="0" - width="380"> + width="307"> </flat_list_view> </accordion_tab> <accordion_tab @@ -93,7 +95,7 @@ left="0" name="5_days_ago_items" top="0" - width="380"> + width="307"> </flat_list_view> </accordion_tab> <accordion_tab @@ -107,7 +109,7 @@ left="0" name="6_days_and_older_items" top="0" - width="380"> + width="307"> </flat_list_view> </accordion_tab> <accordion_tab @@ -121,7 +123,7 @@ left="0" name="1_month_and_older_items" top="0" - width="380"> + width="307"> </flat_list_view> </accordion_tab> <accordion_tab @@ -135,34 +137,41 @@ left="0" name="6_months_and_older_items" top="0" - width="380"> + width="307"> </flat_list_view> </accordion_tab> </accordion> <panel - bg_opaque_color="DkGray2" - bg_alpha_color="DkGray2" - background_visible="true" - background_opaque="true" + background_visible="true" bevel_style="none" bottom="0" follows="left|right|bottom" - height="38" + height="27" layout="bottomleft" - left="0" + left="3" name="bottom_panel" - width="380"> + width="313"> <button follows="bottom|left" tool_tip="Show additional options" - height="18" - image_disabled="OptionsMenu_Disabled" - image_selected="OptionsMenu_Press" - image_unselected="OptionsMenu_Off" + height="25" + image_hover_unselected="Toolbar_Left_Over" + image_overlay="OptionsMenu_Off" + image_selected="Toolbar_Left_Selected" + image_unselected="Toolbar_Left_Off" layout="topleft" - left="10" + left="0" name="gear_btn" - top="14" - width="18" /> + top="1" + width="31" /> + <icon + follows="bottom|left" + height="25" + image_name="Toolbar_Right_Off" + layout="topleft" + left_pad="1" + name="dummy_icon" + width="273" + /> </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml index 12c06504ca..b840fdd31b 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml @@ -403,7 +403,7 @@ top_pad="10" layout="topleft" name="button_panel" left="5" - bottom="2" + top_pad="0" width="313"> <button height="23" diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 111daec242..00bbbd65d0 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -56,7 +56,9 @@ <string name="SavingSettings">Saving your settings...</string> <string name="LoggingOut">Logging out...</string> <string name="ShuttingDown">Shutting down...</string> - + <string name="YouHaveBeenDisconnected">You have been disconnected from the region you were in.</string> + <string name="SentToInvalidRegion">You were sent to an invalid region.</string> + <string name="TestingDisconnect">Testing viewer disconnect</string> <!-- Tooltip, lltooltipview.cpp --> <string name="TooltipPerson">Person</string><!-- Object under mouse pointer is an avatar --> @@ -79,6 +81,12 @@ <string name="TooltipHttpUrl">Click to view this web page</string> <string name="TooltipSLURL">Click to view this location's information</string> <string name="TooltipAgentUrl">Click to view this Resident's profile</string> + <string name="TooltipAgentMute">Click to mute this Resident</string> + <string name="TooltipAgentUnmute">Click to unmute this Resident</string> + <string name="TooltipAgentIM">Click to IM this Resident</string> + <string name="TooltipAgentPay">Click to Pay this Resident</string> + <string name="TooltipAgentOfferTeleport">Click to offer a teleport request to this Resident</string> + <string name="TooltipAgentRequestFriend">Click to send a friend request to this Resident</string> <string name="TooltipGroupUrl">Click to view this group's description</string> <string name="TooltipEventUrl">Click to view this event's description</string> <string name="TooltipClassifiedUrl">Click to view this classified</string> @@ -95,6 +103,14 @@ <string name="SLurlLabelTeleport">Teleport to</string> <string name="SLurlLabelShowOnMap">Show Map for</string> + <!-- label strings for secondlife:///app/agent SLapps --> + <string name="SLappAgentMute">Mute</string> + <string name="SLappAgentUnmute">Unmute</string> + <string name="SLappAgentIM">IM</string> + <string name="SLappAgentPay">Pay</string> + <string name="SLappAgentOfferTeleport">Offer Teleport to </string> + <string name="SLappAgentRequestFriend">Friend Request </string> + <!-- ButtonToolTips, llfloater.cpp --> <string name="BUTTON_CLOSE_DARWIN">Close (⌘W)</string> <string name="BUTTON_CLOSE_WIN">Close (Ctrl+W)</string> @@ -1836,6 +1852,7 @@ Clears (deletes) the media and all params from the given face. <string name="LoadingContents">Loading contents...</string> <string name="NoContents">No contents</string> <string name="WornOnAttachmentPoint" value=" (worn on [ATTACHMENT_POINT])" /> + <string name="ActiveGesture" value="[GESLABEL] (active)"/> <!-- Inventory permissions --> <string name="PermYes">Yes</string> <string name="PermNo">No</string> @@ -1892,6 +1909,7 @@ Clears (deletes) the media and all params from the given face. <string name="InvFolder favorite">Favorites</string> <string name="InvFolder Current Outfit">Current Outfit</string> <string name="InvFolder My Outfits">My Outfits</string> + <string name="InvFolder Accessories">Accessories</string> <!-- are used for Friends and Friends/All folders in Inventory "Calling cards" folder. See EXT-694--> <string name="InvFolder Friends">Friends</string> @@ -2121,6 +2139,7 @@ Clears (deletes) the media and all params from the given face. <!-- panel contents --> <string name="PanelContentsNewScript">New Script</string> + <string name="PanelContentsTooltip">Content of object</string> <!-- panel preferences general --> <string name="BusyModeResponseDefault">The Resident you messaged is in 'busy mode' which means they have requested not to be disturbed. Your message will still be shown in their IM panel for later viewing.</string> @@ -2183,7 +2202,8 @@ Clears (deletes) the media and all params from the given face. <!-- Viewer menu --> <string name="AcquiredItems">Acquired Items</string> <string name="Cancel">Cancel</string> - <string name="UploadingCosts">Uploading %s costs</string> + <string name="UploadingCosts">Uploading [NAME] costs L$ [AMOUNT]</string> + <string name="BuyingCosts">Buying this costs L$ [AMOUNT]</string> <string name="UnknownFileExtension"> Unknown file extension .%s Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh @@ -3031,14 +3051,48 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. <!-- Financial operations strings --> <string name="paid_you_ldollars">[NAME] paid you L$[AMOUNT]</string> - <string name="giving">Giving</string> - <string name="uploading_costs">Uploading costs</string> - <string name="this_costs">This costs</string> - <string name="buying_selected_land">Buying selected land</string> - <string name="this_object_costs">This object costs"</string> + <string name="you_paid_ldollars">You paid [NAME] L$[AMOUNT] [REASON].</string> + <string name="you_paid_ldollars_no_reason">You paid [NAME] L$[AMOUNT].</string> + <string name="you_paid_ldollars_no_name">You paid L$[AMOUNT] [REASON].</string> + <string name="for a parcel of land">for a parcel of land</string> + <string name="for a land access pass">for a land access pass</string> + <string name="for deeding land">for deeding land</string> + <string name="to create a group">to create a group</string> + <string name="to join a group">to join a group</string> + <string name="to upload">to upload</string> + + <string name="giving">Giving L$ [AMOUNT]</string> + <string name="uploading_costs">Uploading costs L$ [AMOUNT]</string> + <string name="this_costs">This costs L$ [AMOUNT]</string> + <string name="buying_selected_land">Buying selected land for L$ [AMOUNT]</string> + <string name="this_object_costs">This object costs L$ [AMOUNT]</string> <string name="group_role_everyone">Everyone</string> <string name="group_role_officers">Officers</string> <string name="group_role_owners">Owners</string> + <string name="uploading_abuse_report">Uploading... + +Abuse Report</string> + + <!-- names for new inventory items--> + <string name="New Shape">New Shape</string> + <string name="New Skin">New Skin</string> + <string name="New Hair">New Hair</string> + <string name="New Eyes">New Eyes</string> + <string name="New Shirt">New Shirt</string> + <string name="New Pants">New Pants</string> + <string name="New Shoes">New Shoes</string> + <string name="New Socks">New Socks</string> + <string name="New Jacket">New Jacket</string> + <string name="New Gloves">New Gloves</string> + <string name="New Undershirt">New Undershirt</string> + <string name="New Underpants">New Underpants</string> + <string name="New Skirt">New Skirt</string> + <string name="New Alpha">New Alpha</string> + <string name="New Tattoo">New Tattoo</string> + <string name="Invalid Wearable">Invalid Wearable</string> + <string name="New Script">New Script</string> + <string name="New Folder">New Folder</string> + <string name="Contents">Contents</string> </strings> diff --git a/indra/newview/skins/default/xui/en/widgets/chat_history.xml b/indra/newview/skins/default/xui/en/widgets/chat_history.xml index ef885e8045..aa3ea736b8 100644 --- a/indra/newview/skins/default/xui/en/widgets/chat_history.xml +++ b/indra/newview/skins/default/xui/en/widgets/chat_history.xml @@ -2,6 +2,7 @@ <chat_history message_header="panel_chat_header.xml" message_separator="panel_chat_separator.xml" + message_plaintext_separator="panel_chat_plaintext_separator.xml" left_text_pad="10" right_text_pad="15" left_widget_pad="0" 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 46531c5e58..c453d415b4 100644 --- a/indra/newview/skins/default/xui/es/floater_about_land.xml +++ b/indra/newview/skins/default/xui/es/floater_about_land.xml @@ -1,5 +1,14 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floaterland" title="ACERCA DEL TERRENO"> + <floater.string name="maturity_icon_general"> + "Parcel_PG_Dark" + </floater.string> + <floater.string name="maturity_icon_moderate"> + "Parcel_M_Dark" + </floater.string> + <floater.string name="maturity_icon_adult"> + "Parcel_R_Dark" + </floater.string> <floater.string name="Minutes"> [MINUTES] minutos </floater.string> @@ -15,7 +24,7 @@ <tab_container name="landtab"> <panel label="GENERAL" name="land_general_panel"> <panel.string name="new users only"> - Sólo usuarios nuevos + Sólo nuevos Residentes </panel.string> <panel.string name="anyone"> Cualquiera @@ -84,9 +93,9 @@ Vaya al menú Mundo > Acerca del terreno o seleccione otra parcela para ver s <text name="GroupText"> Leyla Linden </text> - <button label="Configurar..." label_selected="Configurar..." name="Set..."/> + <button label="Configurar" name="Set..."/> <check_box label="Permitir transferir al grupo" name="check deed" tool_tip="Un oficial del grupo puede transferir este terreno al grupo. El terreno será apoyado por el grupo en sus asignaciones de terreno."/> - <button label="Transferir..." label_selected="Transferir..." name="Deed..." tool_tip="Sólo si es usted un oficial del grupo seleccionado puede transferir terreno."/> + <button label="Transferir" name="Deed..." tool_tip="Sólo si es usted un oficial del grupo seleccionado puede transferir terreno."/> <check_box label="El propietario hace una contribución transfiriendo" name="check contrib" tool_tip="Cuando el terreno se transfiere al grupo, el antiguo propietario contribuye con una asignación suficiente de terreno."/> <text name="For Sale:"> En venta: @@ -97,7 +106,7 @@ Vaya al menú Mundo > Acerca del terreno o seleccione otra parcela para ver s <text name="For Sale: Price L$[PRICE]."> Precio: [PRICE] L$ ([PRICE_PER_SQM] L$/m²). </text> - <button label="Vender el terreno..." label_selected="Vender el terreno..." name="Sell Land..."/> + <button label="Vender el terreno" name="Sell Land..."/> <text name="For sale to"> En venta a: [BUYER] </text> @@ -107,7 +116,7 @@ Vaya al menú Mundo > Acerca del terreno o seleccione otra parcela para ver s <text name="Selling with no objects in parcel." width="216"> Los objetos no se incluyen en la venta. </text> - <button bottom="-245" font="SansSerifSmall" label="Cancelar la venta del terreno" label_selected="Cancelar la venta del terreno" left="275" name="Cancel Land Sale" width="165"/> + <button bottom="-245" font="SansSerifSmall" label="Cancelar la venta del terreno" label_selected="Cancelar la venta del terreno" left="275" name="Cancel Land Sale"/> <text name="Claimed:"> Reclamada: </text> @@ -126,13 +135,13 @@ Vaya al menú Mundo > Acerca del terreno o seleccione otra parcela para ver s <text name="DwellText"> 0 </text> - <button label="Comprar terreno..." label_selected="Comprar terreno..." left="130" name="Buy Land..." width="125"/> + <button label="Comprar terreno" left="130" name="Buy Land..." width="125"/> <button label="Información del script" name="Scripts..."/> - <button label="Comprar para el grupo..." label_selected="Comprar para el grupo..." name="Buy For Group..."/> - <button label="Comprar un pase..." label_selected="Comprar un pase..." left="130" name="Buy Pass..." tool_tip="Un pase le da acceso temporal a este terreno." width="125"/> - <button label="Abandonar el terreno..." label_selected="Abandonar el terreno..." name="Abandon Land..."/> - <button label="Reclamar el terreno..." label_selected="Reclamar el terreno..." name="Reclaim Land..."/> - <button label="Venta Linden..." label_selected="Venta Linden..." name="Linden Sale..." tool_tip="El terreno debe estar en propiedad, con contenido, y no estar en subasta."/> + <button label="Comprar para el grupo" name="Buy For Group..."/> + <button label="Comprar un pase" left="130" name="Buy Pass..." tool_tip="Un pase le da acceso temporal a este terreno." width="125"/> + <button label="Abandonar el terreno" name="Abandon Land..."/> + <button label="Reclamar el terreno" name="Reclaim Land..."/> + <button label="Venta Linden" name="Linden Sale..." tool_tip="El terreno debe estar en propiedad, con contenido, y no estar en subasta."/> </panel> <panel label="CONTRATO" name="land_covenant_panel"> <panel.string name="can_resell"> @@ -198,10 +207,10 @@ Vaya al menú Mundo > Acerca del terreno o seleccione otra parcela para ver s </panel> <panel label="OBJETOS" name="land_objects_panel"> <panel.string name="objects_available_text"> - [COUNT] de un máximo de [MAX] ([AVAILABLE] disponibles) + [COUNT] de un máx. de [MAX] ([AVAILABLE] disponibles) </panel.string> <panel.string name="objects_deleted_text"> - [COUNT] de un máximo de [MAX] ([DELETED] se borrarán) + [COUNT] de un máx. de [MAX] ([DELETED] se borrarán) </panel.string> <text name="parcel_object_bonus"> Plus de objetos en la región: [BONUS] @@ -210,7 +219,7 @@ Vaya al menú Mundo > Acerca del terreno o seleccione otra parcela para ver s Uso de primitivas: </text> <text left="204" name="objects_available" width="250"> - [COUNT] de un máximo de [MAX] ([AVAILABLE] disponibles) + [COUNT] de un máx. de [MAX] ([AVAILABLE] disponibles) </text> <text name="Primitives parcel supports:" width="200"> Prims que admite la parcela: @@ -231,7 +240,7 @@ Vaya al menú Mundo > Acerca del terreno o seleccione otra parcela para ver s [COUNT] </text> <button label="Mostrar" label_selected="Mostrar" name="ShowOwner" right="-135" width="60"/> - <button label="Devolver..." label_selected="Devolver..." name="ReturnOwner..." right="-10" tool_tip="Devolver los objetos a sus propietarios." width="119"/> + <button label="Devolver" name="ReturnOwner..." right="-10" tool_tip="Devolver los objetos a sus propietarios." width="119"/> <text left="14" name="Set to group:" width="180"> Del grupo: </text> @@ -239,7 +248,7 @@ Vaya al menú Mundo > Acerca del terreno o seleccione otra parcela para ver s [COUNT] </text> <button label="Mostrar" label_selected="Mostrar" name="ShowGroup" right="-135" width="60"/> - <button label="Devolver..." label_selected="Devolver..." name="ReturnGroup..." right="-10" tool_tip="Devolver los objetos a sus propietarios." width="119"/> + <button label="Devolver" name="ReturnGroup..." right="-10" tool_tip="Devolver los objetos a sus propietarios." width="119"/> <text left="14" name="Owned by others:" width="128"> Propiedad de otros: </text> @@ -247,7 +256,7 @@ Vaya al menú Mundo > Acerca del terreno o seleccione otra parcela para ver s [COUNT] </text> <button label="Mostrar" label_selected="Mostrar" name="ShowOther" right="-135" width="60"/> - <button label="Devolver..." label_selected="Devolver..." name="ReturnOther..." right="-10" tool_tip="Devolver los objetos a sus propietarios." width="119"/> + <button label="Devolver" name="ReturnOther..." right="-10" tool_tip="Devolver los objetos a sus propietarios." width="119"/> <text left="14" name="Selected / sat upon:" width="193"> Seleccionados / con gente sentada: </text> @@ -262,7 +271,7 @@ Vaya al menú Mundo > Acerca del terreno o seleccione otra parcela para ver s Propietarios de los objetos: </text> <button label="Actualizar la lista" label_selected="Actualizar la lista" left="158" name="Refresh List" tool_tip="Refresh Object List"/> - <button label="Devolver los objetos..." label_selected="Devolver los objetos..." left="270" name="Return objects..." width="164"/> + <button label="Devolver los objetos" left="270" name="Return objects..." width="164"/> <name_list name="owner list"> <name_list.columns label="Tipo" name="type"/> <name_list.columns label="Nombre" name="name"/> @@ -307,28 +316,28 @@ Sólo las parcelas más grandes pueden listarse en la búsqueda. </text> <check_box label="Editar el terreno" name="edit land check" tool_tip="Si se marca, cualquiera podrá modificar su terreno. Mejor dejarlo desmarcado, pues usted siempre puede modificar su terreno."/> <check_box label="Volar" name="check fly" tool_tip="Si se marca, los residentes podrán volar en su terreno. Si no, sólo podrán volar al cruzarlo o hasta que aterricen en él."/> - <text left="162" name="allow_label2"> + <text name="allow_label2"> Crear objetos: </text> - <check_box label="Todos los residentes" left="255" name="edit objects check"/> - <check_box label="El grupo" left="385" name="edit group objects check"/> - <text left="162" name="allow_label3"> + <check_box label="Todos los residentes" name="edit objects check"/> + <check_box label="El grupo" name="edit group objects check"/> + <text name="allow_label3"> Dejar objetos: </text> - <check_box label="Todos los residentes" left="255" name="all object entry check"/> - <check_box label="El grupo" left="385" name="group object entry check"/> - <text left="162" name="allow_label4"> + <check_box label="Todos los residentes" name="all object entry check"/> + <check_box label="El grupo" name="group object entry check"/> + <text name="allow_label4"> Ejecutar scripts: </text> - <check_box label="Todos los residentes" left="255" name="check other scripts"/> - <check_box label="El grupo" left="385" name="check group scripts"/> + <check_box label="Todos los residentes" name="check other scripts"/> + <check_box label="El grupo" name="check group scripts"/> <text name="land_options_label"> Opciones del terreno: </text> <check_box label="Seguro (sin daño)" name="check safe" tool_tip="Si se marca, convierte el terreno en 'seguro', desactivando el daño en combate. Si no, se activa el daño en combate."/> <check_box label="Sin 'empujones'" name="PushRestrictCheck" tool_tip="Previene scripts que empujen. Marcando esta opción prevendrá que en su terreno haya comportamientos destructivos."/> <check_box label="Mostrar el sitio en la búsqueda (30 L$/semana)" name="ShowDirectoryCheck" tool_tip="Let people see this parcel in search results"/> - <combo_box left="282" name="land category with adult" width="140"> + <combo_box name="land category with adult"> <combo_box.item label="Cualquier categoría" name="item0"/> <combo_box.item label="Localización Linden" name="item1"/> <combo_box.item label="'Adult'" name="item2"/> @@ -343,7 +352,7 @@ Sólo las parcelas más grandes pueden listarse en la búsqueda. <combo_box.item label="Compras" name="item11"/> <combo_box.item label="Otra" name="item12"/> </combo_box> - <combo_box left="282" name="land category" width="140"> + <combo_box name="land category"> <combo_box.item label="Cualquier categoría" name="item0"/> <combo_box.item label="Localización Linden" name="item1"/> <combo_box.item label="Arte y Cultura" name="item3"/> @@ -385,7 +394,7 @@ Sólo las parcelas más grandes pueden listarse en la búsqueda. Página inicial: </text> <line_editor left="97" name="media_url"/> - <button label="Definir..." label_selected="Definir..." name="set_media_url"/> + <button label="Definir" name="set_media_url"/> <check_box label="Ocultar la URL del media" left="97" name="hide_media_url" tool_tip="Marcando esta opción esconderá en la información de esta parcela -a quien no esté autorizado a verla- la URL del media. Note que esto no está disponible para HTML."/> <text name="Description:"> Descripción: @@ -424,6 +433,9 @@ los media: <panel.string name="access_estate_defined"> (Definido por el Estado) </panel.string> + <panel.string name="allow_public_access"> + Permitir el acceso público ([MATURITY]) + </panel.string> <panel.string name="estate_override"> Una o más de esta opciones está configurada a nivel del estado </panel.string> diff --git a/indra/newview/skins/default/xui/es/floater_animation_preview.xml b/indra/newview/skins/default/xui/es/floater_animation_preview.xml index 2fc18e55f6..a40d53a8a8 100644 --- a/indra/newview/skins/default/xui/es/floater_animation_preview.xml +++ b/indra/newview/skins/default/xui/es/floater_animation_preview.xml @@ -115,14 +115,14 @@ La duración máxima de una animación es de [MAX_LENGTH] segundos. <text name="description_label"> Descripción: </text> - <spinner label="Prioridad:" label_width="72" name="priority" tool_tip="Controla qué otras animaciones pueden ser anuladas por ésta" width="110"/> - <check_box label="Bucle:" left="8" name="loop_check" tool_tip="Hace esta animación en bucle"/> - <spinner label="Empieza(%)" label_width="65" left="65" name="loop_in_point" tool_tip="Indica el punto en el que la animación vuelve a empezar" width="116"/> - <spinner label="Acaba(%)" label_width="50" left="185" name="loop_out_point" tool_tip="Indica el punto en el que la animación acaba el bucle"/> + <spinner label="Prioridad:" name="priority" tool_tip="Controla qué otras animaciones pueden ser anuladas por ésta"/> + <check_box label="Bucle:" name="loop_check" tool_tip="Hace esta animación en bucle"/> + <spinner label="Empieza(%)" name="loop_in_point" tool_tip="Indica el punto en el que la animación vuelve a empezar"/> + <spinner label="Acaba(%)" name="loop_out_point" tool_tip="Indica el punto en el que la animación acaba el bucle"/> <text name="hand_label"> Posición de las manos </text> - <combo_box left_delta="120" name="hand_pose_combo" tool_tip="Controla qué hacen las manos durante la animación" width="164"> + <combo_box name="hand_pose_combo" tool_tip="Controla qué hacen las manos durante la animación"> <combo_box.item label="Extendidas" name="Spread"/> <combo_box.item label="Relajadas" name="Relaxed"/> <combo_box.item label="Ambas señalan" name="PointBoth"/> @@ -140,7 +140,7 @@ La duración máxima de una animación es de [MAX_LENGTH] segundos. <text name="emote_label"> Expresión </text> - <combo_box left_delta="120" name="emote_combo" tool_tip="Controla qué hace la cara durante la animación" width="164"> + <combo_box name="emote_combo" tool_tip="Controla qué hace la cara durante la animación"> <combo_box.item label="(ninguno)" name="[None]"/> <combo_box.item label="Aaaaah" name="Aaaaah"/> <combo_box.item label="Con miedo" name="Afraid"/> @@ -162,17 +162,17 @@ La duración máxima de una animación es de [MAX_LENGTH] segundos. <combo_box.item label="Guiño" name="Wink"/> <combo_box.item label="Preocupación" name="Worry"/> </combo_box> - <text name="preview_label" width="250"> + <text name="preview_label"> Vista previa mientras </text> - <combo_box left_delta="120" name="preview_base_anim" tool_tip="Compruebe cómo se comporta su animación a la vez que el avatar realiza acciones comunes." width="130"> + <combo_box name="preview_base_anim" tool_tip="Compruebe cómo se comporta su animación a la vez que el avatar realiza acciones comunes."> <combo_box.item label="De pie" name="Standing"/> <combo_box.item label="Caminando" name="Walking"/> <combo_box.item label="Sentado/a" name="Sitting"/> <combo_box.item label="Volando" name="Flying"/> </combo_box> - <spinner label="Combinar (sec)" label_width="125" name="ease_in_time" tool_tip="Tiempo (en segundos) en el que se combinan las animaciones" width="192"/> - <spinner bottom_delta="-20" label="Dejar de combinar (sec)" label_width="125" left="10" name="ease_out_time" tool_tip="Tiempo (en segundos) en el que dejan de combinarse las animaciones" width="192"/> + <spinner label="Combinar (sec)" name="ease_in_time" tool_tip="Tiempo (en segundos) en el que se combinan las animaciones"/> + <spinner label="Dejar de combinar (sec)" name="ease_out_time" tool_tip="Tiempo (en segundos) en el que dejan de combinarse las animaciones"/> <button bottom_delta="-32" name="play_btn" tool_tip="Ejecutar tu animación"/> <button name="pause_btn" tool_tip="Pausar tu animación"/> <button label="" name="stop_btn" tool_tip="Parar la repetición de la animación"/> @@ -180,8 +180,7 @@ La duración máxima de una animación es de [MAX_LENGTH] segundos. <text name="bad_animation_text"> No se ha podido leer el archivo de la animación. -Recomendamos usar archivos BVH exportados de -Poser 4. +Recomendamos usar archivos BVH exportados de Poser 4. </text> <button label="Subir ([AMOUNT] L$)" name="ok_btn"/> <button label="Cancelar" name="cancel_btn"/> diff --git a/indra/newview/skins/default/xui/es/floater_build_options.xml b/indra/newview/skins/default/xui/es/floater_build_options.xml index de8d205ad4..9d63abd73c 100644 --- a/indra/newview/skins/default/xui/es/floater_build_options.xml +++ b/indra/newview/skins/default/xui/es/floater_build_options.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="build options floater" title="OPCIONES DE LA CUADRÍCULA"> <spinner label="Unidad de la cuadrícula (metros)" label_width="192" name="GridResolution" width="250"/> - <spinner label="Graduación de la cuadrícula (metros)" label_width="192" name="GridDrawSize" width="250"/> + <spinner label="Alcance de la cuadrícula (metros)" label_width="192" name="GridDrawSize" width="250"/> <check_box label="Activar subunidades" name="GridSubUnit"/> <check_box label="Ver la sección transversal" name="GridCrossSection"/> <text name="grid_opacity_label" tool_tip="Opacidad de la cuadrícula"> diff --git a/indra/newview/skins/default/xui/es/floater_buy_currency.xml b/indra/newview/skins/default/xui/es/floater_buy_currency.xml index 81c54cf600..a8fa030846 100644 --- a/indra/newview/skins/default/xui/es/floater_buy_currency.xml +++ b/indra/newview/skins/default/xui/es/floater_buy_currency.xml @@ -37,7 +37,7 @@ Calculando... </text> <text name="buy_action"> - [NAME] [PRICE] L$ + [ACTION] </text> <text name="total_label"> Mi nuevo saldo será diff --git a/indra/newview/skins/default/xui/es/floater_buy_land.xml b/indra/newview/skins/default/xui/es/floater_buy_land.xml index 496e719c6d..9a0a566a55 100644 --- a/indra/newview/skins/default/xui/es/floater_buy_land.xml +++ b/indra/newview/skins/default/xui/es/floater_buy_land.xml @@ -41,8 +41,8 @@ Inténtelo seleccionando un área más pequeña. El área seleccionada no tiene terreno público. </floater.string> <floater.string name="not_owned_by_you"> - Se ha seleccionado terreno propiedad de otro. -Inténtelo seleccionando un área más pequeña. + Está seleccionado un terreno propiedad de otro Residente. +Prueba a seleccionar un área más pequeña. </floater.string> <floater.string name="processing"> Procesando su compra... diff --git a/indra/newview/skins/default/xui/es/floater_camera.xml b/indra/newview/skins/default/xui/es/floater_camera.xml index 40c5603706..787c37e12c 100644 --- a/indra/newview/skins/default/xui/es/floater_camera.xml +++ b/indra/newview/skins/default/xui/es/floater_camera.xml @@ -9,6 +9,18 @@ <floater.string name="move_tooltip"> Mover la cámara arriba y abajo, izquierda y derecha </floater.string> + <floater.string name="orbit_mode_title"> + Orbital + </floater.string> + <floater.string name="pan_mode_title"> + Panorámica + </floater.string> + <floater.string name="avatar_view_mode_title"> + Posición de tu cámara + </floater.string> + <floater.string name="free_mode_title"> + Centrar el objeto + </floater.string> <panel name="controls"> <joystick_track name="cam_track_stick" tool_tip="Mueve la cámara arriba y abajo, a izquierda y derecha"/> <panel name="zoom" tool_tip="Hacer zoom con la cámara en lo enfocado"> diff --git a/indra/newview/skins/default/xui/es/floater_customize.xml b/indra/newview/skins/default/xui/es/floater_customize.xml index 4b332cd9c3..8daf2bed15 100644 --- a/indra/newview/skins/default/xui/es/floater_customize.xml +++ b/indra/newview/skins/default/xui/es/floater_customize.xml @@ -9,7 +9,7 @@ <button label="Cuerpo" label_selected="Cuerpo" name="Body"/> <button label="Cabeza" label_selected="Cabeza" name="Head"/> <button label="Ojos" label_selected="Ojos" name="Eyes"/> - <button label="Ojos" label_selected="Orejas" name="Ears"/> + <button label="Orejas" label_selected="Orejas" name="Ears"/> <button label="Nariz" label_selected="Nariz" name="Nose"/> <button label="Boca" label_selected="Boca" name="Mouth"/> <button label="Barbilla" label_selected="Barbilla" name="Chin"/> diff --git a/indra/newview/skins/default/xui/es/floater_event.xml b/indra/newview/skins/default/xui/es/floater_event.xml index 81909e997c..4bc5221796 100644 --- a/indra/newview/skins/default/xui/es/floater_event.xml +++ b/indra/newview/skins/default/xui/es/floater_event.xml @@ -9,6 +9,18 @@ <floater.string name="dont_notify"> No notificar </floater.string> + <floater.string name="moderate"> + Moderado + </floater.string> + <floater.string name="adult"> + Adulto + </floater.string> + <floater.string name="general"> + General + </floater.string> + <floater.string name="unknown"> + desconocida + </floater.string> <layout_stack name="layout"> <layout_panel name="profile_stack"> <text name="event_name"> @@ -21,12 +33,21 @@ Organizado por: </text> <text initial_value="(obteniendo)" name="event_runby"/> + <text name="event_date_label"> + Fecha: + </text> <text name="event_date"> 10/10/2010 </text> + <text name="event_duration_label"> + Duración: + </text> <text name="event_duration"> 1 hora </text> + <text name="event_covercharge_label"> + Entrada: + </text> <text name="event_cover"> Gratis </text> @@ -36,6 +57,9 @@ <text name="event_location" value="SampleParcel, Name Long (145, 228, 26)"/> <text name="rating_label" value="Calificación:"/> <text name="rating_value" value="desconocida"/> + <expandable_text name="event_desc"> + Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + </expandable_text> </layout_panel> <layout_panel name="button_panel"> <button name="create_event_btn" tool_tip="Crear el evento"/> diff --git a/indra/newview/skins/default/xui/es/floater_gesture.xml b/indra/newview/skins/default/xui/es/floater_gesture.xml index 1dc1d54295..d90de8c9f4 100644 --- a/indra/newview/skins/default/xui/es/floater_gesture.xml +++ b/indra/newview/skins/default/xui/es/floater_gesture.xml @@ -9,7 +9,7 @@ <floater.string name="copy_name"> Copia de [COPY_NAME] </floater.string> - <scroll_list bottom_delta="-385" height="360" name="gesture_list"> + <scroll_list name="gesture_list"> <scroll_list.columns label="Nombre" name="name"/> <scroll_list.columns label="Chat" name="trigger"/> <scroll_list.columns label="Tecla" name="shortcut"/> diff --git a/indra/newview/skins/default/xui/es/floater_god_tools.xml b/indra/newview/skins/default/xui/es/floater_god_tools.xml index b604f7f46f..73187f208b 100644 --- a/indra/newview/skins/default/xui/es/floater_god_tools.xml +++ b/indra/newview/skins/default/xui/es/floater_god_tools.xml @@ -2,7 +2,7 @@ <floater name="godtools floater" title="HERRAMIENTAS DE DIOS"> <tab_container name="GodTools Tabs"> <panel label="Red" name="grid"> - <button label="Expulsar a todos los usuarios" label_selected="Expulsar a todos los usuarios" name="Kick all users"/> + <button label="Expulsar a todos los Residentes" label_selected="Expulsar a todos los Residentes" name="Kick all users"/> <button label="Vaciar los caches de visibilidad del mapa de la región" label_selected="Vaciar los caches de visibilidad del mapa de la región" name="Flush This Region's Map Visibility Caches"/> </panel> <panel label="Región" name="region"> diff --git a/indra/newview/skins/default/xui/es/floater_im.xml b/indra/newview/skins/default/xui/es/floater_im.xml index e6b01a4946..3850b94fd6 100644 --- a/indra/newview/skins/default/xui/es/floater_im.xml +++ b/indra/newview/skins/default/xui/es/floater_im.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <multi_floater name="im_floater" title="Mensaje Instantáneo"> <string name="only_user_message"> - Usted es el único usuario en esta sesión. + Eres el único Residente en esta sesión. </string> <string name="offline_message"> [FIRST] [LAST] no está conectado. @@ -31,7 +31,7 @@ Un moderador del grupo le ha desactivado el chat de texto. </string> <string name="add_session_event"> - No se ha podido añadir usuarios a la sesión de chat con [RECIPIENT]. + No es posible añadir Residentes a la sesión de chat con [RECIPIENT]. </string> <string name="message_session_event"> No se ha podido enviar su mensaje a la sesión de chat con [RECIPIENT]. diff --git a/indra/newview/skins/default/xui/es/floater_joystick.xml b/indra/newview/skins/default/xui/es/floater_joystick.xml index 283a46b60b..dbd2e4f04e 100644 --- a/indra/newview/skins/default/xui/es/floater_joystick.xml +++ b/indra/newview/skins/default/xui/es/floater_joystick.xml @@ -63,7 +63,7 @@ <text name="ZoomDeadZone"> Zona muerta zoom </text> - <button font="SansSerifSmall" label="Predeterminados del SpaceNavigator" left="330" name="SpaceNavigatorDefaults" width="210"/> + <button font="SansSerifSmall" label="Por defecto del SpaceNavigator" left="330" name="SpaceNavigatorDefaults" width="210"/> <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/floater_moveview.xml b/indra/newview/skins/default/xui/es/floater_moveview.xml index 1269943879..7cb41d3f5b 100644 --- a/indra/newview/skins/default/xui/es/floater_moveview.xml +++ b/indra/newview/skins/default/xui/es/floater_moveview.xml @@ -18,6 +18,15 @@ <string name="fly_back_tooltip"> Volar hacia atrás (cursor abajo o S) </string> + <string name="walk_title"> + Caminar + </string> + <string name="run_title"> + Correr + </string> + <string name="fly_title"> + Volar + </string> <panel name="panel_actions"> <button label="" label_selected="" name="turn left btn" tool_tip="Girar a la izq. (cursor izq. o A)"/> <button label="" label_selected="" name="turn right btn" tool_tip="Girar a la der. (cursor der. o D)"/> @@ -30,6 +39,5 @@ <button label="" name="mode_walk_btn" tool_tip="Modo de caminar"/> <button label="" name="mode_run_btn" tool_tip="Modo de correr"/> <button label="" name="mode_fly_btn" tool_tip="Modo de volar"/> - <button label="Dejar de volar" name="stop_fly_btn" tool_tip="Dejar de volar"/> </panel> </floater> diff --git a/indra/newview/skins/default/xui/es/floater_publish_classified.xml b/indra/newview/skins/default/xui/es/floater_publish_classified.xml new file mode 100644 index 0000000000..5eed89d522 --- /dev/null +++ b/indra/newview/skins/default/xui/es/floater_publish_classified.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="publish_classified" title="Publicación de clasificados"> + <text name="explanation_text"> + Tu anuncio clasificado se mostrará durante una semana a partir del día en que se publicó. + +Recuerda, no se reembolsarán las cantidades abonadas por clasificados. + </text> + <spinner label="Precio por el anuncio:" name="price_for_listing" tool_tip="Precio por publicarlo." value="50"/> + <text name="l$_text" value="L$"/> + <text name="more_info_text"> + Más información (enlace a ayuda de clasificados) + </text> + <button label="Publicar" name="publish_btn"/> + <button label="Cancelar" name="cancel_btn"/> +</floater> diff --git a/indra/newview/skins/default/xui/es/floater_tools.xml b/indra/newview/skins/default/xui/es/floater_tools.xml index 1c65567830..9c5fea9267 100644 --- a/indra/newview/skins/default/xui/es/floater_tools.xml +++ b/indra/newview/skins/default/xui/es/floater_tools.xml @@ -1,28 +1,28 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="toolbox floater" short_title="HERRAMIENTAS DE CONSTRUCCIÓN" title="" width="288"> <floater.string name="status_rotate"> - Arrastre las bandas de color para girar el objeto + Arrastra las bandas de color para girar el objeto. </floater.string> <floater.string name="status_scale"> - Pulse y arrastre para estirar el lado seleccionado + Pulsa y arrastra para estirar el lado seleccionado. </floater.string> <floater.string name="status_move"> - Arrastrar para mover, Mayús.+arrastrar para copiar + Arrastrar para mover, Mayús.+arrastrar para copiar. </floater.string> <floater.string name="status_modifyland"> - Mantenga pulsado para modificar el terreno + Mantén pulsado para modificar el terreno. </floater.string> <floater.string name="status_camera"> - Pulsa y arrastra para mover la cámara + Pulsa y arrastra para mover la cámara. </floater.string> <floater.string name="status_grab"> - Arrastra para mover: Ctrl, verticalmente; Ctrl-Mayús., girando + Arrastrar para mover: Ctrl, verticalmente; Ctrl-Mayús., girando. </floater.string> <floater.string name="status_place"> - Pulse en el mundo para construir + Pulsa en el mundo para construir. </floater.string> <floater.string name="status_selectland"> - Pulse y arrastre para seleccionar el terreno + Pulsa y arrastra para seleccionar el terreno. </floater.string> <floater.string name="grid_screen_text"> Pantalla @@ -45,7 +45,7 @@ <button label="" label_selected="" name="button create" tool_tip="Crear"/> <button label="" label_selected="" name="button land" tool_tip="Terreno"/> <text name="text status" width="280"> - Arrastrar para mover, Mayús.+arrastrar para copiar + Arrastrar para mover, Mayús.+arrastrar para copiar. </text> <radio_group name="focus_radio_group"> <radio_item label="Zoom" name="radio zoom"/> @@ -96,7 +96,7 @@ <check_box initial_value="true" label="Copia centrada" name="checkbox copy centers"/> <check_box label="Copia girada" name="checkbox copy rotates"/> <radio_group name="land_radio_group"> - <radio_item label="Seleccionar el terreno" name="radio select land"/> + <radio_item label="Seleccionar terreno" name="radio select land"/> <radio_item label="Nivelar" name="radio flatten"/> <radio_item label="Elevar" name="radio raise"/> <radio_item label="Bajar" name="radio lower"/> @@ -123,7 +123,7 @@ <tab_container name="Object Info Tabs" tab_max_width="62" tab_min_width="30" width="288"> <panel label="General" name="General"> <panel.string name="text deed continued"> - Transfeir + Transferir </panel.string> <panel.string name="text deed"> Transferir @@ -181,8 +181,8 @@ </text> <button label="Configurar..." label_selected="Configurar..." name="button set group" tool_tip="Elige un grupo con el que compartir los permisos de este objeto"/> <name_box initial_value="Cargando..." name="Group Name Proxy"/> - <button label="Transfeir" label_selected="Transfeir" name="button deed" tool_tip="La transferencia entrega este objeto con los permisos del próximo propietario. Los objetos compartidos por el grupo pueden ser transferidos por un oficial del grupo."/> - <check_box label="Compartir" name="checkbox share with group" tool_tip="Permite que todos los miembros del grupo compartan tus permisos de modificación en este objeto. Debes transferirlo para activar las restricciones según los roles."/> + <button label="Transferir" label_selected="Transferir" name="button deed" tool_tip="La transferencia entrega este objeto con los permisos del próximo propietario. Los objetos compartidos por el grupo pueden ser transferidos por un oficial del grupo."/> + <check_box label="Comprtir" name="checkbox share with group" tool_tip="Permite que todos los miembros del grupo compartan tus permisos de modificación en este objeto. Debes transferirlo para activar las restricciones según los roles."/> <text name="label click action" width="180"> Al tocarlo: </text> @@ -210,7 +210,7 @@ Cualquiera: </text> <check_box label="Moverlo" name="checkbox allow everyone move"/> - <check_box label="Copiar" name="checkbox allow everyone copy"/> + <check_box label="Copiarlo" name="checkbox allow everyone copy"/> <text name="Next owner can:"> Próximo propietario: </text> @@ -355,7 +355,7 @@ </panel> <panel label="Caracter." name="Features"> <text name="select_single"> - Seleccione un sólo prim para editarlo. + Selecciona un sólo prim para editarlo. </text> <text name="edit_object"> Editar las características del objeto: @@ -399,7 +399,7 @@ máximo" name="checkbox fullbright"/> <text name="tex gen"> Detallado </text> - <combo_box name="combobox texgen" width="86"> + <combo_box name="combobox texgen"> <combo_box.item label="Por defecto" name="Default"/> <combo_box.item label="Plano" name="Planar"/> </combo_box> @@ -442,9 +442,9 @@ máximo" name="checkbox fullbright"/> <check_box label="Voltear" name="checkbox flip s"/> <spinner label="Vertical (V)" name="TexScaleV"/> <check_box label="Voltear" name="checkbox flip t"/> - <spinner label="Rotación" left="118" name="TexRot" width="62"/> - <spinner label="Repeticiones / Metro" left="118" name="rptctrl" width="62"/> - <button label="Aplicar" label_selected="Aplicar" left_delta="72" name="button apply"/> + <spinner label="Rotación" name="TexRot"/> + <spinner label="Repeticiones / Metro" name="rptctrl"/> + <button label="Aplicar" label_selected="Aplicar" name="button apply"/> <text name="tex offset"> Desplazar </text> @@ -487,8 +487,8 @@ Gris = Público"/> <text name="label_parcel_modify"> Modificar la parcela </text> - <button label="Dividir" label_selected="Dividir" name="button subdivide land" width="140"/> - <button label="Inscribirse" label_selected="Inscribirse" name="button join land" width="140"/> + <button label="Dividir" label_selected="Dividir" name="button subdivide land"/> + <button label="Inscribirse" label_selected="Inscribirse" name="button join land"/> <text name="label_parcel_trans"> Transacciones de terreno </text> diff --git a/indra/newview/skins/default/xui/es/floater_tos.xml b/indra/newview/skins/default/xui/es/floater_tos.xml index cbacce304c..7dd91f29fa 100644 --- a/indra/newview/skins/default/xui/es/floater_tos.xml +++ b/indra/newview/skins/default/xui/es/floater_tos.xml @@ -2,9 +2,9 @@ <floater name="modal container" title=" "> <button label="Continuar" label_selected="Continuar" name="Continue"/> <button label="Cancelar" label_selected="Cancelar" name="Cancel"/> - <check_box label="Estoy de acuerdo con las Condiciones del Servicio" name="agree_chk"/> + <check_box label="Acepto las Condiciones del servicio y la Política de privacidad" name="agree_chk"/> <text name="tos_heading"> - Por favor, lee detenidamente las siguientes Condiciones del Servicio. Para conectarte a [SECOND_LIFE], debes aceptar este acuerdo. + Por favor, lee detenidamente las siguientes Condiciones del servicio y Política de privacidad. Debes aceptar el acuerdo para poder iniciar sesión en [SECOND_LIFE]. </text> <text_editor name="tos_text"> TOS_TEXT diff --git a/indra/newview/skins/default/xui/es/floater_water.xml b/indra/newview/skins/default/xui/es/floater_water.xml index 9996860137..2c1f6cfbfb 100644 --- a/indra/newview/skins/default/xui/es/floater_water.xml +++ b/indra/newview/skins/default/xui/es/floater_water.xml @@ -7,7 +7,7 @@ <button label="Guardar" label_selected="Guardar" name="WaterSavePreset"/> <button label="Borrar" label_selected="Borrar" name="WaterDeletePreset"/> <tab_container name="Water Tabs"> - <panel label="Configuraciones" name="Settings"> + <panel label="CONFIGURACIÓN" name="Settings"> <text name="BHText"> Color del agua </text> @@ -55,7 +55,7 @@ </text> <button label="?" left="640" name="WaterBlurMultiplierHelp"/> </panel> - <panel label="Imagen" name="Waves"> + <panel label="IMAGEN" name="Waves"> <text name="BHText"> Sentido de la onda grande </text> diff --git a/indra/newview/skins/default/xui/es/floater_windlight_options.xml b/indra/newview/skins/default/xui/es/floater_windlight_options.xml index 0697f05553..9bc3750951 100644 --- a/indra/newview/skins/default/xui/es/floater_windlight_options.xml +++ b/indra/newview/skins/default/xui/es/floater_windlight_options.xml @@ -6,9 +6,9 @@ <button label="Nuevo" label_selected="Nuevo" name="WLNewPreset"/> <button label="Guardar" label_selected="Guardar" name="WLSavePreset"/> <button label="Borrar" label_selected="Borrar" name="WLDeletePreset"/> - <button font="SansSerifSmall" width="150" left_delta="90" label="Editor del ciclo de un día" label_selected="Editor del ciclo de un día" name="WLDayCycleMenuButton"/> + <button font="SansSerifSmall" label="Editor del ciclo de un día" label_selected="Editor del ciclo de un día" left_delta="90" name="WLDayCycleMenuButton" width="150"/> <tab_container name="WindLight Tabs"> - <panel label="Atmósfera" name="Atmosphere"> + <panel label="ATMÓSFERA" name="Atmosphere"> <text name="BHText"> Coloración </text> @@ -62,7 +62,7 @@ </text> <button label="?" name="WLMaxAltitudeHelp"/> </panel> - <panel label="Iluminación" name="Lighting"> + <panel label="LUZ" name="Lighting"> <text name="SLCText"> Color del Sol y de la Luna </text> @@ -118,11 +118,11 @@ </text> <button label="?" name="WLStarBrightnessHelp"/> </panel> - <panel label="Nubes" name="Clouds"> + <panel label="NUBES" name="Clouds"> <text name="WLCloudColorText"> Color de las nubes </text> - <button label="?" name="WLCloudColorHelp" left="190" /> + <button label="?" left="190" name="WLCloudColorHelp"/> <text name="BHText"> R </text> @@ -138,7 +138,7 @@ <text name="WLCloudColorText2"> Posición/Densidad de las nubes </text> - <button label="?" name="WLCloudDensityHelp" left="190"/> + <button label="?" left="190" name="WLCloudDensityHelp"/> <text name="BHText5"> X </text> @@ -156,12 +156,12 @@ Altitud de las nubes </text> <button label="?" name="WLCloudScaleHelp"/> - <text name="WLCloudDetailText" font="SansSerifSmall"> + <text font="SansSerifSmall" name="WLCloudDetailText"> Detalle de las nubes (Posición/Densidad) </text> <button label="?" name="WLCloudDetailHelp"/> - <text name="BHText8" bottom="-113"> + <text bottom="-113" name="BHText8"> X </text> <text name="BHText9"> @@ -182,7 +182,7 @@ <button label="?" name="WLCloudScrollYHelp"/> <check_box label="Bloquear" name="WLCloudLockY"/> <check_box label="Incluir nubes clásicas" name="DrawClassicClouds"/> - <button label="?" name="WLClassicCloudsHelp" left="618"/> + <button label="?" left="618" name="WLClassicCloudsHelp"/> </panel> </tab_container> <string name="WLDefaultSkyNames"> diff --git a/indra/newview/skins/default/xui/es/floater_world_map.xml b/indra/newview/skins/default/xui/es/floater_world_map.xml index a8dc05703c..38a12002f5 100644 --- a/indra/newview/skins/default/xui/es/floater_world_map.xml +++ b/indra/newview/skins/default/xui/es/floater_world_map.xml @@ -5,22 +5,37 @@ Leyenda </text> </panel> - <panel> + <panel name="layout_panel_2"> + <button name="Show My Location" tool_tip="Centrar el mapa en la posición de mi avatar"/> <text name="me_label"> Yo </text> <text name="person_label"> Persona </text> + <text name="infohub_label"> + Punto de Info + </text> + <text name="land_sale_label"> + Venta de terreno + </text> <text name="by_owner_label"> por el propietario </text> <text name="auction_label"> subasta de terreno </text> + <button name="Go Home" tool_tip="Teleportar a mi Base"/> + <text name="Home_label"> + Base + </text> + <text name="events_label"> + Eventos: + </text> <text name="pg_label"> General </text> + <check_box initial_value="verdadero" name="event_mature_chk"/> <text name="mature_label"> Moderado </text> @@ -28,7 +43,28 @@ Adulto </text> </panel> - <panel> + <panel name="layout_panel_3"> + <text name="find_on_map_label"> + Encontrar en el mapa + </text> + </panel> + <panel name="layout_panel_4"> + <combo_box label="Amigos online" name="friend combo" tool_tip="Ver a los amigos en el mapa"> + <combo_box.item label="Mis amigos conectados" name="item1"/> + </combo_box> + <combo_box label="Mis hitos" name="landmark combo" tool_tip="Hito a ver en el mapa"> + <combo_box.item label="Mis hitos" name="item1"/> + </combo_box> + <search_editor label="Regiones alfabéticamente" name="location" tool_tip="Escribe el nombre de una región"/> + <button label="Encontrar" name="DoSearch" tool_tip="Buscar una región"/> <button name="Clear" tool_tip="Limpia las marcas y actualiza el mapa"/> + <button label="Teleportar" name="Teleport" tool_tip="Teleportar a la localización seleccionada"/> + <button label="Copiar la SLurl" name="copy_slurl" tool_tip="Copiar la SLurl de esta posición para usarla en una web."/> + <button label="Ver lo elegido" name="Show Destination" tool_tip="Centrar el mapa en la localización seleccionada"/> + </panel> + <panel name="layout_panel_5"> + <text name="zoom_label"> + Zoom + </text> </panel> </floater> diff --git a/indra/newview/skins/default/xui/es/menu_object.xml b/indra/newview/skins/default/xui/es/menu_object.xml index 18b6363bbb..1677b9461e 100644 --- a/indra/newview/skins/default/xui/es/menu_object.xml +++ b/indra/newview/skins/default/xui/es/menu_object.xml @@ -5,6 +5,7 @@ <menu_item_call label="Construir" name="Build"/> <menu_item_call label="Abrir" name="Open"/> <menu_item_call label="Sentarse aquí" name="Object Sit"/> + <menu_item_call label="Levantarme" name="Object Stand Up"/> <menu_item_call label="Perfil del objeto" name="Object Inspect"/> <menu_item_call label="Acercar el zoom" name="Zoom In"/> <context_menu label="Ponerme ▶" name="Put On"> diff --git a/indra/newview/skins/default/xui/es/menu_profile_overflow.xml b/indra/newview/skins/default/xui/es/menu_profile_overflow.xml index 37ad29d8ec..5ee8c50949 100644 --- a/indra/newview/skins/default/xui/es/menu_profile_overflow.xml +++ b/indra/newview/skins/default/xui/es/menu_profile_overflow.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <toggleable_menu name="profile_overflow_menu"> + <menu_item_call label="Mapa" name="show_on_map"/> <menu_item_call label="Pagar" name="pay"/> <menu_item_call label="Compartir" name="share"/> <menu_item_call label="Ignorar" name="block"/> diff --git a/indra/newview/skins/default/xui/es/menu_viewer.xml b/indra/newview/skins/default/xui/es/menu_viewer.xml index a0886b3e00..93964a2f4f 100644 --- a/indra/newview/skins/default/xui/es/menu_viewer.xml +++ b/indra/newview/skins/default/xui/es/menu_viewer.xml @@ -200,7 +200,7 @@ <menu_item_call label="Pantalla completa" name="Toggle Fullscreen"/> </menu> <menu_item_call label="Mostrar las configuraciones del depurador" name="Debug Settings"/> - <menu_item_check label="Mostrar el menú Desarrollar" name="Debug Mode"/> + <menu_item_check label="Mostrar el menú 'Develop'" name="Debug Mode"/> </menu> <menu label="Develop" name="Develop"> <menu label="Consoles" name="Consoles"> @@ -238,7 +238,7 @@ <menu_item_check label="Frame Test" name="Frame Test"/> </menu> <menu label="Rendering" name="Rendering"> - <menu_item_check label="Ejes" name="Axes"/> + <menu_item_check label="Axes" name="Axes"/> <menu_item_check label="Wireframe" name="Wireframe"/> <menu_item_check label="Global Illumination" name="Global Illumination"/> <menu_item_check label="Animation Textures" name="Animation Textures"/> @@ -254,7 +254,7 @@ <menu_item_call label="Bumps, Pushes & Hits" name="Bumps, Pushes &amp; Hits"/> <menu label="World" name="World"> <menu_item_check label="Region Sun Override" name="Sim Sun Override"/> - <menu_item_check label="Baliza con destellos" name="Cheesy Beacon"/> + <menu_item_check label="Beacon flashing effect" name="Cheesy Beacon"/> <menu_item_check label="Fixed Weather" name="Fixed Weather"/> <menu_item_call label="Dump Region Object Cache" name="Dump Region Object Cache"/> </menu> @@ -277,10 +277,10 @@ <menu label="Avatar" name="Character"> <menu label="Grab Baked Texture" name="Grab Baked Texture"> <menu_item_call label="Iris" name="Iris"/> - <menu_item_call label="Cabeza" name="Head"/> + <menu_item_call label="Head" name="Head"/> <menu_item_call label="Upper Body" name="Upper Body"/> <menu_item_call label="Lower Body" name="Lower Body"/> - <menu_item_call label="Falda" name="Skirt"/> + <menu_item_call label="Skirt" name="Skirt"/> </menu> <menu label="Character Tests" name="Character Tests"> <menu_item_call label="Toggle Character Geometry" name="Toggle Character Geometry"/> @@ -297,8 +297,8 @@ <menu_item_check label="HTTP Textures" name="HTTP Textures"/> <menu_item_check label="Console Window on next Run" name="Console Window"/> <menu_item_check label="Show Admin Menu" name="View Admin Options"/> - <menu_item_call label="Solicitar estatus de Administrador" name="Request Admin Options"/> - <menu_item_call label="Dejar el estatus de Administrador" name="Leave Admin Options"/> + <menu_item_call label="Request Admin Status" name="Request Admin Options"/> + <menu_item_call label="Leave Admin Status" name="Leave Admin Options"/> </menu> <menu label="Admin" name="Admin"> <menu label="Object"> diff --git a/indra/newview/skins/default/xui/es/notifications.xml b/indra/newview/skins/default/xui/es/notifications.xml index f99bb277cb..df18b88832 100644 --- a/indra/newview/skins/default/xui/es/notifications.xml +++ b/indra/newview/skins/default/xui/es/notifications.xml @@ -106,7 +106,7 @@ Asegúrate de que tu conexión a internet está funcionando adecuadamente. </notification> <notification name="FriendsAndGroupsOnly"> Quienes no sean tus amigos no sabrán que has elegido ignorar sus llamadas y mensajes instantáneos. - <usetemplate name="okbutton" yestext="Sí"/> + <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="GrantModifyRights"> Al conceder permisos de modificación a otro Residente, le estás permitiendo cambiar, borrar o tomar CUALQUIER objeto que tengas en el mundo. Sé MUY cuidadoso al conceder este permiso. @@ -137,25 +137,25 @@ Asegúrate de que tu conexión a internet está funcionando adecuadamente. <usetemplate canceltext="Cancelar" name="yesnocancelbuttons" notext="Ignorar los cambios" yestext="Aplicar los cambios"/> </notification> <notification name="MustSpecifyGroupNoticeSubject"> - Para enviar un aviso de grupo debe especificar un asunto. + Para enviar un aviso de grupo debes especificar un asunto. <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="AddGroupOwnerWarning"> - Va a añadir miembros al rol de [ROLE_NAME]. -No podrá removérseles de ese rol, sino que deberán renunciar a él por sí mismos. -¿Está seguro de que quiere seguir? + Vas a añadir miembros al rol de [ROLE_NAME]. +No podrás removérseles de ese rol, sino que deberán renunciar a él por sí mismos. +¿Estás seguro de que quieres seguir? <usetemplate ignoretext="Confirmar que vas a añadir un nuevo propietario al grupo" name="okcancelignore" notext="No" yestext="Sí"/> </notification> <notification name="AssignDangerousActionWarning"> - Va a añadir la capacidad '[ACTION_NAME]' al rol '[ROLE_NAME]'. + Vas a añadir la capacidad '[ACTION_NAME]' al rol '[ROLE_NAME]'. *ATENCIÓN* - Todos los miembros con esta capacidad podrán asignarse a sí mismos -y a otros miembros- roles con mayores poderes de los que actualmente tienen. Potencialmente, podrían elevarse hasta poderes cercanos a los del propietario. Asegúrese de lo que está haciendo antes de otorgar esta capacidad. + Todos los miembros con esta capacidad podrán asignarse a sí mismos -y a otros miembros- roles con mayores poderes de los que actualmente tienen. Potencialmente, podrían elevarse hasta poderes cercanos a los del propietario. Asegúrate de lo que estás haciendo antes de otorgar esta capacidad. ¿Añadir esta capacidad a '[ROLE_NAME]'? <usetemplate name="okcancelbuttons" notext="No" yestext="Sí"/> </notification> <notification name="AssignDangerousAbilityWarning"> - Va a añadir la capacidad '[ACTION_NAME]' al rol '[ROLE_NAME]'. + Vas a añadir la capacidad '[ACTION_NAME]' al rol '[ROLE_NAME]'. *ATENCIÓN* Todos los miembros con esta capacidad podrán asignarse a sí mismos -y a otros miembros- todas las capacidades, elevándose hasta poderes cercanos a los del propietario. @@ -169,7 +169,7 @@ No podrá removérseles de ese rol, sino que deberán renunciar a él por sí mi </notification> <notification name="JoinGroupCanAfford"> Entrar a este grupo cuesta [COST] L$. -¿Quiere hacerlo?? +¿Quieres hacerlo?? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Entrar"/> </notification> <notification name="JoinGroupNoCost"> @@ -179,7 +179,7 @@ No podrá removérseles de ese rol, sino que deberán renunciar a él por sí mi </notification> <notification name="JoinGroupCannotAfford"> Entrar a este grupo cuesta [COST] L$. -No tiene dinero suficiente para entrar. +No tienes dinero suficiente para entrar. </notification> <notification name="CreateGroupCost"> Crear este grupo te costará 100 L$. @@ -193,11 +193,11 @@ Por favor, invita a miembros en las próximas 48 horas. </notification> <notification name="SalePriceRestriction"> El precio de venta tiene que ser mayor de 0 L$ si la venta es a cualquiera. -Por favor, elija a alguien concreto como comprador si la venta es por 0 L$. +Por favor, elige a alguien concreto como comprador si la venta es por 0 L$. </notification> <notification name="ConfirmLandSaleChange"> Los [LAND_SIZE] m² de terreno seleccionados se van a poner a la venta. -Su precio de venta será de [SALE_PRICE] L$, y se autorizará la compra sólo a [NAME]. +El precio de venta será de [SALE_PRICE] L$, y se autorizará la compra sólo a [NAME]. <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="ConfirmLandSaleToAnyoneChange"> @@ -208,7 +208,7 @@ El precio de venta será de [SALE_PRICE] L$ y se autoriza la compra a [NAME]. <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="ReturnObjectsDeededToGroup"> - ¿Está seguro de que quiere devolver todos los objetos de esta parcela que estén compartidos con el grupo '[NAME]' al inventario de su propietario anterior? + ¿Estás seguros de que quieres devolver todos los objetos de esta parcela que estén compartidos con el grupo '[NAME]' al inventario de su propietario anterior? *ATENCIÓN* ¡Esto borrará los objetos no transferibles que se hayan cedido al grupo! @@ -216,19 +216,19 @@ Objetos: [N] <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="ReturnObjectsOwnedByUser"> - ¿Está seguro de que quiere devolver al inventario de '[NAME]' todos los objetos que sean de su propiedad en esta parcela? + ¿Estás seguro de que quieres devolver al inventario de '[NAME]' todos los objetos que sean de su propiedad en esta parcela? Objetos: [N] <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="ReturnObjectsOwnedBySelf"> - ¿Está seguro de que quiere devolver a su inventario todos los objetos de los que usted es propietario en esta parcela? + ¿Estás seguro de que quieres devolver a su inventario todos los objetos de los que eres propietario en esta parcela? Objetos: [N] <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="ReturnObjectsNotOwnedBySelf"> - ¿Está seguro de que quiere devolver todos los objetos de los que usted NO es propietario en esta parcela al inventario de sus propietarios? + ¿Estás seguro de que quieres devolver todos los objetos de los que NO eres propietario en esta parcela al inventario de sus propietarios? Los objetos transferibles que se hayan transferido al grupo se devolverán a sus propietarios previos. *ATENCIÓN* ¡Esto borrará los objetos no transferibles que se hayan cedido al grupo! @@ -237,7 +237,7 @@ Objetos: [N] <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="ReturnObjectsNotOwnedByUser"> - ¿Está seguro de que quiere devolver todos los objetos de esta parcela que NO sean propiedad de [NAME] al inventario de su propietario? + ¿Estás seguro de que quieres devolver todos los objetos de esta parcela que NO sean propiedad de [NAME] al inventario de su propietario? Los objetos transferibles que se hayan transferido al grupo se devolverán a sus propietarios previos. *ATENCIÓN* ¡Esto borrará los objetos no transferibles que se hayan cedido al grupo! @@ -246,11 +246,11 @@ Objetos: [N] <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="ReturnAllTopObjects"> - ¿Está seguro de que quiere devolver al inventario de su propietario todos los objetos de la lista? + ¿Estás seguro de que quieres devolver al inventario de su propietario todos los objetos de la lista? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="DisableAllTopObjects"> - ¿Está seguro de que quiere desactivar todos los objetos de esta región? + ¿Estás seguro de que quieres desactivar todos los objetos de esta región? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="ReturnObjectsNotOwnedByGroup"> @@ -272,13 +272,13 @@ Para colocar los media en una sola cara, marca la opción Elegir la cara y pulsa </notification> <notification name="MustBeInParcel"> Para configurar el Punto de llegada de la parcela, -debe estar usted dentro de ella. +debes estar dentro de ella. </notification> <notification name="PromptRecipientEmail"> - Por favor, escriba una dirección de correo electrónica válida para el/los receptor/es. + Por favor, escribe una dirección de correo electrónica válida para el/los receptor/es. </notification> <notification name="PromptSelfEmail"> - Por favor, escriba su dirección de correo electrónico. + Por favor, escribe tu dirección de correo electrónico. </notification> <notification name="PromptMissingSubjMsg"> ¿Foto por correo electrónico con el asunto o el mensaje por defecto? @@ -297,27 +297,27 @@ debe estar usted dentro de ella. Hubo un problema al subir la captura de pantalla del informe por la siguiente razón: [REASON] </notification> <notification name="MustAgreeToLogIn"> - Debe estar de acuerdo con las Condiciones del Servicio para continuar el inicio de sesión en [SECOND_LIFE]. + Debes estar de acuerdo con las Condiciones del Servicio para continuar el inicio de sesión en [SECOND_LIFE]. </notification> <notification name="CouldNotPutOnOutfit"> - No se ha podido ponerle el vestuario. + No se ha podido poner el vestuario. La carpeta del vestuario contiene partes del cuerpo, u objetos a anexar o que no son ropa. </notification> <notification name="CannotWearTrash"> - No puede vestirse ropas o partes del cuerpo que están en la Papelera + No puede vestirte ropas o partes del cuerpo que estén en la Papelera </notification> <notification name="MaxAttachmentsOnOutfit"> No se puede anexar el objeto. Se ha superado el límite máximo de [MAX_ATTACHMENTS] objetos. Por favor, quítate alguno. </notification> <notification name="CannotWearInfoNotComplete"> - No puede vestirse este ítem porque aún no se ha cargado. Por favor, reinténtelo en un minuto. + No puedes vestirte este ítem porque aún no se ha cargado. Por favor, inténtalo de nuevo en un minuto. </notification> <notification name="MustHaveAccountToLogIn"> ¡Vaya! Algo se quedó en blanco. -Debe escribir tanto el nombre como el apellido de su avatar, los dos. +Debes escribir tanto el nombre como el apellido de tu avatar, los dos. -Necesita una cuenta para entrar en [SECOND_LIFE]. ¿Quiere crear una ahora? +Necesitas una cuenta para entrar en [SECOND_LIFE]. ¿Quieres crear una ahora? <url name="url"> https://join.secondlife.com/index.php?lang=es-ES </url> @@ -360,10 +360,10 @@ No se reembolsan las cuotas pagadas. <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="SelectProposalToView"> - Por favor, seleccione qué propuesta quiere ver. + Por favor, selecciona qué propuesta quieres ver. </notification> <notification name="SelectHistoryItemToView"> - Por favor, seleccione un ítem del historial para verlo. + Por favor, selecciona un ítem del historial para verlo. </notification> <notification name="CacheWillClear"> La caché se limpiará cuando reinices [APP_NAME]. @@ -376,7 +376,7 @@ Nota: esto vaciará la caché. La configuración del puerto tendrá efecto cuando reinicies [APP_NAME]. </notification> <notification name="ChangeSkin"> - La nueva apariencia la verás cuando reinicies [APP_NAME]. + Verás la nueva apariencia cuando reinicies [APP_NAME]. </notification> <notification name="GoToAuctionPage"> ¿Ir a la página web de [SECOND_LIFE] para ver los detalles de la subasta @@ -390,40 +390,40 @@ o hacer una puja? <notification name="GestureSaveFailedTooManySteps"> Fallo al guardar el gesto. Este gesto tiene demasiados pasos. -Intente quitarle algunos, y vuelva a guardarlo. +Intenta quitarle algunos, y vuelve a guardarlo. </notification> <notification name="GestureSaveFailedTryAgain"> - Fallo al guardar el gesto. Por favor, reinténtelo en un minuto. + Fallo al guardar el gesto. Por favor, vuelve a intentarlo en un minuto. </notification> <notification name="GestureSaveFailedObjectNotFound"> No se ha podido guardar el gesto porque no se pudo encontrar el objeto o el objeto asociado. El objeto debe de haber sido borrado o estar fuera de rango ('out of range'). </notification> <notification name="GestureSaveFailedReason"> - Al guardar un gesto, hubo un problema por: [REASON]. Por favor, reintente guardarlo más tarde. + Al guardar un gesto, hubo un problema por: [REASON]. Por favor, vuelve a intentar guardarlo más tarde. </notification> <notification name="SaveNotecardFailObjectNotFound"> No se ha podido guardar la nota porque no se pudo encontrar el objeto o el objeto asociado del inventario. El objeto debe de haber sido borrado o estar fuera de rango ('out of range'). </notification> <notification name="SaveNotecardFailReason"> - Al guardar una nota, hubo un problema por: [REASON]. Por favor, reintente guardarla más tarde. + Al guardar una nota, hubo un problema por: [REASON]. Por favor, vuelve a intentar guardarla más tarde. </notification> <notification name="ScriptCannotUndo"> - No se han podido deshacer todos los cambios en su versión del script. -¿Quiere cargar la última versión guardada en el servidor? -(**Cuidado** No podrá deshacer esta operación). + No se han podido deshacer todos los cambios en tu versión del script. +¿Quieres cargar la última versión guardada en el servidor? +(**Cuidado** No podrás deshacer esta operación). <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="SaveScriptFailReason"> - Al guardar un script, hubo un problema por: [REASON]. Por favor, reintente guardarlo más tarde. + Al guardar un script, hubo un problema por: [REASON]. Por favor, vuelve a intentar guardarlo más tarde. </notification> <notification name="SaveScriptFailObjectNotFound"> No se ha podido guardar el script porque no se pudo encontrar el objeto que incluye. El objeto debe de haber sido borrado o estar fuera de rango ('out of range').. </notification> <notification name="SaveBytecodeFailReason"> - Al guardar un script compilado, hubo un problema por: [REASON]. Por favor, reintente guardarlo más tarde.. + Al guardar un script compilado, hubo un problema por: [REASON]. Por favor, vuelve a intentar guardarlo más tarde.. </notification> <notification name="StartRegionEmpty"> Perdon, no está definida tu Posición inicial. @@ -443,7 +443,6 @@ El objeto debe de haber sido borrado o estar fuera de rango ('out of range& <notification name="UnsupportedHardware"> Debes saber que tu ordenador no cumple los requisitos mínimos para la utilización de [APP_NAME]. Puede que experimentes un rendimiento muy bajo. Desafortunadamente, [SUPPORT_SITE] no puede dar asistencia técnica a sistemas con una configuración no admitida. -MINSPECS ¿Ir a [_URL] para más información? <url name="url" option="0"> http://secondlife.com/support/sysreqs.php?lang=es @@ -468,9 +467,9 @@ La calidad gráfica puede ajustarse en Preferencias > Gráficos. En la región [REGION] no se permite modificar el terreno. </notification> <notification name="CannotCopyWarning"> - No tiene permiso para copiar este ítem. -Si lo da, lo perderá de su inventario. -¿Realmente quiere darlo? + No tienes permiso para copiar este ítem. +Si lo das, lo perderás de tu inventario. +¿Realmente quieres darlo? <usetemplate name="okcancelbuttons" notext="No" yestext="Sí"/> </notification> <notification name="CannotGiveItem"> @@ -480,19 +479,19 @@ Si lo da, lo perderá de su inventario. Transacción cancelada. </notification> <notification name="TooManyItems"> - En una única transferencia del inventario, no puede dar más de 42 ítems. + No puedes dar más de 42 ítems en una única transferencia del inventario. </notification> <notification name="NoItems"> - No tiene permiso para transferir el ítem seleccionado. + No tienes permiso para transferir el ítem seleccionado. </notification> <notification name="CannotCopyCountItems"> - No tiene permiso para copiar [COUNT] de los -ítems seleccionados. Si los da, los perderá de su inventario. -¿Realmente quiere darlos? + No tienes permiso para copiar [COUNT] de los +ítems seleccionados. Si los das, los perderás de tu inventario. +¿Realmente quieres darlos? <usetemplate name="okcancelbuttons" notext="No" yestext="Sí"/> </notification> <notification name="CannotGiveCategory"> - No tiene permiso para transferir + No tienes permiso para transferir la carpeta seleccionada. </notification> <notification name="FreezeAvatar"> @@ -506,15 +505,15 @@ Temporalmente, será incapaz de moverse, usar el chat, o interactuar con el mund <usetemplate canceltext="Cancelar" name="yesnocancelbuttons" notext="Descongelarle" yestext="Congelarle"/> </notification> <notification name="EjectAvatarFullname"> - ¿Expulsar a [AVATAR_NAME] de su terreno? + ¿Expulsar a [AVATAR_NAME] de tu terreno? <usetemplate canceltext="Cancelar" name="yesnocancelbuttons" notext="Expulsar y Prohibir el acceso" yestext="Expulsar"/> </notification> <notification name="EjectAvatarNoBan"> - ¿Expulsar a este avatar de su terreno? + ¿Expulsar a este avatar de tu terreno? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Expulsar"/> </notification> <notification name="EjectAvatarFullnameNoBan"> - ¿Expulsar a [AVATAR_NAME] de su terreno? + ¿Expulsar a [AVATAR_NAME] de tu terreno? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Expulsar"/> </notification> <notification name="EjectAvatarFromGroup"> @@ -525,7 +524,7 @@ Temporalmente, será incapaz de moverse, usar el chat, o interactuar con el mund </notification> <notification name="AcquireErrorObjectSpan"> ERROR 'ACQUIRE': Los objetos están en más de una región. -Por favor, mueva todos los objetos a adquirir a la +Por favor, mueve todos los objetos a adquirir a la misma región. </notification> <notification name="PromptGoToCurrencyPage"> @@ -539,27 +538,27 @@ misma región. </notification> <notification name="UnableToLinkObjects"> No se pudo enlazar estos [COUNT] objetos. -Puede enlazar [MAX] objetos como máximo. +Puedes enlazar [MAX] objetos como máximo. </notification> <notification name="CannotLinkIncompleteSet"> - Sólo puede enlazar objetos completos (no sus partes), y debe + Sólo puedes enlazar objetos completos (no sus partes), y debes seleccionar más de uno. </notification> <notification name="CannotLinkModify"> - Imposible enlazarlos, porque no tiene permiso para modificar + Imposible enlazarlos, porque no tienes permiso para modificar todos los objetos. -Por favor, asegúrese de que no hay ninguno bloqueado, y de que es el propietario de todos. +Por favor, asegúrate de que no hay ninguno bloqueado, y de que eres el propietario de todos. </notification> <notification name="CannotLinkDifferentOwners"> Imposible enlazarlos, porque hay objetos de distintos propietarios. -Por favor, asegúrese de que es propietario de todos los objetos seleccionados. +Por favor, asegúrate de que eres el propietario de todos los objetos seleccionados. </notification> <notification name="NoFileExtension"> No hay extensión de archivo en: '[FILE]' -Por favor, asegúrese de que la extensión del archivo es correcta. +Por favor, asegúrate de que la extensión del archivo es correcta. </notification> <notification name="InvalidFileExtension"> Extensión inválida de archivo: [EXTENSION] @@ -567,7 +566,7 @@ Podría ser [VALIDS] <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="CannotUploadSoundFile"> - Ni se pudo abrir el archivo de sonido que se ha subido para leer: + No se pudo abrir el archivo de sonido que has subido para leer: [FILE] </notification> <notification name="SoundFileNotRIFF"> @@ -626,7 +625,7 @@ Podría ser [VALIDS] </notification> <notification name="CannotUploadReason"> No se ha podido subir [FILE] por la siguiente razón: [REASON] -Por favor, inténtelo más tarde. +Por favor, inténtalo más tarde. </notification> <notification name="LandmarkCreated"> Se ha añadido "[LANDMARK_NAME]" a tu carpeta [FOLDER_NAME]. @@ -636,7 +635,7 @@ Por favor, inténtelo más tarde. <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="CannotCreateLandmarkNotOwner"> - No puede crear un hito aquí porque el propietario del terreno no lo permite. + No puedes crear un hito aquí porque el propietario del terreno no lo permite. </notification> <notification name="CannotRecompileSelectObjectsNoScripts"> No se pudo 'recompilar'. @@ -668,19 +667,19 @@ Seleccione objetos con scripts. <notification name="CannotSetRunningNotSelectObjectsNoScripts"> No se puede configurar ningún script como 'no ejecutándose'. -Seleccione objetos con scripts. +Selecciona objetos con scripts. </notification> <notification name="NoFrontmostFloater"> - No hay nada a guardar. + No hay nada que guardar. </notification> <notification name="SeachFilteredOnShortWords"> - Se ha modificado su búsqueda, + Se ha modificado tu búsqueda, eliminando las palabras demasiado cortas. Buscando: [FINALQUERY] </notification> <notification name="SeachFilteredOnShortWordsEmpty"> - Los términos de su búsqueda son muy cortos, + Los términos de tu búsqueda son muy cortos, por lo que no se ha hecho la búsqueda. </notification> <notification name="CouldNotTeleportReason"> @@ -696,32 +695,32 @@ Si sigues recibiendo este mensaje, por favor, acude al [SUPPORT_SITE]. Si sigues recibiendo este mensaje, por favor, acude al [SUPPORT_SITE]. </notification> <notification name="blocked_tport"> - Lo sentimos, en estos momentos los teleportes están bloqueados. Vuelva a intentarlo en un momento. Si sigue sin poder teleportarse, desconéctese y vuelva a iniciar sesión para solucionar el problema. + Lo sentimos, en estos momentos los teleportes están bloqueados. Vuelve a intentarlo en un momento. Si sigues sin poder teleportarte, desconéctate y vuelve a iniciar sesión para solucionar el problema. </notification> <notification name="nolandmark_tport"> Lo sentimos, pero el sistema no ha podido localizar el destino de este hito. </notification> <notification name="timeout_tport"> Lo sentimos, pero el sistema no ha podido completar el teleporte. -Vuelva a intentarlo en un momento. +Vuelve a intentarlo en un momento. </notification> <notification name="noaccess_tport"> - Lo sentimos, pero usted no tiene acceso al destino de este teleporte. + Lo sentimos, pero no tienes acceso al destino de este teleporte. </notification> <notification name="missing_attach_tport"> - Aún no han llegado sus objetos anexados. Espere unos segundos más o desconéctese y vuelva a iniciar sesión antes de teleportarse. + Aún no han llegado tus objetos anexados. Espera unos segundos más o desconéctate y vuelve a iniciar sesión antes de teleportarte. </notification> <notification name="too_many_uploads_tport"> - La cola de espera en esta región está actualmente obstruida, por lo que su petición de teleporte no se atenderá en un tiempo prudencial. Por favor, vuelva a intentarlo en unos minutos o vaya a una zona menos ocupada. + La cola de espera en esta región está actualmente obstruida, por lo que tu petición de teleporte no se atenderá en un tiempo prudencial. Por favor, vuelve a intentarlo en unos minutos o ve a una zona menos ocupada. </notification> <notification name="expired_tport"> - Lo sentimos, pero el sistema no ha podido atender a su petición de teleporte en un tiempo prudencial. Por favor, vuelva a intentarlo en unos pocos minutos. + Lo sentimos, pero el sistema no ha podido atender a tu petición de teleporte en un tiempo prudencial. Por favor, vuelve a intentarlo en unos pocos minutos. </notification> <notification name="expired_region_handoff"> - Lo sentimos, pero el sistema no ha podido completar su paso a otra región en un tiempo prudencial. Por favor, vuelva a intentarlo en unos pocos minutos. + Lo sentimos, pero el sistema no ha podido completar tu paso a otra región en un tiempo prudencial. Por favor, vuelve a intentarlo en unos pocos minutos. </notification> <notification name="no_host"> - Ha sido imposible encontrar el destino del teleporte: o está desactivado temporalmente o ya no existe. Por favor, vuelva a intentarlo en unos pocos minutos. + Ha sido imposible encontrar el destino del teleporte: o está desactivado temporalmente o ya no existe. Por favor, vuelve a intentarlo en unos pocos minutos. </notification> <notification name="no_inventory_host"> En estos momentos no está disponible el sistema del inventario. @@ -731,7 +730,7 @@ Vuelva a intentarlo en un momento. no se ha seleccionado una parcela. </notification> <notification name="CannotSetLandOwnerMultipleRegions"> - No se ha podido obtener la propiedad del terreno porque la selección se extiende por varias regiones. Por favor, seleccione un área más pequeña y reinténtelo. + No se ha podido obtener la propiedad del terreno porque la selección se extiende por varias regiones. Por favor, selecciona un área más pequeña y vuelve a intentarlo. </notification> <notification name="ForceOwnerAuctionWarning"> Esta parcela está subastándose. Forzar su propiedad cancelará la subasta y, potencialmente, puede disgustar a algunos residentes si la puja ya ha empezado. @@ -779,15 +778,15 @@ Ha sido imposible encontrar en qué región está. </notification> <notification name="CannotDeedLandMultipleSelected"> No se ha podido transferir el terreno: -ha seleccionado varias parcelas. +has seleccionado varias parcelas. -Inténtelo seleccionando sólo una. +Inténtalo seleccionando sólo una. </notification> <notification name="CannotDeedLandWaitingForServer"> No se ha podido transferir el terreno: esperando que el servidor informe acerca de la propiedad. -Por favor, vuelva a intentarlo. +Por favor, vuelve a intentarlo. </notification> <notification name="CannotDeedLandNoTransfer"> No se ha podido transferir el terreno: @@ -797,18 +796,18 @@ En la región [REGION] no se permite transferir terrenos. No se ha podido abandonar el terreno: esperando que el servidor actualice la información de la parcela. -Vuelva a intentarlo en unos segundos. +Vuelve a intentarlo en unos segundos. </notification> <notification name="CannotReleaseLandSelected"> No se ha podido abandonar el terreno: no es propietario de todas las parcelas seleccionadas. -Por favor, seleccione una sola parcela. +Por favor, selecciona una sola parcela. </notification> <notification name="CannotReleaseLandDontOwn"> No se ha podido abandonar el terreno: -no tiene permisos sobre esta parcela. -Las parcelas de su propiedad se muestran en verde. +no tienes permisos sobre esta parcela. +Las parcelas de tu propiedad se muestran en verde. </notification> <notification name="CannotReleaseLandRegionNotFound"> No se ha podido abandonar el terreno: @@ -820,13 +819,13 @@ En la región [REGION] no se permite transferir terrenos. </notification> <notification name="CannotReleaseLandPartialSelection"> No se ha podido abandonar el terreno: -debe seleccionar toda la parcela. +debes seleccionar toda la parcela. -Seleccione una parcela completa, o divídala primero. +Selecciona una parcela completa, o divídela primero. </notification> <notification name="ReleaseLandWarning"> - Va a abandonar [AREA] m² de terreno. -Al hacerlo, la quitará de entre sus posesiones de terreno, pero no recibirá ningún L$. + Vas a abandonar [AREA] m² de terreno. +Al hacerlo, la quitarás de entre tus posesiones de terreno, pero no recibirás ningún L$. ¿Abandonar este terreno? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> @@ -834,13 +833,13 @@ Al hacerlo, la quitará de entre sus posesiones de terreno, pero no recibirá ni <notification name="CannotDivideLandNothingSelected"> No se ha podido dividir el terreno: -No ha seleccionado ninguna parcela. +No has seleccionado ninguna parcela. </notification> <notification name="CannotDivideLandPartialSelection"> No se ha podido dividir el terreno: -Ha seleccionado una parcela entera. -Inténtelo seleccionando una parte. +Has seleccionado una parcela entera. +Inténtalo seleccionando una parte. </notification> <notification name="LandDivideWarning"> Dividir este terreno lo separará en dos parcelas, cada una de las cuales tendrá su propia configuración. Tras esta operación, algunas configuraciones volverán a las existentes por defecto. @@ -862,29 +861,29 @@ No hay parcelas seleccionadas. </notification> <notification name="CannotJoinLandEntireParcelSelected"> No se ha podido unir el terreno: -Sólo ha seleccionado una parcela. +Sólo has seleccionado una parcela. -Seleccione terreno que incluya algo de ambas parcelas. +Selecciona terreno que incluya algo de ambas parcelas. </notification> <notification name="CannotJoinLandSelection"> No se ha podido unir el terreno: -Debe seleccionar más de una parcela. +Debes seleccionar más de una parcela. -Seleccione terreno que incluya algo de ambas parcelas. +Selecciona terreno que incluya algo de ambas parcelas. </notification> <notification name="JoinLandWarning"> - Al unir este terreno creará una parcela más grande formada por todas aquellas que tengan parte en el rectángulo seleccionado. -Deberá reconfigurar el nombre y las opciones de la nueva parcela. + Al unir este terreno crearás una parcela más grande formada por todas aquellas que tengan parte en el rectángulo seleccionado. +Deberás reconfigurar el nombre y las opciones de la nueva parcela. ¿Unir el terreno? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="ConfirmNotecardSave"> - Esta nota debe guardarse antes de que se la pueda copiar o ver. ¿Guardar la nota? + Esta nota debe guardarse antes de que puedas copiarla o verla. ¿Guardar la nota? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="ConfirmItemCopy"> - ¿Copiar este ítem a su inventario? + ¿Copiar este ítem a tu inventario? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Copiar"/> </notification> <notification name="ResolutionSwitchFail"> @@ -897,31 +896,31 @@ Deberá reconfigurar el nombre y las opciones de la nueva parcela. Error, árboles no definidos: [SPECIES] </notification> <notification name="CannotSaveWearableOutOfSpace"> - No se ha podido guardar el archivo '[NAME]'. Tendrá que liberar algo de espacio en su ordenador y guardarlo de nuevo. + No se ha podido guardar el archivo '[NAME]'. Tendrás que liberar algo de espacio en tu ordenador y guardarlo de nuevo. </notification> <notification name="CannotSaveToAssetStore"> No se ha podido guardar [NAME] en la base central de almacenamiento. Generalmente, esto es un fallo pasajero. Por favor, personaliza y guarda el ítem de aquí a unos minutos. </notification> <notification name="YouHaveBeenLoggedOut"> - Vaya, se te ha cerrado la sesión en [SECOND_LIFE] + Vaya, se ha cerrado tu sesión en [SECOND_LIFE] [MESSAGE] <usetemplate name="okcancelbuttons" notext="Salir" yestext="Ver MI y Chat"/> </notification> <notification name="OnlyOfficerCanBuyLand"> No se ha podido comprar terreno para el grupo: -usted no tiene el permiso de comprar terreno para el grupo que tiene activado actualmente. +no tienes el permiso de comprar terreno para el grupo que tienes activado actualmente. </notification> <notification label="Añadir como amigo" name="AddFriend"> Los amigos pueden darse permiso para localizarse en el mapa y para saber si el otro está conectado. -¿Ofrecer a [NAME] que sea su amigo? +¿Ofrecer a [NAME] que sea tu amigo? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification label="Añadir como amigo" name="AddFriendWithMessage"> Los amigos pueden darse permiso para localizarse en el mapa y para saber si el otro está conectado. -¿Ofrecer a [NAME] que sea su amigo? +¿Ofrecer a [NAME] que sea tu amigo? <form name="form"> <input name="message"> ¿Quieres formar parte de mis amigos? @@ -931,112 +930,112 @@ usted no tiene el permiso de comprar terreno para el grupo que tiene activado ac </form> </notification> <notification name="RemoveFromFriends"> - ¿Quiere quitar a [FIRST_NAME] [LAST_NAME] de su lista de amigos? + ¿Quieres quitar a [FIRST_NAME] [LAST_NAME] de tu lista de amigos? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="RemoveMultipleFromFriends"> - ¿Quiere quitar a varios amigos de su lista de amigos? + ¿Quieres quitar a varios amigos de tu lista de amigos? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="GodDeleteAllScriptedPublicObjectsByUser"> - ¿Está seguro de que quiere borrar todos los objetos con script que sean propiedad de + ¿Estás seguro de que quieres borrar todos los objetos con script que sean propiedad de ** [AVATAR_NAME] ** en todos los otros terrenos de este sim? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="GodDeleteAllScriptedObjectsByUser"> - ¿Está seguro de que quiere BORRAR TODOS los objetos con script que sean propiedad de + ¿Estás seguro de que quieres BORRAR TODOS los objetos con script que sean propiedad de ** [AVATAR_NAME] ** en TODO EL TERRENO de este sim? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="GodDeleteAllObjectsByUser"> - ¿Está seguro de que quiere BORRAR TODOS los objetos (con script o no) que sean propiedad de + ¿Estás seguro de que quieres BORRAR TODOS los objetos (con script o no) que sean propiedad de ** [AVATAR_NAME] ** en TODO EL TERRENO de este sim? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="BlankClassifiedName"> - Debe especificar un nombre para su clasificado. + Debes especificar un nombre para tu clasificado. </notification> <notification name="MinClassifiedPrice"> El pago para aparecer en la lista debe ser de, al menos, [MIN_PRICE] L$. -Por favor, elija un pago mayor. +Por favor, elige un pago mayor. </notification> <notification name="ConfirmObjectDeleteLock"> - Al menos uno de los ítems que ha seleccionado está bloqueado. + Al menos uno de los ítems que has seleccionado está bloqueado. -¿Está seguro de que quiere borrar estos ítems? +¿Estás seguro de que quieres borrar estos ítems? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="ConfirmObjectDeleteNoCopy"> - Al menos uno de los ítems que ha seleccionado no es copiable. + Al menos uno de los ítems que has seleccionado no es copiable. -¿Está seguro de que quiere borrar estos ítems? +¿Estás seguro de que quieres borrar estos ítems? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="ConfirmObjectDeleteNoOwn"> - No es el propietario de, al menos, uno de los ítems que ha seleccionado. + No eres el propietario de, al menos, uno de los ítems que has seleccionado. -¿Está seguro de que quiere borrar estos ítems? +¿Estás seguro de que quieres borrar estos ítems? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="ConfirmObjectDeleteLockNoCopy"> Al menos un objeto está bloqueado. Al menos un objeto no es copiable. -¿Está seguro de que quiere borrar estos ítems? +¿Estás seguro de que quieres borrar estos ítems? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="ConfirmObjectDeleteLockNoOwn"> Al menos un objeto está bloqueado. -No es propietario de, al menos, un objeto. +No eres propietario de, al menos, un objeto. -¿Está seguro de que quiere borrar estos ítems? +¿Estás seguro de que quieres borrar estos ítems? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="ConfirmObjectDeleteNoCopyNoOwn"> Al menos un objeto no es copiable. -No es propietario de, al menos, un objeto. +No eres propietario de, al menos, un objeto. -¿Está seguro de que quiere borrar estos ítems? +¿Estás seguro de que quieres borrar estos ítems? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="ConfirmObjectDeleteLockNoCopyNoOwn"> Al menos un objeto está bloqueado. Al menos un objeto no es copiable. -No es propietario de, al menos, un objeto. +No eres propietario de, al menos, un objeto. -¿Está seguro de que quiere borrar estos ítems? +¿Estás seguro de que quieres borrar estos ítems? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="ConfirmObjectTakeLock"> Al menos un objeto está bloqueado. -¿Está seguro de que quiere tomar estos ítems? +¿Estás seguro de que quieres tomar estos ítems? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="ConfirmObjectTakeNoOwn"> - No es el propietario de todos los objetos que está tomando. -Si sigue, se aplicarán los permisos marcados para el próximo propietario, y es posible que se restrinja su posibilidad de hacer modificaciones o copias. + No eres el propietario de todos los objetos que estás tomando. +Si sigues, se aplicarán los permisos marcados para el próximo propietario, y es posible que se restrinja tu posibilidad de hacer modificaciones o copias. -¿Está seguro de que quiere tomar estos ítems? +¿Estás seguro de que quieres tomar estos ítems? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="ConfirmObjectTakeLockNoOwn"> Al menos un objeto está bloqueado. -No es el propietario de todos los objetos que está tomando. -Si sigue, se aplicarán los permisos marcados para el próximo propietario, y es posible que se restrinja su posibilidad de hacer modificaciones o copias -Con todo, puede tomar lo actualmente seleccionado. +No eres el propietario de todos los objetos que estás tomando. +Si sigues, se aplicarán los permisos marcados para el próximo propietario, y es posible que se restrinja tu posibilidad de hacer modificaciones o copias. +Con todo, puedes tomar lo actualmente seleccionado. -¿Está seguro de que quiere tomar estos ítems? +¿Estás seguro de que quieres tomar estos ítems? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="CantBuyLandAcrossMultipleRegions"> No se ha podido hacer la compra porque el terreno seleccionado se extiende por varias regiones. -Por favor, seleccione un área más pequeña y reinténtelo. +Por favor, selecciona un área más pequeña y vuelve a intentarlo. </notification> <notification name="DeedLandToGroup"> Al transferir esta parcela, se requerirá al grupo que tenga y mantenga el crédito suficiente para uso de terreno. @@ -1057,10 +1056,10 @@ Si se vende una parcela transferida, el precio de venta se dividirá a partes ig <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="DisplaySetToSafe"> - Las configuraciones que se muestran se han fijado en los niveles guardados, pues usted especificó la opción de guardarlos. + Las configuraciones que se muestran se han fijado en los niveles guardados, pues especificaste la opción de guardarlos. </notification> <notification name="DisplaySetToRecommended"> - Las configuraciones que se muestran se han fijado en los niveles recomendados para la configuración de su sistema. + Las configuraciones que se muestran se han fijado en los niveles recomendados para la configuración de tu sistema. </notification> <notification name="ErrorMessage"> [ERROR_MESSAGE] @@ -1107,16 +1106,16 @@ Puedes revisar tu conexión a internet y volver a intentarlo en unos minutos, pu </form> </notification> <notification name="WelcomeChooseSex"> - Su personaje aparecerá en un momento. + Tu personaje aparecerá en un momento. -Para caminar, use las teclas del cursor. -En cualquier momento, puede pulsar la tecla F1 para conseguir ayuda o para aprender más acerca de [SECOND_LIFE]. -Por favor, elija el avatar masculino o femenino. -Puede cambiar más adelante su elección. +Para caminar, usa las teclas del cursor. +En cualquier momento, puedes pulsar la tecla F1 para conseguir ayuda o para aprender más acerca de [SECOND_LIFE]. +Por favor, elige el avatar masculino o femenino. +Puedes cambiar más adelante tu elección. <usetemplate name="okcancelbuttons" notext="Mujer" yestext="Varón"/> </notification> <notification name="NotEnoughCurrency"> - [NAME] cuesta [PRICE] L$. No tiene suficientes L$ para hacer eso. + [NAME] cuesta [PRICE] L$. No tienes suficientes L$ para hacer eso. </notification> <notification name="GrantedModifyRights"> [NAME] te ha dado permiso para modificar sus objetos. @@ -1125,25 +1124,25 @@ Puede cambiar más adelante su elección. Ha sido revocado tu privilegio de modificar los objetos de [NAME] </notification> <notification name="FlushMapVisibilityCaches"> - Esto limpiará las caches del mapa en esta región. + Esto limpiará las cachés del mapa en esta región. Esto sólo es realmente útil para cuestiones de depuración ('debugging'). -(A efectos prácticos, espere 5 minutos, y el mapa de cualquiera se actualizará después de que reinicie sesión). +(A efectos prácticos, espera 5 minutos, y el mapa de cualquiera se actualizará después de que reinicies sesión). <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="BuyOneObjectOnly"> - No se puede comprar más de un objeto a la vez. Por favor, seleccione sólo un objeto y vuelva a intentarlo. + No se puede comprar más de un objeto a la vez. Por favor, selecciona sólo un objeto y vuelve a intentarlo. </notification> <notification name="OnlyCopyContentsOfSingleItem"> No se puede copiar a la vez los contenidos de más de un objeto. -Por favor, selección sólo uno y reinténtelo. +Por favor, selecciona sólo uno y vuelve a intentarlo. <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="KickUsersFromRegion"> - ¿Teleportar a su base a todos los residentes en esta región? + ¿Teleportar a tu base a todos los residentes en esta región? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="EstateObjectReturn"> - ¿Está seguro de que quiere devolver los objetos propiedad de + ¿Estás seguro de que quieres devolver los objetos propiedad de [USER_NAME] ? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> @@ -1151,50 +1150,50 @@ Por favor, selección sólo uno y reinténtelo. No se han podido configurar las texturas de la región: La textura del terreno [TEXTURE_NUM] tiene una profundidad de bites inválida: [TEXTURE_BIT_DEPTH]. -Cambie la textura [TEXTURE_NUM] por una imagen de 24-bit y 512x512 o menor, y pulse de nuevo 'Aplicar' . +Cambia la textura [TEXTURE_NUM] por una imagen de 24-bit y 512x512 o menor, y pulsa de nuevo 'Aplicar' . </notification> <notification name="InvalidTerrainSize"> No se han podido configurar las texturas de la región: La textura del terreno [TEXTURE_NUM] es demasiado grande: [TEXTURE_SIZE_X]x[TEXTURE_SIZE_Y]. -Cambie la textura [TEXTURE_NUM] por una imagen de 24-bit y 512x512 o menor, y pulse de nuevo 'Aplicar' . +Cambia la textura [TEXTURE_NUM] por una imagen de 24-bit y 512x512 o menor, y pulsa de nuevo 'Aplicar' . </notification> <notification name="RawUploadStarted"> - Ha empezado la subida. Dependiendo de la velocidad de su conexión, llevará unos dos minutos. + Ha empezado la subida. Dependiendo de la velocidad de tu conexión, llevará unos dos minutos. </notification> <notification name="ConfirmBakeTerrain"> - ¿Realmente quiere predeterminar el terreno actual, haciéndolo el centro de los limites para elevarlo y rebajarlo, y el terreno por defecto para la herramienta 'Revertir'? + ¿Realmente quieres predeterminar el terreno actual, haciéndolo el centro de los limites para elevarlo y rebajarlo, y el terreno por defecto para la herramienta 'Revertir'? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="MaxAllowedAgentOnRegion"> - Sólo puede tener [MAX_AGENTS] residentes autorizados. + Sólo puedes tener [MAX_AGENTS] residentes autorizados. </notification> <notification name="MaxBannedAgentsOnRegion"> - Sólo puede tener [MAX_BANNED] residentes no admitidos. + Sólo puedes tener [MAX_BANNED] residentes no admitidos. </notification> <notification name="MaxAgentOnRegionBatch"> Fallo al intentar añadir [NUM_ADDED] agentes: Se superan en [NUM_EXCESS] los [MAX_AGENTS] permitidos en [LIST_TYPE]. </notification> <notification name="MaxAllowedGroupsOnRegion"> - Sólo puede tener [MAX_GROUPS] grupos permitidos. + Sólo puedes tener [MAX_GROUPS] grupos permitidos. <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Predeterminar"/> </notification> <notification name="MaxManagersOnRegion"> - Sólo puede tener [MAX_MANAGER] administradores del estado. + Sólo puedes tener [MAX_MANAGER] administradores del estado. </notification> <notification name="OwnerCanNotBeDenied"> No se puede añadir a la lista de residentes no admitidos al propietario del estado. </notification> <notification name="CanNotChangeAppearanceUntilLoaded"> - No puede cambiar la apariencia hasta que no se carguen la ropa y la forma. + No puedes cambiar la apariencia hasta que no se carguen la ropa y la forma. </notification> <notification name="ClassifiedMustBeAlphanumeric"> - El nombre de su anuncio clasificado debe empezar o con un número o con una letra de la A a la Z. No se permiten signos de puntuación. + El nombre de tu anuncio clasificado debe empezar o con un número o con una letra de la A a la Z. No se permiten signos de puntuación. </notification> <notification name="CantSetBuyObject"> No puede configurar el Comprar el objeto, porque éste no está en venta. -Por favor, ponga en venta el objeto y reinténtelo. +Por favor, pon en venta el objeto y vuelve a intentarlo. </notification> <notification name="FinishedRawDownload"> Acabada la descarga del archivo raw de terreno en: @@ -1274,15 +1273,15 @@ Esta actualización no es obligatoria, pero te sugerimos instalarla para mejorar <usetemplate ignoretext="Abrir mi navegador para administrar mi cuenta" name="okcancelignore" notext="Cancelar" yestext="OK"/> </notification> <notification name="WebLaunchSecurityIssues"> - Visite el wiki de [SECOND_LIFE] para más detalles sobre cómo informar de una cuestión de seguridad. + Visita el wiki de [SECOND_LIFE] para más detalles sobre cómo informar de una cuestión de seguridad. <usetemplate ignoretext="Abrir mi navegador para informar de un fallo de seguridad" name="okcancelignore" notext="Cancelar" yestext="OK"/> </notification> <notification name="WebLaunchQAWiki"> - Visite el wiki QA de [SECOND_LIFE]. + Visita el wiki QA de [SECOND_LIFE]. <usetemplate ignoretext="Abrir mi navegador para el ver el wiki de 'QA' (Control de Calidad)" name="okcancelignore" notext="Cancelar" yestext="OK"/> </notification> <notification name="WebLaunchPublicIssue"> - Visite el Public Issue Tracker (sistema público de seguimiento de incidencias) de [SECOND_LIFE], donde podrá informar de errores y otros asuntos. + Visita el Public Issue Tracker (sistema público de seguimiento de incidencias) de [SECOND_LIFE], donde podrás informar de errores y otros asuntos. <usetemplate ignoretext="Abrir mi navegador para usar el 'Public Issue Tracker'" name="okcancelignore" notext="Cancelar" yestext="Ir a la página"/> </notification> <notification name="WebLaunchSupportWiki"> @@ -1298,26 +1297,26 @@ Esta actualización no es obligatoria, pero te sugerimos instalarla para mejorar <usetemplate ignoretext="Abrir mi navegador para ver el portal de LSL" name="okcancelignore" notext="Cancelar" yestext="Ir a la página"/> </notification> <notification name="ReturnToOwner"> - ¿Está seguro de que quiere devolver los objetos seleccionados a sus propietarios? Los objetos transferibles que se hayan cedido volverán a sus propietarios anteriores. + ¿Estás seguro de que quieres devolver los objetos seleccionados a sus propietarios? Los objetos transferibles que se hayan cedido volverán a sus propietarios anteriores. *ATENCIÓN* ¡Serán borrados los objetos no transferibles que estén cedidos! <usetemplate ignoretext="Confirmar antes de devolver objetos a sus propietarios." name="okcancelignore" notext="Cancelar" yestext="OK"/> </notification> <notification name="GroupLeaveConfirmMember"> - Actualmente, usted es miembro del grupo [GROUP]. + Actualmente, eres miembro del grupo [GROUP]. ¿Dejar el grupo? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="ConfirmKick"> - ¿DE VERDAD quiere expulsar a todos los usuarios de este grid? - <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Expulsar a todos los usuarios"/> + ¿Quieres realmente expulsar a todos los residentes de la cuadrícula? + <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Expulsar a todos los Residentes"/> </notification> <notification name="MuteLinden"> Lo sentimos, pero no puedes ignorar a un Linden. <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="CannotStartAuctionAlreadyForSale"> - No puede empezar una subasta en una parcela que ya está en venta. Desactive la venta de terreno si está seguro de querer iniciar una subasta. + No puedes empezar una subasta en una parcela que ya está en venta. Desactiva la venta de terreno si estás seguro de querer iniciar una subasta. </notification> <notification label="Falló ignorar el objeto según su nombre." name="MuteByNameFailed"> Ya has ignorado este nombre. @@ -1325,20 +1324,20 @@ Esta actualización no es obligatoria, pero te sugerimos instalarla para mejorar </notification> <notification name="RemoveItemWarn"> Aunque esté permitido, borrar contenidos puede dañar el objeto. -¿Quiere borrar ese ítem? +¿Quieres borrar ese ítem? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="CantOfferCallingCard"> - En este momento, no se puede ofrecer una tarjeta de visita. Por favor, reinténtelo en un momento. + En este momento, no se puede ofrecer una tarjeta de visita. Por favor, vuelve a intentarlo en un momento. <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="CantOfferFriendship"> - En este momento, no se puede ofrecer el ser amigo. Por favor, reinténtelo en un momento. + En este momento, no se puede ofrecer el ser amigo. Por favor, vuelve a intentarlo en un momento. <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="BusyModeSet"> Pasar al modo ocupado. -Se ocultará el chat y los mensajes instantáneos (éstos recibirán tu Respuesta en el modo ocupado). Se rehusarán todos los ofrecimientos de teleporte. Todas las ofertas de inventario irán a tu Papelera. +Se ocultará el chat y los mensajes instantáneos (éstos recibirán tu Respuesta en el modo ocupado). Se rehusarán todos los ofrecimientos de teleporte. Todas las ofertas de inventario irán a tu Papelera. <usetemplate ignoretext="Cambio mi estado al modo ocupado" name="okignore" yestext="OK"/> </notification> <notification name="JoinedTooManyGroupsMember"> @@ -1351,10 +1350,10 @@ Se ocultará el chat y los mensajes instantáneos (éstos recibirán tu Respue <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="KickUser"> - ¿Con qué mensaje se expulsará a este usuario? + ¿Con qué mensaje quieres expulsar a este Residente? <form name="form"> <input name="message"> - Un administrador le ha desconectado. + Un administrador te ha desconectado. </input> <button name="OK" text="OK"/> <button name="Cancel" text="Cancelar"/> @@ -1364,34 +1363,34 @@ Se ocultará el chat y los mensajes instantáneos (éstos recibirán tu Respue ¿Con qué mensaje se expulsará a cualquiera que esté actualmente en el grid? <form name="form"> <input name="message"> - Un administrador le ha desconectado. + Un administrador te ha desconectado. </input> <button name="OK" text="OK"/> <button name="Cancel" text="Cancelar"/> </form> </notification> <notification name="FreezeUser"> - ¿Con qué mensaje se congelará a este usuario? + ¿Con qué mensaje quieres congelar a este residente? <form name="form"> <input name="message"> - Ha sido usted congelado. No puede moverse o escribir en el chat. Un administrador contactará con usted a través de un mensaje instantáneo (MI). + Has sido congelado. No puedes moverte o escribir en el chat. Un administrador se pondrá en contacto contigo a través de un mensaje instantáneo (MI). </input> <button name="OK" text="OK"/> <button name="Cancel" text="Cancelar"/> </form> </notification> <notification name="UnFreezeUser"> - ¿Con qué mensaje se descongelará a este usuario? + ¿Con qué mensaje quieres congelar a este residente? <form name="form"> <input name="message"> - Ya no está usted congelado. + Ya no estás congelado. </input> <button name="OK" text="OK"/> <button name="Cancel" text="Cancelar"/> </form> </notification> <notification name="OfferTeleport"> - ¿Ofrecer teleporte a su posición con este mensaje? + ¿Ofrecer teleporte a tu posición con este mensaje? <form name="form"> <input name="message"> Ven conmigo a [REGION] @@ -1401,7 +1400,7 @@ Se ocultará el chat y los mensajes instantáneos (éstos recibirán tu Respue </form> </notification> <notification name="OfferTeleportFromGod"> - ¿Convocar a este usuario a su posición? + ¿Obligar a este Residente a ir a tu localización? <form name="form"> <input name="message"> Ven conmigo a [REGION] @@ -1419,11 +1418,11 @@ Se ocultará el chat y los mensajes instantáneos (éstos recibirán tu Respue <usetemplate ignoretext="Confirmar el teleporte a una localización de los Destacados" name="okcancelignore" notext="Cancelar" yestext="Teleportar"/> </notification> <notification name="TeleportToClassified"> - ¿Teleportarse a [CLASSIFIED]? + ¿Teleportarte a [CLASSIFIED]? <usetemplate ignoretext="Confirmar el teleporte a una localización de los Clasificados" name="okcancelignore" notext="Cancelar" yestext="Teleportar"/> </notification> <notification label="Mensaje a todo el estado" name="MessageEstate"> - Escriba un anuncio breve que se enviará a todo el que esté en su estado. + Escribe un anuncio breve que se enviará a todo el que esté en tu estado. <form name="form"> <input name="message"/> <button name="OK" text="OK"/> @@ -1431,15 +1430,15 @@ Se ocultará el chat y los mensajes instantáneos (éstos recibirán tu Respue </form> </notification> <notification label="Cambiar un estado Linden" name="ChangeLindenEstate"> - Va a hacer cambios en un estado propiedad de Linden (mainland, grid teen, orientación, etc.). + Estás a punto de cambiar un estado propiedad de Linden (continente, teen grid, orientación, etc.). -Esto es EXTREMADAMENTE PELIGROSO, porque puede afectar radicalmente al funcionamiento de los usuarios. En mainland, se cambiarán miles de regiones, y se provocará un colapso en el espacio del servidor. +Esto es EXTREMADAMENTE PELIGROSO porque puede afectar en gran manera la experiencia de los Residentes. En el Continente, cambiará miles de regiones y y se provocará un colapso en el espacio del servidor. -¿Proceder? +¿Continuar? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification label="Cambiar el acceso a un estado Linden" name="ChangeLindenAccess"> - Va a cambiar la lista de acceso de un estado propiedad de Linden (mainland, grid teen, orientación, etc.). + Vas a cambiar la lista de acceso de un estado propiedad de Linden (mainland, grid teen, orientación, etc.). Esto es PELIGROSO, y sólo debe hacerse para deshacerse de ataques que permitan sacar o meter en el grid objetos o L$. Se cambiarán miles de regiones, y se provocará un colapso en el espacio del servidor. @@ -1482,26 +1481,26 @@ Se cambiarán miles de regiones, y se provocará un colapso en el espacio del se <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="EstateChangeCovenant"> - ¿Está seguro de que quiere cambiar el contrato del estado? + ¿Estás seguro de que quieres cambiar el contrato del estado? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="RegionEntryAccessBlocked"> - Usted no está autorizado en esa región por su nivel de calificación. Puede deberse a que no hay información validada de su edad. + No estás autorizado en esa región por su nivel de calificación. Puede deberse a que no hay información validada de tu edad. -Por favor, compruebe que tiene instalado el último visor, y vaya a la Base de Conocimientos para más detalles sobre el acceso a zonas con este nivel de calificación. +Por favor, comprueba que tienes instalado el último visor, y dirígete a la Base de Conocimientos para más detalles sobre el acceso a zonas con este nivel de calificación. <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="RegionEntryAccessBlocked_KB"> - Usted no está autorizado en esa región por su nivel de calificación. + No estás autorizado en esa región por su nivel de calificación. -¿Quiere ir a la Base de Conocimientos para aprender más sobre el nivel de calificación? +¿Quieres ir a la Base de Conocimientos para aprender más sobre el nivel de calificación? <url name="url"> http://wiki.secondlife.com/wiki/Linden_Lab_Official:Maturity_ratings:_an_overview/es </url> <usetemplate ignoretext="No puedo entrar a esta región dado el nivel de calificación" name="okcancelignore" notext="Cerrar" yestext="Ir a la Base de Conocimientos"/> </notification> <notification name="RegionEntryAccessBlocked_Notify"> - Usted no está autorizado en esa región por su nivel de calificación. + No estás autorizado en esa región por su nivel de calificación. </notification> <notification name="RegionEntryAccessBlocked_Change"> No estás autorizado en esta región por tus preferencias sobre el nivel de calificación. @@ -1514,22 +1513,22 @@ Puedes pulsar 'Cambiar las Preferencias' para incrementar las preferen </form> </notification> <notification name="LandClaimAccessBlocked"> - Usted no puede reclamar este terreno por su nivel de calificación. Puede deberse a que no hay información validada de su edad. + No puedes reclamar este terreno por su nivel de calificación. Puede deberse a que no hay información validada de tu edad. -Por favor, compruebe que tiene instalado el último visor, y vaya a la Base de Conocimientos para más detalles sobre el acceso a zonas con este nivel de calificación. +Por favor, comprueba que tienes instalado el último visor, y dirígete a la Base de Conocimientos para más detalles sobre el acceso a zonas con este nivel de calificación. <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="LandClaimAccessBlocked_KB"> - No puede reclamar este terreno por sus nivel de calificación. + No puedes reclamar este terreno por su nivel de calificación. -¿Quiere ir a la Base de Conocimientos para más información sobre el nivel de calificación? +¿Quieres ir a la Base de Conocimientos para más información sobre el nivel de calificación? <url name="url"> http://wiki.secondlife.com/wiki/Linden_Lab_Official:Maturity_ratings:_an_overview/es </url> <usetemplate ignoretext="No puedo reclamar este terreno dado el nivel de calificación" name="okcancelignore" notext="Cerrar" yestext="Ir a la Base de Conocimientos"/> </notification> <notification name="LandClaimAccessBlocked_Notify"> - Por su nivel de calificación, usted no puede reclamar este terreno. + No puedes reclamar este terreno debido a su nivel de calificación. </notification> <notification name="LandClaimAccessBlocked_Change"> No puedes reclamar este terreno por tus preferencias sobre el nivel de calificación. @@ -1538,22 +1537,22 @@ Puedes pulsar 'Cambiar las Preferencias' para incrementar las preferen <usetemplate ignoretext="Mis preferencias sobre el nivel de calificación me impiden reclamar este terreno" name="okcancelignore" notext="Cerrar" yestext="Cambiar preferencia"/> </notification> <notification name="LandBuyAccessBlocked"> - Usted no puede comprar este terreno por su nivel de calificación. Puede deberse a que no hay información validada de su edad. + No puedes comprar este terreno por su nivel de calificación. Puede deberse a que no hay información validada de tu edad. -Por favor, compruebe que tiene instalado el último visor, y vaya a la Base de Conocimientos para más detalles sobre el acceso a zonas con este nivel de calificación. +Por favor, comprueba que tienes instalado el último visor, y dirígete a la Base de Conocimientos para más detalles sobre el acceso a zonas con este nivel de calificación. <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="LandBuyAccessBlocked_KB"> - No puede comprar este terreno por sus preferencias de nivel de calificación. + No puedes comprar este terreno por tus preferencias de nivel de calificación. -¿Quiere ir a la Base de Conocimientos para más información sobre el nivel de calificación? +¿Quieres ir a la Base de Conocimientos para más información sobre el nivel de calificación? <url name="url"> http://wiki.secondlife.com/wiki/Linden_Lab_Official:Maturity_ratings:_an_overview/es </url> <usetemplate ignoretext="No puedo comprar este terreno dado el nivel de calificación" name="okcancelignore" notext="Cerrar" yestext="Ir a la Base de Conocimientos"/> </notification> <notification name="LandBuyAccessBlocked_Notify"> - No puede comprar este terreno por su nivel de calificación. + No puedes comprar este terreno por su nivel de calificación. </notification> <notification name="LandBuyAccessBlocked_Change"> No puedes comprar este terreno por tus preferencias sobre el nivel de calificación. @@ -1573,7 +1572,7 @@ Puedes pulsar 'Cambiar las Preferencias' para incrementar las preferen Hay problemas al añadir un administrador nuevo del estado. Uno o más estados deben de tener llena la lista de administradores. </notification> <notification name="ProblemAddingEstateGeneric"> - Hay problemas en este añadir a la lista del estado. Uno o más estados deben de tener llena la lista. + Hay problemas al añadir a la lista del estado. Uno o más estados deben de tener llena la lista. </notification> <notification name="UnableToLoadNotecardAsset"> En este momento, no se pueden cargar los datos de la's nota's. @@ -1588,25 +1587,25 @@ Puedes pulsar 'Cambiar las Preferencias' para incrementar las preferen <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="PublishClassified"> - Recuerde: las cuotas que se pagan por los clasificados no son reembolsables. + Recuerda: las cuotas que se pagan por los clasificados no son reembolsables. ¿Publicar ahora este anuncio por [AMOUNT] L$? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="SetClassifiedMature"> - ¿Este anuncio tiene contenido 'Mature'? + ¿Este anuncio tiene contenido 'Moderado'? <usetemplate canceltext="Cancelar" name="yesnocancelbuttons" notext="No" yestext="Sí"/> </notification> <notification name="SetGroupMature"> - ¿Este grupo tiene contenido 'Mature'? + ¿Este grupo tiene contenido 'Moderado'? <usetemplate canceltext="Cancelar" name="yesnocancelbuttons" notext="No" yestext="Sí"/> </notification> <notification label="Confirmar el reinicio" name="ConfirmRestart"> - ¿Verdaderamente quiere reiniciar la región de aquí a 2 minutos? + ¿Verdaderamente quieres reiniciar la región de aquí a 2 minutos? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification label="Mensaje a toda la región" name="MessageRegion"> - Escriba un anuncio breve que se enviará a todo el que esté en esta región. + Escribe un anuncio breve que se enviará a todo el que esté en esta región. <form name="form"> <input name="message"/> <button name="OK" text="OK"/> @@ -1624,20 +1623,20 @@ Para entrar a regiones Adultas, los Residentes deben haber verificado su cuenta, </notification> <notification label="No se pudo comprar los objetos" name="BuyObjectOneOwner"> No se pueden comprar a la vez objetos de propietarios diferentes. -Por favor, seleccione sólo un objeto y vuelva a intentarlo. +Por favor, selecciona sólo un objeto y vuelve a intentarlo. </notification> <notification label="No se pudo comprar el contenido" name="BuyContentsOneOnly"> No se puede comprar a la vez los contenidos de más de un objeto. -Por favor, seleccione sólo un objeto y vuelva a intentarlo. +Por favor, selecciona sólo un objeto y vuelve a intentarlo. </notification> <notification label="No se pudo comprar el contenido" name="BuyContentsOneOwner"> No se pueden comprar a la vez objetos de propietarios diferentes. -Por favor, seleccione sólo un objeto y vuelva a intentarlo. +Por favor, selecciona sólo un objeto y vuelve a intentarlo. </notification> <notification name="BuyOriginal"> ¿Comprar el objeto original de [OWNER] por [PRICE] L$? -Usted pasará a ser el propietario de este objeto. -Podrá: +Pasarás a ser el propietario de este objeto. +Podrás: Modificarlo: [MODIFYPERM] Copiarlo: [COPYPERM] Revenderlo o darlo: [RESELLPERM] @@ -1645,8 +1644,8 @@ Podrá: </notification> <notification name="BuyOriginalNoOwner"> ¿Comprar el objeto original por [PRICE] L$? -Usted pasará a ser el propietario de este objeto. -Podrá: +Pasarás a ser el propietario de este objeto. +Podrás: Modificarlo: [MODIFYPERM] Copiarlo: [COPYPERM] Revenderlo o darlo: [RESELLPERM] @@ -1654,8 +1653,8 @@ Podrá: </notification> <notification name="BuyCopy"> ¿Comprar una copia de [OWNER] por [PRICE] L$? -El objeto se copiará a su inventario. -Podrá: +El objeto se copiará a tu inventario. +Podrás: Modificarlo: [MODIFYPERM] Copiarlo: [COPYPERM] Revenderlo o darlo: [RESELLPERM] @@ -1663,8 +1662,8 @@ Podrá: </notification> <notification name="BuyCopyNoOwner"> ¿Comprar una copia por [PRICE] L$? -El objeto se copiará a su inventario. -Podrá: +El objeto se copiará a tu inventario. +Podrás: Modificarlo: [MODIFYPERM] Copiarlo: [COPYPERM] Revenderlo o darlo: [RESELLPERM] @@ -1672,27 +1671,27 @@ Podrá: </notification> <notification name="BuyContents"> ¿Comprar los contenidos de [OWNER] por [PRICE] L$? -Serán copiados a su inventario. +Serán copiados a tu inventario. <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="BuyContentsNoOwner"> ¿Comprar los contenidos por [PRICE] L$? -Serán copiados a su inventario. +Serán copiados a tu inventario. <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="ConfirmPurchase"> - Esta transacción hará que: + Esta transacción consiste en: [ACTION] -¿Está seguro de querer hacer esta compra? +¿Estás seguro de querer hacer esta compra? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="ConfirmPurchasePassword"> - Esta transacción hará que: + Esta transacción consiste en: [ACTION] -¿Está seguro de querer hacer esta compra? -Por favor, vuelva a escribir su contraseña y pulse OK. +¿Estás seguro de querer hacer esta compra? +Por favor, vuelva a escribir tu contraseña y pulsa OK. <form name="form"> <input name="message"/> <button name="ConfirmPurchase" text="OK"/> @@ -1701,18 +1700,18 @@ Por favor, vuelva a escribir su contraseña y pulse OK. </notification> <notification name="SetPickLocation"> Nota: -Ha actualizado la posición de este Destacado, pero los otros detalles permanecen con sus valores originales. +Has actualizado la posición de este Destacado, pero los otros detalles permanecen con sus valores originales. <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="MoveInventoryFromObject"> - Ha elegido ítems 'no copiables' de su inventario. Esos ítems se quitarán de su inventario, no se copiarán. + Has elegido ítems 'no copiables' de tu inventario. Esos ítems se quitarán de tu inventario, no se copiarán. ¿Mover el/los ítem/s del inventario? <usetemplate ignoretext="Avisarme antes de que mueva ítems 'no copiables' desde un objeto" name="okcancelignore" notext="Cancelar" yestext="OK"/> </notification> <notification name="MoveInventoryFromScriptedObject"> - Ha elegido ítems 'no copiables' de su inventario. Esos ítems se moverán a su inventario, no se copiarán. -Dado que estos objetos tienen scripts, moverlos a su inventario puede provocar un mal funcionamiento del script. + Has elegido ítems 'no copiables' de tu inventario. Esos ítems se moverán a tu inventario, no se copiarán. +Dado que estos objetos tienen scripts, moverlos a tu inventario puede provocar un mal funcionamiento del script. ¿Mover el/los ítem/s del inventario? <usetemplate ignoretext="Avisarme antes de que mueva ítems 'no copiables' que puedan estropear un objeto con script" name="okcancelignore" notext="Cancelar" yestext="OK"/> @@ -1724,7 +1723,7 @@ Dado que estos objetos tienen scripts, moverlos a su inventario puede provocar u </form> </notification> <notification name="OpenObjectCannotCopy"> - En este objeto, no hay ítems que esté autorizado a copiar. + En este objeto, no hay ítems que estés autorizado a copiar. </notification> <notification name="WebLaunchAccountHistory"> ¿Ir a tu [http://secondlife.com/account/ Panel de Control] para ver el historial de tu cuenta? @@ -1735,29 +1734,29 @@ Dado que estos objetos tienen scripts, moverlos a su inventario puede provocar u <usetemplate ignoretext="Confirmar antes de salir" name="okcancelignore" notext="No salir" yestext="Salir"/> </notification> <notification name="HelpReportAbuseEmailLL"> - Usa esta herramienta para denunciar violaciones de las [http://secondlife.com/corporate/tos.php Condiciones de Servicio] o las [http://secondlife.com/corporate/cs.php Normas de la Comunidad]. + Usa esta herramienta para denunciar violaciones de las [http://secondlife.com/corporate/tos.php Condiciones del Servicio] o las [http://secondlife.com/corporate/cs.php Normas de la Comunidad]. Se investigan y resuelven todas las infracciones denunciadas. </notification> <notification name="HelpReportAbuseSelectCategory"> - Por favor, elija una categoría para esta denuncia de infracción. + Por favor, elige una categoría para esta denuncia de infracción. Seleccionar una categoría nos ayuda a clasificar y procesar las denuncias de infracciones. </notification> <notification name="HelpReportAbuseAbuserNameEmpty"> - Por favor, escriba el nombre del infractor. + Por favor, escribe el nombre del infractor. Aportar el dato preciso nos ayuda a clasificar y procesar las denuncias de infracciones. </notification> <notification name="HelpReportAbuseAbuserLocationEmpty"> - Por favor, escriba la localización donde tuvo lugar la infracción. + Por favor, escribe la localización donde tuvo lugar la infracción. Aportar el dato preciso nos ayuda a clasificar y procesar las denuncias de infracciones. </notification> <notification name="HelpReportAbuseSummaryEmpty"> - Por favor, escriba un resumen de la infracción que ha habido. + Por favor, escribe un resumen de la infracción que ha habido. Aportar un resumen preciso nos ayuda a clasificar y procesar las denuncias de infracciones. </notification> <notification name="HelpReportAbuseDetailsEmpty"> - Por favor, escriba una descripción minuciosa de la infracción que ha habido. -Sea tan específico como pueda, incluyendo los nombres y los detalles implicados en el incidente que denuncia. + Por favor, escribe una descripción minuciosa de la infracción que ha habido. +Sé tan específico como puedas, incluyendo los nombres y los detalles implicados en el incidente que denuncias. Aportar una descripción precisa nos ayuda a clasificar y procesar las denuncias de infracciones. </notification> <notification name="HelpReportAbuseContainsCopyright"> @@ -1780,7 +1779,7 @@ Linden Lab [COMPONENTS] </notification> <notification label="Reemplazar el anexado actual" name="ReplaceAttachment"> - En ese punto de su cuerpo ya hay un objeto anexado. ¿Quiere reemplazarlo por el objeto que ha elegido? + En ese punto de tu cuerpo ya hay un objeto anexado. ¿Quieres reemplazarlo por el objeto que has elegido? <form name="form"> <ignore name="ignore" save_option="true" text="Reemplazar un añadido actual con el ítem seleccionado"/> <button ignore="Reemplazar automaticamente" name="Yes" text="OK"/> @@ -1788,9 +1787,9 @@ Linden Lab </form> </notification> <notification label="¡Aviso! Modo Ocupado" name="BusyModePay"> - Usted está en el modo Ocupado. Por tanto, no recibirá ningún ítem a cambio de esta pago. + Estás en el modo Ocupado. Por tanto, no recibirás ningún ítem a cambio de este pago. -¿Quiere salir del modo Ocupado ante de completar esta transacción? +¿Quieres salir del modo Ocupado antes de completar esta transacción? <form name="form"> <ignore name="ignore" save_option="true" text="Voy a pagar a una persona u objeto mientras estoy en el modo ocupado"/> <button ignore="Siempre salir del modo Ocupado" name="Yes" text="OK"/> @@ -1798,7 +1797,7 @@ Linden Lab </form> </notification> <notification name="ConfirmDeleteProtectedCategory"> - La carpeta '[FOLDERNAME]' pertenece al sistema, y borrar carpetas del sistema puede provocar inestabilidad. ¿Estás seguro de que quieres borrarla? + La carpeta '[FOLDERNAME]' pertenece al sistema, y borrar carpetas del sistema puede provocar inestabilidad. ¿Estás seguro de que quieres borrarla? <usetemplate ignoretext="Confirmar antes de borrar una carpeta del sistema" name="okcancelignore" notext="Cancelar" yestext="OK"/> </notification> <notification name="ConfirmEmptyTrash"> @@ -1810,11 +1809,11 @@ Linden Lab <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="ConfirmClearCookies"> - ¿Está seguro de que quiere limpiar sus cookies? + ¿Estás seguro de que quieres limpiar tus cookies? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Sí"/> </notification> <notification name="ConfirmClearMediaUrlList"> - ¿Está seguro de que quiere vaciar su lista de URL guardadas? + ¿Estás seguro de que quieres vaciar tu lista de URL guardadas? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Sí"/> </notification> <notification name="ConfirmEmptyLostAndFound"> @@ -1831,21 +1830,21 @@ Publícala en una página web para que otros puedan acceder fácilmente a esta p </form> </notification> <notification name="WLSavePresetAlert"> - ¿Quiere sobrescribir la preselección guardada? + ¿Quieres sobrescribir la preselección guardada? <usetemplate name="okcancelbuttons" notext="No" yestext="Sí"/> </notification> <notification name="WLDeletePresetAlert"> - ¿Quiere borrar [SKY]? + ¿Quieres borrar [SKY]? <usetemplate name="okcancelbuttons" notext="No" yestext="Sí"/> </notification> <notification name="WLNoEditDefault"> - No puede editar ni borrar una preselección por defecto. + No puedes editar ni borrar una preselección por defecto. </notification> <notification name="WLMissingSky"> Este archivo del ciclo de un día se refiere a un archivo perdido de cielo: [SKY]. </notification> <notification name="PPSaveEffectAlert"> - Ya existe un efecto de procesamiento. ¿Desea sobreescribirlo? + Ya existe un efecto de procesamiento. ¿Quieres sobreescribirlo? <usetemplate name="okcancelbuttons" notext="No" yestext="Sí"/> </notification> <notification name="NewSkyPreset"> @@ -1875,7 +1874,7 @@ Publícala en una página web para que otros puedan acceder fácilmente a esta p ¡Esa preselección ya existe! </notification> <notification name="WaterNoEditDefault"> - No puede editar o borrar una preselección por defecto. + No puedes editar o borrar una preselección por defecto. </notification> <notification name="ChatterBoxSessionStartError"> No se puede empezar una nueva sesión de chat con [RECIPIENT]. @@ -1888,7 +1887,7 @@ Publícala en una página web para que otros puedan acceder fácilmente a esta p <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="ForceCloseChatterBoxSession"> - Debe cerrarse su sesión de chat con [NAME]. + Debe cerrarse tu sesión de chat con [NAME]. [REASON] <usetemplate name="okbutton" yestext="OK"/> </notification> @@ -1896,7 +1895,7 @@ Publícala en una página web para que otros puedan acceder fácilmente a esta p No puedes comprar un objeto mientras esté anexado. </notification> <notification label="Acerca de las solicitudes de autorización de débito" name="DebitPermissionDetails"> - Al admitir esta petición, le da permiso a un script para que coja dólares Linden (L$) de su cuenta. Para revocar este permiso, el propietario del objeto debe eliminarlo o reiniciar ese script del objeto. + Al admitir esta petición, le das permiso a un script para que coja dólares Linden (L$) de tu cuenta. Para revocar este permiso, el propietario del objeto debe eliminarlo o reiniciar ese script del objeto. <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="AutoWearNewClothing"> @@ -1931,10 +1930,10 @@ Publícala en una página web para que otros puedan acceder fácilmente a esta p Cancelado </notification> <notification name="CancelledSit"> - Cancelado el sentarse + Cancelado el sentarte </notification> <notification name="CancelledAttach"> - Candelado el anexar + Cancelado el anexar </notification> <notification name="ReplacedMissingWearable"> Reemplazadas las ropas o partes del cuerpo perdidas con sus equivalentes por defecto. @@ -1956,7 +1955,7 @@ Publícala en una página web para que otros puedan acceder fácilmente a esta p (tardará unos 5 minutos). </notification> <notification name="UploadPayment"> - Ha pagado [AMOUNT] LS por la subida. + Has pagado [AMOUNT] LS por la subida. </notification> <notification name="UploadWebSnapshotDone"> Completada la subida de la foto del sitio web. @@ -1977,7 +1976,7 @@ Publícala en una página web para que otros puedan acceder fácilmente a esta p El hito ha desaparecido de la base de datos. </notification> <notification name="UnableToLoadLandmark"> - No se ha podido cargar el hito. Por favor, vuelva a intentarlo. + No se ha podido cargar el hito. Por favor, vuelve a intentarlo. </notification> <notification name="CapsKeyOn"> Tienes pulsada la tecla de mayúsculas. @@ -1990,7 +1989,7 @@ Esto puede influir en tu contraseña. No tienes permiso para ver esta nota. </notification> <notification name="RezItemNoPermissions"> - No tiene permisos suficientes para renderizar el objeto. + No tienes permisos suficientes para renderizar el objeto. </notification> <notification name="UnableToLoadNotecard"> En este momento no se puede cargar la nota. @@ -1999,30 +1998,30 @@ Esto puede influir en tu contraseña. El script ha desaparecido de la base de datos. </notification> <notification name="ScriptNoPermissions"> - No tiene permisos suficientes para ver el script. + No tienes permisos suficientes para ver el script. </notification> <notification name="UnableToLoadScript"> - No se ha podido cargar el script. Por favor, vuelva a intentarlo. + No se ha podido cargar el script. Por favor, vuelve a intentarlo. </notification> <notification name="IncompleteInventory"> - Los contenidos que está usted ofreciendo aún no están disponibles. Por favor, vuelva a ofrecerlos en un minuto. + Los contenidos que estás ofreciendo aún no están disponibles. Por favor, vuelve a ofrecerlos en un minuto. </notification> <notification name="CannotModifyProtectedCategories"> - No puede modificar categorías que están protegidas. + No puedes modificar categorías que están protegidas. </notification> <notification name="CannotRemoveProtectedCategories"> - No puede quitar categorías que están protegidas. + No puedes quitar categorías que están protegidas. </notification> <notification name="OfferedCard"> - Ha ofrecido una tarjeta de visita a [FIRST] [LAST] + Has ofrecido una tarjeta de visita a [FIRST] [LAST] </notification> <notification name="UnableToBuyWhileDownloading"> - No se puede comprar un objeto mientras se descargan sus datos. -Por favor, vuelva a intentarlo. + No se puede comprar un objeto mientras se descargan los datos. +Por favor, vuelve a intentarlo. </notification> <notification name="UnableToLinkWhileDownloading"> - No se puede enlazar un objeto mientras se descargan sus datos. -Por favor, vuelva a intentarlo. + No se puede enlazar un objeto mientras se descargan los datos. +Por favor, vuelve a intentarlo. </notification> <notification name="CannotBuyObjectsFromDifferentOwners"> No puedes comprar más de un objeto a la vez. @@ -2044,16 +2043,16 @@ Por favor, selecciona un sólo objeto. [NAME] ha recibido tu oferta de inventario. </notification> <notification name="InventoryDeclined"> - [NAME] ha rehusado su oferta del inventario. + [NAME] ha rehusado tu oferta del inventario. </notification> <notification name="ObjectMessage"> [NAME]: [MESSAGE] </notification> <notification name="CallingCardAccepted"> - Se ha aceptado su tarjeta de visita. + Se ha aceptado tu tarjeta de visita. </notification> <notification name="CallingCardDeclined"> - Se ha rehusado su tarjeta de visita. + Se ha rehusado tu tarjeta de visita. </notification> <notification name="TeleportToLandmark"> Puedes teleportarte a lugares como '[NAME]' abriendo el panel Lugares -a la derecha de tu pantalla- y seleccionando la sección Hitos. @@ -2066,14 +2065,14 @@ Elige al Residente de la lista y pulsa 'MI' en la parte inferior del p (También puedes pulsar dos veces en su nombre o pulsarlo con el botón derecho y elegir 'MI'). </notification> <notification name="CantSelectLandFromMultipleRegions"> - No puede seleccionar un terreno que cruce las fronteras entre servidores. -Inténtelo seleccionando un trozo más pequeño de terreno. + No puedes seleccionar un terreno que cruce las fronteras entre servidores. +Inténtalo seleccionando un trozo más pequeño de terreno. </notification> <notification name="SearchWordBanned"> - Se han excluido algunos términos de su búsqueda debido a restricciones en el contenido, según se especifica en las Normas de la Comunidad. + Se han excluido algunos términos de tu búsqueda debido a restricciones en el contenido, según se especifica en las Normas de la Comunidad. </notification> <notification name="NoContentToSearch"> - Por favor, elija al menos un tipo de contenido a buscar ('PG', 'Mature', o 'Adult'). + Por favor, elige al menos un tipo de contenido a buscar ('PG', 'Mature', o 'Adult'). </notification> <notification name="GroupVote"> [NAME] ha propuesto votar: @@ -2129,10 +2128,10 @@ Por favor, reinstala el plugin o contacta con el vendedor si sigues teniendo pro </form> </notification> <notification name="OwnedObjectsReturned"> - Se han devuelto a su inventario los objetos de los que usted era propietario en la parcela seleccionada. + Se han devuelto a tu inventario los objetos de los que eras propietario en la parcela seleccionada. </notification> <notification name="OtherObjectsReturned"> - Se han devuelto a su inventario los objetos de los que usted era propietario en la parcela propiedad de [FIRST] [LAST]. + Se han devuelto a tu inventario los objetos de los que eras propietario en la parcela propiedad de [FIRST] [LAST]. </notification> <notification name="OtherObjectsReturned2"> Se han devuelto a su propietario los objetos seleccionados en la parcela de terreno propiedad de '[NAME]'. @@ -2143,7 +2142,7 @@ Los objetos transferibles que se transfirieron al grupo se han devuelto a sus pr Los objetos no transferibles que se transfirieron al grupo han sido borrados. </notification> <notification name="UnOwnedObjectsReturned"> - Se han devuelto a sus propietarios los objetos de los que usted NO era propietario en la parcela seleccionada. + Se han devuelto a sus propietarios los objetos de los que NO eras propietario en la parcela seleccionada. </notification> <notification name="ServerObjectMessage"> Mensaje de [NAME]: @@ -2181,33 +2180,33 @@ Los scripts no funcionan aquí, excepto los pertenecientes al propietario del te Sólo puedes reclamar terreno público de la región en que estás. </notification> <notification name="RegionTPAccessBlocked"> - No está autorizado en esa región por su nivel de calificación. Debe validar su edad y/o instalar el último visor. + No estás autorizado en esa región por su nivel de calificación. Debes validar tu edad y/o instalar el último visor. -Por favor, vaya a la Base de Conocimientos para más detalles sobre el acceso a zonas con este nivel de calificación. +Por favor, dirígete a la Base de Conocimientos para más detalles sobre el acceso a zonas con este nivel de calificación. </notification> <notification name="URBannedFromRegion"> - Se le ha prohibido el acceso a la región. + Se te ha prohibido el acceso a la región. </notification> <notification name="NoTeenGridAccess"> - Su cuenta no puede conectarse a esta región del grid teen. + Tu cuenta no puede conectarse a esta región del grid teen. </notification> <notification name="ImproperPaymentStatus"> - No tiene el estado de pago adecuado para entrar a esta región. + No tienes el estado de pago adecuado para entrar a esta región. </notification> <notification name="MustGetAgeParcel"> - Debe haber verificado su edad para entrar a esta parcela. + Debes haber verificado tu edad para entrar a esta parcela. </notification> <notification name="NoDestRegion"> No se ha encontrada la región de destino. </notification> <notification name="NotAllowedInDest"> - No está autorizado en el destino. + No estás autorizado en el destino. </notification> <notification name="RegionParcelBan"> - No puede cruzar la región por una parcela con el acceso prohibido. Intente otro camino. + No puedes cruzar la región por una parcela con el acceso prohibido. Intenta otro camino. </notification> <notification name="TelehubRedirect"> - Ha sido redirigido a un punto de teleporte. + Has sido redirigido a un punto de teleporte. </notification> <notification name="CouldntTPCloser"> No se puede teleportar a un destino tan cercano. @@ -2216,17 +2215,17 @@ Por favor, vaya a la Base de Conocimientos para más detalles sobre el acceso a Teleporte cancelado. </notification> <notification name="FullRegionTryAgain"> - En estos momentos, está llena la región a la que intenta entrar. -Por favor, reinténtelo en unos momentos. + En estos momentos, está llena la región a la que estás intentando entrar. +Por favor, vuelve a intentarlo en unos momentos. </notification> <notification name="GeneralFailure"> Fallo general. </notification> <notification name="RoutedWrongRegion"> - Mal dirigido a la región. Por favor, reinténtelo. + Mal dirigido a la región. Por favor, vuelve a intentarlo. </notification> <notification name="NoValidAgentID"> - ID de agente inválida. + ID de agente inválido. </notification> <notification name="NoValidSession"> ID de sesión inválido. @@ -2241,13 +2240,13 @@ Por favor, reinténtelo en unos momentos. No se puede crear la conexión. </notification> <notification name="InternalUsherError"> - Se ha producido un error interno al intentar acceder al destino de su teleporte. Puede que, en este momento, el servicio de [SECOND_LIFE] tenga problemas. + Se ha producido un error interno al intentar acceder al destino de tu teleporte. Puede que, en este momento, el servicio de [SECOND_LIFE] tenga problemas. </notification> <notification name="NoGoodTPDestination"> No se puede encontrar en esta región un buen destino para el teleporte. </notification> <notification name="InternalErrorRegionResolver"> - Ha sucedido un error interno al manejar las coordenadas globales de su petición de teleporte. Puede que, en este momento, el servicio de [SECOND_LIFE] tenga problemas. + Se ha producido un error interno al manejar las coordenadas globales de tu petición de teleporte. Puede que, en este momento, el servicio de [SECOND_LIFE] tenga problemas. </notification> <notification name="NoValidLanding"> No se ha podido encontrar un punto de aterrizaje válido. @@ -2316,11 +2315,11 @@ Por favor, reinténtelo en unos momentos. </form> </notification> <notification name="OfferFriendship"> - [NAME] le está ofreciendo amistad. + [NAME] te está ofreciendo amistad. [MESSAGE] -(Por defecto, usted podrá ver si están conectados los demás). +(Por defecto, podrás ver si están conectados los demás). <form name="form"> <button name="Accept" text="Aceptar"/> <button name="Decline" text="Rehusar"/> @@ -2330,19 +2329,19 @@ Por favor, reinténtelo en unos momentos. Has ofrecido amistad a [TO_NAME] </notification> <notification name="OfferFriendshipNoMessage"> - [NAME] le está ofreciendo amistad. + [NAME] te está ofreciendo amistad. -(Por defecto, usted podrá ver si están conectados los demás). +(Por defecto, podrás ver si están conectados los demás). <form name="form"> <button name="Accept" text="Aceptar"/> <button name="Decline" text="Rehusar"/> </form> </notification> <notification name="FriendshipAccepted"> - [NAME] ha aceptado su oferta de amistad. + [NAME] ha aceptado tu oferta de amistad. </notification> <notification name="FriendshipDeclined"> - [NAME] ha rehusado su oferta de amistad. + [NAME] ha rehusado tu oferta de amistad. </notification> <notification name="FriendshipAcceptedByMe"> Aceptado el ofrecimiento de amistad. @@ -2363,7 +2362,7 @@ Esto añadirá un marcador en tu inventario para que puedas enviarle rápidament Si permaneces en esta región serás desconectado. </notification> <notification name="RegionRestartSeconds"> - Esta región se reiniciará en [SECONDS] segundos. + Esta región se reiniciará en [SECONDS] segundos. Si permaneces en esta región serás desconectado. </notification> <notification name="LoadWebPage"> @@ -2390,7 +2389,7 @@ Del objeto: [OBJECTNAME]; propiedad de: [NAME]? '[OBJECTNAME]', un objeto propiedad de '[NAME]', querría: [QUESTIONS] -¿Está de acuerdo? +¿Estás de acuerdo? <form name="form"> <button name="Yes" text="Sí"/> <button name="No" text="No"/> @@ -2424,25 +2423,17 @@ Si no confias en este objeto y en su creador, deberías rehusar esta petición. <button name="Ignore" text="Ignorar"/> </form> </notification> - <notification name="ScriptToast"> - El '[TITLE]' de [FIRST] [LAST] está esperando una respuesta del usuario. - <form name="form"> - <button name="Open" text="Abrir el diálogo"/> - <button name="Ignore" text="Ignorar"/> - <button name="Block" text="Ignorar"/> - </form> - </notification> <notification name="BuyLindenDollarSuccess"> ¡Gracias por tu pago! -Tu saldo de L$ se actualizará cuando se complete el proceso. Si el proceso tarda más de 20 minutos, se cancelará tu transacción, y la cantidad se cargará en tu saldo de US$. +Tu saldo de L$ se actualizará cuando se complete el proceso. Si el proceso tarda más de 20 minutos, se cancelará tu transacción, y la cantidad se cargará en tu saldo de US$. Puedes revisar el estado de tu pago en el Historial de transacciones de tu [http://secondlife.com/account/ Panel de Control] </notification> <notification name="FirstOverrideKeys"> - A partir de ahora, sus teclas de movimiento las gestiona un objeto. -Pruebe las teclas del cursor o AWSD para ver qué hacen. -Algunos objetos (las pistolas, por ejemplo) le pedirán que, para usarlos, entre usted en vista subjetiva. Pulse 'M' para hacerlo. + A partir de ahora, tus teclas de movimiento las gestiona un objeto. +Prueba las teclas del cursor o AWSD para ver qué hacen. +Algunos objetos (las pistolas, por ejemplo) te pedirán que, para usarlos, entres en vista subjetiva. Pulsa 'M' para hacerlo. </notification> <notification name="FirstSandbox"> Esta es una región 'sandbox' (zona de pruebas) donde los Residentes pueden aprender a construir. @@ -2450,7 +2441,7 @@ Algunos objetos (las pistolas, por ejemplo) le pedirán que, para usarlos, entre Los objetos que construyas aquí serán eliminados cuando la abandones; por tanto, no olvides pulsarlos con el botón derecho y elegir 'Tomar' para que tu creación vaya a tu inventario. </notification> <notification name="MaxListSelectMessage"> - Puede seleccionar un máximo de [MAX_SELECT] ítems de esta lista. + Puedes seleccionar un máximo de [MAX_SELECT] ítems de esta lista. </notification> <notification name="VoiceInviteP2P"> [NAME] te está invitando a un chat de voz. @@ -2498,10 +2489,10 @@ Pulsa Aceptar o Rehusar para coger o no la llamada. Pulsa Ignorar para ignorar a </form> </notification> <notification name="VoiceChannelFull"> - El chat de voz al que está intentando entrar, [VOICE_CHANNEL_NAME], ha llegado a su capacidad máxima. Por favor, inténtelo más tarde. + El chat de voz al que estás intentando entrar, [VOICE_CHANNEL_NAME], ha llegado a su capacidad máxima. Por favor, vuelve a intentarlo más tarde. </notification> <notification name="ProximalVoiceChannelFull"> - Lo sentimos. Este área ha llegado a su capacidad máxima de conversaciones por voz. Por favor, intente usar la voz en otra zona. + Lo sentimos. Este área ha llegado a su capacidad máxima de conversaciones por voz. Por favor, intenta usar la voz en otra zona. </notification> <notification name="VoiceChannelDisconnected"> Has sido desconectado de [VOICE_CHANNEL_NAME]. Vas a ser reconectado al chat de voz. @@ -2519,22 +2510,22 @@ Pulsa Aceptar o Rehusar para coger o no la llamada. Pulsa Ignorar para ignorar a Fallo al conectar a [VOICE_CHANNEL_NAME]; por favor, inténtalo más tarde. Vas a ser reconectado al chat de voz. </notification> <notification name="VoiceLoginRetry"> - Estamos creando un canal de voz para usted. Se puede tardar hasta un minuto. + Estamos creando un canal de voz para ti. Se puede tardar hasta un minuto. </notification> <notification name="Cannot enter parcel: not a group member"> Sólo los miembros de un grupo determinado pueden visitar esta zona. </notification> <notification name="Cannot enter parcel: banned"> - No puede entrar en esta parcela, se le ha prohibido el acceso. + No puedes entrar en esta parcela, se te ha prohibido el acceso. </notification> <notification name="Cannot enter parcel: not on access list"> - No puede entrar en esta parcela, no está en la lista de acceso. + No puedes entrar en esta parcela, no estás en la lista de acceso. </notification> <notification name="VoiceNotAllowed"> - No tiene permiso para conectarse al chat de voz de [VOICE_CHANNEL_NAME]. + No tienes permiso para conectarte al chat de voz de [VOICE_CHANNEL_NAME]. </notification> <notification name="VoiceCallGenericError"> - Ha ocurrido un error intentando conectarle al [VOICE_CHANNEL_NAME]. Por favor, inténtelo más tarde. + Se ha producido un error al intentar conectarte al [VOICE_CHANNEL_NAME]. Por favor, inténtalo más tarde. </notification> <notification name="ServerVersionChanged"> Acabas de entrar en una región que usa un servidor con una versión distinta, y esto puede influir en el funcionamiento. [[URL] Ver las notas de desarrollo]. @@ -2557,7 +2548,7 @@ Por tu seguridad, serán bloqueadas durante unos segundos. </notification> <notification name="ConfirmCloseAll"> ¿Seguro que quieres cerrar todos los MI? - <usetemplate name="okcancelignore" notext="Cancelar" yestext="OK"/> + <usetemplate ignoretext="Confirmar antes de cerrar todos los MIs" name="okcancelignore" notext="Cancelar" yestext="OK"/> </notification> <notification name="AttachmentSaved"> Se ha guardado el adjunto. @@ -2584,10 +2575,10 @@ Por tu seguridad, serán bloqueadas durante unos segundos. </notification> <notification name="BottomTrayButtonCanNotBeShown"> El botón elegido no se puede mostrar correctamente. -Se mostrará cuando tenga suficiente espacio. +Se mostrará cuando haya suficiente espacio. </notification> <global name="UnsupportedCPU"> - - La velocidad de su CPU no cumple los requerimientos mínimos. + - La velocidad de tu CPU no cumple los requerimientos mínimos. </global> <global name="UnsupportedGLRequirements"> Parece que no tienes el hardware apropiado para [APP_NAME]. [APP_NAME] requiere una tarjeta gráfica OpenGL que admita texturas múltiples ('multitexture support'). Si la tienes, comprueba que tienes los últimos 'drivers' para tu tarjeta gráfica, así como los últimos parches y 'service packs' para tu sistema operativo. @@ -2601,10 +2592,10 @@ Si los problemas persisten, por favor, acude a [SUPPORT_SITE]. 510 </global> <global name="UnsupportedGPU"> - - Su tarjeta gráfica no cumple los requerimientos mínimos. + - Tu tarjeta gráfica no cumple los requerimientos mínimos. </global> <global name="UnsupportedRAM"> - - La memoria de su sistema no cumple los requerimientos mínimos. + - La memoria de tu sistema no cumple los requerimientos mínimos. </global> <global name="You can only set your 'Home Location' on your land or at a mainland Infohub."> Si posees un terreno, puedes hacerlo tu Base. diff --git a/indra/newview/skins/default/xui/es/panel_classified_info.xml b/indra/newview/skins/default/xui/es/panel_classified_info.xml index d46eadde48..35fe174970 100644 --- a/indra/newview/skins/default/xui/es/panel_classified_info.xml +++ b/indra/newview/skins/default/xui/es/panel_classified_info.xml @@ -3,16 +3,46 @@ <panel.string name="l$_price"> [PRICE] L$ </panel.string> + <panel.string name="click_through_text_fmt"> + [TELEPORT] teleportes, [MAP] mapa, [PROFILE] perfil + </panel.string> + <panel.string name="date_fmt"> + [day,datetime,slt]/[mthnum,datetime,slt]/[year,datetime,slt] + </panel.string> + <panel.string name="auto_renew_on"> + Activada + </panel.string> + <panel.string name="auto_renew_off"> + Desactivada + </panel.string> <text name="title" value="Información del clasificado"/> <scroll_container name="profile_scroll"> <panel name="scroll_content_panel"> - <text_editor name="classified_name" value="[nombre]"/> - <text_editor name="classified_location" value="[cargando...]"/> - <text_editor name="content_type" value="[tipo de contenido]"/> - <text_editor name="category" value="[categoría]"/> - <check_box label="Renovar automáticamente cada semana" name="auto_renew"/> - <text_editor name="price_for_listing" tool_tip="Precio por publicarlo."/> - <text_editor name="classified_desc" value="[descripción]"/> + <text_editor name="classified_name" value="[name]"/> + <text name="classified_location_label" value="Localización:"/> + <text_editor name="classified_location" value="[loading...]"/> + <text name="content_type_label" value="Tipo de contenido:"/> + <text_editor name="content_type" value="[content type]"/> + <text name="category_label" value="Categoría:"/> + <text_editor name="category" value="[category]"/> + <text name="creation_date_label" value="Fecha de creación:"/> + <text_editor name="creation_date" tool_tip="Fecha de creación" value="[date]"/> + <text name="price_for_listing_label" value="Precio por publicarlo:"/> + <text_editor name="price_for_listing" tool_tip="Precio por publicarlo." value="[price]"/> + <layout_stack name="descr_stack"> + <layout_panel name="clickthrough_layout_panel"> + <text name="click_through_label" value="Clics:"/> + <text_editor name="click_through_text" tool_tip="Información sobre Click through" value="[clicks]"/> + </layout_panel> + <layout_panel name="price_layout_panel"> + <text name="auto_renew_label" value="Renovación:"/> + <text name="auto_renew" value="Activada"/> + </layout_panel> + <layout_panel name="descr_layout_panel"> + <text name="classified_desc_label" value="Descripción:"/> + <text_editor name="classified_desc" value="[description]"/> + </layout_panel> + </layout_stack> </panel> </scroll_container> <panel name="buttons"> diff --git a/indra/newview/skins/default/xui/es/panel_edit_classified.xml b/indra/newview/skins/default/xui/es/panel_edit_classified.xml index e612104b3f..7afa50c0a2 100644 --- a/indra/newview/skins/default/xui/es/panel_edit_classified.xml +++ b/indra/newview/skins/default/xui/es/panel_edit_classified.xml @@ -3,12 +3,20 @@ <panel.string name="location_notice"> (se actualizará tras guardarlo) </panel.string> + <string name="publish_label"> + Publicar + </string> + <string name="save_label"> + Guardar + </string> <text name="title"> Editar el clasificado </text> <scroll_container name="profile_scroll"> <panel name="scroll_content_panel"> - <icon label="" name="edit_icon" tool_tip="Pulsa para elegir una imagen"/> + <panel name="snapshot_panel"> + <icon label="" name="edit_icon" tool_tip="Pulsa para elegir una imagen"/> + </panel> <text name="Name:"> Título: </text> @@ -22,12 +30,19 @@ cargando... </text> <button label="Configurarlo en esta localización" name="set_to_curr_location_btn"/> + <text name="category_label" value="Categoría:"/> + <text name="content_type_label" value="Tipo de contenido:"/> + <icons_combo_box label="Contenido general" name="content_type"> + <icons_combo_box.item label="Contenido moderado" name="mature_ci" value="Moderado"/> + <icons_combo_box.item label="Contenido general" name="pg_ci" value="General"/> + </icons_combo_box> + <text name="price_for_listing_label" value="Precio por publicarlo:"/> <spinner label="L$" name="price_for_listing" tool_tip="Precio por publicarlo." value="50"/> <check_box label="Renovar automáticamente cada semana" name="auto_renew"/> </panel> </scroll_container> <panel label="bottom_panel" name="bottom_panel"> - <button label="Guardar" name="save_changes_btn"/> + <button label="[LABEL]" name="save_changes_btn"/> <button label="Cancelar" name="cancel_btn"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/es/panel_edit_pick.xml b/indra/newview/skins/default/xui/es/panel_edit_pick.xml index 839e9c6023..bde29f1665 100644 --- a/indra/newview/skins/default/xui/es/panel_edit_pick.xml +++ b/indra/newview/skins/default/xui/es/panel_edit_pick.xml @@ -1,5 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Editar el destacado" name="panel_edit_pick"> + <panel.string name="location_notice"> + (se actualizará tras guardarlo) + </panel.string> <text name="title"> Editar el destacado </text> @@ -22,7 +25,7 @@ </panel> </scroll_container> <panel label="bottom_panel" name="bottom_panel"> - <button label="Guardar [WHAT]" name="save_changes_btn"/> + <button label="Guardar el destacado" name="save_changes_btn"/> <button label="Cancelar" name="cancel_btn"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/es/panel_im_control_panel.xml b/indra/newview/skins/default/xui/es/panel_im_control_panel.xml index c3d5b017ad..7d4db6a630 100644 --- a/indra/newview/skins/default/xui/es/panel_im_control_panel.xml +++ b/indra/newview/skins/default/xui/es/panel_im_control_panel.xml @@ -13,7 +13,7 @@ <layout_panel name="share_btn_panel"> <button label="Compartir" name="share_btn"/> </layout_panel> - <layout_panel name="share_btn_panel"> + <layout_panel name="pay_btn_panel"> <button label="Pagar" name="pay_btn"/> </layout_panel> <layout_panel name="call_btn_panel"> diff --git a/indra/newview/skins/default/xui/es/panel_login.xml b/indra/newview/skins/default/xui/es/panel_login.xml index 1a7040d01f..0e4f118605 100644 --- a/indra/newview/skins/default/xui/es/panel_login.xml +++ b/indra/newview/skins/default/xui/es/panel_login.xml @@ -24,7 +24,7 @@ Empezar en: </text> <combo_box name="start_location_combo"> - <combo_box.item label="Mi última localización" name="MyLastLocation"/> + <combo_box.item label="Mi última posición" name="MyLastLocation"/> <combo_box.item label="Mi Base" name="MyHome"/> </combo_box> <button label="Iniciar sesión" name="connect_btn"/> diff --git a/indra/newview/skins/default/xui/es/panel_main_inventory.xml b/indra/newview/skins/default/xui/es/panel_main_inventory.xml index 8656098467..3a1e96a821 100644 --- a/indra/newview/skins/default/xui/es/panel_main_inventory.xml +++ b/indra/newview/skins/default/xui/es/panel_main_inventory.xml @@ -1,18 +1,14 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Cosas" name="main inventory panel"> - <panel.string name="Title"> - Cosas + <panel.string name="ItemcountFetching"> + Obtenidos [ITEM_COUNT] ítems... [FILTER] </panel.string> - <filter_editor label="Filtrar" name="inventory search editor"/> - <tab_container name="inventory filter tabs"> - <inventory_panel label="Todos los ítems" name="All Items"/> - <inventory_panel label="Ítems recientes" name="Recent Items"/> - </tab_container> - <panel name="bottom_panel"> - <button name="options_gear_btn" tool_tip="Mostrar más opciones"/> - <button name="add_btn" tool_tip="Añadir un ítem nuevo"/> - <dnd_button name="trash_btn" tool_tip="Quitar el ítem seleccionado"/> - </panel> + <panel.string name="ItemcountCompleted"> + [ITEM_COUNT] ítems [FILTER] + </panel.string> + <text name="ItemcountText"> + Ítems: + </text> <menu_bar name="Inventory Menu"> <menu label="Archivo" name="File"> <menu_item_call label="Abrir" name="Open"/> @@ -61,4 +57,14 @@ <menu_item_check label="Las carpetas del sistema, arriba" name="System Folders To Top"/> </menu> </menu_bar> + <filter_editor label="Filtrar" name="inventory search editor"/> + <tab_container name="inventory filter tabs"> + <inventory_panel label="Todos los ítems" name="All Items"/> + <inventory_panel label="Ítems recientes" name="Recent Items"/> + </tab_container> + <panel name="bottom_panel"> + <button name="options_gear_btn" tool_tip="Mostrar más opciones"/> + <button name="add_btn" tool_tip="Añadir un ítem nuevo"/> + <dnd_button name="trash_btn" tool_tip="Quitar el ítem seleccionado"/> + </panel> </panel> diff --git a/indra/newview/skins/default/xui/es/panel_nearby_media.xml b/indra/newview/skins/default/xui/es/panel_nearby_media.xml index 885c780e00..9bd90572d7 100644 --- a/indra/newview/skins/default/xui/es/panel_nearby_media.xml +++ b/indra/newview/skins/default/xui/es/panel_nearby_media.xml @@ -19,10 +19,17 @@ <button label="Más >>" label_selected="Menos <<" name="more_less_btn" tool_tip="Controles avanzados"/> </panel> <panel name="nearby_media_panel"> + <text name="nearby_media"> + Media cercanos + </text> + <text name="show"> + Mostrar: + </text> <combo_box name="show_combo"> <combo_box.item label="Todo" name="All"/> <combo_box.item label="En esta parcela" name="WithinParcel"/> <combo_box.item label="Fuera de la parcela" name="OutsideParcel"/> + <combo_box.item label="En otros avatares" name="OnOthers"/> </combo_box> <scroll_list name="media_list"> <scroll_list.columns label="Cercanía" name="media_proximity"/> @@ -31,7 +38,7 @@ <scroll_list.columns label="Nombre" name="media_name"/> <scroll_list.columns label="Depurar" name="media_debug"/> </scroll_list> - <panel> + <panel name="media_controls_panel"> <layout_stack name="media_controls"> <layout_panel name="stop"> <button name="stop_btn" tool_tip="Parar los media seleccionados"/> diff --git a/indra/newview/skins/default/xui/es/panel_people.xml b/indra/newview/skins/default/xui/es/panel_people.xml index 03c449da93..6008c6a934 100644 --- a/indra/newview/skins/default/xui/es/panel_people.xml +++ b/indra/newview/skins/default/xui/es/panel_people.xml @@ -7,9 +7,11 @@ <string name="no_friends" value="No hay amigos"/> <string name="people_filter_label" value="Filtrar a la gente"/> <string name="groups_filter_label" value="Filtrar a los grupos"/> + <string name="no_filtered_groups_msg" value="[secondlife:///app/search/groups Intenta encontrar el grupo con una búsqueda]"/> + <string name="no_groups_msg" value="[secondlife:///app/search/groups Intenta encontrar grupos a los que unirte.]"/> <filter_editor label="Filtrar" name="filter_input"/> <tab_container name="tabs"> - <panel label="CERCANÍA" name="nearby_panel"> + <panel label="CERCANA" name="nearby_panel"> <panel label="bottom_panel" name="bottom_panel"> <button name="nearby_view_sort_btn" tool_tip="Opciones"/> <button name="add_friend_btn" tool_tip="Añadir al Residente seleccionado a la lista de tus amigos"/> @@ -18,7 +20,7 @@ <panel label="MIS AMIGOS" name="friends_panel"> <accordion name="friends_accordion"> <accordion_tab name="tab_online" title="Conectado"/> - <accordion_tab name="tab_all" title="Todas"/> + <accordion_tab name="tab_all" title="Todos"/> </accordion> <panel label="bottom_panel" name="bottom_panel"> <button name="friends_viewsort_btn" tool_tip="Opciones"/> diff --git a/indra/newview/skins/default/xui/es/panel_place_profile.xml b/indra/newview/skins/default/xui/es/panel_place_profile.xml index 2c873ef464..6fe7895d45 100644 --- a/indra/newview/skins/default/xui/es/panel_place_profile.xml +++ b/indra/newview/skins/default/xui/es/panel_place_profile.xml @@ -70,10 +70,17 @@ <accordion_tab name="region_information_tab" title="Región"> <panel name="region_information_panel"> <text name="region_name_label" value="Región:"/> + <text name="region_name" value="Mooseland"/> <text name="region_type_label" value="Tipo:"/> + <text name="region_type" value="Moose"/> <text name="region_rating_label" value="Calificación:"/> + <text name="region_rating" value="Adulto"/> <text name="region_owner_label" value="Propietario:"/> + <text name="region_owner" value="moose Van Moose"/> <text name="region_group_label" value="Grupo:"/> + <text name="region_group"> + The Mighty Moose of mooseville soundvillemoose + </text> <button label="Región/Estado" name="region_info_btn"/> </panel> </accordion_tab> diff --git a/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml index add854932d..a7c13b05b6 100644 --- a/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml @@ -3,6 +3,9 @@ <panel.string name="aspect_ratio_text"> [NUM]:[DEN] </panel.string> + <panel.string name="middle_mouse"> + Botón medio del ratón + </panel.string> <slider label="Ángulo de visión" name="camera_fov"/> <slider label="Distancia" name="camera_offset_scale"/> <text name="heading2"> @@ -14,7 +17,7 @@ <check_box label="Las teclas del cursor siempre para moverme" name="arrow_keys_move_avatar_check"/> <check_box label="Correr siempre: atajo de teclado" name="tap_tap_hold_to_run"/> <check_box label="Al hablar, mover los labios del avatar" name="enable_lip_sync"/> - <check_box label="Bocadillos del chat" name="bubble_text_chat"/> + <check_box label="Chat en bocadillos" name="bubble_text_chat"/> <slider label="Opacidad" name="bubble_chat_opacity"/> <color_swatch name="background" tool_tip="Elegir el color de los bocadillos del chat"/> <check_box label="Mostrar los errores de los scripts en:" name="show_script_errors"/> diff --git a/indra/newview/skins/default/xui/es/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/es/panel_preferences_alerts.xml index 0ccc307039..f34edf149e 100644 --- a/indra/newview/skins/default/xui/es/panel_preferences_alerts.xml +++ b/indra/newview/skins/default/xui/es/panel_preferences_alerts.xml @@ -4,7 +4,7 @@ Avisarme: </text> <check_box label="Cuando gaste o consiga L$" name="notify_money_change_checkbox"/> - <check_box label="Cuando mis amigos se conectan o desconectan" name="friends_online_notify_checkbox"/> + <check_box label="Cuando mis amigos se conecten o desconecten" name="friends_online_notify_checkbox"/> <text name="show_label" width="300"> Mostrar siempre: </text> diff --git a/indra/newview/skins/default/xui/es/panel_preferences_chat.xml b/indra/newview/skins/default/xui/es/panel_preferences_chat.xml index 17e3b45beb..46d8984889 100644 --- a/indra/newview/skins/default/xui/es/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/es/panel_preferences_chat.xml @@ -1,15 +1,15 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Chat de texto" name="chat"> <text name="font_size"> - Font size: + Tamaño de la fuente: </text> <radio_group name="chat_font_size"> <radio_item label="Disminuir" name="radio" value="0"/> - <radio_item label="Media" name="radio2" value="1"/> + <radio_item label="Medio" name="radio2" value="1"/> <radio_item label="Aumentar" name="radio3" value="2"/> </radio_group> <text name="font_colors"> - Font colors: + Colores de la fuente: </text> <color_swatch label="Usted" name="user"/> <text name="text_box1"> @@ -45,6 +45,12 @@ </text> <check_box initial_value="true" label="Ejecutar la animación de escribir al hacerlo en el chat" name="play_typing_animation"/> <check_box label="Cuando estoy desconectado, enviarme los MI al correo-e" name="send_im_to_email"/> + <text name="show_ims_in_label"> + Mostrar los MI en: + </text> + <text name="requires_restart_label"> + (requiere reiniciar) + </text> <radio_group name="chat_window" tool_tip="Muestra tus mensajes instantáneos en varias ventanas flotantes o en una sola con varias pestañas (requiere que reinicies)"> <radio_item label="Varias ventanas" name="radio" value="0"/> <radio_item label="Pestañas" name="radio2" value="1"/> diff --git a/indra/newview/skins/default/xui/es/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/es/panel_preferences_privacy.xml index 3632ecca7b..bf2c6b7aa6 100644 --- a/indra/newview/skins/default/xui/es/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/es/panel_preferences_privacy.xml @@ -18,7 +18,7 @@ <check_box label="Guardar en mi ordenador registros de los MI" name="log_instant_messages"/> <check_box label="Añadir fecha y hora" name="show_timestamps_check_im"/> <text name="log_path_desc"> - Localización de los registros: + Ruta de los registros: </text> <line_editor left="278" name="log_path_string" right="-20"/> <button label="Elegir" label_selected="Elegir" name="log_path_button" width="120"/> diff --git a/indra/newview/skins/default/xui/es/panel_preferences_setup.xml b/indra/newview/skins/default/xui/es/panel_preferences_setup.xml index 2465612a64..fe9736f758 100644 --- a/indra/newview/skins/default/xui/es/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/es/panel_preferences_setup.xml @@ -34,9 +34,12 @@ Web: </text> <radio_group name="use_external_browser"> - <radio_item label="Usar el navegador incorporado" name="internal" tool_tip="Usa el navegador incorporado para ayuda, enlaces web, etc. Este navegador se abre en una nueva ventana dentro de [APP_NAME]." value="0"/> <radio_item label="Usar mi navegador (IE, Firefox, Safari)" name="external" tool_tip="Usa tu navegador por defecto para ayuda, enlaces web, etc. No es aconsejable si estás a pantalla completa." value="1"/> + <radio_item label="Usar el navegador incorporado" name="internal" tool_tip="Usa el navegador incorporado para ayuda, enlaces web, etc. Este navegador se abre en una nueva ventana dentro de [APP_NAME]." value=""/> </radio_group> + <check_box initial_value="verdadero" label="Activar plugins" name="browser_plugins_enabled"/> + <check_box initial_value="verdadero" label="Aceptar las 'cookies'" name="cookies_enabled"/> + <check_box initial_value="verdadero" label="Activar Javascript" name="browser_javascript_enabled"/> <check_box initial_value="false" label="Activar web proxy" name="web_proxy_enabled"/> <text name="Proxy location"> Localización del proxy: diff --git a/indra/newview/skins/default/xui/es/panel_region_estate.xml b/indra/newview/skins/default/xui/es/panel_region_estate.xml index 53d05cf2c9..c51c3815d1 100644 --- a/indra/newview/skins/default/xui/es/panel_region_estate.xml +++ b/indra/newview/skins/default/xui/es/panel_region_estate.xml @@ -39,7 +39,7 @@ </string> <button label="?" name="abuse_email_address_help"/> <button label="Aplicar" name="apply_btn"/> - <button label="Echar usuarios del estado..." name="kick_user_from_estate_btn"/> + <button label="Expulsar a un Residente del Estado..." name="kick_user_from_estate_btn"/> <button label="Enviar un mensaje al estado..." name="message_estate_btn"/> <text name="estate_manager_label"> Administradores del estado: 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 ca8da6ccaf..54b60b276c 100644 --- a/indra/newview/skins/default/xui/es/panel_region_general.xml +++ b/indra/newview/skins/default/xui/es/panel_region_general.xml @@ -19,35 +19,26 @@ desconocido </text> <check_box label="No permitir modificar el terreno" name="block_terraform_check"/> - <button label="?" name="terraform_help"/> <check_box label="Prohibir volar" name="block_fly_check"/> - <button label="?" name="fly_help"/> <check_box label="Permitir el daño" name="allow_damage_check"/> - <button label="?" name="damage_help"/> <check_box label="Impedir los 'empujones'" name="restrict_pushobject"/> - <button label="?" name="restrict_pushobject_help"/> <check_box label="Permitir la reventa del terreno" name="allow_land_resell_check"/> - <button label="?" name="land_resell_help"/> <check_box label="Permitir unir/dividir el terreno" name="allow_parcel_changes_check"/> - <button label="?" name="parcel_changes_help"/> - <check_box label="Bloquear el mostrar el terreno en la búsqueda." name="block_parcel_search_check" tool_tip="Permitir que la gente vea esta región y sus parcelas en los resultados de la búsqueda."/> - <button label="?" name="parcel_search_help"/> - <spinner label="Nº máximo de avatares" name="agent_limit_spin" label_width="120" width="180"/> - <button label="?" name="agent_limit_help"/> - <spinner label="Plus de objetos" name="object_bonus_spin" label_width="120" width="180"/> - <button label="?" name="object_bonus_help"/> + <check_box label="Bloquear el mostrar el terreno en +la búsqueda." name="block_parcel_search_check" tool_tip="Permitir que la gente vea esta región y sus parcelas en los resultados de la búsqueda."/> + <spinner label="Nº máximo de avatares" label_width="120" name="agent_limit_spin" width="180"/> + <spinner label="Plus de objetos" label_width="120" name="object_bonus_spin" width="180"/> <text label="Calificación" name="access_text"> Calificación: </text> - <combo_box label="'Mature'" name="access_combo"> - <combo_box.item label="'Adult'" name="Adult"/> - <combo_box.item label="'Mature'" name="Mature"/> - <combo_box.item label="'PG'" name="PG"/> - </combo_box> - <button label="?" name="access_help"/> + <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="'PG'" name="PG" value="13"/> + </icons_combo_box> <button label="Aplicar" name="apply_btn"/> - <button label="Teleportar a su Base a un usuario..." name="kick_btn"/> - <button label="Teleportar a su Base a todos los usuarios..." name="kick_all_btn"/> - <button label="Enviar un mensaje a toda la región..." name="im_btn" width="250" /> + <button label="Teleportar a su Base a un Residente..." name="kick_btn"/> + <button label="Teleportar a sus Bases a todos los Residentes..." name="kick_all_btn"/> + <button label="Enviar un mensaje a toda la región..." name="im_btn" width="250"/> <button label="Administrar el Punto de Teleporte..." name="manage_telehub_btn" width="210"/> </panel> diff --git a/indra/newview/skins/default/xui/es/panel_region_general_layout.xml b/indra/newview/skins/default/xui/es/panel_region_general_layout.xml index 89ad5549c8..9ff88e2f79 100644 --- a/indra/newview/skins/default/xui/es/panel_region_general_layout.xml +++ b/indra/newview/skins/default/xui/es/panel_region_general_layout.xml @@ -36,8 +36,8 @@ <combo_box.item label="General" name="PG"/> </combo_box> <button label="Aplicar" name="apply_btn"/> - <button label="Teleportar a su Base a un usuario..." name="kick_btn"/> - <button label="Teleportar a sus Bases a todos los usuarios..." name="kick_all_btn"/> + <button label="Teleportar a su Base a un Residente..." name="kick_btn"/> + <button label="Teleportar a sus Bases a todos los Residentes..." name="kick_all_btn"/> <button label="Enviar un mensaje a toda la región..." name="im_btn"/> <button label="Administrar el Punto de Teleporte..." name="manage_telehub_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/es/panel_region_texture.xml b/indra/newview/skins/default/xui/es/panel_region_texture.xml index 83c22d20eb..047e8f2f30 100644 --- a/indra/newview/skins/default/xui/es/panel_region_texture.xml +++ b/indra/newview/skins/default/xui/es/panel_region_texture.xml @@ -25,16 +25,16 @@ Rangos de la elevación de la textura </text> <text name="height_text_lbl6"> - Suroeste + Noroeste </text> <text name="height_text_lbl7"> - Noroeste + Noreste </text> <text name="height_text_lbl8"> - Sureste + Suroeste </text> <text name="height_text_lbl9"> - Noreste + Sureste </text> <spinner label="Baja" name="height_start_spin_0"/> <spinner label="Baja" name="height_start_spin_1"/> diff --git a/indra/newview/skins/default/xui/es/panel_status_bar.xml b/indra/newview/skins/default/xui/es/panel_status_bar.xml index d4404fd9b5..1afa68106e 100644 --- a/indra/newview/skins/default/xui/es/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/es/panel_status_bar.xml @@ -22,7 +22,7 @@ [AMT] L$ </panel.string> <button label="" label_selected="" name="buycurrency" tool_tip="Mi saldo"/> - <button label="Comprar L$" name="buyL" tool_tip="Pulsa para comprar más L$"/> + <button label="Comprar" name="buyL" tool_tip="Pulsa para comprar más L$"/> <text name="TimeText" tool_tip="Hora actual (Pacífico)"> 24:00 AM PST </text> diff --git a/indra/newview/skins/default/xui/es/sidepanel_task_info.xml b/indra/newview/skins/default/xui/es/sidepanel_task_info.xml index 0cd3b40ca6..f40813d3c9 100644 --- a/indra/newview/skins/default/xui/es/sidepanel_task_info.xml +++ b/indra/newview/skins/default/xui/es/sidepanel_task_info.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="object properties" title="Perfil del objeto"> <panel.string name="text deed continued"> - Transfeir + Transferir </panel.string> <panel.string name="text deed"> - Transfeir + Transferir </panel.string> <panel.string name="text modify info 1"> Puedes modificar este objeto @@ -38,16 +38,41 @@ </panel.string> <text name="title" value="Perfil del objeto"/> <text name="where" value="(en el mundo)"/> - <panel label=""> + <panel label="" name="properties_panel"> + <text name="Name:"> + Nombre: + </text> + <text name="Description:"> + Descripción: + </text> <text name="CreatorNameLabel"> Creador: </text> <text name="Creator Name"> Erica Linden </text> + <text name="Owner:"> + Propietario: + </text> + <text name="Owner Name"> + Erica Linden + </text> <text name="Group_label"> Grupo: </text> + <button name="button set group" tool_tip="Elige un grupo con el que compartir los permisos de este objeto"/> + <name_box initial_value="Cargando..." name="Group Name Proxy"/> + <button label="Transferir" label_selected="Transferir" name="button deed" tool_tip="La transferencia entrega este objeto con los permisos del próximo propietario. Los objetos compartidos por el grupo pueden ser transferidos por un oficial del grupo."/> + <text name="label click action"> + Pulsa para: + </text> + <combo_box name="clickaction"> + <combo_box.item label="Tocarlo (por defecto)" name="Touch/grab(default)"/> + <combo_box.item label="Sentarme en el objeto" name="Sitonobject"/> + <combo_box.item label="Comprar el objeto" name="Buyobject"/> + <combo_box.item label="Pagar el objeto" name="Payobject"/> + <combo_box.item label="Abrir" name="Open"/> + </combo_box> <panel name="perms_inv"> <text name="perm_modify"> Puedes modificar este objeto @@ -55,20 +80,27 @@ <text name="Anyone can:"> Cualquiera: </text> - <check_box label="Copiarlo" name="checkbox allow everyone copy"/> - <check_box label="Moverlo" name="checkbox allow everyone move"/> + <check_box label="Copiar" name="checkbox allow everyone copy"/> + <check_box label="Mover" name="checkbox allow everyone move"/> <text name="GroupLabel"> Grupo: </text> - <check_box label="Compartir" name="checkbox share with group" tool_tip="Permite que todos los miembros del grupo compartan tus permisos de modificación en este objeto. Debes transferirlo para activar las restricciones según los roles."/> + <check_box label="Compartir" name="checkbox share with group" tool_tip="Permite que todos los miembros del grupo compartan tus permisos de modificación de este objeto. Debes transferirlo para activar las restricciones según los roles."/> <text name="NextOwnerLabel"> Próximo propietario: </text> - <check_box label="Modificarlo" name="checkbox next owner can modify"/> - <check_box label="Copiarlo" name="checkbox next owner can copy"/> - <check_box label="Transferirlo" name="checkbox next owner can transfer" tool_tip="El próximo propietario puede dar o revender este objeto"/> + <check_box label="Modificar" name="checkbox next owner can modify"/> + <check_box label="Copiar" name="checkbox next owner can copy"/> + <check_box label="Transferir" name="checkbox next owner can transfer" tool_tip="El próximo propietario puede dar o revender este objeto"/> </panel> <check_box label="En venta" name="checkbox for sale"/> + <combo_box name="sale type"> + <combo_box.item label="Copiar" name="Copy"/> + <combo_box.item label="Contenidos" name="Contents"/> + <combo_box.item label="Original" name="Original"/> + </combo_box> + <spinner label="Precio: L$" name="Edit Cost"/> + <check_box label="Mostrar en la búsqueda" name="search_check" tool_tip="Permitir que la gente vea este objeto en los resultados de la búsqueda"/> <text name="B:"> B: </text> @@ -92,5 +124,6 @@ <button label="Abrir" name="open_btn"/> <button label="Pagar" name="pay_btn"/> <button label="Comprar" name="buy_btn"/> + <button label="Detalles" name="details_btn"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/es/strings.xml b/indra/newview/skins/default/xui/es/strings.xml index 619094bbfa..a8fc7f6b58 100644 --- a/indra/newview/skins/default/xui/es/strings.xml +++ b/indra/newview/skins/default/xui/es/strings.xml @@ -14,7 +14,22 @@ Identificando el hardware... </string> <string name="StartupLoading"> - Cargando + Instalando [APP_NAME]... + </string> + <string name="StartupClearingCache"> + Limpiando la caché... + </string> + <string name="StartupInitializingTextureCache"> + Iniciando la caché de las texturas... + </string> + <string name="StartupInitializingVFS"> + Iniciando VFS... + </string> + <string name="ProgressRestoring"> + Restaurando... + </string> + <string name="ProgressChangingResolution"> + Cambiando la resolución... </string> <string name="LoginInProgress"> Iniciando la sesión. [APP_NAME] debe de aparecer congelado. Por favor, espere. @@ -76,6 +91,9 @@ <string name="LoginFailedNoNetwork"> Error de red: no se ha podido conectar; por favor, revisa tu conexión a internet. </string> + <string name="LoginFailed"> + Error en el inicio de sesión. + </string> <string name="Quit"> Salir </string> @@ -83,7 +101,25 @@ http://join.secondlife.com/index.php?lang=es-ES </string> <string name="AgentLostConnection"> - Esta región puede estar teniendo problemas. Por favor, compruebe su conexión a internet. + Esta región puede estar teniendo problemas. Por favor, comprueba tu conexión a internet. + </string> + <string name="SavingSettings"> + Guardando tus configuraciones... + </string> + <string name="LoggingOut"> + Cerrando sesión... + </string> + <string name="ShuttingDown"> + Cerrando... + </string> + <string name="YouHaveBeenDisconnected"> + Has sido desconectado de la región en la que estabas. + </string> + <string name="SentToInvalidRegion"> + Has sido enviado a una región no válida. + </string> + <string name="TestingDisconnect"> + Probando la desconexión del visor </string> <string name="TooltipPerson"> Persona @@ -139,6 +175,24 @@ <string name="TooltipAgentUrl"> Pulsa para ver el perfil del Residente </string> + <string name="TooltipAgentMute"> + Pulsa para silenciar a este Residente + </string> + <string name="TooltipAgentUnmute"> + Pulsa para quitar el silencio a este Residente + </string> + <string name="TooltipAgentIM"> + Pulsa para enviar un MI a este Residente + </string> + <string name="TooltipAgentPay"> + Pulsa para pagar a este Residente + </string> + <string name="TooltipAgentOfferTeleport"> + Pulsa para enviar una petición de teleporte a este Residente + </string> + <string name="TooltipAgentRequestFriend"> + Pulsa para enviar una petición de amistad a este Residente + </string> <string name="TooltipGroupUrl"> Pulsa para ver la descripción de este grupo </string> @@ -164,12 +218,31 @@ Pulsa para ejecutar el comando secondlife:// </string> <string name="CurrentURL" value="URL actual: [CurrentURL]"/> + <string name="TooltipPrice" value="[PRICE] L$"/> <string name="SLurlLabelTeleport"> Teleportarse a </string> <string name="SLurlLabelShowOnMap"> Mostrarla en el mapa </string> + <string name="SLappAgentMute"> + Silenciar + </string> + <string name="SLappAgentUnmute"> + Quitar el silencio + </string> + <string name="SLappAgentIM"> + MI + </string> + <string name="SLappAgentPay"> + Pagar + </string> + <string name="SLappAgentOfferTeleport"> + Ofrecer teleporte a + </string> + <string name="SLappAgentRequestFriend"> + Petición de amistad + </string> <string name="BUTTON_CLOSE_DARWIN"> Cerrar (⌘W) </string> @@ -320,6 +393,9 @@ <string name="symbolic link"> el enlace </string> + <string name="symbolic folder link"> + enlace de la carpeta + </string> <string name="AvatarAway"> Ausente </string> @@ -737,6 +813,9 @@ <string name="invalid"> inválido/a </string> + <string name="NewWearable"> + Nuevo [WEARABLE_ITEM] + </string> <string name="next"> Siguiente </string> @@ -768,7 +847,7 @@ Ofrecimiento de teleporte </string> <string name="StartUpNotifications"> - Llegaron [%d] avisos nuevos mientras estabas ausente... + Llegaron avisos nuevos mientras estabas ausente... </string> <string name="OverflowInfoChannelString"> Tienes [%d] aviso/s más @@ -825,6 +904,7 @@ No hay contenido </string> <string name="WornOnAttachmentPoint" value="(lo llevas en: [ATTACHMENT_POINT])"/> + <string name="ActiveGesture" value="[GESLABEL] (activo)"/> <string name="Chat" value="Chat :"/> <string name="Sound" value="Sonido :"/> <string name="Wait" value="--- Espera :"/> @@ -892,7 +972,7 @@ Partes del cuerpo </string> <string name="InvFolder Trash"> - la Papelera + Papelera </string> <string name="InvFolder Photo Album"> Álbum de fotos @@ -918,6 +998,9 @@ <string name="InvFolder My Outfits"> Mis vestuarios </string> + <string name="InvFolder Accessories"> + Accesorios + </string> <string name="InvFolder Friends"> Amigos </string> @@ -1435,6 +1518,12 @@ <string name="PanelContentsNewScript"> Script nuevo </string> + <string name="PanelContentsTooltip"> + Contenido del objeto + </string> + <string name="BusyModeResponseDefault"> + El Residente al que has enviado un mensaje ha solicitado que no se le moleste porque está en modo ocupado. Podrá ver tu mensaje más adelante, ya que éste aparecerá en su panel de MI. + </string> <string name="MuteByName"> (por el nombre) </string> @@ -1549,7 +1638,10 @@ Cancelar </string> <string name="UploadingCosts"> - Subir este/a [%s] cuesta + Subir [NAME] cuesta [AMOUNT] L$ + </string> + <string name="BuyingCosts"> + Comprar esto cuesta [AMOUNT] L$ </string> <string name="UnknownFileExtension"> Extensión de archivo desconocida [.%s] @@ -1828,7 +1920,7 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE]. Cortos </string> <string name="Attached Earlobes"> - Lóbulos cortos + Lóbulos </string> <string name="Back Fringe"> Nuca: largo @@ -2998,7 +3090,7 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE]. Sweep Forward </string> <string name="Tall"> - Alta + Más </string> <string name="Taper Back"> Cubierta trasera @@ -3100,7 +3192,7 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE]. Pelo blanco </string> <string name="Wide"> - Ancho + Aumentar </string> <string name="Wide Back"> Completa @@ -3267,4 +3359,120 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE]. <string name="unread_chat_multiple"> [SOURCES] ha dicho algo nuevo </string> + <string name="paid_you_ldollars"> + [NAME] te ha pagado [AMOUNT] L$ + </string> + <string name="you_paid_ldollars"> + Has pagado [AMOUNT] L$ a [NAME] por [REASON]. + </string> + <string name="you_paid_ldollars_no_reason"> + Has pagado [AMOUNT] L$ a [NAME]. + </string> + <string name="you_paid_ldollars_no_name"> + Has pagado [AMOUNT] L$ por [REASON]. + </string> + <string name="for a parcel of land"> + para una parcela de terreno + </string> + <string name="for a land access pass"> + para un pase de acceso a terrenos + </string> + <string name="for deeding land"> + for deeding land + </string> + <string name="to create a group"> + para crear un grupo + </string> + <string name="to join a group"> + para entrar a un grupo + </string> + <string name="to upload"> + to upload + </string> + <string name="giving"> + Dando [AMOUNT] L$ + </string> + <string name="uploading_costs"> + Subir esto cuesta [AMOUNT] L$ + </string> + <string name="this_costs"> + Esto cuesta [AMOUNT] L$ + </string> + <string name="buying_selected_land"> + Compra del terreno seleccionado por [AMOUNT] L$ + </string> + <string name="this_object_costs"> + Este objeto cuesta [AMOUNT] L$ + </string> + <string name="group_role_everyone"> + Todos + </string> + <string name="group_role_officers"> + Oficiales + </string> + <string name="group_role_owners"> + Propietarios + </string> + <string name="uploading_abuse_report"> + Subiendo... + +Denuncia de infracción + </string> + <string name="New Shape"> + Anatomía nueva + </string> + <string name="New Skin"> + Piel nueva + </string> + <string name="New Hair"> + Pelo nuevo + </string> + <string name="New Eyes"> + Ojos nuevos + </string> + <string name="New Shirt"> + Camisa nueva + </string> + <string name="New Pants"> + Pantalón nuevo + </string> + <string name="New Shoes"> + Zapatos nuevos + </string> + <string name="New Socks"> + Calcetines nuevos + </string> + <string name="New Jacket"> + Chaqueta nueva + </string> + <string name="New Gloves"> + Guantes nuevos + </string> + <string name="New Undershirt"> + Camiseta nueva + </string> + <string name="New Underpants"> + Ropa interior nueva + </string> + <string name="New Skirt"> + Falda nueva + </string> + <string name="New Alpha"> + Nueva Alfa + </string> + <string name="New Tattoo"> + Tatuaje nuevo + </string> + <string name="Invalid Wearable"> + No se puede poner + </string> + <string name="New Script"> + Script nuevo + </string> + <string name="New Folder"> + Carpeta nueva + </string> + <string name="Contents"> + Contenidos + </string> </strings> diff --git a/indra/newview/skins/default/xui/es/teleport_strings.xml b/indra/newview/skins/default/xui/es/teleport_strings.xml index 0a605277f2..7e7ed6202f 100644 --- a/indra/newview/skins/default/xui/es/teleport_strings.xml +++ b/indra/newview/skins/default/xui/es/teleport_strings.xml @@ -60,6 +60,9 @@ Vuelva a intentarlo en un momento. <message name="completing"> Completando el teleporte. </message> + <message name="completed_from"> + Teleporte realizado desde [T_SLURL] + </message> <message name="resolving"> Especificando el destino. </message> diff --git a/indra/newview/skins/default/xui/fr/floater_about_land.xml b/indra/newview/skins/default/xui/fr/floater_about_land.xml index b5acd6299a..5d630cdf48 100644 --- a/indra/newview/skins/default/xui/fr/floater_about_land.xml +++ b/indra/newview/skins/default/xui/fr/floater_about_land.xml @@ -324,18 +324,18 @@ Seules les parcelles de grande taille peuvent apparaître dans la recherche. <text name="allow_label2"> Construire : </text> - <check_box label="Tous" left="285" name="edit objects check"/> - <check_box label="Groupe" left="395" name="edit group objects check"/> + <check_box label="Tous" name="edit objects check"/> + <check_box label="Groupe" name="edit group objects check"/> <text name="allow_label3"> Laisser entrer des objets : </text> - <check_box label="Tous" left="285" name="all object entry check"/> - <check_box label="Groupe" left="395" name="group object entry check"/> + <check_box label="Tous" name="all object entry check"/> + <check_box label="Groupe" name="group object entry check"/> <text name="allow_label4"> Exécuter des scripts : </text> - <check_box label="Tous" left="285" name="check other scripts"/> - <check_box label="Groupe" left="395" name="check group scripts"/> + <check_box label="Tous" name="check other scripts"/> + <check_box label="Groupe" name="check group scripts"/> <text name="land_options_label"> Options du terrain : </text> @@ -400,7 +400,7 @@ Seules les parcelles de grande taille peuvent apparaître dans la recherche. Page d'accueil : </text> <line_editor left="97" name="media_url"/> - <button label="Choisir" label_selected="Définir..." name="set_media_url"/> + <button label="Choisir" name="set_media_url"/> <check_box label="Masquer l'URL" left="97" name="hide_media_url" tool_tip="Si vous cochez cette option, les personnes non autorisées à accéder aux infos de cette parcelle ne verront pas l'URL du média. Cette option n'est pas disponible pour les fichiers HTML."/> <text name="Description:"> Description : @@ -449,6 +449,9 @@ musique : <panel.string name="access_estate_defined"> (défini par le domaine </panel.string> + <panel.string name="allow_public_access"> + Autoriser l'accès public ([MATURITY]) + </panel.string> <panel.string name="estate_override"> Au moins une de ces options est définie au niveau du domaine. </panel.string> diff --git a/indra/newview/skins/default/xui/fr/floater_bulk_perms.xml b/indra/newview/skins/default/xui/fr/floater_bulk_perms.xml index 241cf1af09..503fe5c154 100644 --- a/indra/newview/skins/default/xui/fr/floater_bulk_perms.xml +++ b/indra/newview/skins/default/xui/fr/floater_bulk_perms.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floaterbulkperms" title="MODIFIER LES DROITS RELATIFS AU CONTENU"> +<floater name="floaterbulkperms" title="MODIFIER LES DROITS"> <floater.string name="nothing_to_modify_text"> - La sélection contient des contenus non modifiables. + Certains contenus sont non modifiables. </floater.string> <floater.string name="status_text"> Droits paramétrés sur [NAME] diff --git a/indra/newview/skins/default/xui/fr/floater_buy_currency.xml b/indra/newview/skins/default/xui/fr/floater_buy_currency.xml index c7437c4603..4eaff8535e 100644 --- a/indra/newview/skins/default/xui/fr/floater_buy_currency.xml +++ b/indra/newview/skins/default/xui/fr/floater_buy_currency.xml @@ -4,7 +4,7 @@ Achetez [LINDENS] L$ pour environ [LOCALAMOUNT] </floater.string> <text left="5" name="info_need_more" right="-5"> - Vous avez besoin de plus de L$ + Plus de L$ sont requis </text> <text name="contacting"> En train de contacter @@ -38,7 +38,7 @@ le Lindex... Estimation en cours... </text> <text name="buy_action"> - [NAME] L$ [PRICE] + [ACTION] </text> <text name="total_label"> Mon nouveau solde sera de @@ -53,14 +53,14 @@ le Lindex... Saisissez à nouveau le montant pour voir le taux de change actuel. </text> <text name="purchase_warning_repurchase"> - La confirmation de cet achat n'achète que des L$, pas l'objet. + Confirmer cet achat n'achète que des L$, pas l'objet. </text> <text bottom_delta="16" name="purchase_warning_notenough"> Vous n'achetez pas assez de L$. Veuillez augmenter le montant. </text> <button label="Acheter" name="buy_btn"/> <button label="Annuler" name="cancel_btn"/> - <text left="5" name="info_cannot_buy" width="200" right="-5"> + <text left="5" name="info_cannot_buy" right="-5" width="200"> Achat impossible </text> <button label="Accéder au Web" name="error_web"/> diff --git a/indra/newview/skins/default/xui/fr/floater_color_picker.xml b/indra/newview/skins/default/xui/fr/floater_color_picker.xml index 8d7fe76b35..7ead543c78 100644 --- a/indra/newview/skins/default/xui/fr/floater_color_picker.xml +++ b/indra/newview/skins/default/xui/fr/floater_color_picker.xml @@ -26,6 +26,6 @@ Couleur actuelle : </text> <text left="8" name="(Drag below to save.)" width="220"> - (Faire glisser dessous pour enregistrer.) + Enreg. : faire glisser dessous </text> </floater> diff --git a/indra/newview/skins/default/xui/fr/floater_customize.xml b/indra/newview/skins/default/xui/fr/floater_customize.xml index 0343ff0014..d5ee070dcd 100644 --- a/indra/newview/skins/default/xui/fr/floater_customize.xml +++ b/indra/newview/skins/default/xui/fr/floater_customize.xml @@ -155,7 +155,7 @@ </text> <panel label="Chemise" name="Shirt"> <texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/> - <color_swatch label="Couleur/Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/> + <color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/> <button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/> <button label="Créer une chemise" label_selected="Créer une chemise" name="Create New"/> <button label="Enregistrer" label_selected="Enregistrer" left="100" name="Save" width="82"/> @@ -188,7 +188,7 @@ </panel> <panel label="Pantalon" name="Pants"> <texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/> - <color_swatch label="Couleur/Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/> + <color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/> <button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/> <button label="Créer un pantalon" label_selected="Créer un pantalon" name="Create New"/> <button label="Enregistrer" label_selected="Enregistrer" left="100" name="Save" width="82"/> @@ -246,7 +246,7 @@ Chaussures : </text> <texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/> - <color_swatch label="Couleur/Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/> + <color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/> <button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/> <button label="Enregistrer" label_selected="Enregistrer" left="100" name="Save" width="82"/> <button label="Enregistrer sous..." label_selected="Enregistrer sous..." left="188" name="Save As" width="111"/> @@ -279,7 +279,7 @@ Chaussettes : </text> <texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/> - <color_swatch label="Couleur/Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/> + <color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/> <button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/> <button label="Enregistrer" label_selected="Enregistrer" left="100" name="Save" width="82"/> <button label="Enregistrer sous..." label_selected="Enregistrer sous..." left="188" name="Save As" width="111"/> @@ -313,7 +313,7 @@ </text> <texture_picker label="Tissu (dessus)" name="Upper Fabric" tool_tip="Cliquez pour sélectionner une image" width="81"/> <texture_picker label="Tissu (dessous)" name="Lower Fabric" tool_tip="Cliquez pour sélectionner une image" width="81"/> - <color_swatch label="Couleur/Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="81"/> + <color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="81"/> <button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/> <button label="Enregistrer" label_selected="Enregistrer" left="100" name="Save" width="82"/> <button label="Enregistrer sous..." label_selected="Enregistrer sous..." left="188" name="Save As" width="111"/> @@ -346,7 +346,7 @@ Gants : </text> <texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/> - <color_swatch label="Couleur/Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/> + <color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/> <button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/> <button label="Enregistrer" label_selected="Enregistrer" left="100" name="Save" width="82"/> <button label="Enregistrer sous..." label_selected="Enregistrer sous..." left="188" name="Save As" width="111"/> @@ -379,7 +379,7 @@ Débardeur : </text> <texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/> - <color_swatch label="Couleur/Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/> + <color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/> <button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/> <button label="Enregistrer" label_selected="Enregistrer" left="100" name="Save" width="82"/> <button label="Enregistrer sous..." label_selected="Enregistrer sous..." left="188" name="Save As" width="111"/> @@ -412,7 +412,7 @@ Caleçon : </text> <texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/> - <color_swatch label="Couleur/Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/> + <color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/> <button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/> <button label="Enregistrer" label_selected="Enregistrer" left="100" name="Save" width="82"/> <button label="Enregistrer sous..." label_selected="Enregistrer sous..." left="188" name="Save As" width="111"/> @@ -445,7 +445,7 @@ Jupe : </text> <texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image" width="74"/> - <color_swatch label="Couleur/Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/> + <color_swatch label="Coul./Teinte" name="Color/Tint" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs" width="74"/> <button label="Enlever" label_selected="Enlever" left="12" name="Take Off" width="82"/> <button label="Enregistrer" label_selected="Enregistrer" left="100" name="Save" width="82"/> <button label="Enregistrer sous..." label_selected="Enregistrer sous..." left="188" name="Save As" width="111"/> diff --git a/indra/newview/skins/default/xui/fr/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/fr/floater_day_cycle_options.xml index 15cc6cd1ba..a381f64cd9 100644 --- a/indra/newview/skins/default/xui/fr/floater_day_cycle_options.xml +++ b/indra/newview/skins/default/xui/fr/floater_day_cycle_options.xml @@ -4,7 +4,7 @@ <panel label="Cycle du jour" name="Day Cycle"> <button label="?" name="WLDayCycleHelp" /> <text name="WL12am"> - Minuit + Min. </text> <text name="WL3am"> 3h @@ -28,7 +28,7 @@ 21h </text> <text name="WL12am2"> - Minuit + Min. </text> <text name="WL12amHash"> | @@ -84,7 +84,7 @@ <text name="DayCycleText3" left="280" width="200"> Prévisualiser : </text> - <button label="Jouer" label_selected="Jouer" name="WLAnimSky" left_delta="90"/> + <button label="Lire" label_selected="Lire" name="WLAnimSky" left_delta="90"/> <button label="Stop !" label_selected="Stop" name="WLStopAnimSky" /> <button label="Utiliser heure domaine" label_selected="Aller heure domaine" name="WLUseLindenTime" /> diff --git a/indra/newview/skins/default/xui/fr/floater_gesture.xml b/indra/newview/skins/default/xui/fr/floater_gesture.xml index 113df0acc4..1e0f5672a4 100644 --- a/indra/newview/skins/default/xui/fr/floater_gesture.xml +++ b/indra/newview/skins/default/xui/fr/floater_gesture.xml @@ -9,9 +9,9 @@ <floater.string name="copy_name"> Copie de [COPY_NAME] </floater.string> - <scroll_list bottom_delta="-385" height="360" name="gesture_list"> - <scroll_list.columns label="Nom" name="name" width="145"/> - <scroll_list.columns label="Chat" name="trigger" width="85"/> + <scroll_list name="gesture_list"> + <scroll_list.columns label="Nom" name="name"/> + <scroll_list.columns label="Chat" name="trigger"/> <scroll_list.columns label="" name="key"/> <scroll_list.columns label="Touche" name="shortcut"/> </scroll_list> 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 f83000cf87..fd569a7f95 100644 --- a/indra/newview/skins/default/xui/fr/floater_perm_prefs.xml +++ b/indra/newview/skins/default/xui/fr/floater_perm_prefs.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="perm prefs" title="PERMISSIONS DE CHARGEMENT PAR DÉFAUT"> +<floater name="perm prefs" title="DROITS DE CHARGEMENT PAR DÉFAUT"> <panel label="Droits" name="permissions"> <button label="?" label_selected="?" name="help"/> <check_box label="Partager avec le groupe" name="share_with_group"/> diff --git a/indra/newview/skins/default/xui/fr/floater_tools.xml b/indra/newview/skins/default/xui/fr/floater_tools.xml index 40765b9e06..1d9d395960 100644 --- a/indra/newview/skins/default/xui/fr/floater_tools.xml +++ b/indra/newview/skins/default/xui/fr/floater_tools.xml @@ -61,7 +61,7 @@ <radio_item label="Bouger" name="radio position"/> <radio_item label="Pivoter (Ctrl)" name="radio rotate"/> <radio_item label="Étirer (Ctrl+Maj)" name="radio stretch"/> - <radio_item label="Sélectionner une face" name="radio select face"/> + <radio_item label="Choisir une face" name="radio select face"/> </radio_group> <check_box label="Modification liée" name="checkbox edit linked parts"/> <text name="RenderingCost" tool_tip="Affiche le coût du rendu calculé pour cet objet"> @@ -96,7 +96,7 @@ <check_box initial_value="true" label="Centrer" name="checkbox copy centers"/> <check_box label="Pivoter" name="checkbox copy rotates"/> <radio_group name="land_radio_group"> - <radio_item label="Sélectionner le terrain" name="radio select land"/> + <radio_item label="Choisir le terrain" name="radio select land"/> <radio_item label="Aplatir" name="radio flatten"/> <radio_item label="Élever" name="radio raise"/> <radio_item label="Abaisser" name="radio lower"/> @@ -280,7 +280,7 @@ <combo_box.item label="Caoutchouc" name="Rubber"/> </combo_box> <text name="text cut"> - Découpe du tracé (début/fin) + Découpe du tracé (déb./fin) </text> <spinner label="D" name="cut begin"/> <spinner label="F" name="cut end"/> @@ -339,8 +339,8 @@ <text name="text revolutions"> Révolutions </text> - <texture_picker label="Texture du sculptie" name="sculpt texture control" tool_tip="Cliquez pour sélectionner une image"/> - <check_box label="Mirroir" name="sculpt mirror control" tool_tip="Inverse le sculptie le long de l'axe X"/> + <texture_picker label="Texture de la sculptie" name="sculpt texture control" tool_tip="Cliquez pour sélectionner une image"/> + <check_box label="Mirroir" name="sculpt mirror control" tool_tip="Inverse la sculptie le long de l'axe X"/> <check_box label="A l'envers" name="sculpt invert control" tool_tip="Inverse les normales des sculpties, qui apparaissent alors à l'envers"/> <text name="label sculpt type"> Type de raccord @@ -355,7 +355,7 @@ </panel> <panel label="Attributs" name="Features"> <text name="select_single"> - Sélectionnez un prim pour modifier les attributs. + Choisir une prim pour changer les attributs. </text> <text name="edit_object"> Modifier les attributs de l'objet : diff --git a/indra/newview/skins/default/xui/fr/floater_tos.xml b/indra/newview/skins/default/xui/fr/floater_tos.xml index 2c8e8bc5bc..cdfd26f402 100644 --- a/indra/newview/skins/default/xui/fr/floater_tos.xml +++ b/indra/newview/skins/default/xui/fr/floater_tos.xml @@ -9,9 +9,9 @@ <text name="tos_title"> Acceptation des Conditions Générales d'Utilisation </text> - <check_box label="J'accepte les Conditions d'utilisation" name="agree_chk"/> + <check_box label="J'accepte les Conditions d'utilisation et le Règlement sur le respect de la vie privée" name="agree_chk"/> <text name="tos_heading"> - Veuillez lire attentivement les Conditions d'utilisation suivantes. Pour vous connecter à [SECOND_LIFE], vous devez accepter l'accord. + Veuillez lire attentivement les Conditions d'utilisation et le Règlement sur le respect de la vie privée suivants. Vous devez les accepter pour pouvoir vous connecter à [SECOND_LIFE]. </text> <text_editor name="tos_text"> TOS_TEXT diff --git a/indra/newview/skins/default/xui/fr/floater_water.xml b/indra/newview/skins/default/xui/fr/floater_water.xml index 6d697b40d3..96723b0fe6 100644 --- a/indra/newview/skins/default/xui/fr/floater_water.xml +++ b/indra/newview/skins/default/xui/fr/floater_water.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Water Floater" title="ÉDITEUR D'EAU AVANCÉE"> +<floater name="Water Floater" title="ÉDITEUR D'EAU AVANCÉ"> <floater.string name="WLDefaultWaterNames"> Default:Glassy:Pond:Murky:Second Plague:SNAKE!!!:Valdez </floater.string> <text name="KeyFramePresetsText" width="120"> - Préréglages eau : + Préréglages : </text> <button label="Nouveau" label_selected="Nouveau" name="WaterNewPreset"/> <button label="Enregistrer" label_selected="Enregistrer" left_delta="75" name="WaterSavePreset" width="75"/> @@ -34,7 +34,7 @@ Décalage Fresnel </text> <text name="DensMultText"> - Réfraction au dessus + Réfraction au-dessus </text> <text name="WaterScaleBelowText"> Réfraction en dessous diff --git a/indra/newview/skins/default/xui/fr/floater_windlight_options.xml b/indra/newview/skins/default/xui/fr/floater_windlight_options.xml index 9f93302b71..74f1697449 100644 --- a/indra/newview/skins/default/xui/fr/floater_windlight_options.xml +++ b/indra/newview/skins/default/xui/fr/floater_windlight_options.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="WindLight floater" title="ÉDITEUR DE CIEL AVANCÉ" width="706"> <text name="KeyFramePresetsText"> - Préréglages ciel : + Préréglages : </text> <button label="Nouveau" label_selected="Nouveau" name="WLNewPreset"/> <button label="Enregistrer" label_selected="Enregistrer" left_delta="75" name="WLSavePreset" width="75"/> diff --git a/indra/newview/skins/default/xui/fr/floater_world_map.xml b/indra/newview/skins/default/xui/fr/floater_world_map.xml index f8e1926586..4d500857ea 100644 --- a/indra/newview/skins/default/xui/fr/floater_world_map.xml +++ b/indra/newview/skins/default/xui/fr/floater_world_map.xml @@ -20,7 +20,7 @@ Vente de terrains </text> <text name="by_owner_label"> - par le propriétaire + propriétaire </text> <text name="auction_label"> enchères diff --git a/indra/newview/skins/default/xui/fr/menu_avatar_self.xml b/indra/newview/skins/default/xui/fr/menu_avatar_self.xml index e370e8d3b8..c8643708da 100644 --- a/indra/newview/skins/default/xui/fr/menu_avatar_self.xml +++ b/indra/newview/skins/default/xui/fr/menu_avatar_self.xml @@ -10,8 +10,8 @@ <menu_item_call label="Chaussettes" name="Socks"/> <menu_item_call label="Veste" name="Jacket"/> <menu_item_call label="Gants" name="Gloves"/> - <menu_item_call label="Sous-vêtements (homme)" name="Self Undershirt"/> - <menu_item_call label="Sous-vêtements (femme)" name="Self Underpants"/> + <menu_item_call label="Débardeur" name="Self Undershirt"/> + <menu_item_call label="Caleçon" name="Self Underpants"/> <menu_item_call label="Tatouage" name="Self Tattoo"/> <menu_item_call label="Alpha" name="Self Alpha"/> <menu_item_call label="Tous les habits" name="All Clothes"/> diff --git a/indra/newview/skins/default/xui/fr/menu_inventory_add.xml b/indra/newview/skins/default/xui/fr/menu_inventory_add.xml index 0e5abdad0a..57b0a768c2 100644 --- a/indra/newview/skins/default/xui/fr/menu_inventory_add.xml +++ b/indra/newview/skins/default/xui/fr/menu_inventory_add.xml @@ -18,8 +18,8 @@ <menu_item_call label="Nouvelle veste" name="New Jacket"/> <menu_item_call label="Nouvelle jupe" name="New Skirt"/> <menu_item_call label="Nouveaux gants" name="New Gloves"/> - <menu_item_call label="Nouveaux sous-vêtements (homme)" name="New Undershirt"/> - <menu_item_call label="Nouveaux sous-vêtements (femme)" name="New Underpants"/> + <menu_item_call label="Nouveau débardeur" name="New Undershirt"/> + <menu_item_call label="Nouveau caleçon" name="New Underpants"/> <menu_item_call label="Nouvel alpha" name="New Alpha"/> <menu_item_call label="Nouveau tatouage" name="New Tattoo"/> </menu> diff --git a/indra/newview/skins/default/xui/fr/menu_profile_overflow.xml b/indra/newview/skins/default/xui/fr/menu_profile_overflow.xml index 58bd16064a..ddf898b791 100644 --- a/indra/newview/skins/default/xui/fr/menu_profile_overflow.xml +++ b/indra/newview/skins/default/xui/fr/menu_profile_overflow.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <toggleable_menu name="profile_overflow_menu"> + <menu_item_call label="Carte" name="show_on_map"/> <menu_item_call label="Payer" name="pay"/> <menu_item_call label="Partager" name="share"/> <menu_item_call label="Ignorer" name="block"/> diff --git a/indra/newview/skins/default/xui/fr/menu_viewer.xml b/indra/newview/skins/default/xui/fr/menu_viewer.xml index 5925d28565..b8a3b65101 100644 --- a/indra/newview/skins/default/xui/fr/menu_viewer.xml +++ b/indra/newview/skins/default/xui/fr/menu_viewer.xml @@ -276,7 +276,7 @@ <menu_item_check label="Atlas des textures" name="Texture Atlas"/> <menu_item_check label="Rendu des lumières jointes" name="Render Attached Lights"/> <menu_item_check label="Rendu des particules jointes" name="Render Attached Particles"/> - <menu_item_check label="Hover Glow Objects" name="Hover Glow Objects"/> + <menu_item_check label="Objets en surbrillance avec le pointeur" name="Hover Glow Objects"/> </menu> <menu label="Réseau" name="Network"> <menu_item_check label="Pauser l'avatar" name="AgentPause"/> @@ -296,7 +296,7 @@ <menu_item_call label="Arrêter l'enregistrement" name="Stop Record"/> </menu> <menu label="Monde" name="World"> - <menu_item_check label="Sim Sun Override" name="Sim Sun Override"/> + <menu_item_check label="Ignorer les paramètres du soleil de la sim" name="Sim Sun Override"/> <menu_item_check label="Balise animée" name="Cheesy Beacon"/> <menu_item_check label="Météo fixe" name="Fixed Weather"/> <menu_item_call label="Dump Region Object Cache" name="Dump Region Object Cache"/> @@ -369,14 +369,14 @@ <menu label="Admin" name="Admin"> <menu label="Object"> <menu_item_call label="Prendre une copie" name="Take Copy"/> - <menu_item_call label="Forcer le propriétaire sur moi" name="Force Owner To Me"/> + <menu_item_call label="Téléporter le propriétaire" name="Force Owner To Me"/> <menu_item_call label="Forcer la permission du propriétaire" name="Force Owner Permissive"/> <menu_item_call label="Supprimer" name="Delete"/> <menu_item_call label="Verrouiller" name="Lock"/> <menu_item_call label="Obtenir les ID d'actifs" name="Get Assets IDs"/> </menu> <menu label="Parcelle" name="Parcel"> - <menu_item_call label="Forcer le propriétaire sur moi" name="Owner To Me"/> + <menu_item_call label="Téléporter le propriétaire" name="Owner To Me"/> <menu_item_call label="Définir sur le contenu Linden" name="Set to Linden Content"/> <menu_item_call label="Réclamer un terrain public" name="Claim Public Land"/> </menu> @@ -396,8 +396,8 @@ <menu_item_call label="Chaussettes" name="Socks"/> <menu_item_call label="Veste" name="Jacket"/> <menu_item_call label="Gants" name="Gloves"/> - <menu_item_call label="Sous-vêtements (homme)" name="Menu Undershirt"/> - <menu_item_call label="Sous-vêtements (femme)" name="Menu Underpants"/> + <menu_item_call label="Débardeur" name="Menu Undershirt"/> + <menu_item_call label="Caleçon" name="Menu Underpants"/> <menu_item_call label="Jupe" name="Skirt"/> <menu_item_call label="Alpha" name="Alpha"/> <menu_item_call label="Tatouage" name="Tattoo"/> diff --git a/indra/newview/skins/default/xui/fr/mime_types_linux.xml b/indra/newview/skins/default/xui/fr/mime_types_linux.xml index fc5e7ad659..3a7ff979ee 100644 --- a/indra/newview/skins/default/xui/fr/mime_types_linux.xml +++ b/indra/newview/skins/default/xui/fr/mime_types_linux.xml @@ -41,7 +41,7 @@ Cette parcelle propose du contenu audio </tooltip> <playtip name="audio_playtip"> - Jouer le contenu audio qui se trouve ici + Lire le contenu audio qui se trouve ici </playtip> </widgetset> <scheme name="rtsp"> diff --git a/indra/newview/skins/default/xui/fr/mime_types_mac.xml b/indra/newview/skins/default/xui/fr/mime_types_mac.xml index fc5e7ad659..3a7ff979ee 100644 --- a/indra/newview/skins/default/xui/fr/mime_types_mac.xml +++ b/indra/newview/skins/default/xui/fr/mime_types_mac.xml @@ -41,7 +41,7 @@ Cette parcelle propose du contenu audio </tooltip> <playtip name="audio_playtip"> - Jouer le contenu audio qui se trouve ici + Lire le contenu audio qui se trouve ici </playtip> </widgetset> <scheme name="rtsp"> diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml index 0fb609d653..38c6b57f5c 100644 --- a/indra/newview/skins/default/xui/fr/notifications.xml +++ b/indra/newview/skins/default/xui/fr/notifications.xml @@ -178,7 +178,7 @@ Voulez-vous continuer ? <notification name="JoinGroupNoCost"> Vous vous apprêtez à rejoindre le groupe [NAME]. Voulez-vous continuer ? - <usetemplate name="okcancelbuttons" notext="Annuler" yestext="Fusionner"/> + <usetemplate name="okcancelbuttons" notext="Annuler" yestext="Rejoindre"/> </notification> <notification name="JoinGroupCannotAfford"> Rejoindre ce groupe coûte [COST] L$. diff --git a/indra/newview/skins/default/xui/fr/panel_classified_info.xml b/indra/newview/skins/default/xui/fr/panel_classified_info.xml index c6aae57c2d..e4aecfdfc0 100644 --- a/indra/newview/skins/default/xui/fr/panel_classified_info.xml +++ b/indra/newview/skins/default/xui/fr/panel_classified_info.xml @@ -34,11 +34,11 @@ <text name="creation_date_label" value="Date de création :"/> <text_editor name="creation_date" tool_tip="Date de création" value="[date]"/> <text name="price_for_listing_label" value="Coût de l'annonce :"/> - <text_editor name="price_for_listing" tool_tip="Coût de l'annonce." value="[prix]"/> + <text_editor name="price_for_listing" tool_tip="Coût de l'annonce." value="[price]"/> <layout_stack name="descr_stack"> <layout_panel name="clickthrough_layout_panel"> <text name="click_through_label" value="Clics :"/> - <text_editor name="click_through_text" tool_tip="Parcourir les données en cliquant" value="[clics]"/> + <text_editor name="click_through_text" tool_tip="Parcourir les données en cliquant" value="[clicks]"/> </layout_panel> <layout_panel name="price_layout_panel"> <text name="auto_renew_label" value="Renouv. auto :"/> diff --git a/indra/newview/skins/default/xui/fr/panel_edit_gloves.xml b/indra/newview/skins/default/xui/fr/panel_edit_gloves.xml index 73e136ade6..b1a437497d 100644 --- a/indra/newview/skins/default/xui/fr/panel_edit_gloves.xml +++ b/indra/newview/skins/default/xui/fr/panel_edit_gloves.xml @@ -2,7 +2,7 @@ <panel name="edit_gloves_panel"> <panel name="avatar_gloves_color_panel"> <texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image"/> - <color_swatch label="Couleur/Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/> + <color_swatch label="Coul./Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/> </panel> <accordion name="wearable_accordion"> <accordion_tab name="gloves_main_tab" title="Gants"/> diff --git a/indra/newview/skins/default/xui/fr/panel_edit_jacket.xml b/indra/newview/skins/default/xui/fr/panel_edit_jacket.xml index cee44eb795..b757f60b18 100644 --- a/indra/newview/skins/default/xui/fr/panel_edit_jacket.xml +++ b/indra/newview/skins/default/xui/fr/panel_edit_jacket.xml @@ -3,7 +3,7 @@ <panel name="avatar_jacket_color_panel"> <texture_picker label="Tissu (haut)" name="Upper Fabric" tool_tip="Cliquez pour sélectionner une image"/> <texture_picker label="Tissu (bas)" name="Lower Fabric" tool_tip="Cliquez pour sélectionner une image"/> - <color_swatch label="Couleur/Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/> + <color_swatch label="Coul./Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/> </panel> <accordion name="wearable_accordion"> <accordion_tab name="jacket_main_tab" title="Veste"/> diff --git a/indra/newview/skins/default/xui/fr/panel_edit_pants.xml b/indra/newview/skins/default/xui/fr/panel_edit_pants.xml index 71d82c817f..0cebe1e76a 100644 --- a/indra/newview/skins/default/xui/fr/panel_edit_pants.xml +++ b/indra/newview/skins/default/xui/fr/panel_edit_pants.xml @@ -2,7 +2,7 @@ <panel name="edit_pants_panel"> <panel name="avatar_pants_color_panel"> <texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image"/> - <color_swatch label="Couleur/Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/> + <color_swatch label="Coul./Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/> </panel> <accordion name="wearable_accordion"> <accordion_tab name="pants_main_tab" title="Pantalon"/> diff --git a/indra/newview/skins/default/xui/fr/panel_edit_pick.xml b/indra/newview/skins/default/xui/fr/panel_edit_pick.xml index f234529764..0bbcbe833f 100644 --- a/indra/newview/skins/default/xui/fr/panel_edit_pick.xml +++ b/indra/newview/skins/default/xui/fr/panel_edit_pick.xml @@ -1,5 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Modifier la préférence" name="panel_edit_pick"> + <panel.string name="location_notice"> + (mise à jour après enregistrement) + </panel.string> <text name="title"> Modifier la préférence </text> @@ -22,7 +25,7 @@ </panel> </scroll_container> <panel label="bottom_panel" name="bottom_panel"> - <button label="Enregistrer [WHAT]" name="save_changes_btn"/> + <button label="Enregistrer" name="save_changes_btn"/> <button label="Annuler" name="cancel_btn"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_edit_profile.xml b/indra/newview/skins/default/xui/fr/panel_edit_profile.xml index 7c8365fdee..4be12054df 100644 --- a/indra/newview/skins/default/xui/fr/panel_edit_profile.xml +++ b/indra/newview/skins/default/xui/fr/panel_edit_profile.xml @@ -40,7 +40,7 @@ Page d'accueil : </text> <line_editor name="homepage_edit" value="http://"/> - <check_box label="Afficher dans les résultats de recherche" name="show_in_search_checkbox"/> + <check_box label="Afficher avec la recherche" name="show_in_search_checkbox"/> <text name="title_acc_status_text" value="Mon compte :"/> <text_editor name="acc_status_text" value="Résident. Aucune info de paiement enregistrée."/> <text name="my_account_link" value="[[URL] Accéder à ma Page d'accueil]"/> diff --git a/indra/newview/skins/default/xui/fr/panel_edit_shirt.xml b/indra/newview/skins/default/xui/fr/panel_edit_shirt.xml index cf28cd8c1e..d6035415d8 100644 --- a/indra/newview/skins/default/xui/fr/panel_edit_shirt.xml +++ b/indra/newview/skins/default/xui/fr/panel_edit_shirt.xml @@ -2,7 +2,7 @@ <panel name="edit_shirt_panel"> <panel name="avatar_shirt_color_panel"> <texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image"/> - <color_swatch label="Couleur/Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/> + <color_swatch label="Coul./Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/> </panel> <accordion name="wearable_accordion"> <accordion_tab name="shirt_main_tab" title="Chemise"/> diff --git a/indra/newview/skins/default/xui/fr/panel_edit_shoes.xml b/indra/newview/skins/default/xui/fr/panel_edit_shoes.xml index a8e0910a15..ef6d72629c 100644 --- a/indra/newview/skins/default/xui/fr/panel_edit_shoes.xml +++ b/indra/newview/skins/default/xui/fr/panel_edit_shoes.xml @@ -2,7 +2,7 @@ <panel name="edit_shoes_panel"> <panel name="avatar_shoes_color_panel"> <texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image"/> - <color_swatch label="Couleur/Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/> + <color_swatch label="Coul./Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/> </panel> <accordion name="wearable_accordion"> <accordion_tab name="shoes_main_tab" title="Chaussures"/> diff --git a/indra/newview/skins/default/xui/fr/panel_edit_skirt.xml b/indra/newview/skins/default/xui/fr/panel_edit_skirt.xml index e9784b9510..1250c7819d 100644 --- a/indra/newview/skins/default/xui/fr/panel_edit_skirt.xml +++ b/indra/newview/skins/default/xui/fr/panel_edit_skirt.xml @@ -2,7 +2,7 @@ <panel name="edit_skirt_panel"> <panel name="avatar_skirt_color_panel"> <texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image"/> - <color_swatch label="Couleur/Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/> + <color_swatch label="Coul./Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/> </panel> <accordion name="wearable_accordion"> <accordion_tab name="skirt_main_tab" title="Jupe"/> diff --git a/indra/newview/skins/default/xui/fr/panel_edit_socks.xml b/indra/newview/skins/default/xui/fr/panel_edit_socks.xml index 6fc6a3dc77..bcd69b7dc5 100644 --- a/indra/newview/skins/default/xui/fr/panel_edit_socks.xml +++ b/indra/newview/skins/default/xui/fr/panel_edit_socks.xml @@ -2,7 +2,7 @@ <panel name="edit_socks_panel"> <panel name="avatar_socks_color_panel"> <texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image"/> - <color_swatch label="Couleur/Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/> + <color_swatch label="Coul./Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/> </panel> <accordion name="wearable_accordion"> <accordion_tab name="socks_main_tab" title="Chaussettes"/> diff --git a/indra/newview/skins/default/xui/fr/panel_edit_underpants.xml b/indra/newview/skins/default/xui/fr/panel_edit_underpants.xml index 90dcae18ec..dd2670bd75 100644 --- a/indra/newview/skins/default/xui/fr/panel_edit_underpants.xml +++ b/indra/newview/skins/default/xui/fr/panel_edit_underpants.xml @@ -2,7 +2,7 @@ <panel name="edit_underpants_panel"> <panel name="avatar_underpants_color_panel"> <texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image"/> - <color_swatch label="Couleur/Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/> + <color_swatch label="Coul./Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/> </panel> <accordion name="wearable_accordion"> <accordion_tab name="underpants_main_tab" title="Caleçon"/> diff --git a/indra/newview/skins/default/xui/fr/panel_edit_undershirt.xml b/indra/newview/skins/default/xui/fr/panel_edit_undershirt.xml index 950cdd7639..93a08f1189 100644 --- a/indra/newview/skins/default/xui/fr/panel_edit_undershirt.xml +++ b/indra/newview/skins/default/xui/fr/panel_edit_undershirt.xml @@ -2,7 +2,7 @@ <panel name="edit_undershirt_panel"> <panel name="avatar_undershirt_color_panel"> <texture_picker label="Tissu" name="Fabric" tool_tip="Cliquez pour sélectionner une image"/> - <color_swatch label="Couleur/Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/> + <color_swatch label="Coul./Teinte" name="Color/Tint" width="80" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/> </panel> <accordion name="wearable_accordion"> <accordion_tab name="undershirt_main_tab" title="Débardeur"/> diff --git a/indra/newview/skins/default/xui/fr/panel_edit_wearable.xml b/indra/newview/skins/default/xui/fr/panel_edit_wearable.xml index 75b6c044f6..1efc9b00a4 100644 --- a/indra/newview/skins/default/xui/fr/panel_edit_wearable.xml +++ b/indra/newview/skins/default/xui/fr/panel_edit_wearable.xml @@ -34,10 +34,10 @@ Modification des gants </string> <string name="edit_undershirt_title"> - Modification des sous-vêtements (homme) + Modification du débardeur </string> <string name="edit_underpants_title"> - Modification des sous-vêtements (femme) + Modification du caleçon </string> <string name="edit_alpha_title"> Modification du masque alpha @@ -79,10 +79,10 @@ Gants : </string> <string name="undershirt_desc_text"> - Sous-vêtements (homme) : + Débardeur : </string> <string name="underpants_desc_text"> - Sous-vêtements (femme) : + Caleçon : </string> <string name="alpha_desc_text"> Masque alpha : diff --git a/indra/newview/skins/default/xui/fr/panel_login.xml b/indra/newview/skins/default/xui/fr/panel_login.xml index 209a803e07..8569a544fa 100644 --- a/indra/newview/skins/default/xui/fr/panel_login.xml +++ b/indra/newview/skins/default/xui/fr/panel_login.xml @@ -21,7 +21,7 @@ </text> <check_box label="Enregistrer" name="remember_check"/> <text name="start_location_text"> - Commencer à : + Lieu de départ : </text> <combo_box name="start_location_combo" width="152"> <combo_box.item label="Dernier emplacement" name="MyLastLocation"/> diff --git a/indra/newview/skins/default/xui/fr/panel_main_inventory.xml b/indra/newview/skins/default/xui/fr/panel_main_inventory.xml index 5faba01339..1a4450cccc 100644 --- a/indra/newview/skins/default/xui/fr/panel_main_inventory.xml +++ b/indra/newview/skins/default/xui/fr/panel_main_inventory.xml @@ -1,18 +1,14 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Choses" name="main inventory panel"> - <panel.string name="Title"> - Choses + <panel.string name="ItemcountFetching"> + Récupération de [ITEM_COUNT] objets... [FILTER] </panel.string> - <filter_editor label="Filtrer l'inventaire" name="inventory search editor"/> - <tab_container name="inventory filter tabs"> - <inventory_panel label="MON INVENTAIRE" name="All Items"/> - <inventory_panel label="RÉCENT" name="Recent Items"/> - </tab_container> - <panel name="bottom_panel"> - <button name="options_gear_btn" tool_tip="Afficher d'autres options"/> - <button name="add_btn" tool_tip="Ajouter un nouvel article"/> - <dnd_button name="trash_btn" tool_tip="Supprimer l'article sélectionné"/> - </panel> + <panel.string name="ItemcountCompleted"> + [ITEM_COUNT] objets [FILTER] + </panel.string> + <text name="ItemcountText"> + Objets : + </text> <menu_bar name="Inventory Menu"> <menu label="Fichier" name="File"> <menu_item_call label="Ouvrir" name="Open"/> @@ -61,4 +57,14 @@ <menu_item_check label="Dossiers système en premier" name="System Folders To Top"/> </menu> </menu_bar> + <filter_editor label="Filtrer l'inventaire" name="inventory search editor"/> + <tab_container name="inventory filter tabs"> + <inventory_panel label="MON INVENTAIRE" name="All Items"/> + <inventory_panel label="RÉCENT" name="Recent Items"/> + </tab_container> + <panel name="bottom_panel"> + <button name="options_gear_btn" tool_tip="Afficher d'autres options"/> + <button name="add_btn" tool_tip="Ajouter un nouvel article"/> + <dnd_button name="trash_btn" tool_tip="Supprimer l'article sélectionné"/> + </panel> </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_media_settings_general.xml b/indra/newview/skins/default/xui/fr/panel_media_settings_general.xml index afd2d9cd8f..e048e66810 100644 --- a/indra/newview/skins/default/xui/fr/panel_media_settings_general.xml +++ b/indra/newview/skins/default/xui/fr/panel_media_settings_general.xml @@ -8,7 +8,7 @@ </text> <line_editor name="home_url" tool_tip="La page d'accueil pour cette source média"/> <text name="preview_label"> - Prévisualiser + Aperçu </text> <text name="current_url_label"> Page actuelle : @@ -20,7 +20,7 @@ <check_box initial_value="false" label="Zoom auto" name="auto_zoom"/> <check_box initial_value="false" label="Lecture auto du média" name="auto_play"/> <text name="media_setting_note"> - Remarque : kes résidents peuvent ignorer ce paramètre + Remarque : les résidents peuvent ignorer ce paramètre </text> <check_box initial_value="false" label="Mise à l'échelle auto du média sur la face de l'objet" name="auto_scale"/> <text name="size_label"> diff --git a/indra/newview/skins/default/xui/fr/panel_media_settings_permissions.xml b/indra/newview/skins/default/xui/fr/panel_media_settings_permissions.xml index 6f6ae035a1..f456ee1c83 100644 --- a/indra/newview/skins/default/xui/fr/panel_media_settings_permissions.xml +++ b/indra/newview/skins/default/xui/fr/panel_media_settings_permissions.xml @@ -11,10 +11,10 @@ Mini </combo_item> </combo_box> - <check_box initial_value="false" label="Désactiver la navigation et l'interactivité" name="perms_owner_interact"/> + <check_box initial_value="false" label="Activer la navigation et l'interactivité" name="perms_owner_interact"/> <check_box initial_value="false" label="Afficher la barre de contrôles" name="perms_owner_control"/> - <check_box initial_value="false" label="Désactiver la navigation et l'interactivité" name="perms_group_interact"/> + <check_box initial_value="false" label="Activer la navigation et l'interactivité" name="perms_group_interact"/> <check_box initial_value="false" label="Afficher la barre de contrôles" name="perms_group_control"/> - <check_box initial_value="false" label="Désactiver la navigation et l'interactivité" name="perms_anyone_interact"/> + <check_box initial_value="false" label="Activer la navigation et l'interactivité" name="perms_anyone_interact"/> <check_box initial_value="false" label="Afficher la barre de contrôles" name="perms_anyone_control"/> </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_nearby_media.xml b/indra/newview/skins/default/xui/fr/panel_nearby_media.xml index a1c4c92618..ef5a42555e 100644 --- a/indra/newview/skins/default/xui/fr/panel_nearby_media.xml +++ b/indra/newview/skins/default/xui/fr/panel_nearby_media.xml @@ -14,15 +14,22 @@ </string> <panel name="minimized_controls"> <button label="Arrêter" name="all_nearby_media_disable_btn" tool_tip="Désactiver tous les médias près de vous"/> - <button label="Jouer" name="all_nearby_media_enable_btn" tool_tip="Activer tous les médias près de vous"/> + <button label="Lire" name="all_nearby_media_enable_btn" tool_tip="Activer tous les médias près de vous"/> <button name="open_prefs_btn" tool_tip="Ouvrir les préférences de média"/> <button label="Plus >>" label_selected="Moins <<" name="more_less_btn" tool_tip="Options avancées"/> </panel> <panel name="nearby_media_panel"> + <text name="nearby_media"> + Médias proches + </text> + <text name="show"> + Voir : + </text> <combo_box name="show_combo"> <combo_box.item label="Tout" name="All"/> - <combo_box.item label="Dans cette parcelle" name="WithinParcel"/> + <combo_box.item label="Sur cette parcelle" name="WithinParcel"/> <combo_box.item label="En dehors de la parcelle" name="OutsideParcel"/> + <combo_box.item label="Sur les autres avatars" name="OnOthers"/> </combo_box> <scroll_list name="media_list"> <scroll_list.columns label="Proximité" name="media_proximity"/> @@ -31,19 +38,19 @@ <scroll_list.columns label="Nom" name="media_name"/> <scroll_list.columns label="Débogage" name="media_debug"/> </scroll_list> - <panel> + <panel name="media_controls_panel"> <layout_stack name="media_controls"> <layout_panel name="stop"> <button name="stop_btn" tool_tip="Arrêter le média sélectionné"/> </layout_panel> <layout_panel name="play"> - <button name="play_btn" tool_tip="Jouer le média sélectionné"/> + <button name="play_btn" tool_tip="Lire le média sélectionné"/> </layout_panel> <layout_panel name="pause"> - <button name="pause_btn" tool_tip="Pauser le média sélectionné"/> + <button name="pause_btn" tool_tip="Suspendre la lecture du média sélectionné"/> </layout_panel> <layout_panel name="volume_slider_ctrl"> - <slider_bar initial_value="0.5" name="volume_slider" tool_tip="Volume audio pour le média sélectionné"/> + <slider_bar initial_value="0.5" name="volume_slider" tool_tip="Volume audio du média sélectionné"/> </layout_panel> <layout_panel name="mute"> <button name="mute_btn" tool_tip="Couper l'audio sur le média sélectionné"/> diff --git a/indra/newview/skins/default/xui/fr/panel_place_profile.xml b/indra/newview/skins/default/xui/fr/panel_place_profile.xml index f2bdb3d745..598e94166e 100644 --- a/indra/newview/skins/default/xui/fr/panel_place_profile.xml +++ b/indra/newview/skins/default/xui/fr/panel_place_profile.xml @@ -18,16 +18,16 @@ <string name="all_residents_text" value="Tous les résidents"/> <string name="group_text" value="Groupe"/> <string name="can_resell"> - Le terrain acheté dans cette région peut être revendu. + Le terrain acheté dans la région peut être revendu. </string> <string name="can_not_resell"> - Le terrain acheté dans cette région ne peut pas être revendu. + Le terrain acheté dans la région ne peut pas être revendu. </string> <string name="can_change"> - Le terrain acheté dans cette région peut être fusionné ou divisé. + Le terrain acheté dans la région peut être fusionné ou divisé. </string> <string name="can_not_change"> - Le terrain acheté dans cette région ne peut pas être fusionné ou divisé. + Le terrain acheté dans la région ne peut être fusionné ou divisé. </string> <string name="server_update_text"> Les informations sur le lieu ne sont pas disponibles sans mise à jour du serveur. diff --git a/indra/newview/skins/default/xui/fr/panel_places.xml b/indra/newview/skins/default/xui/fr/panel_places.xml index f0c40d7e92..92b0a6c1db 100644 --- a/indra/newview/skins/default/xui/fr/panel_places.xml +++ b/indra/newview/skins/default/xui/fr/panel_places.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Lieux" name="places panel"> <string name="landmarks_tab_title" value="MES REPÈRES"/> - <string name="teleport_history_tab_title" value="HISTORIQUE DES TÉLÉPORTATIONS"/> + <string name="teleport_history_tab_title" value="HISTORIQUE DES TÉLÉP."/> <filter_editor label="Filtrer les endroits" name="Filter"/> <panel name="button_panel"> <button label="Téléporter" name="teleport_btn" tool_tip="Me téléporter jusqu'à la zone sélectionnée"/> diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml index b47ed4bd8b..f8ecfbedac 100644 --- a/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml @@ -3,6 +3,9 @@ <panel.string name="aspect_ratio_text"> [NUM]:[DEN] </panel.string> + <panel.string name="middle_mouse"> + Bouton central de la souris + </panel.string> <slider label="Angle de vue" name="camera_fov"/> <slider label="Distance" name="camera_offset_scale"/> <text name="heading2"> diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml b/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml index 7e6e96aa49..64635fbac0 100644 --- a/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml @@ -46,6 +46,12 @@ <check_box initial_value="true" label="Jouer l'animation clavier quand vous écrivez" name="play_typing_animation"/> <check_box label="M'envoyer les IM par e-mail une fois déconnecté" name="send_im_to_email"/> <check_box label="Activer l'historique des chats en texte brut" name="plain_text_chat_history"/> + <text name="show_ims_in_label"> + Afficher les IM dans : + </text> + <text name="requires_restart_label"> + (redémarrage requis) + </text> <radio_group name="chat_window" tool_tip="Afficher vos messages instantanés dans plusieurs fenêtres ou dans une seule fenêtre avec plusieurs onglets (redémarrage requis)"> <radio_item label="Plusieurs fenêtres" name="radio" value="0"/> <radio_item label="Onglets" name="radio2" value="1"/> diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml b/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml index ecea368c54..eae49e7810 100644 --- a/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml @@ -34,9 +34,12 @@ Web : </text> <radio_group name="use_external_browser"> - <radio_item label="Utiliser le navigateur intégré" name="internal" tool_tip="Utilisez le navigateur intégré pour obtenir de l'aide, ouvrir des liens, etc. Ce navigateur s'ouvre dans [APP_NAME]." value="0"/> <radio_item label="Utiliser mon navigateur (IE, Firefox, Safari)" name="external" tool_tip="Utiliser le navigateur web système par défaut pour l'aide, les liens etc. Non recommandé en mode plein écran." value="1"/> + <radio_item label="Utiliser le navigateur intégré" name="internal" tool_tip="Utilisez le navigateur intégré pour obtenir de l'aide, ouvrir des liens, etc. Ce navigateur s'ouvre dans [APP_NAME]." value=""/> </radio_group> + <check_box initial_value="true" label="Activer les plugins" name="browser_plugins_enabled"/> + <check_box initial_value="true" label="Accepter les cookies" name="cookies_enabled"/> + <check_box initial_value="true" label="Activer Javascript" name="browser_javascript_enabled"/> <check_box initial_value="false" label="Activer le proxy Web" name="web_proxy_enabled"/> <text name="Proxy location"> Emplacement du proxy : diff --git a/indra/newview/skins/default/xui/fr/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/fr/panel_prim_media_controls.xml index c7ab31c4b3..f6b9bdcb81 100644 --- a/indra/newview/skins/default/xui/fr/panel_prim_media_controls.xml +++ b/indra/newview/skins/default/xui/fr/panel_prim_media_controls.xml @@ -31,7 +31,7 @@ <button name="stop_btn" tool_tip="Arrêter le chargement"/> </layout_panel> <layout_panel name="play"> - <button name="play_btn" tool_tip="Jouer le média"/> + <button name="play_btn" tool_tip="Lire le média"/> </layout_panel> <layout_panel name="pause"> <button name="pause_btn" tool_tip="Pauser le média"/> diff --git a/indra/newview/skins/default/xui/fr/panel_profile.xml b/indra/newview/skins/default/xui/fr/panel_profile.xml index 8cb4641937..f801aee312 100644 --- a/indra/newview/skins/default/xui/fr/panel_profile.xml +++ b/indra/newview/skins/default/xui/fr/panel_profile.xml @@ -42,8 +42,8 @@ </layout_panel> <layout_panel name="profile_buttons_panel"> <button label="Devenir amis" name="add_friend" tool_tip="Proposer à un résident de devenir votre ami"/> - <button label="IM" name="im" tool_tip="Ouvrir une session IM" width="30"/> - <button label="Appeler" name="call" tool_tip="Appeler ce résident" width="60"/> + <button label="IM" name="im" tool_tip="Ouvrir une session IM"/> + <button label="Appeler" name="call" tool_tip="Appeler ce résident"/> <button label="Carte" name="show_on_map_btn" tool_tip="Afficher le résident sur la carte"/> <button label="Téléporter" name="teleport" tool_tip="Proposez une téléportation"/> <button label="▼" name="overflow_btn" tool_tip="Payer ou partager l'inventaire avec le résident"/> diff --git a/indra/newview/skins/default/xui/fr/panel_region_covenant.xml b/indra/newview/skins/default/xui/fr/panel_region_covenant.xml index cd1d0c4886..a30306d116 100644 --- a/indra/newview/skins/default/xui/fr/panel_region_covenant.xml +++ b/indra/newview/skins/default/xui/fr/panel_region_covenant.xml @@ -70,13 +70,12 @@ toutes les parcelles du domaine. Le terrain acheté dans cette région peut être revendu. </string> <string name="can_not_resell"> - Le terrain acheté dans cette région ne peut pas être revendu. + Le terrain acheté dans la région ne peut pas être revendu. </string> <string name="can_change"> - Le terrain acheté dans cette région peut être fusionné ou divisé. + Le terrain acheté dans la région peut être fusionné ou divisé. </string> <string name="can_not_change"> - Le terrain acheté dans cette région ne peut pas être fusionné ou -divisé. + Le terrain acheté dans la région ne peut être fusionné ou divisé. </string> </panel> diff --git a/indra/newview/skins/default/xui/fr/sidepanel_task_info.xml b/indra/newview/skins/default/xui/fr/sidepanel_task_info.xml index cc99b1a07c..c8e76118a1 100644 --- a/indra/newview/skins/default/xui/fr/sidepanel_task_info.xml +++ b/indra/newview/skins/default/xui/fr/sidepanel_task_info.xml @@ -100,7 +100,7 @@ <combo_box.item label="Original" name="Original"/> </combo_box> <spinner label="Prix : L$" name="Edit Cost"/> - <check_box label="Afficher dans les résultats de recherche" name="search_check" tool_tip="Permettre aux autres résidents de voir cet objet dans les résultats de recherche"/> + <check_box label="Afficher avec la recherche" name="search_check" tool_tip="Permettre aux autres résidents de voir cet objet dans les résultats de recherche"/> <text name="B:"> B : </text> diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml index c031762d4b..0ea11bb80f 100644 --- a/indra/newview/skins/default/xui/fr/strings.xml +++ b/indra/newview/skins/default/xui/fr/strings.xml @@ -23,7 +23,22 @@ Détection du matériel... </string> <string name="StartupLoading"> - Chargement + Chargement de [APP_NAME]... + </string> + <string name="StartupClearingCache"> + Vidage du cache... + </string> + <string name="StartupInitializingTextureCache"> + Initialisation du cache des textures... + </string> + <string name="StartupInitializingVFS"> + Initialisation VFS… + </string> + <string name="ProgressRestoring"> + Restauration... + </string> + <string name="ProgressChangingResolution"> + Changement de la résolution... </string> <string name="Fullbright"> Fullbright (Legacy) @@ -88,6 +103,9 @@ <string name="LoginFailedNoNetwork"> Erreur réseau : impossible d'établir la connexion. Veuillez vérifier votre connexion réseau. </string> + <string name="LoginFailed"> + Échec de la connexion. + </string> <string name="Quit"> Quitter </string> @@ -97,6 +115,24 @@ <string name="AgentLostConnection"> Il y a peut-être des problèmes techniques dans cette région. Veuillez vérifier votre connexion Internet. </string> + <string name="SavingSettings"> + Enregistrement des paramètres... + </string> + <string name="LoggingOut"> + Déconnexion... + </string> + <string name="ShuttingDown"> + Arrêt en cours... + </string> + <string name="YouHaveBeenDisconnected"> + Vous avez été déconnecté de la région où vous étiez. + </string> + <string name="SentToInvalidRegion"> + Vous avez été transféré vers une région non valide. + </string> + <string name="TestingDisconnect"> + Test de déconnexion du client + </string> <string name="TooltipPerson"> Personne </string> @@ -151,6 +187,24 @@ <string name="TooltipAgentUrl"> Cliquez pour afficher le profil de ce résident </string> + <string name="TooltipAgentMute"> + Cliquer pour ignorer ce résident + </string> + <string name="TooltipAgentUnmute"> + Cliquer pour ne plus ignorer ce résident + </string> + <string name="TooltipAgentIM"> + Cliquer pour envoyer un IM à ce résident + </string> + <string name="TooltipAgentPay"> + Cliquer pour payer ce résident + </string> + <string name="TooltipAgentOfferTeleport"> + Cliquer pour proposer une téléportation à ce résident + </string> + <string name="TooltipAgentRequestFriend"> + Cliquer pour demander à ce résident d'être votre ami + </string> <string name="TooltipGroupUrl"> Cliquez pour afficher la description de ce groupe </string> @@ -176,12 +230,31 @@ Cliquez pour exécuter la commande secondlife:// command </string> <string name="CurrentURL" value=" URL actuelle : [CurrentURL]"/> + <string name="TooltipPrice" value="[PRICE] L$-"/> <string name="SLurlLabelTeleport"> Me téléporter vers </string> <string name="SLurlLabelShowOnMap"> Afficher la carte pour </string> + <string name="SLappAgentMute"> + Ignorer + </string> + <string name="SLappAgentUnmute"> + Ne plus ignorer + </string> + <string name="SLappAgentIM"> + IM + </string> + <string name="SLappAgentPay"> + Payer + </string> + <string name="SLappAgentOfferTeleport"> + Proposer une téléportation à + </string> + <string name="SLappAgentRequestFriend"> + Demande d'amitié + </string> <string name="BUTTON_CLOSE_DARWIN"> Fermer (⌘W) </string> @@ -335,6 +408,9 @@ <string name="symbolic link"> lien </string> + <string name="symbolic folder link"> + lien du dossier + </string> <string name="AvatarEditingAppearance"> (Apparence en cours de modification) </string> @@ -849,6 +925,7 @@ Aucun contenu </string> <string name="WornOnAttachmentPoint" value=" (porté sur [ATTACHMENT_POINT])"/> + <string name="ActiveGesture" value="[GESLABEL] (actif)"/> <string name="PermYes"> Oui </string> @@ -948,6 +1025,9 @@ <string name="InvFolder My Outfits"> Mes tenues </string> + <string name="InvFolder Accessories"> + Accessoires + </string> <string name="InvFolder Friends"> Amis </string> @@ -1471,6 +1551,9 @@ <string name="PanelContentsNewScript"> Nouveau script </string> + <string name="PanelContentsTooltip"> + Contenu de l'objet + </string> <string name="BusyModeResponseDefault"> Le résident auquel vous avez envoyé un message est en mode Occupé, ce qui signifie qu'il a demandé à ne pas être dérangé. Votre message restera affiché dans son panneau IM afin qu'il puisse le lire ultérieurement. </string> @@ -1588,7 +1671,10 @@ Annuler </string> <string name="UploadingCosts"> - Charger %s coûte + Le chargement de [NAME] coûte [AMOUNT] L$ + </string> + <string name="BuyingCosts"> + Cet achat coûte [AMOUNT] L$ </string> <string name="UnknownFileExtension"> Extension de fichier inconnue .%s @@ -2272,7 +2358,7 @@ Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE]. Brillant </string> <string name="Glove Fingers"> - Doigts avec gants + Gants avec doigts </string> <string name="Glove Length"> Longueur des gants @@ -3034,7 +3120,7 @@ Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE]. Cheveux lisses </string> <string name="Socks Length"> - Longueur des chaussettes + Longueur </string> <string name="Soulpatch"> Barbichette @@ -3375,4 +3461,120 @@ Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE]. <string name="unread_chat_multiple"> [SOURCES] ont dit quelque chose de nouveau </string> + <string name="paid_you_ldollars"> + [NAME] vous a payé [AMOUNT] L$ + </string> + <string name="you_paid_ldollars"> + Vous avez payé à [AMOUNT] L$ [REASON]. + </string> + <string name="you_paid_ldollars_no_reason"> + Vous avez payé à [NAME] [AMOUNT] L$. + </string> + <string name="you_paid_ldollars_no_name"> + Vous avez payé à [AMOUNT] L$ [REASON]. + </string> + <string name="for a parcel of land"> + pour une parcelle de terrain + </string> + <string name="for a land access pass"> + pour un pass d'accès au terrain + </string> + <string name="for deeding land"> + pour une cession de terrain + </string> + <string name="to create a group"> + pour créer un groupe + </string> + <string name="to join a group"> + pour rejoindre un groupe + </string> + <string name="to upload"> + pour charger + </string> + <string name="giving"> + Donner [AMOUNT] L$ + </string> + <string name="uploading_costs"> + Le chargement coûte [AMOUNT] L$ + </string> + <string name="this_costs"> + Cela coûte [AMOUNT] L$ + </string> + <string name="buying_selected_land"> + Achat du terrain sélectionné pour [AMOUNT] L$ + </string> + <string name="this_object_costs"> + Cet objet coûte [AMOUNT] L$ + </string> + <string name="group_role_everyone"> + Tous + </string> + <string name="group_role_officers"> + Officiers + </string> + <string name="group_role_owners"> + Propriétaires + </string> + <string name="uploading_abuse_report"> + Chargement en cours... + +de l'infraction signalée + </string> + <string name="New Shape"> + Nouvelle silhouette + </string> + <string name="New Skin"> + Nouvelle peau + </string> + <string name="New Hair"> + Nouveaux cheveux + </string> + <string name="New Eyes"> + Nouveaux yeux + </string> + <string name="New Shirt"> + Nouvelle chemise + </string> + <string name="New Pants"> + Nouveau pantalon + </string> + <string name="New Shoes"> + Nouvelles chaussures + </string> + <string name="New Socks"> + Nouvelles chaussettes + </string> + <string name="New Jacket"> + Nouvelle veste + </string> + <string name="New Gloves"> + Nouveaux gants + </string> + <string name="New Undershirt"> + Nouveau débardeur + </string> + <string name="New Underpants"> + Nouveau caleçon + </string> + <string name="New Skirt"> + Nouvelle jupe + </string> + <string name="New Alpha"> + Nouvel alpha + </string> + <string name="New Tattoo"> + Nouveau tatouage + </string> + <string name="Invalid Wearable"> + Objet à porter non valide + </string> + <string name="New Script"> + Nouveau script + </string> + <string name="New Folder"> + Nouveau dossier + </string> + <string name="Contents"> + Contenus + </string> </strings> diff --git a/indra/newview/skins/default/xui/it/floater_about.xml b/indra/newview/skins/default/xui/it/floater_about.xml index 767f727d40..495c24f5e9 100644 --- a/indra/newview/skins/default/xui/it/floater_about.xml +++ b/indra/newview/skins/default/xui/it/floater_about.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_about" title="Informazioni su [APP_NAME]"> +<floater name="floater_about" title="INFO [CAPITALIZED_APP_NAME]"> <floater.string name="AboutHeader"> [APP_NAME] [VIEWER_VERSION_0].[VIEWER_VERSION_1].[VIEWER_VERSION_2] ([VIEWER_VERSION_3]) [BUILD_DATE] [BUILD_TIME] ([CHANNEL]) [[VIEWER_RELEASE_NOTES_URL] [ReleaseNotes]] @@ -8,7 +8,7 @@ Generato con [COMPILER] versione [COMPILER_VERSION] </floater.string> <floater.string name="AboutPosition"> - Tu sei in [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1] a [REGION] ospitata da [HOSTNAME] ([HOSTIP]) + Tu sei [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1] in [REGION] located at <nolink>[HOSTNAME]</nolink> ([HOSTIP]) [SERVER_VERSION] [[SERVER_RELEASE_NOTES_URL] [ReleaseNotes]] </floater.string> @@ -43,13 +43,19 @@ Versione Vivox: [VIVOX_VERSION] </panel> <panel label="Ringraziamenti" name="credits_panel"> <text_editor name="credits_editor"> - Second Life è offerto da Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Yang, T, Simone, Maestro, Scott, Charlene, Quixote, Amanda, Susan, Zed, Anne, Enkidu, Esbee, Joroan, Katelin, Roxie, Tay, Scarlet, Kevin, Johnny, Wolfgang, Andren, Bob, Howard, Merov, Rand, Ray, Michon, Newell, Galen, Dessie, Les, Michon, Jenelle, Geo, Siz, Shapiro, Pete, Calyle, Selene, Allen, Phoebe, Goldin, Kimmora, Dakota, Slaton, Lindquist, Zoey, Hari, Othello, Rohit, Sheldon, Petra, Viale, Gordon, Kaye, Pink, Ferny, Emerson, Davy, Bri, Chan, Juan, Robert, Terrence, Nathan, Carl and many others. + Second Life ti è offerto da Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Yang, T, Simone, Maestro, Scott, Charlene, Quixote, Amanda, Susan, Zed, Anne, Enkidu, Esbee, Joroan, Katelin, Roxie, Tay, Scarlet, Kevin, Johnny, Wolfgang, Andren, Bob, Howard, Merov, Rand, Ray, Michon, Newell, Galen, Dessie, Les and many others. - Si ringraziano i seguenti residenti per aver contribuito a rendere questa versione la migliore possibile: able whitman, Adeon Writer, adonaira aabye, Aeron Kohime, Agathos Frascati, Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Aminom Marvin, Angela Talamasca, Aralara Rajal, Armin Weatherwax, Ashrilyn Hayashida, Athanasius Skytower, Aura Dirval, Barney Boomslang, Biancaluce Robbiani, Biker Offcourse, Borg Capalini, Bulli Schumann, catherine pfeffer, Chalice Yao, Corre Porta, Court Goodman, Cummere Mayo, Dale Innis, Darien Caldwell, Darjeeling Schoonhoven, Daten Thielt, dimentox travanti, Dirk Talamasca, Drew Dwi, Duckless Vandyke, Elanthius Flagstaff, Electro Burnstein, emiley tomsen, Escort DeFarge, Eva Rau, Ezian Ecksol, Fire Centaur, Fluf Fredriksson, Francisco Koolhoven, Frontera Thor, Frungi Stastny, Gally Young, gearsawe stonecutter, Gigs Taggart, Gordon Wendt, Gudmund Shepherd, Gypsy Paz, Harleen Gretzky, Henri Beauchamp, Inma Rau, Irene Muni, Iskar Ariantho, Jacek Antonelli, JB Kraft, Jessicka Graves, Joeseph Albanese, Joshua Philgarlic, Khyota Wulluf, kirstenlee Cinquetti, Latif Khalifa, Lex Neva, Lilibeth Andree, Lisa Lowe, Lunita Savira, Loosey Demonia, lum pfohl, Marcos Fonzarelli, MartinRJ Fayray, Marusame Arai, Matthew Dowd, Maya Remblai, McCabe Maxsted, Meghan Dench, Melchoir Tokhes, Menos Short, Michelle2 Zenovka, Mimika Oh, Minerva Memel, Mm Alder, Ochi Wolfe, Omei Turnbull, Pesho Replacement, Phantom Ninetails, phoenixflames kukulcan, Polo Gufler, prez pessoa, princess niven, Prokofy Neva, Qie Niangao, Rem Beattie, RodneyLee Jessop, Saijanai Kuhn, Seg Baphomet, Sergen Davies, Shirley Marquez, SignpostMarv Martin, Sindy Tsure, Sira Arbizu, Skips Jigsaw, Sougent Harrop, Spritely Pixel, Squirrel Wood, StarSong Bright, Subversive Writer, Sugarcult Dagger, Sylumm Grigorovich, Tammy Nowotny, Tanooki Darkes, Tayra Dagostino, Theoretical Chemistry, Thickbrick Sleaford, valerie rosewood, Vex Streeter, Vixen Heron, Whoops Babii, Winter Ventura, Xiki Luik, Yann Dufaux, Yina Yao, Yukinoroh Kamachi, Zolute Infinity, Zwagoth Klaar +Si ringraziano i seguenti residenti per aver contribuito a rendere questa versione la migliore possibile: (in corso) - Per avere successo nel business, sii coraggioso, sii il primo, sii differente. --Henry Marchant + + + + + +Senza dubbio è una mente rara quella che può rendere brillantemente ovvio il finora mai esistito. Dichiarare "Avrei potuto pensare a tutto questo" è molto comune e fuorviante, per il motivo che non l'hanno fatto, e anche questo fatto è assai significativo e rivelativo. + -- Douglas Adams </text_editor> </panel> <panel label="Licenze" name="licenses_panel"> diff --git a/indra/newview/skins/default/xui/it/floater_about_land.xml b/indra/newview/skins/default/xui/it/floater_about_land.xml index 4c82475a6f..a61b0584d3 100644 --- a/indra/newview/skins/default/xui/it/floater_about_land.xml +++ b/indra/newview/skins/default/xui/it/floater_about_land.xml @@ -1,5 +1,14 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floaterland" title="INFO SUL TERRENO"> +<floater name="floaterland" title="INFORMAZIONI SUL TERRENO"> + <floater.string name="maturity_icon_general"> + "Parcel_PG_Dark" + </floater.string> + <floater.string name="maturity_icon_moderate"> + "Parcel_M_Dark" + </floater.string> + <floater.string name="maturity_icon_adult"> + "Parcel_R_Dark" + </floater.string> <floater.string name="Minutes"> [MINUTES] minuti </floater.string> @@ -10,12 +19,12 @@ [SECONDS] secondi </floater.string> <floater.string name="Remaining"> - restante + rimanenti </floater.string> <tab_container name="landtab"> <panel label="GENERALE" name="land_general_panel"> <panel.string name="new users only"> - Solo ai nuovi residenti + Soltanto nuovi residenti </panel.string> <panel.string name="anyone"> A chiunque @@ -81,10 +90,12 @@ Vai al menu Mondo > Informazioni sul terreno oppure seleziona un altro appezz <text name="Group:"> Gruppo: </text> - <text left="119" name="GroupText" width="227"/> - <button label="Imposta..." label_selected="Imposta..." name="Set..."/> + <text left="119" name="GroupText" width="227"> + Leyla Linden + </text> + <button label="Imposta" name="Set..."/> <check_box label="Permetti cessione al gruppo" left="119" name="check deed" tool_tip="Un funzionario del gruppo può cedere questa terra al gruppo stesso cosicchè essa sarà supportata dalle terre del gruppo."/> - <button label="Cedi..." label_selected="Cedi..." name="Deed..." tool_tip="Puoi solo offrire terra se sei un funzionario del gruppo selezionato."/> + <button label="Cedi" name="Deed..." tool_tip="Puoi solo offrire terra se sei un funzionario del gruppo selezionato."/> <check_box label="Il proprietario fa un contributo con la cessione" left="119" name="check contrib" tool_tip="Quando la terra è ceduta al gruppo, il proprietario precedente contribuisce con abbastanza allocazione di terra per supportarlo."/> <text name="For Sale:"> In vendita: @@ -126,13 +137,14 @@ Vai al menu Mondo > Informazioni sul terreno oppure seleziona un altro appezz 0 </text> <button label="Acquista il terreno..." label_selected="Acquista il terreno..." left="130" name="Buy Land..." width="125"/> - <button label="Acquista per il gruppo..." label_selected="Acquista per il gruppo..." name="Buy For Group..."/> + <button label="Informazioni script" name="Scripts..."/> + <button label="Acquista per il gruppo" name="Buy For Group..."/> <button label="Compra pass..." label_selected="Compra pass..." left="130" name="Buy Pass..." tool_tip="Un pass ti da un accesso temporaneo in questo territorio." width="125"/> - <button label="Abbandona la terra..." label_selected="Abbandona la terra..." name="Abandon Land..."/> - <button label="Reclama la terra..." label_selected="Reclama la terra..." name="Reclaim Land..."/> - <button label="Vendita Linden..." label_selected="Vendita Linden..." name="Linden Sale..." tool_tip="La terra deve essere posseduta, con contenuto impostato, e non già messa in asta."/> + <button label="Abbandona la terra" name="Abandon Land..."/> + <button label="Reclama la terra" name="Reclaim Land..."/> + <button label="Vendita Linden" name="Linden Sale..." tool_tip="La terra deve essere posseduta, con contenuto impostato, e non già messa in asta."/> </panel> - <panel label="COVENANT" name="land_covenant_panel"> + <panel label="REGOLAMENTO" name="land_covenant_panel"> <panel.string name="can_resell"> La terra acquistata in questa regione può essere rivenduta. </panel.string> @@ -196,7 +208,7 @@ o suddivisa. La terra in questa regione non può essere unita/suddivisa. </text> </panel> - <panel label="OBJECTS" name="land_objects_panel"> + <panel label="OGGETTI" name="land_objects_panel"> <panel.string name="objects_available_text"> [COUNT] dei [MAX] ([AVAILABLE] disponibili) </panel.string> @@ -207,7 +219,7 @@ o suddivisa. Fattore bonus degli oggetti della regione: [BONUS] </text> <text name="Simulator primitive usage:"> - Uso dei Primative : + Uso dei Prim: </text> <text left="214" name="objects_available" width="230"> [COUNT] dei [MAX] ([AVAILABLE] dsponibili) @@ -231,7 +243,7 @@ o suddivisa. [COUNT] </text> <button label="Mostra" label_selected="Mostra" name="ShowOwner" right="-135" width="60"/> - <button label="Restituisci..." label_selected="Restituisci..." name="ReturnOwner..." right="-10" tool_tip="Restituisci gli oggetti ai loro proprietari." width="119"/> + <button label="Restituisci" name="ReturnOwner..." right="-10" tool_tip="Restituisci gli oggetti ai loro proprietari." width="119"/> <text left="14" name="Set to group:" width="180"> Imposta al gruppo: </text> @@ -239,7 +251,7 @@ o suddivisa. [COUNT] </text> <button label="Mostra" label_selected="Mostra" name="ShowGroup" right="-135" width="60"/> - <button label="Restituisci..." label_selected="Restituisci..." name="ReturnGroup..." right="-10" tool_tip="Restituisci gli oggetti ai loro proprietari." width="119"/> + <button label="Restituisci" name="ReturnGroup..." right="-10" tool_tip="Restituisci gli oggetti ai loro proprietari." width="119"/> <text left="14" name="Owned by others:" width="180"> Posseduti da altri: </text> @@ -247,7 +259,7 @@ o suddivisa. [COUNT] </text> <button label="Mostra" label_selected="Mostra" name="ShowOther" right="-135" width="60"/> - <button label="Restituisci..." label_selected="Restituisci..." name="ReturnOther..." right="-10" tool_tip="Restituisci gli oggetti ai loro proprietari." width="119"/> + <button label="Restituisci" name="ReturnOther..." right="-10" tool_tip="Restituisci gli oggetti ai loro proprietari." width="119"/> <text left="14" name="Selected / sat upon:" width="193"> Selezionati / sui quali sei sopra: </text> @@ -255,7 +267,7 @@ o suddivisa. [COUNT] </text> <text left="4" name="Autoreturn" width="412"> - Autorestituisci gli oggetti degli altri residenti (minuti, 0 per disabilitata): + Restituzione automatica degli oggetti di altri residenti (minuti, 0 per disattivarla): </text> <line_editor name="clean other time" right="-20"/> <text name="Object Owners:" width="150"> @@ -303,7 +315,7 @@ Solamente terreni più grandi possono essere abilitati nella ricerca. Nessuna spinta (Impostazione regionale) </panel.string> <text name="allow_label"> - Permetti agli altri residenti di: + Permetti ad altri residenti di: </text> <check_box label="Modificare il terreno" name="edit land check" tool_tip="Se spuntato, chiunque può terraformare il tuo terreno. E' preferibile lasciare questo quadrato non spuntato, dato che sarai sempre in grado di modificare il tuo terreno."/> <check_box label="Permetti il volo" name="check fly" tool_tip="Se spuntato, gli altri residenti potranno volare sul tuo terreno. Se non spuntato, potranno solamente arrivare in volo o sorvolare il terreno."/> @@ -327,7 +339,7 @@ Solamente terreni più grandi possono essere abilitati nella ricerca. </text> <check_box label="Sicuro (senza danno)" name="check safe" tool_tip="Se spuntato, imposta il terreno su 'sicuro', disabilitando i danni da combattimento. Se non spuntato, viene abilitato il combattimento a morte."/> <check_box label="Nessuna spinta" name="PushRestrictCheck" tool_tip="Previeni i colpi. Selezionare questa opzione può essere utile per prevenire comportamenti dannosi sul tuo terreno."/> - <check_box label="Mostra luogo nel Cerca (L$30/settimana)" name="ShowDirectoryCheck" tool_tip="Lascia che questa terra sia vista dagli altri nei risultati di ricerca"/> + <check_box label="Mostra luogo nella ricerca (30 L$/settimana)" name="ShowDirectoryCheck" tool_tip="Lascia che questa terra sia vista dagli altri nei risultati di ricerca"/> <combo_box left="282" name="land category with adult" width="140"> <combo_box.item label="Tutte le categorie" name="item0"/> <combo_box.item label="Luogo dei Linden" name="item1"/> @@ -385,10 +397,7 @@ Solamente terreni più grandi possono essere abilitati nella ricerca. Home Page: </text> <line_editor left="97" name="media_url"/> - <button label="Imposta..." label_selected="Imposta..." name="set_media_url" width="63"/> - <text name="CurrentURL:"> - Pagina attuale: - </text> + <button label="Imposta" name="set_media_url"/> <check_box label="Nascondi indirizzo URL Media" left="94" name="hide_media_url" tool_tip="Abilitando questa opzione nasconderai l'indirizzo url dei media a tutte le persone non autorizzate a vedere le informazioni del terreno. Nota che questo non è disponibile per contenuto di tipo HTML."/> <text name="Description:"> Descrizione: @@ -400,9 +409,7 @@ Texture: </text> <texture_picker label="" left="97" name="media texture" tool_tip="Clicca per scegliere un'immagine"/> <text name="replace_texture_help" width="285"> - (Gli oggetti che hanno questa texture applicata -mostreranno il video o la pagina web dopo che avrai -cliccato sulla freccia play.) + Gli oggetti che utilizzano questa texture mostreranno il video o la pagina web dopo aver cliccato sulla freccia di riproduzione. Seleziona la miniatura per scegliere una texture diversa. </text> <check_box label="Auto ridimensiona" left="94" name="media_auto_scale" tool_tip="Spuntando questa opzione, nell'appezzamento il contenuto media si ridimensionerà automaticamente. Potrebbe darsi che appaia un po' più lento e che diminuisca la qualità visiva ma nessun altro riadattamento o allineamento della texture sarà necessario."/> <text left="99" name="media_size" tool_tip="Aumenta grandezza per far vedere meglio i media web, lascia a 0 per impostare il default." width="120"> @@ -420,12 +427,17 @@ Media: <check_box label="Fai ripetere il video" left="265" name="media_loop" tool_tip="Fai ripetere il video continuamente. Quando il video è finito, reinizierà dal principio."/> </panel> <panel label="SUONO" name="land_audio_panel"> - <check_box label="Attiva Voice" name="parcel_enable_voice_channel"/> - <check_box label="Attiva Voice (stabilito dalla Proprietà)" name="parcel_enable_voice_channel_is_estate_disabled"/> + <check_box label="Nascondi URL" name="hide_music_url" tool_tip="Questa opzione consente di nascondere l'url della musica a chi non è autorizzato a visionare le informazioni di questo parcel."/> + <check_box label="Attiva voce" name="parcel_enable_voice_channel"/> + <check_box label="Attiva voce (stabilito dalla proprietà)" name="parcel_enable_voice_channel_is_estate_disabled"/> + <check_box label="Limita il chat vocale a questo lotto" name="parcel_enable_voice_channel_local"/> </panel> <panel label="ACCESSO" name="land_access_panel"> <panel.string name="access_estate_defined"> - (Definito dalla Proprietà) + (Definito dalla proprietà) + </panel.string> + <panel.string name="allow_public_access"> + Consenti accesso pubblico ([MATURITY]) </panel.string> <panel.string name="estate_override"> Una o più di queste impostazioni sono già impostate a livello regionale @@ -433,12 +445,12 @@ Media: <text name="Limit access to this parcel to:"> Accesso a questo terreno </text> - <check_box label="Permetti Accesso Pubblico [MATURITY]" name="public_access"/> + <check_box label="Consenti l'accesso pubblico [MATURITY]" name="public_access"/> <text name="Only Allow"> - Accesso ristretto ai Residenti verificati con: + Consenti l'accesso soltanto ai residenti verificati tramite: </text> - <check_box label="Informazioni di pagamento on File [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="Manda via residenti non identificati."/> - <check_box label="Verifica dell'età [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="Espelli residenti che non hanno verificato l'età. Vedi [SUPPORT_SITE] per maggiori informazioni."/> + <check_box label="Informazioni di pagamento in archivio [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="Espelli i residenti non identificati."/> + <check_box label="Verifica dell'età [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="Espelli i residenti che non hanno la loro età verificata. Vedi [SUPPORT_SITE] per maggiori informazioni."/> <check_box label="Permetti accesso al gruppo: [GROUP]" name="GroupCheck" tool_tip="Imposta il gruppo nel pannello generale."/> <check_box label="Vendi pass a:" name="PassCheck" tool_tip="Permetti in questo terreno l'accesso temporaneo"/> <combo_box name="pass_combo"> diff --git a/indra/newview/skins/default/xui/it/floater_activeim.xml b/indra/newview/skins/default/xui/it/floater_activeim.xml index d19882fa48..0c1f0448e1 100644 --- a/indra/newview/skins/default/xui/it/floater_activeim.xml +++ b/indra/newview/skins/default/xui/it/floater_activeim.xml @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_activeim" title="ATTIVA IM"/> +<floater name="floater_activeim" title="IM ATTIVO"/> diff --git a/indra/newview/skins/default/xui/it/floater_animation_preview.xml b/indra/newview/skins/default/xui/it/floater_animation_preview.xml index f483b19624..c3ee23898c 100644 --- a/indra/newview/skins/default/xui/it/floater_animation_preview.xml +++ b/indra/newview/skins/default/xui/it/floater_animation_preview.xml @@ -106,6 +106,9 @@ La lunghezza massima è [MAX_LENGTH] secondi. <floater.string name="E_ST_NO_XLT_EMOTE"> Impossibile leggere il nome emote. </floater.string> + <floater.string name="E_ST_BAD_ROOT"> + Nome non corretto del root joint, usa "hip". + </floater.string> <text name="name_label"> Nome: </text> diff --git a/indra/newview/skins/default/xui/it/floater_auction.xml b/indra/newview/skins/default/xui/it/floater_auction.xml index aa7b79fc50..4cad8b744d 100644 --- a/indra/newview/skins/default/xui/it/floater_auction.xml +++ b/indra/newview/skins/default/xui/it/floater_auction.xml @@ -1,11 +1,11 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_auction" title="INIZIA LA VENDITA DI TERRA LINDEN"> +<floater name="floater_auction" title="INIZIA LA VENDITA DI TERRENO LINDEN"> <floater.string name="already for sale"> Non puoi mettere in asta terreni che sono già in vendita. </floater.string> <check_box initial_value="true" label="Includi barriere di selezione gialle" name="fence_check"/> <button label="Fotografia" label_selected="Fotografia" name="snapshot_btn"/> <button label="Vendi a chiunque" label_selected="Vendi a chiunque" name="sell_to_anyone_btn"/> - <button label="Annulla le Impostazioni" label_selected="Annulla le Impostazioni" name="reset_parcel_btn"/> - <button label="Inizia l'Asta" label_selected="Inizia l'Asta" name="start_auction_btn"/> + <button label="Cancella impostazioni" label_selected="Cancella impostazioni" name="reset_parcel_btn"/> + <button label="Inizia l'asta" label_selected="Inizia l'asta" name="start_auction_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/it/floater_avatar_picker.xml b/indra/newview/skins/default/xui/it/floater_avatar_picker.xml index e583d0b8b5..7c037801e9 100644 --- a/indra/newview/skins/default/xui/it/floater_avatar_picker.xml +++ b/indra/newview/skins/default/xui/it/floater_avatar_picker.xml @@ -21,18 +21,18 @@ <tab_container name="ResidentChooserTabs"> <panel label="Cerca" name="SearchPanel"> <text name="InstructSearchResidentName"> - Scrivi parte del nome di una persona: + Comincia a digitare il nome della persona: </text> <button label="Vai" label_selected="Vai" name="Find"/> </panel> <panel label="Amici" name="FriendsPanel"> <text name="InstructSelectFriend"> - Seleziona una persona: + Scegli una persona: </text> </panel> <panel label="Vicino a me" name="NearMePanel"> <text name="InstructSelectResident"> - Seleziona una persona nei dintorni: + Scegli una persona nei dintorni </text> <slider bottom_delta="-36" label="Range" name="near_me_range"/> <text name="meters"> @@ -43,5 +43,5 @@ </panel> </tab_container> <button label="OK" label_selected="OK" name="ok_btn"/> - <button label="Cancella" label_selected="Cancella" name="cancel_btn"/> + <button label="Annulla" label_selected="Annulla" name="cancel_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/it/floater_avatar_textures.xml b/indra/newview/skins/default/xui/it/floater_avatar_textures.xml index e5ce07f300..2935f0fdb6 100644 --- a/indra/newview/skins/default/xui/it/floater_avatar_textures.xml +++ b/indra/newview/skins/default/xui/it/floater_avatar_textures.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="avatar_texture_debug" title="AVATAR TEXTURES"> +<floater name="avatar_texture_debug" title="TEXTURE DI AVATAR"> <floater.string name="InvalidAvatar"> AVATAR NON VALIDO </floater.string> @@ -7,26 +7,37 @@ Texture Composite </text> <button label="Deposito" label_selected="Deposito" name="Dump"/> - <texture_picker label="Capelli" name="hair_grain"/> - <texture_picker label="Capelli Alpha" name="hair_alpha"/> - <texture_picker label="Trucco" name="head_bodypaint"/> - <texture_picker label="Testa Alpha" name="head_alpha"/> - <texture_picker label="Tatuaggio Testa" name="head_tattoo"/> - <texture_picker label="Occhio" name="eyes_iris"/> - <texture_picker label="Occhi Alpha" name="eyes_alpha"/> - <texture_picker label="Bodypaint Corpo Superiore" name="upper_bodypaint"/> - <texture_picker label="Maglietta intima" name="upper_undershirt"/> - <texture_picker label="Guanti" name="upper_gloves"/> - <texture_picker label="Camicia" name="upper_shirt"/> - <texture_picker label="Giacca superiore" name="upper_jacket"/> - <texture_picker label="Alpha Superiore" name="upper_alpha"/> - <texture_picker label="Tatuaggio superiore" name="upper_tattoo"/> - <texture_picker label="Bodypaint Corpo Inferiore" name="lower_bodypaint"/> - <texture_picker label="Slip" name="lower_underpants"/> - <texture_picker label="Calze" name="lower_socks"/> - <texture_picker label="Scarpe" name="lower_shoes"/> - <texture_picker label="Pantaloni" name="lower_pants"/> - <texture_picker label="Giacca" name="lower_jacket"/> - <texture_picker label="Alpha Inferiore" name="lower_alpha"/> - <texture_picker label="Tatuaggio basso" name="lower_tattoo"/> + <scroll_container name="profile_scroll"> + <panel name="scroll_content_panel"> + <texture_picker label="Capigliature" name="hair-baked"/> + <texture_picker label="Capigliature" name="hair_grain"/> + <texture_picker label="Alpha dei capelli" name="hair_alpha"/> + <texture_picker label="Testa" name="head-baked"/> + <texture_picker label="Makeup" name="head_bodypaint"/> + <texture_picker label="Alpha della testa" name="head_alpha"/> + <texture_picker label="Tatuaggio della testa" name="head_tattoo"/> + <texture_picker label="Occhi" name="eyes-baked"/> + <texture_picker label="Occhio" name="eyes_iris"/> + <texture_picker label="Alpha degli occhi" name="eyes_alpha"/> + <texture_picker label="Parte superiore del corpo" name="upper-baked"/> + <texture_picker label="Bodypaint parte superiore del corpo" name="upper_bodypaint"/> + <texture_picker label="Maglietta intima" name="upper_undershirt"/> + <texture_picker label="Guanti" name="upper_gloves"/> + <texture_picker label="Camicia" name="upper_shirt"/> + <texture_picker label="Parte superiore della giacca" name="upper_jacket"/> + <texture_picker label="Alpha superiore" name="upper_alpha"/> + <texture_picker label="Tatuaggio superiore" name="upper_tattoo"/> + <texture_picker label="Parte inferiore del corpo" name="lower-baked"/> + <texture_picker label="Bodypaint parte inferiore del corpo" name="lower_bodypaint"/> + <texture_picker label="Slip" name="lower_underpants"/> + <texture_picker label="Calzini" name="lower_socks"/> + <texture_picker label="Scarpe" name="lower_shoes"/> + <texture_picker label="Pantaloni" name="lower_pants"/> + <texture_picker label="Giacca" name="lower_jacket"/> + <texture_picker label="Alpha inferiore" name="lower_alpha"/> + <texture_picker label="Tattuaggio inferiore" name="lower_tattoo"/> + <texture_picker label="Gonna" name="skirt-baked"/> + <texture_picker label="Gonna" name="skirt"/> + </panel> + </scroll_container> </floater> diff --git a/indra/newview/skins/default/xui/it/floater_beacons.xml b/indra/newview/skins/default/xui/it/floater_beacons.xml index 8fd69d811d..ca6711468d 100644 --- a/indra/newview/skins/default/xui/it/floater_beacons.xml +++ b/indra/newview/skins/default/xui/it/floater_beacons.xml @@ -1,12 +1,12 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="beacons" title="BEACONS"> +<floater name="beacons" title="MARCATORI"> <panel name="beacons_panel"> <text name="label_show"> Mostra: </text> - <check_box label="Beacons" name="beacons"/> - <check_box label="Highlights" name="highlights"/> - <text name="beacon_width_label" tool_tip="Beacon width"> + <check_box label="Marcatori" name="beacons"/> + <check_box label="In evidenza" name="highlights"/> + <text name="beacon_width_label" tool_tip="Larghezza marcatore"> Larghezza: </text> <text name="label_objects"> @@ -15,7 +15,7 @@ <check_box label="Fisico" name="physical"/> <check_box label="Scripted" name="scripted"/> <check_box label="Tocca solo" name="touch_only"/> - <check_box label="Fonte del Suono" name="sounds"/> - <check_box label="Fonte delle Particle" name="particles"/> + <check_box label="Fonti sonore" name="sounds"/> + <check_box label="Fonti delle particelle" name="particles"/> </panel> </floater> diff --git a/indra/newview/skins/default/xui/it/floater_build_options.xml b/indra/newview/skins/default/xui/it/floater_build_options.xml index 233efef19b..326aab1a31 100644 --- a/indra/newview/skins/default/xui/it/floater_build_options.xml +++ b/indra/newview/skins/default/xui/it/floater_build_options.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="build options floater" title="GRID OPTIONS"> - <spinner label="Grid Units (meters)" label_width="192" name="GridResolution" width="250"/> +<floater name="build options floater" title="OPZIONI DELLA GRIGLIA"> + <spinner label="Unità griglia (metri)" label_width="192" name="GridResolution" width="250"/> <spinner label="Estensione della griglia (metri)" label_width="192" name="GridDrawSize" width="250"/> - <check_box label="Usa allineamento sub-unitario" name="GridSubUnit"/> - <check_box label="Guarda le cross-sections" name="GridCrossSection"/> - <text name="grid_opacity_label" tool_tip="Opacità della Grid"> + <check_box label="Usa sottounità" name="GridSubUnit"/> + <check_box label="Guarda le sezioni trasversali" name="GridCrossSection"/> + <text name="grid_opacity_label" tool_tip="Opacità della griglia"> Opacità: </text> <slider label="Trasparenza della griglia" name="GridOpacity" width="250"/> diff --git a/indra/newview/skins/default/xui/it/floater_bulk_perms.xml b/indra/newview/skins/default/xui/it/floater_bulk_perms.xml index 26890dc209..89f4a0cb71 100644 --- a/indra/newview/skins/default/xui/it/floater_bulk_perms.xml +++ b/indra/newview/skins/default/xui/it/floater_bulk_perms.xml @@ -13,27 +13,27 @@ Conclusa richiesta di modifica dei permessi. </floater.string> <check_box label="Animazioni" name="check_animation"/> - <icon name="icon_animation" tool_tip="Animazioni"/> + <icon name="icon_animation" tool_tip="Animazione"/> <check_box label="Parti del corpo" name="check_bodypart"/> - <icon name="icon_bodypart" tool_tip="Parti del Corpo"/> + <icon name="icon_bodypart" tool_tip="Parti del corpo"/> <check_box label="Abiti" name="check_clothing"/> <icon name="icon_clothing" tool_tip="Vestiario"/> <check_box label="Gesture" name="check_gesture"/> - <icon name="icon_gesture" tool_tip="Gestures"/> + <icon name="icon_gesture" tool_tip="Gesture"/> <check_box label="Notecard" name="check_notecard"/> - <icon name="icon_notecard" tool_tip="Notecards"/> + <icon name="icon_notecard" tool_tip="Biglietti"/> <check_box label="Oggetti" name="check_object"/> <icon name="icon_object" tool_tip="Oggetti"/> <check_box label="Script" name="check_script"/> - <icon name="icon_script" tool_tip="Scripts"/> + <icon name="icon_script" tool_tip="Script"/> <check_box label="Suoni" name="check_sound"/> <icon name="icon_sound" tool_tip="Suoni"/> <check_box label="Texture" name="check_texture"/> - <icon name="icon_texture" tool_tip="Textures"/> - <button label="√ Tutto" label_selected="Tutti" name="check_all"/> - <button label="Pulisci" label_selected="Nessuno" name="check_none"/> + <icon name="icon_texture" tool_tip="Texture"/> + <button label="√ Tutti" label_selected="Tutti" name="check_all"/> + <button label="Cancella" label_selected="Nessuno" name="check_none"/> <text name="newperms"> - Nuovo Permessi del Contenuto + Nuovi permessi del contenuto </text> <text name="GroupLabel"> Gruppo: @@ -44,11 +44,11 @@ </text> <check_box label="Copia" name="everyone_copy"/> <text name="NextOwnerLabel"> - Prossimo proprietario: + Proprietario successivo: </text> <check_box label="Modificare" name="next_owner_modify"/> <check_box label="Copiare" name="next_owner_copy"/> - <check_box initial_value="true" label="Transfer" name="next_owner_transfer" tool_tip="Prossimo proprietario può donare o rivendere questo oggetto"/> - <button label="Ok" name="apply"/> - <button label="Cancella" name="close"/> + <check_box initial_value="true" label="Trasferisci" name="next_owner_transfer" tool_tip="Il prossimo proprietario può regalare o rivendere questo oggetto"/> + <button label="OK" name="apply"/> + <button label="Annulla" name="close"/> </floater> diff --git a/indra/newview/skins/default/xui/it/floater_buy_currency.xml b/indra/newview/skins/default/xui/it/floater_buy_currency.xml index 9d97f7d72d..1327e8b172 100644 --- a/indra/newview/skins/default/xui/it/floater_buy_currency.xml +++ b/indra/newview/skins/default/xui/it/floater_buy_currency.xml @@ -1,16 +1,16 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="buy currency" title="COMPRA L$"> +<floater name="buy currency" title="ACQUISTA L$"> <floater.string name="buy_currency"> - Compra L$ [LINDENS] per approx. [LOCALAMOUNT] + Acquista [LINDENS] L$ per circa [LOCALAMOUNT] </floater.string> <text font="SansSerifLarge" left="5" name="info_need_more" right="-5"> - Necessiti di più L$ + Ti servono più L$ </text> <text name="contacting"> Sto contattando il LindeX... </text> <text name="info_buying"> - COMPRA L$ + Acquista L$ </text> <text name="balance_label"> Io ho @@ -19,7 +19,7 @@ [AMT]L$ </text> <text name="currency_action" width="45"> - Io voglio comprare + Voglio acquistare </text> <text name="currency_label"> L$ @@ -31,13 +31,13 @@ Al prezzo </text> <text name="currency_est"> - approx. [LOCALAMOUNT] + circa [LOCALAMOUNT] </text> <text name="getting_data"> - Calcolando... + Stima in corso... </text> <text name="buy_action"> - [NAME] [PRICE]L$ + [ACTION] </text> <text name="total_label"> Il mio saldo sarà @@ -46,18 +46,18 @@ [AMT]L$ </text> <text name="currency_links"> - [http://www.secondlife.com/ payment method] | [http://www.secondlife.com/ currency] | [http://www.secondlife.com/my/account/exchange_rates.php exchange rate] + [http://www.secondlife.com/my/account/payment_method_management.php payment method] | [http://www.secondlife.com/my/account/currency.php currency] | [http://www.secondlife.com/my/account/exchange_rates.php exchange rate] </text> <text name="exchange_rate_note"> - Ri-scrivi un importo per vedere l'ultimo rapporto di cambio. + Riscrivi l'importo per vedere l'ultimo tasso al cambio. </text> <text name="purchase_warning_repurchase"> - Confermando questo acquisto di soli L$, non l'oggetto. + La conferma di questo acquisto compra solo L$, non l'oggetto. </text> <text bottom_delta="16" name="purchase_warning_notenough"> - Non stai acquistando abbastanza L$. Per favore aumenta l'importo. + Non stai acquistando abbastanza L$. Aumenta l'importo. </text> - <button label="Compra ora" name="buy_btn"/> + <button label="Acquista adesso" name="buy_btn"/> <button label="Cancella" name="cancel_btn"/> <text left="5" name="info_cannot_buy" right="-5"> Non in grado di acquistare diff --git a/indra/newview/skins/default/xui/it/floater_buy_land.xml b/indra/newview/skins/default/xui/it/floater_buy_land.xml index e9c5334746..f4e7a6c2c5 100644 --- a/indra/newview/skins/default/xui/it/floater_buy_land.xml +++ b/indra/newview/skins/default/xui/it/floater_buy_land.xml @@ -1,5 +1,134 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="buy land" title="ACQUISTA TERRENO"> + <floater.string name="can_resell"> + Può essere rivenduta. + </floater.string> + <floater.string name="can_not_resell"> + Può non essere rivenduta. + </floater.string> + <floater.string name="can_change"> + Può essere unita o suddivisa. + </floater.string> + <floater.string name="can_not_change"> + Non può essere unita o suddivisa. + </floater.string> + <floater.string name="cant_buy_for_group"> + Non hai il permesso di comprare terra per il tuo gruppo attivo. + </floater.string> + <floater.string name="no_land_selected"> + Nessuna terra selezionata. + </floater.string> + <floater.string name="multiple_parcels_selected"> + Hai selezionato appezzamenti diversi. +Prova a selezionare un'area più piccola. + </floater.string> + <floater.string name="no_permission"> + Non hai il permesso di comprare terra per il tuo gruppo attivo. + </floater.string> + <floater.string name="parcel_not_for_sale"> + Il terreno selezionato non è in vendita. + </floater.string> + <floater.string name="group_already_owns"> + Il gruppo possiede già il terreno. + </floater.string> + <floater.string name="you_already_own"> + Possiedi già il terreno. + </floater.string> + <floater.string name="set_to_sell_to_other"> + Il terreno selezionato è già impostato per la vendita ad un altro gruppo. + </floater.string> + <floater.string name="no_public_land"> + L'area selezionata non è pubblica. + </floater.string> + <floater.string name="not_owned_by_you"> + È selezionato terreno di proprietà di un altro residente. +Prova a scegliere una superficie più piccola. + </floater.string> + <floater.string name="processing"> + Stiamo elaborando il tuo acquisto... + +(Potrebbe volerci un minuto o due.) + </floater.string> + <floater.string name="fetching_error"> + C'e stato un errore mentre si stavano ottenendo le informazioni sull'acquisto della terra. + </floater.string> + <floater.string name="buying_will"> + Comprando questa terra: + </floater.string> + <floater.string name="buying_for_group"> + Comprare la terra per il gruppo farà: + </floater.string> + <floater.string name="cannot_buy_now"> + Non puoi comprare ora: + </floater.string> + <floater.string name="not_for_sale"> + Non in vendita: + </floater.string> + <floater.string name="none_needed"> + nessuno necessario + </floater.string> + <floater.string name="must_upgrade"> + Il tuo tipo di account ha bisogno di un upgrade per possedere terra. + </floater.string> + <floater.string name="cant_own_land"> + Il tuo account può possedere terra. + </floater.string> + <floater.string name="land_holdings"> + Sei proprietario di [BUYER] m² di terreno. + </floater.string> + <floater.string name="pay_to_for_land"> + Paga [AMOUNT] L$ a [SELLER] per questa terra + </floater.string> + <floater.string name="buy_for_US"> + Acquista L$ [AMOUNT] per circa [LOCAL_AMOUNT], + </floater.string> + <floater.string name="parcel_meters"> + Questo lotto è di [AMOUNT] m² + </floater.string> + <floater.string name="premium_land"> + Questo terreno è premium, e costerà come [AMOUNT] m². + </floater.string> + <floater.string name="discounted_land"> + Questo terreno è scontato, e costerà come [AMOUNT] m². + </floater.string> + <floater.string name="meters_supports_object"> + [AMOUNT] m² +consente [AMOUNT2] oggetti + </floater.string> + <floater.string name="sold_with_objects"> + venduta con oggetti + </floater.string> + <floater.string name="sold_without_objects"> + Oggetti non inclusi + </floater.string> + <floater.string name="info_price_string"> + L$ [PRICE] +([PREZZO_PER_MQ] L$/m²) +[VENDUTO_CON_OGGETTI] + </floater.string> + <floater.string name="insufficient_land_credits"> + Il gruppo [GROUP] avrà bisogno di contribuzioni anticipate, mediante crediti d'uso terriero, +sufficienti a coprire l'area del terreno prima che l'acquisto +sia completato. + </floater.string> + <floater.string name="have_enough_lindens"> + Hai [AMOUNT] L$, che sono sufficienti per comprare questa terra. + </floater.string> + <floater.string name="not_enough_lindens"> + Hai solo [AMOUNT] L$, ed hai bisogno di altri [AMOUNT2] L$. + </floater.string> + <floater.string name="balance_left"> + Dopo l'acquisto, ti rimarranno [AMOUNT] L$. + </floater.string> + <floater.string name="balance_needed"> + Hai bisogno di acquistare almeno [AMOUNT] L$ per comprare questo terreno. + </floater.string> + <floater.string name="no_parcel_selected"> + (nessun terreno selezionato) + </floater.string> + <floater.string name="icon_PG" value="Parcel_PG_Dark"/> + <floater.string name="icon_M" value="Parcel_M_Dark"/> + <floater.string name="icon_R" value="Parcel_R_Dark"/> <text name="region_name_label"> Regione: </text> @@ -107,133 +236,4 @@ Questo lotto consiste in 512 m² di terreno. <check_box label="Rimuovi [AMOUNT] m² di contribuzione dal gruppo." name="remove_contribution"/> <button label="Compra" name="buy_btn"/> <button label="Annulla" name="cancel_btn"/> - <string name="can_resell"> - Può essere rivenduta. - </string> - <string name="can_not_resell"> - Può non essere rivenduta. - </string> - <string name="can_change"> - Può essere unita o suddivisa. - </string> - <string name="can_not_change"> - Non può essere unita o suddivisa. - </string> - <string name="cant_buy_for_group"> - Non hai il permesso di comprare terra per il tuo gruppo attivo. - </string> - <string name="no_land_selected"> - Nessuna terra selezionata. - </string> - <string name="multiple_parcels_selected"> - Hai selezionato appezzamenti diversi. -Prova a selezionare un'area più piccola. - </string> - <string name="no_permission"> - Non hai il permesso di comprare terra per il tuo gruppo attivo. - </string> - <string name="parcel_not_for_sale"> - Il terreno selezionato non è in vendita. - </string> - <string name="group_already_owns"> - Il gruppo possiede già il terreno. - </string> - <string name="you_already_own"> - Possiedi già il terreno. - </string> - <string name="set_to_sell_to_other"> - Il terreno selezionato è già impostato per la vendita ad un altro gruppo. - </string> - <string name="no_public_land"> - L'area selezionata non è pubblica. - </string> - <string name="not_owned_by_you"> - Hai selezionato una terra posseduta da un altro utente. -Prova a selezionare un'area più piccola. - </string> - <string name="processing"> - Stiamo elaborando il tuo acquisto... - -(Potrebbe volerci un minuto o due.) - </string> - <string name="fetching_error"> - C'e stato un errore mentre si stavano ottenendo le informazioni sull'acquisto della terra. - </string> - <string name="buying_will"> - Comprando questa terra: - </string> - <string name="buying_for_group"> - Comprare la terra per il gruppo farà: - </string> - <string name="cannot_buy_now"> - Non puoi comprare ora: - </string> - <string name="not_for_sale"> - Non in vendita: - </string> - <string name="none_needed"> - nessuno necessario - </string> - <string name="must_upgrade"> - Il tuo tipo di account ha bisogno di un upgrade per possedere terra. - </string> - <string name="cant_own_land"> - Il tuo account può possedere terra. - </string> - <string name="land_holdings"> - Sei proprietario di [BUYER] m² di terreno. - </string> - <string name="pay_to_for_land"> - Paga [AMOUNT] L$ a [SELLER] per questa terra - </string> - <string name="buy_for_US"> - Acquista L$ [AMOUNT] per circa [LOCAL_AMOUNT], - </string> - <string name="parcel_meters"> - Questo lotto è di [AMOUNT] m² - </string> - <string name="premium_land"> - Questo terreno è premium, e costerà come [AMOUNT] m². - </string> - <string name="discounted_land"> - Questo terreno è scontato, e costerà come [AMOUNT] m². - </string> - <string name="meters_supports_object"> - [AMOUNT] m² -consente [AMOUNT2] oggetti - </string> - <string name="sold_with_objects"> - venduta con oggetti - </string> - <string name="sold_without_objects"> - Oggetti non inclusi - </string> - <string name="info_price_string"> - L$ [PRICE] -([PREZZO_PER_MQ] L$/m²) -[VENDUTO_CON_OGGETTI] - </string> - <string name="insufficient_land_credits"> - Il gruppo [GROUP] avrà bisogno di contribuzioni anticipate, mediante crediti d'uso terriero, -sufficienti a coprire l'area del terreno prima che l'acquisto -sia completato. - </string> - <string name="have_enough_lindens"> - Hai [AMOUNT] L$, che sono sufficienti per comprare questa terra. - </string> - <string name="not_enough_lindens"> - Hai solo [AMOUNT] L$, ed hai bisogno di altri [AMOUNT2] L$. - </string> - <string name="balance_left"> - Dopo l'acquisto, ti rimarranno [AMOUNT] L$. - </string> - <string name="balance_needed"> - Hai bisogno di acquistare almeno [AMOUNT] L$ per comprare questo terreno. - </string> - <string name="no_parcel_selected"> - (nessun terreno selezionato) - </string> - <string name="buy_currency"> - Compra [LINDENS] L$ per appross. [USD] US$ - </string> </floater> diff --git a/indra/newview/skins/default/xui/it/floater_buy_object.xml b/indra/newview/skins/default/xui/it/floater_buy_object.xml index 5f3413931b..895d8aa746 100644 --- a/indra/newview/skins/default/xui/it/floater_buy_object.xml +++ b/indra/newview/skins/default/xui/it/floater_buy_object.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="contents" title="COMPRA COPIA DELL'OGGETTO"> +<floater name="contents" title="ACQUISTA COPIA DELL'OGGETTO"> <text name="contents_text"> Contiene: </text> diff --git a/indra/newview/skins/default/xui/it/floater_camera.xml b/indra/newview/skins/default/xui/it/floater_camera.xml index 182f82f17f..febbfd2739 100644 --- a/indra/newview/skins/default/xui/it/floater_camera.xml +++ b/indra/newview/skins/default/xui/it/floater_camera.xml @@ -9,23 +9,35 @@ <floater.string name="move_tooltip"> Muovi la telecamera su e giù e a sinistra e destra </floater.string> + <floater.string name="orbit_mode_title"> + Ruota visuale + </floater.string> + <floater.string name="pan_mode_title"> + Panoramica + </floater.string> + <floater.string name="avatar_view_mode_title"> + Valori predefiniti + </floater.string> + <floater.string name="free_mode_title"> + Vedi oggetto + </floater.string> <panel name="controls"> - <joystick_track name="cam_track_stick" tool_tip="Sposta la visuale sù e giù, sinistra e destra"/> + <joystick_track name="cam_track_stick" tool_tip="Sposta la visuale in su e in giù, a sinistra e a destra"/> <panel name="zoom" tool_tip="Avvicina la telecamera nell'inquadratura"> - <slider_bar name="zoom_slider" tool_tip="Zoom verso il focus"/> + <slider_bar name="zoom_slider" tool_tip="Zoom verso il centro focale"/> </panel> - <joystick_rotate name="cam_rotate_stick" tool_tip="Ruota la visuale intorno al focus"/> + <joystick_rotate name="cam_rotate_stick" tool_tip="Ruota la visuale intorno al punto focale"/> <panel name="camera_presets"> <button name="rear_view" tool_tip="Visuale posteriore"/> - <button name="group_view" tool_tip="Visuale di Gruppo"/> - <button name="front_view" tool_tip="Visuale Frontale"/> - <button name="mouselook_view" tool_tip="Visuale Mouselook"/> + <button name="group_view" tool_tip="Visuale di gruppo"/> + <button name="front_view" tool_tip="Visuale frontale"/> + <button name="mouselook_view" tool_tip="Visuale soggettiva"/> </panel> </panel> <panel name="buttons"> <button label="" name="orbit_btn" tool_tip="Ruota la visuale"/> - <button label="" name="pan_btn" tool_tip="Visuale Panoramica"/> - <button label="" name="avatarview_btn" tool_tip="Guardare un avatar"/> + <button label="" name="pan_btn" tool_tip="Visuale panoramica"/> + <button label="" name="avatarview_btn" tool_tip="Valori predefiniti"/> <button label="" name="freecamera_btn" tool_tip="Vedi oggetto"/> </panel> </floater> diff --git a/indra/newview/skins/default/xui/it/floater_color_picker.xml b/indra/newview/skins/default/xui/it/floater_color_picker.xml index 8551d65da2..38d4a0a037 100644 --- a/indra/newview/skins/default/xui/it/floater_color_picker.xml +++ b/indra/newview/skins/default/xui/it/floater_color_picker.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="ColorPicker" title="SELETTORE di COLORE"> +<floater name="ColorPicker" title="SELETTORE DI COLORE"> <text name="r_val_text"> Rosso: </text> @@ -24,10 +24,10 @@ Luminosità: </text> <spinner left="84" name="lspin" width="47"/> - <check_box label="Applica ora" name="apply_immediate"/> + <check_box label="Applica adesso" name="apply_immediate"/> <button left_delta="150" name="color_pipette"/> <button label="Annulla" label_selected="Annulla" left_delta="55" name="cancel_btn"/> - <button label="Ok" label_selected="Ok" name="select_btn"/> + <button label="OK" label_selected="OK" name="select_btn"/> <text name="Current color:"> Colore attuale: </text> diff --git a/indra/newview/skins/default/xui/it/floater_customize.xml b/indra/newview/skins/default/xui/it/floater_customize.xml index 63e08444cd..75ddf43f65 100644 --- a/indra/newview/skins/default/xui/it/floater_customize.xml +++ b/indra/newview/skins/default/xui/it/floater_customize.xml @@ -1,7 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater customize" title="ASPETTO" width="551"> <tab_container name="customize tab container" tab_min_width="120" width="549"> - <placeholder label="Parti del corpo" name="body_parts_placeholder"/> + <text label="Parti del corpo" name="body_parts_placeholder"> + Parti del corpo + </text> <panel label="Forma del corpo" left="124" name="Shape" width="389"> <button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" left="267" name="Revert" width="120"/> <button label="Corpo" label_selected="Corpo" name="Body"/> @@ -14,8 +16,8 @@ <button label="Torso" label_selected="Torso" name="Torso"/> <button label="Gambe" label_selected="Gambe" name="Legs"/> <radio_group name="sex radio"> - <radio_item label="Femmina" name="radio"/> - <radio_item label="Maschio" name="radio2"/> + <radio_item label="Femmina" name="radio" value="0"/> + <radio_item label="Maschio" name="radio2" value="1"/> </radio_group> <text name="title"> [DESC] @@ -33,8 +35,7 @@ Ubicato in [PATH] </text> <text name="not worn instructions"> - Indossa una nuova Forma del Corpo trascinandone una dall'inventario -sul tuo avatar. In alternativa, puoi crearne una nuova ed indossarla. + Metti una nuova figura corporea trascinandola dal tuo inventario sul tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo. </text> <text name="no modify instructions"> Non hai il permesso di modificare questo indumento. @@ -67,8 +68,7 @@ sul tuo avatar. In alternativa, puoi crearne una nuova ed indossarla. Ubicata in [PATH] </text> <text name="not worn instructions"> - Indossa una nuova pelle trascinandola dall'inventario al tuo avatar. -In alternativa, puoi crearne una nuova da zero ed indossarla. + Per mettere una nuova pelle, trascinala dal tuo inventario sul tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo. </text> <text name="no modify instructions"> Non hai il permesso di modificare questo indumento. @@ -105,8 +105,7 @@ In alternativa, puoi crearne una nuova da zero ed indossarla. Ubicati in [PATH] </text> <text name="not worn instructions"> - Indossa dei nuovi capelli trascinandoli dall'inventario al tuo avatar. -In alternativa, puoi crearne di nuovi da zero ed indossarli. + Per cambiare capelli, trascinali dal tuo inventario sul tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo. </text> <text name="no modify instructions"> Non hai il permesso per modificare questo indumento. @@ -137,8 +136,7 @@ In alternativa, puoi crearne di nuovi da zero ed indossarli. Ubicati in [PATH] </text> <text name="not worn instructions"> - Indossa dei nuovi occhi trascinandoli dall'inventario al tuo avatar. -In alternativa, puoi crearne di nuovi da zero ed indossarli. + Puoi cambiare gli occhi trascinandoli dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo. </text> <text name="no modify instructions"> Non hai il permesso di modificare questo indumento. @@ -152,12 +150,14 @@ In alternativa, puoi crearne di nuovi da zero ed indossarli. <button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/> <button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" left="267" name="Revert" width="120"/> </panel> - <placeholder label="Vestiti" name="clothes_placeholder"/> + <text label="Vestiti" name="clothes_placeholder"> + Abiti + </text> <panel label="Camicia" name="Shirt"> <texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere un'immagine"/> <color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/> - <button label="Crea una nuova camicia" label_selected="Crea una nuova camicia" name="Create New"/> <button label="Togli" label_selected="Togli" name="Take Off"/> + <button label="Crea una nuova camicia" label_selected="Crea una nuova camicia" name="Create New"/> <button label="Salva" label_selected="Salva" left="95" name="Save" width="72"/> <button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/> <button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" left="267" name="Revert" width="120"/> @@ -177,8 +177,7 @@ In alternativa, puoi crearne di nuovi da zero ed indossarli. Ubicata in [PATH] </text> <text name="not worn instructions"> - Indossa una nuova maglietta trascinandola dall'inventario al tuo avatar. -In alternativa, puoi crearne una nuova da zero ed indossarla. + Metti una nuova camicia trascinandola dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo. </text> <text name="no modify instructions"> Non hai il permesso di modificare questo indumento. @@ -190,8 +189,8 @@ In alternativa, puoi crearne una nuova da zero ed indossarla. <panel label="Pantaloni" name="Pants"> <texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere un'immagine"/> <color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/> - <button label="Crea nuovi pantaloni" label_selected="Crea nuovi pantaloni" name="Create New"/> <button label="Togli" label_selected="Togli" name="Take Off"/> + <button label="Crea nuovi pantaloni" label_selected="Crea nuovi pantaloni" name="Create New"/> <button label="Salva" label_selected="Salva" left="95" name="Save" width="72"/> <button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/> <button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" left="267" name="Revert" width="120"/> @@ -211,8 +210,7 @@ In alternativa, puoi crearne una nuova da zero ed indossarla. Ubicati in [PATH] </text> <text name="not worn instructions"> - Indossa dei nuovi pantaloni trascinandoli dall'inventario al tuo avatar. -In alternativa, puoi crearne uno paio nuovo da zero ed indossarlo. + Metti dei nuovi pantaloni trascinandoli dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo. </text> <text name="no modify instructions"> Non hai il permesso di modificare questo indumento. @@ -238,9 +236,9 @@ In alternativa, puoi crearne uno paio nuovo da zero ed indossarlo. Ubicate in [PATH] </text> <text name="not worn instructions"> - Indossa delle nuove scarpe trascinandole dall'inventario al tuo avatar. -In alternativa, puoi crearne uno paio nuovo da zero ed indossarlo. + Metti delle nuove scarpe trascinandole dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo. </text> + <button label="Crea nuove scarpe" label_selected="Crea nuove scarpe" name="Create New"/> <text name="no modify instructions"> Non hai il permesso di modificare questo indumento. </text> @@ -249,7 +247,6 @@ In alternativa, puoi crearne uno paio nuovo da zero ed indossarlo. </text> <texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere un'immagine"/> <color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/> - <button label="Crea nuove scarpe" label_selected="Crea nuove scarpe" name="Create New"/> <button label="Togli" label_selected="Togli" name="Take Off"/> <button label="Salva" label_selected="Salva" left="95" name="Save" width="72"/> <button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/> @@ -272,9 +269,9 @@ In alternativa, puoi crearne uno paio nuovo da zero ed indossarlo. Ubicato in [PATH] </text> <text name="not worn instructions"> - Indossa delle nuove calze trascinandole dall'inventario al tuo avatar. -In alternativa, puoi crearne uno paio nuovo da zero ed indossarlo. + Metti delle nuove calze trascinandole dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo. </text> + <button label="Crea nuove calze" label_selected="Crea nuove calze" name="Create New"/> <text name="no modify instructions"> Non hai il permesso di modificare questo indumento. </text> @@ -283,7 +280,6 @@ In alternativa, puoi crearne uno paio nuovo da zero ed indossarlo. </text> <texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere un'immagine"/> <color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/> - <button label="Crea nuove calze" label_selected="Crea nuove calze" name="Create New"/> <button label="Togli" label_selected="Togli" name="Take Off"/> <button label="Salva" label_selected="Salva" left="95" name="Save" width="72"/> <button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/> @@ -306,9 +302,9 @@ In alternativa, puoi crearne uno paio nuovo da zero ed indossarlo. Ubicata in [PATH] </text> <text name="not worn instructions"> - Indossa una nuova giacca trascinandola dall'inventario al tuo avatar. -In alternativa, puoi crearne una nuova da zero ed indossarla. + Metti una nuova giacca trascinandola dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo. </text> + <button label="Crea una nuova giacca" label_selected="Crea una nuova giacca" name="Create New"/> <text name="no modify instructions"> Non hai il permesso di modificare questo indumento. </text> @@ -318,7 +314,6 @@ In alternativa, puoi crearne una nuova da zero ed indossarla. <texture_picker label="Tessuto: superiore" name="Upper Fabric" tool_tip="Clicca per scegliere un'immagine" width="96"/> <texture_picker label="Tessuto: inferiore" name="Lower Fabric" tool_tip="Clicca per scegliere un'immagine" width="96"/> <color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/> - <button label="Crea una nuova giacca" label_selected="Crea una nuova giacca" name="Create New"/> <button label="Togli" label_selected="Togli" name="Take Off"/> <button label="Salva" label_selected="Salva" left="95" name="Save" width="72"/> <button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/> @@ -341,9 +336,9 @@ In alternativa, puoi crearne una nuova da zero ed indossarla. Ubicati in [PATH] </text> <text name="not worn instructions"> - Indossa dei nuovi guanti trascinandoli dall'inventario al tuo avatar. -In alternativa, puoi crearne un paio nuovo da zero ed indossarlo. + Metti dei nuovi guanti trascinandoli dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo. </text> + <button label="Crea nuovi guanti" label_selected="Crea nuovi guanti" name="Create New"/> <text name="no modify instructions"> Non hai il permesso di modificare questo indumento. </text> @@ -352,7 +347,6 @@ In alternativa, puoi crearne un paio nuovo da zero ed indossarlo. </text> <texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere un'immagine"/> <color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/> - <button label="Crea nuovi guanti" label_selected="Crea nuovi guanti" name="Create New"/> <button font="SansSerifSmall" label="Rimuovi l'indumento" label_selected="Rimuovi l'indumento" name="Take Off" width="115"/> <button label="Salva" label_selected="Salva" left="95" name="Save" width="72"/> <button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/> @@ -375,9 +369,9 @@ In alternativa, puoi crearne un paio nuovo da zero ed indossarlo. Ubicata in [PATH] </text> <text name="not worn instructions"> - Indossa una nuova canottiera trascinandola dall'inventario al tuo avatar. -In alternativa, puoi crearne una nuovo da zero ed indossarla. + Metti una nuova maglietta intima trascinandola dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo. </text> + <button label="Crea una nuova canottiera" label_selected="Crea una nuova canottiera" name="Create New"/> <text name="no modify instructions"> Non hai il permesso di modificare questo indumento. </text> @@ -386,7 +380,6 @@ In alternativa, puoi crearne una nuovo da zero ed indossarla. </text> <texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere un'immagine"/> <color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/> - <button label="Crea una nuova canottiera" label_selected="Crea una nuova canottiera" name="Create New"/> <button font="SansSerifSmall" label="Rimuovi l'indumento" label_selected="Rimuovi l'indumento" name="Take Off" width="115"/> <button label="Salva" label_selected="Salva" left="95" name="Save" width="72"/> <button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/> @@ -409,9 +402,9 @@ In alternativa, puoi crearne una nuovo da zero ed indossarla. Ubicato in [PATH] </text> <text name="not worn instructions"> - Indossa delle nuove mutande trascinandole dall'inventario al tuo avatar. -In alternativa, puoi crearne una paio nuovo da zero ed indossarlo. + Metti dei nuovi slip trascinandoli dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo. </text> + <button label="Crea nuove mutande" label_selected="Crea nuove mutande" name="Create New"/> <text name="no modify instructions"> Non hai il permesso di modificare questo indumento. </text> @@ -420,7 +413,6 @@ In alternativa, puoi crearne una paio nuovo da zero ed indossarlo. </text> <texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere un'immagine"/> <color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/> - <button label="Crea nuove mutande" label_selected="Crea nuove mutande" name="Create New"/> <button font="SansSerifSmall" label="Rimuovi l'indumento" label_selected="Rimuovi l'indumento" name="Take Off" width="115"/> <button label="Salva" label_selected="Salva" left="95" name="Save" width="72"/> <button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/> @@ -443,9 +435,9 @@ In alternativa, puoi crearne una paio nuovo da zero ed indossarlo. Ubicata in [PATH] </text> <text name="not worn instructions"> - Indossa una nuova gonna trascinandola dall'inventario al tuo avatar. -In alternativa, puoi crearne una nuova da zero ed indossarla. + Metti una nuova gonna trascinandola dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo. </text> + <button label="Crea una nuova gonna" label_selected="Crea una nuova gonna" name="Create New"/> <text name="no modify instructions"> Non hai il permesso di modificare questo indumento. </text> @@ -454,13 +446,12 @@ In alternativa, puoi crearne una nuova da zero ed indossarla. </text> <texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere un'immagine"/> <color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/> - <button label="Crea una nuova gonna" label_selected="Crea una nuova gonna" name="Create New"/> <button font="SansSerifSmall" label="Rimuovi l'indumento" label_selected="Rimuovi l'indumento" name="Take Off" width="115"/> <button label="Salva" label_selected="Salva" left="95" name="Save" width="72"/> <button label="Salva come..." label_selected="Salva come..." left="171" name="Save As"/> <button font="SansSerifSmall" label="Annulla le modifiche" label_selected="Annulla le modifiche" left="267" name="Revert" width="120"/> </panel> - <panel label="Alpha" name="Alpha"> + <panel label="Tatuaggio" name="Tattoo"> <text name="title"> [DESC] </text> @@ -468,7 +459,7 @@ In alternativa, puoi crearne una nuova da zero ed indossarla. [DESC]: non può essere modificato </text> <text name="title_loading"> - [DESC]: caricando... + [DESC]: caricamento in corso... </text> <text name="title_not_worn"> [DESC]: non indossato @@ -477,27 +468,24 @@ In alternativa, puoi crearne una nuova da zero ed indossarla. Collocato in [PATH] </text> <text name="not worn instructions"> - Metti una nuova alpha mask trascinandone una dall'inventario del tuo avatar. -In alternativa, creane una nuova partendo da zero e indossala. + Metti un nuovo tatuaggio trascinandolo dal tuo inventario al avatar. Oppure, crea un nuovo tatuaggio e indossalo. </text> + <button label="Crea un nuovo tatuaggio" label_selected="Crea un nuovo tatuaggio" name="Create New"/> <text name="no modify instructions"> - Non hai i permessi per modificare questa vestibilità. + Non hai i permessi per modificare questo capo. </text> <text name="Item Action Label"> - Alpha: + Tatuaggio: </text> - <texture_picker label="Alpha inferiore" name="Lower Alpha" tool_tip="Clicca per scegliere una fotografia"/> - <texture_picker label="Alpha superiore" name="Upper Alpha" tool_tip="Clicca per scegliere una foto"/> - <texture_picker label="Alpha della testa" name="Head Alpha" tool_tip="Clicca per scegliere una fotografia"/> - <texture_picker label="Alpha dell'occhio" name="Eye Alpha" tool_tip="Clicca per scegliere una fotografia"/> - <texture_picker label="Alpha dei capelli" name="Hair Alpha" tool_tip="Clicca per scegiere una fotografia"/> - <button label="Crea nuova alpha" label_selected="Crea nuova alpha" name="Create New"/> + <texture_picker label="Tatuaggio della testa" name="Head Tattoo" tool_tip="Clicca per scegliere una fotografia"/> + <texture_picker label="Tatuaggio superiore" name="Upper Tattoo" tool_tip="Clicca per scegliere una fotografia"/> + <texture_picker label="Tattuaggio inferiore" name="Lower Tattoo" tool_tip="Clicca per scegliere una fotografia"/> <button label="Togli" label_selected="Togli" name="Take Off"/> <button label="Salva" label_selected="Salva" name="Save"/> <button label="Salva con nome..." label_selected="Salva con nome..." name="Save As"/> <button label="Ripristina" label_selected="Ripristina" name="Revert"/> </panel> - <panel label="Tatuaggio" name="Tattoo"> + <panel label="Alpha (Trasparenza)" name="Alpha"> <text name="title"> [DESC] </text> @@ -505,7 +493,7 @@ In alternativa, creane una nuova partendo da zero e indossala. [DESC]: non può essere modificato </text> <text name="title_loading"> - [DESC]: caricando... + [DESC]: caricamento in corso... </text> <text name="title_not_worn"> [DESC]: non indossato @@ -514,19 +502,20 @@ In alternativa, creane una nuova partendo da zero e indossala. Collocato in [PATH] </text> <text name="not worn instructions"> - Metti un nuovo tatuaggio trascinandone uno dall'inventario del tuo avatar. -In alternativa, creane uno nuovo partendo da zero e indossalo. + Metti una nuova alpha mask trascinandola dal tuo inventario al tuo avatar. Oppure, crea un nuovo tatuaggio e indossalo. </text> + <button label="Crea nuovo Alpha" label_selected="Crea nuovo Alpha" name="Create New"/> <text name="no modify instructions"> - Non hai i permessi per moficare questa vestibilità. + Non hai i permessi per modificare questo capo. </text> <text name="Item Action Label"> - Tatuaggio: + Alpha: </text> - <texture_picker label="Tatuaggio della testa" name="Head Tattoo" tool_tip="Clicca per scegliere una foto"/> - <texture_picker label="Tatuaggio superiore" name="Upper Tattoo" tool_tip="Clicca per scegliere una fotografia"/> - <texture_picker label="Tatuaggio inferiore" name="Lower Tattoo" tool_tip="Clicca per scegliere una fotografia"/> - <button label="Crea Nuovo tatuaggio" label_selected="Crea un nuovo tatuaggio" name="Create New"/> + <texture_picker label="Alpha inferiore" name="Lower Alpha" tool_tip="Clicca per scegliere una fotografia"/> + <texture_picker label="Alpha superiore" name="Upper Alpha" tool_tip="Clicca per scegliere una fotografia"/> + <texture_picker label="Alpha della testa" name="Head Alpha" tool_tip="Clicca per scegliere una fotografia"/> + <texture_picker label="Alpha dell'occhio" name="Eye Alpha" tool_tip="Clicca per scegliere una fotografia"/> + <texture_picker label="Alpha dei capelli" name="Hair Alpha" tool_tip="Clicca per scegliere una fotografia"/> <button label="Togli" label_selected="Togli" name="Take Off"/> <button label="Salva" label_selected="Salva" name="Save"/> <button label="Salva con nome..." label_selected="Salva con nome..." name="Save As"/> @@ -534,6 +523,7 @@ In alternativa, creane uno nuovo partendo da zero e indossalo. </panel> </tab_container> <scroll_container left="254" name="panel_container"/> + <button label="Informazioni script" label_selected="Informazioni script" name="script_info" tool_tip="Mostra gli script collegati al tuo avatar"/> <button label="Crea vestiario" label_selected="Crea vestiario" name="make_outfit_btn"/> <button label="Annulla" label_selected="Annulla" name="Cancel"/> <button label="OK" label_selected="OK" name="Ok"/> diff --git a/indra/newview/skins/default/xui/it/floater_event.xml b/indra/newview/skins/default/xui/it/floater_event.xml new file mode 100644 index 0000000000..a0807e04c9 --- /dev/null +++ b/indra/newview/skins/default/xui/it/floater_event.xml @@ -0,0 +1,72 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater label="Evento" name="Event" title="DETTAGLI DELL'EVENTO"> + <floater.string name="none"> + nessuno + </floater.string> + <floater.string name="notify"> + Avvisare + </floater.string> + <floater.string name="dont_notify"> + Non avvisare + </floater.string> + <floater.string name="moderate"> + Moderato + </floater.string> + <floater.string name="adult"> + Adulto + </floater.string> + <floater.string name="general"> + Generale + </floater.string> + <floater.string name="unknown"> + Sconosciuto + </floater.string> + <layout_stack name="layout"> + <layout_panel name="profile_stack"> + <text name="event_name"> + Evento senza nome...di Doom De doom! Doom doom. + </text> + <text name="event_category"> + (nessuna categoria) + </text> + <text name="event_runby_label"> + Organizzato da: + </text> + <text initial_value="(recupero)" name="event_runby"/> + <text name="event_date_label"> + Data: + </text> + <text name="event_date"> + 10/10/2010 + </text> + <text name="event_duration_label"> + Durata: + </text> + <text name="event_duration"> + 1 ora + </text> + <text name="event_covercharge_label"> + Costo: + </text> + <text name="event_cover"> + Gratis + </text> + <text name="event_location_label"> + Luogo: + </text> + <text name="event_location" value="SampleParcel, Name Long (145, 228, 26)"/> + <text name="rating_label" value="Categoria:"/> + <text name="rating_value" value="sconosciuto"/> + <expandable_text name="event_desc"> + Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + </expandable_text> + </layout_panel> + <layout_panel name="button_panel"> + <button name="create_event_btn" tool_tip="Crea evento"/> + <button name="god_delete_event_btn" tool_tip="Elimina evento"/> + <button label="Avvisami" name="notify_btn"/> + <button label="Teleport" name="teleport_btn"/> + <button label="Mappa" name="map_btn"/> + </layout_panel> + </layout_stack> +</floater> diff --git a/indra/newview/skins/default/xui/it/floater_gesture.xml b/indra/newview/skins/default/xui/it/floater_gesture.xml index eefa3bb392..b9419ebc22 100644 --- a/indra/newview/skins/default/xui/it/floater_gesture.xml +++ b/indra/newview/skins/default/xui/it/floater_gesture.xml @@ -1,24 +1,24 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater label="Posti" name="gestures" title="GESTURES"> +<floater label="Luoghi" name="gestures" title="GESTURE"> <floater.string name="loading"> - Caricando... + Caricamento in corso... </floater.string> <floater.string name="playing"> - (Riproducendo) + (Riproduzione in corso) </floater.string> <floater.string name="copy_name"> Copia di [COPY_NAME] </floater.string> - <scroll_list bottom_delta="-385" height="360" name="gesture_list"> - <scroll_list.columns label="Nome" name="name" width="129"/> - <scroll_list.columns label="Chat" name="trigger" width="106"/> - <scroll_list.columns label="Pulsante" name="shortcut" width="65"/> + <scroll_list name="gesture_list"> + <scroll_list.columns label="Nome" name="name"/> + <scroll_list.columns label="Chat" name="trigger"/> + <scroll_list.columns label="Pulsante" name="shortcut"/> </scroll_list> <panel label="bottom_panel" name="bottom_panel"> - <menu_button name="gear_btn" tool_tip="Più opzioni"/> + <menu_button name="gear_btn" tool_tip="Altre opzioni"/> <button name="new_gesture_btn" tool_tip="Crea nuova gesture"/> - <button name="activate_btn" tool_tip="Attiva/Disattiva la gesture selezionata"/> - <button name="del_btn" tool_tip="Cancella questa gesture"/> + <button name="activate_btn" tool_tip="Attiva/Disattiva gesture selezionata"/> + <button name="del_btn" tool_tip="Elimina questa gesture"/> </panel> <button label="Modifica" name="edit_btn"/> <button label="Play" name="play_btn"/> diff --git a/indra/newview/skins/default/xui/it/floater_god_tools.xml b/indra/newview/skins/default/xui/it/floater_god_tools.xml new file mode 100644 index 0000000000..23d44780ac --- /dev/null +++ b/indra/newview/skins/default/xui/it/floater_god_tools.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="godtools floater" title="GOD TOOLS"> + <tab_container name="GodTools Tabs"> + <panel label="Grid" name="grid"> + <button label="Espelli tutti i residenti" label_selected="Espelli tutti i residenti" name="Kick all users"/> + </panel> + <panel label="Region" name="region"> + <check_box label="Reset Home On Teleport" name="check reset home" tool_tip="Quando un residente esce con un teleport, reimposta la sua posizione di base sul luogo di destinazione."/> + </panel> + </tab_container> +</floater> diff --git a/indra/newview/skins/default/xui/it/floater_help_browser.xml b/indra/newview/skins/default/xui/it/floater_help_browser.xml index 9a158c5216..008643afac 100644 --- a/indra/newview/skins/default/xui/it/floater_help_browser.xml +++ b/indra/newview/skins/default/xui/it/floater_help_browser.xml @@ -1,8 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_help_browser" title="HELP BROWSER"> +<floater name="floater_help_browser" title="BROWSER DELL'AIUTO"> + <floater.string name="loading_text"> + Caricamento in corso... + </floater.string> <layout_stack name="stack1"> - <layout_panel name="external_controls"> - <button label="Apri nel mio Web Browser" name="open_browser"/> - </layout_panel> + <layout_panel name="external_controls"/> </layout_stack> </floater> diff --git a/indra/newview/skins/default/xui/it/floater_hud.xml b/indra/newview/skins/default/xui/it/floater_hud.xml index e458913452..437d2d6496 100644 --- a/indra/newview/skins/default/xui/it/floater_hud.xml +++ b/indra/newview/skins/default/xui/it/floater_hud.xml @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_hud" title="TUTORIAL"/> +<floater name="floater_hud" title="ESERCITAZIONE"/> diff --git a/indra/newview/skins/default/xui/it/floater_im.xml b/indra/newview/skins/default/xui/it/floater_im.xml index 6303615e60..aa916adf2c 100644 --- a/indra/newview/skins/default/xui/it/floater_im.xml +++ b/indra/newview/skins/default/xui/it/floater_im.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <multi_floater name="im_floater" title=""> <string name="only_user_message"> - Sei l'unico utente di questa sessione. + Sei il solo residente presente nella sessione. </string> <string name="offline_message"> [FIRST] [LAST] è offline. @@ -10,7 +10,7 @@ Clicca il tasto [BUTTON NAME] per accettare/connetterti a questa voice chat. </string> <string name="muted_message"> - Hai bloccato questo residente. Spedendo un messaggio sarà automaticamente sbloccati. + Hai bloccato questo residente. Quando gli invii un messaggio, verrà automaticamente sbloccato. </string> <string name="generic_request_error"> Errore durante la richiesta, riprova più tardi. @@ -31,7 +31,7 @@ Un moderatore di gruppo ti ha disabilitato dalla chat di testo. </string> <string name="add_session_event"> - Impossibile aggiungere utenti alla chat con [RECIPIENT]. + Impossibile aggiungere residenti alla sessione chat con [RECIPIENT]. </string> <string name="message_session_event"> Impossibile inviare il messaggio nella chat con [RECIPIENT]. diff --git a/indra/newview/skins/default/xui/it/floater_im_container.xml b/indra/newview/skins/default/xui/it/floater_im_container.xml index 2970639f4c..fb8e77b32f 100644 --- a/indra/newview/skins/default/xui/it/floater_im_container.xml +++ b/indra/newview/skins/default/xui/it/floater_im_container.xml @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<multi_floater name="floater_im_box" title="Instant Messages"/> +<multi_floater name="floater_im_box" title="CONVERSAZIONI"/> diff --git a/indra/newview/skins/default/xui/it/floater_im_session.xml b/indra/newview/skins/default/xui/it/floater_im_session.xml index 830c65b443..8d395ea04b 100644 --- a/indra/newview/skins/default/xui/it/floater_im_session.xml +++ b/indra/newview/skins/default/xui/it/floater_im_session.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="panel_im"> <layout_stack name="im_panels"> - <layout_panel label="Pannello di Controllo IM" name="panel_im_control_panel"/> + <layout_panel label="Pannello di controllo IM" name="panel_im_control_panel"/> <layout_panel> <line_editor label="A" name="chat_editor"/> </layout_panel> diff --git a/indra/newview/skins/default/xui/it/floater_image_preview.xml b/indra/newview/skins/default/xui/it/floater_image_preview.xml index 341202d8bc..6169c0222d 100644 --- a/indra/newview/skins/default/xui/it/floater_image_preview.xml +++ b/indra/newview/skins/default/xui/it/floater_image_preview.xml @@ -12,15 +12,15 @@ immagine come: </text> <combo_box label="Tipo d'abito" left="120" name="clothing_type_combo" width="166"> <combo_box.item label="Immagine" name="Image"/> - <combo_box.item label="Capelli" name="Hair"/> - <combo_box.item label="Testa Femminile" name="FemaleHead"/> - <combo_box.item label="Corpo Femminile Superiore" name="FemaleUpperBody"/> - <combo_box.item label="Corpo Femminile Inferiore" name="FemaleLowerBody"/> - <combo_box.item label="Testa Maschile" name="MaleHead"/> - <combo_box.item label="Corpo Maschile Superiore" name="MaleUpperBody"/> - <combo_box.item label="Corpo Maschile Inferiore" name="MaleLowerBody"/> + <combo_box.item label="Capigliature" name="Hair"/> + <combo_box.item label="Testa femminile" name="FemaleHead"/> + <combo_box.item label="Parte superiore del corpo femminile" name="FemaleUpperBody"/> + <combo_box.item label="Parte inferiore del corpo femminile" name="FemaleLowerBody"/> + <combo_box.item label="Testa maschile" name="MaleHead"/> + <combo_box.item label="Parte superiore del corpo maschile" name="MaleUpperBody"/> + <combo_box.item label="Parte inferiore del corpo maschile" name="MaleLowerBody"/> <combo_box.item label="Gonna" name="Skirt"/> - <combo_box.item label="Sculpted Prim" name="SculptedPrim"/> + <combo_box.item label="Prim Sculpted" name="SculptedPrim"/> </combo_box> <text name="bad_image_text"> Non è stato possibile leggere l'immagine. diff --git a/indra/newview/skins/default/xui/it/floater_incoming_call.xml b/indra/newview/skins/default/xui/it/floater_incoming_call.xml index fc7b8de6f4..81a6ea7a60 100644 --- a/indra/newview/skins/default/xui/it/floater_incoming_call.xml +++ b/indra/newview/skins/default/xui/it/floater_incoming_call.xml @@ -1,16 +1,22 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="incoming call" title="UNA PERSONA SCONOSCIUTA STA' CHIAMANDO"> +<floater name="incoming call" title="UNA PERSONA SCONOSCIUTA STA CHIAMANDO"> + <floater.string name="lifetime"> + 5 + </floater.string> <floater.string name="localchat"> - Voice Chat nei dintorni + Chat vocale nei dintorni </floater.string> <floater.string name="anonymous"> anonimo </floater.string> <floater.string name="VoiceInviteP2P"> - stà chiamando. + sta chiamando. </floater.string> <floater.string name="VoiceInviteAdHoc"> - ha aggiunto una chiamata in Voice Chat ad una conferenza in chat. + ha aderito ad una chiamata in chat vocale in conferenza. + </floater.string> + <floater.string name="VoiceInviteGroup"> + ha accettato una chiamata in Chat vocale con il gruppo [GROUP]. </floater.string> <text name="question"> Vuoi abbandonare [CURRENT_CHAT] e aderire a questa voice chat? diff --git a/indra/newview/skins/default/xui/it/floater_inventory.xml b/indra/newview/skins/default/xui/it/floater_inventory.xml index e332891ed2..2aa6795988 100644 --- a/indra/newview/skins/default/xui/it/floater_inventory.xml +++ b/indra/newview/skins/default/xui/it/floater_inventory.xml @@ -1,13 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Inventory" title="INVENTARIO"> +<floater name="Inventory" title="IL MIO INVENTARIO"> <floater.string name="Title"> - Inventario + IL MIO INVENTARIO </floater.string> <floater.string name="TitleFetching"> - Inventario (Fetching [ITEM_COUNT] Items...) [FILTER] + IL MIO INVENTARIO (recupero di [ITEM_COUNT] articoli...) [FILTER] </floater.string> <floater.string name="TitleCompleted"> - Inventario ([ITEM_COUNT] Items) [FILTER] + IL MIO INVENTARIO ([ITEM_COUNT] articoli) [FILTER] </floater.string> <floater.string name="Fetched"> Completato diff --git a/indra/newview/skins/default/xui/it/floater_lagmeter.xml b/indra/newview/skins/default/xui/it/floater_lagmeter.xml index 93bf11b069..f7b2b1ab4a 100644 --- a/indra/newview/skins/default/xui/it/floater_lagmeter.xml +++ b/indra/newview/skins/default/xui/it/floater_lagmeter.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_lagmeter" title="LAG METER"> +<floater name="floater_lagmeter" title="MISURATORE LAG"> <floater.string name="max_title_msg"> Misuratore del lag </floater.string> @@ -136,7 +136,7 @@ <text left="30" name="client_lag_cause" right="-10"/> <button label="" label_selected="" name="network_lagmeter" tool_tip="Stato del lag del network"/> <text name="network"> - Network + Rete </text> <text font="SansSerifSmall" name="network_text"> Normale @@ -150,5 +150,5 @@ Normale </text> <text left="30" name="server_lag_cause" right="-32"/> - <button label=">>" name="minimize" tool_tip="Pulsante per minimizzare"/> + <button label=">>" name="minimize" tool_tip="Cambia dimensioni floater"/> </floater> diff --git a/indra/newview/skins/default/xui/it/floater_land_holdings.xml b/indra/newview/skins/default/xui/it/floater_land_holdings.xml index 9f2884448d..1b2f2605f7 100644 --- a/indra/newview/skins/default/xui/it/floater_land_holdings.xml +++ b/indra/newview/skins/default/xui/it/floater_land_holdings.xml @@ -1,13 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="land holdings floater" title="LA MIA TERRA"> +<floater name="land holdings floater" title="IL MIO TERRENO"> <scroll_list name="parcel list"> - <column label="Parcel" name="name"/> + <column label="Lotto" name="name"/> <column label="Regione" name="location"/> <column label="Tipo" name="type"/> <column label="Area" name="area"/> </scroll_list> <button label="Teletrasportati" label_selected="Teletrasportati" name="Teleport" tool_tip="Teletrasportati al centro di questo terreno."/> - <button label="Mappa" label_selected="Mappa" name="Show on Map" tool_tip="Mostra questa terra nella mappa del mondo" width="130"/> + <button label="Mappa" label_selected="Mappa" name="Show on Map" tool_tip="Mostra il terreno sulla mappa del mondo" width="130"/> <text name="contrib_label"> Contributi ai tuoi gruppi: </text> diff --git a/indra/newview/skins/default/xui/it/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/it/floater_live_lsleditor.xml index d86b834c38..0bd2b02323 100644 --- a/indra/newview/skins/default/xui/it/floater_live_lsleditor.xml +++ b/indra/newview/skins/default/xui/it/floater_live_lsleditor.xml @@ -1,13 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="script ed float" title="SCRIPT: NUOVO SCRIPT"> <floater.string name="not_allowed"> - Non puoi vedere o modificare questo script, perchè è impostato come "no copy". Necesiti tutti i permessi per vedere o modificare lo script dentro un oggetto. + Per impostazione, questo script non può essere visualizzato né modificato. Per visualizzare o modificare uno script all'interno di un oggetto, devi avere i necessari diritti di modifica. </floater.string> <floater.string name="script_running"> In esecuzione </floater.string> <floater.string name="Title"> - Script: [NAME] + SCRIPT: [NAME] </floater.string> <button label="Ripristina" label_selected="Ripristina" name="Reset"/> <check_box initial_value="true" label="In esecuzione" left="4" name="running"/> diff --git a/indra/newview/skins/default/xui/it/floater_lsl_guide.xml b/indra/newview/skins/default/xui/it/floater_lsl_guide.xml index b699b280b6..47fe2de051 100644 --- a/indra/newview/skins/default/xui/it/floater_lsl_guide.xml +++ b/indra/newview/skins/default/xui/it/floater_lsl_guide.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="script ed float" title="LSL WIKI"> +<floater name="script ed float" title="RIFERIMENTO LSL"> <check_box label="Segui il cursore" name="lock_check"/> <combo_box label="Blocca" left_delta="120" name="history_combo" width="70"/> <button label="Indietro" left_delta="75" name="back_btn"/> diff --git a/indra/newview/skins/default/xui/it/floater_map.xml b/indra/newview/skins/default/xui/it/floater_map.xml index ec4bd4ef4a..70ab8dcb5a 100644 --- a/indra/newview/skins/default/xui/it/floater_map.xml +++ b/indra/newview/skins/default/xui/it/floater_map.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Map"> +<floater name="Map" title="Mini mappa"> <floater.string name="mini_map_north"> N </floater.string> diff --git a/indra/newview/skins/default/xui/it/floater_media_browser.xml b/indra/newview/skins/default/xui/it/floater_media_browser.xml index 0e25cef60b..0a8c0f1c41 100644 --- a/indra/newview/skins/default/xui/it/floater_media_browser.xml +++ b/indra/newview/skins/default/xui/it/floater_media_browser.xml @@ -9,13 +9,13 @@ <layout_stack name="stack1"> <layout_panel name="nav_controls"> <button label="Indietro" name="back" width="75"/> - <button label="Avanti" name="forward" left_delta="75" width="70"/> - <button label="Ricarica" name="reload" left_delta="75"/> + <button label="Avanti" left_delta="75" name="forward" width="70"/> + <button label="Ricarica" left_delta="75" name="reload"/> <combo_box left_delta="75" name="address" width="510"/> - <button label="Vai" name="go" left_delta="515"/> + <button label="Vai" left_delta="515" name="go"/> </layout_panel> <layout_panel name="parcel_owner_controls"> - <button label="Invia questo URL al terreno" name="assign"/> + <button label="Invia la pagina attuale al lotto" name="assign"/> </layout_panel> <layout_panel name="external_controls"> <button label="Apri nel web browser" name="open_browser"/> diff --git a/indra/newview/skins/default/xui/it/floater_media_settings.xml b/indra/newview/skins/default/xui/it/floater_media_settings.xml index b99a11b881..d521502a4c 100644 --- a/indra/newview/skins/default/xui/it/floater_media_settings.xml +++ b/indra/newview/skins/default/xui/it/floater_media_settings.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="media_settings" title="IMPOSTAZIONI MEDIA"> <button label="OK" label_selected="OK" name="OK"/> - <button label="Cancella" label_selected="Cancella" name="Cancel"/> + <button label="Annulla" label_selected="Annulla" name="Cancel"/> <button label="Applica" label_selected="Applica" name="Apply"/> </floater> diff --git a/indra/newview/skins/default/xui/it/floater_mem_leaking.xml b/indra/newview/skins/default/xui/it/floater_mem_leaking.xml index ee3d642fef..63074d5a4c 100644 --- a/indra/newview/skins/default/xui/it/floater_mem_leaking.xml +++ b/indra/newview/skins/default/xui/it/floater_mem_leaking.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="MemLeak" title="SIMULA UNA PERDITA DI MEMORIA"> +<floater name="MemLeak" title="SIMULA UNA FUGA DI MEMORIA"> <spinner label="Perdità di velocità (bytes per frame):" name="leak_speed"/> <spinner label="Memoria Persa Max (MB):" name="max_leak"/> <text name="total_leaked_label"> diff --git a/indra/newview/skins/default/xui/it/floater_moveview.xml b/indra/newview/skins/default/xui/it/floater_moveview.xml index edc5d9178d..26d861c566 100644 --- a/indra/newview/skins/default/xui/it/floater_moveview.xml +++ b/indra/newview/skins/default/xui/it/floater_moveview.xml @@ -1,35 +1,43 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="move_floater"> <string name="walk_forward_tooltip"> - Cammina in avanti (premi Freccia Sù o W) + Cammina in avanti (premi freccia su o W) </string> <string name="walk_back_tooltip"> - Cammina indietro (premi Freccia Giù o S) + Cammina indietro (premi freccia giù o S) </string> <string name="run_forward_tooltip"> - Corri in avanti (premi Freccia Sù o W) + Corri in avanti (premi freccia su o W) </string> <string name="run_back_tooltip"> - Corri indietro (premi Freccia Giù o S) + Corri indietro (premi freccia giù o S) </string> <string name="fly_forward_tooltip"> - Vola in avanti (premi Freccia Sù o W) + Vola in avanti (premi freccia su o W) </string> <string name="fly_back_tooltip"> - Vola indietro (premi Freccia Giù o S) + Vola indietro (premi freccia giù o S) + </string> + <string name="walk_title"> + Cammina + </string> + <string name="run_title"> + Corri + </string> + <string name="fly_title"> + Vola </string> <panel name="panel_actions"> - <button label="" label_selected="" name="turn left btn" tool_tip="Gira a sinistra (premi Freccia Sinistra o A)"/> - <button label="" label_selected="" name="turn right btn" tool_tip="Gira a destra (premi Freccia Destra o D)"/> - <button label="" label_selected="" name="move up btn" tool_tip="Vola in alto, premi "E""/> - <button label="" label_selected="" name="move down btn" tool_tip="Vola in basso, premi "C""/> - <joystick_turn name="forward btn" tool_tip="Cammina in avanti (premi Freccia Sù o W)"/> - <joystick_turn name="backward btn" tool_tip="Cammina indietro (premi Freccia Giù o S)"/> + <button label="" label_selected="" name="turn left btn" tool_tip="Gira a sinistra (premi freccia sinistra o A)"/> + <button label="" label_selected="" name="turn right btn" tool_tip="Gira a destra (premi freccia destra o D)"/> + <button label="" label_selected="" name="move up btn" tool_tip="Vola in alto, premi E"/> + <button label="" label_selected="" name="move down btn" tool_tip="Vola in basso, premi C"/> + <joystick_turn name="forward btn" tool_tip="Cammina in avanti (premi freccia su o W)"/> + <joystick_turn name="backward btn" tool_tip="Cammina indietro (premi freccia giù o S)"/> </panel> <panel name="panel_modes"> - <button label="" name="mode_walk_btn" tool_tip="Modalità per camminare"/> - <button label="" name="mode_run_btn" tool_tip="Modalità per correre"/> - <button label="" name="mode_fly_btn" tool_tip="Modalità di volo"/> - <button label="Ferma il volo" name="stop_fly_btn" tool_tip="Ferma il volo"/> + <button label="" name="mode_walk_btn" tool_tip="Modalità cammina"/> + <button label="" name="mode_run_btn" tool_tip="Modalità corsa"/> + <button label="" name="mode_fly_btn" tool_tip="Modalità volo"/> </panel> </floater> diff --git a/indra/newview/skins/default/xui/it/floater_nearby_chat.xml b/indra/newview/skins/default/xui/it/floater_nearby_chat.xml index 364b62fbdb..9878fe85ea 100644 --- a/indra/newview/skins/default/xui/it/floater_nearby_chat.xml +++ b/indra/newview/skins/default/xui/it/floater_nearby_chat.xml @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="nearby_chat" title="CHAT VICINA"/> +<floater name="nearby_chat" title="CHAT NEI DINTORNI"/> diff --git a/indra/newview/skins/default/xui/it/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/it/floater_outfit_save_as.xml new file mode 100644 index 0000000000..dff5f33e57 --- /dev/null +++ b/indra/newview/skins/default/xui/it/floater_outfit_save_as.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="modal container" title="Salva vestiario"> + <button label="Salva" label_selected="Salva" name="Save"/> + <button label="Annulla" label_selected="Annulla" name="Cancel"/> + <text name="Save item as:"> + Salva quello che indosso +come nuovo vestiario: + </text> + <line_editor name="name ed"> + [DESC] (nuovo) + </line_editor> +</floater> diff --git a/indra/newview/skins/default/xui/it/floater_outgoing_call.xml b/indra/newview/skins/default/xui/it/floater_outgoing_call.xml index f179364080..268d46e07e 100644 --- a/indra/newview/skins/default/xui/it/floater_outgoing_call.xml +++ b/indra/newview/skins/default/xui/it/floater_outgoing_call.xml @@ -1,5 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="outgoing call" title="CHIAMATA IN CORSO"> + <floater.string name="lifetime"> + 5 + </floater.string> <floater.string name="localchat"> Chat vocale nei dintorni </floater.string> @@ -21,6 +24,15 @@ <text name="noanswer"> Nessuna risposta. Riprova più tardi. </text> + <text name="nearby"> + Sei stato scollegato da [VOICE_CHANNEL_NAME]. [RECONNECT_NEARBY] + </text> + <text name="nearby_P2P_by_other"> + [VOICE_CHANNEL_NAME] ha chiuso la chiamata. [RECONNECT_NEARBY] + </text> + <text name="nearby_P2P_by_agent"> + Hai chiuso la chiamata. [RECONNECT_NEARBY] + </text> <text name="leaving"> Chiusura chat [CURRENT_CHAT]. </text> diff --git a/indra/newview/skins/default/xui/it/floater_pay_object.xml b/indra/newview/skins/default/xui/it/floater_pay_object.xml index 97e04c8bf4..37f549b5da 100644 --- a/indra/newview/skins/default/xui/it/floater_pay_object.xml +++ b/indra/newview/skins/default/xui/it/floater_pay_object.xml @@ -15,7 +15,7 @@ </text> <icon name="icon_object" tool_tip="Oggetti"/> <text left="120" name="object_name_text"> - ... + Il mio oggetto con un nome veramente lungo </text> <button label="1 L$" label_selected="1 L$" left="125" name="fastpay 1" width="70"/> <button label="5 L$" label_selected="5 L$" left="200" name="fastpay 5" width="70"/> diff --git a/indra/newview/skins/default/xui/it/floater_perm_prefs.xml b/indra/newview/skins/default/xui/it/floater_perm_prefs.xml index 67e4093951..a02b3b5075 100644 --- a/indra/newview/skins/default/xui/it/floater_perm_prefs.xml +++ b/indra/newview/skins/default/xui/it/floater_perm_prefs.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="perm prefs" title="PERMESSI di UPLOAD in DEFAULT"> +<floater name="perm prefs" title="DIRITTI DI CARICAMENTO PREDEFINITI"> <panel label="Permessi" name="permissions"> <button label="?" label_selected="?" name="help"/> <check_box label="Condividi con il gruppo" name="share_with_group"/> diff --git a/indra/newview/skins/default/xui/it/floater_postcard.xml b/indra/newview/skins/default/xui/it/floater_postcard.xml index de246db826..cb2916268a 100644 --- a/indra/newview/skins/default/xui/it/floater_postcard.xml +++ b/indra/newview/skins/default/xui/it/floater_postcard.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Postcard" title="ISTANTANEA IN EMAIL"> +<floater name="Postcard" title="INVIA FOTO VIA E-MAIL"> <text name="to_label" width="135"> Email del destinatario: </text> @@ -35,6 +35,6 @@ Vieni a vedere! </string> <string name="upload_message"> - Spedendo... + Invio... </string> </floater> diff --git a/indra/newview/skins/default/xui/it/floater_preferences.xml b/indra/newview/skins/default/xui/it/floater_preferences.xml index a76b9e3e27..5ffe7f4802 100644 --- a/indra/newview/skins/default/xui/it/floater_preferences.xml +++ b/indra/newview/skins/default/xui/it/floater_preferences.xml @@ -5,11 +5,11 @@ <tab_container name="pref core" tab_width="146" width="646"> <panel label="Generale" name="general"/> <panel label="Grafica" name="display"/> - <panel label="Privacy" name="im"/> - <panel label="Suono" name="audio"/> + <panel label="Riservatezza" name="im"/> + <panel label="Audio e media" name="audio"/> <panel label="Chat" name="chat"/> <panel label="Notifiche" name="msgs"/> - <panel label="Configurazione" name="input"/> - <panel label="Avanzato" name="advanced1"/> + <panel label="Impostazione" name="input"/> + <panel label="Avanzate" name="advanced1"/> </tab_container> </floater> diff --git a/indra/newview/skins/default/xui/it/floater_preview_animation.xml b/indra/newview/skins/default/xui/it/floater_preview_animation.xml index 006198781b..73082c9526 100644 --- a/indra/newview/skins/default/xui/it/floater_preview_animation.xml +++ b/indra/newview/skins/default/xui/it/floater_preview_animation.xml @@ -6,6 +6,6 @@ <text name="desc txt"> Descrizione: </text> - <button label="Esegui inworld" label_selected="Ferma" left="20" name="Anim play btn" tool_tip="Riproduci questa animazione così che gli altri possano vederla" width="131"/> + <button label="Riproduci in Second Life" label_selected="Ferma" left="20" name="Anim play btn" tool_tip="Riproduci questa animazione così che gli altri possano vederla" width="131"/> <button label="Esegui localmente" label_selected="Ferma" left="162" name="Anim audition btn" tool_tip="Riproduci questa animazione così che solo tu possa vederla" width="125"/> </floater> diff --git a/indra/newview/skins/default/xui/it/floater_preview_gesture.xml b/indra/newview/skins/default/xui/it/floater_preview_gesture.xml index 850f4c21ac..4e926cedc9 100644 --- a/indra/newview/skins/default/xui/it/floater_preview_gesture.xml +++ b/indra/newview/skins/default/xui/it/floater_preview_gesture.xml @@ -24,6 +24,9 @@ <floater.string name="Title"> Gesture: [NAME] </floater.string> + <text name="name_text"> + Nome: + </text> <text name="desc_label"> Descrizione: </text> @@ -47,18 +50,18 @@ <text name="steps_label"> Fasi: </text> - <button label="Sù" name="up_btn"/> + <button label="Su" name="up_btn"/> <button label="Giù" name="down_btn"/> <button label="Elimina" name="delete_btn"/> <radio_group name="animation_trigger_type"> - <radio_item label="Inizia" name="start"/> - <radio_item label="Stop" name="stop"/> + <radio_item label="Attiva" name="start"/> + <radio_item label="Ferma" name="stop"/> </radio_group> <check_box label="finché le animazioni sono eseguite" left="226" name="wait_anim_check"/> <check_box label="tempo in secondi" name="wait_time_check"/> <line_editor left_delta="114" name="wait_time_editor"/> <text name="help_label"> - Tutte le fasi avvengono simultaneamente, a meno che non aggiungi una fase attendi. + Tutte le fasi avvengono contemporaneamente, a meno che non aggiungi fasi di attesa. </text> <check_box label="Attiva" name="active_check" tool_tip="Le gesture attivate possono essere eseguite scrivendo in chat la parola chiave o premendo i tasti chiave. Le gesture generalmente si disattivano quando c'è un conflitto nei relativi tasti."/> <button label="Anteprima" name="preview_btn"/> diff --git a/indra/newview/skins/default/xui/it/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/it/floater_preview_gesture_info.xml index 660b868cae..d490416cc7 100644 --- a/indra/newview/skins/default/xui/it/floater_preview_gesture_info.xml +++ b/indra/newview/skins/default/xui/it/floater_preview_gesture_info.xml @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Gesture" title="GESTURE SHORTCUT"/> +<floater name="Gesture" title="SCORCIATOIA GESTURE"/> diff --git a/indra/newview/skins/default/xui/it/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/it/floater_preview_gesture_shortcut.xml index 942d5ed1ce..eb0bc4d868 100644 --- a/indra/newview/skins/default/xui/it/floater_preview_gesture_shortcut.xml +++ b/indra/newview/skins/default/xui/it/floater_preview_gesture_shortcut.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Gesture" title="TASTO RAPIDO PER GESTURE"> +<floater name="Gesture" title="SCORCIATOIA GESTURE"> <text name="trigger_label"> Chat: </text> @@ -8,8 +8,8 @@ </text> <combo_box label="Nessuno" name="modifier_combo"/> <combo_box label="Nessuno" name="key_combo"/> - <text name="replace_text" tool_tip="Sostituisci la parola chiave con queste parole. Per esempio, parola chiave 'ciao' sostituendo con 'buongiorno' cambierà la chat da 'Io dico ciao' in 'Io dico buongiorno' non appena attiverete la gesture!"> + <text name="replace_text" tool_tip="Sostituisci la parola chiave con queste parole. Per esempio, se si sceglie di sostituire la parola chiave 'ciao' con 'buongiorno', nella chat il testo 'Volevo dire ciao' diventerà 'Volevo dire buongiorno' e verrà attivata la gesture."> Sostituisci: </text> - <line_editor name="replace_editor" tool_tip="Sostituisci la parola chiave con queste parole. Per esempio, parola chiave 'ciao' sostituendo con 'buongiorno' cambierà la chat da 'Io dico ciao' in 'Io dico buongiorno' non appena attiverete la gesture"/> + <line_editor name="replace_editor" tool_tip="Sostituisci la parola chiave con queste parole. Per esempio, se si sceglie di sostituire la parola chiave 'ciao' con 'buongiorno', nella chat il testo 'Volevo dire ciao' diventerà 'Volevo dire buongiorno' e verrà attivata la gesture"/> </floater> diff --git a/indra/newview/skins/default/xui/it/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/it/floater_preview_gesture_steps.xml index 7c1f55ddba..d490416cc7 100644 --- a/indra/newview/skins/default/xui/it/floater_preview_gesture_steps.xml +++ b/indra/newview/skins/default/xui/it/floater_preview_gesture_steps.xml @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Gesture" title="TASTO RAPIDO GESTURE"/> +<floater name="Gesture" title="SCORCIATOIA GESTURE"/> diff --git a/indra/newview/skins/default/xui/it/floater_preview_notecard.xml b/indra/newview/skins/default/xui/it/floater_preview_notecard.xml index 08f5087242..70e28dde35 100644 --- a/indra/newview/skins/default/xui/it/floater_preview_notecard.xml +++ b/indra/newview/skins/default/xui/it/floater_preview_notecard.xml @@ -1,13 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="preview notecard" title="NOTE:"> +<floater name="preview notecard" title="BIGLIETTO:"> <floater.string name="no_object"> - Impossibile trovare l'oggetto che contiene questa nota. + Impossibile trovare un oggetto contenente questo biglietto </floater.string> <floater.string name="not_allowed"> - Non hai i permessi per leggere questa nota. + Non hai il permesso di leggere questo biglietto. </floater.string> <floater.string name="Title"> - Notecard: [NAME] + Biglietto: [NAME] </floater.string> <floater.string label="Salva" label_selected="Salva" name="Save"> Salva diff --git a/indra/newview/skins/default/xui/it/floater_preview_sound.xml b/indra/newview/skins/default/xui/it/floater_preview_sound.xml index 182243561c..8eb9573e54 100644 --- a/indra/newview/skins/default/xui/it/floater_preview_sound.xml +++ b/indra/newview/skins/default/xui/it/floater_preview_sound.xml @@ -1,11 +1,11 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="preview_sound"> <floater.string name="Title"> - Suono: [NAME] + Suono : [NAME] </floater.string> <text name="desc txt"> Descrizione: </text> - <button label="Avvia inworld" label_selected="Avvia inworld" name="Sound play btn" tool_tip="Riproduci questo suono in modo che gli altri possano sentirlo"/> - <button label="Avvia localmente" label_selected="Avvia localmente" name="Sound audition btn" tool_tip="Riproduci questo suono in modo che solo tu possa sentirlo"/> + <button label="Riproduci in Second Life" label_selected="Riproduci in Second Life" name="Sound play btn" tool_tip="Riproduci questo suono in modo che anche gli altri possano udirlo"/> + <button label="Avvia localmente" label_selected="Avvia localmente" name="Sound audition btn" tool_tip="Riproduci questo suono in modo che solo tu possa udirlo"/> </floater> diff --git a/indra/newview/skins/default/xui/it/floater_preview_texture.xml b/indra/newview/skins/default/xui/it/floater_preview_texture.xml index dd24079ea3..5b4054514e 100644 --- a/indra/newview/skins/default/xui/it/floater_preview_texture.xml +++ b/indra/newview/skins/default/xui/it/floater_preview_texture.xml @@ -10,35 +10,38 @@ Descrizione: </text> <text name="dimensions"> - [WIDTH]px x [HEIGHT]px + [WIDTH] px x [HEIGHT] px </text> - <combo_box name="combo_aspect_ratio" tool_tip="Anteprima del rapporto d'aspetto impostato"> + <text name="aspect_ratio"> + Antreprima rapporto di visualizzazione + </text> + <combo_box name="combo_aspect_ratio" tool_tip="Anteprima con rapporto di visualizzazione fisso"> <combo_item name="Unconstrained"> Libero </combo_item> - <combo_item name="1:1" tool_tip="Immagine del Gruppo o Profilo nel Mondo Reale"> + <combo_item name="1:1" tool_tip="Logo del gruppo o profilo nel mondo reale"> 1:1 </combo_item> - <combo_item name="4:3" tool_tip="[SECOND_LIFE] profilo"> + <combo_item name="4:3" tool_tip="Profilo [SECOND_LIFE]"> 4:3 </combo_item> - <combo_item name="10:7" tool_tip="Annunci ed elenco del Cerca, landmarks"> + <combo_item name="10:7" tool_tip="Annunci e inserzioni, punti di riferimento"> 10:7 </combo_item> - <combo_item name="3:2" tool_tip="Info sul terreno"> + <combo_item name="3:2" tool_tip="Informazioni sul terreno"> 3:2 </combo_item> <combo_item name="16:10"> 16:10 </combo_item> - <combo_item name="16:9" tool_tip="Preferiti nel Profilo"> + <combo_item name="16:9" tool_tip="Preferiti del Profilo"> 16:9 </combo_item> <combo_item name="2:1"> 2:1 </combo_item> </combo_box> - <button label="OK" name="keep"/> - <button label="Cancella" name="discard"/> - <button label="Salva come:" name="save_tex_btn"/> + <button label="OK" name="Keep"/> + <button label="Elimina" name="Discard"/> + <button label="Salva con nome" name="save_tex_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/it/floater_publish_classified.xml b/indra/newview/skins/default/xui/it/floater_publish_classified.xml new file mode 100644 index 0000000000..6984412728 --- /dev/null +++ b/indra/newview/skins/default/xui/it/floater_publish_classified.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="publish_classified" title="Pubblicazione inserzione"> + <text name="explanation_text"> + La tua inserzione sarà visibile per una settimana dal giorno della sua pubblicazione. + +Ricordiamo che i costi per gli annunci non possono essere rimborsati + </text> + <spinner label="Prezzo per inserzione:" name="price_for_listing" tool_tip="Prezzo per inserzione:" value="50"/> + <text name="l$_text" value="L$"/> + <text name="more_info_text"> + Maggiori informazioni (link alla guida sugli annunci) + </text> + <button label="Pubblica" name="publish_btn"/> + <button label="Annulla" name="cancel_btn"/> +</floater> diff --git a/indra/newview/skins/default/xui/it/floater_region_info.xml b/indra/newview/skins/default/xui/it/floater_region_info.xml index 98808e4b55..dc2c24ca56 100644 --- a/indra/newview/skins/default/xui/it/floater_region_info.xml +++ b/indra/newview/skins/default/xui/it/floater_region_info.xml @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="regioninfo" title="REGIONE/PROPRIETA'"/> +<floater name="regioninfo" title="Regione/proprietà immobiliare"/> diff --git a/indra/newview/skins/default/xui/it/floater_report_abuse.xml b/indra/newview/skins/default/xui/it/floater_report_abuse.xml index 2692779e7c..4827cc739d 100644 --- a/indra/newview/skins/default/xui/it/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/it/floater_report_abuse.xml @@ -41,8 +41,8 @@ <combo_box name="category_combo" tool_tip="Categoria -- scegli la categoria che descrive meglio questa segnalazione"> <combo_box.item label="Scegli la categoria" name="Select_category"/> <combo_box.item label="Età > Far finta di essere minore" name="Age__Age_play"/> - <combo_box.item label="Età > Residente adulto nella Teen Second Life" name="Age__Adult_resident_on_Teen_Second_Life"/> - <combo_box.item label="Età > Residente minorenne al di fuori della 'Second Life per Teenager'" name="Age__Underage_resident_outside_of_Teen_Second_Life"/> + <combo_box.item label="Età > Residente adulto in Teen Second Life" name="Age__Adult_resident_on_Teen_Second_Life"/> + <combo_box.item label="Età > Residente minorenne fuori da Teen Second Life" name="Age__Underage_resident_outside_of_Teen_Second_Life"/> <combo_box.item label="Assalto > sandbox da combattimento / area pericolosa" name="Assault__Combat_sandbox___unsafe_area"/> <combo_box.item label="Assalto > Area sicura" name="Assault__Safe_area"/> <combo_box.item label="Assalto > Test di armi in sandbox" name="Assault__Weapons_testing_sandbox"/> diff --git a/indra/newview/skins/default/xui/it/floater_script_limits.xml b/indra/newview/skins/default/xui/it/floater_script_limits.xml new file mode 100644 index 0000000000..2383b85bb7 --- /dev/null +++ b/indra/newview/skins/default/xui/it/floater_script_limits.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="scriptlimits" title="INFORMAZIONI SULLO SCRIPT"/> diff --git a/indra/newview/skins/default/xui/it/floater_script_preview.xml b/indra/newview/skins/default/xui/it/floater_script_preview.xml index 9428297397..d007774f43 100644 --- a/indra/newview/skins/default/xui/it/floater_script_preview.xml +++ b/indra/newview/skins/default/xui/it/floater_script_preview.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="preview lsl text" title="SCRIPT: SCRIPT DI ROTAZIONE"> <floater.string name="Title"> - Script: [NAME] + SCRIPT: [NAME] </floater.string> <text name="desc txt"> Descrizione: diff --git a/indra/newview/skins/default/xui/it/floater_script_queue.xml b/indra/newview/skins/default/xui/it/floater_script_queue.xml index 728fbe8c8d..f4117d30a2 100644 --- a/indra/newview/skins/default/xui/it/floater_script_queue.xml +++ b/indra/newview/skins/default/xui/it/floater_script_queue.xml @@ -1,13 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="queue" title="RESETTA IL PROGRESSO"> +<floater name="queue" title="AZZERA AVANZAMENTO"> <floater.string name="Starting"> - Conteggio [START] degli [COUNT] articoli. + Avvio di [START] di [COUNT] oggetti. </floater.string> <floater.string name="Done"> - Eseguito. + Fine. </floater.string> <floater.string name="Resetting"> - Resettando + Ripristino in corso </floater.string> <floater.string name="Running"> In esecuzione diff --git a/indra/newview/skins/default/xui/it/floater_search.xml b/indra/newview/skins/default/xui/it/floater_search.xml index 6afdd2437e..05f5dfe719 100644 --- a/indra/newview/skins/default/xui/it/floater_search.xml +++ b/indra/newview/skins/default/xui/it/floater_search.xml @@ -1,15 +1,15 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater_search" title="TROVA"> <floater.string name="loading_text"> - Caricando... + Caricamento in corso... </floater.string> <floater.string name="done_text"> - Eseguito + Fine </floater.string> <layout_stack name="stack1"> <layout_panel name="browser_layout"> <text name="refresh_search"> - Redo search to reflect current God level + Ripeti ricerca in modo che rifletta il livello di diritti Admin attuale </text> </layout_panel> </layout_stack> diff --git a/indra/newview/skins/default/xui/it/floater_select_key.xml b/indra/newview/skins/default/xui/it/floater_select_key.xml index 181b7d5292..014bc76ffb 100644 --- a/indra/newview/skins/default/xui/it/floater_select_key.xml +++ b/indra/newview/skins/default/xui/it/floater_select_key.xml @@ -2,6 +2,6 @@ <floater name="modal container" title=""> <button label="Annulla" label_selected="Annulla" name="Cancel"/> <text name="Save item as:"> - clicca un tasto per impostare la modalità PARLA con il tuo pulsante. + Premi una chiave per configurarla come pulsante da premere per parlare. </text> </floater> diff --git a/indra/newview/skins/default/xui/it/floater_settings_debug.xml b/indra/newview/skins/default/xui/it/floater_settings_debug.xml index 385a7ed6e9..aab00a26ce 100644 --- a/indra/newview/skins/default/xui/it/floater_settings_debug.xml +++ b/indra/newview/skins/default/xui/it/floater_settings_debug.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="settings_debug" title="DEBUG SETTINGS"> - <combo_box name="boolean_combo"> - <combo_box.item label="VERO" name="TRUE"/> - <combo_box.item label="FALSO" name="FALSE"/> - </combo_box> +<floater name="settings_debug" title="PARAMETRI DI DEBUG"> + <radio_group name="boolean_combo"> + <radio_item label="VERO" name="TRUE" value="vero"/> + <radio_item label="FALSO" name="FALSE" value=""/> + </radio_group> <color_swatch label="Colore" name="val_color_swatch"/> <spinner label="x" name="val_spinner_1"/> <spinner label="x" name="val_spinner_2"/> diff --git a/indra/newview/skins/default/xui/it/floater_snapshot.xml b/indra/newview/skins/default/xui/it/floater_snapshot.xml index 668c3c8c9e..03aaed46be 100644 --- a/indra/newview/skins/default/xui/it/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/it/floater_snapshot.xml @@ -4,23 +4,23 @@ Destinazione della fotografia </text> <radio_group label="Tipo di fotografia" name="snapshot_type_radio" width="228"> - <radio_item label="Invia via email" name="postcard"/> - <radio_item label="Salva nel tuo inventario ([AMOUNT] L$)" name="texture"/> - <radio_item label="Salva sul tuo pc" name="local"/> + <radio_item label="E-mail" name="postcard"/> + <radio_item label="Il mio inventario (L$[AMOUNT])" name="texture"/> + <radio_item label="Salva sul mio computer" name="local"/> </radio_group> <text name="file_size_label"> - Grandezza del file: [SIZE] KB + [SIZE] KB </text> <button label="Aggiorna la fotografia" name="new_snapshot_btn"/> <button label="Invia" name="send_btn"/> <button label="Salva ([AMOUNT] L$)" name="upload_btn"/> <flyout_button label="Salva" name="save_btn" tool_tip="Salva l'immagine come file"> <flyout_button_item label="Salva" name="save_item"/> - <flyout_button_item label="Salva come..." name="saveas_item"/> + <flyout_button_item label="Salva con nome..." name="saveas_item"/> </flyout_button> <button label="Annulla" name="discard_btn"/> - <button label="Espandi >>" name="more_btn" tool_tip="Opzioni Avanzate"/> - <button label="<< Diminuisci" name="less_btn" tool_tip="Opzioni Avanzate"/> + <button label="Altro" name="more_btn" tool_tip="Opzioni Avanzate"/> + <button label="Meno" name="less_btn" tool_tip="Opzioni Avanzate"/> <text name="type_label2"> Grandezza </text> @@ -59,7 +59,7 @@ <spinner label="Larghezza" label_width="58" name="snapshot_width" width="116"/> <spinner label="Altezza" label_width="41" left="130" name="snapshot_height" width="101"/> <check_box label="Mantieni le proporzioni" name="keep_aspect_check"/> - <slider label="Qualità d'immagine" name="image_quality_slider"/> + <slider label="Qualità dell'immagine" name="image_quality_slider"/> <text name="layer_type_label" width="55"> Fotografa: </text> @@ -68,11 +68,10 @@ <combo_box.item label="Profondità" name="Depth"/> <combo_box.item label="Colori primari degli oggetti" name="ObjectMattes"/> </combo_box> - <check_box label="Mostra l'interfaccia nella fotografia" name="ui_check"/> - <check_box bottom_delta="-17" label="Mostra i dispositivi indossati nella foto" name="hud_check"/> + <check_box label="Interfaccia" name="ui_check"/> + <check_box bottom_delta="-17" label="HUD" name="hud_check"/> <check_box bottom_delta="-17" label="Mantieni aperto dopo aver salvato" name="keep_open_check"/> - <check_box bottom_delta="-17" label="Blocca l'anteprima -(Anteprima a schermo intero)" name="freeze_frame_check"/> + <check_box bottom_delta="-17" label="Congela il frame (pieno schermo)" name="freeze_frame_check"/> <check_box bottom_delta="-29" label="Auto-Aggiorna" name="auto_snapshot_check"/> <string name="unknown"> sconosciuto diff --git a/indra/newview/skins/default/xui/it/floater_sys_well.xml b/indra/newview/skins/default/xui/it/floater_sys_well.xml index 057d3657d0..e1c0b89902 100644 --- a/indra/newview/skins/default/xui/it/floater_sys_well.xml +++ b/indra/newview/skins/default/xui/it/floater_sys_well.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="sys_well_window" title="NOTIFICHE"> +<floater name="sys_well_window" title="AVVISI"> <string name="title_im_well_window"> - SESSIONE IM + CONVERSAZIONI </string> <string name="title_notification_well_window"> - NOTIFICHE + AVVISI </string> </floater> diff --git a/indra/newview/skins/default/xui/it/floater_telehub.xml b/indra/newview/skins/default/xui/it/floater_telehub.xml index 08f5564c7b..15312a8959 100644 --- a/indra/newview/skins/default/xui/it/floater_telehub.xml +++ b/indra/newview/skins/default/xui/it/floater_telehub.xml @@ -21,9 +21,9 @@ <button label="Aggiungi punti rigenerazione" name="add_spawn_point_btn" width="165"/> <button label="Rimuovi punti" left="175" name="remove_spawn_point_btn" width="105"/> <text name="spawn_point_help"> - Seleziona un oggetto e click "Aggiungi Spawn" per specificare la posizione. + Seleziona un oggetto e fai clic su Aggiungi per specificare la posizione. Ora puoi spostare o cancellare l'oggetto. -Le Posizioni sono relative al centro del telehub. +Le posizioni sono relative al centro del telehub. Seleziona un oggetto nella lista per evidenziarlo nel mondo. </text> </floater> diff --git a/indra/newview/skins/default/xui/it/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/it/floater_texture_ctrl.xml index e57c37073a..7b77584ba0 100644 --- a/indra/newview/skins/default/xui/it/floater_texture_ctrl.xml +++ b/indra/newview/skins/default/xui/it/floater_texture_ctrl.xml @@ -1,22 +1,22 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="texture picker" title="Foto: TEXTURE"> +<floater name="texture picker" title="PREFERITO: TEXTURE"> <string name="choose_picture"> Clicca per scegliere l'immagine </string> <text name="Multiple"> - Textures multiple + Texture multiple </text> <text name="unknown"> - Misura: [Dimensions] + Dimensioni: [DIMENSIONS] </text> <button label="Default" label_selected="Default" name="Default"/> <button label="Niente" label_selected="Niente" name="None"/> <button label="Vuoto" label_selected="Vuoto" name="Blank"/> <check_box label="Mostra cartelle" name="show_folders_check"/> - <search_editor label="Filtro Textures" name="inventory search editor"/> - <check_box label="Applica ora" name="apply_immediate_check"/> + <search_editor label="Filtro texture" name="inventory search editor"/> + <check_box label="Applica adesso" name="apply_immediate_check"/> <button label="Annulla" label_selected="Annulla" name="Cancel"/> - <button label="Ok" label_selected="Ok" name="Select"/> + <button label="OK" label_selected="OK" name="Select"/> <string name="pick title"> Scegli: </string> diff --git a/indra/newview/skins/default/xui/it/floater_tools.xml b/indra/newview/skins/default/xui/it/floater_tools.xml index dda957025b..16ee797ce4 100644 --- a/indra/newview/skins/default/xui/it/floater_tools.xml +++ b/indra/newview/skins/default/xui/it/floater_tools.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="toolbox floater" short_title="STRUMENTI/ATTREZZI PER COSTRUIRE" title="" width="288"> +<floater name="toolbox floater" short_title="STRUMENTI PER COSTRUZIONE" title="" width="288"> <floater.string name="status_rotate"> Sposta le fasce colorate per ruotare l'oggetto </floater.string> @@ -16,7 +16,7 @@ Clicca e trascina per spostare la camera </floater.string> <floater.string name="status_grab"> - Trascina per spostare, Ctrl per sollevare, Ctrl+Shift per ruotare + Trascina per spostare, Ctrl per sollevare, Ctrl+Maiusc per ruotare </floater.string> <floater.string name="status_place"> Clicca inworld per costruire @@ -50,32 +50,32 @@ <radio_group name="focus_radio_group"> <radio_item label="Zoom" name="radio zoom"/> <radio_item label="Guarda ruotando (Ctrl)" name="radio orbit"/> - <radio_item label="Panoramica (Ctrl+Shift)" name="radio pan"/> + <radio_item label="Panoramica (Ctrl+Maiusc)" name="radio pan"/> </radio_group> <radio_group name="move_radio_group"> <radio_item label="Muovi" name="radio move"/> <radio_item label="Alza (Ctrl)" name="radio lift"/> - <radio_item label="Ruota (Ctrl+Shift)" name="radio spin"/> + <radio_item label="Gira (Ctrl+Maiusc)" name="radio spin"/> </radio_group> <radio_group name="edit_radio_group"> <radio_item label="Sposta" name="radio position"/> <radio_item label="Ruota (Ctrl)" name="radio rotate"/> - <radio_item label="Estendi/Stira???!!!! (Ctrl+Shift)" name="radio stretch"/> - <radio_item label="Seleziona Faccia multimediale" name="radio select face"/> + <radio_item label="Allunga (Ctrl+Maiusc)" name="radio stretch"/> + <radio_item label="Seleziona faccia" name="radio select face"/> </radio_group> <check_box label="Modifica parti collegate" name="checkbox edit linked parts"/> - <text name="RenderingCost" tool_tip="Mostra il rendering cost calcolato per questo oggetto"> + <text name="RenderingCost" tool_tip="Mostra il costo di rendering calcolato per questo oggetto"> þ: [COUNT] </text> <check_box label="Ridimens. simmetricamente" name="checkbox uniform"/> <check_box initial_value="true" label="Ridimensiona le texture" name="checkbox stretch textures"/> - <check_box initial_value="true" label="Posiziona nella rete???!!!" name="checkbox snap to grid"/> + <check_box initial_value="true" label="Posiziona nella griglia" name="checkbox snap to grid"/> <combo_box left_delta="48" name="combobox grid mode" tool_tip="Scegli il tipo di righello per posizionare l'oggetto"> - <combo_box.item label="Rete del Mondo" name="World"/> + <combo_box.item label="Rete del mondo" name="World"/> <combo_box.item label="Rete locale" name="Local"/> - <combo_box.item label="Riferimento della rete???!!!!" name="Reference"/> + <combo_box.item label="Griglia di riferimento" name="Reference"/> </combo_box> - <button label="Opzioni..." label_selected="Opzioni..." name="Options..." tool_tip="Vedi più opzioni delle rete"/> + <button label="Opzioni..." label_selected="Opzioni..." name="Options..." tool_tip="Vedi più opzioni della griglia"/> <button label="" label_selected="" name="ToolCube" tool_tip="Cubo"/> <button label="" label_selected="" name="ToolPrism" tool_tip="Prisma"/> <button label="" label_selected="" name="ToolPyramid" tool_tip="Piramide"/> @@ -91,10 +91,10 @@ <button label="" label_selected="" name="ToolRing" tool_tip="Anello"/> <button label="" label_selected="" name="ToolTree" tool_tip="Albero"/> <button label="" label_selected="" name="ToolGrass" tool_tip="Erba"/> - <check_box label="Mantieni lo strumento/attrezzo selezionato" name="checkbox sticky"/> - <check_box label="Seleziona la Copia" name="checkbox copy selection"/> - <check_box initial_value="true" label="Centra la Copia" name="checkbox copy centers"/> - <check_box label="Ruotare la Copia" name="checkbox copy rotates"/> + <check_box label="Mantieni lo strumento selezionato" name="checkbox sticky"/> + <check_box label="Copia la selezione" name="checkbox copy selection"/> + <check_box initial_value="true" label="Centra la copia" name="checkbox copy centers"/> + <check_box label="Ruota la copia" name="checkbox copy rotates"/> <radio_group name="land_radio_group"> <radio_item label="Seleziona il terreno" name="radio select land"/> <radio_item label="Appiattisci" name="radio flatten"/> @@ -114,26 +114,26 @@ <text name="Strength:"> Potenza </text> - <button label="Applica" label_selected="Applica" left="146" name="button apply to selection" tool_tip="Modifica la terra selezionata"/> + <button label="Applica" label_selected="Applica" left="146" name="button apply to selection" tool_tip="Modifica il terreno selezionato"/> <text left="134" name="obj_count"> Oggetti: [COUNT] </text> <text left="134" name="prim_count"> - Prims: [COUNT] + Prim: [COUNT] </text> <tab_container name="Object Info Tabs" tab_max_width="150" tab_min_width="30" width="288"> <panel label="Generale" name="General"> <panel.string name="text deed continued"> - Intesta + Cessione </panel.string> <panel.string name="text deed"> Cedi al gruppo </panel.string> <panel.string name="text modify info 1"> - Puoi modificare questo oggetto + Tu puoi modificare questo oggetto </panel.string> <panel.string name="text modify info 2"> - Puoi modificare questi oggetti + Tu puoi modificare questi oggetti </panel.string> <panel.string name="text modify info 3"> Non puoi modificare questo oggetto @@ -148,10 +148,10 @@ Prezzo: L$ </panel.string> <panel.string name="Cost Total"> - Prezzo Totale: L$ + Prezzo totale: L$ </panel.string> <panel.string name="Cost Per Unit"> - Prezzo per Unità: L$ + Prezzo per: L$ </panel.string> <panel.string name="Cost Mixed"> Prezzo misto @@ -180,20 +180,20 @@ <text name="Group:"> Gruppo: </text> - <button label="Imposta..." label_selected="Imposta..." name="button set group" tool_tip="Scegli un gruppo per condividere i permessi di questo oggetto"/> - <name_box initial_value="Caricando..." name="Group Name Proxy"/> - <button label="Intesta" label_selected="Intesta" left_delta="152" name="button deed" tool_tip="Intestando permette di regalare questo oggetto con i permessi del prossimo proprietario. Gli oggetti condivisi dal gruppo posso essere instestati solo da un officer del gruppo." width="98"/> - <check_box label="Condividi" name="checkbox share with group" tool_tip="Permetti ai membri del gruppo selezionato di condividere i tuoi permessi modify per questo oggetto. Tu devi Intestare per attivare le restrizioni al ruolo."/> + <button label="Imposta..." label_selected="Imposta..." name="button set group" tool_tip="Scegli un gruppo con cui condividere i diritti relativi all'oggetto"/> + <name_box initial_value="Caricamento in corso..." name="Group Name Proxy"/> + <button label="Cessione" label_selected="Cessione" left_delta="152" name="button deed" tool_tip="Con una cessione si trasferisce il bene con i diritti al proprietario successivo Gli oggetti in proprietà condivisa di gruppo possono essere ceduti soltanto da un funzionario del gruppo." width="98"/> + <check_box label="Condividi" name="checkbox share with group" tool_tip="Consenti a tutti i membri del gruppo selezionato di condividere i tuoi diritti di modifica di questo oggetto. Per attivare le restrizioni per ruolo devi prima effettuare la cessione."/> <text name="label click action" width="220"> - Clicca: + Fai clic per: </text> <combo_box name="clickaction" width="192"> - <combo_box.item label="Tocca (default)" name="Touch/grab(default)"/> + <combo_box.item label="Tocca (predefinito)" name="Touch/grab(default)"/> <combo_box.item label="Siediti sull'oggetto" name="Sitonobject"/> <combo_box.item label="Compra l'oggetto" name="Buyobject"/> <combo_box.item label="Paga l'oggetto" name="Payobject"/> <combo_box.item label="Apri" name="Open"/> - <combo_box.item label="Zoom" name="Zoom"/> + <combo_box.item label="Ingrandisci" name="Zoom"/> </combo_box> <check_box label="In vendita:" name="checkbox for sale"/> <combo_box name="sale type"> @@ -205,7 +205,7 @@ <check_box label="Mostra nella ricerca" name="search_check" tool_tip="Permetti che l'oggetto sia visibile nella ricerca"/> <panel name="perms_build"> <text name="perm_modify"> - Puoi modificare questo oggetto + Tu puoi modificare questo oggetto </text> <text name="Anyone can:"> Chiunque: @@ -213,11 +213,11 @@ <check_box label="Sposta" name="checkbox allow everyone move"/> <check_box label="Copia" name="checkbox allow everyone copy"/> <text name="Next owner can:"> - Prossimo proprietario: + Proprietario successivo: </text> <check_box label="Modificare" name="checkbox next owner can modify"/> <check_box label="Copiare" left_delta="80" name="checkbox next owner can copy"/> - <check_box label="Transfer" left_delta="67" name="checkbox next owner can transfer" tool_tip="Il prossimo proprietario può regalare o rivendere questo oggetto"/> + <check_box label="Trasferisci" left_delta="67" name="checkbox next owner can transfer" tool_tip="Il prossimo proprietario può regalare o rivendere questo oggetto"/> <text name="B:"> B: </text> @@ -241,7 +241,7 @@ <panel label="Oggetto" name="Object"> <check_box label="Bloccato" name="checkbox locked" tool_tip="Previene lo spostamento o la cancellazione dell'oggetto. Spesso utile mentre si costruisce per evitare involontarie modifiche."/> <check_box label="Fisico" name="Physical Checkbox Ctrl" tool_tip="Permette all'oggetto di essere spostato e di subire gli effetti della gravità"/> - <check_box label="Temporaneo" name="Temporary Checkbox Ctrl" tool_tip="Causa la cancellazione dell'oggetto 1 minuto dopo la sua creazione"/> + <check_box label="Temporaneo" name="Temporary Checkbox Ctrl" tool_tip="Determina la cancellazione dell'oggetto 1 minuto dopo la sua creazione"/> <check_box label="Fantasma" name="Phantom Checkbox Ctrl" tool_tip="Rende l'oggetto penetrabile dagli altri oggetti e dagli avatars"/> <text name="label position"> Posizione (metri) @@ -281,7 +281,7 @@ <combo_box.item label="Gomma" name="Rubber"/> </combo_box> <text name="text cut"> - Riduci una sezione (begin/end) + Riduci una sezione (inizio/fine) </text> <spinner label="I" name="cut begin"/> <spinner label="F" name="cut end"/> @@ -301,7 +301,7 @@ <combo_box.item label="Triangolare" name="Triangle"/> </combo_box> <text name="text twist"> - Attorciglia (begin/end) + Attorciglia (inizio/fine) </text> <spinner label="I" name="Twist Begin"/> <spinner label="F" name="Twist End"/> @@ -319,13 +319,13 @@ <spinner label="X" name="Shear X"/> <spinner label="Y" name="Shear Y"/> <text name="advanced_cut" width="149"> - Riduci un bordo (begin/end) + Riduci un bordo (inizio/fine) </text> <text name="advanced_dimple"> - Fossetta???!!!! (begin/end) + Scava (inizio/fine) </text> <text name="advanced_slice"> - Taglia???!!! (begin/end) + Taglia (inizio/fine) </text> <spinner label="I" name="Path Limit Begin"/> <spinner label="F" name="Path Limit End"/> @@ -361,7 +361,7 @@ <text name="edit_object"> Modifica le caratteristiche dell'oggetto: </text> - <check_box label="Flessibilità" name="Flexible1D Checkbox Ctrl" tool_tip="Permetti all'oggetto di flettersi lungo l'asse Z (Client-side only)"/> + <check_box label="Flessibilità" name="Flexible1D Checkbox Ctrl" tool_tip="Consenti all'oggetto di flettersi lungo l'asse Z (solo lato client)"/> <spinner label="Morbidezza" label_width="72" name="FlexNumSections" width="135"/> <spinner label="Gravità" label_width="72" name="FlexGravity" width="135"/> <spinner label="Elasticità" label_width="72" name="FlexFriction" width="135"/> @@ -372,11 +372,11 @@ <spinner label="Forza Z" label_width="72" name="FlexForceZ" width="135"/> <check_box label="Luce" name="Light Checkbox Ctrl" tool_tip="Imposta l'oggetto come sorgente di luce"/> <color_swatch label="" name="colorswatch" tool_tip="Clicca per aprire il selettore dei colori"/> - <texture_picker label="" name="light texture control" tool_tip="Clicca per scegliere una proiezione dell'immagine (funziona solo con deferred rendering attivato)"/> + <texture_picker label="" name="light texture control" tool_tip="Clicca per scegliere un'immagine da proiettare (funziona solo con il rendering differito attivato)"/> <spinner label="Intensità" label_width="72" name="Light Intensity" width="135"/> - <spinner label="FOV" name="Light FOV"/> + <spinner label="Angolo di vista" name="Light FOV"/> <spinner label="Raggio" label_width="72" name="Light Radius" width="135"/> - <spinner label="Focus" name="Light Focus"/> + <spinner label="Centro focale" name="Light Focus"/> <spinner label="Attenuazione" label_width="72" name="Light Falloff" width="135"/> <spinner label="Atmosfera" name="Light Ambiance"/> </panel> @@ -395,8 +395,7 @@ <text name="glow label"> Bagliore </text> - <check_box bottom_delta="-21" label="Massima -luminosità" name="checkbox fullbright"/> + <check_box bottom_delta="-21" label="Massima luminosità" name="checkbox fullbright"/> <text name="tex gen"> Applicazione della texture @@ -438,32 +437,32 @@ della texture <combo_box.item label="Trama" name="weave"/> </combo_box> <text name="tex scale"> - Ripeti / Lato + Ripetizioni / Faccia </text> <spinner label="Orizzontale (U)" name="TexScaleU"/> <check_box label="Inverti" name="checkbox flip s"/> <spinner label="Verticale (V)" name="TexScaleV"/> <check_box label="Inverti" name="checkbox flip t"/> <spinner label="Rotazione˚" left="120" name="TexRot" width="60"/> - <spinner label="Ripete / Metri" left="120" name="rptctrl" width="60"/> + <spinner label="Ripetizioni / Metro" left="120" name="rptctrl" width="60"/> <button label="Applica" label_selected="Applica" left_delta="72" name="button apply"/> <text name="tex offset"> - Bilanciamento della Texture + Bilanciamento della texture </text> <spinner label="Orizzontale (U)" name="TexOffsetU"/> <spinner label="Verticale (V)" name="TexOffsetV"/> <panel name="Add_Media"> <text name="media_tex"> - Media + Multimediale </text> - <button name="add_media" tool_tip="Aggiungi Media"/> + <button name="add_media" tool_tip="Aggiungi media"/> <button name="delete_media" tool_tip="Cancella questa media texture"/> - <button name="edit_media" tool_tip="Modifica questo Media"/> - <button label="Alllinea" label_selected="Allinea Media" name="button align" tool_tip="Allinea media texture (must load first)"/> + <button name="edit_media" tool_tip="Modifica questo media"/> + <button label="Alllinea" label_selected="Allinea media" name="button align" tool_tip="Allinea texture del media (il caricamento deve prima essere completato)"/> </panel> </panel> <panel label="Contenuto" name="Contents"> - <button label="Nuovo Script" label_selected="Nuovo Script" name="button new script"/> + <button label="Nuovo Script" label_selected="Nuovo script" name="button new script"/> <button label="Permessi" name="button permissions"/> </panel> </tab_container> @@ -472,29 +471,22 @@ della texture Informazioni sul terreno </text> <text name="label_area_price"> - Prezzo: L$[PRICE] per [AREA] m² + Prezzo: L$ [PRICE] per [AREA] m² </text> <text name="label_area"> - Area: [AREA] m² + Zona: [AREA] m² </text> - <button label="Info sul terreno" label_selected="Info sul terreno" name="button about land" width="156"/> - <check_box label="Mostra i proprietari" name="checkbox show owners" tool_tip="Colora i terreni in base ai loro proprietari: - -Verde = il tuo terreno -Acqua = la terra del tuo gruppo -Rosso = posseduta da altri -Giallo = in vendita -Viola = in asta -Grigia = pubblica"/> + <button label="Informazioni sui terreni" label_selected="Informazioni sui terreni" name="button about land" width="156"/> + <check_box label="Mostra i proprietari" name="checkbox show owners" tool_tip="Colora i terreni in base ai loro proprietari: Verde = il tuo terreno Acqua = la terra del tuo gruppo Rosso = posseduta da altri Giallo = in vendita Viola = in asta Grigia = pubblica"/> <text name="label_parcel_modify"> Modifica il terreno </text> <button label="Suddividi" label_selected="Suddividi" name="button subdivide land" width="156"/> - <button label="Aderisci" label_selected="Aderisci" name="button join land" width="156"/> + <button label="Iscriviti" label_selected="Iscriviti" name="button join land" width="156"/> <text name="label_parcel_trans"> Transazioni del territorio </text> - <button label="Compra la Terra" label_selected="Compra la Terra" name="button buy land" width="156"/> - <button label="Abbandona la Terra" label_selected="Abbandona la Terra" name="button abandon land" width="156"/> + <button label="Acquista terreno" label_selected="Acquista terreno" name="button buy land" width="156"/> + <button label="Abbandona il terreno" label_selected="Abbandona il terreno" name="button abandon land" width="156"/> </panel> </floater> diff --git a/indra/newview/skins/default/xui/it/floater_top_objects.xml b/indra/newview/skins/default/xui/it/floater_top_objects.xml index 8f7f3e060a..939c5e83a0 100644 --- a/indra/newview/skins/default/xui/it/floater_top_objects.xml +++ b/indra/newview/skins/default/xui/it/floater_top_objects.xml @@ -1,58 +1,59 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="top_objects" title="Oggetti principali"> + <floater.string name="top_scripts_title"> + Script pesanti + </floater.string> + <floater.string name="top_scripts_text"> + [COUNT] script richiedono un totale di [TIME] ms + </floater.string> + <floater.string name="scripts_score_label"> + Ora + </floater.string> + <floater.string name="scripts_mono_time_label"> + Ora 'Mono' + </floater.string> + <floater.string name="top_colliders_title"> + Oggetti con maggiori collisioni + </floater.string> + <floater.string name="top_colliders_text"> + I [COUNT] oggetti che sperimentano il maggior numero di collisioni + </floater.string> + <floater.string name="colliders_score_label"> + Punteggio + </floater.string> + <floater.string name="none_descriptor"> + Nulla di rilevato. + </floater.string> <text name="title_text"> In caricamento... </text> <scroll_list name="objects_list"> - <column label="Punteggio" name="score" width="84"/> - <column label="Nome" name="name" width="84"/> - <column label="Proprietario" name="owner" width="84"/> - <column label="Ubicazione" name="location" width="84"/> - <column label="Ora" name="time" width="84"/> - <column label="Ora (Mono)" name="mono_time" width="84"/> + <scroll_list.columns label="Punteggio" name="score" width="84"/> + <scroll_list.columns label="Nome" name="name" width="84"/> + <scroll_list.columns label="Proprietario" name="owner" width="84"/> + <scroll_list.columns label="Ubicazione" name="location" width="84"/> + <scroll_list.columns label="Ora" name="time" width="84"/> + <scroll_list.columns label="Ora (Mono)" name="mono_time" width="84"/> + <scroll_list.columns label="URL" name="URLs"/> </scroll_list> - <line_editor font="SansSerifSmall" left="90" name="id_editor" width="280"/> - <line_editor font="SansSerifSmall" left="90" name="object_name_editor" width="280"/> - <line_editor font="SansSerifSmall" left="90" name="owner_name_editor" width="280"/> <text name="id_text"> ID oggetto: </text> + <line_editor font="SansSerifSmall" left="90" name="id_editor" width="280"/> <button label="Mostra segnali luminosi" name="show_beacon_btn" width="150"/> <text name="obj_name_text"> Nome dell'oggetto: </text> + <line_editor font="SansSerifSmall" left="90" name="object_name_editor" width="280"/> <button label="Filtro" name="filter_object_btn" width="150"/> <text name="owner_name_text"> Proprietario: </text> + <line_editor font="SansSerifSmall" left="90" name="owner_name_editor" width="280"/> <button label="Filtro" name="filter_owner_btn" width="150"/> + <button label="Aggiorna" name="refresh_btn" width="150"/> <button label="Restituisci selezionato" name="return_selected_btn" width="150"/> <button label="Restituisci tutti" left="170" name="return_all_btn"/> <button label="Disabilita selezionato" name="disable_selected_btn" width="150"/> <button label="Disabilita per tutti" left="170" name="disable_all_btn"/> - <button label="Aggiorna" name="refresh_btn" width="150"/> - <string name="top_scripts_title"> - Script pesanti - </string> - <string name="top_scripts_text"> - [COUNT] script richiedono un totale di [TIME] ms - </string> - <string name="scripts_score_label"> - Ora - </string> - <string name="scripts_mono_time_label"> - Ora 'Mono' - </string> - <string name="top_colliders_title"> - Oggetti con maggiori collisioni - </string> - <string name="top_colliders_text"> - I [COUNT] oggetti che sperimentano il maggior numero di collisioni - </string> - <string name="colliders_score_label"> - Punteggio - </string> - <string name="none_descriptor"> - Nulla di rilevato. - </string> </floater> diff --git a/indra/newview/skins/default/xui/it/floater_tos.xml b/indra/newview/skins/default/xui/it/floater_tos.xml index bc7f2197d0..a11ccdc3af 100644 --- a/indra/newview/skins/default/xui/it/floater_tos.xml +++ b/indra/newview/skins/default/xui/it/floater_tos.xml @@ -2,9 +2,9 @@ <floater name="modal container" title=""> <button label="Continua" label_selected="Continua" name="Continue"/> <button label="Annulla" label_selected="Annulla" name="Cancel"/> - <check_box label="Accetto i Termini di Servizio" name="agree_chk"/> + <check_box label="Accetto i Termini del servizio e le Regole sulla privacy" name="agree_chk"/> <text name="tos_heading"> - Sei pregato di leggere attentamente i seguenti Termini del servizio. Per continuare l'accesso a [SECOND_LIFE], devi accettare le condizioni. + Sei pregato di leggere attentamente i Termini del servizio e le Regole sulla privacy di seguito. Per continuare l'accesso a [SECOND_LIFE], devi accettare le condizioni. </text> <text_editor name="tos_text"> TOS_TEXT diff --git a/indra/newview/skins/default/xui/it/floater_voice_controls.xml b/indra/newview/skins/default/xui/it/floater_voice_controls.xml index e4c54d44eb..07368da0dd 100644 --- a/indra/newview/skins/default/xui/it/floater_voice_controls.xml +++ b/indra/newview/skins/default/xui/it/floater_voice_controls.xml @@ -1,25 +1,26 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_voice_controls" title="Controlli del Voice"> +<floater name="floater_voice_controls" title="Regolazione voce"> <string name="title_nearby"> - VOICE NEI DINTORNI + VOCE NEI DINTORNI </string> <string name="title_group"> - Chiamata di Gruppo con [GROUP] + Chiamata di gruppo con [GROUP] </string> <string name="title_adhoc"> - Conference Call + Chiamata in conferenza </string> <string name="title_peer_2_peer"> - Chiama con [NAME] + Chiamata con [NAME] </string> <string name="no_one_near"> - Nessuno vicino + Nessuno nei dintorni ha attivato la funzione voce </string> - <panel name="control_panel"> - <layout_stack> - <layout_panel name="leave_btn_panel"> - <button label="Chiudi Chiamata" name="leave_call_btn"/> - </layout_panel> - </layout_stack> - </panel> + <layout_stack name="my_call_stack"> + <layout_panel name="my_panel"> + <text name="user_text" value="Il mio avatar:"/> + </layout_panel> + <layout_panel name="leave_call_btn_panel"> + <button label="Abbandona chiamata" name="leave_call_btn"/> + </layout_panel> + </layout_stack> </floater> diff --git a/indra/newview/skins/default/xui/it/floater_water.xml b/indra/newview/skins/default/xui/it/floater_water.xml index d2849440d6..c6ab646fbf 100644 --- a/indra/newview/skins/default/xui/it/floater_water.xml +++ b/indra/newview/skins/default/xui/it/floater_water.xml @@ -8,7 +8,7 @@ <button label="Salva" label_selected="Salva" name="WaterSavePreset"/> <button label="Cancella" label_selected="Cancella" name="WaterDeletePreset"/> <tab_container name="Water Tabs"> - <panel label="Impostazioni" name="Settings"> + <panel label="IMPOSTAZIONI" name="Settings"> <text name="BHText"> Colore della nebbiosità dell'acqua </text> @@ -62,7 +62,7 @@ </text> <button label="?" left="650" name="WaterBlurMultiplierHelp"/> </panel> - <panel label="Immagine" name="Waves"> + <panel label="IMMAGINE" name="Waves"> <text name="BHText"> Direzione della grande onda </text> diff --git a/indra/newview/skins/default/xui/it/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/it/floater_wearable_save_as.xml index dcb7620bd5..7c3754f004 100644 --- a/indra/newview/skins/default/xui/it/floater_wearable_save_as.xml +++ b/indra/newview/skins/default/xui/it/floater_wearable_save_as.xml @@ -3,7 +3,7 @@ <button label="Salva" label_selected="Salva" name="Save"/> <button label="Annulla" label_selected="Annulla" name="Cancel"/> <text name="Save item as:"> - Salva oggetto come: + Salva oggetto nel mio inventario come: </text> <line_editor name="name ed"> Nuovo [DESC] diff --git a/indra/newview/skins/default/xui/it/floater_whitelist_entry.xml b/indra/newview/skins/default/xui/it/floater_whitelist_entry.xml index 6d68db058d..9abc968b94 100644 --- a/indra/newview/skins/default/xui/it/floater_whitelist_entry.xml +++ b/indra/newview/skins/default/xui/it/floater_whitelist_entry.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="whitelist_entry"> +<floater name="whitelist_entry" title="VOCE DELLA LISTA BIANCA"> <text name="media_label"> Inserisci un URL o una configurazione URL da aggiungere alla lista dei domini permessi </text> <line_editor name="whitelist_entry" tool_tip="Inserisci un URL o una configurazione URL alla lista bianca"/> <button label="OK" name="ok_btn"/> - <button label="Cancella" name="cancel_btn"/> + <button label="Annulla" name="cancel_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/it/floater_windlight_options.xml b/indra/newview/skins/default/xui/it/floater_windlight_options.xml index e86d656e39..1f6f0fab58 100644 --- a/indra/newview/skins/default/xui/it/floater_windlight_options.xml +++ b/indra/newview/skins/default/xui/it/floater_windlight_options.xml @@ -4,15 +4,15 @@ Cieli predefiniti: </text> <button label="Nuovo" label_selected="Nuovo" name="WLNewPreset"/> - <button label="Salva" label_selected="Salva" name="WLSavePreset" left_delta="72"/> - <button label="Elimina" label_selected="Elimina" name="WLDeletePreset" left_delta="72"/> - <button font="SansSerifSmall" width="165" left_delta="85" label="Editor del ciclo giorno/notte" label_selected="Editor del ciclo giorno/notte" name="WLDayCycleMenuButton"/> + <button label="Salva" label_selected="Salva" left_delta="72" name="WLSavePreset"/> + <button label="Elimina" label_selected="Elimina" left_delta="72" name="WLDeletePreset"/> + <button font="SansSerifSmall" label="Editor del ciclo giorno/notte" label_selected="Editor del ciclo giorno/notte" left_delta="85" name="WLDayCycleMenuButton" width="165"/> <tab_container name="WindLight Tabs"> - <panel label="Atmosfera" name="Atmosphere"> + <panel label="ATMOSFERA" name="Atmosphere"> <text name="BHText"> Blu dell'Orizzonte </text> - <button label="?" name="WLBlueHorizonHelp" left="189"/> + <button label="?" left="189" name="WLBlueHorizonHelp"/> <text name="BHText2"> R </text> @@ -25,14 +25,14 @@ <text name="BHText5"> I </text> - <text name="BDensText" font="SansSerifSmall"> + <text font="SansSerifSmall" name="BDensText"> Altezza della Foschia all'Orizzonte </text> - <button label="?" name="WLHazeHorizonHelp" left="189" /> + <button label="?" left="189" name="WLHazeHorizonHelp"/> <text name="BDensText2"> Densità del Blu </text> - <button label="?" name="WLBlueDensityHelp" /> + <button label="?" name="WLBlueDensityHelp"/> <text name="BHText6"> R </text> @@ -52,17 +52,17 @@ <text name="DensMultText"> Moltiplicatore di Densità </text> - <button label="?" name="WLDensityMultHelp" left="645"/> + <button label="?" left="645" name="WLDensityMultHelp"/> <text name="WLDistanceMultText"> Moltiplicatore della Distanza </text> - <button label="?" name="WLDistanceMultHelp" left="645"/> + <button label="?" left="645" name="WLDistanceMultHelp"/> <text name="MaxAltText"> Altitudine Massima </text> - <button label="?" name="WLMaxAltitudeHelp" left="645"/> + <button label="?" left="645" name="WLMaxAltitudeHelp"/> </panel> - <panel label="Illuminazione" name="Lighting"> + <panel label="ILLUMINAZIONE" name="Lighting"> <text name="SLCText"> Colore Sole/Luna </text> @@ -118,7 +118,7 @@ </text> <button label="?" name="WLStarBrightnessHelp"/> </panel> - <panel label="Nuvole" name="Clouds"> + <panel label="NUVOLE" name="Clouds"> <text name="WLCloudColorText"> Colore delle Nuvole </text> @@ -151,15 +151,15 @@ <text name="WLCloudCoverageText"> Copertura delle Nuvole </text> - <button label="?" name="WLCloudCoverageHelp" left="415"/> + <button label="?" left="415" name="WLCloudCoverageHelp"/> <text name="WLCloudScaleText"> Altitudine delle Nuvole </text> - <button label="?" name="WLCloudScaleHelp" left="415"/> + <button label="?" left="415" name="WLCloudScaleHelp"/> <text name="WLCloudDetailText"> Dettagli Nuvole (XY/ Densità) </text> - <button label="?" name="WLCloudDetailHelp" left="415"/> + <button label="?" left="415" name="WLCloudDetailHelp"/> <text name="BHText8"> X </text> @@ -180,7 +180,7 @@ <button label="?" name="WLCloudScrollYHelp"/> <check_box label="Blocca" name="WLCloudLockY"/> <check_box label="Mostra le Nuvole Classiche" name="DrawClassicClouds"/> - <button label="?" name="WLClassicCloudsHelp" left="645"/> + <button label="?" left="645" name="WLClassicCloudsHelp"/> </panel> </tab_container> <string name="WLDefaultSkyNames"> diff --git a/indra/newview/skins/default/xui/it/floater_window_size.xml b/indra/newview/skins/default/xui/it/floater_window_size.xml new file mode 100644 index 0000000000..036b74b7d9 --- /dev/null +++ b/indra/newview/skins/default/xui/it/floater_window_size.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="window_size" title="DIMENSIONE FINESTRA"> + <string name="resolution_format"> + [RES_X] x [RES_Y] + </string> + <text name="windowsize_text"> + Imposta dimensione finestra: + </text> + <combo_box name="window_size_combo" tool_tip="larghezza x altezza"> + <combo_box.item label="1000 x 700 (default)" name="item0"/> + <combo_box.item label="1024 x 768" name="item1"/> + <combo_box.item label="1280 x 720 (720p)" name="item2"/> + <combo_box.item label="1920 x 1080 (1080p)" name="item3"/> + </combo_box> + <button label="Imposta" name="set_btn"/> + <button label="Annulla" name="cancel_btn"/> +</floater> diff --git a/indra/newview/skins/default/xui/it/floater_world_map.xml b/indra/newview/skins/default/xui/it/floater_world_map.xml index 1b47dd7d7e..31d7a8df9e 100644 --- a/indra/newview/skins/default/xui/it/floater_world_map.xml +++ b/indra/newview/skins/default/xui/it/floater_world_map.xml @@ -5,71 +5,66 @@ Legenda </text> </panel> - <panel - name="layout_panel_2"> - <button font="SansSerifSmall" label="Mostra la mia posizione" label_selected="Mostra la mia posizione" left_delta="91" name="Show My Location" tool_tip="Centra la mappa sul luogo dove si trova il mio avatar" width="135"/> - <text name="person_label"> + <panel name="layout_panel_2"> + <button name="Show My Location" tool_tip="Centra la mappa sulla posizione del mio avatar"/> + <text name="me_label"> Io </text> - <check_box label="Residenti" name="people_chk"/> - <check_box label="Punto informativo" name="infohub_chk"/> + <text name="person_label"> + Persona + </text> <text name="infohub_label"> Infohub </text> - <check_box bottom="-170" label="Terra in vendita" name="land_for_sale_chk"/> - <icon bottom="-170" name="landforsale"/> <text name="land_sale_label"> - Vendita di terra + Vendita terreno + </text> + <text name="by_owner_label"> + da parte del proprietario </text> <text name="auction_label"> - per conto del proprietario + asta di terreni </text> - <button label="Vai a Casa" label_selected="Vai a Casa" name="Go Home" tool_tip="Teleport a casa mia"/> + <button name="Go Home" tool_tip="Teleport a casa"/> <text name="Home_label"> - Casa + Home </text> <text name="events_label"> Eventi: </text> - <check_box label="PG" name="event_chk"/> - <check_box initial_value="true" label="Mature" name="event_mature_chk"/> + <text name="pg_label"> + Generale + </text> + <check_box initial_value="vero" name="event_mature_chk"/> <text name="mature_label"> - Mature + Moderato + </text> + <text name="adult_label"> + Adulto </text> - <check_box label="Adult" name="event_adult_chk"/> </panel> - <panel - name="layout_panel_3"> + <panel name="layout_panel_3"> <text name="find_on_map_label"> - Trova sulla Mappa + Trova sulla mappa </text> </panel> - <panel - name="layout_panel_4"> - <combo_box label="Amici Online" name="friend combo" tool_tip="Mostra amici sulla mappa"> - <combo_box.item label="Miei Amici Online" name="item1"/> + <panel name="layout_panel_4"> + <combo_box label="Amici online" name="friend combo" tool_tip="Mostra amici sulla mappa"> + <combo_box.item label="I miei amici online" name="item1"/> </combo_box> - <combo_box label="Miei Landmarks" name="landmark combo" tool_tip="Landmark da mostrare sulla mappa"> - <combo_box.item label="Miei Landmarks" name="item1"/> + <combo_box label="I miei punti di riferimento" name="landmark combo" tool_tip="Punto di riferimento da mostrare sulla mappa"> + <combo_box.item label="I miei punti di riferimento" name="item1"/> </combo_box> - <search_editor label="Regione per nome" name="location" tool_tip="Scrivi il nome di una regione"/> - <button label="Trova" name="DoSearch" tool_tip="Cerca regione"/> - <scroll_list bottom_delta="-310" height="304" name="search_results"> - <scroll_list.columns label="" name="icon"/> - <scroll_list.columns label="" name="sim_name"/> - </scroll_list> - <button font="SansSerifSmall" label="Teletrasporto" label_selected="Teletrasporto" name="Teleport" tool_tip="Teletrasporto al luogo prescelto"/> - <button font="SansSerifSmall" label="Copia SLurl" name="copy_slurl" tool_tip="Copia il luogo attuale come SLurl per essere usato nel web."/> - <button font="SansSerifSmall" label="Mostra Selezione" label_selected="Mostra destinazione" left_delta="91" name="Show Destination" tool_tip="Centra la mappa sul luogo prescelto" width="135"/> + <search_editor label="Regioni secondo il nome" name="location" tool_tip="Digita il nome di una regione"/> + <button label="Trova" name="DoSearch" tool_tip="Cerca la regione"/> + <button name="Clear" tool_tip="Elimina le linee di monitoraggio e reimposta la mappa"/> + <button label="Teleport" name="Teleport" tool_tip="Teleport al luogo selezionato"/> + <button label="Copia SLurl" name="copy_slurl" tool_tip="Copia la posizione attuale come un SLurl da usare nel Web."/> + <button label="Mostra la selezione" name="Show Destination" tool_tip="Centra la mappa sul luogo selezionato"/> </panel> - <panel - name="layout_panel_5"> + <panel name="layout_panel_5"> <text name="zoom_label"> - Zoom + Ingrandisci </text> </panel> - <panel - name="layout_panel_6"> - <slider label="Zoom" name="zoom slider"/> - </panel> </floater> diff --git a/indra/newview/skins/default/xui/it/inspect_avatar.xml b/indra/newview/skins/default/xui/it/inspect_avatar.xml index 61f7a69234..ec5561a5b2 100644 --- a/indra/newview/skins/default/xui/it/inspect_avatar.xml +++ b/indra/newview/skins/default/xui/it/inspect_avatar.xml @@ -5,17 +5,17 @@ --> <floater name="inspect_avatar"> <string name="Subtitle"> - [ETA'] + [AGE] </string> <string name="Details"> - [PROFILO_SL] + [SL_PROFILE] </string> - <slider name="volume_slider" tool_tip="Volume del Voice" value="0.5"/> - <button label="Aggiungi Amico" name="add_friend_btn"/> + <slider name="volume_slider" tool_tip="Volume voce" value="0.5"/> + <button label="Aggiungi amico" name="add_friend_btn"/> <button label="IM" name="im_btn"/> - <button label="Di più" name="view_profile_btn"/> + <button label="Profilo" name="view_profile_btn"/> <panel name="moderator_panel"> - <button label="Disattiva il Voice" name="disable_voice"/> - <button label="Attiva Voice" name="enable_voice"/> + <button label="Disattiva voce" name="disable_voice"/> + <button label="Attiva voce" name="enable_voice"/> </panel> </floater> diff --git a/indra/newview/skins/default/xui/it/inspect_group.xml b/indra/newview/skins/default/xui/it/inspect_group.xml index d7b86fdbcb..2416f4bb12 100644 --- a/indra/newview/skins/default/xui/it/inspect_group.xml +++ b/indra/newview/skins/default/xui/it/inspect_group.xml @@ -5,18 +5,18 @@ --> <floater name="inspect_group"> <string name="PrivateGroup"> - Gruppo Privato + Gruppo privato </string> <string name="FreeToJoin"> Adesione libera </string> <string name="CostToJoin"> - L$[AMOUNT] per aderire + L$ [AMOUNT] per aderire </string> <string name="YouAreMember"> - Tu sei un Membro + Tu sei un iscritto </string> - <button label="Aderire" name="join_btn"/> - <button label="Abbandona" name="leave_btn"/> - <button label="Vedi Profilo" name="view_profile_btn"/> + <button label="Iscriviti" name="join_btn"/> + <button label="Chiudi" name="leave_btn"/> + <button label="Vedi profilo" name="view_profile_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/it/inspect_object.xml b/indra/newview/skins/default/xui/it/inspect_object.xml index 7e6d195cb1..fd58c18e0b 100644 --- a/indra/newview/skins/default/xui/it/inspect_object.xml +++ b/indra/newview/skins/default/xui/it/inspect_object.xml @@ -9,10 +9,10 @@ </string> <string name="CreatorAndOwner"> Di [CREATOR] -owner [OWNER] +proprietario [OWNER] </string> <string name="Price"> - L$[AMOUNT] + L$ [AMOUNT] </string> <string name="PriceFree"> Gratis! @@ -21,14 +21,14 @@ owner [OWNER] Tocca </string> <string name="Sit"> - Siedi + Siediti </string> - <button label="Compra" name="buy_btn"/> + <button label="Acquista" name="buy_btn"/> <button label="Paga" name="pay_btn"/> - <button label="Fai una Copia" name="take_free_copy_btn"/> + <button label="Prendi copia" name="take_free_copy_btn"/> <button label="Tocca" name="touch_btn"/> - <button label="Siedi" name="sit_btn"/> + <button label="Siediti" name="sit_btn"/> <button label="Apri" name="open_btn"/> - <icon name="secure_browsing" tool_tip="Secure Browsing"/> - <button label="Ulteriore" name="more_info_btn"/> + <icon name="secure_browsing" tool_tip="Browsing sicuro"/> + <button label="Altro" name="more_info_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/it/inspect_remote_object.xml b/indra/newview/skins/default/xui/it/inspect_remote_object.xml index 9fabe2ca0b..b2d96ad757 100644 --- a/indra/newview/skins/default/xui/it/inspect_remote_object.xml +++ b/indra/newview/skins/default/xui/it/inspect_remote_object.xml @@ -8,6 +8,6 @@ Proprietario: </text> <button label="Mappa" name="map_btn"/> - <button label="Bloccare" name="block_btn"/> + <button label="Blocca" name="block_btn"/> <button label="Chiudi" name="close_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/it/menu_attachment_other.xml b/indra/newview/skins/default/xui/it/menu_attachment_other.xml index ff068b90a5..3dfadd9690 100644 --- a/indra/newview/skins/default/xui/it/menu_attachment_other.xml +++ b/indra/newview/skins/default/xui/it/menu_attachment_other.xml @@ -2,16 +2,16 @@ <!-- *NOTE: See also menu_avatar_other.xml --> <context_menu name="Avatar Pie"> <menu_item_call label="Vedi profilo" name="Profile..."/> - <menu_item_call label="Chiedi amicizia" name="Add Friend"/> + <menu_item_call label="Aggiungi amico" name="Add Friend"/> <menu_item_call label="IM" name="Send IM..."/> <menu_item_call label="Chiama" name="Call"/> - <menu_item_call label="Invita nel gruppo" name="Invite..."/> + <menu_item_call label="Invita al gruppo" name="Invite..."/> <menu_item_call label="Blocca" name="Avatar Mute"/> - <menu_item_call label="Denuncia" name="abuse"/> + <menu_item_call label="Segnala" name="abuse"/> <menu_item_call label="Congela" name="Freeze..."/> <menu_item_call label="Espelli" name="Eject..."/> <menu_item_call label="Debug" name="Debug..."/> - <menu_item_call label="Avvicinati" name="Zoom In"/> + <menu_item_call label="Zoom avanti" name="Zoom In"/> <menu_item_call label="Paga" name="Pay..."/> - <menu_item_call label="Profilo oggetto" name="Object Inspect"/> + <menu_item_call label="Profilo dell'oggetto" name="Object Inspect"/> </context_menu> diff --git a/indra/newview/skins/default/xui/it/menu_attachment_self.xml b/indra/newview/skins/default/xui/it/menu_attachment_self.xml index 9711b5918a..f30b286901 100644 --- a/indra/newview/skins/default/xui/it/menu_attachment_self.xml +++ b/indra/newview/skins/default/xui/it/menu_attachment_self.xml @@ -5,8 +5,8 @@ <menu_item_call label="Stacca" name="Detach"/> <menu_item_call label="Lascia" name="Drop"/> <menu_item_call label="Alzati" name="Stand Up"/> - <menu_item_call label="Il mio aspetto fisico" name="Appearance..."/> - <menu_item_call label="I miei amici" name="Friends..."/> + <menu_item_call label="Il mio aspetto" name="Appearance..."/> + <menu_item_call label="I miei amici..." name="Friends..."/> <menu_item_call label="I miei gruppi" name="Groups..."/> <menu_item_call label="Il mio profilo" name="Profile..."/> </context_menu> diff --git a/indra/newview/skins/default/xui/it/menu_avatar_icon.xml b/indra/newview/skins/default/xui/it/menu_avatar_icon.xml index 522c7ab4e6..b93b695300 100644 --- a/indra/newview/skins/default/xui/it/menu_avatar_icon.xml +++ b/indra/newview/skins/default/xui/it/menu_avatar_icon.xml @@ -2,6 +2,6 @@ <menu name="Avatar Icon Menu"> <menu_item_call label="Vedi profilo" name="Show Profile"/> <menu_item_call label="Manda IM..." name="Send IM"/> - <menu_item_call label="Chiedi amicizia..." name="Add Friend"/> + <menu_item_call label="Aggiungi come amico..." name="Add Friend"/> <menu_item_call label="Togli amicizia..." name="Remove Friend"/> </menu> diff --git a/indra/newview/skins/default/xui/it/menu_avatar_other.xml b/indra/newview/skins/default/xui/it/menu_avatar_other.xml index a435fcd311..8a1ff3d7ec 100644 --- a/indra/newview/skins/default/xui/it/menu_avatar_other.xml +++ b/indra/newview/skins/default/xui/it/menu_avatar_other.xml @@ -2,15 +2,15 @@ <!-- *NOTE: See also menu_attachment_other.xml --> <context_menu name="Avatar Pie"> <menu_item_call label="Vedi profilo" name="Profile..."/> - <menu_item_call label="Chiedi amicizia" name="Add Friend"/> + <menu_item_call label="Aggiungi amico" name="Add Friend"/> <menu_item_call label="IM" name="Send IM..."/> <menu_item_call label="Chiama" name="Call"/> - <menu_item_call label="Invita nel gruppo" name="Invite..."/> + <menu_item_call label="Invita al gruppo" name="Invite..."/> <menu_item_call label="Blocca" name="Avatar Mute"/> - <menu_item_call label="Denuncia" name="abuse"/> + <menu_item_call label="Segnala" name="abuse"/> <menu_item_call label="Congela" name="Freeze..."/> <menu_item_call label="Espelli" name="Eject..."/> <menu_item_call label="Debug" name="Debug..."/> - <menu_item_call label="Avvicinati" name="Zoom In"/> + <menu_item_call label="Zoom avanti" name="Zoom In"/> <menu_item_call label="Paga" name="Pay..."/> </context_menu> diff --git a/indra/newview/skins/default/xui/it/menu_avatar_self.xml b/indra/newview/skins/default/xui/it/menu_avatar_self.xml index b7a9f8efbe..09219cb843 100644 --- a/indra/newview/skins/default/xui/it/menu_avatar_self.xml +++ b/indra/newview/skins/default/xui/it/menu_avatar_self.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Self Pie"> <menu_item_call label="Alzati" name="Stand Up"/> - <context_menu label="Vola >" name="Take Off >"> - <context_menu label="Abiti >" name="Clothes >"> - <menu_item_call label="Gonna" name="Shirt"/> + <context_menu label="Togli ▶" name="Take Off >"> + <context_menu label="Abiti ▶" name="Clothes >"> + <menu_item_call label="Camicia" name="Shirt"/> <menu_item_call label="Pantaloni" name="Pants"/> <menu_item_call label="Gonna" name="Skirt"/> <menu_item_call label="Scarpe" name="Shoes"/> @@ -13,15 +13,15 @@ <menu_item_call label="Maglietta intima" name="Self Undershirt"/> <menu_item_call label="Slip" name="Self Underpants"/> <menu_item_call label="Tatuaggio" name="Self Tattoo"/> - <menu_item_call label="Alfa (trasparenza)" name="Self Alpha"/> + <menu_item_call label="Alpha (Trasparenza)" name="Self Alpha"/> <menu_item_call label="Tutti gli abiti" name="All Clothes"/> </context_menu> - <context_menu label="HUD >" name="Object Detach HUD"/> - <context_menu label="Stacca >" name="Object Detach"/> + <context_menu label="HUD ▶" name="Object Detach HUD"/> + <context_menu label="Stacca ▶" name="Object Detach"/> <menu_item_call label="Stacca tutto" name="Detach All"/> </context_menu> - <menu_item_call label="Il mio aspetto fisico" name="Appearance..."/> - <menu_item_call label="I miei amici" name="Friends..."/> + <menu_item_call label="Il mio aspetto" name="Appearance..."/> + <menu_item_call label="I miei amici..." name="Friends..."/> <menu_item_call label="I miei gruppi" name="Groups..."/> <menu_item_call label="Il mio profilo" name="Profile..."/> </context_menu> diff --git a/indra/newview/skins/default/xui/it/menu_bottomtray.xml b/indra/newview/skins/default/xui/it/menu_bottomtray.xml index 185cf75183..7203d002d2 100644 --- a/indra/newview/skins/default/xui/it/menu_bottomtray.xml +++ b/indra/newview/skins/default/xui/it/menu_bottomtray.xml @@ -2,11 +2,11 @@ <menu name="hide_camera_move_controls_menu"> <menu_item_check label="Tasto Gesture" name="ShowGestureButton"/> <menu_item_check label="Tasto Movimento" name="ShowMoveButton"/> - <menu_item_check label="Tasto Camera" name="ShowCameraButton"/> - <menu_item_check label="Tasto Snapshot" name="ShowSnapshotButton"/> + <menu_item_check label="Tasto Visuale" name="ShowCameraButton"/> + <menu_item_check label="Tasto Foto" name="ShowSnapshotButton"/> <menu_item_call label="Taglia" name="NearbyChatBar_Cut"/> <menu_item_call label="Copia" name="NearbyChatBar_Copy"/> <menu_item_call label="Incolla" name="NearbyChatBar_Paste"/> - <menu_item_call label="Cancella" name="NearbyChatBar_Delete"/> - <menu_item_call label="Seleziona Tutto" name="NearbyChatBar_Select_All"/> + <menu_item_call label="Elimina" name="NearbyChatBar_Delete"/> + <menu_item_call label="Seleziona tutto" name="NearbyChatBar_Select_All"/> </menu> diff --git a/indra/newview/skins/default/xui/it/menu_favorites.xml b/indra/newview/skins/default/xui/it/menu_favorites.xml index 9c4966d198..7813ef44b5 100644 --- a/indra/newview/skins/default/xui/it/menu_favorites.xml +++ b/indra/newview/skins/default/xui/it/menu_favorites.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="Popup"> <menu_item_call label="Teleport" name="Teleport To Landmark"/> - <menu_item_call label="Vedi/Modifica Landmark" name="Landmark Open"/> + <menu_item_call label="Vedi/Modifica punto di riferimento" name="Landmark Open"/> <menu_item_call label="Copia SLurl" name="Copy slurl"/> <menu_item_call label="Mostra sulla mappa" name="Show On Map"/> <menu_item_call label="Copia" name="Landmark Copy"/> <menu_item_call label="Incolla" name="Landmark Paste"/> - <menu_item_call label="Cancella" name="Delete"/> + <menu_item_call label="Elimina" name="Delete"/> </menu> diff --git a/indra/newview/skins/default/xui/it/menu_gesture_gear.xml b/indra/newview/skins/default/xui/it/menu_gesture_gear.xml index c4f9d21d14..7cfcc6287e 100644 --- a/indra/newview/skins/default/xui/it/menu_gesture_gear.xml +++ b/indra/newview/skins/default/xui/it/menu_gesture_gear.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="menu_gesture_gear"> - <menu_item_call label="Aggiungi/Cancella dai favoriti" name="activate"/> + <menu_item_call label="Aggiungi/Rimuovi dai preferiti" name="activate"/> <menu_item_call label="Copia" name="copy_gesture"/> <menu_item_call label="Incolla" name="paste"/> <menu_item_call label="Copia UUID" name="copy_uuid"/> - <menu_item_call label="Salva outfit" name="save_to_outfit"/> + <menu_item_call label="Salva vestiario" name="save_to_outfit"/> <menu_item_call label="Modifica" name="edit_gesture"/> <menu_item_call label="Ispeziona" name="inspect"/> </menu> diff --git a/indra/newview/skins/default/xui/it/menu_group_plus.xml b/indra/newview/skins/default/xui/it/menu_group_plus.xml index 6b7692a067..3b76fb94a9 100644 --- a/indra/newview/skins/default/xui/it/menu_group_plus.xml +++ b/indra/newview/skins/default/xui/it/menu_group_plus.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="menu_group_plus"> - <menu_item_call label="Unisciti al gruppo..." name="item_join"/> + <menu_item_call label="Aderisci al gruppo..." name="item_join"/> <menu_item_call label="Nuovo gruppo..." name="item_new"/> </menu> diff --git a/indra/newview/skins/default/xui/it/menu_hide_navbar.xml b/indra/newview/skins/default/xui/it/menu_hide_navbar.xml index a87e76a19b..ee50a18ba5 100644 --- a/indra/newview/skins/default/xui/it/menu_hide_navbar.xml +++ b/indra/newview/skins/default/xui/it/menu_hide_navbar.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="hide_navbar_menu"> <menu_item_check label="Mostra la barra di navigazione" name="ShowNavbarNavigationPanel"/> - <menu_item_check label="Mostra la barra dei favoriti" name="ShowNavbarFavoritesPanel"/> + <menu_item_check label="Mostra la barra dei Preferiti" name="ShowNavbarFavoritesPanel"/> </menu> diff --git a/indra/newview/skins/default/xui/it/menu_im_well_button.xml b/indra/newview/skins/default/xui/it/menu_im_well_button.xml new file mode 100644 index 0000000000..9e471b771c --- /dev/null +++ b/indra/newview/skins/default/xui/it/menu_im_well_button.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="IM Well Button Context Menu"> + <menu_item_call label="Chiudi tutto" name="Close All"/> +</context_menu> diff --git a/indra/newview/skins/default/xui/it/menu_imchiclet_group.xml b/indra/newview/skins/default/xui/it/menu_imchiclet_group.xml index f39ad316fe..baa4e671b0 100644 --- a/indra/newview/skins/default/xui/it/menu_imchiclet_group.xml +++ b/indra/newview/skins/default/xui/it/menu_imchiclet_group.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="IMChiclet Group Menu"> - <menu_item_call label="Informazioni gruppo" name="Show Profile"/> + <menu_item_call label="Informazioni sul gruppo" name="Show Profile"/> <menu_item_call label="Mostra sessione" name="Chat"/> <menu_item_call label="Fine sessione" name="End Session"/> </menu> diff --git a/indra/newview/skins/default/xui/it/menu_imchiclet_p2p.xml b/indra/newview/skins/default/xui/it/menu_imchiclet_p2p.xml index e89576b1f9..2eacbb09ad 100644 --- a/indra/newview/skins/default/xui/it/menu_imchiclet_p2p.xml +++ b/indra/newview/skins/default/xui/it/menu_imchiclet_p2p.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="IMChiclet P2P Menu"> <menu_item_call label="Vedi profilo" name="Show Profile"/> - <menu_item_call label="Chiedi amicizia" name="Add Friend"/> + <menu_item_call label="Aggiungi amico" name="Add Friend"/> <menu_item_call label="Mostra sessione" name="Send IM"/> <menu_item_call label="Fine sessione" name="End Session"/> </menu> diff --git a/indra/newview/skins/default/xui/it/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/it/menu_inspect_avatar_gear.xml index 968fbd37ae..ca6d5a4ad8 100644 --- a/indra/newview/skins/default/xui/it/menu_inspect_avatar_gear.xml +++ b/indra/newview/skins/default/xui/it/menu_inspect_avatar_gear.xml @@ -1,17 +1,19 @@ <?xml version="1.0" encoding="utf-8"?> <menu name="Gear Menu"> <menu_item_call label="Vedi profilo" name="view_profile"/> - <menu_item_call label="Chiedi amicizia" name="add_friend"/> + <menu_item_call label="Aggiungi amico" name="add_friend"/> <menu_item_call label="IM" name="im"/> <menu_item_call label="Chiama" name="call"/> <menu_item_call label="Teleport" name="teleport"/> - <menu_item_call label="Invita nel gruppo" name="invite_to_group"/> + <menu_item_call label="Invita al gruppo" name="invite_to_group"/> <menu_item_call label="Blocca" name="block"/> - <menu_item_call label="Denuncia" name="report"/> + <menu_item_call label="Sblocca" name="unblock"/> + <menu_item_call label="Segnala" name="report"/> <menu_item_call label="Congela" name="freeze"/> <menu_item_call label="Espelli" name="eject"/> <menu_item_call label="Debug" name="debug"/> <menu_item_call label="Trova sulla mappa" name="find_on_map"/> - <menu_item_call label="Avvicinati" name="zoom_in"/> + <menu_item_call label="Zoom avanti" name="zoom_in"/> <menu_item_call label="Paga" name="pay"/> + <menu_item_call label="Condividi" name="share"/> </menu> diff --git a/indra/newview/skins/default/xui/it/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/it/menu_inspect_object_gear.xml index 74d828fc20..eb10ebd0b6 100644 --- a/indra/newview/skins/default/xui/it/menu_inspect_object_gear.xml +++ b/indra/newview/skins/default/xui/it/menu_inspect_object_gear.xml @@ -1,17 +1,17 @@ <?xml version="1.0" encoding="utf-8"?> <menu name="Gear Menu"> <menu_item_call label="Tocca" name="touch"/> - <menu_item_call label="Siedi" name="sit"/> + <menu_item_call label="Siediti" name="sit"/> <menu_item_call label="Paga" name="pay"/> - <menu_item_call label="Compra" name="buy"/> + <menu_item_call label="Acquista" name="buy"/> <menu_item_call label="Prendi" name="take"/> <menu_item_call label="Prendi copia" name="take_copy"/> <menu_item_call label="Apri" name="open"/> <menu_item_call label="Modifica" name="edit"/> <menu_item_call label="Indossa" name="wear"/> - <menu_item_call label="Denuncia" name="report"/> + <menu_item_call label="Segnala" name="report"/> <menu_item_call label="Blocca" name="block"/> - <menu_item_call label="Avvicinati" name="zoom_in"/> - <menu_item_call label="Cancella" name="remove"/> - <menu_item_call label="Più info" name="more_info"/> + <menu_item_call label="Zoom avanti" name="zoom_in"/> + <menu_item_call label="Rimuovi" name="remove"/> + <menu_item_call label="Maggiori informazioni" name="more_info"/> </menu> diff --git a/indra/newview/skins/default/xui/it/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/it/menu_inspect_self_gear.xml index 1812a21b0d..359afcc283 100644 --- a/indra/newview/skins/default/xui/it/menu_inspect_self_gear.xml +++ b/indra/newview/skins/default/xui/it/menu_inspect_self_gear.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <menu name="Gear Menu"> <menu_item_call label="Alzati" name="stand_up"/> - <menu_item_call label="Il mio aspetto fisico" name="my_appearance"/> + <menu_item_call label="Il mio aspetto" name="my_appearance"/> <menu_item_call label="Il mio profilo" name="my_profile"/> - <menu_item_call label="I miei amici" name="my_friends"/> + <menu_item_call label="I miei amici..." name="my_friends"/> <menu_item_call label="I miei gruppi" name="my_groups"/> </menu> diff --git a/indra/newview/skins/default/xui/it/menu_inventory.xml b/indra/newview/skins/default/xui/it/menu_inventory.xml index 8e51af0d9f..9662f6f937 100644 --- a/indra/newview/skins/default/xui/it/menu_inventory.xml +++ b/indra/newview/skins/default/xui/it/menu_inventory.xml @@ -10,7 +10,7 @@ <menu_item_call label="Svuota gli oggetti persi e ritrovati" name="Empty Lost And Found"/> <menu_item_call label="Nuova Cartella" name="New Folder"/> <menu_item_call label="Nuovo Script" name="New Script"/> - <menu_item_call label="Nuova Notecard" name="New Note"/> + <menu_item_call label="Nuovo biglietto" name="New Note"/> <menu_item_call label="Nuova Gesture" name="New Gesture"/> <menu label="Maglietta intima" name="New Clothes"> <menu_item_call label="Nuova Maglietta" name="New Shirt"/> @@ -46,9 +46,10 @@ <menu_item_call label="Teletrasportati" name="Landmark Open"/> <menu_item_call label="Apri" name="Animation Open"/> <menu_item_call label="Apri" name="Sound Open"/> + <menu_item_call label="Sostituisci vestiti" name="Replace Outfit"/> + <menu_item_call label="Aggiungi al vestiario" name="Add To Outfit"/> <menu_item_call label="Elimina oggetto" name="Purge Item"/> <menu_item_call label="Ripristina oggetto" name="Restore Item"/> - <menu_item_call label="Vai al link" name="Goto Link"/> <menu_item_call label="Apri" name="Open"/> <menu_item_call label="Proprietà" name="Properties"/> <menu_item_call label="Rinomina" name="Rename"/> @@ -57,13 +58,11 @@ <menu_item_call label="Incolla" name="Paste"/> <menu_item_call label="Incolla come link" name="Paste As Link"/> <menu_item_call label="Cancella" name="Delete"/> - <menu_item_call label="Togli gli oggetti" name="Take Off Items"/> - <menu_item_call label="Aggiungi all'outfit" name="Add To Outfit"/> - <menu_item_call label="Sostituisci outfit" name="Replace Outfit"/> + <menu_item_call label="Elimina la cartella di sistema" name="Delete System Folder"/> <menu_item_call label="Inizia la conferenza chat" name="Conference Chat Folder"/> <menu_item_call label="Esegui" name="Sound Play"/> <menu_item_call label="Informazioni sul punto di riferimento" name="About Landmark"/> - <menu_item_call label="Esegui inworld" name="Animation Play"/> + <menu_item_call label="Riproduci in Second Life" name="Animation Play"/> <menu_item_call label="Esegui localmente" name="Animation Audition"/> <menu_item_call label="Invia un Instant Message" name="Send Instant Message"/> <menu_item_call label="Offri teletrasporto..." name="Offer Teleport..."/> diff --git a/indra/newview/skins/default/xui/it/menu_inventory_add.xml b/indra/newview/skins/default/xui/it/menu_inventory_add.xml index e458944f79..05f53f44ba 100644 --- a/indra/newview/skins/default/xui/it/menu_inventory_add.xml +++ b/indra/newview/skins/default/xui/it/menu_inventory_add.xml @@ -8,7 +8,7 @@ </menu> <menu_item_call label="Nuova cartella" name="New Folder"/> <menu_item_call label="Nuovo script" name="New Script"/> - <menu_item_call label="Nuovo appunto" name="New Note"/> + <menu_item_call label="Nuovo biglietto" name="New Note"/> <menu_item_call label="Nuova gesture" name="New Gesture"/> <menu label="Maglietta intima" name="New Clothes"> <menu_item_call label="Nuova camicia" name="New Shirt"/> diff --git a/indra/newview/skins/default/xui/it/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/it/menu_inventory_gear_default.xml index e97af5c950..cf87148f2e 100644 --- a/indra/newview/skins/default/xui/it/menu_inventory_gear_default.xml +++ b/indra/newview/skins/default/xui/it/menu_inventory_gear_default.xml @@ -1,13 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="menu_gear_default"> - <menu_item_call label="Nuova Finestra di Inventory" name="new_window"/> - <menu_item_call label="Ordina per nome" name="sort_by_name"/> - <menu_item_call label="Ordina per data (più recenti)" name="sort_by_recent"/> - <menu_item_call label="Mostra i Filtri" name="show_filters"/> - <menu_item_call label="Cancella i Filtri" name="reset_filters"/> - <menu_item_call label="Chiudi le cartelle" name="close_folders"/> + <menu_item_call label="Nuova finestra inventario" name="new_window"/> + <menu_item_call label="Ordina in base al nome" name="sort_by_name"/> + <menu_item_call label="Mostra prima i più recenti" name="sort_by_recent"/> + <menu_item_call label="Mostra filtri" name="show_filters"/> + <menu_item_call label="Ripristina filtri" name="reset_filters"/> + <menu_item_call label="Chiudi tutte le cartelle" name="close_folders"/> <menu_item_call label="Svuota cestino" name="empty_trash"/> - <menu_item_call label="Svuota Persi e Ritrovati" name="empty_lostnfound"/> + <menu_item_call label="Svuota oggetti smarriti" name="empty_lostnfound"/> <menu_item_call label="Salva texture come" name="Save Texture As"/> <menu_item_call label="Trova originale" name="Find Original"/> <menu_item_call label="Trova tutti i link" name="Find All Links"/> diff --git a/indra/newview/skins/default/xui/it/menu_land.xml b/indra/newview/skins/default/xui/it/menu_land.xml index 173c080c3f..f510078e14 100644 --- a/indra/newview/skins/default/xui/it/menu_land.xml +++ b/indra/newview/skins/default/xui/it/menu_land.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Land Pie"> - <menu_item_call label="Info sul terreno" name="Place Information..."/> - <menu_item_call label="Siedi qui" name="Sit Here"/> - <menu_item_call label="Compra questo terreno" name="Land Buy"/> - <menu_item_call label="Compra permesso" name="Land Buy Pass"/> + <menu_item_call label="Informazioni sui terreni" name="Place Information..."/> + <menu_item_call label="Siediti qui" name="Sit Here"/> + <menu_item_call label="Acquista questo terreno" name="Land Buy"/> + <menu_item_call label="Acquista Permesso" name="Land Buy Pass"/> <menu_item_call label="Costruisci" name="Create"/> <menu_item_call label="Modifica terreno" name="Edit Terrain"/> </context_menu> diff --git a/indra/newview/skins/default/xui/it/menu_landmark.xml b/indra/newview/skins/default/xui/it/menu_landmark.xml index 58e3e992ed..b3cddab783 100644 --- a/indra/newview/skins/default/xui/it/menu_landmark.xml +++ b/indra/newview/skins/default/xui/it/menu_landmark.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <toggleable_menu name="landmark_overflow_menu"> <menu_item_call label="Copia SLurl" name="copy"/> - <menu_item_call label="Cancella" name="delete"/> - <menu_item_call label="Crea luogo consigliato" name="pick"/> - <menu_item_call label="Aggiungi alla barra dei favoriti" name="add_to_favbar"/> + <menu_item_call label="Elimina" name="delete"/> + <menu_item_call label="Crea Luogo consigliato" name="pick"/> + <menu_item_call label="Aggiungi alla barra dei Preferiti" name="add_to_favbar"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/it/menu_login.xml b/indra/newview/skins/default/xui/it/menu_login.xml index db3b84df29..36eeadc478 100644 --- a/indra/newview/skins/default/xui/it/menu_login.xml +++ b/indra/newview/skins/default/xui/it/menu_login.xml @@ -10,21 +10,21 @@ <menu label="Debug" name="Debug"> <menu label="Modifica" name="Edit"> <menu_item_call label="Annulla" name="Undo"/> - <menu_item_call label="Ripeti" name="Redo"/> + <menu_item_call label="Rifai" name="Redo"/> <menu_item_call label="Taglia" name="Cut"/> <menu_item_call label="Copia" name="Copy"/> <menu_item_call label="Incolla" name="Paste"/> - <menu_item_call label="Cancella" name="Delete"/> + <menu_item_call label="Elimina" name="Delete"/> <menu_item_call label="Duplica" name="Duplicate"/> - <menu_item_call label="Seleziona Tutto" name="Select All"/> + <menu_item_call label="Seleziona tutto" name="Select All"/> <menu_item_call label="Deseleziona" name="Deselect"/> </menu> - <menu_item_call label="Mostra Impostazioni di Debug" name="Debug Settings"/> - <menu_item_call label="Impostazioni colori Interfaccia" name="UI/Color Settings"/> - <menu_item_call label="Mostra la finestra laterale" name="Show Side Tray"/> - <menu label="Test Interfaccia Utente" name="UI Tests"/> - <menu_item_call label="Mostra i Termini di Servizio (TOS)" name="TOS"/> - <menu_item_call label="Mostra Messaggi critici" name="Critical"/> - <menu_item_call label="Test Web browser" name="Web Browser Test"/> + <menu_item_call label="Mostra impostazioni di debug" name="Debug Settings"/> + <menu_item_call label="Impostazioni colori interfaccia" name="UI/Color Settings"/> + <menu label="Test interfaccia utente" name="UI Tests"/> + <menu_item_call label="Imposta dimensioni della finestra..." name="Set Window Size..."/> + <menu_item_call label="Mostra i Termini del servizio (TOS)" name="TOS"/> + <menu_item_call label="Mostra messaggio critico" name="Critical"/> + <menu_item_call label="Test browser Web" name="Web Browser Test"/> </menu> </menu_bar> diff --git a/indra/newview/skins/default/xui/it/menu_navbar.xml b/indra/newview/skins/default/xui/it/menu_navbar.xml index 3d855cf701..e42d913a6f 100644 --- a/indra/newview/skins/default/xui/it/menu_navbar.xml +++ b/indra/newview/skins/default/xui/it/menu_navbar.xml @@ -1,11 +1,11 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="Navbar Menu"> <menu_item_check label="Mostra le coordinate" name="Show Coordinates"/> - <menu_item_check label="Mostra proprietà parcel" name="Show Parcel Properties"/> - <menu_item_call label="Landmark" name="Landmark"/> + <menu_item_check label="Mostra proprietà lotto" name="Show Parcel Properties"/> + <menu_item_call label="Punto di riferimento" name="Landmark"/> <menu_item_call label="Taglia" name="Cut"/> <menu_item_call label="Copia" name="Copy"/> <menu_item_call label="Incolla" name="Paste"/> - <menu_item_call label="Cancella" name="Delete"/> + <menu_item_call label="Elimina" name="Delete"/> <menu_item_call label="Seleziona tutto" name="Select All"/> </menu> diff --git a/indra/newview/skins/default/xui/it/menu_nearby_chat.xml b/indra/newview/skins/default/xui/it/menu_nearby_chat.xml index 2a625fc763..719a6d3261 100644 --- a/indra/newview/skins/default/xui/it/menu_nearby_chat.xml +++ b/indra/newview/skins/default/xui/it/menu_nearby_chat.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="NearBy Chat Menu"> <menu_item_call label="Mostra le persone vicine..." name="nearby_people"/> - <menu_item_check label="Mostra Testo bloccato" name="muted_text"/> - <menu_item_check label="Mostra Icone amici" name="show_buddy_icons"/> + <menu_item_check label="Mostra il testo bloccato" name="muted_text"/> + <menu_item_check label="Mostra icone amici" name="show_buddy_icons"/> <menu_item_check label="Mostra nomi" name="show_names"/> - <menu_item_check label="Mostra Icone e nomi" name="show_icons_and_names"/> - <menu_item_call label="Dimensioni del Font" name="font_size"/> + <menu_item_check label="Mostra icone e nomi" name="show_icons_and_names"/> + <menu_item_call label="Dimensioni caratteri" name="font_size"/> </menu> diff --git a/indra/newview/skins/default/xui/it/menu_notification_well_button.xml b/indra/newview/skins/default/xui/it/menu_notification_well_button.xml new file mode 100644 index 0000000000..8c82e30f0e --- /dev/null +++ b/indra/newview/skins/default/xui/it/menu_notification_well_button.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Notification Well Button Context Menu"> + <menu_item_call label="Chiudi tutto" name="Close All"/> +</context_menu> diff --git a/indra/newview/skins/default/xui/it/menu_object.xml b/indra/newview/skins/default/xui/it/menu_object.xml index 955d4c8776..237b6b3a0e 100644 --- a/indra/newview/skins/default/xui/it/menu_object.xml +++ b/indra/newview/skins/default/xui/it/menu_object.xml @@ -4,21 +4,24 @@ <menu_item_call label="Modifica" name="Edit..."/> <menu_item_call label="Costruisci" name="Build"/> <menu_item_call label="Apri" name="Open"/> - <menu_item_call label="Siedi qui" name="Object Sit"/> - <menu_item_call label="Profilo oggetto" name="Object Inspect"/> - <context_menu label="Metti >" name="Put On"> + <menu_item_call label="Siediti qui" name="Object Sit"/> + <menu_item_call label="Alzati" name="Object Stand Up"/> + <menu_item_call label="Profilo dell'oggetto" name="Object Inspect"/> + <menu_item_call label="Zoom avanti" name="Zoom In"/> + <context_menu label="Indossa ▶" name="Put On"> <menu_item_call label="Indossa" name="Wear"/> - <context_menu label="Attacca >" name="Object Attach"/> - <context_menu label="Attacca HUD >" name="Object Attach HUD"/> + <context_menu label="Attacca ▶" name="Object Attach"/> + <context_menu label="Attacca HUD ▶" name="Object Attach HUD"/> </context_menu> - <context_menu label="Togli >" name="Remove"> - <menu_item_call label="Prendi" name="Pie Object Take"/> - <menu_item_call label="Denuncia abuso" name="Report Abuse..."/> + <context_menu label="Togli ▶" name="Remove"> + <menu_item_call label="Segnala abuso" name="Report Abuse..."/> <menu_item_call label="Blocca" name="Object Mute"/> <menu_item_call label="Restituisci" name="Return..."/> - <menu_item_call label="Cancella" name="Delete"/> + <menu_item_call label="Elimina" name="Delete"/> </context_menu> + <menu_item_call label="Acquista" name="Pie Object Bye"/> + <menu_item_call label="Prendi" name="Pie Object Take"/> <menu_item_call label="Prendi copia" name="Take Copy"/> <menu_item_call label="Paga" name="Pay..."/> - <menu_item_call label="Compra" name="Buy..."/> + <menu_item_call label="Acquista" name="Buy..."/> </context_menu> diff --git a/indra/newview/skins/default/xui/it/menu_participant_list.xml b/indra/newview/skins/default/xui/it/menu_participant_list.xml index 33c8fc404d..e641d38508 100644 --- a/indra/newview/skins/default/xui/it/menu_participant_list.xml +++ b/indra/newview/skins/default/xui/it/menu_participant_list.xml @@ -1,16 +1,20 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Participant List Context Menu"> + <menu_item_check label="Ordina in base al nome" name="SortByName"/> + <menu_item_check label="Ordina in base a intervenuti recenti" name="SortByRecentSpeakers"/> <menu_item_call label="Vedi profilo" name="View Profile"/> - <menu_item_call label="Chiedi amicizia" name="Add Friend"/> + <menu_item_call label="Aggiungi amico" name="Add Friend"/> <menu_item_call label="IM" name="IM"/> <menu_item_call label="Chiama" name="Call"/> <menu_item_call label="Condividi" name="Share"/> <menu_item_call label="Paga" name="Pay"/> - <menu_item_check label="Blocca/Sblocca" name="Block/Unblock"/> - <menu_item_check label="Muta testo" name="MuteText"/> - <menu_item_check label="Consenti chat di testo" name="AllowTextChat"/> - <menu_item_call label="Muta questo partecipante" name="ModerateVoiceMuteSelected"/> - <menu_item_call label="Muta tutti gli altri" name="ModerateVoiceMuteOthers"/> - <menu_item_call label="Riabilita questo partecipante" name="ModerateVoiceUnMuteSelected"/> - <menu_item_call label="Riabilita tutti gli altri" name="ModerateVoiceUnMuteOthers"/> + <menu_item_check label="Blocca voce" name="Block/Unblock"/> + <menu_item_check label="Blocca testo" name="MuteText"/> + <context_menu label="Opzioni moderatore >" name="Moderator Options"> + <menu_item_check label="Consenti chat di testo" name="AllowTextChat"/> + <menu_item_call label="Disattiva audio di questo participante" name="ModerateVoiceMuteSelected"/> + <menu_item_call label="Disattiva audio di tutti gli altri" name="ModerateVoiceMuteOthers"/> + <menu_item_call label="Riattiva audio di questo participante" name="ModerateVoiceUnMuteSelected"/> + <menu_item_call label="Disattiva audio di tutti gli altri" name="ModerateVoiceUnMuteOthers"/> + </context_menu> </context_menu> diff --git a/indra/newview/skins/default/xui/it/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/it/menu_people_friends_view_sort.xml index ad8927be13..1f987890c4 100644 --- a/indra/newview/skins/default/xui/it/menu_people_friends_view_sort.xml +++ b/indra/newview/skins/default/xui/it/menu_people_friends_view_sort.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="menu_group_plus"> - <menu_item_check label="Ordina per nome" name="sort_name"/> - <menu_item_check label="Ordina per stato" name="sort_status"/> + <menu_item_check label="Ordina in base al nome" name="sort_name"/> + <menu_item_check label="Ordina in base allo stato" name="sort_status"/> <menu_item_check label="Icone persone" name="view_icons"/> - <menu_item_call label="Mostra gli & oggetti dei residenti bloccati" name="show_blocked_list"/> + <menu_item_call label="Mostra oggetti e residenti bloccati" name="show_blocked_list"/> </menu> diff --git a/indra/newview/skins/default/xui/it/menu_people_groups.xml b/indra/newview/skins/default/xui/it/menu_people_groups.xml new file mode 100644 index 0000000000..30a97a1c72 --- /dev/null +++ b/indra/newview/skins/default/xui/it/menu_people_groups.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<menu name="menu_group_plus"> + <menu_item_call label="Mostra informazioni" name="View Info"/> + <menu_item_call label="Chat" name="Chat"/> + <menu_item_call label="Chiama" name="Call"/> + <menu_item_call label="Attiva" name="Activate"/> + <menu_item_call label="Chiudi" name="Leave"/> +</menu> diff --git a/indra/newview/skins/default/xui/it/menu_people_nearby.xml b/indra/newview/skins/default/xui/it/menu_people_nearby.xml index be071a5074..a974bd181d 100644 --- a/indra/newview/skins/default/xui/it/menu_people_nearby.xml +++ b/indra/newview/skins/default/xui/it/menu_people_nearby.xml @@ -1,10 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Avatar Context Menu"> <menu_item_call label="Vedi profilo" name="View Profile"/> - <menu_item_call label="Chiedi amicizia" name="Add Friend"/> + <menu_item_call label="Aggiungi amico" name="Add Friend"/> + <menu_item_call label="Rimuovi amico" name="Remove Friend"/> <menu_item_call label="IM" name="IM"/> <menu_item_call label="Chiama" name="Call"/> + <menu_item_call label="Mappa" name="Map"/> <menu_item_call label="Condividi" name="Share"/> <menu_item_call label="Paga" name="Pay"/> <menu_item_check label="Blocca/Sblocca" name="Block/Unblock"/> + <menu_item_call label="Offri Teleport" name="teleport"/> </context_menu> diff --git a/indra/newview/skins/default/xui/it/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/it/menu_people_nearby_multiselect.xml index f9fda2fb98..9784a4cc9a 100644 --- a/indra/newview/skins/default/xui/it/menu_people_nearby_multiselect.xml +++ b/indra/newview/skins/default/xui/it/menu_people_nearby_multiselect.xml @@ -1,6 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Multi-Selected People Context Menu"> - <menu_item_call label="Chiedi amicizie" name="Add Friends"/> + <menu_item_call label="Aggiungi amici" name="Add Friends"/> + <menu_item_call label="Rimuovi amici" name="Remove Friend"/> <menu_item_call label="IM" name="IM"/> <menu_item_call label="Chiama" name="Call"/> <menu_item_call label="Condividi" name="Share"/> diff --git a/indra/newview/skins/default/xui/it/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/it/menu_people_nearby_view_sort.xml index c1b384196d..aae2313702 100644 --- a/indra/newview/skins/default/xui/it/menu_people_nearby_view_sort.xml +++ b/indra/newview/skins/default/xui/it/menu_people_nearby_view_sort.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="menu_group_plus"> - <menu_item_check label="Ordina mettendo per primo chi ha parlato per ultimo" name="sort_by_recent_speakers"/> - <menu_item_check label="Ordina per nome" name="sort_name"/> - <menu_item_check label="Ordina per Distanza" name="sort_distance"/> - <menu_item_check label="Vedi le icone delle persone" name="view_icons"/> - <menu_item_call label="Mostra gli & oggetti dei residenti bloccati" name="show_blocked_list"/> + <menu_item_check label="Ordina in base a intervenuti recenti" name="sort_by_recent_speakers"/> + <menu_item_check label="Ordina in base al nome" name="sort_name"/> + <menu_item_check label="Ordina in base alla distanza" name="sort_distance"/> + <menu_item_check label="Icone persone" name="view_icons"/> + <menu_item_call label="Mostra oggetti e residenti bloccati" name="show_blocked_list"/> </menu> diff --git a/indra/newview/skins/default/xui/it/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/it/menu_people_recent_view_sort.xml index f8fd9dca79..7fccd1621a 100644 --- a/indra/newview/skins/default/xui/it/menu_people_recent_view_sort.xml +++ b/indra/newview/skins/default/xui/it/menu_people_recent_view_sort.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="menu_group_plus"> <menu_item_check label="Mostra prima i più recenti" name="sort_most"/> - <menu_item_check label="Ordina per nome" name="sort_name"/> - <menu_item_check label="Vedi le icone delle persone" name="view_icons"/> - <menu_item_call label="Mostra gli & oggetti dei residenti bloccati" name="show_blocked_list"/> + <menu_item_check label="Ordina in base al nome" name="sort_name"/> + <menu_item_check label="Icone persone" name="view_icons"/> + <menu_item_call label="Mostra oggetti e residenti bloccati" name="show_blocked_list"/> </menu> diff --git a/indra/newview/skins/default/xui/it/menu_picks_plus.xml b/indra/newview/skins/default/xui/it/menu_picks_plus.xml index d758a9715e..7fbd5abd57 100644 --- a/indra/newview/skins/default/xui/it/menu_picks_plus.xml +++ b/indra/newview/skins/default/xui/it/menu_picks_plus.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <toggleable_menu name="picks_plus_menu"> - <menu_item_call label="Nuovo luogo consigliato" name="create_pick"/> - <menu_item_call label="Nuovo Annuncio" name="create_classified"/> + <menu_item_call label="Nuovo luogo preferito" name="create_pick"/> + <menu_item_call label="Nuovo annuncio" name="create_classified"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/it/menu_place.xml b/indra/newview/skins/default/xui/it/menu_place.xml index 5b9261b159..5381a4effa 100644 --- a/indra/newview/skins/default/xui/it/menu_place.xml +++ b/indra/newview/skins/default/xui/it/menu_place.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <toggleable_menu name="place_overflow_menu"> - <menu_item_call label="Prendi il Landmark" name="landmark"/> - <menu_item_call label="Crea luogo consigliato" name="pick"/> - <menu_item_call label="Compra Permesso" name="pass"/> + <menu_item_call label="Salva come punto di riferimento" name="landmark"/> + <menu_item_call label="Crea Luogo consigliato" name="pick"/> + <menu_item_call label="Acquista Permesso" name="pass"/> <menu_item_call label="Modifica" name="edit"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/it/menu_place_add_button.xml b/indra/newview/skins/default/xui/it/menu_place_add_button.xml index 6dd10f422e..0e783c0000 100644 --- a/indra/newview/skins/default/xui/it/menu_place_add_button.xml +++ b/indra/newview/skins/default/xui/it/menu_place_add_button.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="menu_folder_gear"> <menu_item_call label="Aggiungi cartella" name="add_folder"/> - <menu_item_call label="Aggiungi landmark" name="add_landmark"/> + <menu_item_call label="Aggiungi punto di riferimento" name="add_landmark"/> </menu> diff --git a/indra/newview/skins/default/xui/it/menu_places_gear_folder.xml b/indra/newview/skins/default/xui/it/menu_places_gear_folder.xml index 45765bf77d..59fbb86ddc 100644 --- a/indra/newview/skins/default/xui/it/menu_places_gear_folder.xml +++ b/indra/newview/skins/default/xui/it/menu_places_gear_folder.xml @@ -1,15 +1,15 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="menu_folder_gear"> - <menu_item_call label="Aggiungi Landmark" name="add_landmark"/> + <menu_item_call label="Aggiungi punto di riferimento" name="add_landmark"/> <menu_item_call label="Aggiungi cartella" name="add_folder"/> <menu_item_call label="Taglia" name="cut"/> <menu_item_call label="Copia" name="copy_folder"/> <menu_item_call label="Incolla" name="paste"/> - <menu_item_call label="Rinomina" name="rename"/> - <menu_item_call label="Cancella" name="delete"/> - <menu_item_call label="Apri" name="expand"/> - <menu_item_call label="Chiudi" name="collapse"/> + <menu_item_call label="Modifica nome" name="rename"/> + <menu_item_call label="Elimina" name="delete"/> + <menu_item_call label="Espandi" name="expand"/> + <menu_item_call label="Comprimi" name="collapse"/> <menu_item_call label="Apri tutte le cartelle" name="expand_all"/> <menu_item_call label="Chiudi tutte le cartelle" name="collapse_all"/> - <menu_item_check label="Ordina per data" name="sort_by_date"/> + <menu_item_check label="Ordina in base alla data" name="sort_by_date"/> </menu> diff --git a/indra/newview/skins/default/xui/it/menu_profile_overflow.xml b/indra/newview/skins/default/xui/it/menu_profile_overflow.xml index 76a04a127e..56b695c597 100644 --- a/indra/newview/skins/default/xui/it/menu_profile_overflow.xml +++ b/indra/newview/skins/default/xui/it/menu_profile_overflow.xml @@ -1,5 +1,12 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <toggleable_menu name="profile_overflow_menu"> + <menu_item_call label="Mappa" name="show_on_map"/> <menu_item_call label="Paga" name="pay"/> <menu_item_call label="Condividi" name="share"/> + <menu_item_call label="Blocca" name="block"/> + <menu_item_call label="Sblocca" name="unblock"/> + <menu_item_call label="Espelli" name="kick"/> + <menu_item_call label="Congela" name="freeze"/> + <menu_item_call label="Scongela" name="unfreeze"/> + <menu_item_call label="CSR" name="csr"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/it/menu_teleport_history_gear.xml b/indra/newview/skins/default/xui/it/menu_teleport_history_gear.xml index 71acda5a9d..409a62c31b 100644 --- a/indra/newview/skins/default/xui/it/menu_teleport_history_gear.xml +++ b/indra/newview/skins/default/xui/it/menu_teleport_history_gear.xml @@ -2,5 +2,5 @@ <menu name="Teleport History Gear Context Menu"> <menu_item_call label="Apri tutte le cartelle" name="Expand all folders"/> <menu_item_call label="Chiudi tutte le cartelle" name="Collapse all folders"/> - <menu_item_call label="Cancella la storia dei Teleport" name="Clear Teleport History"/> + <menu_item_call label="Cancella la cronologia Teleport" name="Clear Teleport History"/> </menu> diff --git a/indra/newview/skins/default/xui/it/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/it/menu_teleport_history_item.xml index c01230584b..81053fbd65 100644 --- a/indra/newview/skins/default/xui/it/menu_teleport_history_item.xml +++ b/indra/newview/skins/default/xui/it/menu_teleport_history_item.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Teleport History Item Context Menu"> <menu_item_call label="Teleport" name="Teleport"/> - <menu_item_call label="Più informazioni" name="More Information"/> + <menu_item_call label="Maggiori informazioni" name="More Information"/> <menu_item_call label="Copia negli appunti" name="CopyToClipboard"/> </context_menu> diff --git a/indra/newview/skins/default/xui/it/menu_text_editor.xml b/indra/newview/skins/default/xui/it/menu_text_editor.xml index baab233a21..4636ce9929 100644 --- a/indra/newview/skins/default/xui/it/menu_text_editor.xml +++ b/indra/newview/skins/default/xui/it/menu_text_editor.xml @@ -3,6 +3,6 @@ <menu_item_call label="Taglia" name="Cut"/> <menu_item_call label="Copia" name="Copy"/> <menu_item_call label="Incolla" name="Paste"/> - <menu_item_call label="Cancella" name="Delete"/> - <menu_item_call label="Seleziona Tutto" name="Select All"/> + <menu_item_call label="Elimina" name="Delete"/> + <menu_item_call label="Seleziona tutto" name="Select All"/> </context_menu> diff --git a/indra/newview/skins/default/xui/it/menu_url_agent.xml b/indra/newview/skins/default/xui/it/menu_url_agent.xml index 874f7a8df9..37755d5749 100644 --- a/indra/newview/skins/default/xui/it/menu_url_agent.xml +++ b/indra/newview/skins/default/xui/it/menu_url_agent.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Url Popup"> - <menu_item_call label="Mostra profilo" name="show_agent"/> - <menu_item_call label="Copia nome negli appunti" name="url_copy_label"/> - <menu_item_call label="Copia SLurl negli appunti" name="url_copy"/> + <menu_item_call label="Mostra profilo residente" name="show_agent"/> + <menu_item_call label="Copia nome negli Appunti" name="url_copy_label"/> + <menu_item_call label="Copia SLurl negli Appunti" name="url_copy"/> </context_menu> diff --git a/indra/newview/skins/default/xui/it/menu_url_group.xml b/indra/newview/skins/default/xui/it/menu_url_group.xml index ac9dab2b3c..d9a792ebdf 100644 --- a/indra/newview/skins/default/xui/it/menu_url_group.xml +++ b/indra/newview/skins/default/xui/it/menu_url_group.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Url Popup"> - <menu_item_call label="Mostra info gruppo" name="show_group"/> - <menu_item_call label="Copia gruppo negli appunti" name="url_copy_label"/> - <menu_item_call label="Copia SLurl negli appunti" name="url_copy"/> + <menu_item_call label="Mostra informazioni gruppo" name="show_group"/> + <menu_item_call label="Copia gruppo negli Appunti" name="url_copy_label"/> + <menu_item_call label="Copia SLurl negli Appunti" name="url_copy"/> </context_menu> diff --git a/indra/newview/skins/default/xui/it/menu_url_http.xml b/indra/newview/skins/default/xui/it/menu_url_http.xml index b8f965f2d6..e0153d9169 100644 --- a/indra/newview/skins/default/xui/it/menu_url_http.xml +++ b/indra/newview/skins/default/xui/it/menu_url_http.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Url Popup"> - <menu_item_call label="Apri pagina web" name="url_open"/> + <menu_item_call label="Apri pagina Web" name="url_open"/> <menu_item_call label="Apri nel browser interno" name="url_open_internal"/> <menu_item_call label="Apri nel browser esterno" name="url_open_external"/> - <menu_item_call label="Copia URL negli appunti" name="url_copy"/> + <menu_item_call label="Copia URL negli Appunti" name="url_copy"/> </context_menu> diff --git a/indra/newview/skins/default/xui/it/menu_url_inventory.xml b/indra/newview/skins/default/xui/it/menu_url_inventory.xml index 0b410b4eff..a45a6bbc10 100644 --- a/indra/newview/skins/default/xui/it/menu_url_inventory.xml +++ b/indra/newview/skins/default/xui/it/menu_url_inventory.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Url Popup"> - <menu_item_call label="Mostra elemento dell'inventory" name="show_item"/> - <menu_item_call label="Copia nome negli appunti" name="url_copy_label"/> - <menu_item_call label="Copia SLurl negli appunti" name="url_copy"/> + <menu_item_call label="Mostra oggetto dell'inventario" name="show_item"/> + <menu_item_call label="Copia nome negli Appunti" name="url_copy_label"/> + <menu_item_call label="Copia SLurl negli Appunti" name="url_copy"/> </context_menu> diff --git a/indra/newview/skins/default/xui/it/menu_url_map.xml b/indra/newview/skins/default/xui/it/menu_url_map.xml index 096efcd1b9..cb7935b3ed 100644 --- a/indra/newview/skins/default/xui/it/menu_url_map.xml +++ b/indra/newview/skins/default/xui/it/menu_url_map.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Url Popup"> <menu_item_call label="Mostra sulla mappa" name="show_on_map"/> - <menu_item_call label="Teleportati nel luogo" name="teleport_to_location"/> - <menu_item_call label="Copia SLurl negli appunti" name="url_copy"/> + <menu_item_call label="Teleport al luogo" name="teleport_to_location"/> + <menu_item_call label="Copia SLurl negli Appunti" name="url_copy"/> </context_menu> diff --git a/indra/newview/skins/default/xui/it/menu_url_objectim.xml b/indra/newview/skins/default/xui/it/menu_url_objectim.xml index 67a9f0b914..763e65f17c 100644 --- a/indra/newview/skins/default/xui/it/menu_url_objectim.xml +++ b/indra/newview/skins/default/xui/it/menu_url_objectim.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Url Popup"> - <menu_item_call label="Mostra info oggetto" name="show_object"/> + <menu_item_call label="Mostra informazioni oggetto" name="show_object"/> <menu_item_call label="Mostra sulla mappa" name="show_on_map"/> - <menu_item_call label="Teleportati sul luogo dell'oggetto" name="teleport_to_object"/> - <menu_item_call label="Copia nome oggetto negli appunti" name="url_copy_label"/> - <menu_item_call label="Copia SLurl negli appunti" name="url_copy"/> + <menu_item_call label="Teleport sul luogo dell'oggetto" name="teleport_to_object"/> + <menu_item_call label="Copia nome oggetto negli Appunti" name="url_copy_label"/> + <menu_item_call label="Copia SLurl negli Appunti" name="url_copy"/> </context_menu> diff --git a/indra/newview/skins/default/xui/it/menu_url_parcel.xml b/indra/newview/skins/default/xui/it/menu_url_parcel.xml index e40d05f423..a032c33585 100644 --- a/indra/newview/skins/default/xui/it/menu_url_parcel.xml +++ b/indra/newview/skins/default/xui/it/menu_url_parcel.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Url Popup"> - <menu_item_call label="Mostra info appezzamento" name="show_parcel"/> + <menu_item_call label="Mostra informazioni lotto" name="show_parcel"/> <menu_item_call label="Mostra sulla mappa" name="show_on_map"/> - <menu_item_call label="Copia SLurl negli appunti" name="url_copy"/> + <menu_item_call label="Copia SLurl negli Appunti" name="url_copy"/> </context_menu> diff --git a/indra/newview/skins/default/xui/it/menu_url_slapp.xml b/indra/newview/skins/default/xui/it/menu_url_slapp.xml index 2e5ad64a59..b368aa9141 100644 --- a/indra/newview/skins/default/xui/it/menu_url_slapp.xml +++ b/indra/newview/skins/default/xui/it/menu_url_slapp.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Url Popup"> - <menu_item_call label="Lancia questo comando" name="run_slapp"/> - <menu_item_call label="Copia SLurl negli appunti" name="url_copy"/> + <menu_item_call label="Esegui questo comando" name="run_slapp"/> + <menu_item_call label="Copia SLurl negli Appunti" name="url_copy"/> </context_menu> diff --git a/indra/newview/skins/default/xui/it/menu_url_slurl.xml b/indra/newview/skins/default/xui/it/menu_url_slurl.xml index 1850252669..355c7dbed9 100644 --- a/indra/newview/skins/default/xui/it/menu_url_slurl.xml +++ b/indra/newview/skins/default/xui/it/menu_url_slurl.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Url Popup"> - <menu_item_call label="Mostra info del luogo" name="show_place"/> + <menu_item_call label="Mostra informazioni del luogo" name="show_place"/> <menu_item_call label="Mostra sulla mappa" name="show_on_map"/> - <menu_item_call label="Teleporta nel luogo" name="teleport_to_location"/> - <menu_item_call label="Copia SLurl negli appunti" name="url_copy"/> + <menu_item_call label="Teleport al luogo" name="teleport_to_location"/> + <menu_item_call label="Copia SLurl negli Appunti" name="url_copy"/> </context_menu> diff --git a/indra/newview/skins/default/xui/it/menu_url_teleport.xml b/indra/newview/skins/default/xui/it/menu_url_teleport.xml index 0a09090c26..c129e61f25 100644 --- a/indra/newview/skins/default/xui/it/menu_url_teleport.xml +++ b/indra/newview/skins/default/xui/it/menu_url_teleport.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Url Popup"> - <menu_item_call label="Teleportati in questo posto" name="teleport"/> - <menu_item_call label="Mostra Sulla mappa" name="show_on_map"/> - <menu_item_call label="Copia SLurl negli appunti" name="url_copy"/> + <menu_item_call label="Teleport a questa destinazione" name="teleport"/> + <menu_item_call label="Mostra sulla mappa" name="show_on_map"/> + <menu_item_call label="Copia SLurl negli Appunti" name="url_copy"/> </context_menu> diff --git a/indra/newview/skins/default/xui/it/menu_viewer.xml b/indra/newview/skins/default/xui/it/menu_viewer.xml index f9605da22a..36b44abf4b 100644 --- a/indra/newview/skins/default/xui/it/menu_viewer.xml +++ b/indra/newview/skins/default/xui/it/menu_viewer.xml @@ -2,67 +2,68 @@ <menu_bar name="Main Menu"> <menu label="Io" name="Me"> <menu_item_call label="Preferenze" name="Preferences"/> - <menu_item_call label="Il mio Pannello di Controllo" name="Manage My Account"> + <menu_item_call label="Il mio Dashboard" name="Manage My Account"> <menu_item_call.on_click name="ManageMyAccount_url" parameter="WebLaunchJoinNow,http://secondlife.com/account/index.php?lang=it"/> </menu_item_call> <menu_item_call label="Compra L$" name="Buy and Sell L$"/> - <menu_item_call label="Il Mio Profilo" name="Profile"/> - <menu_item_call label="Il Mio Aspetto" name="Appearance"/> - <menu_item_check label="Il Mio Inventory" name="Inventory"/> - <menu_item_call label="Mostra Inventory su Barra Laterale" name="ShowSidetrayInventory"/> - <menu_item_call label="Le mie Gesture" name="Gestures"/> - <menu label="Il Mio Stato" name="Status"> - <menu_item_call label="Non Disponibile" name="Set Away"/> - <menu_item_call label="Non Disponibile" name="Set Busy"/> + <menu_item_call label="Il mio profilo" name="Profile"/> + <menu_item_call label="Il mio aspetto" name="Appearance"/> + <menu_item_check label="Il mio inventario" name="Inventory"/> + <menu_item_check label="Il mio inventario" name="ShowSidetrayInventory"/> + <menu_item_check label="Le mie gesture" name="Gestures"/> + <menu label="Il mio stato" name="Status"> + <menu_item_call label="Assente" name="Set Away"/> + <menu_item_call label="Non disponibile" name="Set Busy"/> </menu> - <menu_item_call label="Richiedi Status Amministratore" name="Request Admin Options"/> - <menu_item_call label="Lascia Status Amministratore" name="Leave Admin Options"/> + <menu_item_call label="Richiedi diritti Admin" name="Request Admin Options"/> + <menu_item_call label="Lascia stato Admin" name="Leave Admin Options"/> <menu_item_call label="Esci da [APP_NAME]" name="Quit"/> </menu> <menu label="Comunica" name="Communicate"> - <menu_item_call label="I Miei Amici" name="My Friends"/> - <menu_item_call label="I Miei Gruppi" name="My Groups"/> - <menu_item_check label="Chat Limitrofa" name="Nearby Chat"/> - <menu_item_call label="Persone Vicine" name="Active Speakers"/> - <menu_item_check label="MultiMedia Vicini" name="Nearby Media"/> + <menu_item_call label="I miei amici..." name="My Friends"/> + <menu_item_call label="I miei gruppi" name="My Groups"/> + <menu_item_check label="Chat nei dintorni" name="Nearby Chat"/> + <menu_item_call label="Persone vicine" name="Active Speakers"/> </menu> <menu label="Mondo" name="World"> - <menu_item_check label="Muovi" name="Movement Controls"/> - <menu_item_check label="Vista" name="Camera Controls"/> - <menu_item_call label="Info Terreno" name="About Land"/> - <menu_item_call label="Regione/Proprietà Immobiliari" name="Region/Estate"/> - <menu_item_call label="Compra Terreno" name="Buy Land"/> - <menu_item_call label="Il Mio Terreno" name="My Land"/> - <menu label="Mostra" name="Land"> - <menu_item_check label="Linee Non Accessibili" name="Ban Lines"/> - <menu_item_check label="Segnalatori" name="beacons"/> - <menu_item_check label="Linee di Confine" name="Property Lines"/> - <menu_item_check label="Proprietari della Terra" name="Land Owners"/> + <menu_item_check label="Mini mappa" name="Mini-Map"/> + <menu_item_check label="Mappa del mondo" name="World Map"/> + <menu_item_call label="Istantanea" name="Take Snapshot"/> + <menu_item_call label="Crea punto di riferimento per questo luogo" name="Create Landmark Here"/> + <menu label="Profilo del posto" name="Land"> + <menu_item_call label="Informazioni sui terreni" name="About Land"/> + <menu_item_call label="Regione/proprietà immobiliare" name="Region/Estate"/> </menu> - <menu label="Landmark" name="Landmarks"> - <menu_item_call label="Crea Landmark Qui" name="Create Landmark Here"/> - <menu_item_call label="Imposta Qui come Casa" name="Set Home to Here"/> + <menu_item_call label="Acquista questo terreno" name="Buy Land"/> + <menu_item_call label="Il mio terreno" name="My Land"/> + <menu label="Mostra" name="LandShow"> + <menu_item_check label="Comandi del movimento" name="Movement Controls"/> + <menu_item_check label="Comandi visualizzazione" name="Camera Controls"/> + <menu_item_check label="Linee di divieto" name="Ban Lines"/> + <menu_item_check label="Marcatori" name="beacons"/> + <menu_item_check label="Linee di confine" name="Property Lines"/> + <menu_item_check label="Proprietari di terreno" name="Land Owners"/> + <menu_item_check label="Coordinate" name="Coordinates"/> + <menu_item_check label="Proprietà del lotto" name="Parcel Properties"/> </menu> - <menu_item_call label="Teleport Casa" name="Teleport Home"/> - <menu_item_check label="Mini-Mappa" name="Mini-Map"/> - <menu_item_check label="Mappa del Mondo" name="World Map"/> - <menu_item_call label="Foto" name="Take Snapshot"/> + <menu_item_call label="Teleport a Casa" name="Teleport Home"/> + <menu_item_call label="Imposta come Casa mia" name="Set Home to Here"/> <menu label="Sole" name="Environment Settings"> <menu_item_call label="Alba" name="Sunrise"/> <menu_item_call label="Mezzogiorno" name="Noon"/> <menu_item_call label="Tramonto" name="Sunset"/> <menu_item_call label="Mezzanotte" name="Midnight"/> - <menu_item_call label="Usa l'ora della Proprietà" name="Revert to Region Default"/> + <menu_item_call label="Orario della proprietà" name="Revert to Region Default"/> <menu_item_call label="Editor dell'ambiente" name="Environment Editor"/> </menu> </menu> - <menu label="Build" name="BuildTools"> - <menu_item_check label="Build" name="Show Build Tools"/> - <menu label="Seleziona Strumento Build" name="Select Tool"> - <menu_item_call label="Strumento Focalizza" name="Focus"/> + <menu label="Costruisci" name="BuildTools"> + <menu_item_check label="Costruisci" name="Show Build Tools"/> + <menu label="Seleziona strumento di costruzione" name="Select Tool"> + <menu_item_call label="Strumento Ingrandisci" name="Focus"/> <menu_item_call label="Strumento Movimento" name="Move"/> <menu_item_call label="Strumento Modifica" name="Edit"/> - <menu_item_call label="Crea Strumento" name="Create"/> + <menu_item_call label="Crea strumento" name="Create"/> <menu_item_call label="Strumento Terreno" name="Land"/> </menu> <menu label="Modifica" name="Edit"> @@ -71,92 +72,86 @@ <menu_item_call label="Taglia" name="Cut"/> <menu_item_call label="Copia" name="Copy"/> <menu_item_call label="Incolla" name="Paste"/> - <menu_item_call label="Cancella" name="Delete"/> + <menu_item_call label="Elimina" name="Delete"/> <menu_item_call label="Duplica" name="Duplicate"/> - <menu_item_call label="Seleziona Tutto" name="Select All"/> + <menu_item_call label="Seleziona tutto" name="Select All"/> <menu_item_call label="Deseleziona" name="Deselect"/> </menu> - <menu_item_call label="Unisci" name="Link"/> - <menu_item_call label="Separa" name="Unlink"/> - <menu_item_call label="Focalizza su Selezione" name="Focus on Selection"/> - <menu_item_call label="Avvicina alla Selezione" name="Zoom to Selection"/> + <menu_item_call label="Collegamento" name="Link"/> + <menu_item_call label="Scollega" name="Unlink"/> + <menu_item_check label="Modifica le parti collegate" name="Edit Linked Parts"/> + <menu_item_call label="Ingrandisci selezione" name="Focus on Selection"/> + <menu_item_call label="Zoom sulla selezione" name="Zoom to Selection"/> <menu label="Oggetto" name="Object"> - <menu_item_call label="Compra" name="Menu Object Take"/> - <menu_item_call label="Prendi Copia" name="Take Copy"/> - <menu_item_call label="Salva Nuovamente nell'Inventory" name="Save Object Back to My Inventory"/> - <menu_item_call label="Salva Nuovamente Nel Contenuto Oggetto" name="Save Object Back to Object Contents"/> + <menu_item_call label="Acquista" name="Menu Object Buy"/> + <menu_item_call label="Prendi" name="Menu Object Take"/> + <menu_item_call label="Prendi copia" name="Take Copy"/> + <menu_item_call label="Salva nell'inventario" name="Save Object Back to My Inventory"/> + <menu_item_call label="Salva nei contenuti oggetto" name="Save Object Back to Object Contents"/> </menu> <menu label="Script" name="Scripts"> - <menu_item_call label="Ricompila Script (Mono)" name="Mono"/> - <menu_item_call label="Ricompila gli Script(LSL)" name="LSL"/> - <menu_item_call label="Reimposta gli Script" name="Reset Scripts"/> - <menu_item_call label="Imposta gli Script in Esecuzione" name="Set Scripts to Running"/> - <menu_item_call label="Imposta gli Script Non In Esecuzione" name="Set Scripts to Not Running"/> + <menu_item_call label="Ricompila script (Mono)" name="Mono"/> + <menu_item_call label="Ricompila gli script (LSL)" name="LSL"/> + <menu_item_call label="Reimposta script" name="Reset Scripts"/> + <menu_item_call label="Imposta gli script come in esecuzione" name="Set Scripts to Running"/> + <menu_item_call label="Imposta script come non in esecuzione" name="Set Scripts to Not Running"/> </menu> <menu label="Opzioni" name="Options"> - <menu_item_check label="Modifica Parti Unite" name="Edit Linked Parts"/> - <menu_item_call label="Imposta Permessi di Upload predefiniti" name="perm prefs"/> - <menu_item_check label="Mostra Permessi Avanzati" name="DebugPermissions"/> - <menu label="Selezione" name="Selection"> - <menu_item_check label="Seleziona Solo i Miei Oggetti" name="Select Only My Objects"/> - <menu_item_check label="Seleziona Solo Oggetti Mobili" name="Select Only Movable Objects"/> - <menu_item_check label="Seleziona Se Racchiuso" name="Select By Surrounding"/> - </menu> - <menu label="Mostra" name="Show"> - <menu_item_check label="Mostra Selezione Nascosta" name="Show Hidden Selection"/> - <menu_item_check label="Mostra Raggio Luce per Selezione" name="Show Light Radius for Selection"/> - <menu_item_check label="Mostra Raggio Selezione" name="Show Selection Beam"/> - </menu> - <menu label="Griglia" name="Grid"> - <menu_item_check label="Allinea al Righello" name="Snap to Grid"/> - <menu_item_call label="Allinea Coordinate XY alla Griglia" name="Snap Object XY to Grid"/> - <menu_item_call label="Usa Selezione per la Griglia" name="Use Selection for Grid"/> - <menu_item_call label="Opzioni Griglia" name="Grid Options"/> - </menu> + <menu_item_call label="Definisci diritti di caricamento predefiniti" name="perm prefs"/> + <menu_item_check label="Mostra autorizzazioni avanzate" name="DebugPermissions"/> + <menu_item_check label="Seleziona solo i miei oggetti" name="Select Only My Objects"/> + <menu_item_check label="Seleziona solo gli oggetti spostabili" name="Select Only Movable Objects"/> + <menu_item_check label="Seleziona circostante" name="Select By Surrounding"/> + <menu_item_check label="Seleziona mostra nascosti" name="Show Hidden Selection"/> + <menu_item_check label="Seleziona mostra il raggio luminoso per la selezione" name="Show Light Radius for Selection"/> + <menu_item_check label="Mostra il raggio indicatore" name="Show Selection Beam"/> + <menu_item_check label="Posiziona nella griglia" name="Snap to Grid"/> + <menu_item_call label="Posiziona coordinate XY dell'oggetto sulla griglia" name="Snap Object XY to Grid"/> + <menu_item_call label="Usa la selezione per la griglia" name="Use Selection for Grid"/> + <menu_item_call label="Opzioni della griglia" name="Grid Options"/> </menu> - <menu label="Seleziona Parti Unite" name="Select Linked Parts"> - <menu_item_call label="Seleziona Prossima Parte" name="Select Next Part"/> - <menu_item_call label="Seleziona Parte Precedente" name="Select Previous Part"/> - <menu_item_call label="Includi Prossima Parte" name="Include Next Part"/> - <menu_item_call label="Includi Parte Precedente" name="Include Previous Part"/> + <menu label="Seleziona parti collegate" name="Select Linked Parts"> + <menu_item_call label="Seleziona parte successiva" name="Select Next Part"/> + <menu_item_call label="Seleziona parte precedente" name="Select Previous Part"/> + <menu_item_call label="Includi parte successiva" name="Include Next Part"/> + <menu_item_call label="Includi parte precedente" name="Include Previous Part"/> </menu> </menu> <menu label="Aiuto" name="Help"> <menu_item_call label="[SECOND_LIFE] Aiuto" name="Second Life Help"/> - <menu_item_call label="Tutorial" name="Tutorial"/> - <menu_item_call label="Denuncia Abuso" name="Report Abuse"/> - <menu_item_call label="Segnala Bug" name="Report Bug"/> + <menu_item_call label="Segnala abuso" name="Report Abuse"/> + <menu_item_call label="Segnala bug" name="Report Bug"/> </menu> - <menu label="Avanzato" name="Advanced"> - <menu_item_check label="Imposta non disponibile dopo 30 Minuti" name="Go Away/AFK When Idle"/> - <menu_item_call label="Ferma le Animazioni" name="Stop Animating My Avatar"/> - <menu_item_call label="Ridisegna le Texture" name="Rebake Texture"/> - <menu_item_call label="Riporta le Dimensioni dell'interfaccia ai Valori Predefiniti" name="Set UI Size to Default"/> - <menu_item_check label="Limita Distanza di Selezione" name="Limit Select Distance"/> - <menu_item_check label="Disabilita i Vincoli della Camera" name="Disable Camera Distance"/> + <menu label="Avanzate" name="Advanced"> + <menu_item_call label="Ferma animazione" name="Stop Animating My Avatar"/> + <menu_item_call label="Ridisegna le texture" name="Rebake Texture"/> + <menu_item_call label="Imposta dimensioni dell'interfaccia sui valori predefiniti" name="Set UI Size to Default"/> + <menu_item_call label="Imposta dimensioni della finestra..." name="Set Window Size..."/> + <menu_item_check label="Limita distanza di selezione" name="Limit Select Distance"/> + <menu_item_check label="Disabilita vincoli fotocamera" name="Disable Camera Distance"/> <menu_item_check label="Foto ad alta risoluzione" name="HighResSnapshot"/> - <menu_item_check label="Manda Foto su Disco Senza Avvisi" name="QuietSnapshotsToDisk"/> - <menu_item_check label="Comprimi le Foto su Disco" name="CompressSnapshotsToDisk"/> - <menu label="Strumenti di Performance" name="Performance Tools"> - <menu_item_call label="Misuratore Lag" name="Lag Meter"/> - <menu_item_check label="Barra Statistiche" name="Statistics Bar"/> - <menu_item_check label="Mostra Il Costo Visualizzazione Avatar (ARC)" name="Avatar Rendering Cost"/> + <menu_item_check label="Manda foto su disco senza avvisi" name="QuietSnapshotsToDisk"/> + <menu_item_check label="Comprimi le foto su disco" name="CompressSnapshotsToDisk"/> + <menu label="Strumenti di performance" name="Performance Tools"> + <menu_item_call label="Misuratore lag" name="Lag Meter"/> + <menu_item_check label="Barra statistiche" name="Statistics Bar"/> + <menu_item_check label="Mostra costo di rendering dell'avatar" name="Avatar Rendering Cost"/> </menu> - <menu label="Evidenziazione e Visibilità" name="Highlighting and Visibility"> - <menu_item_check label="Effetto Lampeggiante Segnalatore" name="Cheesy Beacon"/> - <menu_item_check label="Nascondi Particelle" name="Hide Particles"/> - <menu_item_check label="Nascondi Selezionati" name="Hide Selected"/> - <menu_item_check label="Evidenzia Trasparente" name="Highlight Transparent"/> - <menu_item_check label="Mostra Attachment HUD" name="Show HUD Attachments"/> - <menu_item_check label="Mostra Mirino in Soggettiva" name="ShowCrosshairs"/> - <menu_item_check label="Mostra Tooltip sul Terreno" name="Land Tips"/> + <menu label="Evidenziazione e visibilità" name="Highlighting and Visibility"> + <menu_item_check label="Effetto marcatore lampeggiante" name="Cheesy Beacon"/> + <menu_item_check label="Nascondi particelle" name="Hide Particles"/> + <menu_item_check label="Nascondi selezionati" name="Hide Selected"/> + <menu_item_check label="Evidenzia trasparenza" name="Highlight Transparent"/> + <menu_item_check label="Mostra elementi HUD" name="Show HUD Attachments"/> + <menu_item_check label="Mostra mirino visuale soggettiva" name="ShowCrosshairs"/> + <menu_item_check label="Mostra tooltip terreno" name="Land Tips"/> </menu> - <menu label="Modalità di Rendering" name="Rendering Types"> + <menu label="Modalità di rendering" name="Rendering Types"> <menu_item_check label="Semplice" name="Simple"/> - <menu_item_check label="Alfa (Trasparenza)" name="Alpha"/> + <menu_item_check label="Alpha (Trasparenza)" name="Alpha"/> <menu_item_check label="Albero" name="Tree"/> <menu_item_check label="Avatar" name="Character"/> - <menu_item_check label="Superfici" name="SurfacePath"/> + <menu_item_check label="Superficie" name="SurfacePath"/> <menu_item_check label="Cielo" name="Sky"/> <menu_item_check label="Acqua" name="Water"/> <menu_item_check label="Suolo" name="Ground"/> @@ -166,161 +161,162 @@ <menu_item_check label="Particelle" name="Particles"/> <menu_item_check label="Urti" name="Bump"/> </menu> - <menu label="Caratteristiche di Rendering" name="Rendering Features"> - <menu_item_check label="Interfaccia Utente" name="UI"/> + <menu label="Caratteristiche di rendering" name="Rendering Features"> + <menu_item_check label="Interfaccia utente" name="UI"/> <menu_item_check label="Selezionati" name="Selected"/> <menu_item_check label="Evidenziato" name="Highlighted"/> - <menu_item_check label="Texture Dinamiche" name="Dynamic Textures"/> - <menu_item_check label="Ombre dei Piedi" name="Foot Shadows"/> + <menu_item_check label="Texture dinamiche" name="Dynamic Textures"/> + <menu_item_check label="Ombre dei piedi" name="Foot Shadows"/> <menu_item_check label="Nebbia" name="Fog"/> - <menu_item_check label="Oggetti Flessibili" name="Flexible Objects"/> + <menu_item_check label="Oggetti flessibili" name="Flexible Objects"/> </menu> - <menu_item_check label="Esegui Thread Multipli" name="Run Multiple Threads"/> - <menu_item_call label="Pulisci la Cache di Gruppo" name="ClearGroupCache"/> - <menu_item_check label="Fluidità Mouse" name="Mouse Smoothing"/> - <menu_item_check label="Mostra IM nella Chat Limitrofa" name="IMInChat"/> + <menu_item_check label="Esegui thread multipli" name="Run Multiple Threads"/> + <menu_item_call label="Pulisci cache di gruppo" name="ClearGroupCache"/> + <menu_item_check label="Fluidità mouse" name="Mouse Smoothing"/> <menu label="Scorciatoie" name="Shortcuts"> - <menu_item_check label="Ricerca" name="Search"/> - <menu_item_call label="Rilascia Tasti" name="Release Keys"/> - <menu_item_call label="Imposta dimensioni Interfacca a Valori Predefiniti" name="Set UI Size to Default"/> - <menu_item_check label="Corri Sempre" name="Always Run"/> + <menu_item_call label="Immagine ([COST]L$)..." name="Upload Image"/> + <menu_item_check label="Cerca" name="Search"/> + <menu_item_call label="Rilascia tasti" name="Release Keys"/> + <menu_item_call label="Imposta dimensioni dell'interfaccia sui valori predefiniti" name="Set UI Size to Default"/> + <menu_item_check label="Corri sempre" name="Always Run"/> <menu_item_check label="Vola" name="Fly"/> - <menu_item_call label="Chiudi Finestra" name="Close Window"/> - <menu_item_call label="Chiudi Tutte le Finestre" name="Close All Windows"/> - <menu_item_call label="Foto su Disco" name="Snapshot to Disk"/> + <menu_item_call label="Chiudi finestra" name="Close Window"/> + <menu_item_call label="Chiudi tutte le finestre" name="Close All Windows"/> + <menu_item_call label="Foto su disco" name="Snapshot to Disk"/> <menu_item_call label="Soggettiva" name="Mouselook"/> <menu_item_check label="Joystick Flycam" name="Joystick Flycam"/> - <menu_item_call label="Reimposta Vista" name="Reset View"/> - <menu_item_call label="Guarda l'Ultimo che ha parlato" name="Look at Last Chatter"/> - <menu label="Seleziona Strumento Build" name="Select Tool"> - <menu_item_call label="Strumento Focalizza" name="Focus"/> + <menu_item_call label="Reimposta vista" name="Reset View"/> + <menu_item_call label="Guarda l'ultima conversazione" name="Look at Last Chatter"/> + <menu label="Seleziona strumento di costruzione" name="Select Tool"> + <menu_item_call label="Strumento Ingrandisci" name="Focus"/> <menu_item_call label="Strumento Movimento" name="Move"/> <menu_item_call label="Strumento Modifica" name="Edit"/> - <menu_item_call label="Crea Strumento" name="Create"/> + <menu_item_call label="Crea strumento" name="Create"/> <menu_item_call label="Strumento Terreno" name="Land"/> </menu> - <menu_item_call label="Avvicina" name="Zoom In"/> - <menu_item_call label="Zoom Predefinito" name="Zoom Default"/> - <menu_item_call label="Allontana" name="Zoom Out"/> - <menu_item_call label="Alterna Schermo Intero" name="Toggle Fullscreen"/> + <menu_item_call label="Zoom avanti" name="Zoom In"/> + <menu_item_call label="Zoom predefinito" name="Zoom Default"/> + <menu_item_call label="Zoom indietro" name="Zoom Out"/> + <menu_item_call label="Alterna schermo intero" name="Toggle Fullscreen"/> </menu> - <menu_item_call label="Mostra Impostazioni di Debug" name="Debug Settings"/> - <menu_item_check label="Mostra Menu Sviluppo" name="Debug Mode"/> + <menu_item_call label="Mostra impostazioni di debug" name="Debug Settings"/> + <menu_item_check label="Mostra menu sviluppo" name="Debug Mode"/> </menu> <menu label="Sviluppo" name="Develop"> <menu label="Console" name="Consoles"> - <menu_item_check label="Console Texture" name="Texture Console"/> + <menu_item_check label="Console texture" name="Texture Console"/> <menu_item_check label="Console di Debug" name="Debug Console"/> - <menu_item_call label="Console Notifiche" name="Notifications"/> - <menu_item_check label="Console Dimensioni Texture" name="Texture Size"/> - <menu_item_check label="Console Categoria Texture" name="Texture Category"/> - <menu_item_check label="Timer Veloci" name="Fast Timers"/> + <menu_item_call label="Console notifiche" name="Notifications"/> + <menu_item_check label="Console dimensioni texture" name="Texture Size"/> + <menu_item_check label="Console categoria texture" name="Texture Category"/> + <menu_item_check label="Timer veloci" name="Fast Timers"/> <menu_item_check label="Memoria" name="Memory"/> - <menu_item_call label="Info Regione Sulla Console di Debug" name="Region Info to Debug Console"/> - <menu_item_check label="Camera" name="Camera"/> + <menu_item_call label="Informazioni regione sulla console di debug" name="Region Info to Debug Console"/> + <menu_item_check label="Fotocamera" name="Camera"/> <menu_item_check label="Vento" name="Wind"/> + <menu_item_check label="Badge" name="Badge"/> </menu> - <menu label="Mostra Info" name="Display Info"> - <menu_item_check label="Mostra Tempo" name="Show Time"/> - <menu_item_check label="Mostra Info Rendering" name="Show Render Info"/> - <menu_item_check label="Mostra Colore sotto il Cursore" name="Show Color Under Cursor"/> - <menu_item_check label="Mostra Aggiornamenti agli Oggetti" name="Show Updates"/> + <menu label="Mostra informazioni" name="Display Info"> + <menu_item_check label="Mostra orario" name="Show Time"/> + <menu_item_check label="Mostra informazioni di rendering" name="Show Render Info"/> + <menu_item_check label="Mostra colore sotto il cursore" name="Show Color Under Cursor"/> + <menu_item_check label="Mostra aggiornamenti agli oggetti" name="Show Updates"/> </menu> - <menu label="Forza Errori" name="Force Errors"> - <menu_item_call label="Forza Breakpoint" name="Force Breakpoint"/> + <menu label="Forza un errore" name="Force Errors"> + <menu_item_call label="Forza punto di rottura" name="Force Breakpoint"/> <menu_item_call label="Forza LLError e Crash" name="Force LLError And Crash"/> - <menu_item_call label="Forza Accesso Invalido alla Memoria" name="Force Bad Memory Access"/> - <menu_item_call label="Forza Ciclo Infinito" name="Force Infinite Loop"/> - <menu_item_call label="Forza il Crash del Driver" name="Force Driver Carsh"/> - <menu_item_call label="Forza Eccezione Software" name="Force Software Exception"/> - <menu_item_call label="Forza Disconnessione Viewer" name="Force Disconnect Viewer"/> - <menu_item_call label="Simula un Memory Leak" name="Memory Leaking Simulation"/> + <menu_item_call label="Forza accesso non valido alla memoria" name="Force Bad Memory Access"/> + <menu_item_call label="Forza ciclo infinito" name="Force Infinite Loop"/> + <menu_item_call label="Forza il crash del driver" name="Force Driver Carsh"/> + <menu_item_call label="Forza eccezione software" name="Force Software Exception"/> + <menu_item_call label="Forza scollegamento viewer" name="Force Disconnect Viewer"/> + <menu_item_call label="Simula fuga di memoria" name="Memory Leaking Simulation"/> </menu> - <menu label="Test di Rendering" name="Render Tests"> - <menu_item_check label="Spostamento Camera" name="Camera Offset"/> - <menu_item_check label="Framerate Casuale" name="Randomize Framerate"/> - <menu_item_check label="Test Frame" name="Frame Test"/> + <menu label="Prove di rendering" name="Render Tests"> + <menu_item_check label="Spostamento fotocamera" name="Camera Offset"/> + <menu_item_check label="Veloc. di visualizzazione casuale" name="Randomize Framerate"/> + <menu_item_check label="Test frame" name="Frame Test"/> </menu> <menu label="Rendering" name="Rendering"> <menu_item_check label="Assi" name="Axes"/> <menu_item_check label="Wireframe" name="Wireframe"/> - <menu_item_check label="Illuminazione Globale" name="Global Illumination"/> - <menu_item_check label="Texture delle Animation" name="Animation Textures"/> - <menu_item_check label="Disabilita Textures" name="Disable Textures"/> - <menu_item_check label="Rendering Luci degli Attachment" name="Render Attached Lights"/> - <menu_item_check label="Visualizza Particelle dagli Attachment" name="Render Attached Particles"/> - <menu_item_check label="Gli Oggetti Brillano quando sono sotto il Cursore" name="Hover Glow Objects"/> + <menu_item_check label="Illuminazione globale" name="Global Illumination"/> + <menu_item_check label="Texture delle animazioni" name="Animation Textures"/> + <menu_item_check label="Disabilita texture" name="Disable Textures"/> + <menu_item_check label="Rendering delle luci unite" name="Render Attached Lights"/> + <menu_item_check label="Rendering particelle unite" name="Render Attached Particles"/> + <menu_item_check label="Gli oggetti brillano quando sono sotto il cursore" name="Hover Glow Objects"/> </menu> <menu label="Rete" name="Network"> - <menu_item_check label="Metti in Pausa Avatar" name="AgentPause"/> - <menu_item_call label="Perdi un Pacchetto" name="Drop a Packet"/> + <menu_item_check label="Metti in pausa" name="AgentPause"/> + <menu_item_call label="Lascia un pacchetto" name="Drop a Packet"/> </menu> - <menu_item_call label="Urti, Spinte & Contatti" name="Bumps, Pushes &amp; Hits"/> + <menu_item_call label="Urti, spinte e contatti" name="Bumps, Pushes &amp; Hits"/> <menu label="Mondo" name="World"> - <menu_item_check label="Sostituisci al Sole della Regione" name="Sim Sun Override"/> - <menu_item_check label="Effetto Lampeggiante Indicatore" name="Cheesy Beacon"/> - <menu_item_check label="Fissa il Clima" name="Fixed Weather"/> - <menu_item_call label="Stampa la Cache degli Oggetti in Regione" name="Dump Region Object Cache"/> + <menu_item_check label="Esclusione al sole della regione" name="Sim Sun Override"/> + <menu_item_check label="Effetto marcatore lampeggiante" name="Cheesy Beacon"/> + <menu_item_check label="Clima fisso" name="Fixed Weather"/> + <menu_item_call label="Dump della cache oggetti regione" name="Dump Region Object Cache"/> </menu> - <menu label="Interfaccia Utente" name="UI"> - <menu_item_call label="Test Browser Web" name="Web Browser Test"/> - <menu_item_call label="Stampa Info per Oggetto Selezionato" name="Print Selected Object Info"/> - <menu_item_call label="Statistiche Memoria" name="Memory Stats"/> - <menu_item_check label="Doppio Click Pilota Automatico" name="Double-ClickAuto-Pilot"/> - <menu_item_check label="Debug Click" name="Debug Clicks"/> - <menu_item_check label="Debug Eventi del Mouse" name="Debug Mouse Events"/> + <menu label="Interfaccia utente" name="UI"> + <menu_item_call label="Test browser Web" name="Web Browser Test"/> + <menu_item_call label="Stampa informazioni oggetto selezionato" name="Print Selected Object Info"/> + <menu_item_call label="Statistiche memoria" name="Memory Stats"/> + <menu_item_check label="Doppio clic pilota automatico" name="Double-ClickAuto-Pilot"/> + <menu_item_check label="Debug clic" name="Debug Clicks"/> + <menu_item_check label="Debug eventi mouse" name="Debug Mouse Events"/> </menu> <menu label="XUI" name="XUI"> - <menu_item_call label="Ricarica Impostazioni Colori" name="Reload Color Settings"/> + <menu_item_call label="Ricarica impostazioni colori" name="Reload Color Settings"/> <menu_item_call label="Test Mostra Font" name="Show Font Test"/> <menu_item_call label="Carica da XML" name="Load from XML"/> <menu_item_call label="Salva in XML" name="Save to XML"/> - <menu_item_check label="Mostra Nomi XUI" name="Show XUI Names"/> - <menu_item_call label="Manda IM di Test" name="Send Test IMs"/> + <menu_item_check label="Mostra nomi XUI" name="Show XUI Names"/> + <menu_item_call label="Manda IM di prova" name="Send Test IMs"/> </menu> <menu label="Avatar" name="Character"> <menu label="Grab Baked Texture" name="Grab Baked Texture"> <menu_item_call label="Iride" name="Iris"/> <menu_item_call label="Testa" name="Head"/> - <menu_item_call label="Parte Superiore Corpo" name="Upper Body"/> - <menu_item_call label="Parte Inferiore del Corpo" name="Lower Body"/> + <menu_item_call label="Parte superiore del corpo" name="Upper Body"/> + <menu_item_call label="Parte inferiore del corpo" name="Lower Body"/> <menu_item_call label="Gonna" name="Skirt"/> </menu> - <menu label="Test Personaggio" name="Character Tests"> - <menu_item_call label="Alterna la Geometria dei Personaggi" name="Toggle Character Geometry"/> - <menu_item_check label="Consenti Selezione Avatar" name="Allow Select Avatar"/> + <menu label="Test personaggio" name="Character Tests"> + <menu_item_call label="Alterna la geometria dei personaggi" name="Toggle Character Geometry"/> + <menu_item_check label="Consenti selezione avatar" name="Allow Select Avatar"/> </menu> - <menu_item_call label="Forza i Parametri ai Valori Predefiniti" name="Force Params to Default"/> - <menu_item_check label="Info delle Animation" name="Animation Info"/> + <menu_item_call label="Forza i parametri sui valori predefiniti" name="Force Params to Default"/> + <menu_item_check label="Informazioni sull'animazione" name="Animation Info"/> <menu_item_check label="Animazioni lente" name="Slow Motion Animations"/> - <menu_item_check label="Disabilita Livello di Dettaglio" name="Disable LOD"/> - <menu_item_check label="Mostra Schemi Collisione" name="Show Collision Skeleton"/> - <menu_item_check label="Mostra Agent Destinazione" name="Display Agent Target"/> - <menu_item_call label="Debug Texture dell'Avatar" name="Debug Avatar Textures"/> + <menu_item_check label="Disabilita livello di dettaglio" name="Disable LOD"/> + <menu_item_check label="Mostra schemi collisione" name="Show Collision Skeleton"/> + <menu_item_check label="Mostra bersaglio" name="Display Agent Target"/> + <menu_item_call label="Debug texture dell'avatar" name="Debug Avatar Textures"/> </menu> <menu_item_check label="Texture HTTP" name="HTTP Textures"/> - <menu_item_check label="Finestra Console al Prossimo Lancio" name="Console Window"/> - <menu_item_check label="Mostra Menu Admin" name="View Admin Options"/> - <menu_item_call label="Richiedi Status Amministrator" name="Request Admin Options"/> - <menu_item_call label="Lascia lo Stato di Admin" name="Leave Admin Options"/> + <menu_item_check label="Finestra Console al prossimo lancio" name="Console Window"/> + <menu_item_check label="Mostra menu Admin" name="View Admin Options"/> + <menu_item_call label="Richiedi diritti Admin" name="Request Admin Options"/> + <menu_item_call label="Lascia stato Admin" name="Leave Admin Options"/> </menu> - <menu label="Amministratore" name="Admin"> + <menu label="Admin" name="Admin"> <menu label="Object"> - <menu_item_call label="Prendi Copia" name="Take Copy"/> - <menu_item_call label="Rendimi Proprietario" name="Force Owner To Me"/> - <menu_item_call label="Forza Proprietario Facoltativo?" name="Force Owner Permissive"/> - <menu_item_call label="Cancella" name="Delete"/> + <menu_item_call label="Prendi copia" name="Take Copy"/> + <menu_item_call label="Rendimi proprietario" name="Force Owner To Me"/> + <menu_item_call label="Forza permesso proprietario" name="Force Owner Permissive"/> + <menu_item_call label="Elimina" name="Delete"/> <menu_item_call label="Blocca" name="Lock"/> </menu> - <menu label="Appezzamento" name="Parcel"> - <menu_item_call label="Rendimi Proprietario" name="Owner To Me"/> - <menu_item_call label="Imposta al Contenuto Linden" name="Set to Linden Content"/> - <menu_item_call label="Prendi Terreno Pubblico" name="Claim Public Land"/> + <menu label="Lotto" name="Parcel"> + <menu_item_call label="Rendimi proprietario" name="Owner To Me"/> + <menu_item_call label="Imposta sul contenuto Linden" name="Set to Linden Content"/> + <menu_item_call label="Rivendica terreno pubblico" name="Claim Public Land"/> </menu> <menu label="Regione" name="Region"> - <menu_item_call label="Stampa i Dati Temporanei degli Asset" name="Dump Temp Asset Data"/> - <menu_item_call label="Salva Stato Regione" name="Save Region State"/> + <menu_item_call label="Dump di dati temporanei degli asset" name="Dump Temp Asset Data"/> + <menu_item_call label="Salva stato regione" name="Save Region State"/> </menu> - <menu_item_call label="Strumenti SuperUser" name="God Tools"/> + <menu_item_call label="Strumenti Admin" name="God Tools"/> </menu> </menu_bar> diff --git a/indra/newview/skins/default/xui/it/mime_types_linux.xml b/indra/newview/skins/default/xui/it/mime_types_linux.xml index 5db3eddca8..3bc30b507a 100644 --- a/indra/newview/skins/default/xui/it/mime_types_linux.xml +++ b/indra/newview/skins/default/xui/it/mime_types_linux.xml @@ -2,24 +2,24 @@ <mimetypes name="default"> <widgetset name="web"> <label name="web_label"> - Contenuto del Web + Contenuti Web </label> <tooltip name="web_tooltip"> - Questo luogo ha un contenuto Web + Questo luogo presenta contenuti Web </tooltip> <playtip name="web_playtip"> - Mostra il contenuto Web + Mostra contenuti Web </playtip> </widgetset> <widgetset name="movie"> <label name="movie_label"> - Video + Filmato </label> <tooltip name="movie_tooltip"> - Qui c'è un video da riprodurre + C'è un filmato da vedere qui </tooltip> <playtip name="movie_playtip"> - Riproduci video + Riproduci il filmato </playtip> </widgetset> <widgetset name="image"> @@ -27,10 +27,10 @@ Immagine </label> <tooltip name="image_tooltip"> - C'è un immagine in questo luogo + C'è un'immagine in questo luogo </tooltip> <playtip name="image_playtip"> - Guarda l'immagine di questo luogo + Vedi l'immagine di questo luogo </playtip> </widgetset> <widgetset name="audio"> @@ -38,25 +38,25 @@ Audio </label> <tooltip name="audio_tooltip"> - In questo luogo c'è l'audio + C'è un audio in questo luogo </tooltip> <playtip name="audio_playtip"> - Riproduci l'audio in questo luogo + Riproduci l'audio di questo luogo </playtip> </widgetset> <scheme name="rtsp"> <label name="rtsp_label"> - Real Time Streaming + Streaming in tempo reale </label> </scheme> <mimetype name="blank"> <label name="blank_label"> - - Vuoto - + - Nessuno - </label> </mimetype> <mimetype name="none/none"> <label name="none/none_label"> - - Vuoto - + - Nessuno - </label> </mimetype> <mimetype name="audio/*"> @@ -76,7 +76,7 @@ </mimetype> <mimetype name="video/vnd.secondlife.qt.legacy"> <label name="vnd.secondlife.qt.legacy_label"> - Video (QuickTime) + Filmato (QuickTime) </label> </mimetype> <mimetype name="application/javascript"> @@ -116,7 +116,7 @@ </mimetype> <mimetype name="application/x-director"> <label name="application/x-director_label"> - Direttore Macromedia + Macromedia Director </label> </mimetype> <mimetype name="audio/mid"> @@ -186,32 +186,32 @@ </mimetype> <mimetype name="video/mpeg"> <label name="video/mpeg_label"> - Video (MPEG) + Filmato (MPEG) </label> </mimetype> <mimetype name="video/mp4"> <label name="video/mp4_label"> - Video (MP4) + Filmato (MP4) </label> </mimetype> <mimetype name="video/quicktime"> <label name="video/quicktime_label"> - Video (QuickTime) + Filmato (QuickTime) </label> </mimetype> <mimetype name="video/x-ms-asf"> <label name="video/x-ms-asf_label"> - Video (Windows Media ASF) + Filmato (Windows Media ASF) </label> </mimetype> <mimetype name="video/x-ms-wmv"> <label name="video/x-ms-wmv_label"> - Video (Windows Media WMV) + Filmato (Windows Media WMV) </label> </mimetype> <mimetype name="video/x-msvideo"> <label name="video/x-msvideo_label"> - Video (AVI) + Filmato (AVI) </label> </mimetype> </mimetypes> diff --git a/indra/newview/skins/default/xui/it/mime_types_mac.xml b/indra/newview/skins/default/xui/it/mime_types_mac.xml index f91c9ce5bd..3bc30b507a 100644 --- a/indra/newview/skins/default/xui/it/mime_types_mac.xml +++ b/indra/newview/skins/default/xui/it/mime_types_mac.xml @@ -2,13 +2,13 @@ <mimetypes name="default"> <widgetset name="web"> <label name="web_label"> - Argomento nel Web + Contenuti Web </label> <tooltip name="web_tooltip"> - Questo luogo ha un argomento nel Web + Questo luogo presenta contenuti Web </tooltip> <playtip name="web_playtip"> - Mostra l'argomento del Web + Mostra contenuti Web </playtip> </widgetset> <widgetset name="movie"> @@ -30,7 +30,7 @@ C'è un'immagine in questo luogo </tooltip> <playtip name="image_playtip"> - Vedere l'immagine di questo luogo + Vedi l'immagine di questo luogo </playtip> </widgetset> <widgetset name="audio"> @@ -46,7 +46,7 @@ </widgetset> <scheme name="rtsp"> <label name="rtsp_label"> - Real Time Streaming + Streaming in tempo reale </label> </scheme> <mimetype name="blank"> @@ -86,17 +86,17 @@ </mimetype> <mimetype name="application/ogg"> <label name="application/ogg_label"> - Ogg Audio/Video + Audio/Video Ogg </label> </mimetype> <mimetype name="application/pdf"> <label name="application/pdf_label"> - PDF Document + Documento PDF </label> </mimetype> <mimetype name="application/postscript"> <label name="application/postscript_label"> - Postscript Document + Documento Postscript </label> </mimetype> <mimetype name="application/rtf"> diff --git a/indra/newview/skins/default/xui/it/notifications.xml b/indra/newview/skins/default/xui/it/notifications.xml index 2a370a2ed0..6736c6a6f1 100644 --- a/indra/newview/skins/default/xui/it/notifications.xml +++ b/indra/newview/skins/default/xui/it/notifications.xml @@ -11,18 +11,29 @@ </global> <template name="okbutton"> <form> - <button name="OK" text="$yestext"/> + <button name="OK_okbutton" text="$yestext"/> + </form> + </template> + <template name="okignore"> + <form> + <button name="OK_okignore" text="$yestext"/> </form> </template> - <template name="okignore"/> <template name="okcancelbuttons"> <form> - <button name="Cancel" text="$notext"/> + <button name="OK_okcancelbuttons" text="$yestext"/> + <button name="Cancel_okcancelbuttons" text="$notext"/> + </form> + </template> + <template name="okcancelignore"> + <form> + <button name="OK_okcancelignore" text="$yestext"/> + <button name="Cancel_okcancelignore" text="$notext"/> </form> </template> - <template name="okcancelignore"/> <template name="okhelpbuttons"> <form> + <button name="OK_okhelpbuttons" text="$yestext"/> <button name="Help" text="$helptext"/> </form> </template> @@ -30,12 +41,13 @@ <form> <button name="Yes" text="$yestext"/> <button name="No" text="$notext"/> + <button name="Cancel_yesnocancelbuttons" text="$canceltext"/> </form> </template> - <notification functor="GenericAcknowledge" label="Messaggio di Notifica Sconosciuto" name="MissingAlert"> - La versione di [APP_NAME] non riesce a visualizzare la notifica che ha ricevuto. Verifica di avere l'ultima versione del Viewer installata. + <notification functor="GenericAcknowledge" label="Messaggio di notifica sconosciuto" name="MissingAlert"> + La versione di [APP_NAME] non riesce a visualizzare la notifica appena ricevuta. Verifica di avere l'ultima versione del Viewer installata. -Dettaglio Errore: La notifica di nome '[_NAME]' non è stata trovata in notifications.xml. +Dettagli errore: La notifica denominata '[_NAME]' non è stata trovata in notifications.xml. <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="FloaterNotFound"> @@ -56,11 +68,11 @@ Dettaglio Errore: La notifica di nome '[_NAME]' non è stata trovata i <usetemplate name="okcancelbuttons" notext="Annulla" yestext="Si"/> </notification> <notification name="BadInstallation"> - Errore mentre si aggiornava [APP_NAME]. [http://get.secondlife.com Scarica l'ultima versione] del Viewer. + Il programma [APP_NAME] ha riscontrato un'errore durante il tentativo di aggiornamento. [http://get.secondlife.com Scarica l'ultima versione] del Viewer. <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="LoginFailedNoNetwork"> - Non è possibile connettersi a [SECOND_LIFE_GRID]. + Non è possibile collegarsi alla [SECOND_LIFE_GRID]. '[DIAGNOSTIC]' Accertati che la tua connessione Internet stia funzionando correttamente. <usetemplate name="okbutton" yestext="OK"/> @@ -93,14 +105,18 @@ Scegli solo un oggetto e riprova. Salva tutte le modifiche alle parti del corpo/abiti? <usetemplate canceltext="Annulla" name="yesnocancelbuttons" notext="Non Salvare" yestext="Salva Tutto"/> </notification> + <notification name="FriendsAndGroupsOnly"> + Chi non è tuo amico non saprà che hai scelto di ignorare le loro chiamate e IM. + <usetemplate name="okbutton" yestext="OK"/> + </notification> <notification name="GrantModifyRights"> - Dare i diritti di modifica ad un altro residente gli consente di cambiare, cancellare o prendere QUALUNQUE oggetto che hai in [SECOND_LIFE]. Fai MOLTA attenzione quando concedi questo permesso. -Vuoi davvero dare i diritti di modifica a [FIRST_NAME] [LAST_NAME]? + Quando concedi i diritti di modifica ad un altro residente, gli permetti di modificare, eliminare o prendere QUALSIASI oggetto che possiedi in Second Life. Pertanto ti consigliamo di essere ben sicuro quando concedi questo diritto. +Vuoi concedere i diritti di modifica a [FIRST_NAME] [LAST_NAME]? <usetemplate name="okcancelbuttons" notext="No" yestext="Si"/> </notification> <notification name="GrantModifyRightsMultiple"> - Dare i diritti di modifica ad un altro residente gli consente di cambiare QUALUNQUE oggetto che hai in [SECOND_LIFE]. Fai MOLTA attenzione quando concedi questo permesso. -Vuoi davvero dare i diritti di modifica ai residenti selezionati? + Quando concedi i diritti di modifica ad un altro residente, gli permetti di modificare QUALSIASI oggetto che possiedi in Second Life. Pertanto ti consigliamo di essere ben sicuro quando concedi questo diritto. +Vuoi concedere i diritti di modifica ai residenti selezionati? <usetemplate name="okcancelbuttons" notext="No" yestext="Si"/> </notification> <notification name="RevokeModifyRights"> @@ -130,7 +146,7 @@ Vuoi davvero dare i diritti di modifica ai residenti selezionati? Non si possono rimuovere membri da quel ruolo. I membri devono dimettersi volontariamente dal ruolo. Confermi l'operazione? - <usetemplate ignoretext="Conferma prima di aggiungere un nuovo Proprietario del Gruppo" name="okcancelignore" notext="No" yestext="Si"/> + <usetemplate ignoretext="Conferma prima di aggiungere un nuovo proprietario del gruppo" name="okcancelignore" notext="No" yestext="Si"/> </notification> <notification name="AssignDangerousActionWarning"> Stai per aggiungere il potere '[ACTION_NAME]' al ruolo '[ROLE_NAME]'. @@ -150,23 +166,30 @@ Aggiungi questo potere a '[ROLE_NAME]'? Aggiungi questo potere a '[ROLE_NAME]'? <usetemplate name="okcancelbuttons" notext="No" yestext="Si"/> </notification> - <notification name="ClickUnimplemented"> - Mi dispiace, non è ancora stato implementato. + <notification name="AttachmentDrop"> + Stai per abbandonare il tuo accessorio. + Vuoi continuare? + <usetemplate ignoretext="Conferma prima di distaccare gli accessori" name="okcancelignore" notext="No" yestext="Sì"/> </notification> <notification name="JoinGroupCanAfford"> Iscriversi a questo gruppo costa [COST]L$. Vuoi proseguire? <usetemplate name="okcancelbuttons" notext="Annulla" yestext="Iscriviti"/> </notification> + <notification name="JoinGroupNoCost"> + Aderisci al gruppo [NAME]. +Continuare? + <usetemplate name="okcancelbuttons" notext="Annulla" yestext="Iscriviti"/> + </notification> <notification name="JoinGroupCannotAfford"> Iscriversi a questo gruppo costa [COST]L$. Non hai abbastanza L$ per iscriverti a questo gruppo. </notification> <notification name="CreateGroupCost"> - La Creazione di questo gruppo costerà L$100. -I Gruppi devono avere più di un membro, o saranno cancellati definitivamente. -Per favore invita altri membri entro le prossime 48 ore. - <usetemplate canceltext="Annulla" name="okcancelbuttons" notext="Cancella" yestext="Crea un gruppo per L$100"/> + La creazione di questo gruppo costerà L$ 100. +I gruppi devono avere più di un partecipante, o saranno eliminati definitivamente. +Invita altri partecipanti entro le prossime 48 ore. + <usetemplate canceltext="Annulla" name="okcancelbuttons" notext="Annulla" yestext="Crea un gruppo per L$ 100"/> </notification> <notification name="LandBuyPass"> Pagando [COST]L$ puoi entrare in questa terra ('[PARCEL_NAME]') per [TIME] ore. Compri un pass? @@ -182,10 +205,10 @@ Il tuo prezzo di vendità è [SALE_PRICE]L$ ed è autorizzato alla vendita a [NA <usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/> </notification> <notification name="ConfirmLandSaleToAnyoneChange"> - ATTENZIONE: Cliccando 'vendi a tutti' rende questo terreno disponibile all'intera comunità [SECOND_LIFE], perfino a quelli che non sono in questa regione. + ATTENZIONE: Quando selezioni 'vendi a tutti', rendi questo terreno disponibile all'intera comunità di [SECOND_LIFE], anche alle persone che non si trovano in questa regione. -Stai mettendo in vendita il terrendo selezionato di [LAND_SIZE] m². -Il prezzo di vendità è [SALE_PRICE]L$ e verrà autorizzato alla vendita a [NAME]. +Il terrendo selezionato di [LAND_SIZE] m² sta per essere messo in vendita. +Il prezzo di vendità sarà [SALE_PRICE]L$ e [NAME] viene autorizzato alla vendita. <usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/> </notification> <notification name="ReturnObjectsDeededToGroup"> @@ -246,10 +269,10 @@ L'intera regione ha l'abilitazione danni. Gli script devono essere autorizzati all'esecuzione affinchè le armi funzionino. </notification> <notification name="MultipleFacesSelected"> - Multiple facce multimediale sono attualmente selezionate. -Se prosegui con questa azione, esempi separati del media saranno impostati su facce multimediali dell'oggetto. ???!!! -Per impostare il media su una sola faccia multimediale, scegli Seleziona Faccia e clicca la faccia desiderata dell'oggetto e poi clicca Aggiungi. - <usetemplate ignoretext="Il Media sarà impostato su facce multimediali multiple" name="okcancelignore" notext="Cancella" yestext="OK"/> + Sono state selezionate più facce. +Se prosegui con questa azione, sulle diverse facce dell'oggetto verranno definite sessioni multimediali distinte. +Per collocare il media su una sola faccia, scegli Seleziona faccia, clicca su una faccia e clicca su Aggiungi. + <usetemplate ignoretext="Il canale multimediale sarà impostato su più facce selezionate" name="okcancelignore" notext="Annulla" yestext="OK"/> </notification> <notification name="MustBeInParcel"> Devi essere dentro il terreno per impostare il suo Punto di Atterraggio. @@ -287,8 +310,8 @@ La cartella equipaggiamento non contiene abbigliamento, parti del corpo o attach Non puoi indossare abiti e parti del corpo che sono nel cestino </notification> <notification name="MaxAttachmentsOnOutfit"> - L'oggetto non può essere attaccato. -Superato il limite di oggetti attaccati [MAX_ATTACHMENTS]. Per favore prima stacca un altro oggetto. + L'oggetto non può essere collegato. +Superato il limite di oggetti collegati [MAX_ATTACHMENTS]. Per favore prima stacca un altro oggetto. </notification> <notification name="CannotWearInfoNotComplete"> Non puoi indossare quell'elemento perchè non è ancora stato caricato. Riprova fra un minuto. @@ -304,11 +327,11 @@ Hai bisogno di un account per entrare in [SECOND_LIFE]. Ne vuoi creare uno adess <usetemplate name="okcancelbuttons" notext="Riprova" yestext="Crea un nuovo account"/> </notification> <notification name="AddClassified"> - L'inserzione apparirà nella sezione 'Annunci' della Ricerca e su [http://secondlife.com/community/classifieds secondlife.com] per una settimana. -Compila la tua inserzione, e quindi clicca 'Pubblica...' per aggiungerla all'elenco. -Ti sarà chiesto un prezzo da pagare quando clicchi Pubblica. -Pagando di più il tuo annuncio apparirà più in alto nella lista, e apparirà anche più in alto quando la gente cerca per Parole Chiavi. - <usetemplate ignoretext="Come Creare una nuova Inserzione" name="okcancelignore" notext="Annulla" yestext="OK"/> + L'inserzione comparirà nella sezione 'Annunci' della Ricerca e su [http://secondlife.com/community/classifieds secondlife.com] per una settimana. +Compila la tua inserzione, quindi clicca 'Pubblica...' per aggiungerla all'elenco degli annunci. +Quando clicchi su Pubblica, ti verrà chiesto di indicare quale prezzo vuoi pagare. +Pagando di più, il tuo annuncio comparirà più in alto nella lista delle inserzioni, nonché nei risultati delle ricerche in base a parole chiave. + <usetemplate ignoretext="Come creare una nuova inserzione" name="okcancelignore" notext="Annulla" yestext="OK"/> </notification> <notification name="DeleteClassified"> Cancella annuncio '[NAME]'? @@ -316,14 +339,18 @@ Non ci sono rimborsi per la tariffa pagata. <usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/> </notification> <notification name="DeleteMedia"> - Hai selezionato la cancellazione del media associato a questa faccia multimediale. -Sei sicuro di voler continuare? - <usetemplate ignoretext="Confemra la cancellazione del multimedia dall'oggetto" name="okcancelignore" notext="No" yestext="Si"/> + Hai selezionato la cancellazione del media associato a questa faccia. +Vuoi continuare? + <usetemplate ignoretext="Conferma prima di eliminare elemnti multimediali dall'oggetto" name="okcancelignore" notext="No" yestext="Sì"/> </notification> <notification name="ClassifiedSave"> Salva le modifiche all'annuncio [NAME]? <usetemplate canceltext="Annulla" name="yesnocancelbuttons" notext="Non salvare" yestext="Salva"/> </notification> + <notification name="ClassifiedInsufficientFunds"> + Denaro insufficiente per creare un'inserzione. + <usetemplate name="okbutton" yestext="OK"/> + </notification> <notification name="DeleteAvatarPick"> Cancella il favorito [PICK]? <usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/> @@ -341,26 +368,18 @@ Sei sicuro di voler continuare? <notification name="SelectHistoryItemToView"> Scegli un item storico da vedere. </notification> - <notification name="ResetShowNextTimeDialogs"> - Vuoi riabilitare tutti le finestre di popup, che precedentemente hai indicato che 'Non vuoi vedere più'? - <usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/> - </notification> - <notification name="SkipShowNextTimeDialogs"> - Vuoi disabilitare tutti i popup che possono essere ignorati? - <usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/> - </notification> <notification name="CacheWillClear"> - La Cache verrà cancellata dopo la ripartenza di [APP_NAME]. + La cache verrà cancellata dopo il riavvio di [APP_NAME]. </notification> <notification name="CacheWillBeMoved"> - La Cache verrà mossa dopo la ripartenza di [APP_NAME]. -Nota: Questo cancellerà anche la cache. + La cache verrà spostata dopo il riavvio di [APP_NAME]. +Nota: questa operazione cancellerà la cache. </notification> <notification name="ChangeConnectionPort"> - Le importazioni di Porte avranno effetto dopo la ripartenza di [APP_NAME]. + Le impostazioni della porta avranno effetto dopo il riavvio di [APP_NAME]. </notification> <notification name="ChangeSkin"> - La nuova skin apparirà dopo la ripartenza di [APP_NAME]. + La nuova pelle comparirà dopo il riavvio di [APP_NAME]. </notification> <notification name="GoToAuctionPage"> Vai alla pagina web [SECOND_LIFE] per vedere i dettagli dell'asta oppure fai un'offerta? @@ -409,8 +428,8 @@ L'oggetto potrebbe essere troppo lontano oppure essere stato cancellato. C'è stato un problema salvando lo script compilato a causa del seguente motivo: [REASON]. Riprova a salvare lo script più tardi. </notification> <notification name="StartRegionEmpty"> - Oops, la tua Regione di Inizio non è stata impostata. -Per favore scrivi il nome della Regione nello spazio Regione di Inizio oppure scegli la mia ultima Ubicazione o Casa Mia come ultima ubicazione. + La tua Regione di inizio non è stata definita. +Per scegliere il luogo dove vuoi trovarti all'accesso, digita il nome della regione nel campo del luogo di partenza oppure scegli La mia ultima Ubicazione o Casa mia. <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="CouldNotStartStopScript"> @@ -424,28 +443,27 @@ L'oggetto potrebbe essere troppo lontano oppure essere stato cancellato. Non è stato possibile scrivere il file [[FILE]] </notification> <notification name="UnsupportedHardware"> - Attenzione: Il tuo sistema non soddisfa i requisiti minimi per il funzionamento [APP_NAME]. Se continui ad usare [APP_NAME], potresti osservare una lentezza eccessiva. Sfortunatamente non possiamo fornire supporto tecnico per configurazioni di sistema non supportate. + Ti informiamo che il tuo computer non dispone dei requisiti minimi di sistema per [APP_NAME]. Il funzionamento può pertanto risultare ridotto. Purtroppo la pagina [SUPPORT_SITE] non può fornire assistenza tecnica in caso di problemi dovuti a configurazioni di sistema non compatibili. -MINSPECS -Vuoi visitare [_URL] per maggiori informazioni? +Visitare [_URL] per ulteriori informazioni? <url name="url" option="0"> http://secondlife.com/support/sysreqs.php?lang=it </url> - <usetemplate ignoretext="L'hardware di questo computer non è supportato" name="okcancelignore" notext="No" yestext="Si"/> + <usetemplate ignoretext="L'hardware di questo computer non è compatibile" name="okcancelignore" notext="No" yestext="Si"/> </notification> <notification name="UnknownGPU"> - Il tuo sistema contiene una scheda grafica ancora sconosciuta a [APP_NAME]. -Questo succede spesso con nuovo hardware che non è ancora stato verificato con [APP_NAME]. Probabilmente [APP_NAME] funzionerà correttamente, ma forse devi regolare le impostazioni grafiche a qualcosa di più appropriato. + Il tuo sistema utilizza una scheda grafica che [APP_NAME] non riconosce. +Questo succede spesso con un nuovo hardware che non è stato ancora testato con [APP_NAME]. Probabilmente tutto andrà bene, ma devi riconfigurare le tue impostazioni grafiche. (Io > Preferenze > Grafica). <form name="form"> - <ignore name="ignore" text="La mia scheda grafica non è stata identificata"/> + <ignore name="ignore" text="La tua scheda grafica non è stata riconosciuta"/> </form> </notification> <notification name="DisplaySettingsNoShaders"> - [APP_NAME] si è interrotta mentre stava inizializzando i driver grafici. -La Qualità Grafica verrà impostata a Basso per evitare alcuni errori comuni di driver. Questo disabiliterà alcune caratteristiche grafiche. -Si raccomanda di aggiornare i driver della scheda grafica. -La Qualità Grafica può essere aumentata in Preferenze > Grafica. + L'esecuzione di [APP_NAME] si è interrotta durante l'inizializzazione dei driver grafici. +La qualità grafica verrà impostata a livello basso per evitare alcuni errori comuni di driver. Alcune funzionalità grafiche saranno disattivate. +Si consiglia di aggiornare i driver della scheda grafica. +La qualità grafica può essere aumentata in Preferenze > Grafica. </notification> <notification name="RegionNoTerraforming"> La regione [REGION] non consente di terraformare. @@ -600,7 +618,7 @@ Attese [VALIDS] Impossibile creare il file in uscita: [FILE] </notification> <notification name="DoNotSupportBulkAnimationUpload"> - [APP_NAME] non supporta ancora l'upload in blocco di file di animazione. + [APP_NAME] non supporta ancora il caricamento in blocco di file di animazione. </notification> <notification name="CannotUploadReason"> Impossibile importare il file [FILE] a causa del seguente motivo: [REASON] @@ -609,6 +627,10 @@ Riprova più tardi. <notification name="LandmarkCreated"> Hai aggiunto "[LANDMARK_NAME]" alla tua [FOLDER_NAME] cartella. </notification> + <notification name="LandmarkAlreadyExists"> + Hai già il punto di riferimento di questo luogo. + <usetemplate name="okbutton" yestext="OK"/> + </notification> <notification name="CannotCreateLandmarkNotOwner"> Non puoi creare qui un landmark perchè il proprietario di questo terreno non lo consente. </notification> @@ -632,7 +654,7 @@ Seleziona oggetti con degli script. Seleziona oggetti con script su cui hai i permessi di modifica. </notification> <notification name="CannotOpenScriptObjectNoMod"> - Impossibile aprire la script dell'oggetto senza i permessi modify. + Impossibile aprire la script dell'oggetto senza i diritti di modifica. </notification> <notification name="CannotSetRunningSelectObjectsNoScripts"> Impossibile mettere 'in esecuzione' gli script. @@ -657,16 +679,16 @@ Ho cercato: [FINALQUERY] Le parole che hai usato per la ricerca sono troppo corte e non è stato possibile iniziare la ricerca. </notification> <notification name="CouldNotTeleportReason"> - Impossibile eseguire il teleport. + Teleport non riuscito. [REASON] </notification> <notification name="invalid_tport"> - E' stato incontrato un problema eseguendo la tua richiesta di teleport. Potresti avere bisogno di riloggarti per ritentare il teleport. -Se continui a ricevere questo errore, controlla [SUPPORT_SITE]. + C'è stato un problema nell'elaborare la tua richiesta di teleport. Potresti dover effettuare nuovamente l'accesso prima di poter usare il teleport. +Se si continua a visualizzare questo messaggio, consulta la pagina [SUPPORT_SITE]. </notification> <notification name="invalid_region_handoff"> - Ci sono stati problemi eseguendo il passaggio di regione. Potresti avere bisogno di riloggarti per ritentare il passaggio di regione. -Se continui a ricevere questo errore, controlla [SUPPORT_SITE]. + Si è verificato un problema nel tentativo di attraversare regioni. È possibile che per potere attraversare le regioni, tu debba effettuare nuovamente l'accesso. +Se si continua a visualizzare questo messaggio, consulta la pagina [SUPPORT_SITE]. </notification> <notification name="blocked_tport"> Spiacenti, il teletrasporto è bloccato al momento. Prova di nuovo tra pochi istanti. Se ancora non potrai teletrasportarti, per favore scollegati e ricollegati per risolvere il problema. @@ -706,8 +728,8 @@ Nessun terreno selezionato. Impossibile forzare la proprietà del terreno perchè la selezione si estende su diverse regioni. Seleziona una area più piccola e riprova. </notification> <notification name="ForceOwnerAuctionWarning"> - Questo terreno è venduta all'asta. Forzare la proprietà cancellerà l'asta e potrebbe disturbare residenti che abbiano già fatto offerte. -Vuoi forzare la proprietà? + Questo lotto è all'asta. La designazione di un proprietario determinerà l'annullamento automatico dell'asta e probabilmente può scontentare qualche residente se l'asta è già iniziata. +Vuoi designare un proprietario? <usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/> </notification> <notification name="CannotContentifyNothingSelected"> @@ -735,7 +757,7 @@ Nessun terreno selezionato. Non riesco a trovare la regione dove è situato il terreno. </notification> <notification name="CannotCloseFloaterBuyLand"> - Non puoi chiudere la finestra di Acquisto Terreno finchè [APP_NAME] non finisce di stimare il prezzo di questa transazione. + Non puoi chiudere la finestra Acquista terreno finché [APP_NAME] non finisce di stimare il prezzo di questa transazione. </notification> <notification name="CannotDeedLandNothingSelected"> Impossibile cedere il terreno: @@ -746,8 +768,8 @@ Nessun terreno selezionato. Nessun gruppo selezionato. </notification> <notification name="CannotDeedLandNoRegion"> - Non è possibile donare il terreno: -Non riesco a trovare la regione in cui si trova. + Non è possibile effettuare la cessione del terreno: +Impossibile trovare la regione in cui si trova il terreno. </notification> <notification name="CannotDeedLandMultipleSelected"> Impossibile cedere il terreno: @@ -755,13 +777,6 @@ Hai selezionato più di un terreno. Prova a selezionare un solo terreno. </notification> - <notification name="ParcelCanPlayMedia"> - Questo posto può mostrare contenuto multimediale in streaming. Questo richiede una connessione Internet veloce. - -Mostra contenuto multimediale quando disponibile? -(Puoi cambiare questa opzione anche successivamente su Preferenze > Privacy.) - <usetemplate name="okcancelbuttons" notext="Disabilita" yestext="Abilita MultiMedia"/> - </notification> <notification name="CannotDeedLandWaitingForServer"> Impossibile cedere il terreno: Sto aspettando il server per segnalare la proprietà. @@ -791,7 +806,7 @@ I terreni di tua proprietà vengono visualizzati in verde. </notification> <notification name="CannotReleaseLandRegionNotFound"> Non è possibile abbandonare il terreno: -Non riesco a trovare la regione in cui si trova. +Impossibile trovare la regione in cui si trova il terreno. </notification> <notification name="CannotReleaseLandNoTransfer"> Impossibile abbandonare il terreno: @@ -829,11 +844,11 @@ Dividi il terreno? </notification> <notification name="CannotDivideLandNoRegion"> Non è possibile suddividere il terreno: -Non riesco a trovare la regione in cui si trova. +Impossibile trovare la regione in cui si trova il terreno. </notification> <notification name="CannotJoinLandNoRegion"> Non è possibile unire il terreno: -Non riesco a trovare la regione in cui si trova. +Impossibile trovare la regione in cui si trova il terreno. </notification> <notification name="CannotJoinLandNothingSelected"> Impossibile unire il terreno: @@ -880,12 +895,11 @@ Unisci il terreno? </notification> <notification name="CannotSaveToAssetStore"> Non è possibile salvare [NAME] nel database centrale degli asset. -Questo normalmente è un problema temporaneo. Riadatta e salva i vestiti e riprova fra qualche minuto. +In genere si tratta di un problema temporaneo. Attendi alcuni minuti per modificare e salvare nuovamente gli elementi indossabili. </notification> <notification name="YouHaveBeenLoggedOut"> - Sei stato sconnesso da [SECOND_LIFE]: + Accidenti. Sei stato scollegato da [SECOND_LIFE] [MESSAGE] -Puoi ancora vedere gli IM e la chat cliccando 'Vedi IM & Chat'. Altrimenti clicca 'Esci' per uscire immediatamente da[APP_NAME]. <usetemplate name="okcancelbuttons" notext="Esci" yestext="Vedi IM & Chat"/> </notification> <notification name="OnlyOfficerCanBuyLand"> @@ -1043,37 +1057,39 @@ Cedi questo terreno di [AREA] m² al gruppo '[GROUP_NAME]'? </notification> <notification name="ErrorMessage"> [ERROR_MESSAGE] + <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="AvatarMovedDesired"> - L'ubicazione desiderata non è attualmente disponibile. Sei stato trasportato in una regione vicina. + L'ubicazione prescelta non è attualmente disponibile. +Sei stato trasferito in una regione vicina. </notification> <notification name="AvatarMovedLast"> - La tua ultima ubicazione non è al momento disponibile. -Sei stato trasferito in una regione vicina . + La tua ultima posizione non è al momento disponibile. +Sei stato trasferito in una regione vicina. </notification> <notification name="AvatarMovedHome"> L'ubicazione di casa tua non è al momento disponibile. -Sei stato trasferito in un'ubicazione vicina. -Potresti impostare una nuova ubicazione. +Sei stato trasferito in una regione vicina. +Ti consigliamo di impostare una nuova posizione iniziale. </notification> <notification name="ClothingLoading"> - Sto ancora scaricando i tuoi abiti. -Puoi comunque usare [SECOND_LIFE] normalmente e gli altri ti vedranno correttamente. + Gli abiti sono in corso di scaricamento. +Puoi comunque usare [SECOND_LIFE] normalmente e gli altri residenti ti vedranno correttamente. <form name="form"> - <ignore name="ignore" text="Lo scarico degli abiti sta impiegando parecchio tempo"/> + <ignore name="ignore" text="Lo scaricamento sta richiedendo parecchio tempo"/> </form> </notification> <notification name="FirstRun"> - L'installazione di [APP_NAME] è completa. + L'installazione di [APP_NAME] è terminata. -Se questa è la prima volta che usi [SECOND_LIFE], devi creare un account prima che tu possa fare il log in. -Vuoi ritornare su [http://join.secondlife.com secondlife.com] per creare un nuovo account? +Se questa è la prima volta che usi [SECOND_LIFE], devi creare un account prima che tu possa effettuare l'accesso. +Vuoi tornare a [http://join.secondlife.com secondlife.com] per creare un nuovo account? <usetemplate name="okcancelbuttons" notext="Continua" yestext="Nuovo Account..."/> </notification> <notification name="LoginPacketNeverReceived"> - Ci sono problemi di connessione. Può darsi che siano nella tua connessione Internet oppure in [SECOND_LIFE_GRID]. + Ci sono problemi di connessione. È possibile che ci siano problemi con la tua connessione Internet oppure sulla [SECOND_LIFE_GRID]. -Puoi controllare la tua connessione Internet e riprovare fra qualche minuto, oppure cliccare Aiuto per vedere il [SUPPORT_SITE], oppure cliccare Teleport per tentare di teleportarti a casa. +Controlla la tua connessione Internet e riprova fra qualche minuto, oppure clicca su Aiuto per visualizzare la pagina [SUPPORT_SITE], oppure clicca su Teleport per tentare il teleport a casa tua. <url name="url"> http://it.secondlife.com/support/ </url> @@ -1095,10 +1111,10 @@ Scegli un avatar maschile o femminile. Puoi sempre cambiare idea più tardi. [NAME] [PRICE]L$ Non hai abbastanza L$ per farlo. </notification> <notification name="GrantedModifyRights"> - [NAME] ti ha dato il permesso di editare i suoi oggetti. + [NAME] ti ha dato il permesso di modificare i suoi oggetti. </notification> <notification name="RevokedModifyRights"> - Ti è stato revocato il permesso di modificare gli oggetti di [NAME] + Non sei più autorizzato a modificare gli oggetti di [NAME] </notification> <notification name="FlushMapVisibilityCaches"> Questo reinizializzerà la cache della mappa di questa regione. @@ -1177,107 +1193,107 @@ Imposta l'oggetto per la vendita e riprova. [DOWNLOAD_PATH]. </notification> <notification name="DownloadWindowsMandatory"> - E' disponibile una nuova versione di [APP_NAME]. + È disponibile una nuova versione di [APP_NAME]. [MESSAGE] -Devi scaricarla per usare [APP_NAME]. +Devi scaricare questo aggiornamento per utilizzare [APP_NAME]. <usetemplate name="okcancelbuttons" notext="Esci" yestext="Scarica l'aggiornamento"/> </notification> <notification name="DownloadWindows"> - E' disponibile una versione aggiornata di [APP_NAME]. + È disponibile una versione aggiornata di [APP_NAME]. [MESSAGE] -Questo aggiornamento non è obbligatorio, ma è consigliabile installarlo per migliorare le prestazioni e la stabilità. +Questo aggiornamento non è necessario, ma ti consigliamo di installarlo per migliorare il rendimento e la stabilità. <usetemplate name="okcancelbuttons" notext="Continua" yestext="Scarica l'aggiornamento"/> </notification> <notification name="DownloadWindowsReleaseForDownload"> - E' disponibile una versione aggiornata di [APP_NAME]. + È disponibile una versione aggiornata di [APP_NAME]. [MESSAGE] -Questo aggiornamento non è obbligatorio, ma è consigliabile installarlo per migliorare le prestazioni e la stabilità. +Questo aggiornamento non è necessario, ma ti consigliamo di installarlo per migliorare il rendimento e la stabilità. <usetemplate name="okcancelbuttons" notext="Continua" yestext="Scarica l'aggiornamento"/> </notification> <notification name="DownloadLinuxMandatory"> - Una nuova versione di [APP_NAME] è disponibile. + È disponibile una nuova versione di [APP_NAME]. [MESSAGE] -Devi scaricare questo aggiornamento per utilizzarlo [APP_NAME]. - <usetemplate name="okcancelbuttons" notext="Esci" yestext="Download"/> +Devi scaricare questo aggiornamento per utilizzare [APP_NAME]. + <usetemplate name="okcancelbuttons" notext="Esci" yestext="Scarica"/> </notification> <notification name="DownloadLinux"> - E' disponibile una versione aggiornata di [APP_NAME]. + È disponibile una versione aggiornata di [APP_NAME]. [MESSAGE] -Questo aggiornamento non è necessario, ti consigliamo di installarlo per migliorare il rendimento e la stabilità. - <usetemplate name="okcancelbuttons" notext="Continua" yestext="Download"/> +Questo aggiornamento non è necessario, ma ti consigliamo di installarlo per migliorare il rendimento e la stabilità. + <usetemplate name="okcancelbuttons" notext="Continua" yestext="Scarica"/> </notification> <notification name="DownloadLinuxReleaseForDownload"> - E' disponibile una versione aggiornata di [APP_NAME]. + È disponibile una versione aggiornata di [APP_NAME]. [MESSAGE] -Questo aggiornamento non è obbligatorio, ma è consigliata l'installazione per migliorare le prestazioni e l'affidabilità. - <usetemplate name="okcancelbuttons" notext="Continua" yestext="Download"/> +Questo aggiornamento non è necessario, ma ti consigliamo di installarlo per migliorare il rendimento e la stabilità. + <usetemplate name="okcancelbuttons" notext="Continua" yestext="Scarica"/> </notification> <notification name="DownloadMacMandatory"> - E' disponibile una nuova versione di [APP_NAME]. + È disponibile una nuova versione di [APP_NAME]. [MESSAGE] -Devi scaricarla per usare [APP_NAME]. +Devi scaricare questo aggiornamento per utilizzare [APP_NAME]. -Scarico nella cartella Applicazioni? +Scaricare nella cartella Applicazioni? <usetemplate name="okcancelbuttons" notext="Esci" yestext="Scarica l'aggiornamento"/> </notification> <notification name="DownloadMac"> - E' disponibile una versione aggiornata di [APP_NAME]. + È disponibile una versione aggiornata di [APP_NAME]. [MESSAGE] -Questo aggiornamento non è obbligatorio, ma è consigliabile installarlo per migliorare le prestazioni e la stabilità. +Questo aggiornamento non è necessario, ma ti consigliamo di installarlo per migliorare il rendimento e la stabilità. -Scarico nella cartella Applicazioni? +Scaricare nella cartella Applicazioni? <usetemplate name="okcancelbuttons" notext="Continua" yestext="Scarica l'aggiornamento"/> </notification> <notification name="DownloadMacReleaseForDownload"> - E' disponibile una versione aggiornata di [APP_NAME]. + È disponibile una versione aggiornata di [APP_NAME]. [MESSAGE] -Questo aggiornamento non è obbligatorio, ma è consigliabile installarlo per migliorare le prestazioni e la stabilità. +Questo aggiornamento non è necessario, ma ti consigliamo di installarlo per migliorare il rendimento e la stabilità. -Scarico nella cartella Applicazioni? +Scaricare nella cartella Applicazioni? <usetemplate name="okcancelbuttons" notext="Continua" yestext="Scarica l'aggiornamento"/> </notification> <notification name="DeedObjectToGroup"> La cessione di questo oggetto farà in modo che il gruppo: * Riceva i L$ pagati all'oggetto - <usetemplate ignoretext="Conferma la donazione di un oggetto al gruppo" name="okcancelignore" notext="Annulla" yestext="Cedi"/> + <usetemplate ignoretext="Conferma la cessione di un oggetto al gruppo" name="okcancelignore" notext="Annulla" yestext="Cedi"/> </notification> <notification name="WebLaunchExternalTarget"> - Vuoi aprire il browser per vedere questo contenuto? - <usetemplate ignoretext="Lancia il browser per vedere la pagina web" name="okcancelignore" notext="Annulla" yestext="OK"/> + Vuoi aprire il browser per vedere questi contenuti? + <usetemplate ignoretext="Lancia il browser per consultare una pagina web" name="okcancelignore" notext="Annulla" yestext="OK"/> </notification> <notification name="WebLaunchJoinNow"> Vuoi andare su [http://secondlife.com/account/ Dashboard] per gestire il tuo account? - <usetemplate ignoretext="Lancia il browser pe gestire il mio account" name="okcancelignore" notext="Annulla" yestext="OK"/> + <usetemplate ignoretext="Lancia il browser per gestire il mio account" name="okcancelignore" notext="Annulla" yestext="OK"/> </notification> <notification name="WebLaunchSecurityIssues"> Visita la Wiki di [SECOND_LIFE] per i dettagli su come segnalare un problema di sicurezza. - <usetemplate ignoretext="Lancia il browser per imparare a segnalare un Problema di Sicurezza" name="okcancelignore" notext="Annulla" yestext="OK"/> + <usetemplate ignoretext="Lancia il browser per imparare a segnalare un problema di sicurezza" name="okcancelignore" notext="Annulla" yestext="OK"/> </notification> <notification name="WebLaunchQAWiki"> Visita il controllo di qualità Wiki [SECOND_LIFE]. - <usetemplate ignoretext="Lancia il browser per vedere il QA Wiki" name="okcancelignore" notext="Annulla" yestext="OK"/> + <usetemplate ignoretext="Lancia il browser per vedere la pagina Wiki sul controllo di qualità" name="okcancelignore" notext="Annulla" yestext="OK"/> </notification> <notification name="WebLaunchPublicIssue"> Visita il registro pubblico dei problemi di [SECOND_LIFE], dove puoi segnalare bug ed altri problemi. - <usetemplate ignoretext="Lancia il browser per vedere il Registro dei Problemi Pubblici" name="okcancelignore" notext="Annulla" yestext="Vai alla pagina"/> + <usetemplate ignoretext="Lancia il browser per vedere il registro pubblico di monitoraggio dei problemi" name="okcancelignore" notext="Annulla" yestext="Vai alla pagina"/> </notification> <notification name="WebLaunchSupportWiki"> Vai al blog ufficiale Linden, per le ultime notizie ed informazioni. <usetemplate ignoretext="Lancia il browser per vedere il blog" name="okcancelignore" notext="Annulla" yestext="OK"/> </notification> <notification name="WebLaunchLSLGuide"> - Vuoi aprire la Guida per lo Scripting per avere aiuto con lo scripting? - <usetemplate ignoretext="Lancia il browser per vedere la Guida per lo Scripting" name="okcancelignore" notext="Annulla" yestext="OK"/> + Vuoi aprire la Guida per lo scripting per avere aiuto con lo scripting? + <usetemplate ignoretext="Lancia il browser per vedere la Guida per lo scripting" name="okcancelignore" notext="Annulla" yestext="OK"/> </notification> <notification name="WebLaunchLSLWiki"> - Vuoi visitare il Portale LSL per avere aiuto con lo Scripting? + Vuoi visitare il Portale LSL per avere aiuto con lo scripting? <usetemplate ignoretext="Lancia il browser per vedere il Portale LSL" name="okcancelignore" notext="Annulla" yestext="Vai alla pagina"/> </notification> <notification name="ReturnToOwner"> Confermi di voler restituire gli oggetti selezionati ai loro proprietari? Gli oggetti trasferibili ceduti al gruppo, verranno restituiti ai proprietari precedenti. *ATTENZIONE* Gli oggetti ceduti non trasferibili verranno cancellati! - <usetemplate ignoretext="Conferma la restituzione degli oggetti ai loro proprietari" name="okcancelignore" notext="Annulla" yestext="OK"/> + <usetemplate ignoretext="Conferma prima di restituire gli oggetti ai relativi proprietari" name="okcancelignore" notext="Annulla" yestext="OK"/> </notification> <notification name="GroupLeaveConfirmMember"> Sei attualmente un membro del gruppo [GROUP]. @@ -1285,18 +1301,18 @@ Vuoi lasciare il gruppo? <usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/> </notification> <notification name="ConfirmKick"> - Vuoi VERAMENTE espellere tutti gli utenti dalla griglia? - <usetemplate name="okcancelbuttons" notext="Annulla" yestext="Espelli tutti gli utenti"/> + Vuoi veramente espellere tutti i residenti dalla griglia? + <usetemplate name="okcancelbuttons" notext="Annulla" yestext="Espelli tutti i residenti"/> </notification> <notification name="MuteLinden"> - Mi dispiace, non puoi bloccare un Linden. + Spiacenti, non puoi bloccare un Linden. <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="CannotStartAuctionAlreadyForSale"> Non è possibile mettere in vendita all'asta un terreno che è già impostato per la vendita. Disabilita la vendita del terreno, se sei certo di voler avviare una vendita all'asta. </notification> - <notification label="E' fallito Il Blocco dell'Oggetto" name="MuteByNameFailed"> - Hai già bloccato questo nome. + <notification label="Il blocco dell'oggetto in base al nome non è riuscito," name="MuteByNameFailed"> + hai già bloccato questo nome. <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="RemoveItemWarn"> @@ -1313,18 +1329,21 @@ Vuoi cancellare quell'elemento? <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="BusyModeSet"> - E' stata impostata la modalità Non Disponibile. -La Chat e gli IM verranno nascosti. Gli IM riceveranno la tua risposta di Non Disponibile. Tutte le offerte di teleport verranno declinate. Tutte le offerte di Inventory andranno nel Cestino. - <usetemplate ignoretext="Cambio il mio stato in Non Disponibile" name="okignore" yestext="OK"/> + È stata impostata la modalità Non disponibile. +La chat e gli IM verranno nascosti. Gli IM riceveranno la tua risposta di Non disponibile. Tutte le offerte di teleport verranno rifiutate. Tutte le offerte di Inventario andranno nel Cestino. + <usetemplate ignoretext="Cambio il mio stato sulla modalità Non disponibile" name="okignore" yestext="OK"/> </notification> <notification name="JoinedTooManyGroupsMember"> - Hai raggiunto il limite massimo di gruppi. Devi lasciare un gruppo prima di poterti unire a questo, oppure puoi declinare questa offerta. -[NAME] ti ha invitato ad unirti al gruppo come membro. -[INVITE] + Hai raggiunto il numero massimo di gruppi. Per favore abbandona almeno un gruppo prima di aderire a questo, oppure declina l'offerta. +[NAME] ti invita ad aderire ad un gruppo. <usetemplate name="okcancelbuttons" notext="Declino" yestext="Unisciti"/> </notification> + <notification name="JoinedTooManyGroups"> + Hai raggiunto il numero massimo di gruppi. Per favore abbandona almeno un gruppo prima di aderire o crearne uno nuovo. + <usetemplate name="okbutton" yestext="OK"/> + </notification> <notification name="KickUser"> - Espelli questo utente con quale messaggio? + Espelli questo residente con quale messaggio? <form name="form"> <input name="message"> Un amministratore ti ha disconnesso. @@ -1344,7 +1363,7 @@ La Chat e gli IM verranno nascosti. Gli IM riceveranno la tua risposta di Non Di </form> </notification> <notification name="FreezeUser"> - Immobilizza questo utente con quale messaggio? + Congela questo residente con quale messaggio? <form name="form"> <input name="message"> Sei stato immobilizzato. Non puoi muoverti o usare la chat. Un amministratore ti contatterà con un messaggio (IM). @@ -1354,7 +1373,7 @@ La Chat e gli IM verranno nascosti. Gli IM riceveranno la tua risposta di Non Di </form> </notification> <notification name="UnFreezeUser"> - Smobilizza questo utente con quale messaggio? + Scongela questo residente con quale messaggio? <form name="form"> <input name="message"> Non sei più immobilizzato. @@ -1374,7 +1393,7 @@ La Chat e gli IM verranno nascosti. Gli IM riceveranno la tua risposta di Non Di </form> </notification> <notification name="OfferTeleportFromGod"> - Vuoi trasportare divinamente l'utente nel posto dove sei? + Chiedere, in qualità di Admin, al residente di raggiungerti? <form name="form"> <input name="message"> Raggiungimi in [REGION] @@ -1384,16 +1403,16 @@ La Chat e gli IM verranno nascosti. Gli IM riceveranno la tua risposta di Non Di </form> </notification> <notification name="TeleportFromLandmark"> - Confermi di volerti teleportare? - <usetemplate ignoretext="Conferma il teleport verso un Landmark" name="okcancelignore" notext="Annulla" yestext="Teleportati"/> + Sei sicuro di volere il teleport a <nolink>[LOCATION]</nolink>? + <usetemplate ignoretext="Conferma il teleport verso un punto di riferimento" name="okcancelignore" notext="Annulla" yestext="Teleportati"/> </notification> <notification name="TeleportToPick"> Teleport a [PICK]? - <usetemplate ignoretext="Conferma il teleport verso l'ubicazione nei Posti Consigliati" name="okcancelignore" notext="Annulla" yestext="Teleport"/> + <usetemplate ignoretext="Conferma che voglio il teleport verso l'ubicazione nei Luoghi preferiti" name="okcancelignore" notext="Annulla" yestext="Teleport"/> </notification> <notification name="TeleportToClassified"> Teleport a [CLASSIFIED]? - <usetemplate ignoretext="Confermo il teleport verso questa ubicazione negli Annunci" name="okcancelignore" notext="Cancella" yestext="Teleport"/> + <usetemplate ignoretext="Conferma il teleport verso questa posizione negli annunci" name="okcancelignore" notext="Annulla" yestext="Teleport"/> </notification> <notification label="Manda un messaggio a tutti nella tua proprietà" name="MessageEstate"> Scrivi un annuncio breve che verrà mandato a tutti quelli che sono in questo momento nella tua proprietà. @@ -1404,11 +1423,11 @@ La Chat e gli IM verranno nascosti. Gli IM riceveranno la tua risposta di Non Di </form> </notification> <notification label="Cambia la tipologia della proprietà Linden" name="ChangeLindenEstate"> - Stai per cambiare la tipologia della proprietà Linden (mainland, griglia minorenni, orientamento, ecc.). + Stai per apportare modifiche ad una proprietà che appartiene a Linden (continente, teen grid, orientamento e così via). -Questo è ESTREMAMENTE PERICOLOSO perchè può cambiare radicalmente l'esperienza degli utenti. Sulla mainland cambierà migliaia di regioni e produrrà seri problemi ai vari server. +Questa è un'operazione da effettuare con molta cautela, in quanto può incidere profondamente sulla vita dei residenti in Second Life. Sul continente, l'azione modificherà migliaia di regioni e creerà un grosso carico sul server. -Confermi? +Vuoi procedere? <usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/> </notification> <notification label="Cambia la tipologia Linden di accesso alla proprietà" name="ChangeLindenAccess"> @@ -1471,19 +1490,19 @@ Vuoi andare alla Knowledge Base per ulteriori informazioni sulle categorie di ac <url name="url"> http://wiki.secondlife.com/wiki/Linden_Lab_Official:Maturity_ratings:_an_overview/it </url> - <usetemplate ignoretext="Non posso entrare in questa Regione, a causa delle restrizioni sulla Categoria di Accesso" name="okcancelignore" notext="Chiudi" yestext="Vai alla Knowledge Base"/> + <usetemplate ignoretext="Non posso entrare in questa regione a causa delle restrizioni della categoria di accesso" name="okcancelignore" notext="Chiudi" yestext="Vai alla Knowledge Base"/> </notification> <notification name="RegionEntryAccessBlocked_Notify"> Non sei ammesso in questa regione a causa della tua categoria d'accesso. </notification> <notification name="RegionEntryAccessBlocked_Change"> - Non ti è consentito entrare in quella Regione a causa della tua Categoria di Accesso impostata nelle Preferenze. + Non ti è consentito entrare in quella regione a causa della tua categoria di accesso impostata nelle preferenze. -Puoi cliccare su 'Cambia Preferenze' per alzare la tua preferenza di Categoria di Accesso e quindi riuscire ad entrare. Sarai in grado di ricercare e di accedere da adesso in poi contenuto [REGIONMATURITY]. Se più tardi volessi cambiare di nuovo le tue impostazioni, vai su Me > Preferenze > Generali. +Puoi cliccare su Cambia preferenze per modificare la categoria di accesso e quindi riuscire ad entrare. Da adesso potrai accedere ai contenuti [REGIONMATURITY] ed effettuare ricerche in questa categoria. Se in seguito tu volessi cambiare di nuovo le tue impostazioni, apri la finestra di dialogo da Io > Preferenze > Generale. <form name="form"> - <button name="OK" text="Cambia Preferenza"/> + <button name="OK" text="Cambia preferenza"/> <button default="true" name="Cancel" text="Chiudi"/> - <ignore name="ignore" text="Le mie preferenze attivate nel Rating (Classificazione) prevengono il mio ingresso in una Regione"/> + <ignore name="ignore" text="La categoria di accesso impostata mi impedisce di entrare in una regione"/> </form> </notification> <notification name="LandClaimAccessBlocked"> @@ -1499,16 +1518,16 @@ Vuoi andare alla Knowledge Base per maggiori informazioni sulle categorie di acc <url name="url"> http://wiki.secondlife.com/wiki/Linden_Lab_Official:Maturity_ratings:_an_overview/it </url> - <usetemplate ignoretext="Non posso richiedere questo Terreno, a causa delle restrizioni sulla Categoria di Accesso" name="okcancelignore" notext="Chiudi" yestext="Vai alla Knowledge Base"/> + <usetemplate ignoretext="Non posso richiedere questo terreno a causa delle restrizioni della categoria di accesso" name="okcancelignore" notext="Chiudi" yestext="Vai alla Knowledge Base"/> </notification> <notification name="LandClaimAccessBlocked_Notify"> Non puoi prendere possesso di questa terra a causa della tua categoria di accesso. </notification> <notification name="LandClaimAccessBlocked_Change"> - Non puoi richiedere questo Terreno a causa delle tue preferenze di Categoria di Accesso. + Non puoi richiedere questo terreno a causa della tua categoria di accesso. -Puoi cliccare su 'Cambia Preferenze' per alzare la tua preferenza di Categoria di Accesso e quindi riuscire ad entrare. Sarai in grado di ricercare e di accedere da adesso in poi contenuto [REGIONMATURITY]. Se più tardi volessi cambiare di nuovo le tue impostazioni, vai su Me > Preferenze > Generali. - <usetemplate ignoretext="Le mie preferenze di Categoria di Accesso mi impediscono di chiedere questo Terreno" name="okcancelignore" notext="Chiudi" yestext="Cambia le preferenze"/> +Puoi cliccare su Cambia preferenze per modificare la categoria di accesso e quindi riuscire ad entrare. Da adesso potrai accedere ai contenuti [REGIONMATURITY] ed effettuare ricerche in questa categoria. Se in seguito tu volessi cambiare di nuovo le tue impostazioni, apri la finestra di dialogo da Io > Preferenze > Generale. + <usetemplate ignoretext="Le mie preferenze di categoria di accesso mi impediscono di richiedere terreno" name="okcancelignore" notext="Chiudi" yestext="Cambia le preferenze"/> </notification> <notification name="LandBuyAccessBlocked"> Non puoi acquistare questo terreno a causa della tua categoria di accesso. Questo può essere dovuto ad una mancanza di informazioni valide che confermino la tua età. @@ -1523,16 +1542,16 @@ Vuoi andare alla Knowledge Base per maggiori informazioni sulle categorie di acc <url name="url"> http://wiki.secondlife.com/wiki/Linden_Lab_Official:Maturity_ratings:_an_overview/it </url> - <usetemplate ignoretext="Non posso comprare questo Terreno , a causa delle restrizioni della Categoria di Accesso" name="okcancelignore" notext="Chiudi" yestext="Vai alla Knowledge Base"/> + <usetemplate ignoretext="Non posso acquistare questo terreno a causa delle restrizioni della categoria di accesso" name="okcancelignore" notext="Chiudi" yestext="Vai alla Knowledge Base"/> </notification> <notification name="LandBuyAccessBlocked_Notify"> Non puoi acquistare questa land a causa della tua categoria di accesso. </notification> <notification name="LandBuyAccessBlocked_Change"> - Non puoi comprare questo Terreno a causa delle tue preferenze di Categoria di Accesso. + Non puoi acquistare questo terreno a causa della tua categoria di accesso. -Puoi cliccare su 'Cambia Preferenze' per alzare la tua preferenza di Categoria di Accesso e quindi riuscire ad entrare. Sarai in grado di ricercare e di accedere da adesso in poi contenuto [REGIONMATURITY]. Se più tardi volessi cambiare di nuovo le tue impostazioni, vai su Me > Preferenze > Generali. - <usetemplate ignoretext="Le mie Preferenze di Accesso mi impediscono l'acquisto di questo Terreno" name="okcancelignore" notext="Chiudi" yestext="Cambia le preferenze"/> +Puoi cliccare su Cambia preferenze per modificare la categoria di accesso e quindi riuscire ad entrare. Da adesso potrai accedere ai contenuti [REGIONMATURITY] ed effettuare ricerche in questa categoria. Se in seguito tu volessi cambiare di nuovo le tue impostazioni, apri la finestra di dialogo da Io > Preferenze > Generale. + <usetemplate ignoretext="Le mie Preferenze di accesso mi impediscono di acquistare terreno" name="okcancelignore" notext="Chiudi" yestext="Cambia le preferenze"/> </notification> <notification name="TooManyPrimsSelected"> Hai selezionato troppi prim. Seleziona non più di [MAX_PRIM_COUNT] prim e riprova @@ -1587,11 +1606,13 @@ Pubblica questo annuncio adesso per [AMOUNT]L$? </form> </notification> <notification label="Cambiato il contenuto Mature" name="RegionMaturityChange"> - La classificazione del contenuto Mature di questa regione è stata aggiornata. -Può essere necessario un po' di tempo prima che questo cambiamento sia visibile sulle mappe. + La classificazione di questa regione è stata aggiornata. +Un periodo di tempo è necessario prima che la modifica venga integrata nella mappa. + +Per accedere a regioni per adulti, i residenti devono avere un Account verificato, mediante verifica dell'età oppure mediante verifica della modalità di pagamento. </notification> <notification label="Versione voice non compatibile" name="VoiceVersionMismatch"> - Questa versione di [APP_NAME] non è compatibile con le capacità di Chat Voice in questa regione. Per poter far funzionare correttamente la Chat Voice devi aggiornare [APP_NAME]. + Questa versione di [APP_NAME] non è compatibile con la funzionalità di chat vocale in questa regione. Affinché la chat vocale funzioni correttamente, dovrai aggiornare [APP_NAME]. </notification> <notification label="Impossibile comprare oggetti" name="BuyObjectOneOwner"> Impossibile comprare oggetti da proprietari diversi nello stesso momento. @@ -1680,36 +1701,36 @@ Hai aggiornato l'ubicazione di questo preferito ma gli altri dettagli conse Questi elementi verranno trasferiti nel tuo inventario, ma non copiati. Trasferisci gli elementi nell'inventario? - <usetemplate ignoretext="Avvertimi quando rimuovo gli elementi 'no-copy' da un oggetto" name="okcancelignore" notext="Annulla" yestext="OK"/> + <usetemplate ignoretext="Avvertimi quando tento di rimuovore elementi per i quali non è consentita la copia da un oggetto" name="okcancelignore" notext="Annulla" yestext="OK"/> </notification> <notification name="MoveInventoryFromScriptedObject"> Hai selezionato elementi dell'inventario non copiabili. Questi elementi verranno trasferiti nel tuo inventario, non verranno copiati. Dato che questo oggetto è scriptato, il trasferimento di questi elementi nel tuo inventario potrebbe causare un malfunzionamento degli script. Trasferisci gli elementi nell'inventario? - <usetemplate ignoretext="Avvertimi se la rimozione di elementi 'no-copy' possono danneggiare un oggetto scriptato" name="okcancelignore" notext="Annulla" yestext="OK"/> + <usetemplate ignoretext="Avvertimi se tento di rimuovore di elementi per i quali non è consentita la copia e che potrebbero danneggiare un oggetto scriptato" name="okcancelignore" notext="Annulla" yestext="OK"/> </notification> <notification name="ClickActionNotPayable"> - Attenzione: E' stata impostata l'azione 'Paga Oggetto', ma funzionerà soltanto se inserisci uno script con un evento money(). + Attenzione: l'azione Paga oggetto è stata impostata, ma funzionerà soltanto se inserisci uno script con un evento money(). <form name="form"> - <ignore name="ignore" text="Ho impostato l'azione 'Paga Oggetto' costruendo un oggetto senza uno script money()"/> + <ignore name="ignore" text="Ho impostato l'azione Paga oggetto costruendo un oggetto senza uno script money()"/> </form> </notification> <notification name="OpenObjectCannotCopy"> Non ci sono elementi in questo oggetto che tu possa copiare. </notification> <notification name="WebLaunchAccountHistory"> - Vai su [http://secondlife.com/account/ Dashboard] per vedere la storia delle tue Transazioni? - <usetemplate ignoretext="Lancia il browser per vedere la storia del mio account" name="okcancelignore" notext="Annulla" yestext="Vai alla pagina"/> + Vai al [http://secondlife.com/account/ Dashboard] per vedere la cronologia del tuo account? + <usetemplate ignoretext="Lancia il browser per vedere la cronologia del mio account" name="okcancelignore" notext="Annulla" yestext="Vai alla pagina"/> </notification> <notification name="ConfirmQuit"> Confermi di voler uscire? - <usetemplate ignoretext="Conferma Uscita" name="okcancelignore" notext="Non Uscire" yestext="Esci"/> + <usetemplate ignoretext="Conferma prima di uscire" name="okcancelignore" notext="Non uscire" yestext="Esci"/> </notification> <notification name="HelpReportAbuseEmailLL"> - Usa questo strumento per segnalare violazioni del [http://secondlife.com/corporate/tos.php Terms of Service] e [http://secondlife.com/corporate/cs.php Community Standards]. + Usa questo strumento per segnalare violazioni a [http://secondlife.com/corporate/tos.php Terms of Service] e [http://secondlife.com/corporate/cs.php Community Standards]. -Tutti gli abusi segnalati verranno investigati e risolti. Puoi verificare lo stato delle segnalazione leggendo [http://secondlife.com/support/incidentreport.php Incident Report]. +Ogni abuso segnalato verrà esaminato e risolto. </notification> <notification name="HelpReportAbuseSelectCategory"> Scegli una categoria per questa segnalazione di abuso. @@ -1733,15 +1754,15 @@ Devi essere il più specifico possibile, includendo i nomi e i dettagli dell&apo Inserendo una descrizione accurata ci aiuti a gestire ed elaborare le segnalazioni di abuso. </notification> <notification name="HelpReportAbuseContainsCopyright"> - Gentile Residente, + Gentile residente, -Sembra che tu stia segnalando una violazione di proprietà intellettuale. Cerca di essere sicuro che la tua segnalazione stia riportando correttamente: +Ci risulta che tu stia segnalando una violazione di proprietà intellettuale. Per segnalare correttamente la violazione: -(1) Il processo di Abuso. Puoi inviare una segnalazione di abuso se ritieni che un residente stia sfruttando il sistema di permessi di [SECOND_LIFE], per esempio usando CopyBot o simili strumenti di copia, per rubare i diritti della proprietà intellettuale. L'Ufficio Abusi investigherà e deciderà adeguate azioni disciplinari per comportamenti che violano i [http://secondlife.com/corporate/tos.php Termini di Servizio] di [SECOND_LIFE] oppure i [http://secondlife.com/corporate/cs.php Standard di Comunità]. Si tenga però presente che l'ufficio Abusi non gestisce e non risponde alle richieste di rimozione di contentuo da [SECOND_LIFE]. +(1) Definizione di abuso. Puoi inviare una segnalazione di abuso se ritieni che un residente stia sfruttando il sistema di permessi di [SECOND_LIFE], per esempio usando CopyBot o simili strumenti di copia, per rubare i diritti di proprietà intellettuale. L'Ufficio abusi investigherà e deciderà adeguate azioni disciplinari per comportamenti che violano i [http://secondlife.com/corporate/tos.php Termini del servizio] di [SECOND_LIFE] oppure gli [http://secondlife.com/corporate/cs.php Standard della comunità]. Tieni comunque presente che l'Ufficio abusi non gestisce e non risponde alle richieste di rimozione di contenuti da [SECOND_LIFE]. -(2) Il processo di rimozione DMCA o processo di rimozione dei contenuti. Per richiedere la rimozione di contenuto da [SECOND_LIFE], DEVI compilare una denuncia valid di furto come definito nella nostra [http://secondlife.com/corporate/dmca.php Policy DMCA]. +(2) DMCA o rimozione di contenuti. Per richiedere la rimozione di contenuti da [SECOND_LIFE], devi compilare una denuncia valida di violazione come definito nelle nostra [http://secondlife.com/corporate/dmca.php Regole DMCA] (leggi sul copyright). -Se desideri egualmente continuare con il processo di Abuso, chiudi questa finestra e completa la compilazione della segnalazione. Puoi specificare la categoria specifica 'CopyBot o Sfruttamento Permessi'. +Per continuare con il procedimento di abuso, chiudi questa finestra e completa la compilazione della segnalazione. È possibile che dovrai specificare la categoria CopyBot o Sfruttamento dei diritti. Grazie, @@ -1755,7 +1776,7 @@ Linden Lab C'è già un oggetto indossato in questo punto del corpo. Vuoi sostituirlo con l'oggetto selezionato? <form name="form"> - <ignore name="ignore" save_option="true" text="Sostituisci un preesistente attachment con l'elemento selezionato"/> + <ignore name="ignore" save_option="true" text="Sostituisci un pezzo collegato con l'elemento selezionato"/> <button ignore="Replace Automatically" name="Yes" text="OK"/> <button ignore="Never Replace" name="No" text="Annulla"/> </form> @@ -1765,21 +1786,21 @@ Vuoi sostituirlo con l'oggetto selezionato? Desideri abbandonare la modalità 'Occupato' prima di completare questa transazione? <form name="form"> - <ignore name="ignore" save_option="true" text="Sto per pagare una persona o un oggetto mentro sono Non Disponibile"/> + <ignore name="ignore" save_option="true" text="Sto per pagare una persona o un oggetto mentro sono in modalià Non disponibile"/> <button ignore="Always leave Busy Mode" name="Yes" text="OK"/> <button ignore="Never leave Busy Mode" name="No" text="Abbandona"/> </form> </notification> <notification name="ConfirmDeleteProtectedCategory"> - La cartella '[FOLDERNAME]' è una cartella di sistema. La cancellazione delle cartelle di sistema può creare instabilità. Sei sicuro di volerla cancellare? - <usetemplate ignoretext="Conferma prima di cancellare una cartella di sistema" name="okcancelignore" notext="Cancella" yestext="OK"/> + La cartella '[FOLDERNAME]' è una cartella di sistema. L'eliminazione di cartelle di sistema può creare instabilità. Sei sicuro di volerla eliminare? + <usetemplate ignoretext="Chiedi conferma prima di eliminare una cartella di sistema" name="okcancelignore" notext="Annulla" yestext="OK"/> </notification> <notification name="ConfirmEmptyTrash"> - Vuoi veramente cancellare permanentemente il contenuto del tuo Cestino? - <usetemplate ignoretext="Conferma lo svuotamento del contenuto del Cestino" name="okcancelignore" notext="Annulla" yestext="OK"/> + Vuoi veramente eliminare in modo permanente il contenuto del tuo Cestino? + <usetemplate ignoretext="Conferma prima di svuotare la cartella del Cestino inventario" name="okcancelignore" notext="Annulla" yestext="OK"/> </notification> <notification name="ConfirmClearBrowserCache"> - Vuoi veramente cancellare la storia dei viaggi, web e delle ricerche fatte? + Vuoi veramente eliminare la cronologia viaggi, web e ricerche fatte? <usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/> </notification> <notification name="ConfirmClearCookies"> @@ -1791,14 +1812,14 @@ Desideri abbandonare la modalità 'Occupato' prima di completare quest <usetemplate name="okcancelbuttons" notext="Annulla" yestext="Si"/> </notification> <notification name="ConfirmEmptyLostAndFound"> - Vuoi veramente cancellare permanentemente il contenuto dei tuoi Persi e Ritrovati? - <usetemplate ignoretext="Conferma lo svuotamento della cartella Persi e Ritrovati" name="okcancelignore" notext="No" yestext="Si"/> + Vuoi veramente eliminare in modo definitivo il contenuto dei tuoi Oggetti smarriti? + <usetemplate ignoretext="Conferma prima di svuotare della cartella Oggetti smarriti" name="okcancelignore" notext="No" yestext="Si"/> </notification> <notification name="CopySLURL"> Lo SLurl seguente è stato copiato negli Appunti: [SLURL] -Inseriscilo in una pagina web per dare ad altri un accesso facile a questa ubicazione, o provala incollandola nella barra indirizzo di un browser web. +Inseriscilo in una pagina web per dare ad altri un accesso facile a questa ubicazione, o provala incollandola nella barra degli indirizzi di un browser web. <form name="form"> <ignore name="ignore" text="Lo SLurl è stato copiato negli Appunti"/> </form> @@ -1866,18 +1887,18 @@ Inseriscilo in una pagina web per dare ad altri un accesso facile a questa ubica <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="Cannot_Purchase_an_Attachment"> - Non puoi comprare un oggetto mentre è indossato. + Non puoi comprare un oggetto mentre è unito. </notification> <notification label="Informazioni sulle richieste per il permesso di addebito" name="DebitPermissionDetails"> Accettare questa richiesta da allo script il permesso continuativo di prendere Linden dollar (L$) dal tuo account. Per revocare questo permesso, il proprietario dell'oggetto deve cancellare l'oggetto oppure reimpostare gli script nell'oggetto. <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="AutoWearNewClothing"> - Vuoi indossare automaticamente gli oggetti che stai per creare? - <usetemplate ignoretext="Indossa gli abiti che creo mentre modifico il Mio Aspetto" name="okcancelignore" notext="No" yestext="Si"/> + Vuoi indossare automaticamente gli indumenti che stai per creare? + <usetemplate ignoretext="Indossare gli abiti che creo mentre modifico il mio aspetto" name="okcancelignore" notext="No" yestext="Si"/> </notification> <notification name="NotAgeVerified"> - Devi avere l'Età Verificata per visitare quest'area. Vuoi andare sul sito [SECOND_LIFE] per verificare la tua età? + Per entrare in questa zona, devi avere eseguito la verifica dell'età. Vuoi andare sul sito di [SECOND_LIFE] per verificare la tua età? [_URL] <url name="url" option="0"> @@ -1886,13 +1907,13 @@ Inseriscilo in una pagina web per dare ad altri un accesso facile a questa ubica <usetemplate ignoretext="Non ho verificato la mia età" name="okcancelignore" notext="No" yestext="Si"/> </notification> <notification name="Cannot enter parcel: no payment info on file"> - Devi avere le Informazioni di Pagamento registrate per poter visitare quest'area. Vuoi andare sul sito di [SECOND_LIFE] ed impostarle? + Per poter visitare questa zona devi avere devi aver fornito informazioni di pagamento a Linden Lab. Vuoi andare sul sito di [SECOND_LIFE] ed impostarle? [_URL] <url name="url" option="0"> https://secondlife.com/account/index.php?lang=it </url> - <usetemplate ignoretext="Manca la registrazione delle Informazioni di Pagamento" name="okcancelignore" notext="No" yestext="Si"/> + <usetemplate ignoretext="Manca la registrazione delle informazioni di pagamento" name="okcancelignore" notext="No" yestext="Si"/> </notification> <notification name="MissingString"> La stringa [STRING_NAME] non è presente in strings.xml @@ -1922,7 +1943,7 @@ Inseriscilo in una pagina web per dare ad altri un accesso facile a questa ubica [FIRST] [LAST] è Offline </notification> <notification name="AddSelfFriend"> - Anche se sei molto piacevole, non puoi aggiungerti come amicizia. + Anche se sei molto simpatico, non puoi aggiungere te stesso all'elenco degli amici. </notification> <notification name="UploadingAuctionSnapshot"> Sto importando le fotografie per l'uso inworld e per il web... @@ -1941,11 +1962,10 @@ Inseriscilo in una pagina web per dare ad altri un accesso facile a questa ubica Terrain.raw caricato </notification> <notification name="GestureMissing"> - Manca la Gesture [NAME] dal database. + Manca la gesture [NAME] dal database. </notification> <notification name="UnableToLoadGesture"> Impossibile caricare la gesture [NAME]. -Riprova. </notification> <notification name="LandmarkMissing"> Landmark non trovato nel database. @@ -1954,14 +1974,14 @@ Riprova. Impossibile caricare il Landmark di riferimento. Riprova. </notification> <notification name="CapsKeyOn"> - Hai il Blocco delle Maiuscole attivato. -Questo potrebbe influenzare la tua password. + Hai il blocco delle maiuscole attivato. +Questo potrebbe incidere sulla tua password. </notification> <notification name="NotecardMissing"> Notecard non trovata nel database. </notification> <notification name="NotecardNoPermissions"> - Non hai il permesso di vedere questa notecard. + Non hai il permesso di vedere questo biglietto. </notification> <notification name="RezItemNoPermissions"> Permessi insufficienti per creare un oggetto. @@ -1999,7 +2019,7 @@ Riprova. Riprova. </notification> <notification name="CannotBuyObjectsFromDifferentOwners"> - Puoi comprare oggetti solo da un proprietario per volta. + Puoi acquistare oggetti soltanto da un proprietario per volta. Seleziona solo un oggetto. </notification> <notification name="ObjectNotForSale"> @@ -2012,10 +2032,10 @@ Seleziona solo un oggetto. Esci dalla modalità divina, livello [LEVEL] </notification> <notification name="CopyFailed"> - Non hai i permessi per copiare. + Non hai l'autorizzazione a copiare. </notification> <notification name="InventoryAccepted"> - [NAME] ha ricevuto la tua offerta di Inventory. + [NAME] ha ricevuto la tua offerta di inventario. </notification> <notification name="InventoryDeclined"> [NAME] non ha accettato la tua offerta dall'inventario. @@ -2030,14 +2050,14 @@ Seleziona solo un oggetto. Il tuo biglietto da visita non è stato accettato. </notification> <notification name="TeleportToLandmark"> - Puoi teleportarti alle ubicazioni come '[NAME]' aprendo il pannello Luoghi sul lato destro dello schermo, e quindi selezionare la linguetta Landmarks. -Clicca su un landmark per selezionarlo e quindi clicca 'Teleport' sul fondo del pannello. -(Puoi anche fare doppio-click sul landmark oppure cliccarlo con il tasto destro e scegliere 'Teleport'.) + Puoi teleportarti alle ubicazioni come '[NAME]' aprendo il pannello Luoghi sul lato destro dello schermo, quindi selezionare la scheda Punti di riferimento. +Clicca su un punto di riferimento per selezionarlo, quindi clicca su Teleport sul lato inferiore del pannello. +(Puoi anche fare doppio clic sul punto di riferimento oppure cliccare su di esso con il tasto destro del mouse e scegliere Teleport.) </notification> <notification name="TeleportToPerson"> - Puoi contattare residenti come '[NAME]' aprendo il pannello Persone sul lato destro dello schermo. -Seleziona il residente dalla lista, e clica 'IM' in fondo al pannello. -(Puoi anche fare doppio click sul loro nome nella lista, oppure cliccare con il tasto destro e scegliere 'IM'). + Puoi contattare il residente '[NAME]' aprendo il pannello Persone nel lato destro del tuo schermo. +Seleziona il residente dall'elenco, clicca su 'IM' in basso nel pannello. +(Puoi anche fare doppio clic sul nome nell'elenco oppure fare clic con il pulsante destro del mouse e selezionare 'IM'). </notification> <notification name="CantSelectLandFromMultipleRegions"> Non è possibile selezionare il terreno attraverso i confini del server. @@ -2087,19 +2107,19 @@ Prova a selezionare una parte di terreno più piccola. [NAMES] </notification> <notification name="NoQuickTime"> - Il Software QuickTime di Apple non sembra installato sul tuo computer. -Se vuoi vedere contenuto multimediale sugli appezzamenti che lo supportano devi andare su [http://www.apple.com/quicktime QuickTime site] e installare il Player QuickTime. + Il software QuickTime di Apple sembra non essere installato sul tuo computer. +Se vuoi vedere contenuto multimediale in streaming sui lotti che lo supportano, vai alla pagina [http://www.apple.com/quicktime QuickTime] e installa il Player QuickTime. </notification> <notification name="NoPlugin"> - Nessun Media Plugin è stato trovato per gestire "[MIME_TYPE]" il tipo mime. Il Media di questo tipo non è disponibile. + Non è stato trovato alcun plugin multimediale per gestire il tipo mime [MIME_TYPE]. Il media di questo tipo non è disponibile. </notification> <notification name="MediaPluginFailed"> - Questo Media Plugin non funziona: + Questo plugin multimediale non funziona: [PLUGIN] -Per favore re-installa il plugin o contatta il venditore se continui ad avere questi problemi. +Reinstalla il plugin o contatta il venditore se continui ad avere questi problemi. <form name="form"> - <ignore name="ignore" text="Mancato funzionamento del Media Plugin"/> + <ignore name="ignore" text="Mancato funzionamento del plugin multimediale"/> </form> </notification> <notification name="OwnedObjectsReturned"> @@ -2109,7 +2129,7 @@ Per favore re-installa il plugin o contatta il venditore se continui ad avere qu Gli oggetti selezionati sul terreno che è di proprietà di [FIRST] [LAST] sono stati restituiti nel suo inventario. </notification> <notification name="OtherObjectsReturned2"> - Gli oggetti selezionati sul terreno di proprietà del residente '[NAME]' sono stati restituiti al loro proprietario. + Sono stati restituiti al proprietario gli oggetti selezionati sul lotto nella terra di proprietà del residente '[NAME]'. </notification> <notification name="GroupObjectsReturned"> Gli oggetti selezionati sul terreno e condivisi con il gruppo [GROUPNAME] sono stati restituiti nell'inventario dei propietari. @@ -2121,24 +2141,24 @@ Gli oggetti non trasferibili che erano stati ceduti al gruppo sono stati cancell </notification> <notification name="ServerObjectMessage"> Messaggio da [NAME]: -[MSG] +<nolink>[MSG]</nolink> </notification> <notification name="NotSafe"> - Questo terreno è abilitato ai Danni da combattimento. -Qui potresti ricevere ferite. Se dovessi morire verrai teleportato a casa tua. + Su questo terreno sono abilitati i danni. +Qui potresti essere ferito. Se dovessi morire verrai teleportato a casa tua. </notification> <notification name="NoFly"> - Quest'are ha il volo disabilitato. + In questa zona è proibito il volo. Qui non puoi volare. </notification> <notification name="PushRestricted"> - Quest'area non consente le spinte. Non puoi spingere gli altri a meno che tu non sia il proprietario del terreno. + Questa zona non consente le spinte. Non puoi spingere gli altri a meno che tu non sia il proprietario del terreno. </notification> <notification name="NoVoice"> - Quest'area ha la chat voice disabilitata. Non puoi sentire nessuno parlare. + Questa zona ha la chat vocale disattivata. Non puoi sentire nessuno parlare. </notification> <notification name="NoBuild"> - Quest'area ha il building disabilitato. Qui non puoi costruire o rezzare oggetti. + In questa zona è proibita la costruzione. Qui non puoi costruire né rezzare oggetti. </notification> <notification name="ScriptsStopped"> Un amministratore ha temporaneamente disabilitato gli script in questa regione. @@ -2149,10 +2169,10 @@ Qui non puoi volare. <notification name="NoOutsideScripts"> Questo terreno non consente script esterni. -Qui funzinano solo gli script del proprietario del terreno. +Qui funzionano soltanto gli script del proprietario del terreno. </notification> <notification name="ClaimPublicLand"> - Puoi solo chiedere terreni pubblici nella regione in cui sei posizionato. + Puoi solo richiedere terreni pubblici nella regione in cui sei posizionato. </notification> <notification name="RegionTPAccessBlocked"> Non puoi entrare in quella regione a causa della tua categoria di accesso. Può essere necessario validare l'età e/o installare l'ultima versione del programma. @@ -2230,7 +2250,7 @@ Riprova tra qualche istante. Non è stato trovato nessun territorio valido. </notification> <notification name="ObjectGiveItem"> - L'oggetto [OBJECTFROMNAME] posseduto da [NAME_SLURL] ti ha dato [OBJECTTYPE]: + Un oggetto denominato [OBJECTFROMNAME] di proprietà di [NAME_SLURL] ti ha dato questo [OBJECTTYPE]: [ITEM_SLURL] <form name="form"> <button name="Keep" text="Prendi"/> @@ -2239,7 +2259,7 @@ Riprova tra qualche istante. </form> </notification> <notification name="ObjectGiveItemUnknownUser"> - Un oggetto di nome [OBJECTFROMNAME] posseduto da un residente sconosciuto ti ha dato [OBJECTTYPE]: + Un oggetto chiamato [OBJECTFROMNAME] di proprietà di (residente sconosciuto) ti ha dato questo [OBJECTTYPE]: [ITEM_SLURL] <form name="form"> <button name="Keep" text="Prendi"/> @@ -2248,12 +2268,12 @@ Riprova tra qualche istante. </form> </notification> <notification name="UserGiveItem"> - [NAME_SLURL] ti ha dato [OBJECTTYPE]: + [NAME_SLURL] ti ha dato questo [OBJECTTYPE]: [ITEM_SLURL] <form name="form"> - <button name="Keep" text="Prendi"/> <button name="Show" text="Mostra"/> <button name="Discard" text="Rifiuta"/> + <button name="Mute" text="Blocca"/> </form> </notification> <notification name="GodMessage"> @@ -2278,6 +2298,9 @@ Riprova tra qualche istante. <button name="Cancel" text="Cancella"/> </form> </notification> + <notification name="TeleportOfferSent"> + Offerta di Teleport inviata a [TO_NAME] + </notification> <notification name="GotoURL"> [MESSAGE] [URL] @@ -2315,22 +2338,27 @@ Riprova tra qualche istante. <notification name="FriendshipDeclined"> [NAME] ha rifiutato la tua offerta di amicizia. </notification> + <notification name="FriendshipAcceptedByMe"> + Offerta di amicizia accettata. + </notification> + <notification name="FriendshipDeclinedByMe"> + Offerta di amicizia rifiutata. + </notification> <notification name="OfferCallingCard"> - [FIRST] [LAST] ti ha offerto il suo biglietto da visita. -Questo aggiungerà un segnalibro nel tuo inventario. -in modo da poter rapidamente inviargli un IM al residente. + [FIRST] [LAST] ti offre il suo biglietto da visita. +Questo sarà aggiunto nel tuo inventario come segnalibro per consentirti di inviare rapidamente messaggi IM a questo residente. <form name="form"> <button name="Accept" text="Accetta"/> <button name="Decline" text="Rifiuta"/> </form> </notification> <notification name="RegionRestartMinutes"> - Questa regione farà il restart fra [MINUTES] minuti. -Se rimani qui verrai disconnesso. + Questa regione verrà riavviata fra [MINUTES] minuti. +Se rimani qui verrai scollegato da Second Life. </notification> <notification name="RegionRestartSeconds"> - Questa regione farà il restart fra [SECONDS] secondi. -Se rimani qui verrai disconnesso. + Questa regione verrà riavviata fra [SECONDS] secondi. +Se rimani qui verrai scollegato da Second Life. </notification> <notification name="LoadWebPage"> Caricare pagina web [URL]? @@ -2367,9 +2395,9 @@ Va bene? Un oggetto di nome '[OBJECTNAME]', posseduto da '[NAME]' vorrebbe: [QUESTIONS] -Se non ti fidi di questo oggetto e del suo creatore dovresti declinare la richiesta. +Se non ti fidi di questo oggetto e del suo ideatore, dovresti rifiutare la richiesta. -Consenti questa richiesta? +Concedi questa richiesta? <form name="form"> <button name="Grant" text="Accetta"/> <button name="Deny" text="Nega"/> @@ -2390,44 +2418,12 @@ Consenti questa richiesta? <button name="Ignore" text="Ignora"/> </form> </notification> - <notification name="ScriptToast"> - [FIRST] [LAST]'s '[TITLE]' richiede il contributo dell'utente. - <form name="form"> - <button name="Open" text="Apri il Dialog"/> - <button name="Ignore" text="Ignora"/> - <button name="Block" text="Blocca"/> - </form> - </notification> - <notification name="FirstBalanceIncrease"> - Hai appena ricevuto [AMOUNT]L$. -Il tuo saldo in L$ è mostrato in alto a destra. - </notification> - <notification name="FirstBalanceDecrease"> - Hai appena pagato [AMOUNT]L$. -Il tuo saldo in L$ è mostrato in alto a destra. - </notification> <notification name="BuyLindenDollarSuccess"> - Grazie per il pagamento! + Grazie per aver inviato il pagamento. -Il tuo saldo in L$ sarà aggiornato al termine dell'elaborazione. Se l'elaborazione dovesse impiegare più di 20 minuti, la transazione verrà annullata. In quel caso l'ammontare dell'acquisto verrà rimborsato nel tuo saldo in US$. +Il tuo saldo in L$ sarà aggiornato al termine dell'elaborazione. Se l'elaborazione dovesse impiegare più di 20 minuti, la transazione verrà annullata. In quel caso l'ammontare dell'acquisto verrà accreditato sul tuo saldo in US$. -Lo stato del tuo pagamento potrà essere controllato nella pagina della Storia delle tue Transazioni su [http://secondlife.com/account/ Pannello di Controllo] - </notification> - <notification name="FirstSit"> - Sei seduto. -Usa le frecce (oppure AWSD) per guardarti intorno. -Clicca il bottone 'Alzati' per alzarti. - </notification> - <notification name="FirstMap"> - Clicca e trascina la mappa per guardare attorno. -Fai doppio click per teleportarti. -Usa i controlli sulla destra per trovare cose e visualizzare sfondi differenti. - </notification> - <notification name="FirstBuild"> - Hai aperto gli Strumenti di Build. Ogni oggetto attorno a te è stato costruito con questi strumenti. - </notification> - <notification name="FirstTeleport"> - Puoi teleportarti solo in certe aree di questa regione. La freccia indica la tua destinazione. Clicca sulla freccia per farla sparire. +Potrai controllare lo stato del pagamento nella pagina della cronologia delle transazioni nel tuo [http://secondlife.com/account/ Dashboard] </notification> <notification name="FirstOverrideKeys"> I tuoi movimenti della tastiera vengono ora gestiti da un oggetto. @@ -2435,42 +2431,17 @@ Prova i tasti freccia o AWSD per vedere quello che fanno. Alcuni oggetti (come pistole) richiedono di andare in mouselook per il loro utilizzo. Premi 'M' per farlo. </notification> - <notification name="FirstAppearance"> - Stai modificando il tuo aspetto. -Usa le frecce per guardarti attorno. -Quando hai finito premi 'Salva Tutto'. - </notification> - <notification name="FirstInventory"> - Questo è il tuo Inventory, che contiene gli elementi che possiedi. - -* Per indossare qualcosa, trascinala su di te. -* Per rezzare qualcosa inworld, trascinala sul suolo. -* Per leggere una notecard, fai doppio click. - </notification> <notification name="FirstSandbox"> - Questa è una Sandbox, serve per aiutare i Residenti ad imparare a costruire. - -Gli oggetti che costruisci qui saranno cancellati dopo che te ne sei andato, perciò non dimenticare di cliccare sulle tue creazioni col tasto destro e scegliere 'Prendi' per trasferirle nel tuo Inventory. - </notification> - <notification name="FirstFlexible"> - Questo oggetto è flessibile. Gli oggetti Flexy devono essere fantasma e non fisici. - </notification> - <notification name="FirstDebugMenus"> - Hai abilitato il menu Avanzato. + Questa è una Sandbox, serve ai residenti per imparare a costruire. -Per abilitarlo/disabilitarlo, - Windows: Ctrl+Alt+D - Mac: ⌥⌘D - </notification> - <notification name="FirstSculptedPrim"> - Stai modificando un prim Sculpted. Gli oggetti Sculpted hanno bisogno di una texture speciale per definire la loro forma. +Gli oggetti che costruisci qui verranno eliminati dopo che te ne sei andato, perciò non dimenticare di cliccare sulle tue creazioni col tasto destro del mouse e scegliere Prendi per trasferirle nel tuo Inventario. </notification> <notification name="MaxListSelectMessage"> È possibile selezionare solo fino a [MAX_SELECT] oggetti da questa lista. </notification> <notification name="VoiceInviteP2P"> - [NAME] ti sta invitando ad una chiamata in Chat Voice. -Clicca Accetta per unirti alla chiamata oppure Declina per declinare l'invito. Clicca Blocca per bloccare questo chiamante. + [NAME] ti sta invitando ad una chiamata in chat vocale. +Clicca su Accetta per unirti alla chiamata oppure su Declina to declinare l'invito. Clicca su Blocca per bloccare questo chiamante. <form name="form"> <button name="Accept" text="Accetta"/> <button name="Decline" text="Rifiuta"/> @@ -2478,17 +2449,17 @@ Clicca Accetta per unirti alla chiamata oppure Declina per declinare l'invi </form> </notification> <notification name="AutoUnmuteByIM"> - Hai appena inviato un IM a [FIRST] [LAST], che è stato automaticamente sbloccato. + [FIRST] [LAST] ha ricevuto un IM ed è stato automaticamente sbloccato. </notification> <notification name="AutoUnmuteByMoney"> - Hai appena inviato del denaro a [FIRST] [LAST], che è stato automaticamente sbloccato. + [FIRST] [LAST] ha ricevuto del denaro e pertanto è stato automaticamente sbloccato. </notification> <notification name="AutoUnmuteByInventory"> - Hai appena offerto un elemento dell'Inventory a [FIRST] [LAST], che è stato automaticamente sbloccato. + A [FIRST] [LAST] è stato offerto un elemento dell'Inventario e pertanto è stato automaticamente sbloccato. </notification> <notification name="VoiceInviteGroup"> - [NAME] si è aggiunto alla chiamata in Chat Voice con il gruppo [GROUP]. -Clicca Accetta per unirti alla chiamata oppure Declina per declinare l'invito. Clicca Blocca per bloccare questo chiamante. + [NAME] si è aggiunto alla chiamata in chat vocale con il gruppo [GROUP]. +Clicca su Accetta per unirti alla chiamata oppure su Declina to declinare l'invito. Clicca su Blocca per bloccare questo chiamante. <form name="form"> <button name="Accept" text="Accetta"/> <button name="Decline" text="Rifiuta"/> @@ -2496,8 +2467,8 @@ Clicca Accetta per unirti alla chiamata oppure Declina per declinare l'in </form> </notification> <notification name="VoiceInviteAdHoc"> - [NAME] si è aggiunto alla chiamata in Chat Voice con una conferenza. -Clicca Accetta per unirti alla chiamata oppure Declina to declinare l'invito. Clicca Blocca per bloccare questo chiamante. + [NAME] si è aggiunto alla chiamata in chat vocale con una conferenza. +Clicca su Accetta per unirti alla chiamata oppure su Declina to declinare l'invito. Clicca su Blocca per bloccare questo chiamante. <form name="form"> <button name="Accept" text="Accetta"/> <button name="Decline" text="Rifiuta"/> @@ -2506,7 +2477,7 @@ Clicca Accetta per unirti alla chiamata oppure Declina to declinare l'invit </notification> <notification name="InviteAdHoc"> [NAME] ti sta invitando ad una conferenza in chat. -Clicca Accetta per unirti alla chat oppure Declina per declinare l'invito. Clicca Blocca per bloccare questo chiamante. +Clicca su Accetta per unirti alla chat oppure su Declina per declinare l'invito. Clicca su Blocca per bloccare questo chiamante. <form name="form"> <button name="Accept" text="Accetta"/> <button name="Decline" text="Rifiuta"/> @@ -2520,25 +2491,25 @@ Clicca Accetta per unirti alla chat oppure Declina per declinare l'invito. Siamo spiacenti. Questa area ha raggiunto la capacità massima per le chiamate voice. Si prega di provare ad usare il voice in un'altra area. </notification> <notification name="VoiceChannelDisconnected"> - Sei stato disconnesso da [VOICE_CHANNEL_NAME]. Verrai ora riconnesso alla Chat Voice Locale. + Sei stato scollegato da [VOICE_CHANNEL_NAME]. Verrai ora ricollegato alla chat vocale nei dintorni. </notification> <notification name="VoiceChannelDisconnectedP2P"> - [VOICE_CHANNEL_NAME] ha terminato la chiamata. Verrai ora riconnesso alla Chat Voice Locale. + [VOICE_CHANNEL_NAME] ha chiuso la chiamata. Verrai ora ricollegato alla chat vocale nei dintorni. </notification> <notification name="P2PCallDeclined"> - [VOICE_CHANNEL_NAME] ha declinato la tua chiamata. Verrai ora riconnesso alla Chat Voice Locale. + [VOICE_CHANNEL_NAME] ha declinato la tua chiamata. Verrai ora ricollegato alla chat vocale nei dintorni. </notification> <notification name="P2PCallNoAnswer"> - [VOICE_CHANNEL_NAME] non è disponibile per la tua chiamata. Verrai ora riconnesso alla Chat Voice Locale. + [VOICE_CHANNEL_NAME] non è disponibile per la tua chiamata. Verrai ora ricollegato alla chat vocale nei dintorni. </notification> <notification name="VoiceChannelJoinFailed"> - Connessione a [VOICE_CHANNEL_NAME] fallita, riprova più tardi. Verrai ora riconnesso alla Chat Voice Locale. + Collegamento a [VOICE_CHANNEL_NAME] non riuscito, riprova più tardi. Verrai ora ricollegato alla chat vocale nei dintorni. </notification> <notification name="VoiceLoginRetry"> Stiamo creando una canale voice per te. Questo può richiedere fino a un minuto. </notification> <notification name="Cannot enter parcel: not a group member"> - Soltanto i membri di uno specifico gruppo possono visitare quest'area. + Soltanto i membri di un determinato gruppo possono visitare questa zona. </notification> <notification name="Cannot enter parcel: banned"> Non puoi entrare nel terreno, sei stato bloccato. @@ -2553,17 +2524,17 @@ Clicca Accetta per unirti alla chat oppure Declina per declinare l'invito. Si è verificato un errore durante il tentativo di collegarti a una voice chat con [VOICE_CHANNEL_NAME]. Riprova più tardi. </notification> <notification name="ServerVersionChanged"> - Sei appena entrato in una regione che usa una versione differente del server, questo potrebbe influenzare le prestazioni. [[URL] Guarda le Release Notes.] + Sei appena entrato in una regione che usa una versione differente del server: ciò potrebbe incidere sule prestazioni. [[URL] Visualizza le note sulla versione.] </notification> <notification name="UnsupportedCommandSLURL"> - Lo SLurl che hai cliccato non è attivo. + Lo SLurl su cui hai cliccato non è valido. </notification> <notification name="BlockedSLURL"> - Uno SLurl è stato ricevuto da un browser sconosciuto e per la tua sicurezza è stato bloccato. + Uno SLurl è stato ricevuto da un browser sconosciuto o non sicuro e, per sicurezza, è stato bloccato. </notification> <notification name="ThrottledSLURL"> - Multipli SLurls sono stati ricevuti da un browser sconosciuto in un breve periodo. -Per la tua sicurezza verranno bloccati per alcuni secondi. + Sono stati ricevuti più SLurl da un browser sconosciuto o non sicuro in un breve periodo di tempo. +Per sicurezza, verranno bloccati per alcuni secondi. </notification> <notification name="IMToast"> [MESSAGE] @@ -2571,19 +2542,23 @@ Per la tua sicurezza verranno bloccati per alcuni secondi. <button name="respondbutton" text="Rispondi"/> </form> </notification> + <notification name="ConfirmCloseAll"> + Sicuro di voler chiudere tutti gli IM? + <usetemplate ignoretext="Conferma prima della chiusura di tutti gli IM" name="okcancelignore" notext="Annulla" yestext="OK"/> + </notification> <notification name="AttachmentSaved"> - L'Allegato (Attachment) è stato salvato. + L'elemento da collegare è stato salvato. </notification> <notification name="UnableToFindHelpTopic"> - Impossibilitato a trovare il tema aiuto per questo elemento (nozione)???!!!!. + Impossibile trovare l'argomento nell'aiuto per questo elemento. </notification> <notification name="ObjectMediaFailure"> - Errore del Server: aggiornamento del Media o mancato funzionamento. + Errore del server: mancato aggiornamento o ottenimento del media. '[ERROR]' <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="TextChatIsMutedByModerator"> - Il tuo testo nella chat è stato interrotto dal moderatore. + La tua chat di testo è stata interrotta dal moderatore. <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="VoiceIsMutedByModerator"> @@ -2592,19 +2567,19 @@ Per la tua sicurezza verranno bloccati per alcuni secondi. </notification> <notification name="ConfirmClearTeleportHistory"> Sei sicuro di volere cancellare la cronologia dei tuoi teleport? - <usetemplate name="okcancelbuttons" notext="Cancella" yestext="OK"/> + <usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/> </notification> <notification name="BottomTrayButtonCanNotBeShown"> - Il bottone selezionato non può essere mostrato in questo momento. -Il bottone verrà mostrato quando ci sarà abbastanza spazio. + Il pulsante selezionato non può essere visualizzato in questo momento. +Il pulsante verrà visualizzato quando lo spazio sarà sufficiente. </notification> <global name="UnsupportedCPU"> - La velocità della tua CPU non soddisfa i requisiti minimi. </global> <global name="UnsupportedGLRequirements"> - Non sembra che tu abbia i requisiti hardware adeguati per [APP_NAME]. [APP_NAME] richiede una scheda grafica OpenGL con supporto multitexture. Se tu ce l'hai, dovresti accertarti di avere i driver, i service pack e le patch più recenti della scheda grafica e del tuo sistema operativo. + Non sembra che tu abbia i requisiti hardware adeguati per [APP_NAME]. [APP_NAME] richiede una scheda grafica OpenGL con supporto multitexture. Se ne hai una in dotazione, accertati di avere i driver, i service pack e i patch più recenti per la scheda grafica e per il sistema operativo. -Se continui ad avere problemi, visita [SUPPORT_SITE]. +Se continui ad avere problemi, visita la pagina [SUPPORT_SITE]. </global> <global name="UnsupportedCPUAmount"> 796 @@ -2619,7 +2594,7 @@ Se continui ad avere problemi, visita [SUPPORT_SITE]. - La memoria del tuo sistema non soddisfa i requisiti minimi. </global> <global name="You can only set your 'Home Location' on your land or at a mainland Infohub."> - Se possiedi una parte di terra, puoi creare qui la tua ubicazione di casa. -Altrimenti, puoi guardare sulla Mappa e trovare luoghi segnalati come "Infohub". + Se sei proprietario di un appezzamento di terreno, puoi definirlo come la tua posizione iniziale. +In alternativa, puoi guardare sulla mappa e trovare luoghi segnalati come "Infohub". </global> </notifications> diff --git a/indra/newview/skins/default/xui/it/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/it/panel_adhoc_control_panel.xml index b55a786719..be001d09f8 100644 --- a/indra/newview/skins/default/xui/it/panel_adhoc_control_panel.xml +++ b/indra/newview/skins/default/xui/it/panel_adhoc_control_panel.xml @@ -1,8 +1,14 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_im_control_panel"> - <panel name="panel_call_buttons"> - <button label="Chiama" name="call_btn"/> - <button label="Abbandona chiamata" name="end_call_btn"/> - <button label="Regolazione voce" name="voice_ctrls_btn"/> - </panel> + <layout_stack name="vertical_stack"> + <layout_panel name="call_btn_panel"> + <button label="Chiama" name="call_btn"/> + </layout_panel> + <layout_panel name="end_call_btn_panel"> + <button label="Abbandona chiamata" name="end_call_btn"/> + </layout_panel> + <layout_panel name="voice_ctrls_btn_panel"> + <button label="Regolazione voce" name="voice_ctrls_btn"/> + </layout_panel> + </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/it/panel_avatar_list_item.xml index 40f805774e..4c7f298590 100644 --- a/indra/newview/skins/default/xui/it/panel_avatar_list_item.xml +++ b/indra/newview/skins/default/xui/it/panel_avatar_list_item.xml @@ -1,25 +1,26 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="avatar_list_item"> <string name="FormatSeconds"> - [COUNT]s + [COUNT] s </string> <string name="FormatMinutes"> - [COUNT]m + [COUNT] m </string> <string name="FormatHours"> - [COUNT]h + [COUNT] h </string> <string name="FormatDays"> - [COUNT]d + [COUNT] g </string> <string name="FormatWeeks"> - [COUNT]w + [COUNT] sett </string> <string name="FormatMonths"> - [COUNT]mon + [COUNT] mes </string> <string name="FormatYears"> - [COUNT]y + [COUNT] a </string> <text name="avatar_name" value="Sconosciuto"/> + <button name="profile_btn" tool_tip="Vedi profilo"/> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/it/panel_block_list_sidetray.xml index c79d73b339..610f561a65 100644 --- a/indra/newview/skins/default/xui/it/panel_block_list_sidetray.xml +++ b/indra/newview/skins/default/xui/it/panel_block_list_sidetray.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="block_list_panel"> <text name="title_text"> - Lista bloccata + Blocca lista </text> - <scroll_list name="blocked" tool_tip="Lista dei residenti bloccati"/> + <scroll_list name="blocked" tool_tip="Lista degli attuali residenti bloccati"/> <button label="Blocca il residente..." label_selected="Blocca il residente..." name="Block resident..." tool_tip="Scegli un residente da bloccare"/> <button label="Blocca l'oggetto per nome..." label_selected="Blocca l'oggetto per nome..." name="Block object by name..."/> - <button label="Sblocca" label_selected="Sblocca" name="Unblock" tool_tip="Rimuovi dalla lista il residente o l'oggetto bloccato"/> + <button label="Sblocca" label_selected="Sblocca" name="Unblock" tool_tip="Rimuovi un residente o un oggetto dalla lista bloccati"/> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_bottomtray.xml b/indra/newview/skins/default/xui/it/panel_bottomtray.xml index f2aab63dce..c0218fad5e 100644 --- a/indra/newview/skins/default/xui/it/panel_bottomtray.xml +++ b/indra/newview/skins/default/xui/it/panel_bottomtray.xml @@ -1,23 +1,38 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="bottom_tray"> <string name="SpeakBtnToolTip"> - Microfono on/off + Accende o spegne il microfono </string> <string name="VoiceControlBtnToolTip"> - Mostra/nascondi il pannello voice control + Mostra o nasconde il pannello di regolazione voce </string> <layout_stack name="toolbar_stack"> + <layout_panel name="speak_panel"> + <talk_button name="talk"> + <speak_button label="Parla" label_selected="Parla" name="speak_btn"/> + </talk_button> + </layout_panel> <layout_panel name="gesture_panel"> - <gesture_combo_box label="Gesture" name="Gesture" tool_tip="Mostra/nascondi gestures"/> + <gesture_combo_list label="Gesture" name="Gesture" tool_tip="Mostra o nasconde le gesture"/> </layout_panel> <layout_panel name="movement_panel"> - <button label="Sposta" name="movement_btn" tool_tip="Mostra/nascondi i controlli del movimento"/> + <button label="Sposta" name="movement_btn" tool_tip="Mostra o nasconde i comandi del movimento"/> </layout_panel> <layout_panel name="cam_panel"> - <button label="Visualizza" name="camera_btn" tool_tip="Mostra/nascondi i controlli della camera"/> + <button label="Visuale" name="camera_btn" tool_tip="Mostra o nasconde le regolazioni della visuale"/> </layout_panel> <layout_panel name="snapshot_panel"> <button label="" name="snapshots" tool_tip="Scatta una foto"/> </layout_panel> + <layout_panel name="im_well_panel"> + <chiclet_im_well name="im_well"> + <button name="Unread IM messages" tool_tip="Conversazioni"/> + </chiclet_im_well> + </layout_panel> + <layout_panel name="notification_well_panel"> + <chiclet_notification name="notification_well"> + <button name="Unread" tool_tip="Notifiche"/> + </chiclet_notification> + </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_bottomtray_lite.xml b/indra/newview/skins/default/xui/it/panel_bottomtray_lite.xml new file mode 100644 index 0000000000..ff576c7dd2 --- /dev/null +++ b/indra/newview/skins/default/xui/it/panel_bottomtray_lite.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="bottom_tray_lite"> + <layout_stack name="toolbar_stack_lite"> + <layout_panel name="gesture_panel"> + <gesture_combo_list label="Gesture" name="Gesture" tool_tip="Mostra/nasconde gesture"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/it/panel_classified_info.xml b/indra/newview/skins/default/xui/it/panel_classified_info.xml index 2ba127d34a..3d363d9c75 100644 --- a/indra/newview/skins/default/xui/it/panel_classified_info.xml +++ b/indra/newview/skins/default/xui/it/panel_classified_info.xml @@ -1,17 +1,48 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_classified_info"> - <text name="title" value="Info sugli Annunci"/> + <panel.string name="l$_price"> + L$ [PRICE] + </panel.string> + <panel.string name="click_through_text_fmt"> + [TELEPORT] teleport, [MAP] mappa, [PROFILE] profilo + </panel.string> + <panel.string name="date_fmt"> + [mthnum,datetime,slt]/[day,datetime,slt]/[year,datetime,slt] + </panel.string> + <panel.string name="auto_renew_on"> + Abilitato + </panel.string> + <panel.string name="auto_renew_off"> + Disattivato + </panel.string> + <text name="title" value="Informazioni inserzione"/> <scroll_container name="profile_scroll"> <panel name="scroll_content_panel"> - <text name="classified_name" value="[nome]"/> - <text name="classified_location" value="[caricando...]"/> - <text name="content_type" value="[tipo di contenuto]"/> - <text name="category" value="[categoria]"/> - <check_box label="Auto rinnovo settimanale" name="auto_renew"/> - <text name="price_for_listing" tool_tip="Prezzo di listino."> - L$[PREZZO] - </text> - <text name="classified_desc" value="[descrizione]"/> + <text_editor name="classified_name" value="[name]"/> + <text name="classified_location_label" value="Luogo:"/> + <text_editor name="classified_location" value="[loading...]"/> + <text name="content_type_label" value="Tipo di contenuto:"/> + <text_editor name="content_type" value="[content type]"/> + <text name="category_label" value="Categoria:"/> + <text_editor name="category" value="[category]"/> + <text name="creation_date_label" value="Data di creazione:"/> + <text_editor name="creation_date" tool_tip="Data di creazione" value="[date]"/> + <text name="price_for_listing_label" value="Prezzo per inserzione:"/> + <text_editor name="price_for_listing" tool_tip="Prezzo per inserzione:" value="[price]"/> + <layout_stack name="descr_stack"> + <layout_panel name="clickthrough_layout_panel"> + <text name="click_through_label" value="Clic:"/> + <text_editor name="click_through_text" tool_tip="Dati di click through" value="[clicks]"/> + </layout_panel> + <layout_panel name="price_layout_panel"> + <text name="auto_renew_label" value="Rinnovo automatico:"/> + <text name="auto_renew" value="Abilitato"/> + </layout_panel> + <layout_panel name="descr_layout_panel"> + <text name="classified_desc_label" value="Descrizione:"/> + <text_editor name="classified_desc" value="[descrizione]"/> + </layout_panel> + </layout_stack> </panel> </scroll_container> <panel name="buttons"> diff --git a/indra/newview/skins/default/xui/it/panel_edit_alpha.xml b/indra/newview/skins/default/xui/it/panel_edit_alpha.xml index 652bef0430..286ee626cf 100644 --- a/indra/newview/skins/default/xui/it/panel_edit_alpha.xml +++ b/indra/newview/skins/default/xui/it/panel_edit_alpha.xml @@ -2,7 +2,7 @@ <panel name="edit_alpha_panel"> <panel name="avatar_alpha_color_panel"> <texture_picker label="Alpha inferiore" name="Lower Alpha" tool_tip="Clicca per scegliere una fotografia"/> - <texture_picker label="Alpha superiore" name="Upper Alpha" tool_tip="Click to choose a picture"/> + <texture_picker label="Alpha superiore" name="Upper Alpha" tool_tip="Clicca per scegliere una fotografia"/> <texture_picker label="Alpha della testa" name="Head Alpha" tool_tip="Clicca per scegliere una fotografia"/> <texture_picker label="Alpha dell'occhio" name="Eye Alpha" tool_tip="Clicca per scegliere una fotografia"/> <texture_picker label="Alpha dei capelli" name="Hair Alpha" tool_tip="Clicca per scegliere una fotografia"/> diff --git a/indra/newview/skins/default/xui/it/panel_edit_classified.xml b/indra/newview/skins/default/xui/it/panel_edit_classified.xml index 81ef121dd8..bbe8ebbc32 100644 --- a/indra/newview/skins/default/xui/it/panel_edit_classified.xml +++ b/indra/newview/skins/default/xui/it/panel_edit_classified.xml @@ -1,14 +1,22 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Modifica gli Annunci" name="panel_edit_classified"> +<panel label="Modifica inserzione" name="panel_edit_classified"> <panel.string name="location_notice"> - (sarà aggiornato dopo il salvataggio) + (si aggiornerà dopo il salvataggio) </panel.string> + <string name="publish_label"> + Pubblica + </string> + <string name="save_label"> + Salva + </string> <text name="title"> - Modifica gli Annunci + Modifica inserzione </text> <scroll_container name="profile_scroll"> <panel name="scroll_content_panel"> - <icon label="" name="edit_icon" tool_tip="Clicca per selezionare un'immagine"/> + <panel name="snapshot_panel"> + <icon label="" name="edit_icon" tool_tip="Clicca per selezionare un'immagine"/> + </panel> <text name="Name:"> Titolo: </text> @@ -19,15 +27,22 @@ Luogo: </text> <text name="classified_location"> - caricando... + caricamento... </text> - <button label="Imposta sul luogo attuale" name="set_to_curr_location_btn"/> - <spinner label="L$" name="price_for_listing" tool_tip="Fissare il Prezzo." value="50"/> - <check_box label="Auto-rinnovo settimanale" name="auto_renew"/> + <button label="Imposta come luogo attuale" name="set_to_curr_location_btn"/> + <text name="category_label" value="Categoria:"/> + <text name="content_type_label" value="Tipo di contenuto:"/> + <icons_combo_box label="Contenuto generale" name="content_type"> + <icons_combo_box.item label="Contenuto moderato" name="mature_ci" value="Moderato"/> + <icons_combo_box.item label="Contenuto generale" name="pg_ci" value="Generale"/> + </icons_combo_box> + <text name="price_for_listing_label" value="Prezzo per inserzione:"/> + <spinner label="L$" name="price_for_listing" tool_tip="Prezzo per inserzione:" value="50"/> + <check_box label="Rinnovo automatico ogni settimana" name="auto_renew"/> </panel> </scroll_container> <panel label="bottom_panel" name="bottom_panel"> - <button label="Salva" name="save_changes_btn"/> - <button label="Cancella" name="cancel_btn"/> + <button label="[LABEL]" name="save_changes_btn"/> + <button label="Annulla" name="cancel_btn"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_edit_hair.xml b/indra/newview/skins/default/xui/it/panel_edit_hair.xml index 137a5cabeb..534ff457ff 100644 --- a/indra/newview/skins/default/xui/it/panel_edit_hair.xml +++ b/indra/newview/skins/default/xui/it/panel_edit_hair.xml @@ -7,6 +7,6 @@ <accordion_tab name="hair_color_tab" title="Colore"/> <accordion_tab name="hair_style_tab" title="Stile"/> <accordion_tab name="hair_eyebrows_tab" title="Sopracciglia"/> - <accordion_tab name="hair_facial_tab" title="Facciale"/> + <accordion_tab name="hair_facial_tab" title="Del viso"/> </accordion> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_edit_pick.xml b/indra/newview/skins/default/xui/it/panel_edit_pick.xml index c1a9ce7dd2..d2d97cfc71 100644 --- a/indra/newview/skins/default/xui/it/panel_edit_pick.xml +++ b/indra/newview/skins/default/xui/it/panel_edit_pick.xml @@ -1,5 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Modifica scelta" name="panel_edit_pick"> + <panel.string name="location_notice"> + (si aggiornerà dopo il salvataggio) + </panel.string> <text name="title"> Modifica scelta </text> @@ -22,7 +25,7 @@ </panel> </scroll_container> <panel label="bottom_panel" name="bottom_panel"> - <button label="Salva [WHAT]" name="save_changes_btn"/> + <button label="Salva luogo preferito" name="save_changes_btn"/> <button label="Annulla" name="cancel_btn"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_edit_profile.xml b/indra/newview/skins/default/xui/it/panel_edit_profile.xml index b9779c77b5..3ecf4bcaf2 100644 --- a/indra/newview/skins/default/xui/it/panel_edit_profile.xml +++ b/indra/newview/skins/default/xui/it/panel_edit_profile.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Modifica del profilo" name="edit_profile_panel"> +<panel label="Modifica profilo" name="edit_profile_panel"> <string name="CaptionTextAcctInfo"> [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION] </string> <string name="RegisterDateFormat"> - [REG_DATE] ([ETA']) + [REG_DATE] ([AGE]) </string> <string name="AcctTypeResident" value="Residente"/> <string name="AcctTypeTrial" value="Prova"/> @@ -26,23 +26,26 @@ <icon label="" name="2nd_life_edit_icon" tool_tip="Clicca per selezionare un'immagine"/> </panel> <panel name="first_life_image_panel"> - <text name="real_world_photo_title_text" value="Mondo Reale:"/> + <text name="real_world_photo_title_text" value="Mondo reale:"/> </panel> <icon label="" name="real_world_edit_icon" tool_tip="Clicca per selezionare un'immagine"/> <text name="title_homepage_text"> - Homepage: + Home page: </text> <check_box label="Mostrami nei risultati della ricerca" name="show_in_search_checkbox"/> - <text name="title_acc_status_text" value="Mio Account:"/> - <text name="my_account_link" value="[[URL] Vai al mio pannello personale]"/> - <text name="acc_status_text" value="Residente. No payment info on file."/> - <text name="title_partner_text" value="Mio Partner:"/> - <text name="partner_edit_link" value="[[URL] Modifica]"/> + <text name="title_acc_status_text" value="Il mio account:"/> + <text_editor name="acc_status_text" value="Residente. Nessuna informazione di pagamento disponibile."/> + <text name="my_account_link" value="[[URL] Go to My Dashboard]"/> + <text name="title_partner_text" value="Il mio partner:"/> + <panel name="partner_data_panel"> + <name_box initial_value="(recupero)" name="partner_text"/> + </panel> + <text name="partner_edit_link" value="[[URL] Edit]"/> </panel> </panel> </scroll_container> <panel name="profile_me_buttons_panel"> - <button label="Salva le modifiche" name="save_btn"/> - <button label="Cancella" name="cancel_btn"/> + <button label="Salva modifiche" name="save_btn"/> + <button label="Annulla" name="cancel_btn"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_edit_shape.xml b/indra/newview/skins/default/xui/it/panel_edit_shape.xml index f22b393ecd..cc0676b43c 100644 --- a/indra/newview/skins/default/xui/it/panel_edit_shape.xml +++ b/indra/newview/skins/default/xui/it/panel_edit_shape.xml @@ -5,8 +5,8 @@ Sesso: </text> <radio_group name="sex_radio"> - <radio_item label="Femminile" name="radio"/> - <radio_item label="Maschile" name="radio2"/> + <radio_item label="Femmina" name="radio"/> + <radio_item label="Maschio" name="radio2"/> </radio_group> </panel> <accordion name="wearable_accordion"> @@ -17,7 +17,7 @@ <accordion_tab name="shape_nose_tab" title="Naso"/> <accordion_tab name="shape_mouth_tab" title="Bocca"/> <accordion_tab name="shape_chin_tab" title="Mento"/> - <accordion_tab name="shape_torso_tab" title="Busto"/> + <accordion_tab name="shape_torso_tab" title="Torace"/> <accordion_tab name="shape_legs_tab" title="Gambe"/> </accordion> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_edit_shirt.xml b/indra/newview/skins/default/xui/it/panel_edit_shirt.xml index 5d902ae40b..631d609d60 100644 --- a/indra/newview/skins/default/xui/it/panel_edit_shirt.xml +++ b/indra/newview/skins/default/xui/it/panel_edit_shirt.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="edit_shirt_panel"> <panel name="avatar_shirt_color_panel"> - <texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere una foto"/> + <texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere una fotografia"/> <color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/> </panel> <accordion name="wearable_accordion"> diff --git a/indra/newview/skins/default/xui/it/panel_edit_skin.xml b/indra/newview/skins/default/xui/it/panel_edit_skin.xml index 2fa76d4afc..9e05599470 100644 --- a/indra/newview/skins/default/xui/it/panel_edit_skin.xml +++ b/indra/newview/skins/default/xui/it/panel_edit_skin.xml @@ -1,14 +1,14 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="edit_skin_panel"> <panel name="avatar_skin_color_panel"> - <texture_picker label="Tatuaggi Testa" name="Head Tattoos" tool_tip="Clicca per scegliere un'immagine"/> - <texture_picker label="Tatuaggi superiori" name="Upper Tattoos" tool_tip="Clicca per scegliere un'immagine"/> - <texture_picker label="Tatuaggi inferiori" name="Lower Tattoos" tool_tip="Clicca per scegliere un'immagine"/> + <texture_picker label="Tatuaggi testa" name="Head Tattoos" tool_tip="Clicca per scegliere una fotografia"/> + <texture_picker label="Tatuaggi superiori" name="Upper Tattoos" tool_tip="Clicca per scegliere una fotografia"/> + <texture_picker label="Tatuaggi inferiori" name="Lower Tattoos" tool_tip="Clicca per scegliere una fotografia"/> </panel> <accordion name="wearable_accordion"> <accordion_tab name="skin_color_tab" title="Colore della pelle"/> - <accordion_tab name="skin_face_tab" title="Dettagli del Viso"/> - <accordion_tab name="skin_makeup_tab" title="Trucco"/> - <accordion_tab name="skin_body_tab" title="Dettagli del Corpo"/> + <accordion_tab name="skin_face_tab" title="Dettagli del viso"/> + <accordion_tab name="skin_makeup_tab" title="Makeup"/> + <accordion_tab name="skin_body_tab" title="Dettagli del corpo"/> </accordion> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_edit_socks.xml b/indra/newview/skins/default/xui/it/panel_edit_socks.xml index 1d1eb4bd3a..d2af3ebd5a 100644 --- a/indra/newview/skins/default/xui/it/panel_edit_socks.xml +++ b/indra/newview/skins/default/xui/it/panel_edit_socks.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="edit_socks_panel"> <panel name="avatar_socks_color_panel"> - <texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere una foto"/> + <texture_picker label="Tessuto" name="Fabric" tool_tip="Clicca per scegliere una fotografia"/> <color_swatch label="Colore/Tinta" name="Color/Tint" tool_tip="Clicca per aprire il selettore dei colori"/> </panel> <accordion name="wearable_accordion"> - <accordion_tab name="socks_main_tab" title="Calze"/> + <accordion_tab name="socks_main_tab" title="Calzini"/> </accordion> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/it/panel_edit_tattoo.xml index 5435a28ff9..d8cfa15b25 100644 --- a/indra/newview/skins/default/xui/it/panel_edit_tattoo.xml +++ b/indra/newview/skins/default/xui/it/panel_edit_tattoo.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="edit_tattoo_panel"> <panel name="avatar_tattoo_color_panel"> - <texture_picker label="Tatuaggio sulla testa" name="Head Tattoo" tool_tip="Clicca per scegliere una foto"/> - <texture_picker label="Tatuaggio superiore" name="Upper Tattoo" tool_tip="Clicca per scegliere una foto"/> - <texture_picker label="Tatuaggio inferiore" name="Lower Tattoo" tool_tip="Clicca per scegliere una foto"/> + <texture_picker label="Tatuaggio della testa" name="Head Tattoo" tool_tip="Clicca per scegliere una fotografia"/> + <texture_picker label="Tatuaggio superiore" name="Upper Tattoo" tool_tip="Clicca per scegliere una fotografia"/> + <texture_picker label="Tattuaggio inferiore" name="Lower Tattoo" tool_tip="Clicca per scegliere una fotografia"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_edit_wearable.xml b/indra/newview/skins/default/xui/it/panel_edit_wearable.xml index baf585dad0..2583cf4e0e 100644 --- a/indra/newview/skins/default/xui/it/panel_edit_wearable.xml +++ b/indra/newview/skins/default/xui/it/panel_edit_wearable.xml @@ -1,55 +1,55 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Indossabile" name="panel_edit_wearable"> <string name="edit_shape_title"> - Modifica la Shape + Modifica della figura corporea </string> <string name="edit_skin_title"> - Modifica la Skin + Modifica della pelle </string> <string name="edit_hair_title"> - Modifica capelli + Modifica dei capelli </string> <string name="edit_eyes_title"> - Modifica occhi + Modifica degli occhi </string> <string name="edit_shirt_title"> - Modifica camicia + Modifica della camicia </string> <string name="edit_pants_title"> - Modifica pantaloni + Modifica dei pantaloni </string> <string name="edit_shoes_title"> - Modifica scarpe + Modifica delle scarpe </string> <string name="edit_socks_title"> - Modifica calze + Modifica delle calze </string> <string name="edit_jacket_title"> - Modifica Giacca + Modifica della giacca </string> <string name="edit_skirt_title"> - Modifica gonna + Modifica della gonna </string> <string name="edit_gloves_title"> - Modifica guanti + Modifica dei guanti </string> <string name="edit_undershirt_title"> - Modifica maglietta intima + Modifica della maglietta intima </string> <string name="edit_underpants_title"> - Modifica slip + Modifica dello slip </string> <string name="edit_alpha_title"> - Modifica Alpha Mask + Modifica di Alpha Mask </string> <string name="edit_tattoo_title"> - Modifica tatuaggio + Modifica del tatuaggio </string> <string name="shape_desc_text"> - Shape: + Figura corporea: </string> <string name="skin_desc_text"> - Skin: + Pelle: </string> <string name="hair_desc_text"> Capelli: @@ -90,9 +90,9 @@ <string name="tattoo_desc_text"> Tatuaggio: </string> - <text name="edit_wearable_title" value="Modifica Shape"/> + <text name="edit_wearable_title" value="Modifica della figura corporea"/> <panel label="Camicia" name="wearable_type_panel"> - <text name="description_text" value="Shape:"/> + <text name="description_text" value="Figura corporea:"/> </panel> <panel name="button_panel"> <button label="Salva con nome" name="save_as_button"/> diff --git a/indra/newview/skins/default/xui/it/panel_friends.xml b/indra/newview/skins/default/xui/it/panel_friends.xml index ec9d69e65e..cfe162a67b 100644 --- a/indra/newview/skins/default/xui/it/panel_friends.xml +++ b/indra/newview/skins/default/xui/it/panel_friends.xml @@ -16,5 +16,5 @@ <button label="Teleport" name="offer_teleport_btn" tool_tip="Offri a questo amico un teleport per dove sei tu ora"/> <button label="Paga" name="pay_btn" tool_tip="Dai Linden dollar (L$) a questo amico"/> <button label="Rimuovi" name="remove_btn" tool_tip="Rimuovi questa persona dalla tua lista amici"/> - <button label="Aggiungi" name="add_btn" tool_tip="Offri amicizia ad un residente"/> + <button label="Aggiungi" name="add_btn" tool_tip="Offri amicizia a un residente"/> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_group_control_panel.xml b/indra/newview/skins/default/xui/it/panel_group_control_panel.xml index c2bceaeef6..2d17e4a0cd 100644 --- a/indra/newview/skins/default/xui/it/panel_group_control_panel.xml +++ b/indra/newview/skins/default/xui/it/panel_group_control_panel.xml @@ -1,9 +1,17 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_im_control_panel"> - <button label="Profilo del Gruppo" name="group_info_btn"/> - <panel name="panel_call_buttons"> - <button label="Chiama Gruppo" name="call_btn"/> - <button label="Chiudi Chiamata" name="end_call_btn"/> - <button label="Apri Controlli Voice" name="voice_ctrls_btn"/> - </panel> + <layout_stack name="vertical_stack"> + <layout_panel name="group_info_btn_panel"> + <button label="Profilo del gruppo" name="group_info_btn"/> + </layout_panel> + <layout_panel name="call_btn_panel"> + <button label="Chiama il gruppo" name="call_btn"/> + </layout_panel> + <layout_panel name="end_call_btn_panel"> + <button label="Abbandona chiamata" name="end_call_btn"/> + </layout_panel> + <layout_panel name="voice_ctrls_btn_panel"> + <button label="Apri la regolazione voce" name="voice_ctrls_btn"/> + </layout_panel> + </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_group_general.xml b/indra/newview/skins/default/xui/it/panel_group_general.xml index a1b19b5855..e21f9d2049 100644 --- a/indra/newview/skins/default/xui/it/panel_group_general.xml +++ b/indra/newview/skins/default/xui/it/panel_group_general.xml @@ -11,22 +11,40 @@ Muovi il tuo mouse sopra le opzioni per maggiore aiuto. <panel.string name="incomplete_member_data_str"> Rilevando i dati dei membri </panel.string> + <panel name="group_info_top"> + <texture_picker label="" name="insignia" tool_tip="Clicca per scegliere una fotografia"/> + <text name="prepend_founded_by"> + Fondatore: + </text> + <name_box initial_value="(recupero)" name="founder_name"/> + <text name="join_cost_text"> + Gratis + </text> + <button label="ADERISCI ADESSO!" name="btn_join"/> + </panel> <text_editor name="charter"> Statuto del gruppo </text_editor> <name_list name="visible_members"> <name_list.columns label="Socio" name="name"/> <name_list.columns label="Titolo" name="title"/> + <name_list.columns label="Stato" name="status"/> </name_list> + <text name="my_group_settngs_label"> + Io + </text> <text name="active_title_label"> - Il mio titolo + Il mio titolo: </text> <combo_box name="active_title" tool_tip="Imposta il titolo che compare con il nome del tuo avatar quando questo gruppo è attivo."/> <check_box label="Ricevi avvisi dal gruppo" name="receive_notices" tool_tip="Imposta se vuoi ricevere avvisi da questo gruppo. Deseleziona questa casella se il gruppo ti manda messaggi indesiderati."/> <check_box label="Mostra nel mio profilo" name="list_groups_in_profile" tool_tip="Imposta se vuoi mostrare questo gruppo nel tuo profilo"/> <panel name="preferences_container"> - <check_box label="Iscrizione libera" name="open_enrollement" tool_tip="Imposta se questo gruppo permette ai nuovi membri di aderire senza essere invitati."/> - <check_box label="Tassa d'iscrizione" name="check_enrollment_fee" tool_tip="Imposta se richiedere una tassa d'iscrizione per aderire al gruppo"/> + <text name="group_settngs_label"> + Gruppo + </text> + <check_box label="Chiunque può aderire" name="open_enrollement" tool_tip="Imposta se questo gruppo permette ai nuovi membri di aderire senza essere invitati."/> + <check_box label="Quota di adesione" name="check_enrollment_fee" tool_tip="Imposta se richiedere una tassa d'iscrizione per aderire al gruppo"/> <spinner label="L$" left_delta="136" name="spin_enrollment_fee" tool_tip="I nuovi soci devono pagare questa tassa d'iscrizione quando è selezionata." width="60"/> <combo_box name="group_mature_check" tool_tip="Imposta se le informazioni sul tuo gruppo sono da considerarsi Mature."> <combo_box.item label="Contenuto PG" name="pg"/> diff --git a/indra/newview/skins/default/xui/it/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/it/panel_group_info_sidetray.xml index a439c3ddb5..da797b309f 100644 --- a/indra/newview/skins/default/xui/it/panel_group_info_sidetray.xml +++ b/indra/newview/skins/default/xui/it/panel_group_info_sidetray.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Informazioni sul gruppo" name="GroupInfo"> +<panel label="Profilo del gruppo" name="GroupInfo"> <panel.string name="default_needs_apply_text"> - Ci sono modifiche non salvate nella scheda attuale + Ci sono modifiche non salvate </panel.string> <panel.string name="want_apply_text"> Vuoi salvare le modifiche? @@ -12,25 +12,24 @@ <panel.string name="group_join_free"> Gratis </panel.string> - <text name="group_name" value="(Caricamento in corso...)"/> - <line_editor label="Scrivi qui il nome del gruppo" name="group_name_editor"/> - <texture_picker label="" name="insignia" tool_tip="Clicca per scegliere una fotografia"/> - <text name="prepend_founded_by"> - Fondatore: - </text> - <name_box initial_value="(recupero)" name="founder_name"/> - <text name="join_cost_text"> - Gratis - </text> - <button label="ADERISCI ADESSO!" name="btn_join"/> - <accordion name="groups_accordion"> - <accordion_tab name="group_general_tab" title="Generale"/> - <accordion_tab name="group_roles_tab" title="Ruoli"/> - <accordion_tab name="group_notices_tab" title="Avvisi"/> - <accordion_tab name="group_land_tab" title="Terra/Beni"/> - </accordion> - <panel name="button_row"> - <button label="Crea" label_selected="Nuovo gruppo" name="btn_create"/> - <button label="Salva" label_selected="Salva" name="btn_apply"/> + <panel name="group_info_top"> + <text name="group_name" value="(Caricamento in corso...)"/> + <line_editor label="Scrivi qui il nome del gruppo" name="group_name_editor"/> </panel> + <layout_stack name="layout"> + <layout_panel name="group_accordions"> + <accordion name="groups_accordion"> + <accordion_tab name="group_general_tab" title="Generale"/> + <accordion_tab name="group_roles_tab" title="Ruoli"/> + <accordion_tab name="group_notices_tab" title="Avvisi"/> + <accordion_tab name="group_land_tab" title="Terra/Beni"/> + </accordion> + </layout_panel> + <layout_panel name="button_row"> + <button label="Chat" name="btn_chat"/> + <button label="Chiamata al gruppo" name="btn_call" tool_tip="Chiama questo gruppo"/> + <button label="Salva" label_selected="Salva" name="btn_apply"/> + <button label="Crea un gruppo" name="btn_create" tool_tip="Crea un nuovo gruppo"/> + </layout_panel> + </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_group_invite.xml b/indra/newview/skins/default/xui/it/panel_group_invite.xml index 643d6b05fd..7874f588a5 100644 --- a/indra/newview/skins/default/xui/it/panel_group_invite.xml +++ b/indra/newview/skins/default/xui/it/panel_group_invite.xml @@ -7,23 +7,21 @@ (Attendi...) </panel.string> <panel.string name="already_in_group"> - Alcuni avatars sono già nel gruppo e non erano stati invitati. + Alcuni dei residenti selezionati sono già nel gruppo, pertanto l'invito non verrà loro spedito. </panel.string> <text name="help_text"> - Puoi selezionare più di un residente -da invitare nel tuo gruppo. Clicca su -'Scelta residenti' per iniziare. + Puoi selezionare più residenti da invitare nel tuo gruppo. Per iniziare, clicca su Apri il selettore di residenti. </text> <button label="Scelta residenti" name="add_button" tool_tip=""/> - <name_list name="invitee_list" tool_tip="Tieni premuto il tasto Ctrl e clicca il nome dei residenti per una multi-selezione"/> - <button label="Rimuovi i selezionati dall'elenco" name="remove_button" tool_tip="Rimuovi i residenti selezionati dalla lista invito"/> + <name_list name="invitee_list" tool_tip="Tieni premuto Ctrl e fai clic sui nomi dei residenti per una selezionare più nomi"/> + <button label="Rimuovi i selezionati dall'elenco" name="remove_button" tool_tip="Rimuove i residenti selezionati dalla lista degli inviti"/> <text name="role_text"> Scegli che ruolo assegnare loro: </text> - <combo_box name="role_name" tool_tip="Choose from the list of Roles you are allowed to assign members to"/> + <combo_box name="role_name" tool_tip="Scegli dall'elenco dei ruoli ai quali ti è consentito assegnare i membri"/> <button label="Manda gli inviti" name="ok_button"/> <button label="Annulla" name="cancel_button"/> <string name="GroupInvitation"> - Invito del Gruppo + Invito di gruppo </string> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_group_land_money.xml b/indra/newview/skins/default/xui/it/panel_group_land_money.xml index a532e7a575..1e3ef5e657 100644 --- a/indra/newview/skins/default/xui/it/panel_group_land_money.xml +++ b/indra/newview/skins/default/xui/it/panel_group_land_money.xml @@ -1,83 +1,81 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Terra & L$" name="land_money_tab"> - <string name="help_text"> - Appare un avviso fino a quando la Terra Totale in Uso è meno o = alla Contribuzione Totale. - </string> - <button label="?" name="help_button"/> - <string name="cant_view_group_land_text"> - Non hai i permessi per vedere la terra posseduta dal gruppo - </string> - <string name="cant_view_group_accounting_text"> - Non hai i permessi per vedere le informazioni sulla contabilità del gruppo. - </string> - <string name="loading_txt"> + <panel.string name="help_text"> + Viene visualizzata un'avvertenza fino a quando il terreno totale in uso è inferiore o uguale al contributo totale. + </panel.string> + <panel.string name="cant_view_group_land_text"> + Non sei autorizzato a vedere quali terreni appartengono al gruppo. + </panel.string> + <panel.string name="cant_view_group_accounting_text"> + Non sei autorizzato a visionare le informazioni finanziarie del gruppo. + </panel.string> + <panel.string name="loading_txt"> Attendi... - </string> - <text name="group_land_heading" width="250"> - Terra posseduta dal gruppo - </text> - <scroll_list name="group_parcel_list"> - <column label="Parcel" name="name"/> - <column label="Regione" name="location"/> - <column label="Tipo" name="type"/> - <column label="Area" name="area"/> - </scroll_list> - <button label="Mappa" label_selected="Mappa" left="282" name="map_button" width="130"/> - <text name="total_contributed_land_label"> - Contribuzione Totale: - </text> - <text name="total_contributed_land_value"> - [AREA] m² - </text> - <text name="total_land_in_use_label"> - Terra totale in uso: - </text> - <text name="total_land_in_use_value"> - [AREA] m² - </text> - <text name="land_available_label"> - Terreno disponibile: - </text> - <text name="land_available_value"> - [AREA] m² - </text> - <text name="your_contribution_label"> - La tua contribuzione: - </text> - <string name="land_contrib_error"> - Incapace di impostare la tua contribuzione di terreno - </string> - <text name="your_contribution_units"> - m² - </text> - <text name="your_contribution_max_value"> - ([IMPORTO] max) - </text> - <text name="group_over_limit_text"> - Sono necessari maggiori crediti di terreno per mantenere la terra in uso - </text> - <text name="group_money_heading"> - L$ del gruppo - </text> + </panel.string> + <panel.string name="land_contrib_error"> + Impossibile definire il tuo contributo di terreno + </panel.string> + <panel name="layout_panel_landmoney"> + <scroll_list name="group_parcel_list"> + <scroll_list.columns label="Lotto" name="name"/> + <scroll_list.columns label="Regione" name="location"/> + <scroll_list.columns label="Tipo" name="type"/> + <scroll_list.columns label="Superficie" name="area"/> + </scroll_list> + <text name="total_contributed_land_label"> + Contributo totale: + </text> + <text name="total_contributed_land_value"> + [AREA] m² + </text> + <button label="Mappa" label_selected="Mappa" name="map_button"/> + <text name="total_land_in_use_label"> + Terreno totale in uso: + </text> + <text name="total_land_in_use_value"> + [AREA] m² + </text> + <text name="land_available_label"> + Terreno disponibile: + </text> + <text name="land_available_value"> + [AREA] m² + </text> + <text name="your_contribution_label"> + Il tuo contributo: + </text> + <text name="your_contribution_units"> + m² + </text> + <text name="your_contribution_max_value"> + ([AMOUNT] max) + </text> + <text name="group_over_limit_text"> + Sono necessari più crediti del terreno per mantenere la terra in uso + </text> + <text name="group_money_heading"> + L$ gruppo + </text> + </panel> <tab_container name="group_money_tab_container"> <panel label="PIANIFICAZIONE" name="group_money_planning_tab"> <text_editor name="group_money_planning_text"> - Caricando... + Caricamento in corso... </text_editor> </panel> <panel label="DETTAGLI" name="group_money_details_tab"> <text_editor name="group_money_details_text"> - Caricando... + Caricamento in corso... </text_editor> <button label="< Precedente" label_selected="< Precedente" name="earlier_details_button" tool_tip="Indietro" width="90"/> - <button label="Successivo >" label_selected="Successivo >" left_delta="260" name="later_details_button" tool_tip="Prossimo" width="90"/> + <button label="Successivo >" label_selected="Successivo >" left_delta="260" name="later_details_button" tool_tip="Avanti" width="90"/> </panel> <panel label="VENDITE" name="group_money_sales_tab"> <text_editor name="group_money_sales_text"> - Caricando... + Caricamento in corso... </text_editor> <button label="< Precedente" label_selected="< Precedente" name="earlier_sales_button" tool_tip="Indietro" width="90"/> - <button label="Successivo >" label_selected="Successivo >" left_delta="260" name="later_sales_button" tool_tip="Prossimo" width="90"/> + <button label="Successivo >" label_selected="Successivo >" left_delta="260" name="later_sales_button" tool_tip="Avanti" width="90"/> </panel> </tab_container> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_group_list_item.xml b/indra/newview/skins/default/xui/it/panel_group_list_item.xml index 3e5419d1bb..7cdc4c7ff6 100644 --- a/indra/newview/skins/default/xui/it/panel_group_list_item.xml +++ b/indra/newview/skins/default/xui/it/panel_group_list_item.xml @@ -1,4 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="group_list_item"> <text name="group_name" value="Sconosciuto"/> + <button name="profile_btn" tool_tip="Vedi profilo"/> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_group_notices.xml b/indra/newview/skins/default/xui/it/panel_group_notices.xml index dbeb9d56ff..9dac282de9 100644 --- a/indra/newview/skins/default/xui/it/panel_group_notices.xml +++ b/indra/newview/skins/default/xui/it/panel_group_notices.xml @@ -5,10 +5,10 @@ Puoi disattivare la ricezione delle notice nella finestra principale. </panel.string> <panel.string name="no_notices_text"> - Non ci sono vecchie Notice + Non ci sono avvisi precedenti </panel.string> <text name="lbl2"> - Le Notice sono conservate per 14 giorni. + Gli avvisi sono conservati per 14 giorni. Massimo 200 per gruppo al giorno </text> <scroll_list name="notice_list"> @@ -17,10 +17,10 @@ Massimo 200 per gruppo al giorno <scroll_list.columns label="Data" name="date"/> </scroll_list> <text name="notice_list_none_found"> - Nessuna trovata + Nessuno trovato </text> - <button label="Crea una nuova notice" label_selected="Crea una nuova notice" name="create_new_notice" tool_tip="Crea una nuova notice"/> - <button label="Aggiorna" label_selected="Aggiorna l'elenco" name="refresh_notices" tool_tip="Aggiorna la lista delle notice"/> + <button label="Crea un nuovo avviso" label_selected="Crea una nuova notice" name="create_new_notice" tool_tip="Crea un nuovo avviso"/> + <button label="Aggiorna" label_selected="Aggiorna l'elenco" name="refresh_notices" tool_tip="Aggiorna la lista degli avvisi"/> <panel label="Crea una nuova notice" name="panel_create_new_notice"> <text name="lbl"> Crea una notice @@ -40,16 +40,16 @@ Massimo 200 per gruppo al giorno <text name="string"> Trascina e rilascia qui l'oggetto da allegare: </text> - <button label="Rimuovi" label_selected="Rimuovi allegato" name="remove_attachment"/> - <button label="Spedisci" label_selected="Spedisci" name="send_notice"/> - <group_drop_target name="drop_target" tool_tip="Trascina un oggetto dall'inventario nello spazio ALLEGA per spedirlo con la notice. Devi avere i permessi copy e transfer relativi all'oggetto da allegare."/> + <button label="Rimuovi" label_selected="Rimuovi allegato" name="remove_attachment" tool_tip="Rimuovi allegato dal tuo avviso"/> + <button label="Invia" label_selected="Invia" name="send_notice"/> + <group_drop_target name="drop_target" tool_tip="Trascina un oggetto dall'inventario ín questa casella per spedirlo con questo avviso. Devi avere i diritti per la copia e il trasferimento per poter allegare l'oggetto."/> </panel> <panel label="Vedi le notice precedenti" name="panel_view_past_notice"> <text name="lbl"> Notice archiviate </text> <text name="lbl2"> - Per spedire una nuova notice, clicca il bottone + + Per spedire un nuovo avviso, clicca sul pulsante + </text> <text name="lbl3"> Oggetto: @@ -57,6 +57,6 @@ Massimo 200 per gruppo al giorno <text name="lbl4"> Messaggio: </text> - <button label="Apri allegato" label_selected="Apri l'allegato" name="open_attachment"/> + <button label="Apri l'allegato" label_selected="Apri l'allegato" name="open_attachment"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_group_notify.xml b/indra/newview/skins/default/xui/it/panel_group_notify.xml index de6b139793..91a41353a5 100644 --- a/indra/newview/skins/default/xui/it/panel_group_notify.xml +++ b/indra/newview/skins/default/xui/it/panel_group_notify.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="instant_message" name="panel_group_notify"> <panel label="header" name="header"> - <text name="title" value="Nome di chi spedisce / Nome del Gruppo"/> + <text name="title" value="Nome del mittente / Nome del gruppo"/> </panel> - <text name="attachment" value="Attachment"/> - <button label="Ok" name="btn_ok"/> + <text name="attachment" value="Allegato"/> + <button label="OK" name="btn_ok"/> </panel> 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 1a2934b7ff..ef6f85390a 100644 --- a/indra/newview/skins/default/xui/it/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/it/panel_group_roles.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Membri & Ruoli" name="roles_tab"> <panel.string name="default_needs_apply_text"> - Ci sono modifiche non salvate nella scheda attuale + Ci sono modifiche non salvate </panel.string> <panel.string name="want_apply_text"> Vuoi salvare le modifiche? @@ -17,7 +17,7 @@ cliccando sui loro nomi. <name_list bottom_delta="-105" height="104" name="member_list"> <name_list.columns label="Socio" name="name"/> <name_list.columns label="Donazioni" name="donated"/> - <name_list.columns label="Online" name="online"/> + <name_list.columns label="Stato" name="online"/> </name_list> <button label="Invita" name="member_invite" width="165"/> <button label="Espelli" name="member_eject"/> @@ -30,7 +30,7 @@ uno o più ruoli. Un gruppo può avere fino a 10 ruoli, fra cui il ruolo base o "Tutti" e il ruolo del Proprietario, ovvero il capogruppo. </panel.string> <panel.string name="cant_delete_role"> - I Ruoli 'Everyone' e 'Owners' sono speciali e non possono essere cancellati. + I ruoli 'Tutti' e 'Proprietari' sono speciali e non possono essere eliminati. </panel.string> <panel.string name="power_folder_icon"> Inv_FolderClosed @@ -55,7 +55,7 @@ in questo gruppo. C'è una vasta gamma di abilità. </tab_container> <panel name="members_footer"> <text name="static"> - Membri assegnati + Ruoli assegnati </text> <text name="static2"> Abilità permesse @@ -64,13 +64,13 @@ in questo gruppo. C'è una vasta gamma di abilità. </panel> <panel name="roles_footer"> <text name="static"> - Nome del Ruolo + Nome del ruolo </text> <line_editor name="role_name"> Addetti </line_editor> <text name="static3"> - Titolo del Ruolo + Titolo del ruolo </text> <line_editor name="role_title"> (attendi) @@ -84,7 +84,7 @@ in questo gruppo. C'è una vasta gamma di abilità. <text name="static4"> Ruoli assegnati </text> - <check_box label="Visualizza membri" name="role_visible_in_list" tool_tip="Imposta nella scheda Generale per i membri di questo ruolo la visibilità da parte dei residenti esterni al gruppo."/> + <check_box label="Visualizza membri" name="role_visible_in_list" tool_tip="Imposta nella scheda Generale se i membri con questo ruolo possono essere visti dai residenti esterni a questo gruppo."/> <text name="static5" tool_tip="Una lista delle abilità che il ruolo ora selezionato può eseguire."> Abilità permesse </text> diff --git a/indra/newview/skins/default/xui/it/panel_im_control_panel.xml b/indra/newview/skins/default/xui/it/panel_im_control_panel.xml index f6c3fa9288..97ec0e11eb 100644 --- a/indra/newview/skins/default/xui/it/panel_im_control_panel.xml +++ b/indra/newview/skins/default/xui/it/panel_im_control_panel.xml @@ -1,13 +1,29 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_im_control_panel"> - <text name="avatar_name" value="Sconosciuto"/> - <button label="Profilo" name="view_profile_btn"/> - <button label="Aggiungi Amico" name="add_friend_btn"/> - <button label="Teleport" name="teleport_btn"/> - <button label="Condividi" name="share_btn"/> - <panel name="panel_call_buttons"> - <button label="Chiama" name="call_btn"/> - <button label="Abbandona chiamata" name="end_call_btn"/> - <button label="Controllo Voice" name="voice_ctrls_btn"/> - </panel> + <layout_stack name="button_stack"> + <layout_panel name="view_profile_btn_panel"> + <button label="Profilo" name="view_profile_btn"/> + </layout_panel> + <layout_panel name="add_friend_btn_panel"> + <button label="Aggiungi amico" name="add_friend_btn"/> + </layout_panel> + <layout_panel name="teleport_btn_panel"> + <button label="Teleport" name="teleport_btn" tool_tip="Offri teleport a questa persona"/> + </layout_panel> + <layout_panel name="share_btn_panel"> + <button label="Condividi" name="share_btn"/> + </layout_panel> + <layout_panel name="pay_btn_panel"> + <button label="Paga" name="pay_btn"/> + </layout_panel> + <layout_panel name="call_btn_panel"> + <button label="Chiama" name="call_btn"/> + </layout_panel> + <layout_panel name="end_call_btn_panel"> + <button label="Abbandona chiamata" name="end_call_btn"/> + </layout_panel> + <layout_panel name="voice_ctrls_btn_panel"> + <button label="Regolazione voce" name="voice_ctrls_btn"/> + </layout_panel> + </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_landmark_info.xml b/indra/newview/skins/default/xui/it/panel_landmark_info.xml index 5908a873cc..4af59605c1 100644 --- a/indra/newview/skins/default/xui/it/panel_landmark_info.xml +++ b/indra/newview/skins/default/xui/it/panel_landmark_info.xml @@ -1,36 +1,37 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="landmark_info"> - <string name="title_create_landmark" value="Crea Landmark"/> - <string name="title_edit_landmark" value="Modifica Landmark"/> - <string name="title_landmark" value="Landmark"/> - <string name="not_available" value="(N\A)"/> + <string name="title_create_landmark" value="Crea punto di riferimento"/> + <string name="title_edit_landmark" value="Modifica punto di riferimento"/> + <string name="title_landmark" value="Punto di riferimento"/> + <string name="not_available" value="(non pert.)"/> <string name="unknown" value="(sconosciuto)"/> <string name="public" value="(pubblico)"/> <string name="server_update_text"> - Info sul luogo non disponibili senza l'aggiornamento del server. + Informazioni sul luogo non disponibili senza l'aggiornamento del server. </string> <string name="server_error_text"> - Info su questo luogo non disponibili ora, prova più tardi. + Informazioni su questo luogo non disponibili al momento, riprova più tardi. </string> <string name="server_forbidden_text"> - Info su questo luogo non disponibili a causa delle restrizioni di accesso. Controlla i tuoi permessi con il proprietario del terreno . + Informazioni su questo luogo non disponibili a causa delle limitazioni di accesso. Controlla i tuoi permessi con il proprietario del terreno. </string> <string name="acquired_date"> [wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local] </string> - <text name="title" value="Colloca Profilo"/> + <button name="back_btn" tool_tip="Indietro"/> + <text name="title" value="Profilo del posto"/> <scroll_container name="place_scroll"> <panel name="scrolling_panel"> <text name="maturity_value" value="sconosciuto"/> <panel name="landmark_info_panel"> <text name="owner_label" value="Proprietario:"/> - <text name="creator_label" value="Creatore:"/> + <text name="creator_label" value="Ideatore:"/> <text name="created_label" value="Creato:"/> </panel> <panel name="landmark_edit_panel"> <text name="title_label" value="Titolo:"/> - <text name="notes_label" value="Mie note:"/> - <text name="folder_label" value="Landmark del luogo:"/> + <text name="notes_label" value="Le mie note:"/> + <text name="folder_label" value="Ubicazione punto di riferimento:"/> </panel> </panel> </scroll_container> diff --git a/indra/newview/skins/default/xui/it/panel_landmarks.xml b/indra/newview/skins/default/xui/it/panel_landmarks.xml index 0efeaac97d..74cd9e6fb1 100644 --- a/indra/newview/skins/default/xui/it/panel_landmarks.xml +++ b/indra/newview/skins/default/xui/it/panel_landmarks.xml @@ -2,13 +2,13 @@ <panel name="Landmarks"> <accordion name="landmarks_accordion"> <accordion_tab name="tab_favorites" title="Barra dei Preferiti"/> - <accordion_tab name="tab_landmarks" title="Landmarks"/> - <accordion_tab name="tab_inventory" title="Mio Inventario"/> + <accordion_tab name="tab_landmarks" title="I miei punti di riferimento"/> + <accordion_tab name="tab_inventory" title="Il mio inventario"/> <accordion_tab name="tab_library" title="Libreria"/> </accordion> <panel name="bottom_panel"> <button name="options_gear_btn" tool_tip="Mostra opzioni addizionali"/> - <button name="add_btn" tool_tip="Aggiungi nuovo landmark"/> - <dnd_button name="trash_btn" tool_tip="Rimuovi landmark selezionato"/> + <button name="add_btn" tool_tip="Aggiungi un nuovo punto di riferimento"/> + <dnd_button name="trash_btn" tool_tip="Rimuovi il punto di riferimento selezionato"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_login.xml b/indra/newview/skins/default/xui/it/panel_login.xml index aec58738b8..bbf93ceb87 100644 --- a/indra/newview/skins/default/xui/it/panel_login.xml +++ b/indra/newview/skins/default/xui/it/panel_login.xml @@ -6,33 +6,29 @@ <panel.string name="forgot_password_url"> http://secondlife.com/account/request.php?lang=it </panel.string> - <panel name="login_widgets"> - <text name="first_name_text"> - Nome: - </text> - <line_editor name="first_name_edit" tool_tip="[SECOND_LIFE] Nome"/> - <text name="last_name_text"> - Cognome: - </text> - <line_editor name="last_name_edit" tool_tip="[SECOND_LIFE] Cognome"/> - <text name="password_text"> - Password: - </text> - <button label="Accedi" label_selected="Accedi" name="connect_btn"/> - <text name="start_location_text"> - Luogo di partenza: - </text> - <combo_box name="start_location_combo"> - <combo_box.item label="La mia ultima ubicazione" name="MyLastLocation"/> - <combo_box.item label="La mia casa" name="MyHome"/> - <combo_box.item label="<Scrivi nome regione>" name="Typeregionname"/> - </combo_box> - <check_box label="Ricorda password" name="remember_check"/> - <text name="create_new_account_text"> - Crea nuovo account - </text> - <text name="forgot_password_text"> - Hai dimenticato il nome o la password? - </text> - </panel> + <layout_stack name="login_widgets"> + <layout_panel name="login"> + <text name="first_name_text"> + Nome: + </text> + <line_editor label="Nome" name="first_name_edit" tool_tip="[SECOND_LIFE] First Name"/> + <line_editor label="Cognome" name="last_name_edit" tool_tip="[SECOND_LIFE] Last Name"/> + <check_box label="Ricorda password" name="remember_check"/> + <text name="start_location_text"> + Inizia da: + </text> + <combo_box name="start_location_combo"> + <combo_box.item label="Casa mia" name="MyHome"/> + </combo_box> + <button label="Accedi" name="connect_btn"/> + </layout_panel> + <layout_panel name="links"> + <text name="create_new_account_text"> + Iscriviti + </text> + <text name="login_help"> + Ti serve aiuto con la fase di accesso? + </text> + </layout_panel> + </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_main_inventory.xml b/indra/newview/skins/default/xui/it/panel_main_inventory.xml index 8c2479a019..878daf1e6b 100644 --- a/indra/newview/skins/default/xui/it/panel_main_inventory.xml +++ b/indra/newview/skins/default/xui/it/panel_main_inventory.xml @@ -1,18 +1,14 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Cose" name="main inventory panel"> - <panel.string name="Title"> - Cose + <panel.string name="ItemcountFetching"> + Recupero di [ITEM_COUNT] oggetti... [FILTER] </panel.string> - <filter_editor label="Filtro" name="inventory search editor"/> - <tab_container name="inventory filter tabs"> - <inventory_panel label="Tutti gli elementi" name="All Items"/> - <inventory_panel label="Elementi recenti" name="Recent Items"/> - </tab_container> - <panel name="bottom_panel"> - <button name="options_gear_btn" tool_tip="Mostra opzioni addizionali"/> - <button name="add_btn" tool_tip="Aggiungi nuovo elemento"/> - <dnd_button name="trash_btn" tool_tip="Rimuovi l'articolo selezionato"/> - </panel> + <panel.string name="ItemcountCompleted"> + [ITEM_COUNT] oggetti [FILTER] + </panel.string> + <text name="ItemcountText"> + Oggetti: + </text> <menu_bar name="Inventory Menu"> <menu label="File" name="File"> <menu_item_call label="Apri" name="Open"/> @@ -32,7 +28,7 @@ <menu label="Crea" name="Create"> <menu_item_call label="Nuova cartella" name="New Folder"/> <menu_item_call label="Nuovo script" name="New Script"/> - <menu_item_call label="Nuovo appunto" name="New Note"/> + <menu_item_call label="Nuovo biglietto" name="New Note"/> <menu_item_call label="Nuova gesture" name="New Gesture"/> <menu label="Maglietta intima" name="New Clothes"> <menu_item_call label="Nuova camicia" name="New Shirt"/> @@ -61,4 +57,14 @@ <menu_item_check label="Cartelle di sistema all'inizio" 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="Tutti gli elementi" name="All Items"/> + <inventory_panel label="Elementi recenti" name="Recent Items"/> + </tab_container> + <panel name="bottom_panel"> + <button name="options_gear_btn" tool_tip="Mostra opzioni addizionali"/> + <button name="add_btn" tool_tip="Aggiungi nuovo elemento"/> + <dnd_button name="trash_btn" tool_tip="Rimuovi l'articolo selezionato"/> + </panel> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_me.xml b/indra/newview/skins/default/xui/it/panel_me.xml index 03678ecad5..66601aa165 100644 --- a/indra/newview/skins/default/xui/it/panel_me.xml +++ b/indra/newview/skins/default/xui/it/panel_me.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Mio Profilo" name="panel_me"> +<panel label="Il mio profilo" name="panel_me"> <tab_container name="tabs"> - <panel label="PROFILO" name="panel_profile"/> - <panel label="PREFERITI" name="panel_picks"/> + <panel label="IL MIO PROFILO" name="panel_profile"/> + <panel label="I MIEI PREFERITI" name="panel_picks"/> </tab_container> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_media_settings_permissions.xml b/indra/newview/skins/default/xui/it/panel_media_settings_permissions.xml index 551d86864d..53dac1299f 100644 --- a/indra/newview/skins/default/xui/it/panel_media_settings_permissions.xml +++ b/indra/newview/skins/default/xui/it/panel_media_settings_permissions.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Personalizza" name="Media settings for controls"> <text name="controls_label"> - Controlli: + Regolazioni: </text> <combo_box name="controls"> <combo_item name="Standard"> @@ -11,10 +11,10 @@ Mini </combo_item> </combo_box> - <check_box initial_value="false" label="Permetti Navigazione & Interattività" name="perms_owner_interact"/> + <check_box initial_value="false" label="Permetti navigazione e interattività" name="perms_owner_interact"/> <check_box initial_value="false" label="Mostra la barra di controllo" name="perms_owner_control"/> - <check_box initial_value="false" label="Permetti Navigazione & Interattività" name="perms_group_interact"/> + <check_box initial_value="false" label="Permetti navigazione e interattività" name="perms_group_interact"/> <check_box initial_value="false" label="Mostra la barra di controllo" name="perms_group_control"/> - <check_box initial_value="false" label="Permetti Navigazione & Interattività" name="perms_anyone_interact"/> + <check_box initial_value="false" label="Permetti navigazione e interattività" name="perms_anyone_interact"/> <check_box initial_value="false" label="Mostra la barra di controllo" name="perms_anyone_control"/> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_media_settings_security.xml b/indra/newview/skins/default/xui/it/panel_media_settings_security.xml index 0df0331198..785cd048a1 100644 --- a/indra/newview/skins/default/xui/it/panel_media_settings_security.xml +++ b/indra/newview/skins/default/xui/it/panel_media_settings_security.xml @@ -1,12 +1,12 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Sicurezza" name="Media Settings Security"> - <check_box initial_value="false" label="Accesso permesso solo a URLs specificati (by prefix)" name="whitelist_enable"/> + <check_box initial_value="false" label="Permetti l'accesso solo ai modelli di URL specificati" name="whitelist_enable"/> <text name="home_url_fails_some_items_in_whitelist"> - Annota che le home page mancate sono segnate: + Le mancate aperture di home page sono segnalate: </text> <button label="Aggiungi" name="whitelist_add"/> - <button label="Cancella" name="whitelist_del"/> + <button label="Elimina" name="whitelist_del"/> <text name="home_url_fails_whitelist"> - Attenzione: la home page specificata nella Tabella General non ha passato questa lista bianca. E' stata disattivata fino a quando non sarà aggiunta un entrata valid. + Avvertenza: la home page specificata nella scheda Generale non ha superato la lista bianca. Viene disabilitata fino a che non venga inserita una voce valida. </text> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_my_profile.xml b/indra/newview/skins/default/xui/it/panel_my_profile.xml index 60faf4e7c5..08c050228f 100644 --- a/indra/newview/skins/default/xui/it/panel_my_profile.xml +++ b/indra/newview/skins/default/xui/it/panel_my_profile.xml @@ -1,37 +1,35 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Profilo" name="panel_profile"> <string name="no_partner_text" value="Nessuno"/> + <string name="no_group_text" value="Nessuno"/> <string name="RegisterDateFormat"> [REG_DATE] ([AGE]) </string> - <scroll_container name="profile_scroll"> - <panel name="scroll_content_panel"> - <panel name="second_life_image_panel"> - <icon label="" name="2nd_life_edit_icon" tool_tip="Clicca il pulsante inferiore Modifica Profilo per cambiare immagine"/> - </panel> - <panel name="first_life_image_panel"> - <icon label="" name="real_world_edit_icon" tool_tip="Clicca il pulsante inferiore Modifica Profilo per cambiare immagine"/> - <text name="title_rw_descr_text" value="Mondo Reale:"/> - </panel> - <text name="me_homepage_text"> - Homepage: - </text> - <text name="title_member_text" value="Membro dal:"/> - <text name="title_acc_status_text" value="Stato dell'account:"/> - <text name="acc_status_text" value="Residente. Nessuna info di pagamento."/> - <text name="title_partner_text" value="Partner:"/> - <text name="title_groups_text" value="Gruppi:"/> - </panel> - </scroll_container> - <panel name="profile_buttons_panel"> - <button label="Aggiungi amico" name="add_friend"/> - <button label="IM" name="im"/> - <button label="Chiama" name="call"/> - <button label="Mappa" name="show_on_map_btn"/> - <button label="Teleport" name="teleport"/> - </panel> - <panel name="profile_me_buttons_panel"> - <button label="Modifica Profilo" name="edit_profile_btn" tool_tip="Modifica le tue informazioni personali"/> - <button label="Modifica aspetto" name="edit_appearance_btn" tool_tip="Crea/modifica la tua apparenza: aspetto fisico, vestiti, etc."/> - </panel> + <layout_stack name="layout"> + <layout_panel name="profile_stack"> + <scroll_container name="profile_scroll"> + <panel name="scroll_content_panel"> + <panel name="second_life_image_panel"> + <icon label="" name="2nd_life_edit_icon" tool_tip="Clicca sul pulsante Modifica profilo per cambiare l'immagine"/> + <text name="title_sl_descr_text" value="[SECOND_LIFE]:"/> + </panel> + <panel name="first_life_image_panel"> + <icon label="" name="real_world_edit_icon" tool_tip="Clicca sul pulsante Modifica profilo per cambiare l'immagine"/> + <text name="title_rw_descr_text" value="Mondo reale:"/> + </panel> + <text name="title_member_text" value="Residente dal:"/> + <text name="title_acc_status_text" value="Stato account:"/> + <text name="title_partner_text" value="Partner:"/> + <panel name="partner_data_panel"> + <name_box initial_value="(recupero)" name="partner_text"/> + </panel> + <text name="title_groups_text" value="Gruppi:"/> + </panel> + </scroll_container> + </layout_panel> + <layout_panel name="profile_me_buttons_panel"> + <button label="Modifica profilo" name="edit_profile_btn" tool_tip="Modifica le tue informazioni personali"/> + <button label="Modifica aspetto fisico" name="edit_appearance_btn" tool_tip="Crea/modifica il tuo aspetto: parti del corpo, abiti ecc."/> + </layout_panel> + </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_navigation_bar.xml b/indra/newview/skins/default/xui/it/panel_navigation_bar.xml index 2e057c2983..8e72167759 100644 --- a/indra/newview/skins/default/xui/it/panel_navigation_bar.xml +++ b/indra/newview/skins/default/xui/it/panel_navigation_bar.xml @@ -1,15 +1,18 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="navigation_bar"> <panel name="navigation_panel"> - <button name="back_btn" tool_tip="Ritorna al luogo precedente"/> - <button name="forward_btn" tool_tip="Vai ad un luogo"/> - <button name="home_btn" tool_tip="Teleport a casa mia"/> - <location_input label="Luogo" name="location_combo"/> + <pull_button name="back_btn" tool_tip="Torna al luogo precedente"/> + <pull_button name="forward_btn" tool_tip="Procedi un luogo in avanti"/> + <button name="home_btn" tool_tip="Teleport a casa"/> + <location_input label="Posizione" name="location_combo"/> <search_combo_box label="Cerca" name="search_combo_box" tool_tip="Cerca"> <combo_editor label="Cerca [SECOND_LIFE]" name="search_combo_editor"/> </search_combo_box> </panel> - <favorites_bar name="favorite"> - <chevron_button name=">>" tool_tip="Mostra più dei miei Preferiti"/> + <favorites_bar name="favorite" tool_tip="Trascina qui i punti di riferimento per un accesso rapido ai tuoi posti preferiti in Second Life."> + <label name="favorites_bar_label" tool_tip="Trascina qui i punti di riferimento per un accesso rapido ai tuoi posti preferiti in Second Life."> + Barra dei Preferiti + </label> + <chevron_button name=">>" tool_tip="Mostra altri Preferiti"/> </favorites_bar> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/it/panel_nearby_chat_bar.xml index f7a58581d4..6317d3192e 100644 --- a/indra/newview/skins/default/xui/it/panel_nearby_chat_bar.xml +++ b/indra/newview/skins/default/xui/it/panel_nearby_chat_bar.xml @@ -1,5 +1,11 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="chat_bar"> - <line_editor label="Clicca qui per la chat." name="chat_box" tool_tip="Premi Invio per dire, Ctrl+Invio per gridare"/> - <button name="show_nearby_chat" tool_tip="Mostra/Nasconde la chat log nei dintorni"/> + <string name="min_width"> + 192 + </string> + <string name="max_width"> + 320 + </string> + <line_editor label="Clicca qui per la chat." name="chat_box" tool_tip="Premi Invio per parlare, Ctrl+Invio per gridare"/> + <button name="show_nearby_chat" tool_tip="Mostra/Nasconde il registro della chat nei dintorni"/> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_nearby_media.xml b/indra/newview/skins/default/xui/it/panel_nearby_media.xml new file mode 100644 index 0000000000..5343ecae13 --- /dev/null +++ b/indra/newview/skins/default/xui/it/panel_nearby_media.xml @@ -0,0 +1,67 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="nearby_media"> + <string name="empty_item_text"> + <vuoto> + </string> + <string name="parcel_media_name"> + Streaming media del lotto + </string> + <string name="parcel_audio_name"> + Streaming audio del lotto + </string> + <string name="playing_suffix"> + (riproduzione) + </string> + <panel name="minimized_controls"> + <button label="Interrompi tutto" name="all_nearby_media_disable_btn" tool_tip="Spegni tutti i media nei dintorni"/> + <button label="Accendi tutto" name="all_nearby_media_enable_btn" tool_tip="Accendi tutti i media nei dintorni"/> + <button name="open_prefs_btn" tool_tip="Accedi alle preferenze del media"/> + <button label="Più >>" label_selected="Meno <<" name="more_less_btn" tool_tip="Opzioni avanzate"/> + </panel> + <panel name="nearby_media_panel"> + <text name="nearby_media"> + Multimedia vicini + </text> + <text name="show"> + Mostra: + </text> + <combo_box name="show_combo"> + <combo_box.item label="Tutto" name="All"/> + <combo_box.item label="In questo lotto" name="WithinParcel"/> + <combo_box.item label="Fuori da questo lotto" name="OutsideParcel"/> + <combo_box.item label="su altri avatar" name="OnOthers"/> + </combo_box> + <scroll_list name="media_list"> + <scroll_list.columns label="Dintorni" name="media_proximity"/> + <scroll_list.columns label="Visibile" name="media_visibility"/> + <scroll_list.columns label="Classe" name="media_class"/> + <scroll_list.columns label="Nome" name="media_name"/> + <scroll_list.columns label="Debug" name="media_debug"/> + </scroll_list> + <panel name="media_controls_panel"> + <layout_stack name="media_controls"> + <layout_panel name="stop"> + <button name="stop_btn" tool_tip="Interrompi supporto selezionato"/> + </layout_panel> + <layout_panel name="play"> + <button name="play_btn" tool_tip="Riproduci media selezionato"/> + </layout_panel> + <layout_panel name="pause"> + <button name="pause_btn" tool_tip="Pausa media selezionato"/> + </layout_panel> + <layout_panel name="volume_slider_ctrl"> + <slider_bar initial_value="0.5" name="volume_slider" tool_tip="Volume audio per il media selezionato"/> + </layout_panel> + <layout_panel name="mute"> + <button name="mute_btn" tool_tip="Disattiva audio del media selezionato"/> + </layout_panel> + <layout_panel name="zoom"> + <button name="zoom_btn" tool_tip="Zoom nel media selezionato"/> + </layout_panel> + <layout_panel name="unzoom"> + <button name="unzoom_btn" tool_tip="Zoom indietro dal media selezionato"/> + </layout_panel> + </layout_stack> + </panel> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/it/panel_notes.xml b/indra/newview/skins/default/xui/it/panel_notes.xml index ff843c1684..9ce6b47a32 100644 --- a/indra/newview/skins/default/xui/it/panel_notes.xml +++ b/indra/newview/skins/default/xui/it/panel_notes.xml @@ -1,20 +1,20 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Note & Privacy" name="panel_notes"> +<panel label="Note e Privacy" name="panel_notes"> <layout_stack name="layout"> <panel name="notes_stack"> <scroll_container name="profile_scroll"> <panel name="profile_scroll_panel"> <text name="status_message" value="Le mie note private:"/> - <text name="status_message2" value="Permetti a questa persona di:"/> - <check_box label="Vedermi On-line" name="status_check"/> - <check_box label="Vedermi sull mappa" name="map_check"/> - <check_box label="Modificare, cancellare o prendere i miei oggetti" name="objects_check"/> + <text name="status_message2" value="Consenti a questa persona di:"/> + <check_box label="Vedere se sono online" name="status_check"/> + <check_box label="Vedermi sulla mappa" name="map_check"/> + <check_box label="Modificare, eliminare o prendere i miei oggetti" name="objects_check"/> </panel> </scroll_container> </panel> <panel name="notes_buttons_panel"> - <button label="Aggiungi" name="add_friend" tool_tip="Offrire amicizia ad un residente"/> - <button label="IM" name="im" tool_tip="Apri una sessione di messaggio istantaneo"/> + <button label="Aggiungi amico" name="add_friend" tool_tip="Offri amicizia a questo residente"/> + <button label="IM" name="im" tool_tip="Apri una sessione messaggio istantaneo"/> <button label="Chiama" name="call" tool_tip="Chiama questo residente"/> <button label="Mappa" name="show_on_map_btn" tool_tip="Mostra il residente sulla mappa"/> <button label="Teleport" name="teleport" tool_tip="Offri teleport"/> diff --git a/indra/newview/skins/default/xui/it/panel_online_status.xml b/indra/newview/skins/default/xui/it/panel_online_status.xml new file mode 100644 index 0000000000..fdc489f375 --- /dev/null +++ b/indra/newview/skins/default/xui/it/panel_online_status.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="friend_online_status" name="friend_online_status"/> diff --git a/indra/newview/skins/default/xui/it/panel_online_status_toast.xml b/indra/newview/skins/default/xui/it/panel_online_status_toast.xml new file mode 100644 index 0000000000..fdc489f375 --- /dev/null +++ b/indra/newview/skins/default/xui/it/panel_online_status_toast.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="friend_online_status" name="friend_online_status"/> diff --git a/indra/newview/skins/default/xui/it/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/it/panel_outfits_inventory.xml index 9332a3ef36..58055d91c7 100644 --- a/indra/newview/skins/default/xui/it/panel_outfits_inventory.xml +++ b/indra/newview/skins/default/xui/it/panel_outfits_inventory.xml @@ -1,7 +1,14 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="Outfits"> - <accordion name="outfits_accordion"> - <accordion_tab name="tab_cof" title="Vestiario attuale"/> - <accordion_tab name="tab_outfits" title="Mio Vestiario"/> - </accordion> +<panel label="Cose" name="Outfits"> + <tab_container name="appearance_tabs"> + <inventory_panel label="I MIEI ABITI" name="outfitslist_tab"/> + <inventory_panel label="INDOSSA" name="cof_tab"/> + </tab_container> + <panel name="bottom_panel"> + <button name="options_gear_btn" tool_tip="Mostra opzioni addizionali"/> + <dnd_button name="trash_btn" tool_tip="Rimuovi l'articolo selezionato"/> + <button label="Salva vestiario" name="make_outfit_btn" tool_tip="Salva questo aspetto fisico come un vestito"/> + <button label="Indossa" name="wear_btn" tool_tip="Indossa il vestiario selezionato"/> + <button label="M" name="look_edit_btn"/> + </panel> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_outfits_inventory_gear_default.xml b/indra/newview/skins/default/xui/it/panel_outfits_inventory_gear_default.xml index c6be942312..9e1a45b129 100644 --- a/indra/newview/skins/default/xui/it/panel_outfits_inventory_gear_default.xml +++ b/indra/newview/skins/default/xui/it/panel_outfits_inventory_gear_default.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="menu_gear_default"> - <menu_item_call label="Sostituisci il Vestiario attuale" name="wear"/> - <menu_item_call label="Aggiungi al Vestiario attuale" name="add"/> - <menu_item_call label="Rimuovi dal Vestiario attuale" name="remove"/> - <menu_item_call label="Rinomina" name="rename"/> - <menu_item_call label="Rimuovi" name="remove_link"/> - <menu_item_call label="Cancella" name="delete"/> + <menu_item_call label="Sostituisci vestiario attuale" name="wear"/> + <menu_item_call label="Aggiungi al vestiario attuale" name="add"/> + <menu_item_call label="Rimuovi dal vestiario attuale" name="remove"/> + <menu_item_call label="Modifica nome" name="rename"/> + <menu_item_call label="Rimuovi link" name="remove_link"/> + <menu_item_call label="Elimina vestito" name="delete"/> </menu> diff --git a/indra/newview/skins/default/xui/it/panel_people.xml b/indra/newview/skins/default/xui/it/panel_people.xml index b20db0d565..acbc2cf326 100644 --- a/indra/newview/skins/default/xui/it/panel_people.xml +++ b/indra/newview/skins/default/xui/it/panel_people.xml @@ -1,33 +1,38 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <!-- Side tray panel --> -<panel label="Persona" name="people_panel"> +<panel label="Persone" name="people_panel"> <string name="no_people" value="Nessuna persona"/> <string name="no_one_near" value="Nessuno vicino"/> <string name="no_friends_online" value="Nessun amico online"/> <string name="no_friends" value="Nessun amico"/> - <string name="no_groups" value="Nessun gruppo"/> - <string name="people_filter_label" value="Filtro Persone"/> - <string name="groups_filter_label" value="Filtro Gruppi"/> + <string name="people_filter_label" value="Filtro persone"/> + <string name="groups_filter_label" value="Filtro gruppi"/> + <string name="no_filtered_groups_msg" value="[secondlife:///app/search/groups Try finding the group in search?]"/> + <string name="no_groups_msg" value="[secondlife:///app/search/groups Try searching for some groups to join.]"/> <filter_editor label="Filtro" name="filter_input"/> <tab_container name="tabs"> <panel label="NELLE VICINANZE" name="nearby_panel"> <panel label="bottom_panel" name="bottom_panel"> <button name="nearby_view_sort_btn" tool_tip="Opzioni"/> - <button name="add_friend_btn" tool_tip="Aggiungi il residente selezionato alla tua lista di amici"/> + <button name="add_friend_btn" tool_tip="Aggiungi il residente selezionato alla tua lista degli amici"/> </panel> </panel> - <panel label="AMICI" name="friends_panel"> + <panel label="I MIEI AMICI" name="friends_panel"> <accordion name="friends_accordion"> <accordion_tab name="tab_online" title="Online"/> - <accordion_tab name="tab_all" title="Tutti"/> + <accordion_tab name="tab_all" title="Tutto"/> </accordion> <panel label="bottom_panel" name="bottom_panel"> <button name="friends_viewsort_btn" tool_tip="Opzioni"/> - <button name="add_btn" tool_tip="Offri amicizia ad un residente"/> - <button name="del_btn" tool_tip="Rimuovi la persona selezionata dalla tua lista di amici"/> + <button name="add_btn" tool_tip="Offri amicizia a un residente"/> + <button name="del_btn" tool_tip="Rimuovi la persona selezionata dalla lista degli amici"/> </panel> + <text name="no_friends_msg"> + Per aggiungere amici, prova [secondlife:///app/search/people global search] oppure fai clic col pulsante destro del mouse su un residente per aggiungerlo come amico. +Se stai cercando qualcuno da frequentare, [secondlife:///app/worldmap try the Map]. + </text> </panel> - <panel label="GRUPPI" name="groups_panel"> + <panel label="I MIEI GRUPPI" name="groups_panel"> <panel label="bottom_panel" name="bottom_panel"> <button name="groups_viewsort_btn" tool_tip="Opzioni"/> <button name="plus_btn" tool_tip="Aderisci al gruppo/Crea nuovo gruppo"/> @@ -37,17 +42,18 @@ <panel label="RECENTE" name="recent_panel"> <panel label="bottom_panel" name="bottom_panel"> <button name="recent_viewsort_btn" tool_tip="Opzioni"/> - <button name="add_friend_btn" tool_tip="Aggiungi il residente selezionato alla tua lista di amici"/> + <button name="add_friend_btn" tool_tip="Aggiungi il residente selezionato alla tua lista degli amici"/> </panel> </panel> </tab_container> <panel name="button_bar"> - <button label="Profilo" name="view_profile_btn" tool_tip="Mostra foto, gruppi, e info di altri residenti"/> - <button label="IM" name="im_btn" tool_tip="Apri sessione instant message"/> + <button label="Profilo" name="view_profile_btn" tool_tip="Mostra immagine, gruppi e altre informazioni del residente"/> + <button label="IM" name="im_btn" tool_tip="Apri una sessione messaggio istantaneo"/> <button label="Chiama" name="call_btn" tool_tip="Chiama questo residente"/> <button label="Condividi" name="share_btn"/> <button label="Teleport" name="teleport_btn" tool_tip="Offri teleport"/> - <button label="Profilo del Gruppo" name="group_info_btn" tool_tip="Mostra info del gruppo"/> + <button label="Profilo del gruppo" name="group_info_btn" tool_tip="Mostra informazioni gruppo"/> <button label="Chat di gruppo" name="chat_btn" tool_tip="Apri sessione chat"/> + <button label="Chiamata al gruppo" name="group_call_btn" tool_tip="Chiama questo gruppo"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_picks.xml b/indra/newview/skins/default/xui/it/panel_picks.xml index bcc433708d..823e0fcd03 100644 --- a/indra/newview/skins/default/xui/it/panel_picks.xml +++ b/indra/newview/skins/default/xui/it/panel_picks.xml @@ -1,20 +1,20 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Foto" name="panel_picks"> - <string name="no_picks" value="Nessuna Foto"/> - <string name="no_classifieds" value="Nessun Annuncio"/> +<panel label="Preferiti" name="panel_picks"> + <string name="no_picks" value="Nessun luogo preferito"/> + <string name="no_classifieds" value="Nessun annuncio"/> <text name="empty_picks_panel_text"> Nessuna foto/annuncio qui </text> <accordion name="accordion"> - <accordion_tab name="tab_picks" title="Foto"/> - <accordion_tab name="tab_classifieds" title="Annunci"/> + <accordion_tab name="tab_picks" title="Preferiti"/> + <accordion_tab name="tab_classifieds" title="Annunci pubblicitari"/> </accordion> <panel label="bottom_panel" name="edit_panel"> - <button name="new_btn" tool_tip="Crea una nuova foto o annuncio in questo luogo"/> + <button name="new_btn" tool_tip="Crea un nuovo luogo preferito o annuncio in questo luogo"/> </panel> <panel name="buttons_cucks"> - <button label="Info" name="info_btn" tool_tip="Mostra info sulla foto"/> - <button label="Teleport" name="teleport_btn" tool_tip="Teleport all'area corrispondente"/> - <button label="Mappa" name="show_on_map_btn" tool_tip="Mostra l'area corrispondente nella Mappa del Mondo"/> + <button label="Informazioni" name="info_btn" tool_tip="Mostra informazioni sul luogo preferito"/> + <button label="Teleport" name="teleport_btn" tool_tip="Teleport alla zona corrispondente"/> + <button label="Mappa" name="show_on_map_btn" tool_tip="Mostra la zona corrispondente nella mappa del Mondo"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_place_profile.xml b/indra/newview/skins/default/xui/it/panel_place_profile.xml index 03716ba4c5..9a38909d47 100644 --- a/indra/newview/skins/default/xui/it/panel_place_profile.xml +++ b/indra/newview/skins/default/xui/it/panel_place_profile.xml @@ -1,99 +1,107 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="place_profile"> - <string name="on" value="On"/> - <string name="off" value="Off"/> + <string name="on" value="Attivo"/> + <string name="off" value="Disattivato"/> <string name="anyone" value="Chiunque"/> <string name="available" value="disponibile"/> <string name="allocated" value="assegnato"/> - <string name="title_place" value="Profilo del luogo"/> - <string name="title_teleport_history" value="Cronologia dei Teleport"/> - <string name="not_available" value="(N\D)"/> + <string name="title_place" value="Profilo del posto"/> + <string name="title_teleport_history" value="Cronologia Teleport"/> + <string name="not_available" value="(non pert.)"/> <string name="unknown" value="(sconosciuto)"/> - <string name="public" value="(publico)"/> + <string name="public" value="(pubblico)"/> <string name="none_text" value="(nessuno)"/> - <string name="sale_pending_text" value="(Vendita in attesa di)"/> - <string name="group_owned_text" value="(Gruppo posseduto)"/> + <string name="sale_pending_text" value="(In corso di vendita)"/> + <string name="group_owned_text" value="(Di proprietà di un gruppo)"/> <string name="price_text" value="L$"/> <string name="area_text" value="m²"/> - <string name="all_residents_text" value="Tutti i Residenti"/> + <string name="all_residents_text" value="Tutti i residenti"/> <string name="group_text" value="Gruppo"/> <string name="can_resell"> - La terra acquistata in questa regione può essere rivenduta. + Il terreno acquistato in questa regione può essere rivenduto. </string> <string name="can_not_resell"> - La terra acquistata in questa regione non può essere rivenduta. + Il terreno acquistato in questa regione non può essere rivenduto. </string> <string name="can_change"> - La terra acquistata in questa regione può essere unita o suddivisa. + Il terreno acquistato in questa regione può essere unito o suddiviso. </string> <string name="can_not_change"> - La terra acquistata in questa regione non può essere unita o suddivisa. + Il terreno acquistato in questa regione non può essere unito o suddiviso. </string> <string name="server_update_text"> - Informazioni su questo luogo non disponibili senza l'aggiornamento del server. + Informazioni sul luogo non disponibili senza l'aggiornamento del server. </string> <string name="server_error_text"> - Informazioni su questo luogo non sono disponibili ora, per favore riprova più tardi. + Informazioni su questo luogo non disponibili al momento, riprova più tardi. </string> <string name="server_forbidden_text"> - Informazioni su questo luogo non sono disponibili a cause delle restrizioni sull'accesso. Per favore verifica i tuoi permessi con il proprietario del parcel. + Informazioni su questo luogo non disponibili a causa delle limitazioni di accesso. Controlla i tuoi permessi con il proprietario del terreno. </string> <string name="acquired_date"> [wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local] </string> + <button name="back_btn" tool_tip="Indietro"/> <text name="title" value="Profilo del luogo"/> <scroll_container name="place_scroll"> <panel name="scrolling_panel"> <text name="owner_label" value="Proprietario:"/> <text name="maturity_value" value="sconosciuto"/> <accordion name="advanced_info_accordion"> - <accordion_tab name="parcel_characteristics_tab" title="Parcel"> + <accordion_tab name="parcel_characteristics_tab" title="Lotto"> <panel name="parcel_characteristics_panel"> - <text name="rating_label" value="Valutazione:"/> + <text name="rating_label" value="Categoria:"/> <text name="rating_value" value="sconosciuto"/> - <text name="voice_label" value="Voice:"/> - <text name="voice_value" value="On"/> + <text name="voice_label" value="Voce:"/> + <text name="voice_value" value="Attivo"/> <text name="fly_label" value="Vola:"/> - <text name="fly_value" value="On"/> + <text name="fly_value" value="Attivo"/> <text name="push_label" value="Spingi:"/> - <text name="push_value" value="Off"/> + <text name="push_value" value="Disattivato"/> <text name="build_label" value="Costruisci:"/> - <text name="build_value" value="On"/> - <text name="scripts_label" value="Scripts:"/> - <text name="scripts_value" value="On"/> - <text name="damage_label" value="Danno:"/> - <text name="damage_value" value="Off"/> - <button label="Info sul terreno" name="about_land_btn"/> + <text name="build_value" value="Attivo"/> + <text name="scripts_label" value="Script:"/> + <text name="scripts_value" value="Attivo"/> + <text name="damage_label" value="Danni:"/> + <text name="damage_value" value="Disattivato"/> + <button label="Informazioni sui terreni" name="about_land_btn"/> </panel> </accordion_tab> <accordion_tab name="region_information_tab" title="Regione"> <panel name="region_information_panel"> <text name="region_name_label" value="Regione:"/> - <text name="region_type_label" value="Scrivi:"/> - <text name="region_rating_label" value="Valutazione:"/> + <text name="region_name" value="Mooseland"/> + <text name="region_type_label" value="Tipo:"/> + <text name="region_type" value="Moose"/> + <text name="region_rating_label" value="Categoria:"/> + <text name="region_rating" value="Adulti"/> <text name="region_owner_label" value="Proprietario:"/> + <text name="region_owner" value="moose Van Moose"/> <text name="region_group_label" value="Gruppo:"/> - <button label="Regione/Proprietà immobiliare" name="region_info_btn"/> + <text name="region_group"> + The Mighty Moose of mooseville soundvillemoose + </text> + <button label="Regione/proprietà immobiliare" name="region_info_btn"/> </panel> </accordion_tab> <accordion_tab name="estate_information_tab" title="Proprietà immobiliare"> <panel name="estate_information_panel"> <text name="estate_name_label" value="Proprietà immobiliare:"/> - <text name="estate_rating_label" value="Valutazione:"/> - <text name="estate_owner_label" value="Proprietà:"/> + <text name="estate_rating_label" value="Categoria:"/> + <text name="estate_owner_label" value="Proprietario:"/> <text name="covenant_label" value="Regolamento:"/> </panel> </accordion_tab> <accordion_tab name="sales_tab" title="In vendita"> <panel name="sales_panel"> <text name="sales_price_label" value="Prezzo:"/> - <text name="area_label" value="Area:"/> + <text name="area_label" value="Zona:"/> <text name="traffic_label" value="Traffico:"/> <text name="primitives_label" value="Primitive:"/> - <text name="parcel_scripts_label" value="Scripts:"/> - <text name="terraform_limits_label" value="Limiti per Terraform:"/> + <text name="parcel_scripts_label" value="Script:"/> + <text name="terraform_limits_label" value="Limiti terraform:"/> <text name="subdivide_label" value="Suddividi/Unisci abilità:"/> - <text name="resale_label" value="Rivendi abilità:"/> + <text name="resale_label" value="Abilità rivendita:"/> <text name="sale_to_label" value="In vendita a:"/> </panel> </accordion_tab> diff --git a/indra/newview/skins/default/xui/it/panel_places.xml b/indra/newview/skins/default/xui/it/panel_places.xml index 8e50a8b9d9..bdb852ba62 100644 --- a/indra/newview/skins/default/xui/it/panel_places.xml +++ b/indra/newview/skins/default/xui/it/panel_places.xml @@ -1,14 +1,15 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Luoghi" name="places panel"> - <string name="landmarks_tab_title" value="MIEI LANDMARKS"/> - <string name="teleport_history_tab_title" value="TELEPORT PRECEDENTI"/> - <filter_editor label="Filtro Luoghi" name="Filter"/> + <string name="landmarks_tab_title" value="I MIEI PUNTI DI RIFERIMENTO"/> + <string name="teleport_history_tab_title" value="CRONOLOGIA TELEPORT"/> + <filter_editor label="Filtra i miei luoghi" name="Filter"/> <panel name="button_panel"> - <button label="Teleport" name="teleport_btn"/> + <button label="Teleport" name="teleport_btn" tool_tip="Teleport alla zona selezionata"/> <button label="Mappa" name="map_btn"/> - <button label="Modifica" name="edit_btn"/> - <button label="Chiudi" name="close_btn"/> - <button label="Cancella" name="cancel_btn"/> + <button label="Modifica" name="edit_btn" tool_tip="Modifica le informazioni del punto di riferimento"/> + <button label="▼" name="overflow_btn" tool_tip="Mostra opzioni addizionali"/> <button label="Salva" name="save_btn"/> + <button label="Annulla" name="cancel_btn"/> + <button label="Chiudi" name="close_btn"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/it/panel_preferences_advanced.xml index bb05d549cc..c24d3f656a 100644 --- a/indra/newview/skins/default/xui/it/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/it/panel_preferences_advanced.xml @@ -1,48 +1,32 @@ <?xml version="1.0" encoding="utf-8"?> -<panel name="advanced"> - <panel.string name="resolution_format"> - [RES_X] x [RES_Y] - </panel.string> +<panel label="Avanzata" name="advanced"> <panel.string name="aspect_ratio_text"> [NUM]:[DEN] </panel.string> - <check_box label="Chat a bolla" name="bubble_text_chat"/> - <color_swatch name="background" tool_tip="Scegli il colore delle vignette della chat"/> - <slider label="Opacità" name="bubble_chat_opacity"/> - <text name="AspectRatioLabel1" tool_tip="larghezza/altezza"> - Rapporto di visualizzazione - </text> - <combo_box name="aspect_ratio" tool_tip="larghezza/altezza"> - <combo_box.item label="4:3 (Monitor Standard)" name="item1"/> - <combo_box.item label="5:4 (1280x1024 LCD)" name="item2"/> - <combo_box.item label="8:5 (Widescreen)" name="item3"/> - <combo_box.item label="16:9 (Widescreen)" name="item4"/> - </combo_box> - <check_box label="Rilevamento automatico" name="aspect_auto_detect"/> - <text name="heading1"> - Fotocamera: - </text> - <slider label="Angolazione della visuale" name="camera_fov"/> + <panel.string name="middle_mouse"> + Pulsante centrale del mouse + </panel.string> + <slider label="Angolo di visuale" name="camera_fov"/> <slider label="Distanza" name="camera_offset_scale"/> <text name="heading2"> - Posizionamento automatico per: + Posizione automatica per: </text> <check_box label="Costruire/Modificare" name="edit_camera_movement" tool_tip="Utilizza il posizionamento automatico della fotocamera entrando o uscendo dalla modalità modifica"/> <check_box label="Aspetto fisico" name="appearance_camera_movement" tool_tip="Utilizza il posizionamento automatico della camera in modalità modifica"/> - <text name="heading3"> - Avatar: - </text> <check_box label="Mostra in modalità Mouselook" name="first_person_avatar_visible"/> <check_box label="Le frecce di direzione mi fanno sempre spostare" name="arrow_keys_move_avatar_check"/> <check_box label="Doppio click e tieni premuto per correre" name="tap_tap_hold_to_run"/> <check_box label="Consente il movimento delle labbra dell'avatar quando parla" name="enable_lip_sync"/> - <check_box label="Mostra errori degli script" name="show_script_errors"/> + <check_box label="Chat a bolla" name="bubble_text_chat"/> + <slider label="Opacità" name="bubble_chat_opacity"/> + <color_swatch name="background" tool_tip="Scegli il colore delle vignette della chat"/> + <check_box label="Mostra errori dello script in:" name="show_script_errors"/> <radio_group name="show_location"> - <radio_item label="In chat" name="0"/> - <radio_item label="In una finestra" name="1"/> + <radio_item label="Chat nei dintorni" name="0"/> + <radio_item label="Finestra separata" name="1"/> </radio_group> - <check_box label="Attiva/disattiva modalità microfono quando premo il tasto di comando Parla:" name="push_to_talk_toggle_check" tool_tip="In modalità "interruttore ON/OFF" premi il tasto una volta per attivare o disattivare il microfono. Quando non usi questa modalità, il microfono è attivo solo se tieni premuto il tasto di comando."/> + <check_box label="Attiva/disattiva la funzione parla quando premo:" name="push_to_talk_toggle_check" tool_tip="In modalità "interruttore ON/OFF" premi il tasto una volta per attivare o disattivare il microfono. Quando non usi questa modalità, il microfono è attivo solo se tieni premuto il tasto di comando."/> <line_editor label="Pulsante di comando della funzione Premi per parlare" name="modifier_combo"/> <button label="Imposta tasto" name="set_voice_hotkey_button"/> - <button label="Pulsante centrale del mouse" name="set_voice_middlemouse_button"/> + <button label="Pulsante centrale del mouse" name="set_voice_middlemouse_button" tool_tip="Reimposta sul pulsante centrale del mouse"/> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/it/panel_preferences_alerts.xml index e5d57cffbe..fd1fd57761 100644 --- a/indra/newview/skins/default/xui/it/panel_preferences_alerts.xml +++ b/indra/newview/skins/default/xui/it/panel_preferences_alerts.xml @@ -4,11 +4,11 @@ Avvisami: </text> <check_box label="Quando spendo o ottengo L$" name="notify_money_change_checkbox"/> - <check_box label="Quando i miei amici entrano o escono da SL" name="friends_online_notify_checkbox"/> + <check_box label="Quando i miei amici entrano o escono da Second Life" name="friends_online_notify_checkbox"/> <text name="show_label"> - Mostra sempre questi allarmi: + Mostra sempre: </text> <text name="dont_show_label"> - Non mostrare mai questi allarmi: + Non mostrare mai: </text> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_preferences_chat.xml b/indra/newview/skins/default/xui/it/panel_preferences_chat.xml index 582ffd43f3..28df9d2e43 100644 --- a/indra/newview/skins/default/xui/it/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/it/panel_preferences_chat.xml @@ -1,10 +1,16 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Text Chat" name="chat"> + <text name="font_size"> + Dimensioni caratteri: + </text> <radio_group name="chat_font_size"> - <radio_item label="Piccola" name="radio"/> - <radio_item label="Media" name="radio2"/> - <radio_item label="Grande" name="radio3"/> + <radio_item label="Piccola" name="radio" value="0"/> + <radio_item label="Media" name="radio2" value="1"/> + <radio_item label="Grande" name="radio3" value="2"/> </radio_group> + <text name="font_colors"> + Colori caratteri: + </text> <color_swatch label="Tuo" name="user"/> <text name="text_box1"> Io @@ -39,8 +45,14 @@ </text> <check_box initial_value="true" label="Simula la battitura tasti quando scrivi" name="play_typing_animation"/> <check_box label="Quando sono OFF-LINE, spediscimi gli IM in una e-mail" name="send_im_to_email"/> - <radio_group name="chat_window" tool_tip="Mostra i tuoi Instant Messages in finestre separate, o in una finestra con diverse tabelle (Requires restart)"> - <radio_item label="Finestre multiple" name="radio"/> - <radio_item label="Una finestra" name="radio2"/> + <text name="show_ims_in_label"> + Mostra gli IM in: + </text> + <text name="requires_restart_label"> + (richiede il riavvio) + </text> + <radio_group name="chat_window" tool_tip="Mostra i tuoi messaggi istantanei in diverse finestre, o in una finestra con più schede (richiede il riavvio)"> + <radio_item label="Finestre separate" name="radio" value="0"/> + <radio_item label="Schede" name="radio2" value="1"/> </radio_group> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_preferences_general.xml b/indra/newview/skins/default/xui/it/panel_preferences_general.xml index 7463c88d96..6bf857366b 100644 --- a/indra/newview/skins/default/xui/it/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/it/panel_preferences_general.xml @@ -40,9 +40,9 @@ Nome: </text> <radio_group name="Name_Tag_Preference"> - <radio_item label="Off" name="radio"/> - <radio_item label="On" name="radio2"/> - <radio_item label="Mostra brevemente" name="radio3"/> + <radio_item label="Off" name="radio" value="0"/> + <radio_item label="On" name="radio2" value="1"/> + <radio_item label="Mostra brevemente" name="radio3" value="2"/> </radio_group> <check_box label="Mostra il mio nome" name="show_my_name_checkbox1"/> <check_box initial_value="true" label="Nome in piccolo" name="small_avatar_names_checkbox"/> @@ -50,14 +50,17 @@ <text name="effects_color_textbox"> I miei effetti: </text> - <color_swatch label="" name="effect_color_swatch" tool_tip="Clicca per aprire la tavolozza dei colori"/> <text name="title_afk_text"> Pausa assenza: </text> - <spinner label="Assente dopo:" name="afk_timeout_spinner"/> - <text name="seconds_textbox"> - secondi - </text> + <color_swatch label="" name="effect_color_swatch" tool_tip="Clicca per aprire la tavolozza dei colori"/> + <combo_box label="Pausa assenza:" name="afk"> + <combo_box.item label="2 minuti" name="item0"/> + <combo_box.item label="5 minuti" name="item1"/> + <combo_box.item label="10 minuti" name="item2"/> + <combo_box.item label="30 minuti" name="item3"/> + <combo_box.item label="mai" name="item4"/> + </combo_box> <text name="text_box3"> Risposta in modalità occupato: </text> diff --git a/indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml index 647df27633..d02a794219 100644 --- a/indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Grafica" name="Display panel"> <text name="UI Size:"> - misura UI: + Dimensioni UI: </text> <text name="QualitySpeed"> Qualità e velocità: @@ -87,8 +87,8 @@ Dettagli illuminazione: </text> <radio_group name="LightingDetailRadio"> - <radio_item label="Solo il sole e la luna" name="SunMoon"/> - <radio_item label="Luci locali" name="LocalLights"/> + <radio_item label="Solo il sole e la luna" name="SunMoon" value="0"/> + <radio_item label="Luci locali" name="LocalLights" value="1"/> </radio_group> <text name="TerrainDetailText"> Dettagli terreno: @@ -99,7 +99,7 @@ </radio_group> </panel> <button label="Applica" label_selected="Applica" name="Apply"/> - <button label="Resetta" left="110" name="Defaults" width="190"/> - <button label="Avanzato" name="Advanced"/> + <button label="Reimposta" left="110" name="Defaults" width="190"/> + <button label="Avanzate" name="Advanced"/> <button label="Hardware" label_selected="Hardware" name="GraphicsHardwareButton"/> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/it/panel_preferences_privacy.xml index c84edbb47e..1002195baf 100644 --- a/indra/newview/skins/default/xui/it/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/it/panel_preferences_privacy.xml @@ -1,27 +1,27 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Comunicazione" name="im"> <panel.string name="log_in_to_change"> - log in per cambiare + accedi per cambiare </panel.string> - <button label="Pulisci la cronologia" name="clear_cache"/> + <button label="Pulisci la cronologia" name="clear_cache" tool_tip="Elimina immagine login, ultimo luogo, cronologia teleport, web e texture cache"/> <text name="cache_size_label_l"> - (Luoghi, immagini, web, cronologia del search) + (Luoghi, immagini, web, cronologia ricerche) </text> <check_box label="Solo amici e gruppi mi vedono online" name="online_visibility"/> <check_box label="Solo amici e gruppi possono chiamarmi o mandarmi IM" name="voice_call_friends_only_check"/> - <check_box label="Spegnere il microfono quando chiudi le chiamate" name="auto_disengage_mic_check"/> - <check_box label="Accetta cookies" name="cookies_enabled"/> - <check_box label="Permettere Media Autoplay" name="autoplay_enabled"/> + <check_box label="Spegnere il microfono alla chiusura delle chiamate" name="auto_disengage_mic_check"/> + <check_box label="Accetta cookie" name="cookies_enabled"/> + <check_box label="Consenti riproduzione multimediale automatica" name="autoplay_enabled"/> <text name="Logs:"> - Logs: + Registri: </text> - <check_box label="Salvare le ultime chat logs nel mio computer" name="log_nearby_chat"/> - <check_box label="Salvare gli IM logs nel mio computer" name="log_instant_messages"/> - <check_box label="Aggiungere orario" name="show_timestamps_check_im"/> + <check_box label="Salva i registri delle conversazioni sul mio computer" name="log_nearby_chat"/> + <check_box label="Salva i registri degli IM nel mio computer" name="log_instant_messages"/> + <check_box label="Riporta data e ora" name="show_timestamps_check_im"/> <line_editor left="288" name="log_path_string" right="-20"/> <text name="log_path_desc"> - Luoghi delle logs + Ubicazione dei registri </text> - <button label="Browse" label_selected="Browse" name="log_path_button" width="130"/> - <button label="Bloccare lista" name="block_list"/> + <button label="Sfoglia" label_selected="Sfoglia" name="log_path_button" width="130"/> + <button label="Lista dei bloccati" name="block_list"/> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_preferences_setup.xml b/indra/newview/skins/default/xui/it/panel_preferences_setup.xml index 17257a7cb8..cedf93beed 100644 --- a/indra/newview/skins/default/xui/it/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/it/panel_preferences_setup.xml @@ -1,46 +1,49 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Input & Camera" name="Input panel"> - <button bottom_delta="-40" label="Altri Dispositivi" name="joystick_setup_button" width="165"/> +<panel label="Impostazione" name="Input panel"> + <button bottom_delta="-40" label="Altri dispositivi" name="joystick_setup_button" width="165"/> <text name="Mouselook:"> - Mouselook: + Soggettiva: </text> <text name=" Mouse Sensitivity"> - Sensibilità del Mouse + Sensibilità mouse </text> <check_box label="Inverti" name="invert_mouse"/> <text name="Network:"> - Network: + Rete: </text> <text name="Maximum bandwidth"> - Banda Massima + Capacità massima di banda </text> <text name="text_box2"> kbps </text> - <check_box label="Custom port" name="connection_port_enabled"/> - <spinner label="Port number:" name="web_proxy_port"/> + <check_box label="Porta personalizzata" name="connection_port_enabled"/> + <spinner label="Numero porta:" name="connection_port"/> <text name="cache_size_label_l"> - Cache size + Dimensioni cache </text> <text name="text_box5"> MB </text> - <button label="Browse" label_selected="Browse" name="set_cache"/> - <button label="Resetta" label_selected="Imposta" name="reset_cache"/> <text name="Cache location"> - Cache location + Ubicazione della cache: </text> + <button label="Sfoglia" label_selected="Sfoglia" name="set_cache"/> + <button label="Reimposta" label_selected="Reimposta" name="reset_cache"/> <text name="Web:"> Web: </text> <radio_group name="use_external_browser"> - <radio_item label="Usa il built-in browser" name="internal" tool_tip="Usa il built-in web browser per aiuto, web links, etc. Questo browser apre come una nuova finestra all'interno [APP_NAME]."/> - <radio_item label="Usa il mio browser (IE, Firefox)" name="external" tool_tip="Usa il default system web browser per aiuto, web links, etc. Non raccomandato se utilizzi lo schermo pieno(full screen)."/> + <radio_item label="Usa il mio browser (IE, Firefox, Safari)" name="external" tool_tip="Utilizza il browser Web predefinito di sistema per l'aiuto, per i link Web e così via. Sconsigliato durante l'esecuzione a tutto schermo." value="1"/> + <radio_item label="Utilizza il browser Web integrato" name="internal" tool_tip="Utilizza il browser Web integrato per l'aiuto, per i link Web e così via. Questo browser si apre in una nuova finestra in [APP_NAME]." value=""/> </radio_group> - <check_box initial_value="false" label="Web proxy" name="web_proxy_enabled"/> - <line_editor name="web_proxy_editor" tool_tip="Nome o indirizzo IP del proxy che vorresti usare"/> - <button label="Browse" label_selected="Browse" name="set_proxy"/> + <check_box initial_value="vero" label="Abilita plugin" name="browser_plugins_enabled"/> + <check_box initial_value="vero" label="Accetta cookie" name="cookies_enabled"/> + <check_box initial_value="vero" label="Abilita Javascript" name="browser_javascript_enabled"/> + <check_box initial_value="false" label="Abilita proxy Web" name="web_proxy_enabled"/> <text name="Proxy location"> - Proxy location + Ubicazione proxy: </text> + <line_editor name="web_proxy_editor" tool_tip="Il nome o l'indirizzo IP del proxy che preferisci usare"/> + <spinner label="Numero porta:" name="web_proxy_port"/> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_preferences_sound.xml b/indra/newview/skins/default/xui/it/panel_preferences_sound.xml index 2ac60412ff..2842b6a8aa 100644 --- a/indra/newview/skins/default/xui/it/panel_preferences_sound.xml +++ b/indra/newview/skins/default/xui/it/panel_preferences_sound.xml @@ -1,14 +1,21 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Suoni" name="Preference Media panel"> <slider label="Comando volume centrale" name="System Volume"/> - <check_box initial_value="true" label="Spegni suono se minimizzato" name="mute_when_minimized"/> - <slider label="Ambiente" name="Wind Volume"/> + <check_box initial_value="true" label="Disattiva audio quando minimizzato" name="mute_when_minimized"/> <slider label="Pulsanti" name="UI Volume"/> - <slider label="Multimediale" name="Media Volume"/> + <slider label="Ambiente" name="Wind Volume"/> <slider label="Effetti sonori" name="SFX Volume"/> <slider label="Musica in streaming" name="Music Volume"/> - <check_box label="Voce" name="enable_voice_check"/> - <slider label="Voice" name="Voice Volume"/> + <check_box label="Abilitato" name="music_enabled"/> + <slider label="Multimediale" name="Media Volume"/> + <check_box label="Abilitato" name="enable_media"/> + <slider label="Chat vocale" name="Voice Volume"/> + <check_box label="Abilitato" name="enable_voice_check"/> + <check_box label="Consenti riproduzione multimediale automatica" name="media_auto_play_btn" tool_tip="Seleziona qui per consentire la riproduzione multimediale automatica" value="vero"/> + <check_box label="Riproduci media in uso da altri avatar" name="media_show_on_others_btn" tool_tip="Deseleziona qui per nascondere i media in uso dagli altri avatar nei dintorni" value="vero"/> + <text name="voice_chat_settings"> + Impostazioni Chat vocale + </text> <text name="Listen from"> Ascolta da: </text> diff --git a/indra/newview/skins/default/xui/it/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/it/panel_prim_media_controls.xml index 9e95fbc600..ef7aaf2e8c 100644 --- a/indra/newview/skins/default/xui/it/panel_prim_media_controls.xml +++ b/indra/newview/skins/default/xui/it/panel_prim_media_controls.xml @@ -1,6 +1,47 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="MediaControls"> + <string name="min_width"> + 300 + </string> + <string name="min_height"> + 75 + </string> + <string name="zoom_medium_padding"> + 1.1 + </string> + <string name="top_world_view_avoid_zone"> + 50 + </string> + <layout_stack name="progress_indicator_area"> + <panel name="media_progress_indicator"> + <progress_bar name="media_progress_bar" tool_tip="L'elemento multimediale è in caricamento"/> + </panel> + </layout_stack> <layout_stack name="media_controls"> + <layout_panel name="back"> + <button name="back_btn" tool_tip="Naviga indietro"/> + </layout_panel> + <layout_panel name="fwd"> + <button name="fwd_btn" tool_tip="Naviga avanti"/> + </layout_panel> + <layout_panel name="home"> + <button name="home_btn" tool_tip="Home page"/> + </layout_panel> + <layout_panel name="media_stop"> + <button name="media_stop_btn" tool_tip="Interrompi supporto"/> + </layout_panel> + <layout_panel name="reload"> + <button name="reload_btn" tool_tip="Ricarica"/> + </layout_panel> + <layout_panel name="stop"> + <button name="stop_btn" tool_tip="Interrompi caricamento"/> + </layout_panel> + <layout_panel name="play"> + <button name="play_btn" tool_tip="Riproduci media"/> + </layout_panel> + <layout_panel name="pause"> + <button name="pause_btn" tool_tip="Pausa supporto"/> + </layout_panel> <layout_panel name="media_address"> <line_editor name="media_address_url" tool_tip="URL multimedia"/> <layout_stack name="media_address_url_icons"> @@ -15,14 +56,24 @@ <layout_panel name="media_play_position"> <slider_bar initial_value="0.5" name="media_play_slider" tool_tip="Avanzamento riproduzione filmato"/> </layout_panel> + <layout_panel name="skip_back"> + <button name="skip_back_btn" tool_tip="Passo indietro"/> + </layout_panel> + <layout_panel name="skip_forward"> + <button name="skip_forward_btn" tool_tip="Passo avanti"/> + </layout_panel> <layout_panel name="media_volume"> <button name="media_mute_button" tool_tip="Silenzia questo elemento multimediale"/> <slider name="volume_slider" tool_tip="Volume multimedia"/> </layout_panel> - </layout_stack> - <layout_stack> - <panel name="media_progress_indicator"> - <progress_bar name="media_progress_bar" tool_tip="L'elemento multimediale è in caricamento"/> - </panel> + <layout_panel name="zoom_frame"> + <button name="zoom_frame_btn" tool_tip="Zoom nel media"/> + </layout_panel> + <layout_panel name="close"> + <button name="close_btn" tool_tip="Zoom indietro"/> + </layout_panel> + <layout_panel name="new_window"> + <button name="new_window_btn" tool_tip="Apri URL nel browser"/> + </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_profile.xml b/indra/newview/skins/default/xui/it/panel_profile.xml index 837aa4ac65..9927ecbb88 100644 --- a/indra/newview/skins/default/xui/it/panel_profile.xml +++ b/indra/newview/skins/default/xui/it/panel_profile.xml @@ -12,37 +12,41 @@ </string> <string name="my_account_link_url" value="http://secondlife.com/my/account/index.php?lang=it-IT"/> <string name="no_partner_text" value="Nessuno"/> + <string name="no_group_text" value="Nessuno"/> <string name="RegisterDateFormat"> [REG_DATE] ([AGE]) </string> - <scroll_container name="profile_scroll"> - <panel name="scroll_content_panel"> - <panel name="second_life_image_panel"> - <text name="title_sl_descr_text" value="[SECOND_LIFE]:"/> - </panel> - <panel name="first_life_image_panel"> - <text name="title_rw_descr_text" value="Mondo Reale:"/> - </panel> - <text name="me_homepage_text"> - Homepage: - </text> - <text name="title_member_text" value="Membro dal:"/> - <text name="title_acc_status_text" value="Stato dell'Account:"/> - <text name="acc_status_text" value="Resident. No payment info on file."/> - <text name="title_partner_text" value="Partner:"/> - <text name="title_groups_text" value="Gruppi:"/> - </panel> - </scroll_container> - <panel name="profile_buttons_panel"> - <button label="Aggiungi Amico" name="add_friend" tool_tip="Offri amicizia ad un residente"/> - <button label="IM" name="im" tool_tip="Apri una sessione instant message"/> - <button label="Chiama" name="call" tool_tip="Chiama questo residente"/> - <button label="Mappa" name="show_on_map_btn" tool_tip="Mostra il residente sulla mappa"/> - <button label="Teleport" name="teleport" tool_tip="Offri teleport"/> - <button label="▼" name="overflow_btn" tool_tip="Paga o condividi l'inventario con il residente"/> - </panel> - <panel name="profile_me_buttons_panel"> - <button label="Modifica Profilo" name="edit_profile_btn"/> - <button label="Modifica Aspetto" name="edit_appearance_btn"/> - </panel> + <layout_stack name="layout"> + <layout_panel name="profile_stack"> + <scroll_container name="profile_scroll"> + <panel name="profile_scroll_panel"> + <panel name="second_life_image_panel"> + <text name="title_sl_descr_text" value="[SECOND_LIFE]:"/> + </panel> + <panel name="first_life_image_panel"> + <text name="title_rw_descr_text" value="Mondo reale:"/> + </panel> + <text name="title_member_text" value="Residente dal:"/> + <text name="title_acc_status_text" value="Stato account:"/> + <text name="title_partner_text" value="Partner:"/> + <panel name="partner_data_panel"> + <name_box initial_value="(recupero)" name="partner_text"/> + </panel> + <text name="title_groups_text" value="Gruppi:"/> + </panel> + </scroll_container> + </layout_panel> + <layout_panel name="profile_buttons_panel"> + <button label="Aggiungi amico" name="add_friend" tool_tip="Offri amicizia a questo residente"/> + <button label="IM" name="im" tool_tip="Apri una sessione messaggio istantaneo"/> + <button label="Chiama" name="call" tool_tip="Chiama questo residente"/> + <button label="Mappa" name="show_on_map_btn" tool_tip="Mostra il residente sulla mappa"/> + <button label="Teleport" name="teleport" tool_tip="Offri teleport"/> + <button label="▼" name="overflow_btn" tool_tip="Paga del denaro o condividi qualcosa dall'inventario con il residente"/> + </layout_panel> + <layout_panel name="profile_me_buttons_panel"> + <button label="Modifica profilo" name="edit_profile_btn" tool_tip="Modifica le tue informazioni personali"/> + <button label="Modifica aspetto fisico" name="edit_appearance_btn" tool_tip="Crea/modifica il tuo aspetto: parti del corpo, abiti ecc."/> + </layout_panel> + </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_profile_view.xml b/indra/newview/skins/default/xui/it/panel_profile_view.xml index bf89a3e6f6..20c62d4ceb 100644 --- a/indra/newview/skins/default/xui/it/panel_profile_view.xml +++ b/indra/newview/skins/default/xui/it/panel_profile_view.xml @@ -6,11 +6,11 @@ <string name="status_offline"> Offline </string> - <text_editor name="user_name" value="(Caricando...)"/> + <text_editor name="user_name" value="(Caricamento in corso...)"/> <text name="status" value="Online"/> <tab_container name="tabs"> <panel label="PROFILO" name="panel_profile"/> - <panel label="PREFERITI" name="panel_picks"/> - <panel label="NOTE & PRIVACY" name="panel_notes"/> + <panel label="LUOGHI CONSIGLIATI" name="panel_picks"/> + <panel label="NOTE E PRIVACY" name="panel_notes"/> </tab_container> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_region_covenant.xml b/indra/newview/skins/default/xui/it/panel_region_covenant.xml index f35b451ac1..0d3117ca7a 100644 --- a/indra/newview/skins/default/xui/it/panel_region_covenant.xml +++ b/indra/newview/skins/default/xui/it/panel_region_covenant.xml @@ -31,7 +31,7 @@ della proprietà. </text> <text bottom_delta="-36" name="covenant_instructions"> - Trascina ed inserisci una notecard per cambiare i Covenant di questa proprietà immobiliare. + Trascina e incolla un biglietto per cambiare il Regolamento di questa proprietà. </text> <text name="region_section_lbl"> Regione diff --git a/indra/newview/skins/default/xui/it/panel_region_debug.xml b/indra/newview/skins/default/xui/it/panel_region_debug.xml index 9e81d42410..45b3a016f4 100644 --- a/indra/newview/skins/default/xui/it/panel_region_debug.xml +++ b/indra/newview/skins/default/xui/it/panel_region_debug.xml @@ -26,9 +26,9 @@ <text name="options_text_lbl"> Opzioni: </text> - <check_box label="Con scripts" name="return_scripts" tool_tip="Ritorna solo gli oggetti che hanno scripts"/> - <check_box label="Sulla terra di qualcun'altro" name="return_other_land" tool_tip="Restituisci solo gli oggetti che sono in terreni appartenenti a qualcun altro"/> - <check_box label="In ogni regione di questa proprietà" name="return_estate_wide" tool_tip="Restituisci tutti gli oggetti nelle varie regioni che costituiscono l'insieme dei possedimenti terrieri"/> + <check_box label="Con script" name="return_scripts" tool_tip="Restituisci solo oggetti che hanno script"/> + <check_box label="Sul terreno di un altro residente" name="return_other_land" tool_tip="Restituisci solo gli oggetti che sono in terreni appartenenti a qualcun altro"/> + <check_box label="In tutte le regioni di questa proprietà" name="return_estate_wide" tool_tip="Restituisci tutti gli oggetti nelle varie regioni che costituiscono l'insieme dei possedimenti terrieri"/> <button label="Restituisci" name="return_btn"/> <button label="Visualizza l'elenco dei maggiori collidenti..." name="top_colliders_btn" tool_tip="Elenco degli oggetti che stanno potenzialmente subendo le maggiori collisioni" width="280"/> <button label="?" left="297" name="top_colliders_help"/> diff --git a/indra/newview/skins/default/xui/it/panel_region_estate.xml b/indra/newview/skins/default/xui/it/panel_region_estate.xml index 35d683aa9b..8d3f096c4b 100644 --- a/indra/newview/skins/default/xui/it/panel_region_estate.xml +++ b/indra/newview/skins/default/xui/it/panel_region_estate.xml @@ -1,8 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Proprietà immobiliari" name="Estate"> <text name="estate_help_text"> - I cambiamenti alle impostazioni in questa finestra -avranno effetto su tutte le regioni della proprietà. + Le modifiche apportate in questa scheda saranno valide per tutte le regioni in questa proprietà. </text> <text name="estate_text" width="140"> Proprietà immobiliari: @@ -24,10 +23,10 @@ avranno effetto su tutte le regioni della proprietà. <check_box label="Permetti accesso pubblico" name="externally_visible_check"/> <button label="?" name="externally_visible_help"/> <text name="Only Allow"> - Consenti l'accesso soltanto ai residenti verificati tramite: + Limita l'accesso agli account verificati con: </text> - <check_box label="Informazioni di pagamento in archivio" name="limit_payment" tool_tip="Espelli residenti non identificati"/> - <check_box label="Verifica età" name="limit_age_verified" tool_tip="Espelli i residenti che non hanno verificato l'età. Vedi [SUPPORT_SITE] per maggiori informazioni."/> + <check_box label="Informazioni di pagamento in archivio" name="limit_payment" tool_tip="Espelli i residenti non identificati"/> + <check_box label="Verifica età" name="limit_age_verified" tool_tip="Espelli i residenti che non hanno la loro età verificata. Vedi [SUPPORT_SITE] per maggiori informazioni."/> <check_box label="Permetti la chat voice" name="voice_chat_check"/> <button label="?" name="voice_chat_help"/> <check_box label="Permetti teleport diretto" name="allow_direct_teleport"/> @@ -40,7 +39,7 @@ avranno effetto su tutte le regioni della proprietà. </string> <button label="?" name="abuse_email_address_help"/> <button label="Applica" name="apply_btn"/> - <button font="SansSerifSmall" label="Espelli persona dalle proprietà..." name="kick_user_from_estate_btn"/> + <button font="SansSerifSmall" label="Espelli residente dalla proprietà..." name="kick_user_from_estate_btn"/> <button font="SansSerifSmall" label="Manda un messaggio di le proprietà..." name="message_estate_btn"/> <text name="estate_manager_label"> Manager delle proprietà: diff --git a/indra/newview/skins/default/xui/it/panel_region_general.xml b/indra/newview/skins/default/xui/it/panel_region_general.xml index 8c31172ab5..7d8b346c17 100644 --- a/indra/newview/skins/default/xui/it/panel_region_general.xml +++ b/indra/newview/skins/default/xui/it/panel_region_general.xml @@ -3,51 +3,41 @@ <text name="region_text_lbl"> Regione: </text> - <text name="region_text" left="70"> + <text left="70" name="region_text"> sconosciuta </text> <text name="version_channel_text_lbl"> Versione: </text> - <text name="version_channel_text" left="70"> + <text left="70" name="version_channel_text"> sconosciuta </text> <text name="region_type_lbl"> Tipo: </text> - <text name="region_type" left="70"> + <text left="70" name="region_type"> sconosciuto </text> <check_box label="Proibisci la modifica del terreno" name="block_terraform_check"/> - <button label="?" name="terraform_help"/> <check_box label="Impedisci il volo" name="block_fly_check"/> - <button label="?" name="fly_help"/> <check_box label="Abilita i danni" name="allow_damage_check"/> - <button label="?" name="damage_help"/> <check_box label="Limita gli urti" name="restrict_pushobject"/> - <button label="?" name="restrict_pushobject_help"/> <check_box label="Abilita la rivendita del terreno" name="allow_land_resell_check"/> - <button label="?" name="land_resell_help" left="260"/> <check_box label="Abilita unione/suddivisione del terreno" name="allow_parcel_changes_check"/> - <button label="?" name="parcel_changes_help" left="260" /> <check_box label="Proibisci che il terreno appaia nelle ricerche" name="block_parcel_search_check" tool_tip="Permetti che le persone vedano questa regione e le sue suddivisioni nei risultati delle ricerche"/> - <button label="?" name="parcel_search_help" left="260"/> - <spinner label="Limite massimo di avatar" name="agent_limit_spin" label_width="135" width="190"/> - <button label="?" name="agent_limit_help"/> - <spinner label="Bonus di oggetti" name="object_bonus_spin" label_width="135" width="190"/> - <button label="?" name="object_bonus_help"/> + <spinner label="Limite massimo di avatar" label_width="135" name="agent_limit_spin" width="190"/> + <spinner label="Bonus di oggetti" label_width="135" name="object_bonus_spin" width="190"/> <text label="Maturità" name="access_text" width="120"> Categoria di accesso: </text> - <combo_box label="Mature" name="access_combo" left="126" width="74"> - <combo_box.item label="Adult" name="Adult"/> - <combo_box.item label="Mature" name="Mature"/> - <combo_box.item label="PG" name="PG"/> - </combo_box> - <button label="?" name="access_help"/> + <icons_combo_box label="Mature" left="126" name="access_combo" width="74"> + <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="PG" name="PG" value="13"/> + </icons_combo_box> <button label="Applica" name="apply_btn"/> - <button label="Teletrasporta a casa un utente..." name="kick_btn"/> - <button label="Teletrasporta a casa tutti gli utenti..." name="kick_all_btn"/> + <button label="Teleport a casa un residente..." name="kick_btn"/> + <button label="Teleport a casa tutti i residenti..." name="kick_all_btn"/> <button label="Invia messaggio alla regione..." name="im_btn"/> <button label="Gestisci snodo di teleport..." name="manage_telehub_btn" width="210"/> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_region_general_layout.xml b/indra/newview/skins/default/xui/it/panel_region_general_layout.xml new file mode 100644 index 0000000000..232cd0c387 --- /dev/null +++ b/indra/newview/skins/default/xui/it/panel_region_general_layout.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Regione" name="General"> + <text name="region_text_lbl"> + Regione: + </text> + <text name="region_text"> + sconosciuto + </text> + <text name="version_channel_text_lbl"> + Versione: + </text> + <text name="version_channel_text"> + sconosciuto + </text> + <text name="region_type_lbl"> + Tipo: + </text> + <text name="region_type"> + sconosciuto + </text> + <check_box label="Impedisci Terraform" name="block_terraform_check"/> + <check_box label="Impedisci volo" name="block_fly_check"/> + <check_box label="Permetti danni" name="allow_damage_check"/> + <check_box label="Limita spinte" name="restrict_pushobject"/> + <check_box label="Permetti la rivendita dei terreni" name="allow_land_resell_check"/> + <check_box label="Permetti l'unione/divisione del terreno" name="allow_parcel_changes_check"/> + <check_box label="Impedisci la visualizzazione del terreno nelle ricerche" name="block_parcel_search_check" tool_tip="Permetti alla gente di vedere questa regione e i suoi lotti nei risultati dellla ricerca"/> + <spinner label="N. massimo di avatar" name="agent_limit_spin"/> + <spinner label="Bonus oggetto" name="object_bonus_spin"/> + <text label="Categoria di accesso" name="access_text"> + Categoria: + </text> + <combo_box label="Moderato" name="access_combo"> + <combo_box.item label="Adulto" name="Adult"/> + <combo_box.item label="Moderato" name="Mature"/> + <combo_box.item label="Generale" name="PG"/> + </combo_box> + <button label="Applica" name="apply_btn"/> + <button label="Teleport a casa un residente..." name="kick_btn"/> + <button label="Teleport a casa tutti i residenti..." name="kick_all_btn"/> + <button label="Invia messaggio alla regione..." name="im_btn"/> + <button label="Gestisci telehub..." name="manage_telehub_btn"/> +</panel> diff --git a/indra/newview/skins/default/xui/it/panel_region_texture.xml b/indra/newview/skins/default/xui/it/panel_region_texture.xml index 23d6915a2f..1337ed18ca 100644 --- a/indra/newview/skins/default/xui/it/panel_region_texture.xml +++ b/indra/newview/skins/default/xui/it/panel_region_texture.xml @@ -25,16 +25,16 @@ Range di elevazione della texture </text> <text name="height_text_lbl6"> - Sud Ovest + Nordovest </text> <text name="height_text_lbl7"> - Nord Ovest + Nordest </text> <text name="height_text_lbl8"> - Sud Est + Sudovest </text> <text name="height_text_lbl9"> - Nord Est + Sudest </text> <spinner label="Bassa" name="height_start_spin_0"/> <spinner label="Bassa" name="height_start_spin_1"/> @@ -45,10 +45,10 @@ <spinner label="Alta" name="height_range_spin_2"/> <spinner label="Alta" name="height_range_spin_3"/> <text name="height_text_lbl10"> - Questi valori riproducono l'insieme della gamma delle textures superiori. + Questi valori indicano la gamma di miscele per le texture di cui sopra. </text> <text name="height_text_lbl11"> - Misurato in metri, il valore MINIMO è l'altezza MASSIMA della Texture n°1, e il valore MASSIMO è l'altezza MINIMA della Texture n°4. + Misurato in metri, il valore BASSO è la MASSIMA altezza della texture n. 1, e il valore ALTO è l'altezza MINIMA della texture n. 4. </text> <text name="height_text_lbl12"> Texture #1, e il valore più ALTO all'altezza MINIMA della Texture #4. diff --git a/indra/newview/skins/default/xui/it/panel_script_ed.xml b/indra/newview/skins/default/xui/it/panel_script_ed.xml index a98a88950c..f550aee98e 100644 --- a/indra/newview/skins/default/xui/it/panel_script_ed.xml +++ b/indra/newview/skins/default/xui/it/panel_script_ed.xml @@ -1,43 +1,43 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="script panel"> <panel.string name="loading"> - Caricando... + Caricamento in corso... </panel.string> <panel.string name="can_not_view"> - Non puoi vedere o modificare questo script, perchè è impostato come "no copy". Necesiti tutti i permessi per vedere o modificare lo script dentro un oggetto.. + Per impostazione, questo script non può essere visualizzato né modificato. Per visualizzare o modificare uno script all'interno di un oggetto, devi avere i necessari diritti di modifica. </panel.string> <panel.string name="public_objects_can_not_run"> - Oggetti Pubblici non possono attivare scripts + Gli oggetti pubblici non possono eseguire gli script </panel.string> <panel.string name="script_running"> - Attivando + In esecuzione </panel.string> <panel.string name="Title"> Script: [NAME] </panel.string> <text_editor name="Script Editor"> - Caricando... + Caricamento in corso... </text_editor> <button label="Salva" label_selected="Salva" name="Save_btn"/> - <combo_box label="Inserire..." name="Insert..."/> + <combo_box label="Inserisci..." name="Insert..."/> <menu_bar name="script_menu"> <menu label="File" name="File"> <menu_item_call label="Salva" name="Save"/> - <menu_item_call label="Annulla tutti i cambiamenti" name="Revert All Changes"/> + <menu_item_call label="Annulla tutte le modifiche" name="Revert All Changes"/> </menu> <menu label="Modifica" name="Edit"> - <menu_item_call label="Slaccia" name="Undo"/> + <menu_item_call label="Annulla" name="Undo"/> <menu_item_call label="Rifai" name="Redo"/> <menu_item_call label="Taglia" name="Cut"/> <menu_item_call label="Copia" name="Copy"/> <menu_item_call label="Incolla" name="Paste"/> - <menu_item_call label="Seleziona Tutto" name="Select All"/> + <menu_item_call label="Seleziona tutto" name="Select All"/> <menu_item_call label="Deseleziona" name="Deselect"/> <menu_item_call label="Cerca / Sostituisci..." name="Search / Replace..."/> </menu> - <menu label="Aiuto" name="Help"> + <menu label="Guida" name="Help"> <menu_item_call label="Aiuto..." name="Help..."/> - <menu_item_call label="Aiuto nella tastiera..." name="Keyword Help..."/> + <menu_item_call label="Aiuto con parole chiave..." name="Keyword Help..."/> </menu> </menu_bar> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_script_limits_my_avatar.xml b/indra/newview/skins/default/xui/it/panel_script_limits_my_avatar.xml new file mode 100644 index 0000000000..98096a391a --- /dev/null +++ b/indra/newview/skins/default/xui/it/panel_script_limits_my_avatar.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="IL MIO AVATAR" name="script_limits_my_avatar_panel"> + <text name="script_memory"> + Uso degli script avatar + </text> + <text name="loading_text"> + Caricamento in corso... + </text> + <scroll_list name="scripts_list"> + <scroll_list.columns label="Dimensione (kb)" name="size"/> + <scroll_list.columns label="URL" name="urls"/> + <scroll_list.columns label="Nome dell'oggetto" name="name"/> + <scroll_list.columns label="Posizione" name="location"/> + </scroll_list> + <button label="Aggiorna lista" name="refresh_list_btn"/> +</panel> diff --git a/indra/newview/skins/default/xui/it/panel_script_limits_region_memory.xml b/indra/newview/skins/default/xui/it/panel_script_limits_region_memory.xml new file mode 100644 index 0000000000..df7b0eae1c --- /dev/null +++ b/indra/newview/skins/default/xui/it/panel_script_limits_region_memory.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="MEMORIA DELLA REGIONE" name="script_limits_region_memory_panel"> + <text name="script_memory"> + Memoria dello script del lotto + </text> + <text name="loading_text"> + Caricamento in corso... + </text> + <scroll_list name="scripts_list"> + <scroll_list.columns label="Dimensione (kb)" name="size"/> + <scroll_list.columns label="URL" name="urls"/> + <scroll_list.columns label="Nome dell'oggetto" name="name"/> + <scroll_list.columns label="Proprietario dell'oggetto" name="owner"/> + <scroll_list.columns label="Lotto" name="parcel"/> + <scroll_list.columns label="Posizione" name="location"/> + </scroll_list> + <button label="Aggiorna lista" name="refresh_list_btn"/> + <button label="In evidenza" name="highlight_btn"/> + <button label="Restituisci" name="return_btn"/> +</panel> 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 06bc51f5db..846dcb69f0 100644 --- a/indra/newview/skins/default/xui/it/panel_side_tray.xml +++ b/indra/newview/skins/default/xui/it/panel_side_tray.xml @@ -2,25 +2,28 @@ <!-- Side tray cannot show background because it is always partially on screen to hold tab buttons. --> <side_tray name="sidebar"> - <sidetray_tab description="Casa." name="sidebar_home"> + <sidetray_tab description="Apri/chiudi la barra laterale." name="sidebar_openclose" tab_title="Apri/chiudi la barra laterale"/> + <sidetray_tab description="Casa." name="sidebar_home" tab_title="Home"> <panel label="casa" name="panel_home"/> </sidetray_tab> - <sidetray_tab description="Trova i tuoi amici, contatti e persone nelle vicinanze." name="sidebar_people"> + <sidetray_tab description="Modifica il tuo profilo pubblico e i preferiti." name="sidebar_me" tab_title="My Profile"> <panel_container name="panel_container"> - <panel label="Info di Gruppo" name="panel_group_info_sidetray"/> - <panel label="Residenti bloccati & Oggetti" name="panel_block_list_sidetray"/> + <panel label="Io" name="panel_me"/> </panel_container> </sidetray_tab> - <sidetray_tab description="Trova luoghi dove andare e luoghi già visitati." label="Luoghi" name="sidebar_places"> - <panel label="Luoghi" name="panel_places"/> + <sidetray_tab description="Trova amici, contatti e persone nelle vicinanze." name="sidebar_people" tab_title="People"> + <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="Modifica il tuo profilo pubblico e le foto." name="sidebar_me"> - <panel label="Io" name="panel_me"/> + <sidetray_tab description="Trova luoghi dove andare e luoghi già visitati." label="Luoghi" name="sidebar_places" tab_title="Places"> + <panel label="Luoghi" name="panel_places"/> </sidetray_tab> - <sidetray_tab description="Cambia il tuo aspetto ed il tuo look attuale." name="sidebar_appearance"> - <panel label="Modifica Aspetto" name="sidepanel_appearance"/> + <sidetray_tab description="Sfoglia il tuo inventario." name="sidebar_inventory" tab_title="My Inventory"> + <panel label="Modifica inventario" name="sidepanel_inventory"/> </sidetray_tab> - <sidetray_tab description="Curiosa nel tuo inventario." name="sidebar_inventory"> - <panel label="Modifica Inventario" name="sidepanel_inventory"/> + <sidetray_tab description="Cambia il tuo aspetto ed il tuo look attuale." name="sidebar_appearance" tab_title="My Appearance"> + <panel label="Modifica aspetto fisico" name="sidepanel_appearance"/> </sidetray_tab> </side_tray> diff --git a/indra/newview/skins/default/xui/it/panel_stand_stop_flying.xml b/indra/newview/skins/default/xui/it/panel_stand_stop_flying.xml index 2fafc38ba1..198ebf4b2a 100644 --- a/indra/newview/skins/default/xui/it/panel_stand_stop_flying.xml +++ b/indra/newview/skins/default/xui/it/panel_stand_stop_flying.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <!-- Width and height of this panel should be synchronized with "panel_modes" in the floater_moveview.xml--> <panel name="panel_stand_stop_flying"> - <button label="Stare in piedi" name="stand_btn" tool_tip="Clicca qui per alzarti."/> + <button label="Stai in piedi" name="stand_btn" tool_tip="Clicca qui per alzarti."/> <button label="Ferma il volo" name="stop_fly_btn" tool_tip="Ferma il volo"/> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_status_bar.xml b/indra/newview/skins/default/xui/it/panel_status_bar.xml index 9acbb34c79..584ac5e4b4 100644 --- a/indra/newview/skins/default/xui/it/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/it/panel_status_bar.xml @@ -21,9 +21,11 @@ <panel.string name="buycurrencylabel"> L$ [AMT] </panel.string> - <button label="" label_selected="" name="buycurrency" tool_tip="Il mio saldo: Clicca per comprare più L$"/> - <text name="TimeText" tool_tip="Ora attuale (Pacific)"> - 12:00 AM + <button label="" label_selected="" name="buycurrency" tool_tip="Il mio saldo"/> + <button label="Acquista" name="buyL" tool_tip="Clicca per comprare più L$"/> + <text name="TimeText" tool_tip="Orario attuale (Pacifico)"> + 24:00, ora del Pacifico </text> - <button name="volume_btn" tool_tip="Controllo del volume globale"/> + <button name="media_toggle_btn" tool_tip="Attiva/ferma tutti i media (musica, video, pagine Web)"/> + <button name="volume_btn" tool_tip="Regolazione del volume globale"/> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_teleport_history.xml b/indra/newview/skins/default/xui/it/panel_teleport_history.xml index 3f02b1449a..85f8f87e68 100644 --- a/indra/newview/skins/default/xui/it/panel_teleport_history.xml +++ b/indra/newview/skins/default/xui/it/panel_teleport_history.xml @@ -3,12 +3,16 @@ <accordion name="history_accordion"> <accordion_tab name="today" title="Oggi"/> <accordion_tab name="yesterday" title="Ieri"/> - <accordion_tab name="2_days_ago" title="2 giorni fà"/> - <accordion_tab name="3_days_ago" title="3 giorni fà"/> - <accordion_tab name="4_days_ago" title="4 giorni fà"/> - <accordion_tab name="5_days_ago" title="5 giorni fà"/> - <accordion_tab name="6_days_and_older" title="6 giorni fà o più vecchio"/> - <accordion_tab name="1_month_and_older" title="1 mese o più vecchio"/> - <accordion_tab name="6_months_and_older" title="6 mesi o più vecchio"/> + <accordion_tab name="2_days_ago" title="2 giorni fa"/> + 5 + <accordion_tab name="3_days_ago" title="3 giorni fa"/> + <accordion_tab name="4_days_ago" title="4 giorni fa"/> + <accordion_tab name="5_days_ago" title="5 giorni fa"/> + <accordion_tab name="6_days_and_older" title="6 giorni o precedente"/> + <accordion_tab name="1_month_and_older" title="1 mese o precedente"/> + <accordion_tab name="6_months_and_older" title="6 mesi o precedente"/> </accordion> + <panel name="bottom_panel"> + <button name="gear_btn" tool_tip="Mostra opzioni addizionali"/> + </panel> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/it/panel_teleport_history_item.xml new file mode 100644 index 0000000000..2ba4baacaf --- /dev/null +++ b/indra/newview/skins/default/xui/it/panel_teleport_history_item.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="teleport_history_item"> + <button name="profile_btn" tool_tip="Mostra informazioni dell'oggetto"/> +</panel> diff --git a/indra/newview/skins/default/xui/it/role_actions.xml b/indra/newview/skins/default/xui/it/role_actions.xml index eab8e6b4e3..95f1f662f9 100644 --- a/indra/newview/skins/default/xui/it/role_actions.xml +++ b/indra/newview/skins/default/xui/it/role_actions.xml @@ -1,72 +1,72 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <role_actions> - <action_set description="Queste abilità permettono di aggiungere e rimuovere Membri dal gruppo, e permettono ai nuovi membri di aderire al gruppo senza invito." name="Membership"> - <action description="Invitare persone in questo Gruppo" longdescription="Invita Persone in questo Gruppo usando il bottone 'Invita' nella sezione Ruoli > tabella Membri." name="member invite"/> - <action description="Espellere Membri da questo Gruppo" longdescription="Espelli Membri dal Gruppo usando il bottone 'Espelli' nella sezione Ruoli > tabella Membri. Un Proprietario può espellere chiunque eccetto un altro Proprietario. Se tu non sei un Proprietario, un Membro può essere espulso da un gruppo solo ed unicamente, se hanno il Ruolo Everyone, e nessun altro Ruolo. Per rimuovere Membri dai Ruoli, devi avere l'Abilità 'Rimuovi Membri dai Ruoli'." name="member eject"/> - <action description="Seleziona 'Iscrizione libera' e modifica da 'Tassa d'Iscrizione'" longdescription="Seleziona 'Iscrizione libera' per permettere ai nuovi Membri di aderire senza invito, e modifica da 'Tassa d'Iscrizione' nella sezione Generale." name="member options"/> + <action_set description="Queste abilità permettono di aggiungere e rimuovere membri dal gruppo e consentono ai nuovi membri di aderire al gruppo senza invito." name="Membership"> + <action description="Invita persone in questo gruppo" longdescription="Invita persone in questo gruppo usando il pulsante Invita nella sezione Ruoli > scheda membri." name="member invite"/> + <action description="Espelli membri da questo gruppo" longdescription="Espelli membri dal gruppo usando il pulsante Espelli nella sezione Ruoli > scheda membri. Un proprietario può espellere chiunque tranne un altro proprietario. Se non sei un proprietario, un membro può essere espulso da un gruppo soltanto qualora abbia soltanto il ruolo Tutti, e nessun altro ruolo. Per rimuovere membri dai ruoli, devi avere l'Abilità corrispondente." name="member eject"/> + <action description="Seleziona Iscrizione libera e modifica la Quota d'iscrizione" longdescription="Seleziona Iscrizione libera per permettere ai nuovi membri di aderire senza invito e modifica la quota d'iscrizione nella scheda Generale." name="member options"/> </action_set> - <action_set description="Queste Abilità permettono di aggiungere, rimuovere, cambiare i Ruoli del Gruppo, aggiungere e rimuovere Membri dai Ruoli, e assegnare Abilità ai Ruoli." name="Roles"> - <action description="Creare nuovi Ruoli" longdescription="Crea nuovi Ruoli nella sezione Ruoli > tabella Ruoli." name="role create"/> - <action description="Cancellare Ruoli" longdescription="Cancella Ruoli nella sezione Ruoli > tabella Ruoli." name="role delete"/> - <action description="Cambia i nomi del Ruolo, titoli, descrizioni, se i membri in quel Ruolo sono resi pubblici" longdescription="Cambia i nomi del Ruolo, titoli, descrizioni, se i membri in quel Ruolo sono resi pubblici. Viene fatto nella parte bassa della sezione Ruoli > tabella Ruoli dopo avere selezionato un Ruolo." name="role properties"/> - <action description="Incaricare Membri ad Assegnare Ruoli" longdescription="Assegna un Ruolo a Membri nella lista dei Ruoli assegnati (Roles section > Members tab). Un Membro con questa Abilità può aggiungere Membri ad un Ruolo già presente nell'elenco." name="role assign member limited"/> - <action description="Assegnare Membri a tutti i Ruoli" longdescription="Assegna Tutti i Ruoli a Membri nella lista dei Ruoli Assegnati (Roles section > Members tab). *ATTENZIONE* Ogni Membro con questo Ruolo e Abilità può assegnarsi -- e assegnare ad altri Membri non Proprietari-- Ruoli con poteri maggiori di quelli normalmente concessi, potenzialmente elevandosi ai poteri concessi al Proprietario. Siate sicuri di quello che fate prima di assegnare questa Abilità." name="role assign member"/> - <action description="Rimuovere Membri dai Ruoli" longdescription="Rimuovi dai Ruoli i Membri nella lista dei Ruoli Assegnati (Roles section > Members tab). Il Proprietario non può essere rimosso." name="role remove member"/> - <action description="Assegnare e Rimuovere Abilità nei Ruoli" longdescription="Assegna e Rimuovi Abilità per ogni Ruolo nella lista dei Ruoli Assegnati (Roles section > Roles tab). *ATTENZIONE* Ogni Membro con questo Ruolo e Abilità può assegnarsi --ed assegnare ad altri Membri non Proprietà-- tutte le Abilità, che potenzialmente lo elevano ai poteri ai poteri concessi al Proprietario. Siate sicuri di quello che fate prima di assegnare questa Abilità ." name="role change actions"/> + <action_set description="Queste Abilità permettono di aggiungere, rimuovere, cambiare i ruoli del gruppo, aggiungere e rimuovere membri dai ruoli, nonché assegnare abilità ai ruoli." name="Roles"> + <action description="Creare nuovi ruoli" longdescription="Crea nuovi ruoli nella sezione Ruoli > scheda ruoli." name="role create"/> + <action description="Eliminare ruoli" longdescription="Elimina ruoli nella sezione Ruoli > scheda ruoli." name="role delete"/> + <action description="Cambia i nomi di ruoli, i titoli, le descrizioni e definisci se i membri in quel ruolo sono resi pubblici" longdescription="Cambia i nomi di ruoli, i titoli, le descrizioni e definisci se i membri in quel ruolo sono resi pubblici Viene fatto nella parte inferiore della sezione Ruoli > scheda Ruoli, dopo avere selezionato un ruolo." name="role properties"/> + <action description="Assegnare membri a ruoli del responsabile" longdescription="Assegna un ruolo a membri nella lista dei ruoli assegnati (sezione Ruoli > scheda membri). Un utente con questa Abilità può aggiungere membri ad un ruolo nel quale il responsabile è già presente." name="role assign member limited"/> + <action description="Assegnare membri a qualsiasi ruolo" longdescription="Assegna i membri a qualsiasi ruolo nell'elenco dei ruoli assegnati (sezione Ruoli > scheda membri). *ATTENZIONE* Ogni membro con questo Ruolo e Abilità può assegnarsi -- e assegnare ad altri membri non proprietari -- ruoli con poteri maggiori di quelli normalmente concessi, potenzialmente con poteri analoghi a quelli di proprietario. Sii sicuro della scelta prima di assegnare questa Abilità." name="role assign member"/> + <action description="Rimuovere membri dai ruoli" longdescription="Rimuovi dai ruoli i membri nell'elenco dei ruoli assegnati (sezione Ruoli > scheda membri). Il proprietario non può essere rimosso." name="role remove member"/> + <action description="Assegnare e rimuovere abilità nei ruoli" longdescription="Assegna e Rimuovi Abilità per ogni ruolo nell'elenco dei ruoli assegnati (sezione Ruoli > scheda Ruoli). *ATTENZIONE* Ogni membro con questo ruolo e Abilità può assegnarsi -- ed assegnare ad altri membri non proprietari -- tutte le Abilità, che potenzialmente con poteri analoghi a quelli di proprietario. Sii sicuro della scelta prima di assegnare questa Abilità." name="role change actions"/> </action_set> - <action_set description="Queste Abilità permettono di modificare l'identità di questo Gruppo, come il cambiamento della visibilità pubblica, lo statuto, e lo stemma." name="Group Identity"> - <action description="Cambiare lo Statuto, lo Stemma, e 'Mostra nel Cerca/Search'" longdescription="Cambia Statuto, Immagine, e 'Mostra nel Cerca'. Viene fatto nella sezione Generale." name="group change identity"/> + <action_set description="Queste abilità autorizzano a modificare l'identità di questo gruppo, come ad esempio la modifica della visibilità pubblica, lo statuto e il logo." name="Group Identity"> + <action description="Cambiare lo statuto, il logo, e 'Mostra nella ricerca'" longdescription="Cambia statuto, logo e 'Mostra nella ricerca'. Viene fatto nella sezione Generale." name="group change identity"/> </action_set> - <action_set description="Queste Abilità includono il potere di intestare, modificare, e vendere terreni di proprietà del Gruppo. Per aprire la finestra Info sul Terreno, click destro sulla terra e seleziona 'Info sul Terreno', o clicca l'icona 'i' sulla Barra di Navigazione." name="Parcel Management"> - <action description="Intestare terra e comprare terra per il gruppo" longdescription="Intesta terra e compra terra per il Gruppo. Viene fatto in Informazioni sul Terreno > tabella Generale." name="land deed"/> - <action description="Abbandonare la terra in favore di Governor Linden" longdescription="Abbandona la terra in favore di Governor Linden. *ATTENZIONE* Ogni Membro con questo Ruolo e Abilità può abbandonare la terra posseduta dal Gruppo in Informazioni sul Terreno > tabella Generale, restituendola alla proprietà Linden senza una vendita! Devi essere sicuro di quello che fai prima di assegnare questa Abilità." name="land release"/> - <action description="Impostare le info per la vendita della terra" longdescription="Imposta le info per la vendita della terra. *ATTENZIONE* Ogni Membro con questo Ruolo e Abilità può vendere la terra posseduta dal Gruppo in Info sul Terreno > tabella Generale (al prezzo che vogliono)! Devi essere sicuro di quello che fai prima di assegnare questa Abilità." name="land set sale info"/> - <action description="Suddividere e unire appezzamenti" longdescription="Suddividi e unisci parcel. Viene fatto con click destro sul terra, 'Modifica Terreno', trascinando poi il mouse sulla terra per creare una selezione. Per suddividere, seleziona quale parte vuoi dividere e clicca 'Suddividere'. Per unire, seleziona due o più two parcel confinanti e clicca 'Unisci'." name="land divide join"/> + <action_set description="Queste Abilità comprendono il potere di intestare, modificare e vendere terreni di proprietà del gruppo. Per aprire la finestra Informazioni sul terreno, fai clic con il pulsante destro del mouse sul terreno e seleziona Informazioni sul terreno, o clicca sull'icona 'i' nella Barra di Navigazione." name="Parcel Management"> + <action description="Cessione di terreno e acquisto di terreno per il gruppo" longdescription="Intesta terreno e acquista terreno per il gruppo. Ciò viene fatto in Informazioni sul terreno > scheda Generale." name="land deed"/> + <action description="Abbandonare il terreno in favore di Governor Linden" longdescription="Abbandona il terreno in favore di Governor Linden. *ATTENZIONE* Ogni membro con questo ruolo e abilità può abbandonare il terreno di proprietà del gruppo in Informazioni sul terreno > scheda Generale, restituendolo alla proprietà Linden senza effettuare una vendita. Sii sicuro della scelta prima di assegnare questa Abilità." name="land release"/> + <action description="Informazioni su come impostare il terreno come in vendita" longdescription="Imposta le info per la vendita della terra. *ATTENZIONE* Ogni Membro con questo ruolo e abilità può vendere il terreno di proprietà del gruppo nella scheda Informazioni sul terreno > scheda Generale. Pertanto sii sicuro della scelta prima di assegnare questa Abilità." name="land set sale info"/> + <action description="Suddividere e unire lotti" longdescription="Suddividi e unisci lotti. Viene fatto cliccando con il pulsante destro del mouse sul terreno, selezionando Modifica terreno e trascinando il mouse sul terreno per creare una selezione. Per suddividere, seleziona quale parte vuoi dividere e clicca su Suddividi. Per unire, seleziona due o più lotti confinanti e clicca su Unisci." name="land divide join"/> </action_set> - <action_set description="Queste Abilità permettono di cambiare il nome dell'appezzamento, le impostazioni pre-definite, la visibilità nella mappatura, il punto di arrivo & le coordinate del Teleport." name="Parcel Identity"> - <action description="Premi 'Mostra Luogo nel Cerca' e seleziona una categoria" longdescription="Premi 'Mostra Luogo nel Cerca' e seleziona una categoria di parcel in Info sul Terreno > tabella Opzioni." name="land find places"/> - <action description="Cambia il nome del parcel, descrizione, e impostazioni nel 'Mostra Luogo nel Cerca'" longdescription="Cambia il nome del parcel, descrizione, e impostazioni nel 'Mostra Luogo nel Cerca'. Viene fatto in Info sul Terreno > tabella Opzioni." name="land change identity"/> - <action description="Impostare il punto di arrivo e le coordinate del Teleport" longdescription="In un appezzamento posseduto da un Gruppo, i Membri con questo Ruolo e Abilità possono impostare un punto di arrivo per i Teleport entranti, e impostare anche le coordinate del Teleport per ulteriore precisione. Viene fatto in Informazioni sul Terreno > tabella Opzioni." name="land set landing point"/> + <action_set description="Queste abilità permettono di cambiare il nome del lotto, le impostazioni di pubblicazione, la visibilità negli elenchi e il punto di arrivo, nonché opzioni di indirizzamento del Teleport." name="Parcel Identity"> + <action description="Premi Mostra luogo nella ricerca e seleziona una categoria" longdescription="Premi Mostra luogo nella ricerca e seleziona una categoria di lotto in Informazioni sul terreno > scheda Opzioni." name="land find places"/> + <action description="Cambia il nome del lotto, la descrizione e le impostazioni di Mostra luogo nella ricerca" longdescription="Cambia il nome del lotto, la descrizione e le impostazioni di Mostra luogo nella ricerca. Ciò viene fatto in Informazioni sul terreno > scheda Opzioni." name="land change identity"/> + <action description="Impostare il punto di arrivo e l'indirizzamento del Teleport" longdescription="In un lotto di proprietà di un gruppo, i membri con questo ruolo e abilità possono impostare un punto di arrivo per i teleport entranti e impostare anche l'indirizzamento del teleport per ulteriore precisione. Viene fatto in Informazioni sul terreno > Opzioni." name="land set landing point"/> </action_set> - <action_set description="Queste Abilità permettono alcune permessi nell'appezzamento, quali 'Creare Oggetti', 'Editare il Terreno', trasmettere musica & tabella Media." name="Parcel Settings"> - <action description="Cambiare musica & tabella media" longdescription="Cambia le impostazioni per lo streaming della musica e dei video in Informazioni sul Terreno > tabella Media." name="land change media"/> - <action description="Cliccare 'Edita il Terreno'" longdescription="Clicca 'Edita il Terreno'. *ATTENZIONE* Informazioni sul Terreno > tabella Opzioni > Edita il Terreno permette a tutti di modificare la forma del terreno, collocare e spostare le piante Linden. Devi essere sicuro di quello che fai prima di assignera questa Abilità. Edita il terreno in Informazioni sul Terreno > tabella Opzioni." name="land edit"/> - <action description="Cliccare Informazioni sul Terreno > Impostazione Opzioni" longdescription="Premi 'Salvo (nessun danno)', 'Vola', e permetti agli altri Residenti di: 'modifica Terreno', 'Crea', 'Crea Landmarks', e 'Scripts attivi' nella terra posseduta da un Gruppo in Info sul Terreno > tabella Opzioni." name="land options"/> + <action_set description="Queste abilità hanno poteri relativi alle opzioni dei lotti, come la creazione di oggetti, la modifica del terreno e le impostazioni per la musica e gli elementi multimediali." name="Parcel Settings"> + <action description="Cambiare impostazioni musica e multimediali" longdescription="Cambia le impostazioni per lo streaming della musica e dei video in Informazioni sul terreno > Media." name="land change media"/> + <action description="Attiva 'Modifica terreno'" longdescription="Attiva 'Modifica terreno'. *ATTENZIONE* Informazioni sul terreno > Opzioni > Modifica terreno consente a chiunque di modificare la forma del tuo terreno e di collocare e spostare le piante Linden. Pertanto sii sicuro della scelta prima di assegnare questa Abilità. La funzione di modifica del terreno è attivata in Informazioni sul terreno > Opzioni." name="land edit"/> + <action description="Attivazione di parametri per Informazioni sul terreno > Opzioni" longdescription="Premi Sicuro (nessun danno), Vola e consenti agli altri residenti di: modificare il terreno, costruire, creare punti di riferimento ed eseguire script nel terreno appartenente ad un gruppo in Informazioni sul terreno > scheda Opzioni." name="land options"/> </action_set> - <action_set description="Queste Abilità permettono ai Membri di non avere restrizioni in un appezzamento posseduto da un Gruppo." name="Parcel Powers"> - <action description="Permettere sempre 'Edita il Terreno'" longdescription="I Membri con questo Ruolo e Abilità possono editare il terreno posseduto da un Gruppo, anche se non è selezionato in Informazioni sul Terreno > tabella Opzioni." name="land allow edit land"/> - <action description="Permettere Vola Sempre'" longdescription="I Membri con questo Ruolo e Abilità possono volare in un terreno posseduto da un Gruppo, anche se non è selezionato in Info sul Terreno > tabella Opzioni." name="land allow fly"/> - <action description="Permettere 'Crea Oggetti' sempre" longdescription="I Membri con questo Ruolo e Abilità possono creare oggetti in un appezzamento posseduto da un Gruppo, anche se non è selezionato in Informazioni sul Terreno > tabella Opzioni." name="land allow create"/> - <action description="Permettere 'Crea Landmark' sempre" longdescription="I Membri con questo Ruolo e Abilità possono creare Landmark in un appezzamento posseduto da un Gruppo , anche se non è evidenziato in Informazioni sul Terreno > tabella Opzioni." name="land allow landmark"/> - <action description="Permettere 'Teleportami a Casa' in un appezzamento di un Gruppo" longdescription="I Membri in un Ruolo con questa Abilità possono usare il menu Mondo > Landmarks > Imposta come Casa su un parcel intestato ad un Gruppo." name="land allow set home"/> + <action_set description="Queste abilità permettono ai membri di non avere restrizioni in un lotto appartenente ad un gruppo." name="Parcel Powers"> + <action description="Consenti sempre la modifica del terreno" longdescription="I membri con questo ruolo e abilità possono modificare il terreno appartenente ad un gruppo, anche se la funzionalità è disattivata in Informazioni sul terreno > Opzioni." name="land allow edit land"/> + <action description="Consenti sempre il volo" longdescription=" I membri con questo ruolo e abilità possono volare in un terreno appartenente ad un gruppo, anche se la funzionalità è disattivata in Informazioni sul terreno > Opzioni." name="land allow fly"/> + <action description="Consenti sempre la creazione di oggetti" longdescription="I membri con questo ruolo e abilità possono creare oggetti in un lotto appartenente ad un gruppo, anche se la funzionalità è disattivata in Informazioni sul terreno > Opzioni." name="land allow create"/> + <action description="Consenti sempre la creazione di punti di riferimento" longdescription="I membri con questo ruolo e abilità possono creare punti di riferimento in un lotto appartenente ad un gruppo, anche se la funzionalità è disattivata in Informazioni sul terreno > Opzioni." name="land allow landmark"/> + <action description="Consenti la funzione 'Imposta come Casa mia' in un lotto di gruppo" longdescription="I membri in un ruolo con questa Abilità possono usare il menu Mondo > Punti di riferimento > Imposta come Casa su un lotto ceduto a questo gruppo." name="land allow set home"/> </action_set> - <action_set description="Queste Abilità permettono di concedere o limitare l'accesso ad un appezzamento di un Gruppo, e includono Congela ed Espelli un Residente." name="Parcel Access"> - <action description="Gestire la lista degli Accessi Consentiti" longdescription="Gestisci la lista degli Accessi Consentiti in Informazioni sul Terreno > tabella Accesso." name="land manage allowed"/> - <action description="Gestire la lista degli Accessi Bloccati" longdescription="Gestisci la lista Espulsi dal parcel in Info sul Terreno > tabella Accesso." name="land manage banned"/> - <action description="Cambia le impostazioni del parcel in 'Vendi Pass a'" longdescription="Cambia le impostazioni 'Vendi Pass a' in Info sul Terreno > tabella Accesso." name="land manage passes"/> - <action description="Espellere e Congelare i Residenti in un appezzamento" longdescription="Membri in un Ruolo con questa Abilità possono occuparsi di un residente indesiderato in un parcel posseduto da un Gruppo, con click destro sul residente, selezionando 'Espelli' o 'Immobilizza'." name="land admin"/> + <action_set description="Queste Abilità consentono di concedere o limitare l'accesso ad un lotto di un gruppo da parte di residenti, con le azioni Congela ed Espelli." name="Parcel Access"> + <action description="Gestire la lista di accesso al lotto" longdescription="Gestisci la lista di accesso al lotto in Informazioni sul terreno > Accesso." name="land manage allowed"/> + <action description="Gestire la lista dei residenti espulsi dal lotto" longdescription="Gestisci la lista Espulsi dal lotto in Informazioni sul terreno > scheda Accesso." name="land manage banned"/> + <action description="Cambia le impostazioni del lotto in Vendi pass a" longdescription="Cambia le impostazioni Vendi pass a in Informazioni sul terreno > scheda Accesso." name="land manage passes"/> + <action description="Espellere e Congelare i Residenti in un lotto" longdescription="Membri in un ruolo con questa Abilità possono occuparsi di un residente indesiderato in un lotto posseduto da un gruppo, facendo clic sul residente con il pulsante destro del mouse e selezionando Espelli o Congela." name="land admin"/> </action_set> - <action_set description="Queste Abilità permettono ai Membri di restituire oggetti, collocare e spostare piante Linden. Questo è utile ai Membri per ripulire da oggetti indesiderati e creare paesaggi, ma deve essere utilizzato con cura, perchè non si può annullare la restituzione degli Oggetti." name="Parcel Content"> - <action description="Restituire oggetti posseduti da un Gruppo" longdescription="Restituisci gli oggetti posseduti da un Gruppo in un appezzamento di un Gruppo in Informazioni sul Terreno > tabella Oggetti." name="land return group owned"/> - <action description="Restituire oggetti concessi ad un Gruppo" longdescription="Restituisci oggetti concessi ad un Gruppo in un appezzamento di un Gruppo in Informazioni sul Terreno > tabella Oggetti." name="land return group set"/> - <action description="Restituire oggetti estranei al Gruppo" longdescription="Restituire oggetti estranei al Gruppo in un appezzamento di un Gruppo in Info sul Terreno > tabella Oggetti." name="land return non group"/> - <action description="Creare un paesaggio utilizzando le piante Linden" longdescription="Abilità di creare paesaggi di posizionare e spostare alberi, piante, erba. Questi oggetti sono presenti nella Libreria del tuo Inventario > Cartella Oggetti, o possono essere creati con il menu Crea." name="land gardening"/> + <action_set description="Queste abilità consentono ai membri di restituire oggetti, collocare e spostare piante Linden. Questo è utile ai membri per ripulire da oggetti indesiderati e creare paesaggi, ma deve essere utilizzato con cura, perchè la restituzione degli oggetti non può essere annullata." name="Parcel Content"> + <action description="Restituire oggetti di proprietà di un gruppo" longdescription="Restituisci gli oggetti di proprietà di un gruppo in un appezzamento di un gruppo in Informazioni sul terreno > Oggetti." name="land return group owned"/> + <action description="Restituire oggetti assegnati ad un gruppo" longdescription="Restituisci oggetti assegnati ad un gruppo in un lotto di un gruppo in Informazioni sul terreno > Oggetti." name="land return group set"/> + <action description="Restituire oggetti estranei al gruppo" longdescription="Restituire oggetti estranei al gruppo in un appezzamento di un gruppo in Informazioni sul terreno > Oggetti." name="land return non group"/> + <action description="Creare un paesaggio utilizzando le piante Linden" longdescription="Abilità di creare paesaggi e posizionare e spostare alberi, piante, erba Linden. Questi oggetti sono presenti nella Libreria del tuo Inventario > cartella Oggetti, o possono essere creati con il menu Crea." name="land gardening"/> </action_set> - <action_set description="Queste Abilità includono il potere di intestare, modificare, vendere oggetti posseduti dal gruppo. Viene fatto in Build Tools > tabella Generale. Click destro su un oggetto e Modifica per vedere le impostazioni." name="Object Management"> - <action description="Intestare oggetti ad un Gruppo" longdescription="Intesta oggetti ad un Gruppo in Build Tools > tabella Generale." name="object deed"/> - <action description="Modificare (sposta, copia, modifica) oggetti di un Gruppo" longdescription="Controlla (sposta, copia, modifica) gli oggetti posseduti da un Gruppo in Build Tools > tabella Generale." name="object manipulate"/> - <action description="Mettere in vendita oggetti di un Gruppo" longdescription="Metti in vendita oggetti posseduti da un Gruppo in Build Tools > tabelle Generale." name="object set sale"/> + <action_set description="Queste Abilità includono il potere di cedere, modificare e vendere oggetti posseduti dal gruppo. Viene fatto negli strumenti Costruisci > scheda Generale. Clic con il pulsante destro del mouse su un oggetto e Modifica per vedere le impostazioni." name="Object Management"> + <action description="Intestare oggetti ad un gruppo" longdescription="Intesta oggetti ad un gruppo in Strumenti per costruzione > scheda Generale." name="object deed"/> + <action description="Modificare (sposta, copia, modifica) oggetti di un gruppo" longdescription="Gestisci (sposta, copia, modifica) gli oggetti appartenenti ad un gruppo in Build Tools > tabella Generale." name="object manipulate"/> + <action description="Mettere in vendita oggetti di un gruppo" longdescription="Metti in vendita oggetti posseduti da un Gruppo in Strumenti per costruzione > scheda Generale." name="object set sale"/> </action_set> - <action_set description="Queste Abilità permettono di richiedere ai Membri di pagare le perdite del Gruppo e di ricevere i dividendi del Gruppo, e di limitare l'accesso all'account del Gruppo." name="Accounting"> - <action description="Pagare le perdite del Gruppo e ricevere i dividendi del Gruppo" longdescription="I Membri con questo Ruolo e Abilità pagheranno automaticamente le perdite del Gruppo e riceveranno i dividendi del Gruppo. Questo significa che riceveranno una porzione delle vendite di terre possedute dal gruppo (che sono risolte giornalmente), e contribuiranno anche su cose come le tasse di iscrizione dell'appezzament. " name="accounting accountable"/> + <action_set description="Queste abilità consentono di richiedere ai membri di pagare le passività del gruppo e di ricevere i dividendi del gruppo, nonché di limitare l'accesso alla cronologia finanziaria del gruppo." name="Accounting"> + <action description="Pagare le passività del gruppo e ricevere i dividendi del gruppo" longdescription="I membri con questo ruolo e abilità pagheranno automaticamente le passività del gruppo e riceveranno i dividendi del gruppo. Questo significa che riceveranno una porzione delle vendite di terreni appartenenti al gruppo (che sono distribuite giornalmente) e contribuiranno fondi a spese come le quote di inserzione del lotto. " name="accounting accountable"/> </action_set> - <action_set description="Queste Abilità permettono ai Membri di spedire, ricevere, e vedere le Notice del Gruppo." name="Notices"> - <action description="Spedire Notice" longdescription="Membri in un Ruolo con questa Abilità possono spedire Notice nel Gruppo > sezione Notice." name="notices send"/> - <action description="Ricevere Notice e vedere Notice precedenti" longdescription="Membri in un ruolo con questa Abilità possono ricevere Notice e vedere Notice vecchie nel Gruppo > sezione Notice." name="notices receive"/> + <action_set description="Queste abilità consentono ai membri di inviare, ricevere e vedere gli avvisi del gruppo." name="Notices"> + <action description="Invia avvisi" longdescription="Membri in un ruolo con questa Abilità possono inviare avvisi tramite la sezione Gruppo > Avvisi." name="notices send"/> + <action description="Ricevere avvisi e vedere avvisi precedenti" longdescription="Membri in un ruolo con questa Abilità possono ricevere avvisi e vedere avvisi precedenti nella sezione Gruppo > Avvisi." name="notices receive"/> </action_set> - <action_set description="Queste Abilità permettono di concedere o limitare l'accesso alle sessioni di chat e di voice chat nel gruppo." name="Chat"> - <action description="Aderire alla Chat di Gruppo" longdescription="I Membri con questo Ruolo e Abilità possono aderire alle sessioni di chat, sia scritte che in voice." name="join group chat"/> - <action description="Aderire alla Voice Chat di Gruppo" longdescription="I Membri con questo Ruolo e Abilità possono aderire alle sessioni di Voice Chat nel gruppo. NOTA: Per poter partecipare alla Chat di Gruppo è necessario accedere alla sessione di voice chat." name="join voice chat"/> - <action description="Moderare la Chat di Gruppo" longdescription="I Membri con questo Ruolo e Abilità possono controllare l'accesso e la partecipazione alle sessioni di chat scritta e di voice chat nel Gruppo." name="moderate group chat"/> + <action_set description="Queste Abilità permettono di concedere o limitare l'accesso alle sessioni di chat e di chat vocale nel gruppo." name="Chat"> + <action description="Partecipare alla Chat di gruppo" longdescription="I membri con questo ruolo e abilità possono partecipare alle sessioni di chat, sia scritte che vocale." name="join group chat"/> + <action description="Partecipa alla Chat vocale di gruppo" longdescription=" I membri con questo ruolo e abilità possono partecipare alle sessioni di Chat vocale nel gruppo. NOTA: per poter partecipare alla Chat di gruppo è necessario accedere alla sessione di chat vocale." name="join voice chat"/> + <action description="Moderare la Chat di gruppo" longdescription="I membri con questo ruolo e abilità possono gestire l'accesso e la partecipazione alle sessioni di chat scritta e di chat vocale nel gruppo." name="moderate group chat"/> </action_set> </role_actions> diff --git a/indra/newview/skins/default/xui/it/sidepanel_appearance.xml b/indra/newview/skins/default/xui/it/sidepanel_appearance.xml index 8dd7bfec42..c2e99b5573 100644 --- a/indra/newview/skins/default/xui/it/sidepanel_appearance.xml +++ b/indra/newview/skins/default/xui/it/sidepanel_appearance.xml @@ -1,11 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Vestiario" name="appearance panel"> <string name="No Outfit" value="Nessun vestiario"/> - <filter_editor label="Filtri per il vestiario" name="Filter"/> - <panel name="bottom_panel"> - <button name="options_gear_btn" tool_tip="Mostra opzioni addizionali"/> - <button name="newlook_btn" tool_tip="Aggiungi nuovo vestiario"/> - <dnd_button name="trash_btn" tool_tip="Rimuovi l'articolo selezionato"/> - <button label="Indossa" name="wear_btn"/> + <panel name="panel_currentlook"> + <text name="currentlook_title"> + (non salvato) + </text> </panel> + <filter_editor label="Filtri per il vestiario" name="Filter"/> </panel> diff --git a/indra/newview/skins/default/xui/it/sidepanel_item_info.xml b/indra/newview/skins/default/xui/it/sidepanel_item_info.xml index 23ca8b5ad8..e1ad1452ff 100644 --- a/indra/newview/skins/default/xui/it/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/it/sidepanel_item_info.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="item properties" title="Caratteristiche dell'articolo nell'Inventario"> +<panel name="item properties" title="Profilo dell'oggetto"> <panel.string name="unknown"> - (Sconosciuto) + (sconosciuto) </panel.string> <panel.string name="public"> (pubblico) @@ -10,12 +10,13 @@ Tu puoi: </panel.string> <panel.string name="owner_can"> - Il Proprietario può: + Il proprietario può: </panel.string> <panel.string name="acquiredDate"> [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="title" value="Caratteristiche dell'articolo"/> + <text name="title" value="Profilo dell'oggetto"/> + <text name="where" value="(Inventario)"/> <panel label=""> <text name="LabelItemNameTitle"> Nome: @@ -24,7 +25,7 @@ Descrizione: </text> <text name="LabelCreatorTitle"> - Creatore: + Ideatore: </text> <button label="Profilo..." name="BtnCreator"/> <text name="LabelOwnerTitle"> @@ -35,36 +36,38 @@ Acquisito: </text> <text name="LabelAcquiredDate"> - Wed May 24 12:50:46 2006 + mer 24 maggio 12:50:46 2006 </text> - <text name="OwnerLabel"> - Tu: - </text> - <check_box label="Modifica" name="CheckOwnerModify"/> - <check_box label="Copia" name="CheckOwnerCopy"/> - <check_box label="Rivendi" name="CheckOwnerTransfer"/> - <text name="AnyoneLabel"> - Chiunque: - </text> - <check_box label="Copia" name="CheckEveryoneCopy"/> - <text name="GroupLabel"> - Gruppo: - </text> - <check_box label="Condividi" name="CheckShareWithGroup"/> - <text name="NextOwnerLabel"> - Prossimo Proprietario: - </text> - <check_box label="Modifica" name="CheckNextOwnerModify"/> - <check_box label="Copia" name="CheckNextOwnerCopy"/> - <check_box label="Rivendi" name="CheckNextOwnerTransfer"/> + <panel name="perms_inv"> + <text name="perm_modify"> + Tu puoi: + </text> + <check_box label="Modifica" name="CheckOwnerModify"/> + <check_box label="Copia" name="CheckOwnerCopy"/> + <check_box label="Trasferisci" name="CheckOwnerTransfer"/> + <text name="AnyoneLabel"> + Chiunque: + </text> + <check_box label="Copia" name="CheckEveryoneCopy"/> + <text name="GroupLabel"> + Gruppo: + </text> + <check_box label="Condividi" name="CheckShareWithGroup" tool_tip="Consenti a tutti i membri del gruppo selezionato di condividere i tuoi diritti di modifica di questo oggetto. Per attivare le restrizioni per ruolo devi prima effettuare la cessione."/> + <text name="NextOwnerLabel"> + Proprietario successivo: + </text> + <check_box label="Modifica" name="CheckNextOwnerModify"/> + <check_box label="Copia" name="CheckNextOwnerCopy"/> + <check_box label="Trasferisci" name="CheckNextOwnerTransfer" tool_tip="Il prossimo proprietario può regalare o rivendere questo oggetto"/> + </panel> <check_box label="In vendita" name="CheckPurchase"/> <combo_box name="combobox sale copy"> <combo_box.item label="Copia" name="Copy"/> <combo_box.item label="Originale" name="Original"/> </combo_box> - <spinner label="Prezzo:" name="Edit Cost"/> - <text name="CurrencySymbol"> - L$ - </text> + <spinner label="Prezzo: L$" name="Edit Cost"/> + </panel> + <panel name="button_panel"> + <button label="Annulla" name="cancel_btn"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/it/sidepanel_task_info.xml b/indra/newview/skins/default/xui/it/sidepanel_task_info.xml index 0eecdfb2a2..67870d9b76 100644 --- a/indra/newview/skins/default/xui/it/sidepanel_task_info.xml +++ b/indra/newview/skins/default/xui/it/sidepanel_task_info.xml @@ -1,16 +1,16 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="object properties" title="Caratteristiche dell'oggetto"> +<panel name="object properties" title="Profilo dell'oggetto"> <panel.string name="text deed continued"> - Intesta + Cessione </panel.string> <panel.string name="text deed"> - Intesta + Cessione </panel.string> <panel.string name="text modify info 1"> - Puoi modificare questo oggetto + Tu puoi modificare questo oggetto </panel.string> <panel.string name="text modify info 2"> - Puoi modificare questi oggetti + Tu puoi modificare questi oggetti </panel.string> <panel.string name="text modify info 3"> Non puoi modificare questo oggetto @@ -19,101 +19,111 @@ Non puoi modificare questi oggetti </panel.string> <panel.string name="text modify warning"> - Questo oggetto ha parti unite + Questo oggetto ha parti collegate </panel.string> <panel.string name="Cost Default"> Prezzo: L$ </panel.string> <panel.string name="Cost Total"> - Prezzo Totale: L$ + Prezzo totale: L$ </panel.string> <panel.string name="Cost Per Unit"> - Prezzo Per: L$ + Prezzo per: L$ </panel.string> <panel.string name="Cost Mixed"> - Prezzo assortito + Prezzo misto </panel.string> <panel.string name="Sale Mixed"> - Vendita assortita + Vendita mista </panel.string> - <panel name="properties_panel" label=""> + <text name="title" value="Profilo dell'oggetto"/> + <text name="where" value="(in Second Life)"/> + <panel label="" name="properties_panel"> <text name="Name:"> Nome: </text> <text name="Description:"> Descrizione: </text> - <text name="Creator:"> - Creatore: + <text name="CreatorNameLabel"> + Ideatore: + </text> + <text name="Creator Name"> + Erica Linden </text> <text name="Owner:"> Proprietario: </text> - <text name="Group:"> + <text name="Owner Name"> + Erica Linden + </text> + <text name="Group_label"> Gruppo: </text> - <button name="button set group" tool_tip="Scegli un gruppo per condividere i permessi di questo oggetto"/> - <name_box initial_value="Caricando..." name="Group Name Proxy"/> - <button label="Intesta" label_selected="Intesta" name="button deed" tool_tip="Intestando questo oggetto lo passa con i permessi del prossimo proprietario. Gli oggetti condivisi dal Gruppo possono essere intestati solo da un Officer del gruppo."/> - <check_box label="Condividi" name="checkbox share with group" tool_tip="Permetti a tutti i Membri del gruppo impostato di condividere la tua modifica ai permessi di questo oggetto. Tu devi Intestare per consentire le restrizioni al ruolo."/> + <button name="button set group" tool_tip="Scegli un gruppo con cui condividere i diritti relativi all'oggetto"/> + <name_box initial_value="Caricamento in corso..." name="Group Name Proxy"/> + <button label="Cessione" label_selected="Cessione" name="button deed" tool_tip="Con una cessione si trasferisce il bene con i diritti al proprietario successivo Gli oggetti in proprietà condivisa di gruppo possono essere ceduti soltanto da un funzionario del gruppo."/> <text name="label click action"> - Clicca per: + Fai clic per: </text> <combo_box name="clickaction"> - <combo_box.item label="Tocca (default)" name="Touch/grab(default)"/> - <combo_box.item label="Siedi sull'oggetto" name="Sitonobject"/> - <combo_box.item label="Compra l'oggetto" name="Buyobject"/> - <combo_box.item label="Paga l'ogggetto" name="Payobject"/> + <combo_box.item label="Tocca (predefinito)" name="Touch/grab(default)"/> + <combo_box.item label="Siediti sull'oggetto" name="Sitonobject"/> + <combo_box.item label="Acquista oggetto" name="Buyobject"/> + <combo_box.item label="Paga oggetto" name="Payobject"/> <combo_box.item label="Apri" name="Open"/> </combo_box> - <check_box label="In Vendita:" name="checkbox for sale"/> - <combo_box name="sale type"> - <combo_box.item label="Copia" name="Copy"/> - <combo_box.item label="Contenuti" name="Contents"/> - <combo_box.item label="Originale" name="Original"/> - </combo_box> - <spinner label="Prezzo: L$" name="Edit Cost"/> - <check_box label="Mostra nella ricerca" name="search_check" tool_tip="Mostra questo oggetto nei risultati della ricerca"/> <panel name="perms_inv"> <text name="perm_modify"> - Puoi modificare questo oggetto + Tu puoi modificare questo oggetto </text> <text name="Anyone can:"> Chiunque: </text> - <check_box label="Sposta" name="checkbox allow everyone move"/> <check_box label="Copia" name="checkbox allow everyone copy"/> - <text name="Next owner can:"> - Prossimo Proprietario: + <check_box label="Sposta" name="checkbox allow everyone move"/> + <text name="GroupLabel"> + Gruppo: + </text> + <check_box label="Condividi" name="checkbox share with group" tool_tip="Consenti a tutti i membri del gruppo selezionato di condividere i tuoi diritti di modifica di questo oggetto. Per attivare le restrizioni per ruolo devi prima effettuare la cessione."/> + <text name="NextOwnerLabel"> + Proprietario successivo: </text> <check_box label="Modifica" name="checkbox next owner can modify"/> <check_box label="Copia" name="checkbox next owner can copy"/> - <check_box label="Transfer" name="checkbox next owner can transfer" tool_tip="Prossimo proprietario può regalare o rivendere questo oggetto"/> - <text name="B:"> - B: - </text> - <text name="O:"> - O: - </text> - <text name="G:"> - G: - </text> - <text name="E:"> - E: - </text> - <text name="N:"> - N: - </text> - <text name="F:"> - F: - </text> + <check_box label="Trasferisci" name="checkbox next owner can transfer" tool_tip="Il prossimo proprietario può regalare o rivendere questo oggetto"/> </panel> + <check_box label="In vendita" name="checkbox for sale"/> + <combo_box name="sale type"> + <combo_box.item label="Copia" name="Copy"/> + <combo_box.item label="Contenuto" name="Contents"/> + <combo_box.item label="Originale" name="Original"/> + </combo_box> + <spinner label="Prezzo: L$" name="Edit Cost"/> + <check_box label="Mostra nella ricerca" name="search_check" tool_tip="Permetti alle persone di vedere questo oggetto nei risultati della ricerca"/> + <text name="B:"> + B: + </text> + <text name="O:"> + O: + </text> + <text name="G:"> + G: + </text> + <text name="E:"> + E: + </text> + <text name="N:"> + N: + </text> + <text name="F:"> + F: + </text> </panel> <panel name="button_panel"> <button label="Apri" name="open_btn"/> <button label="Paga" name="pay_btn"/> - <button label="Compra" name="buy_btn"/> - <button label="Cancella" name="cancel_btn"/> - <button label="Salva" name="save_btn"/> + <button label="Acquista" name="buy_btn"/> + <button label="Dettagli" name="details_btn"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/it/strings.xml b/indra/newview/skins/default/xui/it/strings.xml index 910e6e0960..93239983a8 100644 --- a/indra/newview/skins/default/xui/it/strings.xml +++ b/indra/newview/skins/default/xui/it/strings.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <!-- This file contains strings that used to be hardcoded in the source. It is only for those strings which do not belong in a floater. - For example, the strings used in avatar chat bubbles, and strings + For example, the strings used in avatar chat bubbles, and strings that are returned from one component and may appear in many places--> <strings> <string name="SECOND_LIFE"> @@ -10,6 +10,9 @@ <string name="APP_NAME"> Second Life </string> + <string name="CAPITALIZED_APP_NAME"> + SECOND LIFE + </string> <string name="SUPPORT_SITE"> Portale di supporto di Second Life </string> @@ -17,13 +20,28 @@ Ricerca hardware... </string> <string name="StartupLoading"> - In Caricamento + Caricamento di [APP_NAME]... + </string> + <string name="StartupClearingCache"> + Pulizia della cache... + </string> + <string name="StartupInitializingTextureCache"> + Inizializzazione della cache texture... + </string> + <string name="StartupInitializingVFS"> + Inizializzazione VFS... + </string> + <string name="ProgressRestoring"> + Ripristino in corso... + </string> + <string name="ProgressChangingResolution"> + Modifica della risoluzione... </string> <string name="LoginInProgress"> In connessione. [APP_NAME] può sembrare rallentata. Attendi. </string> <string name="LoginInProgressNoFrozen"> - Logging in... + Accesso in corso... </string> <string name="LoginAuthenticating"> In autenticazione @@ -79,8 +97,11 @@ <string name="LoginFailedNoNetwork"> Errore di rete: Non è stato possibile stabilire un collegamento, controlla la tua connessione. </string> + <string name="LoginFailed"> + Accesso non riuscito. + </string> <string name="Quit"> - Termina + Esci </string> <string name="create_account_url"> http://join.secondlife.com/index.php?lang=it-IT @@ -88,6 +109,24 @@ <string name="AgentLostConnection"> Questa regione sta avendo problemi. Verifica la tua connessione a Internet. </string> + <string name="SavingSettings"> + Salvataggio delle impostazioni... + </string> + <string name="LoggingOut"> + Uscita... + </string> + <string name="ShuttingDown"> + Chiusura... + </string> + <string name="YouHaveBeenDisconnected"> + Sei scollegato dalla regione in cui ti trovavi. + </string> + <string name="SentToInvalidRegion"> + Sei stato indirizzato in una regione non valida. + </string> + <string name="TestingDisconnect"> + Verifica scollegamento viewer + </string> <string name="TooltipPerson"> Persona </string> @@ -140,7 +179,25 @@ Clicca per avere maggiori informazioni sul luogo </string> <string name="TooltipAgentUrl"> - Clicca per vedere il profilo del residente + Clicca per vedere il profilo di questo residente + </string> + <string name="TooltipAgentMute"> + Clicca per disattivare l'audio di questo residente + </string> + <string name="TooltipAgentUnmute"> + Clicca per attivare l'audio del residente + </string> + <string name="TooltipAgentIM"> + Clicca per inviare un IM a questo residente + </string> + <string name="TooltipAgentPay"> + Clicca per pagare il residente + </string> + <string name="TooltipAgentOfferTeleport"> + Fai clic per inviare un'offerta di teleport al residente + </string> + <string name="TooltipAgentRequestFriend"> + Fai clic per inviare una richiesta di amicizia al residente </string> <string name="TooltipGroupUrl"> Clicca per vedere la descrizione del gruppo @@ -152,10 +209,10 @@ Clicca per vedere questa inserzione </string> <string name="TooltipParcelUrl"> - Clicca per vedere la descrizione della parcel + Clicca per vedere la descrizione del lotto </string> <string name="TooltipTeleportUrl"> - Clicca per teleportarti a questa destinazione + Clicca per effettuare il teleport a questa destinazione </string> <string name="TooltipObjectIMUrl"> Clicca per vedere la descrizione dell'oggetto @@ -166,15 +223,34 @@ <string name="TooltipSLAPP"> Clicca per avviare il comando secondlife:// </string> - <string name="CurrentURL" value=" URL attuale: [CurrentURL]"/> + <string name="CurrentURL" value="URL attuale: [CurrentURL]"/> + <string name="TooltipPrice" value="L$ [PRICE]-"/> <string name="SLurlLabelTeleport"> Teleportati a </string> <string name="SLurlLabelShowOnMap"> Mostra la mappa per </string> + <string name="SLappAgentMute"> + Disattiva audio + </string> + <string name="SLappAgentUnmute"> + Riattiva audio + </string> + <string name="SLappAgentIM"> + IM + </string> + <string name="SLappAgentPay"> + Paga + </string> + <string name="SLappAgentOfferTeleport"> + Offri teleport a + </string> + <string name="SLappAgentRequestFriend"> + Richiesta di amicizia + </string> <string name="BUTTON_CLOSE_DARWIN"> - Chiudi (⌘W) + Chiudi (⌘W) </string> <string name="BUTTON_CLOSE_WIN"> Chiudi (Ctrl+W) @@ -191,14 +267,11 @@ <string name="BUTTON_DOCK"> Àncora </string> - <string name="BUTTON_UNDOCK"> - Disàncora - </string> <string name="BUTTON_HELP"> - Mostra gli aiuti + Mostra Aiuto </string> <string name="Searching"> - In ricerca... + Ricerca in corso... </string> <string name="NoneFound"> Nessun risultato. @@ -218,9 +291,6 @@ <string name="AvatarNameWaiting"> (in attesa) </string> - <string name="AvatarNameHippos"> - (hippos) - </string> <string name="GroupNameNone"> (nessuno) </string> @@ -267,19 +337,19 @@ biglietto da visita </string> <string name="landmark"> - landmark + punto di riferimento </string> <string name="legacy script"> script (vecchia versione) </string> <string name="clothing"> - abito + vestiario </string> <string name="object"> oggetto </string> <string name="note card"> - notecard + biglietto </string> <string name="folder"> cartella @@ -309,7 +379,7 @@ immagine targa </string> <string name="trash"> - cestino + Cestino </string> <string name="jpeg image"> immagine jpeg @@ -329,6 +399,9 @@ <string name="symbolic link"> link </string> + <string name="symbolic folder link"> + link alla cartella + </string> <string name="AvatarAway"> Assente </string> @@ -546,7 +619,7 @@ Si </string> <string name="texture_loading"> - In Caricamento... + Caricamento in corso... </string> <string name="worldmap_offline"> Offline @@ -581,6 +654,9 @@ <string name="hang_up"> Disconnesso dalla Voice Chat in-world </string> + <string name="reconnect_nearby"> + Sarai riconnesso alla chat vocale nei dintorni + </string> <string name="ScriptQuestionCautionChatGranted"> A '[OBJECTNAME]', un oggetto di proprietà di '[OWNERNAME]', situato in [REGIONNAME] [REGIONPOS], è stato concesso il permesso di: [PERMISSIONS]. </string> @@ -684,25 +760,25 @@ Scegli la cartella </string> <string name="AvatarSetNotAway"> - Imposta non assente + Imposta come non assente </string> <string name="AvatarSetAway"> - Imposta assente + Imposta come assente </string> <string name="AvatarSetNotBusy"> - Imposta non occupato + Imposta come non occupato </string> <string name="AvatarSetBusy"> - Imposta occupato + Imposta come occupato </string> <string name="shape"> - Shape + Figura corporea </string> <string name="skin"> - Skin + Pelle </string> <string name="hair"> - Capelli + Capigliature </string> <string name="eyes"> Occhi @@ -717,7 +793,7 @@ Scarpe </string> <string name="socks"> - Calze + Calzini </string> <string name="jacket"> Giacca @@ -729,7 +805,7 @@ Maglietta intima </string> <string name="underpants"> - slip + Slip </string> <string name="skirt"> Gonna @@ -743,17 +819,20 @@ <string name="invalid"> non valido </string> + <string name="NewWearable"> + Nuovo [WEARABLE_ITEM] + </string> <string name="next"> - Seguente + Avanti </string> <string name="ok"> OK </string> <string name="GroupNotifyGroupNotice"> - Notice di gruppo + Avviso di gruppo </string> <string name="GroupNotifyGroupNotices"> - Notice di gruppo + Avvisi di gruppo </string> <string name="GroupNotifySentBy"> Inviato da @@ -762,7 +841,7 @@ Allegato: </string> <string name="GroupNotifyViewPastNotices"> - Visualizza i notice passati o scegli qui di non riceverne. + Visualizza gli avvisi precedenti o scegli qui di non riceverne. </string> <string name="GroupNotifyOpenAttachment"> Apri l'allegato @@ -771,13 +850,10 @@ Salva l'allegato </string> <string name="TeleportOffer"> - Offerta di Teletrasporto - </string> - <string name="StartUpNotification"> - [%d] una nuova notifica è arrivata mentre eri assente... + Offerta di Teleport </string> <string name="StartUpNotifications"> - [%d] nuove notifice sono arrivate mentre eri assente... + Nuove notifice sono arrivate mentre eri assente... </string> <string name="OverflowInfoChannelString"> Hai ancora [%d] notifiche @@ -813,46 +889,49 @@ Premi ESC per tornare in visulizzazione normale </string> <string name="InventoryNoMatchingItems"> - Nessun oggetto corrispondente trovato in inventario. + Nessun oggetto corrispondente trovato in inventario. Prova [secondlife:///app/search/groups "Cerca"]. + </string> + <string name="FavoritesNoMatchingItems"> + Trascina qui un punto di riferimento per aggiungerlo ai tuoi preferiti. </string> <string name="InventoryNoTexture"> - Non hai una copia -di questa texture in inventario. - </string> - <string name="no_transfer" value=" (no transfer)"/> - <string name="no_modify" value=" (no modify)"/> - <string name="no_copy" value=" (no copy)"/> - <string name="worn" value=" (indossato)"/> - <string name="link" value=" (link)"/> - <string name="broken_link" value=" (broken_link)"/> + Non hai una copia di questa texture nel tuo inventario + </string> + <string name="no_transfer" value="(nessun trasferimento)"/> + <string name="no_modify" value="(nessuna modifica)"/> + <string name="no_copy" value="(nessuna copia)"/> + <string name="worn" value="(indossato)"/> + <string name="link" value="(link)"/> + <string name="broken_link" value="(broken_link)""/> <string name="LoadingContents"> - Contenuto in caricamento... + Caricamento del contenuto... </string> <string name="NoContents"> Nessun contenuto </string> - <string name="WornOnAttachmentPoint" value=" (indossato su [ATTACHMENT_POINT])"/> - <string name="Chat" value=" Chat :"/> - <string name="Sound" value=" Suono :"/> - <string name="Wait" value=" --- Attendi :"/> - <string name="AnimFlagStop" value=" Ferma l'Animazione :"/> - <string name="AnimFlagStart" value=" Inizia l'Animazione :"/> - <string name="Wave" value=" Wave"/> - <string name="HelloAvatar" value=" Ciao, avatar!"/> - <string name="ViewAllGestures" value=" Visualizza tutte le gesture >>"/> - <string name="Animations" value=" Animazioni,"/> - <string name="Calling Cards" value=" Biglietti da visita,"/> - <string name="Clothing" value=" Vestiti,"/> - <string name="Gestures" value=" Gesture,"/> - <string name="Landmarks" value=" Landmark,"/> - <string name="Notecards" value=" Notecard,"/> - <string name="Objects" value=" Oggetti,"/> - <string name="Scripts" value=" Script,"/> - <string name="Sounds" value=" Suoni,"/> - <string name="Textures" value=" Texture,"/> - <string name="Snapshots" value=" Fotografie,"/> - <string name="No Filters" value="No "/> - <string name="Since Logoff" value=" - Dalla disconnessione"/> + <string name="WornOnAttachmentPoint" value="(indossato su [ATTACHMENT_POINT])"/> + <string name="ActiveGesture" value="[GESLABEL] (attivo)"/> + <string name="Chat" value="Chat :"/> + <string name="Sound" value="Suono :"/> + <string name="Wait" value="--- Attendi :"/> + <string name="AnimFlagStop" value="Ferma l'animazione :"/> + <string name="AnimFlagStart" value="Inizia l'animazione :"/> + <string name="Wave" value="Saluta con la mano"/> + <string name="HelloAvatar" value="Ciao, avatar!"/> + <string name="ViewAllGestures" value="Visualizza tutto >>"/> + <string name="Animations" value="Animazioni,"/> + <string name="Calling Cards" value="Biglietti da visita,"/> + <string name="Clothing" value="Vestiti,"/> + <string name="Gestures" value="Gesture,"/> + <string name="Landmarks" value="Punti di riferimento,"/> + <string name="Notecards" value="Biglietti,"/> + <string name="Objects" value="Oggetti,"/> + <string name="Scripts" value="Script,"/> + <string name="Sounds" value="Suoni,"/> + <string name="Textures" value="Texture,"/> + <string name="Snapshots" value="Fotografie,"/> + <string name="No Filters" value="No"/> + <string name="Since Logoff" value="- Dall'uscita"/> <string name="InvFolder My Inventory"> Il mio inventario </string> @@ -869,22 +948,22 @@ di questa texture in inventario. Suoni </string> <string name="InvFolder Calling Cards"> - Biglieti da visita + Biglietti da visita </string> <string name="InvFolder Landmarks"> - Landmark + Punti di riferimento </string> <string name="InvFolder Scripts"> Script </string> <string name="InvFolder Clothing"> - Vestiti + Vestiario </string> <string name="InvFolder Objects"> Oggetti </string> <string name="InvFolder Notecards"> - Notecard + Biglietti </string> <string name="InvFolder New Folder"> Nuova cartella @@ -920,22 +999,25 @@ di questa texture in inventario. Preferiti </string> <string name="InvFolder Current Outfit"> - Outfit attuale + Abbigliamento attuale </string> <string name="InvFolder My Outfits"> - I miei Outfit + Il mio vestiario + </string> + <string name="InvFolder Accessories"> + Accessori </string> <string name="InvFolder Friends"> Amici </string> <string name="InvFolder All"> - Tutti + Tutto </string> <string name="Buy"> - Compra + Acquista </string> <string name="BuyforL$"> - Compra per L$ + Acquista per L$ </string> <string name="Stone"> Pietra @@ -962,7 +1044,7 @@ di questa texture in inventario. Luce </string> <string name="KBShift"> - Shift + Maiusc </string> <string name="KBCtrl"> Ctrl @@ -1112,13 +1194,13 @@ di questa texture in inventario. [COUNT] giorni </string> <string name="GroupMembersA"> - [COUNT] membro + [COUNT] iscritto </string> <string name="GroupMembersB"> - [COUNT] membri + [COUNT] iscritti </string> <string name="GroupMembersC"> - [COUNT] membri + [COUNT] iscritti </string> <string name="AcctTypeResident"> Residente @@ -1127,10 +1209,10 @@ di questa texture in inventario. In prova </string> <string name="AcctTypeCharterMember"> - Membro onorario + Socio onorario </string> <string name="AcctTypeEmployee"> - Impiegato Linden Lab + Dipendente Linden Lab </string> <string name="PaymentInfoUsed"> Informazioni di pagamento usate @@ -1139,7 +1221,7 @@ di questa texture in inventario. Informazioni di pagamento registrate </string> <string name="NoPaymentInfoOnFile"> - Nessuna informazione di pagamento + Nessuna informazione di pagamento disponibile </string> <string name="AgeVerified"> Età verificata @@ -1154,7 +1236,7 @@ di questa texture in inventario. In alto a destra </string> <string name="Top"> - In alto + in alto </string> <string name="Top Left"> In alto a sinistra @@ -1196,22 +1278,22 @@ di questa texture in inventario. ricompila </string> <string name="ResetQueueTitle"> - Avanzamento reset + Azzera avanzamento </string> <string name="ResetQueueStart"> - reset + azzera </string> <string name="RunQueueTitle"> - Avanzamento attivazione + Attiva avanzamento </string> <string name="RunQueueStart"> - Attiva + attiva </string> <string name="NotRunQueueTitle"> - Avanzamento disattivazione + Disattiva avanzamento </string> <string name="NotRunQueueStart"> - Disattivazione + disattiva </string> <string name="CompileSuccessful"> Compilazione riuscita! @@ -1231,18 +1313,18 @@ di questa texture in inventario. <string name="GroupsNone"> nessuno </string> - <string name="Group" value=" (gruppo)"/> + <string name="Group" value="(gruppo)"/> <string name="Unknown"> (Sconosciuto) </string> <string name="SummaryForTheWeek" value="Riassunto della settimana, partendo dal"/> - <string name="NextStipendDay" value="Il prossimo giorno di stipendio è "/> - <string name="GroupIndividualShare" value=" Gruppo Dividendi individuali"/> + <string name="NextStipendDay" value="Il prossimo giorno di stipendio è"/> + <string name="GroupIndividualShare" value="Gruppo Dividendi individuali"/> <string name="Balance"> Saldo </string> <string name="Credits"> - Crediti + Ringraziamenti </string> <string name="Debits"> Debiti @@ -1257,7 +1339,7 @@ di questa texture in inventario. Proprietà principale </string> <string name="IMMainland"> - mainland + continente </string> <string name="IMTeen"> teen @@ -1266,20 +1348,173 @@ di questa texture in inventario. errore </string> <string name="RegionInfoAllEstatesOwnedBy"> - la proprietà posseduta da [OWNER] + tutte le proprietà immobiliari di [OWNER] </string> <string name="RegionInfoAllEstatesYouOwn"> - Le proprietà che possiedi + tutte le tue proprietà immobiliari </string> <string name="RegionInfoAllEstatesYouManage"> - Le proprietà di cui sei manager per conto di [OWNER] + tutte le proprietà immobiliari che gestisci per conto di [OWNER] </string> <string name="RegionInfoAllowedResidents"> - Residenti ammessi: ([ALLOWEDAGENTS], massimo [MAXACCESS]) + Residenti consentiti: ([ALLOWEDAGENTS], massimo [MAXACCESS]) </string> <string name="RegionInfoAllowedGroups"> Gruppi ammessi: ([ALLOWEDGROUPS], massimo [MAXACCESS]) </string> + <string name="ScriptLimitsParcelScriptMemory"> + Memoria dello script del lotto + </string> + <string name="ScriptLimitsParcelsOwned"> + Lotti in elenco: [PARCELS] + </string> + <string name="ScriptLimitsMemoryUsed"> + Memoria utilizzata: [COUNT] kb di [MAX] kb; [AVAILABLE] kb disponibili + </string> + <string name="ScriptLimitsMemoryUsedSimple"> + Memoria utilizzata: [COUNT] kb + </string> + <string name="ScriptLimitsParcelScriptURLs"> + URL degli script lotti + </string> + <string name="ScriptLimitsURLsUsed"> + URL utilizzati: [COUNT] di [MAX]; [AVAILABLE] disponibili + </string> + <string name="ScriptLimitsURLsUsedSimple"> + URL utilizzati: [COUNT] + </string> + <string name="ScriptLimitsRequestError"> + Errore nella richiesta di informazioni + </string> + <string name="ScriptLimitsRequestNoParcelSelected"> + Nessun lotto selezionato + </string> + <string name="ScriptLimitsRequestWrongRegion"> + Errore: le informazioni sullo script sono disponibili solo nella tua regione attuale + </string> + <string name="ScriptLimitsRequestWaiting"> + Recupero informazioni in corso... + </string> + <string name="ScriptLimitsRequestDontOwnParcel"> + Non hai il permesso di visionare questo lotto + </string> + <string name="SITTING_ON"> + Seduto su + </string> + <string name="ATTACH_CHEST"> + Petto + </string> + <string name="ATTACH_HEAD"> + Testa + </string> + <string name="ATTACH_LSHOULDER"> + Spalla sinistra + </string> + <string name="ATTACH_RSHOULDER"> + Spalla destra + </string> + <string name="ATTACH_LHAND"> + Mano sinistra + </string> + <string name="ATTACH_RHAND"> + Mano destra + </string> + <string name="ATTACH_LFOOT"> + Piede sinisto + </string> + <string name="ATTACH_RFOOT"> + Piede destro + </string> + <string name="ATTACH_BACK"> + Indietro + </string> + <string name="ATTACH_PELVIS"> + Pelvi + </string> + <string name="ATTACH_MOUTH"> + Bocca + </string> + <string name="ATTACH_CHIN"> + Mento + </string> + <string name="ATTACH_LEAR"> + Orecchio sinistro + </string> + <string name="ATTACH_REAR"> + Orecchio destro + </string> + <string name="ATTACH_LEYE"> + Occhio sinistro + </string> + <string name="ATTACH_REYE"> + Occhio destro + </string> + <string name="ATTACH_NOSE"> + Naso + </string> + <string name="ATTACH_RUARM"> + Braccio destro + </string> + <string name="ATTACH_RLARM"> + Avambraccio destro + </string> + <string name="ATTACH_LUARM"> + Braccio sinistro + </string> + <string name="ATTACH_LLARM"> + Avambraccio sinistro + </string> + <string name="ATTACH_RHIP"> + Anca destra + </string> + <string name="ATTACH_RULEG"> + Coscia destra + </string> + <string name="ATTACH_RLLEG"> + Coscia destra + </string> + <string name="ATTACH_LHIP"> + Anca sinista + </string> + <string name="ATTACH_LULEG"> + Coscia sinistra + </string> + <string name="ATTACH_LLLEG"> + Polpaccio sinistro + </string> + <string name="ATTACH_BELLY"> + Addome + </string> + <string name="ATTACH_RPEC"> + Petto destro + </string> + <string name="ATTACH_LPEC"> + Petto sinistro + </string> + <string name="ATTACH_HUD_CENTER_2"> + HUD in centro 2 + </string> + <string name="ATTACH_HUD_TOP_RIGHT"> + HUD alto a destra + </string> + <string name="ATTACH_HUD_TOP_CENTER"> + HUD alto in centro + </string> + <string name="ATTACH_HUD_TOP_LEFT"> + HUD alto a sinistra + </string> + <string name="ATTACH_HUD_CENTER_1"> + HUD in centro 1 + </string> + <string name="ATTACH_HUD_BOTTOM_LEFT"> + HUD basso a sinistra + </string> + <string name="ATTACH_HUD_BOTTOM"> + HUD basso + </string> + <string name="ATTACH_HUD_BOTTOM_RIGHT"> + HUD basso a destra + </string> <string name="CursorPos"> Riga [LINE], Colonna [COLUMN] </string> @@ -1287,13 +1522,19 @@ di questa texture in inventario. [COUNT] trovato/i </string> <string name="PanelContentsNewScript"> - Nuovo Script + Nuovo script + </string> + <string name="PanelContentsTooltip"> + Contenuto dell'oggetto + </string> + <string name="BusyModeResponseDefault"> + Il residente al quale hai inviato un messaggio è in modalità 'occupato', ovvero ha chiesto di non essere disturbato. Il tuo messaggio comparirà nel suo pannello IM, dove potrà essere letto in un secondo momento. </string> <string name="MuteByName"> - (per nome) + (in base al nome) </string> <string name="MuteAgent"> - (residente) + (Residente) </string> <string name="MuteObject"> (oggetto) @@ -1302,18 +1543,18 @@ di questa texture in inventario. (gruppo) </string> <string name="RegionNoCovenant"> - Non esiste nessun regolamento per questa proprietà. + Non esiste alcun regolamento per questa proprietà. </string> <string name="RegionNoCovenantOtherOwner"> - Non esiste nessun regolamento per questa proprietà. Il terreno di questa proprietà è messo in vendita dal proprietario, non dalla Linden Lab. Contatta il proprietario del terreno per i dettagli della vendita. + Non esiste alcun regolamento per questa proprietà. Il terreno di questa proprietà è messo in vendita dal proprietario, non dalla Linden Lab. Contatta il proprietario del terreno per i dettagli della vendita. </string> <string name="covenant_last_modified"> Ultima modifica: </string> - <string name="none_text" value=" (nessuno) "/> - <string name="never_text" value=" (mai) "/> + <string name="none_text" value="(nessuno)"/> + <string name="never_text" value="(mai)"/> <string name="GroupOwned"> - Posseduta da un gruppo + Di proprietà di un gruppo </string> <string name="Public"> Pubblica @@ -1324,26 +1565,35 @@ di questa texture in inventario. <string name="ClassifiedUpdateAfterPublish"> (si aggiornerà dopo la pubblicazione) </string> + <string name="NoPicksClassifiedsText"> + Non hai creato luoghi preferiti né inserzioni. Clicca il pulsante più qui sotto per creare un luogo preferito o un'inserzione. + </string> + <string name="NoAvatarPicksClassifiedsText"> + L'utente non ha luoghi preferiti né inserzioni + </string> + <string name="PicksClassifiedsLoadingText"> + Caricamento in corso... + </string> <string name="MultiPreviewTitle"> Anteprima </string> <string name="MultiPropertiesTitle"> - Proprietà + Beni immobiliari </string> <string name="InvOfferAnObjectNamed"> - Un oggetto chiamato + Un oggetto denominato </string> <string name="InvOfferOwnedByGroup"> - Posseduto dal gruppo + di proprietà del gruppo </string> <string name="InvOfferOwnedByUnknownGroup"> - Posseduto da un gruppo sconosciuto + di proprietà di un gruppo sconosciuto </string> <string name="InvOfferOwnedBy"> - Posseduto da + di proprietà di </string> <string name="InvOfferOwnedByUnknownUser"> - Posseduto da un'utente sconosciuto + di proprietà di un utente sconosciuto </string> <string name="InvOfferGaveYou"> Ti ha offerto @@ -1379,7 +1629,7 @@ di questa texture in inventario. Saldo </string> <string name="GroupMoneyCredits"> - Crediti + Ringraziamenti </string> <string name="GroupMoneyDebits"> Debiti @@ -1391,32 +1641,38 @@ di questa texture in inventario. Oggetti acquisiti </string> <string name="Cancel"> - Cancella + Annulla </string> <string name="UploadingCosts"> - Costi di caricamento [%s] + Il caricamento di [NAME] costa L$ [AMOUNT] + </string> + <string name="BuyingCosts"> + L'acquisto di [NAME] costa L$ [AMOUNT] </string> <string name="UnknownFileExtension"> Estensione del file sconosciuta [.%s] Tipi conosciuti .wav, .tga, .bmp, .jpg, .jpeg, or .bvh </string> + <string name="MuteObject2"> + Blocca + </string> <string name="AddLandmarkNavBarMenu"> - Aggiungi landmark... + Aggiungi punto di riferimento... </string> <string name="EditLandmarkNavBarMenu"> - Modifica landmark... + Modifica punto di riferimento... </string> <string name="accel-mac-control"> - ⌃ + ⌃ </string> <string name="accel-mac-command"> - ⌘ + ⌘ </string> <string name="accel-mac-option"> - ⌥ + ⌥ </string> <string name="accel-mac-shift"> - ⇧ + ⇧ </string> <string name="accel-win-control"> Ctrl+ @@ -1428,22 +1684,22 @@ Tipi conosciuti .wav, .tga, .bmp, .jpg, .jpeg, or .bvh Shift+ </string> <string name="FileSaved"> - File Salvato + File salvato </string> <string name="Receiving"> In ricezione </string> <string name="AM"> - AM + antemeridiane </string> <string name="PM"> - PM + pomeridiane </string> <string name="PST"> - PST + Ora Pacifico </string> <string name="PDT"> - PDT + Ora legale Pacifico </string> <string name="Forward"> Avanti @@ -1455,7 +1711,7 @@ Tipi conosciuti .wav, .tga, .bmp, .jpg, .jpeg, or .bvh Destra </string> <string name="Back"> - Dietro + Indietro </string> <string name="North"> Nord @@ -1476,13 +1732,13 @@ Tipi conosciuti .wav, .tga, .bmp, .jpg, .jpeg, or .bvh Giù </string> <string name="Any Category"> - Tutte le categorie + Qualsiasi categoria </string> <string name="Shopping"> - Shopping + Acquisti </string> <string name="Land Rental"> - Affitto terreni + Affitto terreno </string> <string name="Property Rental"> Affitto proprietà @@ -1494,13 +1750,13 @@ Tipi conosciuti .wav, .tga, .bmp, .jpg, .jpeg, or .bvh Nuovi prodotti </string> <string name="Employment"> - Impiego + Lavoro </string> <string name="Wanted"> - Richiesti + Cercasi </string> <string name="Service"> - Servizi + Servizio </string> <string name="Personal"> Personale @@ -1539,7 +1795,7 @@ Tipi conosciuti .wav, .tga, .bmp, .jpg, .jpeg, or .bvh Residenziale </string> <string name="Stage"> - Stage + Fase </string> <string name="Other"> Altro @@ -1551,10 +1807,10 @@ Tipi conosciuti .wav, .tga, .bmp, .jpg, .jpeg, or .bvh Tu </string> <string name="Multiple Media"> - Media Multipli + Più supporti </string> <string name="Play Media"> - Media Play/Pausa + Riproduci/Pausa supporto </string> <string name="MBCmdLineError"> Un errore è stato riscontrato analizzando la linea di comando. @@ -1562,17 +1818,17 @@ Per informazioni: http://wiki.secondlife.com/wiki/Client_parameters Errore: </string> <string name="MBCmdLineUsg"> - uso linea di comando del programma [APP_NAME] : + Uso linea di comando del programma [APP_NAME] : </string> <string name="MBUnableToAccessFile"> Il programma [APP_NAME] non è in grado di accedere ad un file necessario. -Potrebbe darsi che tu abbia copie multiple attivate, o il tuo sistema reputa erroneamente che il file sia già aperto. +Potrebbe darsi che tu abbia copie multiple attivate o che il tuo sistema reputi erroneamente che il file sia già aperto. Se il problema persiste, riavvia il computer e riprova. -Se il problema persiste ancora, dovresti completamente disinstallare l'applicazione [APP_NAME] e reinstallarla. +Se il problema continua ancora, dovresti completamente disinstallare l'applicazione [APP_NAME] e reinstallarla. </string> <string name="MBFatalError"> - Errore fatale + Errore critico </string> <string name="MBRequiresAltiVec"> Il programma [APP_NAME] richiede un processore con AltiVec (G4 o superiore). @@ -1591,7 +1847,7 @@ Vuoi mandare un crash report? </string> <string name="MBNoDirectX"> Il programmma [APP_NAME] non riesce a trovare una DirectX 9.0b o superiore. -[APP_NAME] usa le DirectX per determinare hardware e/o i driver non aggiornati che possono causare problemi di stabilità, scarsa performance e interruzioni. Sebbene tu possa avviare il programma [APP_NAME] senza di esse, raccomandiamo caldamente di installare le DirectX 9.0b. +[APP_NAME] usa DirectX per rilevare hardware e/o i driver non aggiornati che possono causare problemi di stabilità, scarsa performance e interruzioni. Benché tu possa avviare il programma [APP_NAME] senza di esse, consigliamo caldamente l'esecuzione con DirectX 9.0b. Vuoi continuare? </string> @@ -1599,8 +1855,8 @@ Vuoi continuare? Attenzione </string> <string name="MBNoAutoUpdate"> - L'aggiornamento automatico non è stato ancora implementato per Linux. -Raccomandiamo di scaricare l'utima versione da www.secondlife.com. + L'aggiornamento automatico non è stato ancora realizzato per Linux. +Consigliamo di scaricare l'ultima versione direttamente da www.secondlife.com. </string> <string name="MBRegClassFailed"> RegisterClass non riuscito @@ -1609,8 +1865,8 @@ Raccomandiamo di scaricare l'utima versione da www.secondlife.com. Errore </string> <string name="MBFullScreenErr"> - Impossibile visualizzare a schermo intero a risoluzione [WIDTH] x [HEIGHT]. -Visualizzazione corrente ridotta a finestra. + Impossibile visualizzare a schermo intero con risoluzione [WIDTH] x [HEIGHT]. +Visualizzazione corrente in modalità finestra. </string> <string name="MBDestroyWinFailed"> Errore di arresto durante il tentativo di chiusura della finestra (DestroyWindow() non riuscito) @@ -1628,14 +1884,14 @@ Visualizzazione corrente ridotta a finestra. Impossibile ottenere una descrizione del formato pixel </string> <string name="MBTrueColorWindow"> - [APP_NAME] richiede True Color (32-bit) per funzionare. -Vai alle impostazioni dello schermo del tuo computer e imposta il colore in modalità 32-bit. + [APP_NAME] richiede True Color (32 bit) per funzionare. +Vai alle impostazioni dello schermo del tuo computer e imposta il colore in modalità 32 bit. </string> <string name="MBAlpha"> - [APP_NAME] non funziona poichè è impossibile trovare un canale alpha ad 8 Bit. Questo problema normalmente deriva dai driver della scheda video. + [APP_NAME] non funziona poichè è impossibile trovare un canale alpha a 8 bit. Questo problema normalmente deriva dai driver della scheda video. Assicurati di avere installato i driver della scheda video più recenti. -Assicurati anche che il monitor sia impostato a True Color (32-bit) nel pannello di controllo > Display > Settings. -Se il messaggio persiste, contatta contatta [SUPPORT_SITE]. +Assicurati anche che il monitor sia impostato a True Color (32 bit) nel Pannello di controllo > Schermo > Impostazioni. +Se il messaggio persiste, contatta [SUPPORT_SITE]. </string> <string name="MBPixelFmtSetErr"> Impossibile impostare il formato pixel @@ -1647,7 +1903,7 @@ Se il messaggio persiste, contatta contatta [SUPPORT_SITE]. Impossibile attivare il GL rendering </string> <string name="MBVideoDrvErr"> - [APP_NAME] Non riesce ad avviarsi perchè i driver della tua scheda video non sono stati installati correttamente, non sono aggiornati, o sono per un hardware non supportato. Assicurati di avere i driver della scheda video più recenti e anche se li hai installati, prova a reinstallarli di nuovo. + [APP_NAME] Non riesce ad avviarsi perchè i driver della tua scheda video non sono stati installati correttamente, non sono aggiornati, o sono per un hardware non supportato. Assicurati di avere i driver della scheda video più recenti e anche se li hai installati, prova a installarli di nuovo. Se il messaggio persiste, contatta [SUPPORT_SITE]. </string> @@ -1672,44 +1928,20 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. <string name="Attached Earlobes"> Lobi attaccati </string> - <string name="Back Bangs"> - #Back Bangs - </string> - <string name="Back Bangs Down"> - #Back Bangs Down - </string> - <string name="Back Bangs Up"> - #Back Bangs Up - </string> <string name="Back Fringe"> Frangetta all'indietro </string> - <string name="Back Hair"> - #Back Hair - </string> - <string name="Back Hair Down"> - #Back Hair Down - </string> - <string name="Back Hair Up"> - #Back Hair Up - </string> <string name="Baggy"> - Con le borse + Larghi </string> <string name="Bangs"> Frange </string> - <string name="Bangs Down"> - #Bangs Down - </string> - <string name="Bangs Up"> - #Bangs Up - </string> <string name="Beady Eyes"> Occhi piccoli </string> <string name="Belly Size"> - punto vita + Punto vita </string> <string name="Big"> Grande @@ -1717,23 +1949,20 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. <string name="Big Butt"> Sedere grande </string> - <string name="Big Eyeball"> - #Big Eyeball - </string> <string name="Big Hair Back"> - Gonfiore dei capelli: dietro + Capigliatura grande: Indietro </string> <string name="Big Hair Front"> - Gonfiore dei capelli: davanti + Capigliatura grande: anteriore </string> <string name="Big Hair Top"> - Gonfiore dei capelli: sopra + Capigliatura grande: in alto </string> <string name="Big Head"> - Grandezza testa + Grande testa </string> <string name="Big Pectorals"> - Grandezza pettorali + Grandi pettorali </string> <string name="Big Spikes"> Capelli con punte @@ -1766,13 +1995,13 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. Lentiggini e nei </string> <string name="Body Thick"> - Corpo robusto + Corpo più robusto </string> <string name="Body Thickness"> Robustezza del corpo </string> <string name="Body Thin"> - Magrezza del corpo + Corpo più magro </string> <string name="Bow Legged"> Gambe arcuate @@ -1781,7 +2010,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. Altezza del seno </string> <string name="Breast Cleavage"> - Avvicinamento dei seni + Décolleté </string> <string name="Breast Size"> Grandezza del seno @@ -1796,7 +2025,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. Grandezza delle sopracciglia </string> <string name="Bug Eyes"> - Sporgenza degli occhi + Occhi sporgenti </string> <string name="Bugged Eyes"> Occhi sporgenti @@ -1817,19 +2046,19 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. Grandezza del sedere </string> <string name="bustle skirt"> - Arricciatura posteriore + Crinolina </string> <string name="no bustle"> - Meno arricciatura + Nessuna crinolina </string> <string name="more bustle"> - Più arricciatura + Più crinolina </string> <string name="Chaplin"> Baffetti </string> <string name="Cheek Bones"> - Mascella + Zigomi </string> <string name="Chest Size"> Ampiezza del torace @@ -1838,7 +2067,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. Angolo del mento </string> <string name="Chin Cleft"> - Fessura inf. del mento + Fossetta sul mento </string> <string name="Chin Curtains"> Barba sottomento @@ -1847,16 +2076,16 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. Profondità mento </string> <string name="Chin Heavy"> - Appuntita verso l'alto + Mento forte </string> <string name="Chin In"> Mento in dentro </string> <string name="Chin Out"> - Mento in fuori + Mento sporgente </string> <string name="Chin-Neck"> - Grandezza mento-collo + Mento-collo </string> <string name="Clear"> Trasparente @@ -1871,46 +2100,40 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. Chiusa </string> <string name="Closed Back"> - Spacco chiuso dietro + Chiuso dietro </string> <string name="Closed Front"> - Spacco chiuso davanti + Chiuso davanti </string> <string name="Closed Left"> - Spacco chiuso sx + Chiuso sinistra </string> <string name="Closed Right"> - Spacco chiuso dx + Chiuso destra </string> <string name="Coin Purse"> Meno pronunciati </string> <string name="Collar Back"> - Scollatura posteriore + Colletto posteriore </string> <string name="Collar Front"> - Scollatura anteriore + Colletto anteriore </string> <string name="Corner Down"> Angolo all'ingiù </string> - <string name="Corner Normal"> - Angolo Normale - </string> <string name="Corner Up"> Angolo all'insù </string> <string name="Creased"> - Alzato + Piega </string> <string name="Crooked Nose"> Naso storto </string> - <string name="Cropped Hair"> - Capelli raccolti - </string> <string name="Cuff Flare"> - Fondo pantalone + Svasato con risvolto </string> <string name="Dark"> Scuro @@ -1922,49 +2145,43 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. Più scuro </string> <string name="Deep"> - Più pronunciato + Profondo </string> <string name="Default Heels"> Tacchi standard </string> - <string name="Default Toe"> - Punta del piede standard - </string> <string name="Dense"> - Meno rade - </string> - <string name="Dense hair"> - #Dense Hair + Folti </string> <string name="Double Chin"> Doppio mento </string> <string name="Downturned"> - Naso all'ingiù + All'ingiù </string> <string name="Duffle Bag"> Più pronunciati </string> <string name="Ear Angle"> - Orecchie a sventola + Angolo orecchie </string> <string name="Ear Size"> Grandezza orecchie </string> <string name="Ear Tips"> - Tipo di orecchio + Estremità orecchie </string> <string name="Egg Head"> Ovalizzazione testa </string> <string name="Eye Bags"> - Borse sotto agli occhi + Occhiaie </string> <string name="Eye Color"> Colore degli occhi </string> <string name="Eye Depth"> - Occhi incavati + Profondità degli occhi </string> <string name="Eye Lightness"> Luminosità degli occhi @@ -1973,7 +2190,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. Apertura degli occhi </string> <string name="Eye Pop"> - Differenza apertura occhi + Prominenza degli occhi </string> <string name="Eye Size"> Grandezza occhi @@ -1981,9 +2198,6 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. <string name="Eye Spacing"> Distanza occhi </string> - <string name="Eyeball Size"> - #Eyeball Size - </string> <string name="Eyebrow Arc"> Arco delle sopracciglia </string> @@ -2008,69 +2222,21 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. <string name="Eyeliner Color"> Colore dell'eyeliner </string> - <string name="Eyes Back"> - #Eyes Back - </string> <string name="Eyes Bugged"> Occhi sporgenti </string> - <string name="Eyes Forward"> - #Eyes Forward - </string> - <string name="Eyes Long Head"> - #Eyes Long Head - </string> - <string name="Eyes Shear Left Up"> - Distorsione occhi in alto a sx - </string> - <string name="Eyes Shear Right Up"> - Distorsione occhi in alto a dx - </string> - <string name="Eyes Short Head"> - #Eyes Short Head - </string> - <string name="Eyes Spread"> - #Eyes Spread - </string> - <string name="Eyes Sunken"> - #Eyes Sunken - </string> - <string name="Eyes Together"> - #Eyes Together - </string> <string name="Face Shear"> - Distorsione del viso + Taglio del viso </string> <string name="Facial Definition"> - Lineamenti del viso + Definizione del viso </string> <string name="Far Set Eyes"> Occhi distanti </string> - <string name="Fat"> - #Fat - </string> - <string name="Fat Head"> - #Fat Head - </string> <string name="Fat Lips"> Labbra carnose </string> - <string name="Fat Lower"> - #Fat Lower - </string> - <string name="Fat Lower Lip"> - Labbro inferiore sporgente - </string> - <string name="Fat Torso"> - #Fat Torso - </string> - <string name="Fat Upper"> - #Fat Upper - </string> - <string name="Fat Upper Lip"> - Labbro superiore sporgente - </string> <string name="Female"> Femmina </string> @@ -2081,7 +2247,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. Dita </string> <string name="Flared Cuffs"> - Fondo largo + Risvolti svasati </string> <string name="Flat"> Piatto @@ -2090,88 +2256,73 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. Sedere piatto </string> <string name="Flat Head"> - Viso piatto + Testa piatta </string> <string name="Flat Toe"> Punta piatta </string> <string name="Foot Size"> - Grandezza piede + Misura piede </string> <string name="Forehead Angle"> Angolo della fronte </string> <string name="Forehead Heavy"> - Appuntita verso il basso + Fronte sporgente </string> <string name="Freckles"> Lentiggini </string> - <string name="Front Bangs Down"> - #Front Bangs Down - </string> - <string name="Front Bangs Up"> - #Front Bangs Up - </string> <string name="Front Fringe"> Frangetta </string> - <string name="Front Hair"> - #Front Hair - </string> - <string name="Front Hair Down"> - #Front Hair Down - </string> - <string name="Front Hair Up"> - #Front Hair Up - </string> <string name="Full Back"> - Scostati + Dietro gonfi </string> <string name="Full Eyeliner"> - Con eyeliner + Eyeliner marcato </string> <string name="Full Front"> - Anteriore pieno + Anteriore gonfio </string> <string name="Full Hair Sides"> - Riempimento lati + Lati capelli gonfi </string> <string name="Full Sides"> - Pieni + Lati gonfi </string> <string name="Glossy"> Lucido </string> <string name="Glove Fingers"> - Dita dei guanti + Dita con guanti </string> <string name="Glove Length"> Lunghezza guanti </string> <string name="Hair"> - Capelli + Capigliature </string> <string name="Hair Back"> - Capelli: dietro + Capelli: Indietro </string> <string name="Hair Front"> - Capelli: davanti + Capelli: anteriore </string> <string name="Hair Sides"> Capelli: lati </string> <string name="Hair Sweep"> - Traslazione + Direzione capigliatura </string> <string name="Hair Thickess"> - Spessore + Foltezza </string> <string name="Hair Thickness"> - Spessore barba + Foltezza </string> <string name="Hair Tilt"> - Rotazione capelli + Inclinazione </string> <string name="Hair Tilted Left"> Verso sinistra @@ -2180,16 +2331,16 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. Verso destra </string> <string name="Hair Volume"> - Capelli: volume + Capelli: Volume </string> <string name="Hand Size"> Grandezza mani </string> <string name="Handlebars"> - Baffi lunghi + Baffi a manubrio </string> <string name="Head Length"> - Sporgenza del viso + Lunghezza testa </string> <string name="Head Shape"> Forma della testa @@ -2198,7 +2349,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. Grandezza della testa </string> <string name="Head Stretch"> - Compressione lat testa + Allungamento testa </string> <string name="Heel Height"> Altezza tacchi @@ -2222,7 +2373,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. Alta </string> <string name="High and Tight"> - Cavallo alto + Alto e stretto </string> <string name="Higher"> Più alto @@ -2267,7 +2418,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. Forma del mento </string> <string name="Join"> - Avvicinati + Iscriviti </string> <string name="Jowls"> Guance @@ -2297,7 +2448,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. Meno </string> <string name="Less Body Fat"> - Meno grasso + Meno grasso corporeo </string> <string name="Less Curtains"> Meno @@ -2339,16 +2490,16 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. Meno </string> <string name="Lighter"> - Più chiaro + Più leggero </string> <string name="Lip Cleft"> - Distanza divis. labbro sup. + Distanza fossetta labbro </string> <string name="Lip Cleft Depth"> - Prof. spacco labbro sup. + Prof. fossetta labbro </string> <string name="Lip Fullness"> - Riempimento delle labbra + Volume labbra </string> <string name="Lip Pinkness"> Tonalità rosa labbra @@ -2375,7 +2526,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. Lungo </string> <string name="Long Head"> - Viso sporgente + Testa lunga </string> <string name="Long Hips"> Bacino alto @@ -2387,7 +2538,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. Collo lungo </string> <string name="Long Pigtails"> - Ciuffi laterali lunghi + Codini lunghi </string> <string name="Long Ponytail"> Codino lungo @@ -2398,17 +2549,14 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. <string name="Long arms"> Braccia lunghe </string> - <string name="Longcuffs"> - Longcuffs - </string> <string name="Loose Pants"> - Non attillati + Pantaloni ampi </string> <string name="Loose Shirt"> - Non attillata + Camicia ampia </string> <string name="Loose Sleeves"> - Maniche lente + Maniche non attillate </string> <string name="Love Handles"> Maniglie dell'amore @@ -2426,7 +2574,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. Bassa </string> <string name="Low and Loose"> - Cavallo basso + Basso e ampio </string> <string name="Lower"> Più basso @@ -2435,7 +2583,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. Parte bassa del setto </string> <string name="Lower Cheeks"> - Guance + Guance inferiori </string> <string name="Male"> Maschio @@ -2444,13 +2592,13 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. Riga nel mezzo </string> <string name="More"> - Di più + Altro </string> <string name="More Blush"> Più fard </string> <string name="More Body Fat"> - Più grasso + Più grasso corporeo </string> <string name="More Curtains"> Più @@ -2519,7 +2667,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. Posizione della bocca </string> <string name="Mowhawk"> - Vuoti + Moicana </string> <string name="Muscular"> Muscolatura @@ -2563,9 +2711,6 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. <string name="No Eyeshadow"> Senza ombretto </string> - <string name="No Heels"> - No Heels - </string> <string name="No Lipgloss"> Senza lipgloss </string> @@ -2597,10 +2742,10 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. Superiore normale </string> <string name="Nose Left"> - Storto a sinistra + Naso a sinistra </string> <string name="Nose Right"> - Storto a destra + Naso a destra </string> <string name="Nose Size"> Grandezza naso @@ -2623,20 +2768,17 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. <string name="Nostril Width"> Larghezza narici </string> - <string name="Old"> - Vecchio - </string> <string name="Opaque"> Opaco </string> <string name="Open"> - Aperto + Apri </string> <string name="Open Back"> Retro aperto </string> <string name="Open Front"> - Aperto Frontale + Davanti aperto </string> <string name="Open Left"> Lato sin. aperto @@ -2672,7 +2814,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. Genitali </string> <string name="Painted Nails"> - Unghie colorate + Unghie smaltate </string> <string name="Pale"> Pallido @@ -2687,7 +2829,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. Lunghezza pantaloni </string> <string name="Pants Waist"> - Altezza slip + Taglia pantalone </string> <string name="Pants Wrinkles"> Pantaloni con le grinze @@ -2705,7 +2847,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. Pigmento </string> <string name="Pigtails"> - Ciuffi + Codini </string> <string name="Pink"> Rosa @@ -2725,9 +2867,6 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. <string name="Pointy Heels"> Tacchi a spillo </string> - <string name="Pointy Toe"> - Punta appuntita - </string> <string name="Ponytail"> Codino </string> @@ -2752,15 +2891,9 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. <string name="Red Hair"> Presenza di rosso nei capelli </string> - <string name="Red Skin"> - Red Skin - </string> <string name="Regular"> Normale </string> - <string name="Regular Muscles"> - Muscolatura normale - </string> <string name="Right Part"> Riga a destra </string> @@ -2770,9 +2903,6 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. <string name="Round"> Rotondo </string> - <string name="Round Forehead"> - Round Forehead - </string> <string name="Ruddiness"> Rossore </string> @@ -2785,53 +2915,35 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. <string name="Saddle Bags"> Rotondità fianchi </string> - <string name="Saddlebags"> - Rotondità fianchi - </string> - <string name="Scrawny"> - Scrawny - </string> <string name="Scrawny Leg"> Gambe magre </string> <string name="Separate"> Separati </string> - <string name="Shading"> - Shading - </string> - <string name="Shadow hair"> - Shadow hair - </string> <string name="Shallow"> Meno pronunciato </string> <string name="Shear Back"> - Accostamento posteriore + Taglio posteriore </string> <string name="Shear Face"> - Distorsione viso + Taglio del viso </string> <string name="Shear Front"> - Riempimento davanti - </string> - <string name="Shear Left"> - A sinistra + Taglio anteriore </string> <string name="Shear Left Up"> Distorto a sinistra </string> - <string name="Shear Right"> - A destra - </string> <string name="Shear Right Up"> Distorto a destra </string> <string name="Sheared Back"> - Accostati + Taglio verso dietro </string> <string name="Sheared Front"> - Anteriormente vuoto + Taglio verso davanti </string> <string name="Shift Left"> A sinistra @@ -2867,10 +2979,10 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. Collo corto </string> <string name="Short Pigtails"> - Ciuffi laterali corti + Codini corti </string> <string name="Short Ponytail"> - Codino Corto + Codino corto </string> <string name="Short Sideburns"> Basette corte @@ -2884,15 +2996,6 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. <string name="Shoulders"> Spalle </string> - <string name="Side Bangs"> - Side Bangs - </string> - <string name="Side Bangs Down"> - Side Bangs Down - </string> - <string name="Side Bangs Up"> - Side Bangs Up - </string> <string name="Side Fringe"> Ciuffi laterali </string> @@ -2900,16 +3003,13 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. Basette </string> <string name="Sides Hair"> - Capigliatura later. + Capigliatura di lato </string> <string name="Sides Hair Down"> - Giù + Capigliatura di lato sciolta </string> <string name="Sides Hair Up"> - Su - </string> - <string name="Skinny"> - Skinny + Capigliatura di lato raccolta </string> <string name="Skinny Neck"> Collo fino @@ -2930,19 +3030,19 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. Morbidezza maniche </string> <string name="Slit Back"> - Spacco: posteriore + Spacco: Indietro </string> <string name="Slit Front"> Spacco: anteriore </string> <string name="Slit Left"> - Spacco: sinistro + Spacco: Sinistra </string> <string name="Slit Right"> - Spacco: destro + Spacco: Destra </string> <string name="Small"> - Piccolo + Piccola </string> <string name="Small Hands"> Mani piccole @@ -2959,9 +3059,6 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. <string name="Socks Length"> Lunghezza calze </string> - <string name="Some"> - Some - </string> <string name="Soulpatch"> Pizzetto labbro inferiore </string> @@ -2980,9 +3077,6 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. <string name="Squash Head"> Testa schiacciata </string> - <string name="Squash/Stretch Head"> - Testa Schiacciata/Allungata - </string> <string name="Stretch Head"> Testa allungata </string> @@ -3001,18 +3095,6 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. <string name="Sweep Forward"> Avanti </string> - <string name="Swept Back"> - Swept Back - </string> - <string name="Swept Back Hair"> - Swept Back Hair - </string> - <string name="Swept Forward"> - Swept Forward - </string> - <string name="Swept Forward Hair"> - Swept Forward Hair - </string> <string name="Tall"> Alto </string> @@ -3031,44 +3113,35 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. <string name="Thick Toe"> Punta spessa </string> - <string name="Thickness"> - Thickness - </string> <string name="Thin"> - Ossute + Sottili </string> <string name="Thin Eyebrows"> - Sopracciglia fini + Sopracciglia sottili </string> <string name="Thin Lips"> - Labbra fini + Labbra sottili </string> <string name="Thin Nose"> - Naso fino + Naso sottile </string> <string name="Tight Chin"> - Mento magro + Mento stretto </string> <string name="Tight Cuffs"> Fondo stretto </string> <string name="Tight Pants"> - Attillati + Pantaloni attillati </string> <string name="Tight Shirt"> - Attilata + Camicia attillata </string> <string name="Tight Skirt"> - Attillata + Gonna attillata </string> <string name="Tight Sleeves"> - Attillate - </string> - <string name="Tilt Left"> - Tilt Left - </string> - <string name="Tilt Right"> - Tilt Right + Maniche strette </string> <string name="Toe Shape"> Forma della punta @@ -3089,7 +3162,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. Distaccato </string> <string name="Uncreased"> - Abbassato + Senza piega </string> <string name="Underbite"> Denti inf. in fuori @@ -3104,13 +3177,13 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. Parte alta degli zigomi </string> <string name="Upper Chin Cleft"> - Fessura sup. del mento + Fossetta sup. del mento </string> <string name="Upper Eyelid Fold"> Piega palpebra sup. </string> <string name="Upturned"> - Naso all'insù + All'insù </string> <string name="Very Red"> Molto rossi @@ -3125,13 +3198,13 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. Capelli bianchi </string> <string name="Wide"> - Spalancati + Largo </string> <string name="Wide Back"> - Laterali post. larghi + Dietro largo </string> <string name="Wide Front"> - Laterali ant. larghi + Davanti largo </string> <string name="Wide Lips"> Labbra larghe @@ -3143,31 +3216,31 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. Grinze </string> <string name="LocationCtrlAddLandmarkTooltip"> - Aggiungi ai miei landmark + Aggiungi ai miei punti di riferimento </string> <string name="LocationCtrlEditLandmarkTooltip"> - Modifica i miei landmark + Modifica i miei punti di riferimento </string> <string name="LocationCtrlInfoBtnTooltip"> - maggiori informazioni sulla posizione attuale + Maggiori informazioni sulla posizione attuale </string> <string name="LocationCtrlComboBtnTooltip"> - Lo storico delle mie posizioni + La cronologia delle mie posizioni </string> <string name="UpdaterWindowTitle"> Aggiornamento [APP_NAME] </string> <string name="UpdaterNowUpdating"> - [APP_NAME] In aggiornamento... + Aggiornamento di [APP_NAME]... </string> <string name="UpdaterNowInstalling"> - [APP_NAME] In installazione... + Installazione di [APP_NAME]... </string> <string name="UpdaterUpdatingDescriptive"> - Il Viewer del programma [APP_NAME] si sta aggiornando all'ultima versione. Potrebbe volerci del tempo, attendi. + Il Viewer del programma [APP_NAME] si sta aggiornando all'ultima versione. Potrebbe volerci del tempo, attendi. </string> <string name="UpdaterProgressBarTextWithEllipses"> - Aggiornamento in download... + Download dell'aggiornamento... </string> <string name="UpdaterProgressBarText"> Download dell'aggiornamento @@ -3176,13 +3249,13 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. Download dell'aggiornamento non riuscito </string> <string name="UpdaterFailUpdateDescriptive"> - Il programma [APP_NAME] ha riscontrato un'errore nel tentativo di aggiornamento. Consigliamo di scaricare l'ultima versione direttamente da www.secondlife.com. + Il programma [APP_NAME] ha riscontrato un'errore durante il tentativo di aggiornamento. Consigliamo di scaricare l'ultima versione direttamente da www.secondlife.com. </string> <string name="UpdaterFailInstallTitle"> - Tentativo di installazione aggiornamento non riuscito + Installazione dell'aggiornamento non riuscita </string> <string name="UpdaterFailStartTitle"> - Errore nell'apertura del viewer + Errore nell'avvio del viewer </string> <string name="IM_logging_string"> -- Registrazione messaggi instantanei abilitata -- @@ -3194,7 +3267,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. (anonimo) </string> <string name="IM_moderated_chat_label"> - (Moderato: Voice spento di default) + (Moderato: Voci disattivate di default) </string> <string name="IM_unavailable_text_label"> La chat di testo non è disponibile per questa chiamata. @@ -3203,7 +3276,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. La chat di testo è stata disabilitata da un moderatore di gruppo. </string> <string name="IM_default_text_label"> - Clicca qua per inviare un messaggio instantaneo. + Clicca qui per inviare un messaggio instantaneo. </string> <string name="IM_to_label"> A @@ -3211,6 +3284,21 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. <string name="IM_moderator_label"> (Moderatore) </string> + <string name="started_call"> + Chiamata vocale iniziata + </string> + <string name="joined_call"> + Si è collegato alla chiamata in voce + </string> + <string name="ringing-im"> + Collegamento alla chiamata vocale... + </string> + <string name="connected-im"> + Collegato, clicca Chiudi chiamata per agganciare + </string> + <string name="hang_up-im"> + Chiusa la chiamata + </string> <string name="only_user_message"> Sei l'unico utente di questa sessione. </string> @@ -3220,6 +3308,12 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. <string name="invite_message"> Clicca il tasto [BUTTON NAME] per accettare/connetterti a questa voice chat. </string> + <string name="muted_message"> + Hai bloccato questo residente. Quando gli invii un messaggio, verrà automaticamente sbloccato. + </string> + <string name="generic"> + Errore nella richiesta, riprova più tardi. + </string> <string name="generic_request_error"> Errore durante la richiesta, riprova più tardi. </string> @@ -3238,19 +3332,153 @@ Se il messaggio persiste, contatta [SUPPORT_SITE]. <string name="not_a_mod_error"> Non sei un moderatore. </string> + <string name="muted"> + Il moderatore del gruppo ha disattivato la tua chat di testo. + </string> <string name="muted_error"> Un moderatore di gruppo ti ha disabilitato dalla chat di testo. </string> <string name="add_session_event"> Impossibile aggiungere utenti alla chat con [RECIPIENT]. </string> + <string name="message"> + Impossibile spedire il tuo messaggio nella sessione chat con [RECIPIENT]. + </string> <string name="message_session_event"> Impossibile inviare il messaggio nella chat con [RECIPIENT]. </string> + <string name="mute"> + Errore durante la moderazione. + </string> + <string name="removed"> + Sei stato rimosso dal gruppo. + </string> <string name="removed_from_group"> Sei stato espulso dal gruppo. </string> <string name="close_on_no_ability"> Non hai più le abilitazioni per rimanere nella sessione chat. </string> + <string name="unread_chat_single"> + [SOURCES] ha detto qualcosa di nuovo + </string> + <string name="unread_chat_multiple"> + [SOURCES] ha detto qualcosa di nuovo + </string> + <string name="paid_you_ldollars"> + [NAME] ti ha inviato un pagamento di L$[AMOUNT]. + </string> + <string name="you_paid_ldollars"> + Hai inviato un pagamento di L$[AMOUNT] a [NAME] [REASON]. + </string> + <string name="you_paid_ldollars_no_reason"> + Hai inviato un pagamento di L$[AMOUNT] a [NAME]. + </string> + <string name="you_paid_ldollars_no_name"> + Hai pagato L$ [AMOUNT] [REASON]. + </string> + <string name="for a parcel of land"> + per un lotto di terreno + </string> + <string name="for a land access pass"> + per un permesso di accesso al terreno + </string> + <string name="for deeding land"> + per la cessione di terreno + </string> + <string name="to create a group"> + per creare un gruppo + </string> + <string name="to join a group"> + per aderire a un gruppo + </string> + <string name="to upload"> + per caricare + </string> + <string name="giving"> + Contributo di L$ [AMOUNT] + </string> + <string name="uploading_costs"> + Il costo per il caricamento è di L$ [AMOUNT] + </string> + <string name="this_costs"> + Il costo è L$ [AMOUNT] + </string> + <string name="buying_selected_land"> + L'acquisto del terreno prescelto costa L$ [AMOUNT] + </string> + <string name="this_object_costs"> + Il costo dell'oggetto è L$ [AMOUNT] + </string> + <string name="group_role_everyone"> + Tutti + </string> + <string name="group_role_officers"> + Funzionari + </string> + <string name="group_role_owners"> + Proprietari + </string> + <string name="uploading_abuse_report"> + Caricamento in corso... + +Segnala abuso + </string> + <string name="New Shape"> + Nuova figura corporea + </string> + <string name="New Skin"> + Nuova pelle + </string> + <string name="New Hair"> + Nuovi capelli + </string> + <string name="New Eyes"> + Nuovi occhi + </string> + <string name="New Shirt"> + Nuova camicia + </string> + <string name="New Pants"> + Nuovi pantaloni + </string> + <string name="New Shoes"> + Nuove scarpe + </string> + <string name="New Socks"> + Nuove calze + </string> + <string name="New Jacket"> + Nuova giacca + </string> + <string name="New Gloves"> + Nuovi guanti + </string> + <string name="New Undershirt"> + Nuova maglietta intima + </string> + <string name="New Underpants"> + Nuovi slip + </string> + <string name="New Skirt"> + Nuova gonna + </string> + <string name="New Alpha"> + Nuovo Alpha (trasparenza) + </string> + <string name="New Tattoo"> + Nuovo tatuaggio + </string> + <string name="Invalid Wearable"> + Capo da indossare non valido + </string> + <string name="New Script"> + Nuovo script + </string> + <string name="New Folder"> + Nuova cartella + </string> + <string name="Contents"> + Contenuto + </string> </strings> diff --git a/indra/newview/skins/default/xui/it/teleport_strings.xml b/indra/newview/skins/default/xui/it/teleport_strings.xml index 4a1fcee0f9..c11d41f6b9 100644 --- a/indra/newview/skins/default/xui/it/teleport_strings.xml +++ b/indra/newview/skins/default/xui/it/teleport_strings.xml @@ -59,6 +59,9 @@ Se si continua a visualizzare questo messaggio, consulta la pagina [SUPPORT_SITE <message name="completing"> Teletrasporto completato </message> + <message name="completed_from"> + Teleport completato da [T_SLURL] + </message> <message name="resolving"> Elaborazione della destinazione in corso... </message> diff --git a/indra/newview/skins/default/xui/ja/floater_about_land.xml b/indra/newview/skins/default/xui/ja/floater_about_land.xml index ceda48109e..c9c01bc2a4 100644 --- a/indra/newview/skins/default/xui/ja/floater_about_land.xml +++ b/indra/newview/skins/default/xui/ja/floater_about_land.xml @@ -318,21 +318,21 @@ </text> <check_box label="地形を編集" name="edit land check" tool_tip="チェックを入れると、他人があなたの土地の地形編集を行うことが可能となります。このオプションのチェックを外しておくことをおすすめします。外した状態であなたの土地の地形編集が可能です。"/> <check_box label="飛行" name="check fly" tool_tip="チェックを入れるとこの土地での飛行が可能となります。チェックを外すと土地に入る際と通り過ぎるときのみ飛行可能となります。"/> - <text left="138" name="allow_label2" width="144"> + <text name="allow_label2"> 制作: </text> - <check_box label="全員" left="280" name="edit objects check"/> - <check_box label="グループ" left="380" name="edit group objects check"/> - <text left="138" name="allow_label3" width="144"> + <check_box label="全員" name="edit objects check"/> + <check_box label="グループ" name="edit group objects check"/> + <text name="allow_label3"> オブジェクトの進入: </text> - <check_box label="全員" left="280" name="all object entry check"/> - <check_box label="グループ" left="380" name="group object entry check"/> - <text left="138" name="allow_label4" width="144"> + <check_box label="全員" name="all object entry check"/> + <check_box label="グループ" name="group object entry check"/> + <text name="allow_label4"> スクリプトの実行: </text> - <check_box label="全員" left="280" name="check other scripts"/> - <check_box label="グループ" left="380" name="check group scripts"/> + <check_box label="全員" name="check other scripts"/> + <check_box label="グループ" name="check group scripts"/> <text name="land_options_label"> 土地オプション: </text> @@ -395,7 +395,7 @@ <text name="at URL:"> ホームページ: </text> - <button label="設定" label_selected="設定..." name="set_media_url"/> + <button label="設定" name="set_media_url"/> <check_box label="URL を非表示" name="hide_media_url" tool_tip="このオプションをオンにすると、許可なしでこの区画情報にアクセスしているユーザーにはメディア URL が表示されません。 これは HTML タイプには使用できませんのでご注意ください。"/> <text name="Description:"> 説明: @@ -442,6 +442,9 @@ <panel.string name="access_estate_defined"> (エステートに限定) </panel.string> + <panel.string name="allow_public_access"> + パブリックアクセスを許可 ([MATURITY]) + </panel.string> <panel.string name="estate_override"> 1 つ以上のオプションが、不動産レベルで設定されています。 </panel.string> diff --git a/indra/newview/skins/default/xui/ja/floater_buy_currency.xml b/indra/newview/skins/default/xui/ja/floater_buy_currency.xml index 32de533dc4..22af6e0ea2 100644 --- a/indra/newview/skins/default/xui/ja/floater_buy_currency.xml +++ b/indra/newview/skins/default/xui/ja/floater_buy_currency.xml @@ -37,7 +37,7 @@ 見積もり中... </text> <text name="buy_action"> - [NAME] L$ [PRICE] + [ACTION] </text> <text name="total_label"> 購入後の残高 diff --git a/indra/newview/skins/default/xui/ja/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/ja/floater_day_cycle_options.xml index 2a7985fe58..7bda25e00f 100644 --- a/indra/newview/skins/default/xui/ja/floater_day_cycle_options.xml +++ b/indra/newview/skins/default/xui/ja/floater_day_cycle_options.xml @@ -85,7 +85,7 @@ プレビュー: </text> <button label="再生" label_selected="再生" name="WLAnimSky" left_delta="70"/> - <button label="停止!" label_selected="停止" name="WLStopAnimSky" /> + <button label="停止" label_selected="停止" name="WLStopAnimSky" /> <button label="不動産の時刻を使用" label_selected="不動産の時刻に変更" name="WLUseLindenTime" width="140"/> <button label="デイテストを保存" diff --git a/indra/newview/skins/default/xui/ja/floater_gesture.xml b/indra/newview/skins/default/xui/ja/floater_gesture.xml index a79854bcef..1ed5ad31db 100644 --- a/indra/newview/skins/default/xui/ja/floater_gesture.xml +++ b/indra/newview/skins/default/xui/ja/floater_gesture.xml @@ -9,7 +9,7 @@ <floater.string name="copy_name"> [COPY_NAME] のコピー </floater.string> - <scroll_list bottom_delta="-385" height="360" name="gesture_list"> + <scroll_list name="gesture_list"> <scroll_list.columns label="名前" name="name"/> <scroll_list.columns label="チャット" name="trigger"/> <scroll_list.columns label="" name="key"/> diff --git a/indra/newview/skins/default/xui/ja/floater_tos.xml b/indra/newview/skins/default/xui/ja/floater_tos.xml index 85ac102885..337766987c 100644 --- a/indra/newview/skins/default/xui/ja/floater_tos.xml +++ b/indra/newview/skins/default/xui/ja/floater_tos.xml @@ -9,9 +9,9 @@ <text name="tos_title"> 利用規約 </text> - <check_box label="利用規約に同意します" name="agree_chk"/> + <check_box label="利用規約とプライバシーポリシーに同意します" name="agree_chk"/> <text name="tos_heading"> - 次の利用規約をよくお読みください。 [SECOND_LIFE] へのログインを続けるには、規約に同意する必要があります。 + 次の利用規約とプライバシーポリシーをよくお読みください。 [SECOND_LIFE] へのログインを続けるには、規約に同意する必要があります。 </text> <text_editor name="tos_text"> TOS_TEXT diff --git a/indra/newview/skins/default/xui/ja/menu_profile_overflow.xml b/indra/newview/skins/default/xui/ja/menu_profile_overflow.xml index d7107dc153..9d3a5dda1c 100644 --- a/indra/newview/skins/default/xui/ja/menu_profile_overflow.xml +++ b/indra/newview/skins/default/xui/ja/menu_profile_overflow.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <toggleable_menu name="profile_overflow_menu"> + <menu_item_call label="地図" name="show_on_map"/> <menu_item_call label="支払う" name="pay"/> <menu_item_call label="共有" name="share"/> <menu_item_call label="ブロック" name="block"/> diff --git a/indra/newview/skins/default/xui/ja/panel_edit_pick.xml b/indra/newview/skins/default/xui/ja/panel_edit_pick.xml index 88c05fbae7..e58fa979d7 100644 --- a/indra/newview/skins/default/xui/ja/panel_edit_pick.xml +++ b/indra/newview/skins/default/xui/ja/panel_edit_pick.xml @@ -1,5 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="ピック編集" name="panel_edit_pick"> + <panel.string name="location_notice"> + (掲載後更新) + </panel.string> <text name="title"> ピック編集 </text> @@ -22,7 +25,7 @@ </panel> </scroll_container> <panel label="bottom_panel" name="bottom_panel"> - <button label="[WHAT] を保存" name="save_changes_btn"/> + <button label="ピックを保存" name="save_changes_btn"/> <button label="キャンセル" name="cancel_btn"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_group_land_money.xml b/indra/newview/skins/default/xui/ja/panel_group_land_money.xml index c0449f1221..ef6d8cce47 100644 --- a/indra/newview/skins/default/xui/ja/panel_group_land_money.xml +++ b/indra/newview/skins/default/xui/ja/panel_group_land_money.xml @@ -45,7 +45,7 @@ あなたの貢献: </text> <text name="your_contribution_units"> - 平方メートル + m² </text> <text name="your_contribution_max_value"> (最大 [AMOUNT]) diff --git a/indra/newview/skins/default/xui/ja/panel_group_roles.xml b/indra/newview/skins/default/xui/ja/panel_group_roles.xml index db6fe268c7..8a629be910 100644 --- a/indra/newview/skins/default/xui/ja/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/ja/panel_group_roles.xml @@ -17,7 +17,7 @@ Ctrl キーを押しながらメンバー名をクリックすると <name_list name="member_list"> <name_list.columns label="メンバー" name="name"/> <name_list.columns label="寄付" name="donated"/> - <name_list.columns label="ステータス" name="online"/> + <name_list.columns label="ログイン" name="online"/> </name_list> <button label="招待" name="member_invite"/> <button label="追放" name="member_eject"/> @@ -44,7 +44,7 @@ Ctrl キーを押しながらメンバー名をクリックすると <filter_editor label="役割を選別" name="filter_input"/> <scroll_list name="role_list"> <scroll_list.columns label="役割" name="name"/> - <scroll_list.columns label="肩書き" name="title"/> + <scroll_list.columns label="タイトル" name="title"/> <scroll_list.columns label="#" name="members"/> </scroll_list> <button label="新しい役割" name="role_create"/> diff --git a/indra/newview/skins/default/xui/ja/panel_main_inventory.xml b/indra/newview/skins/default/xui/ja/panel_main_inventory.xml index 36c7b75f97..9981d13bbb 100644 --- a/indra/newview/skins/default/xui/ja/panel_main_inventory.xml +++ b/indra/newview/skins/default/xui/ja/panel_main_inventory.xml @@ -1,18 +1,14 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="もの" name="main inventory panel"> - <panel.string name="Title"> - もの + <panel.string name="ItemcountFetching"> + [ITEM_COUNT] 個のアイテムを取得中です... [FILTER] </panel.string> - <filter_editor label="持ち物をフィルター" name="inventory search editor"/> - <tab_container name="inventory filter tabs"> - <inventory_panel label="持ち物" name="All Items"/> - <inventory_panel label="最新" name="Recent Items"/> - </tab_container> - <panel name="bottom_panel"> - <button name="options_gear_btn" tool_tip="その他のオプションを表示します"/> - <button name="add_btn" tool_tip="新しいアイテムを追加します"/> - <dnd_button name="trash_btn" tool_tip="選択したアイテムを削除します"/> - </panel> + <panel.string name="ItemcountCompleted"> + [ITEM_COUNT] 個のアイテム [FILTER] + </panel.string> + <text name="ItemcountText"> + アイテム: + </text> <menu_bar name="Inventory Menu"> <menu label="ファイル" name="File"> <menu_item_call label="開く" name="Open"/> @@ -61,4 +57,14 @@ <menu_item_check label="システムフォルダを上に並べる" name="System Folders To Top"/> </menu> </menu_bar> + <filter_editor label="持ち物をフィルター" name="inventory search editor"/> + <tab_container name="inventory filter tabs"> + <inventory_panel label="持ち物" name="All Items"/> + <inventory_panel label="最新" name="Recent Items"/> + </tab_container> + <panel name="bottom_panel"> + <button name="options_gear_btn" tool_tip="その他のオプションを表示します"/> + <button name="add_btn" tool_tip="新しいアイテムを追加します"/> + <dnd_button name="trash_btn" tool_tip="選択したアイテムを削除します"/> + </panel> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_nearby_media.xml b/indra/newview/skins/default/xui/ja/panel_nearby_media.xml index eae9ac03c3..fb273de420 100644 --- a/indra/newview/skins/default/xui/ja/panel_nearby_media.xml +++ b/indra/newview/skins/default/xui/ja/panel_nearby_media.xml @@ -19,10 +19,17 @@ <button label="詳細 >>" label_selected="簡易 <<" name="more_less_btn" tool_tip="アドバンスコントロール"/> </panel> <panel name="nearby_media_panel"> + <text name="nearby_media"> + 近くのメディア + </text> + <text name="show"> + 表示: + </text> <combo_box name="show_combo"> <combo_box.item label="すべて" name="All"/> <combo_box.item label="この区画内" name="WithinParcel"/> <combo_box.item label="この区画外" name="OutsideParcel"/> + <combo_box.item label="他のアバター" name="OnOthers"/> </combo_box> <scroll_list name="media_list"> <scroll_list.columns label="近接" name="media_proximity"/> @@ -31,7 +38,7 @@ <scroll_list.columns label="名前" name="media_name"/> <scroll_list.columns label="デバッグ" name="media_debug"/> </scroll_list> - <panel> + <panel name="media_controls_panel"> <layout_stack name="media_controls"> <layout_panel name="stop"> <button name="stop_btn" tool_tip="選択したメディアを停止"/> diff --git a/indra/newview/skins/default/xui/ja/panel_places.xml b/indra/newview/skins/default/xui/ja/panel_places.xml index a7fbc79884..acfa0bf4e8 100644 --- a/indra/newview/skins/default/xui/ja/panel_places.xml +++ b/indra/newview/skins/default/xui/ja/panel_places.xml @@ -2,7 +2,7 @@ <panel label="場所" name="places panel"> <string name="landmarks_tab_title" value="マイ ランドマーク"/> <string name="teleport_history_tab_title" value="テレポートの履歴"/> - <filter_editor label="私の場所をフィルターする" name="Filter"/> + <filter_editor label="場所をフィルター" name="Filter"/> <panel name="button_panel"> <button label="テレポート" name="teleport_btn" tool_tip="該当するエリアにテレポートします"/> <button label="地図" name="map_btn"/> diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml index 87cd772143..a8520a51cc 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml @@ -3,6 +3,9 @@ <panel.string name="aspect_ratio_text"> [NUM]:[DEN] </panel.string> + <panel.string name="middle_mouse"> + マウスの中央 + </panel.string> <slider label="視界角" name="camera_fov"/> <slider label="距離" name="camera_offset_scale"/> <text name="heading2"> diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml b/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml index a521556c79..e5780697b1 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml @@ -46,6 +46,12 @@ <check_box initial_value="true" label="チャット中にタイピング動作のアニメーションを再生" name="play_typing_animation"/> <check_box label="オフライン時に受け取った IM をメールで受信" name="send_im_to_email"/> <check_box label="チャット履歴に文字だけ表示する" name="plain_text_chat_history"/> + <text name="show_ims_in_label"> + IM の表示方法: + </text> + <text name="requires_restart_label"> + (再起動後に反映) + </text> <radio_group name="chat_window" tool_tip="インスタントメッセージを別フローター、または1つのフローターに複数タブで表示します(要再起動)"> <radio_item label="別々のウィンドウ" name="radio" value="0"/> <radio_item label="タブ" name="radio2" value="1"/> diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_general.xml b/indra/newview/skins/default/xui/ja/panel_preferences_general.xml index 6df59ca189..4ccb70b321 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_general.xml @@ -44,7 +44,7 @@ <radio_item label="オン" name="radio2" value="1"/> <radio_item label="一時的に表示" name="radio3" value="2"/> </radio_group> - <check_box label="私の名前を表示" name="show_my_name_checkbox1"/> + <check_box label="自分の名前を表示" name="show_my_name_checkbox1"/> <check_box initial_value="true" label="小さいアバター名" name="small_avatar_names_checkbox"/> <check_box label="グループタイトルを表示" name="show_all_title_checkbox1"/> <text name="effects_color_textbox"> @@ -53,12 +53,12 @@ <text name="title_afk_text"> 一時退席までの時間: </text> - <color_swatch label="" name="effect_color_swatch" tool_tip="カラー・ピッカーをクリックして開く"/> + <color_swatch label="" name="effect_color_swatch" tool_tip="クリックでカラーピッカーを開きます"/> <combo_box label="一時退席までの時間:" name="afk"> - <combo_box.item label="2分" name="item0"/> - <combo_box.item label="5分" name="item1"/> - <combo_box.item label="10分" name="item2"/> - <combo_box.item label="30分" name="item3"/> + <combo_box.item label="2 分" name="item0"/> + <combo_box.item label="5 分" name="item1"/> + <combo_box.item label="10 分" name="item2"/> + <combo_box.item label="30 分" name="item3"/> <combo_box.item label="一時退席設定なし" name="item4"/> </combo_box> <text name="text_box3"> diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_setup.xml b/indra/newview/skins/default/xui/ja/panel_preferences_setup.xml index ad8c8437be..653d9fd3b3 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_setup.xml @@ -34,9 +34,12 @@ Web: </text> <radio_group name="use_external_browser"> - <radio_item label="内蔵ブラウザを使用" name="internal" tool_tip="内蔵ブラウザでヘルプや Web リンクなどを見ます。[APP_NAME] 内に新しいウィンドウでこのブラウザが開きます。" value="0"/> <radio_item label="指定のブラウザ(IE や Firefox)を使用" name="external" tool_tip="デフォルトのシステム Web ブラウザでヘルプや Web リンク先などを見ます。全画面で起動中にはおすすめしません。" value="1"/> + <radio_item label="内蔵ブラウザを使用" name="internal" tool_tip="内蔵ブラウザでヘルプや Web リンクなどを見ます。[APP_NAME] 内に新しいウィンドウでこのブラウザが開きます。" value=""/> </radio_group> + <check_box initial_value="true" label="プラグインを有効にする" name="browser_plugins_enabled"/> + <check_box initial_value="true" label="Cookie を受け入れる" name="cookies_enabled"/> + <check_box initial_value="true" label="Javascript を有効にする" name="browser_javascript_enabled"/> <check_box initial_value="false" label="Web プロキシを有効にする" name="web_proxy_enabled"/> <text name="Proxy location"> プロキシ: 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 0e1e2851e3..1fe6ad25ed 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 @@ -67,7 +67,7 @@ <button name="close_btn" tool_tip="Zoom Back"/> </layout_panel> <layout_panel name="new_window"> - <button name="new_window_btn" tool_tip="URLをブラウザで開く"/> + <button name="new_window_btn" tool_tip="URL をブラウザで開く"/> </layout_panel> </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_region_estate.xml b/indra/newview/skins/default/xui/ja/panel_region_estate.xml index 3113a68505..5b2ef36045 100644 --- a/indra/newview/skins/default/xui/ja/panel_region_estate.xml +++ b/indra/newview/skins/default/xui/ja/panel_region_estate.xml @@ -16,10 +16,10 @@ (不明) </text> <text name="Only Allow"> - 次のアカウントのアクセス禁止: + 次のアカウントのみアクセスを許可: </text> <check_box label="支払情報登録済" name="limit_payment" tool_tip="未確認の住人の立入を禁止します"/> - <check_box label="年齢確認" name="limit_age_verified" tool_tip="年齢確認を済ませていない住人の立入を禁止します。 詳しい情報は [SUPPORT_SITE] をご覧下さい。"/> + <check_box label="年齢確認済" name="limit_age_verified" tool_tip="年齢確認を済ませていない住人の立入を禁止します。 詳しい情報は [SUPPORT_SITE] をご覧下さい。"/> <check_box label="ボイスチャットを許可" name="voice_chat_check"/> <button label="?" name="voice_chat_help"/> <text name="abuse_email_text"> diff --git a/indra/newview/skins/default/xui/ja/sidepanel_appearance.xml b/indra/newview/skins/default/xui/ja/sidepanel_appearance.xml index 4fba4b1567..94be8ba73d 100644 --- a/indra/newview/skins/default/xui/ja/sidepanel_appearance.xml +++ b/indra/newview/skins/default/xui/ja/sidepanel_appearance.xml @@ -10,7 +10,7 @@ MyOutfit With a really Long Name like MOOSE </text> </panel> - <filter_editor label="アウトフィットのフィルター" name="Filter"/> + <filter_editor label="アウトフィットをフィルター" name="Filter"/> <button label="装着" name="wear_btn"/> <button label="新しいアウトフィット" name="newlook_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml index 688e4751de..b9df82adcd 100644 --- a/indra/newview/skins/default/xui/ja/strings.xml +++ b/indra/newview/skins/default/xui/ja/strings.xml @@ -23,7 +23,22 @@ ハードウェアの検出中です... </string> <string name="StartupLoading"> - ローディング + [APP_NAME] をインストール中です... + </string> + <string name="StartupClearingCache"> + キャッシュをクリア中です... + </string> + <string name="StartupInitializingTextureCache"> + テクスチャキャッシュを初期化中です... + </string> + <string name="StartupInitializingVFS"> + VFS を初期化中です... + </string> + <string name="ProgressRestoring"> + 復元中です... + </string> + <string name="ProgressChangingResolution"> + 解像度を変更中です... </string> <string name="Fullbright"> 明るさ全開(レガシー) @@ -88,6 +103,9 @@ <string name="LoginFailedNoNetwork"> ネットワークエラー: 接続を確立できませんでした。お使いのネットワーク接続をご確認ください。 </string> + <string name="LoginFailed"> + ログインに失敗しました。 + </string> <string name="Quit"> 終了 </string> @@ -97,6 +115,24 @@ <string name="AgentLostConnection"> このリージョンに不都合が発生している可能性があります。 ご使用のインターネット接続をご確認ください。 </string> + <string name="SavingSettings"> + 設定を保存中です... + </string> + <string name="LoggingOut"> + ログアウト中です... + </string> + <string name="ShuttingDown"> + シャットダウン中です... + </string> + <string name="YouHaveBeenDisconnected"> + あなたがいたリージョンへの接続が切れました。 + </string> + <string name="SentToInvalidRegion"> + 無効なリージョンにテレポートされました。 + </string> + <string name="TestingDisconnect"> + ビューワの接続を切るテスト中 + </string> <string name="TooltipPerson"> 人 </string> @@ -151,6 +187,24 @@ <string name="TooltipAgentUrl"> クリックしてこの住人のプロフィールを見ます </string> + <string name="TooltipAgentMute"> + クリックしてこの住人に対して無視設定をします + </string> + <string name="TooltipAgentUnmute"> + クリックしてこの住人に対する無視設定を解除します + </string> + <string name="TooltipAgentIM"> + クリックしてこの住人に IM を送ります + </string> + <string name="TooltipAgentPay"> + クリックしてこの住人に支払います + </string> + <string name="TooltipAgentOfferTeleport"> + クリックしてこの住人にテレポートのリクエストを送ります + </string> + <string name="TooltipAgentRequestFriend"> + クリックしてこの住人にフレンド登録リクエストを送ります + </string> <string name="TooltipGroupUrl"> クリックしてこのグループの説明文を見ます </string> @@ -176,12 +230,31 @@ クリックして secondlife:// コマンドを出します </string> <string name="CurrentURL" value=" 現在の URL: [CurrentURL]"/> + <string name="TooltipPrice" value="L$[PRICE]-"/> <string name="SLurlLabelTeleport"> テレポート </string> <string name="SLurlLabelShowOnMap"> 地図に表示 </string> + <string name="SLappAgentMute"> + 無視 + </string> + <string name="SLappAgentUnmute"> + ミュート解除 + </string> + <string name="SLappAgentIM"> + IM + </string> + <string name="SLappAgentPay"> + 支払う + </string> + <string name="SLappAgentOfferTeleport"> + 次の場所にテレポートを送ります: + </string> + <string name="SLappAgentRequestFriend"> + フレンド登録リクエスト + </string> <string name="BUTTON_CLOSE_DARWIN"> 閉じる (⌘W) </string> @@ -335,6 +408,9 @@ <string name="symbolic link"> リンク </string> + <string name="symbolic folder link"> + フォルダのリンク + </string> <string name="AvatarEditingAppearance"> (容姿の編集中) </string> @@ -828,7 +904,7 @@ ESC キーを押してワールドビューに戻ります </string> <string name="InventoryNoMatchingItems"> - 一致するアイテムが持ち物にありませんでした。 [secondlife:///app/search/groups 「検索」] をお試しください。 + 一致するアイテムがありませんでした。[secondlife:///app/search/groups 「検索」]をお試しください。 </string> <string name="FavoritesNoMatchingItems"> ここにランドマークをドラッグして、お気に入りに追加します。 @@ -849,6 +925,7 @@ コンテンツなし </string> <string name="WornOnAttachmentPoint" value=" ([ATTACHMENT_POINT] に装着中)"/> + <string name="ActiveGesture" value="[GESLABEL] (アクティブ)"/> <string name="PermYes"> はい </string> @@ -948,6 +1025,9 @@ <string name="InvFolder My Outfits"> マイ アウトフィット </string> + <string name="InvFolder Accessories"> + アクセサリ + </string> <string name="InvFolder Friends"> フレンド </string> @@ -1301,7 +1381,7 @@ 許可された住人: ([ALLOWEDAGENTS] 人、最大 [MAXACCESS] 人) </string> <string name="RegionInfoAllowedGroups"> - 許可されたグループ: ([ALLOWEDGROUPS]、最大 [MAXACCESS] グループ) + 許可されたグループ: ([ALLOWEDGROUPS]、最大 [MAXACCESS] ) </string> <string name="ScriptLimitsParcelScriptMemory"> 区画スクリプトメモリ @@ -1471,6 +1551,9 @@ <string name="PanelContentsNewScript"> 新規スクリプト </string> + <string name="PanelContentsTooltip"> + オブジェクトの中身 + </string> <string name="BusyModeResponseDefault"> メッセージを送った住人は、誰にも邪魔をされたくないため現在「取り込み中」モードです。 あなたのメッセージは、あとで確認できるように IM パネルに表示されます。 </string> @@ -1588,7 +1671,10 @@ キャンセル </string> <string name="UploadingCosts"> - %s のアップロード代金: + [NAME] のアップロード料金は L$[AMOUNT] です + </string> + <string name="BuyingCosts"> + これを L$[AMOUNT] で購入します </string> <string name="UnknownFileExtension"> 不明の拡張子: %s @@ -3375,4 +3461,120 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ <string name="unread_chat_multiple"> [SOURCES] は何か新しいことを言いました。 </string> + <string name="paid_you_ldollars"> + [NAME] は L$[AMOUNT] 支払いました + </string> + <string name="you_paid_ldollars"> + [NAME] に L$ [AMOUNT] を支払いました:[REASON] + </string> + <string name="you_paid_ldollars_no_reason"> + [NAME] に L$ [AMOUNT] を支払いました。 + </string> + <string name="you_paid_ldollars_no_name"> + L$ [AMOUNT] を支払いました:[REASON] + </string> + <string name="for a parcel of land"> + 土地区画のため + </string> + <string name="for a land access pass"> + 土地の入場許可を得るため + </string> + <string name="for deeding land"> + 土地を譲渡するため + </string> + <string name="to create a group"> + グループを作成するため + </string> + <string name="to join a group"> + グループに参加するため + </string> + <string name="to upload"> + アップロードするため + </string> + <string name="giving"> + L$[AMOUNT] を渡します + </string> + <string name="uploading_costs"> + アップロード料金は L$[AMOUNT] です + </string> + <string name="this_costs"> + 料金は L$[AMOUNT] です + </string> + <string name="buying_selected_land"> + 選択した土地を L$ [AMOUNT] で購入します + </string> + <string name="this_object_costs"> + このオブジェクトは L$[AMOUNT] です + </string> + <string name="group_role_everyone"> + 全員 + </string> + <string name="group_role_officers"> + オフィサー + </string> + <string name="group_role_owners"> + オーナー + </string> + <string name="uploading_abuse_report"> + アップロード中... + +嫌がらせの報告 + </string> + <string name="New Shape"> + 新しいシェイプ + </string> + <string name="New Skin"> + 新しいスキン + </string> + <string name="New Hair"> + 新しい髪 + </string> + <string name="New Eyes"> + 新しい目 + </string> + <string name="New Shirt"> + 新しいシャツ + </string> + <string name="New Pants"> + 新しいパンツ + </string> + <string name="New Shoes"> + 新しい靴 + </string> + <string name="New Socks"> + 新しい靴下 + </string> + <string name="New Jacket"> + 新しいジャケット + </string> + <string name="New Gloves"> + 新しい手袋 + </string> + <string name="New Undershirt"> + 新しい下着(上) + </string> + <string name="New Underpants"> + 新しい下着(下) + </string> + <string name="New Skirt"> + 新しいスカート + </string> + <string name="New Alpha"> + 新しいアルファ + </string> + <string name="New Tattoo"> + 新しいタトゥ + </string> + <string name="Invalid Wearable"> + 無効な着用物 + </string> + <string name="New Script"> + 新規スクリプト + </string> + <string name="New Folder"> + 新規フォルダ + </string> + <string name="Contents"> + コンテンツ + </string> </strings> diff --git a/indra/newview/skins/default/xui/nl/floater_about_land.xml b/indra/newview/skins/default/xui/nl/floater_about_land.xml index 3a77de70d2..7b8f1b42ab 100644 --- a/indra/newview/skins/default/xui/nl/floater_about_land.xml +++ b/indra/newview/skins/default/xui/nl/floater_about_land.xml @@ -26,14 +26,14 @@ <text name="OwnerText" left="102" width="242"> Leyla Linden </text> - <button label="Profiel..." label_selected="Profiel..." name="Profile..."/> + <button label="Profiel" name="Profile..."/> <text name="Group:"> Groep: </text> <text left="102" name="GroupText" width="242"/> - <button label="Instellen..." label_selected="Instellen..." name="Set..."/> + <button label="Instellen" name="Set..."/> <check_box label="Overdracht aan groep toestaan" name="check deed" tool_tip="Een groepofficier kan dit land aan de groep overdragen, zodat het ondersteund wordt door de landallocatie van de groep."/> - <button label="Overdragen..." label_selected="Overdragen..." name="Deed..." tool_tip="U mag alleen land overdragen indien u een officier bent in de geselecteerde groep."/> + <button label="Overdragen" name="Deed..." tool_tip="U mag alleen land overdragen indien u een officier bent in de geselecteerde groep."/> <check_box label="Eigenaar maakt bijdrage met overdracht" name="check contrib" tool_tip="Wanneer het land is overgedragen aan de groep, draagt de voormalig eigenaar voldoende landtoewijzing bij om het te ondersteunen."/> <text name="For Sale:"> Te koop: @@ -44,7 +44,7 @@ <text name="For Sale: Price L$[PRICE]."> Prijs: L$[PRICE] (L$[PRICE_PER_SQM]/m²). </text> - <button label="Verkoop land..." label_selected="Verkoop land..." name="Sell Land..."/> + <button label="Verkoop land" name="Sell Land..."/> <text name="For sale to"> Te koop voor: [BUYER] </text> @@ -74,11 +74,11 @@ 0 </text> <button left="130" width="125" label="Koop land..." label_selected="Koop land..." name="Buy Land..."/> - <button label="Koop voor groep..." label_selected="Koop voor groep..." name="Buy For Group..."/> + <button label="Koop voor groep" name="Buy For Group..."/> <button left="130" width="125" label="Koop toegangspas..." label_selected="Koop toegangspas..." name="Buy Pass..." tool_tip="Een toegangspas geeft u tijdelijk toegang tot dit land."/> - <button label="Land Afstaan..." label_selected="Land Afstaan..." name="Abandon Land..."/> - <button label="Land terugvorderen..." label_selected="Land terugvorderen..." name="Reclaim Land..."/> - <button label="Lindenverkoop..." label_selected="Lindenverkoop..." name="Linden Sale..." tool_tip="Land moet in bezit zijn, de inhoud moet ingesteld zijn en niet al ter veiling zijn aangeboden."/> + <button label="Land Afstaan" name="Abandon Land..."/> + <button label="Land terugvorderen" name="Reclaim Land..."/> + <button label="Lindenverkoop" name="Linden Sale..." tool_tip="Land moet in bezit zijn, de inhoud moet ingesteld zijn en niet al ter veiling zijn aangeboden."/> <panel.string name="new users only"> Alleen nieuwe gebruikers </panel.string> @@ -224,7 +224,7 @@ of opgedeeld. [COUNT] </text> <button label="Toon" label_selected="Toon" name="ShowOwner" right="-135" width="60"/> - <button label="Retourneren..." label_selected="Retourneren..." name="ReturnOwner..." tool_tip="Retourneer objecten naar hun eigenaren." right="-10" width="119"/> + <button label="Retourneren" name="ReturnOwner..." tool_tip="Retourneer objecten naar hun eigenaren." right="-10" width="119"/> <text name="Set to group:" left="14" width="180"> Groep toewijzen: </text> @@ -232,7 +232,7 @@ of opgedeeld. [COUNT] </text> <button label="Toon" label_selected="Toon" name="ShowGroup" right="-135" width="60"/> - <button label="Retourneren..." label_selected="Retourneren..." name="ReturnGroup..." tool_tip="Retourneer objecten naar hun eigenaren." right="-10" width="119"/> + <button label="Retourneren" name="ReturnGroup..." tool_tip="Retourneer objecten naar hun eigenaren." right="-10" width="119"/> <text name="Owned by others:" left="14" width="128"> Eigendom van anderen: </text> @@ -240,7 +240,7 @@ of opgedeeld. [COUNT] </text> <button label="Toon" label_selected="Toon" name="ShowOther" right="-135" width="60"/> - <button label="Retourneren..." label_selected="Retourneren..." name="ReturnOther..." tool_tip="Retourneer objecten naar hun eigenaren." right="-10" width="119"/> + <button label="Retourneren" name="ReturnOther..." tool_tip="Retourneer objecten naar hun eigenaren." right="-10" width="119"/> <text name="Selected / sat upon:" left="14" width="193"> Geselecteerd/Er op gezeten </text> @@ -256,7 +256,7 @@ of opgedeeld. Objecteigenaren: </text> <button label="Ververs lijst" label_selected="Ververs lijst" name="Refresh List" bottom="-213"/> - <button label="Retourneer objecten..." label_selected="Retourneer objecten..." name="Return objects..." width="164" bottom="-213"/> + <button label="Retourneer objecten" name="Return objects..." width="164" bottom="-213"/> <name_list name="owner list" height="104"> <column label="Type" name="type"/> <column label="Naam" name="name"/> @@ -407,7 +407,7 @@ of opgedeeld. <text name="at URL:"> Media URL: </text> - <button label="Instellen..." label_selected="Instellen..." name="set_media_url" width="66"/> + <button label="Instellen" name="set_media_url"/> <text name="Description:"> Omschrijving: </text> diff --git a/indra/newview/skins/default/xui/pl/floater_about.xml b/indra/newview/skins/default/xui/pl/floater_about.xml index 29a5aca90d..b49247c4bf 100644 --- a/indra/newview/skins/default/xui/pl/floater_about.xml +++ b/indra/newview/skins/default/xui/pl/floater_about.xml @@ -8,7 +8,7 @@ Buduj z [COMPILER] wersją [COMPILER_VERSION] </floater.string> <floater.string name="AboutPosition"> - Znajdujesz się na pozycji [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1] w [REGION] zlokalizowanym w [HOSTNAME] ([HOSTIP]) + Położenie [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1] w [REGION] zlokalizowanym w <nolink>[HOSTNAME]</nolink> ([HOSTIP]) [SERVER_VERSION] [[SERVER_RELEASE_NOTES_URL] [ReleaseNotes]] </floater.string> @@ -16,18 +16,18 @@ Procesor: [CPU] Pamięć: [MEMORY_MB] MB Wersja OS: [OS_VERSION] -Graphics Card Vendor: [GRAPHICS_CARD_VENDOR] -Karta Graficzna: [GRAPHICS_CARD] +Sprzedawca karty graficznej: [GRAPHICS_CARD_VENDOR] +Karta graficzna: [GRAPHICS_CARD] </floater.string> <floater.string name="AboutDriver"> - Windows Sterownik Karty Graficznej: [GRAPHICS_DRIVER_VERSION] + Windows Sterownik karty graficznej: [GRAPHICS_DRIVER_VERSION] </floater.string> <floater.string name="AboutLibs"> Wersja OpenGL: [OPENGL_VERSION] Wersja libcurl: [LIBCURL_VERSION] -Wersja Dekodera J2C: [J2C_VERSION] -Wersja Sterownika Audio: [AUDIO_DRIVER_VERSION] +Wersja dekodera J2C: [J2C_VERSION] +Wersja sterownika audio: [AUDIO_DRIVER_VERSION] Wersja Qt Webkit: [QT_WEBKIT_VERSION] Wersja Vivox: [VIVOX_VERSION] </floater.string> @@ -35,21 +35,19 @@ Wersja Vivox: [VIVOX_VERSION] (żadne) </floater.string> <floater.string name="AboutTraffic"> - Stracone Pakiety: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%) + Stracone pakiety: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%) </floater.string> <tab_container name="about_tab"> <panel label="Info" name="support_panel"> - <button label="Kopiuj do Schowka" name="copy_btn"/> + <button label="Kopiuj do schowka" name="copy_btn"/> </panel> <panel label="Podziękowania" name="credits_panel"> <text_editor name="credits_editor"> - Second Life zostało stworzone dla Was przez: Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Yang, T, Simone, Maestro, Scott, Charlene, Quixote, Amanda, Susan, Zed, Anne, Enkidu, Esbee, Joroan, Katelin, Roxie, Tay, Scarlet, Kevin, Johnny, Wolfgang, Andren, Bob, Howard, Merov, Rand, Ray, Michon, Newell, Galen, Dessie, Les, Michon, Jenelle, Geo, Siz, Shapiro, Pete, Calyle, Selene, Allen, Phoebe, Goldin, Kimmora, Dakota, Slaton, Lindquist, Zoey, Hari, Othello, Rohit, Sheldon, Petra, Viale, Gordon, Kaye, Pink, Ferny, Emerson, Davy, Bri, Chan, Juan, Robert, Terrence, Nathan, Carl i wielu innych. + Second Life zostało stworzone dla Was przez: Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Yang, T, Simone, Maestro, Scott, Charlene, Quixote, Amanda, Susan, Zed, Anne, Enkidu, Esbee, Joroan, Katelin, Roxie, Tay, Scarlet, Kevin, Johnny, Wolfgang, Andren, Bob, Howard, Merov, Rand, Ray, Michon, Newell, Galen, Dessie, Les and many others. - Podziękowania dla następujących rezydentów za pomoc w pracy nad obecną wersją Second Life: able whitman, Adeon Writer, adonaira aabye, Aeron Kohime, Agathos Frascati, Aimee Trescothick, Aleric Inglewood, Alissa Sabre, Aminom Marvin, Angela Talamasca, Aralara Rajal, Armin Weatherwax, Ashrilyn Hayashida, Athanasius Skytower, Aura Dirval, Barney Boomslang, Biancaluce Robbiani, Biker Offcourse, Borg Capalini, Bulli Schumann, catherine pfeffer, Chalice Yao, Corre Porta, Court Goodman, Cummere Mayo, Dale Innis, Darien Caldwell, Darjeeling Schoonhoven, Daten Thielt, dimentox travanti, Dirk Talamasca, Drew Dwi, Duckless Vandyke, Elanthius Flagstaff, Electro Burnstein, emiley tomsen, Escort DeFarge, Eva Rau, Ezian Ecksol, Fire Centaur, Fluf Fredriksson, Francisco Koolhoven, Frontera Thor, Frungi Stastny, Gally Young, gearsawe stonecutter, Gigs Taggart, Gordon Wendt, Gudmund Shepherd, Gypsy Paz, Harleen Gretzky, Henri Beauchamp, Inma Rau, Irene Muni, Iskar Ariantho, Jacek Antonelli, JB Kraft, Jessicka Graves, Joeseph Albanese, Joshua Philgarlic, Khyota Wulluf, kirstenlee Cinquetti, Latif Khalifa, Lex Neva, Lilibeth Andree, Lisa Lowe, Lunita Savira, Loosey Demonia, lum pfohl, Marcos Fonzarelli, MartinRJ Fayray, Marusame Arai, Matthew Dowd, Maya Remblai, McCabe Maxsted, Meghan Dench, Melchoir Tokhes, Menos Short, Michelle2 Zenovka, Mimika Oh, Minerva Memel, Mm Alder, Ochi Wolfe, Omei Turnbull, Pesho Replacement, Phantom Ninetails, phoenixflames kukulcan, Polo Gufler, prez pessoa, princess niven, Prokofy Neva, Qie Niangao, Rem Beattie, RodneyLee Jessop, Saijanai Kuhn, Seg Baphomet, Sergen Davies, Shirley Marquez, SignpostMarv Martin, Sindy Tsure, Sira Arbizu, Skips Jigsaw, Sougent Harrop, Spritely Pixel, Squirrel Wood, StarSong Bright, Subversive Writer, Sugarcult Dagger, Sylumm Grigorovich, Tammy Nowotny, Tanooki Darkes, Tayra Dagostino, Theoretical Chemistry, Thickbrick Sleaford, valerie rosewood, Vex Streeter, Vixen Heron, Whoops Babii, Winter Ventura, Xiki Luik, Yann Dufaux, Yina Yao, Yukinoroh Kamachi, Zolute Infinity, Zwagoth Klaar - - - - I get by with a little help from my friends. --Richard Starkey +Podziękowania dla następujących rezydentów za pomoc w pracy nad obecną wersją Second Life: (in progress) +It is a rare mind indeed that can render the hitherto non-existent blindingly obvious. The cry 'I could have thought of that' is a very popular and misleading one, for the fact is that they didn't, and a very significant and revealing fact it is too. + -- Douglas Adams </text_editor> </panel> <panel label="Licencje" name="licenses_panel"> diff --git a/indra/newview/skins/default/xui/pl/floater_about_land.xml b/indra/newview/skins/default/xui/pl/floater_about_land.xml index d456ea26b4..e4908deb07 100644 --- a/indra/newview/skins/default/xui/pl/floater_about_land.xml +++ b/indra/newview/skins/default/xui/pl/floater_about_land.xml @@ -1,7 +1,68 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floaterland" title="O POSIADŁOŚCI"> + <floater.string name="maturity_icon_general"> + "Parcel_PG_Dark" + </floater.string> + <floater.string name="maturity_icon_moderate"> + "Parcel_M_Dark" + </floater.string> + <floater.string name="maturity_icon_adult"> + "Parcel_R_Dark" + </floater.string> + <floater.string name="Minutes"> + [MINUTES] minuty + </floater.string> + <floater.string name="Minute"> + minuta + </floater.string> + <floater.string name="Seconds"> + [SECONDS] sekundy + </floater.string> + <floater.string name="Remaining"> + pozostały + </floater.string> <tab_container name="landtab"> - <panel label="Ogólne" name="land_general_panel"> + <panel label="OGÓLNE" name="land_general_panel"> + <panel.string name="new users only"> + Tylko nowi Rezydenci + </panel.string> + <panel.string name="anyone"> + Każdy + </panel.string> + <panel.string name="area_text"> + Obszar: + </panel.string> + <panel.string name="area_size_text"> + [AREA] m² + </panel.string> + <panel.string name="auction_id_text"> + Numer aukcji: [ID] + </panel.string> + <panel.string name="need_tier_to_modify"> + Musisz zaakceptować zakup by móc modyfikować Posiadłość. + </panel.string> + <panel.string name="group_owned_text"> + (Własność Grupy) + </panel.string> + <panel.string name="profile_text"> + Profil... + </panel.string> + <panel.string name="info_text"> + Info... + </panel.string> + <panel.string name="public_text"> + (publiczne) + </panel.string> + <panel.string name="none_text"> + (brak) + </panel.string> + <panel.string name="sale_pending_text"> + (Sprzedaż w toku realizacji) + </panel.string> + <panel.string name="no_selection_text"> + Posiadłość nie wybrana. +Idź do Świat > O Posiadłości albo wybierz inną posiadłość żeby pokazać jej dane. + </panel.string> <text name="Name:"> Nazwa: </text> @@ -26,14 +87,16 @@ <text name="OwnerText"> Leyla Linden </text> - <button label="Profile..." label_selected="Profile..." name="Profile..."/> <text name="Group:"> Grupa: </text> - <button label="Ustaw..." label_selected="Ustaw..." name="Set..."/> - <check_box label="Udostępnij przypisywanie na grupę" name="check deed" tool_tip="Oficer grupy ma prawo przepisać prawo własności posiadłości na grupę. Posiadłość wspierana jest przez przydziały pochodzące od członków grupy."/> - <button label="Przypisz..." label_selected="Przypisz..." name="Deed..." tool_tip="Prawo przypisania posiadłości na grupę może dokonać jedynie oficer grupy."/> - <check_box label="Właścicel dokonuje wpłat związanych z posiadłością" name="check contrib" tool_tip="Kiedy posiadłość zostaje przypisana na grupę, poprzedni właściciel realizuje wpłaty z nią związane w celu jej utrzymania."/> + <text name="GroupText"> + Leyla Linden + </text> + <button label="Ustaw" name="Set..."/> + <check_box label="Udostępnij przypisywanie na Grupę" name="check deed" tool_tip="Oficer Grupy ma prawo przepisać prawo własności Posiadłości na Grupę. Posiadłość wspierana jest przez przydziały pochodzące od członków Grupy."/> + <button label="Przypisz" name="Deed..." tool_tip="Prawo przypisania Posiadłości na Grupę może dokonać jedynie oficer Grupy."/> + <check_box label="Właścicel dokonuje wpłat związanych z Posiadłością" name="check contrib" tool_tip="Kiedy Posiadłość zostaje przypisana na Grupę, poprzedni Właściciel realizuje wpłaty z nią związane w celu jej utrzymania."/> <text name="For Sale:"> Na Sprzedaż: </text> @@ -41,9 +104,9 @@ Nie </text> <text name="For Sale: Price L$[PRICE]."> - Cena: L$[PRICE] (L$[PRICE_PER_SQM]/m²). + Cena: [PRICE]L$ ([PRICE_PER_SQM]L$/m²). </text> - <button label="Sprzedaj Posiadłość..." label_selected="Sprzedaj Posiadłość..." name="Sell Land..."/> + <button label="Sprzedaj posiadłość" name="Sell Land..."/> <text name="For sale to"> Na sprzedaż dla: [BUYER] </text> @@ -53,7 +116,7 @@ <text name="Selling with no objects in parcel."> Obiekty nie są zawarte w sprzedaży. </text> - <button label="Anuluj Sprzedaż" label_selected="Anuluj Sprzedaż" name="Cancel Land Sale"/> + <button label="Anuluj sprzedaż" label_selected="Anuluj sprzedaż" name="Cancel Land Sale"/> <text name="Claimed:"> Data: </text> @@ -73,138 +136,93 @@ 0 </text> <button label="Kup Posiadłość..." label_selected="Kup Posiadłość..." left="130" name="Buy Land..." width="125"/> - <button label="Kup dla Grupy..." label_selected="Kup dla Grupy..." name="Buy For Group..."/> + <button label="Skrypt" name="Scripts..."/> + <button label="Kup dla Grupy" name="Buy For Group..."/> <button label="Kup Przepustkę..." label_selected="Kup Przeputkę..." left="130" name="Buy Pass..." tool_tip="Przepustka udostępnia tymczasowy wstęp na posiadłość." width="125"/> - <button label="Porzuć z Posiadłości..." label_selected="Porzuć z Posiadłości..." name="Abandon Land..."/> - <button label="Odzyskaj Posiadłość..." label_selected="Odzyskaj Posiadłość..." name="Reclaim Land..."/> - <button label="Sprzedaż przez Lindenów..." label_selected="Sprzedaż przez Lindenów..." name="Linden Sale..." tool_tip="Posiadłość musi mieć właściciela, zawartość oraz nie może być wystawiona na aukcę."/> - <panel.string name="new users only"> - Tylko nowi użytkownicy - </panel.string> - <panel.string name="anyone"> - Każdy - </panel.string> - <panel.string name="area_text"> - Obszar: - </panel.string> - <panel.string name="area_size_text"> - [AREA] m² - </panel.string> - <panel.string name="auction_id_text"> - Numer aukcji: [ID] - </panel.string> - <panel.string name="need_tier_to_modify"> - Musisz zaakceptować zakup by móc modyfikować posiadłość. - </panel.string> - <panel.string name="group_owned_text"> - (Własność Grupy) - </panel.string> - <panel.string name="profile_text"> - Profil... - </panel.string> - <panel.string name="info_text"> - Info... - </panel.string> - <panel.string name="public_text"> - (publiczne) + <button label="Porzuć Posiadłość" name="Abandon Land..."/> + <button label="Odzyskaj Posiadłość" name="Reclaim Land..."/> + <button label="Sprzedaż przez Lindenów" name="Linden Sale..." tool_tip="Posiadłość musi mieć Właściciela, zawartość oraz nie może być wystawiona na Aukcję."/> + </panel> + <panel label="UMOWA" name="land_covenant_panel"> + <panel.string name="can_resell"> + Posiadłość zakupiona w tym Regionie może być odsprzedana. </panel.string> - <panel.string name="none_text"> - (brak) + <panel.string name="can_not_resell"> + Posiadłość zakupiona w tym Regionie nie może być odsprzedana. </panel.string> - <panel.string name="sale_pending_text"> - (Sprzedaż w Toku Realizacji) + <panel.string name="can_change"> + Posiadłość zakupiona w tym Regionie może być łączona/dzielona. </panel.string> - <panel.string name="no_selection_text"> - Posiadłość nie wybrana. -Idź do Świat > O Posiadłości albo wybierz inną posiadłość żeby pokazać jej dane. + <panel.string name="can_not_change"> + Posiadłość zakupiona w tym Regionie nie może być +łączona/dzielona. </panel.string> - </panel> - <panel label="Umowa" name="land_covenant_panel"> <text name="estate_section_lbl"> Majątek: </text> - <text name="estate_name_lbl"> - Nazwa: - </text> - <text name="estate_name_text" left="115"> + <text left="115" name="estate_name_text"> Główne </text> <text name="estate_owner_lbl"> Właściciel: </text> - <text name="estate_owner_text" left="115"> + <text left="115" name="estate_owner_text"> (brak) </text> - <text_editor name="covenant_editor" left="115"> + <text_editor left="115" name="covenant_editor"> Ta posiadłość nie wymaga żadej umowy. </text_editor> - <text name="covenant_timestamp_text" left="115"> + <text left="115" name="covenant_timestamp_text"> Ostatnia Modyfikacja Wed Dec 31 16:00:00 1969 </text> <text name="region_section_lbl"> Region: </text> - <text name="region_name_lbl"> - Nazwa: - </text> - <text name="region_name_text" left="115"> + <text left="115" name="region_name_text"> leyla </text> <text name="region_landtype_lbl"> Typ: </text> - <text name="region_landtype_text" left="115"> + <text left="115" name="region_landtype_text"> Region Główny / Ziemia </text> <text name="region_maturity_lbl"> Rodzaj: </text> - <text name="region_maturity_text" left="115"> + <text left="115" name="region_maturity_text"> 'Adult' </text> <text name="resellable_lbl"> Odsprzedaj: </text> - <text name="resellable_clause" width="338" left="115"> - Posiadłość zakupiona w tym regionie nie może być odsprzedana. + <text left="115" name="resellable_clause" width="338"> + Posiadłość zakupiona w tym Regionie nie może być odsprzedana. </text> <text name="changeable_lbl"> Podziel: </text> - <text name="changeable_clause" width="338" left="115"> - Posiadłość zakupiona w tym regionie nie może być + <text left="115" name="changeable_clause" width="338"> + Posiadłość zakupiona w tym Regionie nie może być łączona/dzielona. </text> - <panel.string name="can_resell"> - Posiadłość zakupiona w tym regionie może być odsprzedana. - </panel.string> - <panel.string name="can_not_resell"> - Posiadłość zakupiona w tym regionie nie może być odsprzedana. - </panel.string> - <panel.string name="can_change"> - Posiadłość zakupiona w tym regionie może być łączona/dzielona. + </panel> + <panel label="OBIEKTY" name="land_objects_panel"> + <panel.string name="objects_available_text"> + [COUNT] z [MAX] ([AVAILABLE] jest dostępne) </panel.string> - <panel.string name="can_not_change"> - Posiadłość zakupiona w tym regionie nie może być -łączona/dzielona. + <panel.string name="objects_deleted_text"> + [COUNT] z [MAX] ([DELETED] zostanie usunięte) </panel.string> - </panel> - <panel label="Obiekty" name="land_objects_panel"> <text name="parcel_object_bonus"> - Ilość Ekstra Obiektów: [BONUS] + Ilość ekstra obiektów: [BONUS] </text> <text name="Simulator primitive usage:"> - Ilość używanych primóww: + Ilość używanych primów: </text> <text name="objects_available" width="230"> [COUNT] z [MAX] ([AVAILABLE] jest dostępne) </text> - <panel.string name="objects_available_text"> - [COUNT] z [MAX] ([AVAILABLE] jest dostępne) - </panel.string> - <panel.string name="objects_deleted_text"> - [COUNT] z [MAX] ([DELETED] zostanie usunięte) - </panel.string> <text name="Primitives parcel supports:"> Maksymalna ilość primów: </text> @@ -212,19 +230,19 @@ Idź do Świat > O Posiadłości albo wybierz inną posiadłość żeby pokaz [COUNT] </text> <text name="Primitives on parcel:"> - Primy na posiadłości: + Primy na Posiadłości: </text> <text name="total_objects_text"> [COUNT] </text> <text name="Owned by parcel owner:"> - Właściciela posiadłości: + Właściciela Posiadłości: </text> <text name="owner_objects_text"> [COUNT] </text> <button label="Pokaż" label_selected="Pokaż" name="ShowOwner"/> - <button label="Zwróć..." label_selected="Zwróć..." name="ReturnOwner..." tool_tip="Zwróć obiekty do ich właścicieli."/> + <button label="Zwróć" name="ReturnOwner..." tool_tip="Zwróć obiekty do ich Właścicieli."/> <text name="Set to group:"> Grupy: </text> @@ -232,7 +250,7 @@ Idź do Świat > O Posiadłości albo wybierz inną posiadłość żeby pokaz [COUNT] </text> <button label="Pokaż" label_selected="Pokaż" name="ShowGroup"/> - <button label="Zwróć..." label_selected="Zwróć..." name="ReturnGroup..." tool_tip="Zwróć obiekty do ich właścicieli.."/> + <button label="Zwróć" name="ReturnGroup..." tool_tip="Zwróć obiekty do ich Właścicieli.."/> <text name="Owned by others:"> Innych Rezydentów: </text> @@ -240,7 +258,7 @@ Idź do Świat > O Posiadłości albo wybierz inną posiadłość żeby pokaz [COUNT] </text> <button label="Pokaż" label_selected="Pokaż" name="ShowOther"/> - <button label="Zwróć..." label_selected="Zwróć..." name="ReturnOther..." tool_tip="Zwróć obiekty do ich właścicieli."/> + <button label="Zwróć" name="ReturnOther..." tool_tip="Zwróć obiekty do ich Właścicieli."/> <text name="Selected / sat upon:"> Wybranych: </text> @@ -251,25 +269,55 @@ Idź do Świat > O Posiadłości albo wybierz inną posiadłość żeby pokaz Zwracaj obiekty innych Rezydentów (minut, 0 = wyłącz): </text> <text name="Object Owners:" width="108"> - Właściciel Obiektów: + Właściciel obiektów: </text> - <button label="Odśwież Listę" label_selected="Odśwież Listę" left="112" name="Refresh List"/> + <button label="Odśwież listę" label_selected="Odśwież listę" left="112" name="Refresh List" tool_tip="Refresh Object List"/> <button label="Zwróć obiekty..." label_selected="Zwróć obiekty..." left="224" name="Return objects..."/> <name_list name="owner list"> - <column label="Typ" name="type"/> - <column name="online_status"/> - <column label="Nazwa" name="name"/> - <column label="Liczba" name="count"/> - <column label="Najbardziej aktualne" name="mostrecent"/> + <name_list.columns label="Typ" name="type"/> + <name_list.columns name="online_status"/> + <name_list.columns label="Nazwa" name="name"/> + <name_list.columns label="Liczba" name="count"/> + <name_list.columns label="Najbardziej aktualne" name="mostrecent"/> </name_list> </panel> - <panel label="Opcje" name="land_options_panel"> + <panel label="OPCJE" name="land_options_panel"> + <panel.string name="search_enabled_tooltip"> + Udostępnij wyświetlanie tej Posiadłości w wyszukiwarce + </panel.string> + <panel.string name="search_disabled_small_tooltip"> + Wybrana opcja jest wyłączona, ponieważ wielkość Posiadłości wynosi 128 m² bądź mniej. +Jedynie większe posiadłości mogą być umieszczone w bazie wyszukiwarki. + </panel.string> + <panel.string name="search_disabled_permissions_tooltip"> + Wybrana opcja jest wyłączona ponieważ nie posiadasz prawa do modyfikacji Posiadłości. + </panel.string> + <panel.string name="mature_check_mature"> + Treść 'Mature' + </panel.string> + <panel.string name="mature_check_adult"> + Treść 'Adult' + </panel.string> + <panel.string name="mature_check_mature_tooltip"> + Twoja Posiadłość bądź treść jaką zawiera klasyfikowana jest jako 'Mature'. + </panel.string> + <panel.string name="mature_check_adult_tooltip"> + Informacje o Twojej Posiadłości i treści jaką zawiera klasyfikowane są jako 'Adult'. + </panel.string> + <panel.string name="landing_point_none"> + (brak) + </panel.string> + <panel.string name="push_restrict_text"> + Popychanie niedozwolone + </panel.string> + <panel.string name="push_restrict_region_text"> + Popychanie niedozwolone (Ustawienie Regionu) + </panel.string> <text name="allow_label"> Udostępnij innym Rezydentom: </text> - <check_box label="Edytowanie Terenu" name="edit land check" tool_tip="Wybrana - każdy może kształtować Twój teren. Najlepiej jest zostawić tą opcję nie wybraną, Ty zawsze możesz kształtowć Twój teren."/> - <check_box label="Zapisywania Miejsca" name="check landmark"/> - <check_box label="Latanie" name="check fly" tool_tip="Wybrana - Rezydenci mogą latać na Twojej posiadłości. Nie wybrana - mogą tylko wlatywać do lub latać ponad Twoją posiadłością."/> + <check_box label="Edytowanie Terenu" name="edit land check" tool_tip="Wybrana - każdy może kształtować Twój teren. Najlepiej jest zostawić tą opcję nie wybraną, Ty zawsze możesz kształtować Twój teren."/> + <check_box label="Latanie" name="check fly" tool_tip="Wybrana - Rezydenci mogą latać na Twojej Posiadłości. Nie jest wybrana - mogą tylko wlatywać do lub latać ponad Twoją Posiadłością."/> <text name="allow_label2"> Budowanie: </text> @@ -288,87 +336,39 @@ Idź do Świat > O Posiadłości albo wybierz inną posiadłość żeby pokaz <text name="land_options_label"> Opcje Posiadłości: </text> - <check_box label="Bezpieczna (brak zniszczeń)" name="check safe" tool_tip="Wybrana - posiadłość jest bezpieczna - zniszczenia w walce są zablokowane. Nie wybrana - zniszczenia w walce są włączone."/> - <check_box label="Popychanie niedozwolone" name="PushRestrictCheck" tool_tip="Nie pozwalaj skryptom na popychanie. Wybranie tej opcji może być przydatne do ograniczenia zakłóceń spokoju w Twojej posiadłości."/> - <check_box label="Wyświetlaj w wyszukiwarce (30L$/tyg.)" name="ShowDirectoryCheck" tool_tip="Udostępnij ukazywanie się nazwy posiadłości w wyszukiwarce"/> - <panel.string name="search_enabled_tooltip"> - Udostępnij wyświetlanie tej posiadłości w wyszukiwarce - </panel.string> - <panel.string name="search_disabled_small_tooltip"> - Wybrana opcja jest wyłączona ze względu iż wielkość posiadłości wynosi 128 m² bądź mniej. -Jedynie większe posiadłości mogą być umieszczone w bazie wyszukiwarki. - </panel.string> - <panel.string name="search_disabled_permissions_tooltip"> - Wybrana opcja jest wyłączona ponieważ nie posiadasz prawa do modyfikacji posiadłości. - </panel.string> + <check_box label="Bezpieczna (brak zniszczeń)" name="check safe" tool_tip="Wybrana - Posiadłość jest bezpieczna - zniszczenia w walce są zablokowane. Nie jest wybrana - zniszczenia w walce są włączone."/> + <check_box label="Popychanie niedozwolone" name="PushRestrictCheck" tool_tip="Nie pozwalaj skryptom na popychanie. Wybranie tej opcji może być przydatne do ograniczenia zakłóceń spokoju w Twojej Posiadłości."/> + <check_box label="Wyświetlaj w wyszukiwarce (30L$/tyg.)" name="ShowDirectoryCheck" tool_tip="Udostępnij ukazywanie się nazwy Posiadłości w wyszukiwarce"/> <combo_box name="land category with adult"> - <combo_box.item name="item0" label="Każda Kategoria" - /> - <combo_box.item name="item1" label="Linden Lokacja" - /> - <combo_box.item name="item2" label="'Adult'" - /> - <combo_box.item name="item3" label="Sztuka i Kultura" - /> - <combo_box.item name="item4" label="Biznes" - /> - <combo_box.item name="item5" label="Edukacyjna" - /> - <combo_box.item name="item6" label="Gra" - /> - <combo_box.item name="item7" label="Poznawanie ludzi" - /> - <combo_box.item name="item8" label="Przyjazne dla nowych" - /> - <combo_box.item name="item9" label="Park i Natura" - /> - <combo_box.item name="item10" label="Mieszkalna" - /> - <combo_box.item name="item11" label="Zakupy" - /> - <combo_box.item name="item12" label="Inna" - /> + <combo_box.item label="Każda kategoria" name="item0"/> + <combo_box.item label="Linden Lokalizacja" name="item1"/> + <combo_box.item label="'Adult'" name="item2"/> + <combo_box.item label="Sztuka i kultura" name="item3"/> + <combo_box.item label="Biznes" name="item4"/> + <combo_box.item label="Edukacyjna" name="item5"/> + <combo_box.item label="Gra" name="item6"/> + <combo_box.item label="Poznawanie ludzi" name="item7"/> + <combo_box.item label="Przyjazne dla nowych" name="item8"/> + <combo_box.item label="Park i natura" name="item9"/> + <combo_box.item label="Mieszkalna" name="item10"/> + <combo_box.item label="Zakupy" name="item11"/> + <combo_box.item label="Inna" name="item12"/> </combo_box> <combo_box name="land category"> - <combo_box.item name="item0" label="Każda Kategoria" - /> - <combo_box.item name="item1" label="Linden Lokacja" - /> - <combo_box.item name="item3" label="Sztuka i Kultura" - /> - <combo_box.item name="item4" label="Biznes" - /> - <combo_box.item name="item5" label="Edukacyjna" - /> - <combo_box.item name="item6" label="Gra" - /> - <combo_box.item name="item7" label="Poznawanie ludzi" - /> - <combo_box.item name="item8" label="Przyjazna dla nowych" - /> - <combo_box.item name="item9" label="Parki i Natura" - /> - <combo_box.item name="item10" label="Mieszkalna" - /> - <combo_box.item name="item11" label="Zakupy" - /> - <combo_box.item name="item12" label="Inna" - /> + <combo_box.item label="Każda kategoria" name="item0"/> + <combo_box.item label="Linden Lokalizacja" name="item1"/> + <combo_box.item label="Sztuka i kultura" name="item3"/> + <combo_box.item label="Biznes" name="item4"/> + <combo_box.item label="Edukacyjna" name="item5"/> + <combo_box.item label="Gra" name="item6"/> + <combo_box.item label="Poznawanie ludzi" name="item7"/> + <combo_box.item label="Przyjazna dla nowych" name="item8"/> + <combo_box.item label="Parki i natura" name="item9"/> + <combo_box.item label="Mieszkalna" name="item10"/> + <combo_box.item label="Zakupy" name="item11"/> + <combo_box.item label="Inna" name="item12"/> </combo_box> - <button label="?" label_selected="?" name="?"/> <check_box label="Treść 'Mature'" name="MatureCheck" tool_tip=""/> - <panel.string name="mature_check_mature"> - Treść 'Mature' - </panel.string> - <panel.string name="mature_check_adult"> - Treść 'Adult' - </panel.string> - <panel.string name="mature_check_mature_tooltip"> - Twoja posiadłość bądź treść jaką zawiera klasyfikowana jest jako 'Mature'. - </panel.string> - <panel.string name="mature_check_adult_tooltip"> - Informacje o Twojej posiadłości i treści jaką zawiera klasyfikowane są jako 'Adult'. - </panel.string> <text name="Snapshot:"> Zdjęcie: </text> @@ -376,38 +376,27 @@ Jedynie większe posiadłości mogą być umieszczone w bazie wyszukiwarki. <text name="landing_point"> Punkt Lądowania: [LANDING] </text> - <panel.string name="landing_point_none"> - (brak) - </panel.string> <button label="Ustaw" label_selected="Ustaw" name="Set" tool_tip="Ustal miejsce lądowania dla przybywających gości. Używa położenia Twojego awatara na tej posiadłości."/> <button label="Nowy" label_selected="Nowy" name="Clear" tool_tip="Clear the landing point."/> <text name="Teleport Routing: "> - Trasa Teleportacji: - </text> - <combo_box name="landing type" tool_tip="Trasa Teleportacj-ustaw w jaki sposób będzie sę odbywać proces telportacji w posiadłości."> - <combo_box.item name="Blocked" label="Zablokowana" - /> - <combo_box.item name="LandingPoint" label="Punkt Lądowania" - /> - <combo_box.item name="Anywhere" label="Gdziekolwiek" - /> + Trasa teleportacji: + </text> + <combo_box name="landing type" tool_tip="Trasa teleportacj-ustaw w jaki sposób będzie sę odbywać proces telportacji w Posiadłości."> + <combo_box.item label="Zablokowana" name="Blocked"/> + <combo_box.item label="Punkt Lądowania" name="LandingPoint"/> + <combo_box.item label="Gdziekolwiek" name="Anywhere"/> </combo_box> - <panel.string name="push_restrict_text"> - Popychanie niedozwolone - </panel.string> - <panel.string name="push_restrict_region_text"> - Popychanie niedozwolone (Ustawienie Regionu) - </panel.string> </panel> - <panel label="Media" name="land_media_panel"> + <panel label="MEDIA" name="land_media_panel"> <text name="with media:"> - Typ Mediów: + Typ mediów: </text> <combo_box name="media type" tool_tip=""/> <text name="at URL:"> - URL Mediów: + URL mediów: </text> - <button label="Ustaw..." label_selected="Ustaw..." name="set_media_url"/> + <button label="Ustaw" name="set_media_url"/> + <check_box label="Ukryj URL mediów" name="hide_media_url" tool_tip="Wybranie tej opcji, zablokuje widok adresu do medów wszystkim nieautoryzowanym Użytkownikom. Nie dotyczy to jednak typów HTML."/> <text name="Description:"> Opis: </text> @@ -418,18 +407,9 @@ Teksturę: </text> <texture_picker label="" name="media texture" tool_tip="Kliknij by wybrać zdjęcie"/> <text name="replace_texture_help"> - (Obiekty używające tej tekstury będą wyświetlały -film lub stronę internetową po naciśnięciu -przycisku odtwarzania.) - </text> - <text name="Options:"> - Opcje -Mediów: + Obiekty używające tej tekstury będą wyświetlały film lub stronę internetową po naciśnięciu przycisku odtwarzania. Wybierz miniaturę, jeśli chcesz zmienić teksturę. </text> <check_box label="Automatyczna Skala" name="media_auto_scale" tool_tip="Wybranie tej opcji dobierze odpowiedni rozmiar zawartości mediów dla tej posiadłości automatycznie. Może to mieć znaczący wpływ na jakość odtwarzanego materialu - może zwolnić i zmniejszyć jakość materiału."/> - <check_box label="Powtórka Odtwarzania" name="media_loop" tool_tip="Odtwarzaj media z powtórką. Po wyświetleniu materialu, rozpocznie się odtwarzanie od początku."/> - <check_box label="Ukryj URL Mediów" name="hide_media_url" tool_tip="Wybranie tej opcji, zablokuje widok adresu do medów wszystkim nieautoryzowanym użytkownikom. Nie dotyczy to jednak typów HTML."/> - <check_box label="Ukryj URL Muzyki" name="hide_music_url" tool_tip="Wybranie tej opcji, zablokuje widok adresu do medów muzycznych w posiadłości wszystkim nieautoryzowanym użytkownikom"/> <text name="media_size" tool_tip="Rozmiar dla ładowania mediów internetowych. Zostaw 0 dla ustawień domyślnych."> Rozmiar: </text> @@ -438,56 +418,48 @@ Mediów: <text name="pixels"> pixeli </text> - <text name="MusicURL:"> - URL Muzyki: - </text> - <text name="Sound:"> - Dźwięk: - </text> - <check_box label="Restrykcja obiektów oraz gestur dozwolonych w tej posiadłości" name="check sound local"/> - <button label="?" label_selected="?" name="?" left="432"/> - <text name="Voice settings:"> - Głos: + <text name="Options:"> + Opcje +Mediów: </text> - <check_box label="Rozmowy Dozwolone" name="parcel_enable_voice_channel"/> - <check_box label="Rozmowy Dozwolone (ustawione przez majątek)" name="parcel_enable_voice_channel_is_estate_disabled"/> - <check_box label="Ogranicz komunikację głosową w tej posiadłości." name="parcel_enable_voice_channel_parcel"/> + <check_box label="Powtórka Odtwarzania" name="media_loop" tool_tip="Odtwarzaj media z powtórką. Po wyświetleniu materialu, rozpocznie się odtwarzanie od początku."/> </panel> - <panel label="Dostęp" name="land_access_panel"> + <panel label="DŹWIĘK" name="land_audio_panel"> + <check_box label="Ukryj URL muzyki" name="hide_music_url" tool_tip="Wybranie tej opcji, zablokuje widok adresu do medów muzycznych w posiadłości wszystkim nieautoryzowanym Użytkownikom"/> + <check_box label="Rozmowy dozwolone" name="parcel_enable_voice_channel"/> + <check_box label="Rozmowy dozwolone (ustawione przez Majątek)" name="parcel_enable_voice_channel_is_estate_disabled"/> + <check_box label="Ogranicz komunikację głosową w tej posiadłości." name="parcel_enable_voice_channel_local"/> + </panel> + <panel label="DOSTĘP" name="land_access_panel"> + <panel.string name="access_estate_defined"> + (Zdefiniowane przez Majątek) + </panel.string> + <panel.string name="allow_public_access"> + Udostępnij dostęp publiczny ([MATURITY]) + </panel.string> + <panel.string name="estate_override"> + Jedna lub więcej z tych opcji ustawiona jest z poziomu Posiadłości + </panel.string> <text name="Limit access to this parcel to:"> - Dostęp do tej posiadłości: + Dostęp do tej Posiadłości: </text> - <check_box label="Publiczny" name="public_access"/> + <check_box label="Publiczny [MATURITY]" name="public_access"/> <text name="Only Allow"> Zablokuj dostęp dla: </text> - <check_box label="Rezydentów niezarejestrowanych w systemie płatniczym z Linden Lab" name="limit_payment" tool_tip="Ban unidentified residents."/> - <check_box label="Rezydentów z brakiem weryfikacji wieku " name="limit_age_verified" tool_tip="Zbanuj Rezydetów bez weryfikacji wieku. Odwiedź support.secondlife.com po więcej informacji."/> - <panel.string name="estate_override"> - Jedna lub więcej z tych opcji ustawiona jest z poziomu posiadłości - </panel.string> - <check_box label="Udostępnij wejście grupie: [GROUP]" name="GroupCheck" tool_tip="Ustaw grupę w głównej zakładce"/> - <check_box label="Sprzedaj wejściówki:" name="PassCheck" tool_tip="Otwórz tymczasowy dostęp do tej posiadłości"/> + <check_box label="Rezydentów zarejestrowanych w systemie płatniczym Linden Lab [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="Zbanuj Rezydentów niezarejestrowanych w systemie płatniczym z Linden Lab."/> + <check_box label="Weryfikacja Wieku: [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="Zbanuj Rezydetów bez Weryfikacji Wieku. Odwiedź support.secondlife.com po więcej informacji."/> + <check_box label="Udostępnij wejście Grupie: [GROUP]" name="GroupCheck" tool_tip="Ustaw Grupę w głównej zakładce"/> + <check_box label="Sprzedaj przepustki:" name="PassCheck" tool_tip="Otwórz tymczasowy dostęp do tej Posiadłości"/> <combo_box name="pass_combo"> - <combo_box.item name="Anyone" label="Każdemu" - /> - <combo_box.item name="Group" label="Grupie" - /> + <combo_box.item label="Każdemu" name="Anyone"/> + <combo_box.item label="Grupie" name="Group"/> </combo_box> <spinner label="Cena w L$:" name="PriceSpin"/> <spinner label="Ilość godzin dostępu:" name="HoursSpin"/> - <text label="Zawsze udostępniaj" name="AllowedText"> - Dozwoleni Rezydenci - </text> - <name_list name="AccessList" tool_tip="([LISTED] na liście, [MAX] max)"/> - <button label="Dodaj..." label_selected="Dodaj..." name="add_allowed"/> - <button label="Usuń" label_selected="Usuń" name="remove_allowed"/> - <text label="Ban" name="BanCheck"> - Nieporządani Rezydenci (bany) - </text> - <name_list name="BannedList" tool_tip="([LISTED] na liście, [MAX] max)"/> - <button label="Dodaj..." label_selected="Dodaj..." name="add_banned"/> - <button label="Usuń" label_selected="Usuń" name="remove_banned"/> + <panel name="Allowed_layout_panel"> + <name_list name="AccessList" tool_tip="([LISTED] na liście, [MAX] maksimum)"/> + </panel> </panel> </tab_container> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_activeim.xml b/indra/newview/skins/default/xui/pl/floater_activeim.xml new file mode 100644 index 0000000000..2a34409f8b --- /dev/null +++ b/indra/newview/skins/default/xui/pl/floater_activeim.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_activeim" title="AKTYWNY IM"/> diff --git a/indra/newview/skins/default/xui/pl/floater_animation_preview.xml b/indra/newview/skins/default/xui/pl/floater_animation_preview.xml index 0524b8ade3..ca06665c65 100644 --- a/indra/newview/skins/default/xui/pl/floater_animation_preview.xml +++ b/indra/newview/skins/default/xui/pl/floater_animation_preview.xml @@ -1,172 +1,187 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="Animation Preview" title=""> + <floater.string name="failed_to_initialize"> + Inicjalizacja ruchu nie powiodła się. + </floater.string> + <floater.string name="anim_too_long"> + Długość pliku animacji wynosi [LENGTH] sekund. + +Maksymalna długość pliku animacji wynosi [MAX_LENGTH] sekund. + </floater.string> + <floater.string name="failed_file_read"> + Brak możliwości odczytania plików animacji do wyświetlenia. + +[STATUS] + </floater.string> + <floater.string name="E_ST_OK"> + Ok + </floater.string> + <floater.string name="E_ST_EOF"> + Niewłaściwe zakończenie nazwy pliku. + </floater.string> + <floater.string name="E_ST_NO_CONSTRAINT"> + Brak możliwości wyświetlenia definicji ograniczenia. + </floater.string> + <floater.string name="E_ST_NO_FILE"> + Plik BVH nie może zostać otworzony. + </floater.string> + <floater.string name="E_ST_NO_HIER"> + Niewłaściwy nagłówek HIERARCHI. + </floater.string> + <floater.string name="E_ST_NO_JOINT"> + ROOT oraz JOINT nieodnalezione. + </floater.string> + <floater.string name="E_ST_NO_NAME"> + Brak nazwy JOINT. + </floater.string> + <floater.string name="E_ST_NO_OFFSET"> + OFFSET nieodnalezione. + </floater.string> + <floater.string name="E_ST_NO_CHANNELS"> + CHANNELS nieodnalezione. + </floater.string> + <floater.string name="E_ST_NO_ROTATION"> + Brak otrzymania kolejności obrotu. + </floater.string> + <floater.string name="E_ST_NO_AXIS"> + Brak osi obrotu. + </floater.string> + <floater.string name="E_ST_NO_MOTION"> + MOTION nieodnalezione. + </floater.string> + <floater.string name="E_ST_NO_FRAMES"> + Brak otrzymania liczby klatek obrazu. + </floater.string> + <floater.string name="E_ST_NO_FRAME_TIME"> + Brak otrzymania czasu dla ilości klatek obrazu. + </floater.string> + <floater.string name="E_ST_NO_POS"> + Brak otrzymania wartości pozycji. + </floater.string> + <floater.string name="E_ST_NO_ROT"> + Nie można odczytać wartości obrotu. + </floater.string> + <floater.string name="E_ST_NO_XLT_FILE"> + Nie można otworzyć pliku tłumaczenia. + </floater.string> + <floater.string name="E_ST_NO_XLT_HEADER"> + Nie można przeczytać tłumaczenia nagłówka. + </floater.string> + <floater.string name="E_ST_NO_XLT_NAME"> + Nie można przetłumaczyć nazw. + </floater.string> + <floater.string name="E_ST_NO_XLT_IGNORE"> + Nie można przeczytać tłumaczenia dla wartości ignorowania. + </floater.string> + <floater.string name="E_ST_NO_XLT_RELATIVE"> + Nie można przeczytać tłumaczenia wartości relatywnej. + </floater.string> + <floater.string name="E_ST_NO_XLT_OUTNAME"> + Nie można przeczytać nazw wartości tłumaczenia. + </floater.string> + <floater.string name="E_ST_NO_XLT_MATRIX"> + Nie można przeczytać tłumaczenia pola. + </floater.string> + <floater.string name="E_ST_NO_XLT_MERGECHILD"> + Brak otrzymania nazwy dla mergechild. + </floater.string> + <floater.string name="E_ST_NO_XLT_MERGEPARENT"> + Brak otrzymania nazwy dla mergeparent. + </floater.string> + <floater.string name="E_ST_NO_XLT_PRIORITY"> + Brak wartości prerogatywy. + </floater.string> + <floater.string name="E_ST_NO_XLT_LOOP"> + Brak otrzymania wartości powtórzeń. + </floater.string> + <floater.string name="E_ST_NO_XLT_EASEIN"> + Brak otrzymawnia wartości easeIn. + </floater.string> + <floater.string name="E_ST_NO_XLT_EASEOUT"> + Brak otrzymania wartości dla easeOut. + </floater.string> + <floater.string name="E_ST_NO_XLT_HAND"> + Brak otrzymania wartości morfizacji. + </floater.string> + <floater.string name="E_ST_NO_XLT_EMOTE"> + Niemożliwość przeczytania nazwy emocji. + </floater.string> + <floater.string name="E_ST_BAD_ROOT"> + Nieprawidłowa nazwa, użyj "hip". + </floater.string> <text name="name_label"> Nazwa: </text> <text name="description_label"> Opis: </text> - <spinner label="Pierwszeństwo" name="priority" - tool_tip="Kontroluj,animacje,które mogą zostać zdominowane przez tą animację" /> - <check_box label="Powtarzaj" name="loop_check" tool_tip="Powtarzaj tą animację" /> - <spinner label="Od(%)" name="loop_in_point" - tool_tip="Wybierz punkt, od którego chcesz zacząć powtarzać animację" /> - <spinner label="Do(%)" name="loop_out_point" - tool_tip="Wybierz punkt, od którego chcesz zakończyć powtarznie animacji" /> + <spinner label="Pierwszeństwo" name="priority" tool_tip="Kontroluj animacje,które mogą zostać zdominowane przez tą animację"/> + <check_box label="Powtarzaj" name="loop_check" tool_tip="Powtarzaj tą animację"/> + <spinner label="Od(%)" name="loop_in_point" tool_tip="Wybierz punkt, od którego chcesz zacząć powtarzać animację"/> + <spinner label="Do(%)" name="loop_out_point" tool_tip="Wybierz punkt, od którego chcesz zakończyć powtarzanie animacji"/> <text name="hand_label"> Pozycja Ręki </text> - <combo_box label="" name="hand_pose_combo" - tool_tip="Kontroluje co robi ręka podczas animacji"> - <combo_item name="Spread"> - Rozciągaj - </combo_item> - <combo_item name="Relaxed"> - Odpocznij - </combo_item> - <combo_item name="PointBoth"> - Wskazuj - </combo_item> - <combo_item name="Fist"> - Pięść - </combo_item> - <combo_item name="RelaxedLeft"> - Lewa-Odpocznij - </combo_item> - <combo_item name="PointLeft"> - Wskazuj Lewą - </combo_item> - <combo_item name="FistLeft"> - Zaciśnij Lewą - </combo_item> - <combo_item name="RelaxedRight"> - Prawa-Odpocznj - </combo_item> - <combo_item name="PointRight"> - Wskazuj Prawą - </combo_item> - <combo_item name="FistRight"> - Zaciśnij Prawą - </combo_item> - <combo_item name="SaluteRight"> - Salutuj Prawą - </combo_item> - <combo_item name="Typing"> - Pisz - </combo_item> - <combo_item name="PeaceRight"> - Prawa-Pokój - </combo_item> + <combo_box label="" name="hand_pose_combo" tool_tip="Kontroluje co robi ręka podczas animacji"> + <combo_box.item label="Rozciągaj" name="Spread"/> + <combo_box.item label="Odpocznij" name="Relaxed"/> + <combo_box.item label="Wskazuj" name="PointBoth"/> + <combo_box.item label="Pięść" name="Fist"/> + <combo_box.item label="Lewa-Odpocznij" name="RelaxedLeft"/> + <combo_box.item label="Wskazuj Lewą" name="PointLeft"/> + <combo_box.item label="Zaciśnij Lewą" name="FistLeft"/> + <combo_box.item label="Prawa-Odpocznij" name="RelaxedRight"/> + <combo_box.item label="Wskazuj Prawą" name="PointRight"/> + <combo_box.item label="Zaciśnij Prawą" name="FistRight"/> + <combo_box.item label="Salutuj Prawą" name="SaluteRight"/> + <combo_box.item label="Pisz" name="Typing"/> + <combo_box.item label="Prawa-Pokój" name="PeaceRight"/> </combo_box> <text name="emote_label"> Ekspresja </text> - <combo_box label="" name="emote_combo" - tool_tip="Kontroluj mimikę twarzy w czasie animacji"> - <combo_item name="[None]"> - [Żadne] - </combo_item> - <combo_item name="Aaaaah"> - Aaaaah - </combo_item> - <combo_item name="Afraid"> - Obawa - </combo_item> - <combo_item name="Angry"> - Złość - </combo_item> - <combo_item name="BigSmile"> - Duży Uśmiech - </combo_item> - <combo_item name="Bored"> - Znudzenie - </combo_item> - <combo_item name="Cry"> - Płacz - </combo_item> - <combo_item name="Disdain"> - Wzgarda - </combo_item> - <combo_item name="Embarrassed"> - Zakłopotanie - </combo_item> - <combo_item name="Frown"> - Marszczenie Brwi - </combo_item> - <combo_item name="Kiss"> - Pocałunek - </combo_item> - <combo_item name="Laugh"> - Śmiech - </combo_item> - <combo_item name="Plllppt"> - Plllppt - </combo_item> - <combo_item name="Repulsed"> - Odrzucenie - </combo_item> - <combo_item name="Sad"> - Smutek - </combo_item> - <combo_item name="Shrug"> - Wzruszanie Ramionami - </combo_item> - <combo_item name="Smile"> - Uśmiech - </combo_item> - <combo_item name="Surprise"> - Niespodzianka - </combo_item> - <combo_item name="Wink"> - Mrugnięcie - </combo_item> - <combo_item name="Worry"> - Zmartwienie - </combo_item> + <combo_box label="" name="emote_combo" tool_tip="Kontroluj mimikę twarzy w czasie animacji"> + <combo_box.item label="(Żadne)" name="[None]"/> + <combo_box.item label="Aaaaah" name="Aaaaah"/> + <combo_box.item label="Obawa" name="Afraid"/> + <combo_box.item label="Złość" name="Angry"/> + <combo_box.item label="Duży Uśmiech" name="BigSmile"/> + <combo_box.item label="Znudzenie" name="Bored"/> + <combo_box.item label="Płacz" name="Cry"/> + <combo_box.item label="Wzgarda" name="Disdain"/> + <combo_box.item label="Zakłopotanie" name="Embarrassed"/> + <combo_box.item label="Marszczenie Brwi" name="Frown"/> + <combo_box.item label="Pocałunek" name="Kiss"/> + <combo_box.item label="Śmiech" name="Laugh"/> + <combo_box.item label="Plllppt" name="Plllppt"/> + <combo_box.item label="Odrzucenie" name="Repulsed"/> + <combo_box.item label="Smutek" name="Sad"/> + <combo_box.item label="Wzruszenie Ramionami" name="Shrug"/> + <combo_box.item label="Uśmiech" name="Smile"/> + <combo_box.item label="Niespodzianka" name="Surprise"/> + <combo_box.item label="Mrugnięcie" name="Wink"/> + <combo_box.item label="Zmartwienie" name="Worry"/> </combo_box> <text name="preview_label"> Przeglądaj kiedy: </text> - <combo_box label="" name="preview_base_anim" - tool_tip="Przetestuj zachowanie animacji kiedy awatar wykonuje normalne czynności"> - <combo_item name="Standing"> - Stoisz - </combo_item> - <combo_item name="Walking"> - Chodzisz - </combo_item> - <combo_item name="Sitting"> - Siedzisz - </combo_item> - <combo_item name="Flying"> - Latasz - </combo_item> + <combo_box label="" name="preview_base_anim" tool_tip="Przetestuj zachowanie animacji kiedy awatar wykonuje normalne czynności"> + <combo_box.item label="Stoisz" name="Standing"/> + <combo_box.item label="Chodzisz" name="Walking"/> + <combo_box.item label="Siedzisz" name="Sitting"/> + <combo_box.item label="Latasz" name="Flying"/> </combo_box> - <spinner label="Złagodzić w (sekund)" name="ease_in_time" - tool_tip="Ilość Czasu (w sekundach), w których animacje mieszają się" /> - <spinner label="Złagodzić na zewnątrz (sekund)" name="ease_out_time" - tool_tip="Ilość Czasu (w sekundach), w których animacje oddzielają się" /> - <button label="" name="play_btn" tool_tip="Play/pause your animation." /> - <button label="" name="stop_btn" tool_tip="Stop animation playback" /> - <slider label="" name="playback_slider" /> + <spinner label="Złagodzić w (sekund)" name="ease_in_time" tool_tip="Ilość Czasu (w sekundach), w których animacje mieszają się"/> + <spinner label="Złagodzić na zewnątrz (sekund)" name="ease_out_time" tool_tip="Ilość Czasu (w sekundach), w których animacje oddzielają się"/> + <button label="" name="play_btn" tool_tip="Odtwarzaj animację"/> + <button name="pause_btn" tool_tip="Zatrzymaj animację"/> + <button label="" name="stop_btn" tool_tip="Stop animation playback"/> + <slider label="" name="playback_slider"/> <text name="bad_animation_text"> Brak możliwości wczytania pliku animacji. Doradzamy eksport plików BVH z Poser 4. </text> - <button label="Anuluj" name="cancel_btn" /> - <button label="Załaduj (L$[AMOUNT])" name="ok_btn" /> - <string name="failed_to_initialize"> - Inicjalizacja ruchu nie powiodła się. - </string> - <string name="anim_too_long"> - Długość pliku animacji wynosi [LENGTH] sekund. - -Maksymalna długość pliku animacji wynosi [MAX_LENGTH] sekund. - </string> - <string name="failed_file_read"> - Niemożliwość odczytania pliku animacji do wyświetlenia. - -[STATUS] - </string> + <button label="Załaduj ([AMOUNT]L$)" name="ok_btn"/> + <button label="Anuluj" name="cancel_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_auction.xml b/indra/newview/skins/default/xui/pl/floater_auction.xml index 815c36606c..9399fa1115 100644 --- a/indra/newview/skins/default/xui/pl/floater_auction.xml +++ b/indra/newview/skins/default/xui/pl/floater_auction.xml @@ -1,11 +1,11 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater_auction" title="ROZPOCZNIJ SPRZEDAŻ POSIADŁOŚCI LINDENÓW"> <floater.string name="already for sale"> - Nie możesz umieścić posiadłości na aukcji, jeżeli już została wystawiona na sprzedaż. + Nie możesz umieścić Posiadłości na Aukcji, jeżeli już została wystawiona na sprzedaż. </floater.string> <check_box initial_value="true" label="Zawierając żółte ogrodzenie" name="fence_check"/> <button label="Zdjęce" label_selected="Zdjęce" name="snapshot_btn"/> - <button label="Sprzedaj Każdemu" label_selected="Sprzedaj Każdemu" name="sell_to_anyone_btn"/> - <button label="Wyczyść Ustawienia" label_selected="Wyczyść Ustawienia" name="reset_parcel_btn"/> + <button label="Sprzedaj każdemu" label_selected="Sprzedaj Każdemu" name="sell_to_anyone_btn"/> + <button label="Wyczyść ustawienia" label_selected="Wyczyść ustawienia" name="reset_parcel_btn"/> <button label="Rozpocznij Aukcję" label_selected="Rozpocznij Aukcję" name="start_auction_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_avatar_picker.xml b/indra/newview/skins/default/xui/pl/floater_avatar_picker.xml index 8c09f7294c..0897f59570 100644 --- a/indra/newview/skins/default/xui/pl/floater_avatar_picker.xml +++ b/indra/newview/skins/default/xui/pl/floater_avatar_picker.xml @@ -1,40 +1,46 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="avatarpicker" title="WYBIERZ REZYDENTA"> + <floater.string name="not_found"> + '[TEXT]' nie zostało odnalezione + </floater.string> + <floater.string name="no_one_near"> + Nie ma nikogo w pobliżu + </floater.string> + <floater.string name="no_results"> + Brak wyników + </floater.string> + <floater.string name="searching"> + Wyszukiwanie... + </floater.string> + <string label="Wybierz" label_selected="Wybierz" name="Select"> + Wybierz + </string> + <string name="Close"> + Zamknij + </string> <tab_container name="ResidentChooserTabs"> <panel label="Znajdź" name="SearchPanel"> <text name="InstructSearchResidentName"> - Wpisz imię Rezydenta: + Wpisz fragment imienia: </text> - <button label="Znajdź" label_selected="Znajdź" name="Find"/> + <button label="Szukaj" label_selected="Szukaj" name="Find"/> </panel> - <panel label="Wizytówka" name="CallingCardsPanel"> - <text name="InstructSelectCallingCard"> - Wybierz wizytówkę: + <panel label="Znajomi" name="FriendsPanel"> + <text name="InstructSelectFriend"> + Wybierz osobę: </text> </panel> <panel label="Obok mnie:" name="NearMePanel"> <text name="InstructSelectResident"> - Wybierz Rezydenta obok: + Wybierz osobę w pobliżu: </text> - <button label="Odśwież" label_selected="Odśwież" name="Refresh"/> <slider label="Zasięg" name="near_me_range"/> <text name="meters"> Metry </text> + <button label="Odśwież" label_selected="Odśwież" name="Refresh"/> </panel> </tab_container> - <button label="Wybierz" label_selected="Wybierz" name="Select"/> - <button label="Anuluj" label_selected="Anuluj" name="Cancel"/> - <string name="not_found"> - '[TEXT]' nie zostało odnalezione - </string> - <string name="no_one_near"> - Nikt w pobliżu - </string> - <string name="no_results"> - Brak wyników - </string> - <string name="searching"> - Wyszukiwanie... - </string> + <button label="OK" label_selected="OK" name="ok_btn"/> + <button label="Cofnij" label_selected="Cofnij" name="cancel_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_avatar_textures.xml b/indra/newview/skins/default/xui/pl/floater_avatar_textures.xml index dce2330807..11651ad7e8 100644 --- a/indra/newview/skins/default/xui/pl/floater_avatar_textures.xml +++ b/indra/newview/skins/default/xui/pl/floater_avatar_textures.xml @@ -1,30 +1,43 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="avatar_texture_debug" title="TEKSTURY AWATARA"> - <text name="baked_label"> - Tekstury Renderowane - </text> + <floater.string name="InvalidAvatar"> + NIEWŁAŚCIWY AWATAR + </floater.string> <text name="composite_label"> - Tekstury Kompozytowe + Tekstury kompozytowe </text> - <texture_picker label="Głowa" name="baked_head" /> - <texture_picker label="Makijaż" name="head_bodypaint" /> - <texture_picker label="Włosy" name="hair" /> - <button label="Zrzuć" label_selected="Zrzuć" name="Dump" /> - <texture_picker label="Oczy" name="baked_eyes" /> - <texture_picker label="Oko" name="eye_texture" /> - <texture_picker label="Góra Część Ciała" name="baked_upper_body" /> - <texture_picker label="Tatuaż Górnej Części Ciała" name="upper_bodypaint" /> - <texture_picker label="Podkoszulek" name="undershirt" /> - <texture_picker label="Rękawiczki" name="gloves" /> - <texture_picker label="Koszula" name="shirt" /> - <texture_picker label="Górna Część Kurtki" name="upper_jacket" /> - <texture_picker label="Dolna Część Ciała" name="baked_lower_body" /> - <texture_picker label="Tatuaż Dolnej Części Ciała" name="lower_bodypaint" /> - <texture_picker label="Bielizna" name="underpants" /> - <texture_picker label="Skarpety" name="socks" /> - <texture_picker label="Buty" name="shoes" /> - <texture_picker label="Spodnie" name="pants" /> - <texture_picker label="Kurtka" name="jacket" /> - <texture_picker label="Spódnica" name="baked_skirt" /> - <texture_picker label="Spódnica" name="skirt_texture" /> + <button label="Zrzuć" label_selected="Zrzuć" name="Dump"/> + <scroll_container name="profile_scroll"> + <panel name="scroll_content_panel"> + <texture_picker label="Włosy" name="hair-baked"/> + <texture_picker label="Włosy" name="hair_grain"/> + <texture_picker label="Alpha włosów" name="hair_alpha"/> + <texture_picker label="Głowa" name="head-baked"/> + <texture_picker label="Makijaż" name="head_bodypaint"/> + <texture_picker label="Alpha głowy" name="head_alpha"/> + <texture_picker label="Tatuaż głowy" name="head_tattoo"/> + <texture_picker label="Oczy" name="eyes-baked"/> + <texture_picker label="Oko" name="eyes_iris"/> + <texture_picker label="Alpha oczu" name="eyes_alpha"/> + <texture_picker label="Górna część ciała" name="upper-baked"/> + <texture_picker label="Górny wzór na ciele" name="upper_bodypaint"/> + <texture_picker label="Podkoszulek" name="upper_undershirt"/> + <texture_picker label="Rękawiczki" name="upper_gloves"/> + <texture_picker label="Koszula" name="upper_shirt"/> + <texture_picker label="Kurtka górna" name="upper_jacket"/> + <texture_picker label="Alpha górna" name="upper_alpha"/> + <texture_picker label="Tatuaż górny" name="upper_tattoo"/> + <texture_picker label="Dolna część ciała" name="lower-baked"/> + <texture_picker label="Dolny wzór na ciele" name="lower_bodypaint"/> + <texture_picker label="Bielizna" name="lower_underpants"/> + <texture_picker label="Skarpetki" name="lower_socks"/> + <texture_picker label="Buty" name="lower_shoes"/> + <texture_picker label="Spodnie" name="lower_pants"/> + <texture_picker label="Kurtka" name="lower_jacket"/> + <texture_picker label="Alpha dolna" name="lower_alpha"/> + <texture_picker label="Tatuaż dolny" name="lower_tattoo"/> + <texture_picker label="Spódnica" name="skirt-baked"/> + <texture_picker label="Spódnica" name="skirt"/> + </panel> + </scroll_container> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_beacons.xml b/indra/newview/skins/default/xui/pl/floater_beacons.xml index 6e7013f2d7..547db2b351 100644 --- a/indra/newview/skins/default/xui/pl/floater_beacons.xml +++ b/indra/newview/skins/default/xui/pl/floater_beacons.xml @@ -1,15 +1,21 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="beacons" title="EMITERY"> <panel name="beacons_panel"> - <check_box label="Obiekty Dotykalne" name="touch_only"/> - <check_box label="Obiekty Skryptowane" name="scripted"/> - <check_box label="Obiekty Fizyczne" name="physical"/> - <check_box label="Źródła Dźwięku" name="sounds"/> - <check_box label="Źródła Cząsteczek" name="particles"/> - <check_box label="Podkreśl Emitery" name="highlights"/> - <check_box label="Pokaż Emitery" name="beacons"/> - <text name="beacon_width_label"> - Zasięg Emiterów: + <text name="label_show"> + Pokaż emitery: </text> + <check_box label="Emitery" name="beacons"/> + <check_box label="Podkreśl emitery" name="highlights"/> + <text name="beacon_width_label" tool_tip="Zasięg emiterów"> + Szer. + </text> + <text name="label_objects"> + Dla tych obiektów: + </text> + <check_box label="Obiekty fizyczne" name="physical"/> + <check_box label="Obiekty skryptowane" name="scripted"/> + <check_box label="Obiekty dotykalne" name="touch_only"/> + <check_box label="Źródła dźwięku" name="sounds"/> + <check_box label="Źródła cząsteczek" name="particles"/> </panel> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_build_options.xml b/indra/newview/skins/default/xui/pl/floater_build_options.xml index f538be218c..5d296aa725 100644 --- a/indra/newview/skins/default/xui/pl/floater_build_options.xml +++ b/indra/newview/skins/default/xui/pl/floater_build_options.xml @@ -1,8 +1,11 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="build options floater" title="OPCJE SIATKI"> - <spinner label="Jednostka Siatki (metry)" name="GridResolution" /> - <spinner label="Rozmiary Siatki (metry)" name="GridDrawSize" /> - <check_box label="Udostępnij Podjednostkowe Dopasowywanie" name="GridSubUnit" /> - <check_box label="Pokaż Sekcje Skośne" name="GridCrossSection" /> - <slider label="Nieprzezroczystość Siatki" name="GridOpacity" /> + <spinner label="Jednostki siatki (metery)" name="GridResolution"/> + <spinner label="Rozmiary siatki (metry)" name="GridDrawSize"/> + <check_box label="Pokaż podjednostki" name="GridSubUnit"/> + <check_box label="Pokaż przekroje" name="GridCrossSection"/> + <text name="grid_opacity_label" tool_tip="Nieprzeźroczystość siatki:"> + Nieprzeźroczystość: + </text> + <slider label="Nieprzezroczystość siatki" name="GridOpacity"/> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_bulk_perms.xml b/indra/newview/skins/default/xui/pl/floater_bulk_perms.xml index f06615642e..f4721b05d8 100644 --- a/indra/newview/skins/default/xui/pl/floater_bulk_perms.xml +++ b/indra/newview/skins/default/xui/pl/floater_bulk_perms.xml @@ -1,44 +1,54 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floaterbulkperms" title="HURTOWA ZMIANA PRAW ZAWARTOŚCI"> - <text name="applyto"> - Rodzaj Zawartości - </text> + <floater.string name="nothing_to_modify_text"> + Selekcja zawiera zawartość niemodfyfikowalną + </floater.string> + <floater.string name="status_text"> + Ustawienie praw na [NAME] + </floater.string> + <floater.string name="start_text"> + Rozpoczęcie prośby o zmianę praw... + </floater.string> + <floater.string name="done_text"> + Zakończenie prośby o zmianę praw. + </floater.string> <check_box label="Animacje" name="check_animation"/> - <check_box label="Części Ciała" name="check_bodypart"/> + <icon name="icon_animation" tool_tip="Animacja"/> + <check_box label="Części ciała" name="check_bodypart"/> + <icon name="icon_bodypart" tool_tip="Części Ciała"/> <check_box label="Ubranie" name="check_clothing"/> + <icon name="icon_clothing" tool_tip="Ubranie"/> <check_box label="Gestury" name="check_gesture"/> - <check_box label="Zapamiętane Miejsca" name="check_landmark"/> + <icon name="icon_gesture" tool_tip="Gestury"/> <check_box label="Noty" name="check_notecard"/> + <icon name="icon_notecard" tool_tip="Noty"/> <check_box label="Obiekty" name="check_object"/> + <icon name="icon_object" tool_tip="Obiekty"/> <check_box label="Skrypty" name="check_script"/> + <icon name="icon_script" tool_tip="Skrypty"/> <check_box label="Dźwięki" name="check_sound"/> + <icon name="icon_sound" tool_tip="Dźwięki"/> <check_box label="Tekstury" name="check_texture"/> - <button width="115" font="SansSerifSmall" label="Wybierz Wszystkie" label_selected="Wszystkie" name="check_all"/> - <button width="115" font="SansSerifSmall" label="Odznacz Wszystkie" label_selected="Żadne" name="check_none"/> + <icon name="icon_texture" tool_tip="Tekstury"/> + <button font="SansSerifSmall" label="√ Wszystkie" label_selected="Wszystkie" name="check_all" width="115"/> + <button font="SansSerifSmall" label="Żadne" label_selected="Żadne" name="check_none" width="115"/> <text name="newperms"> - Nowe Prawa + Nowe prawa zawartości + </text> + <text name="GroupLabel"> + Grupa: </text> - <check_box label="Udostępnij Grupie" name="share_with_group"/> - <check_box label="Pozwól kopiować każdemu" name="everyone_copy"/> + <check_box label="Udostępnij" name="share_with_group"/> + <text name="AnyoneLabel"> + Każdy: + </text> + <check_box label="Kopiuj" name="everyone_copy"/> <text name="NextOwnerLabel"> Następny Właściciel: </text> <check_box label="Modyfikuje" name="next_owner_modify"/> <check_box label="Kopiuje" name="next_owner_copy"/> - <check_box label="Oddaje/Sprzedaje" name="next_owner_transfer"/> - <button label="Pomoc" name="help"/> - <button label="Zastosuj" name="apply"/> - <button label="Zamknij" name="close"/> - <string name="nothing_to_modify_text"> - Selekcja zawiera zawartość niemodfyfikowalną - </string> - <string name="status_text"> - Ustawienie praw na [NAME] - </string> - <string name="start_text"> - Rozpoczęcie prośby o zmianę praw... - </string> - <string name="done_text"> - Zakończenie prośby o zmianę praw. - </string> + <check_box initial_value="true" label="Oddaj/Sprzedaj" name="next_owner_transfer" tool_tip="Następny właściciel może oddać lub sprzedać ten obiekt."/> + <button label="OK" name="apply"/> + <button label="Anuluj" name="close"/> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_bumps.xml b/indra/newview/skins/default/xui/pl/floater_bumps.xml index 10f9d73284..1f1b29a83e 100644 --- a/indra/newview/skins/default/xui/pl/floater_bumps.xml +++ b/indra/newview/skins/default/xui/pl/floater_bumps.xml @@ -1,21 +1,24 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater_bumps" title="ZDERZENIA, POPCHNIĘCIA, UDERZENIA"> - <string name="none_detected"> + <floater.string name="none_detected"> Brak - </string> - <string name="bump"> + </floater.string> + <floater.string name="bump"> [TIME] [FIRST] [LAST] awatar zderzył się z Tobą - </string> - <string name="llpushobject"> + </floater.string> + <floater.string name="llpushobject"> [TIME] [FIRST] [LAST] awatar popchnął Cię swoim skryptem - </string> - <string name="selected_object_collide"> + </floater.string> + <floater.string name="selected_object_collide"> [TIME] [FIRST] [LAST] awatar uderzył Cię swoim obiektem - </string> - <string name="scripted_object_collide"> + </floater.string> + <floater.string name="scripted_object_collide"> [TIME] [FIRST] [LAST] awatar uderzył Cię swoim skryptowanym obiektem - </string> - <string name="physical_object_collide"> + </floater.string> + <floater.string name="physical_object_collide"> [TIME] [FIRST] [LAST] awatar uderzył Cię swoim fizycznym obiektem - </string> + </floater.string> + <floater.string name="timeStr"> + [[hour,datetime,slt]:[min,datetime,slt]] + </floater.string> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_buy_contents.xml b/indra/newview/skins/default/xui/pl/floater_buy_contents.xml index ebe1c9dfd8..94f2b50450 100644 --- a/indra/newview/skins/default/xui/pl/floater_buy_contents.xml +++ b/indra/newview/skins/default/xui/pl/floater_buy_contents.xml @@ -1,14 +1,14 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater_buy_contents" title="KUP ZAWARTOŚĆ"> <text name="contains_text"> [NAME] zawiera: </text> <text name="buy_text"> - Kupić za L$[AMOUNT] od [NAME]? + Kupić za [AMOUNT]L$ od [NAME]? </text> - <button label="Anuluj" label_selected="Anuluj" name="cancel_btn" /> - <button label="Kup" label_selected="Kup" name="buy_btn" /> - <check_box label="Załóż ubrania teraz" name="wear_check" /> + <button label="Anuluj" label_selected="Anuluj" name="cancel_btn"/> + <button label="Kup" label_selected="Kup" name="buy_btn"/> + <check_box label="Załóż ubrania teraz" name="wear_check"/> <string name="no_copy_text"> (bez prawa kopiowania) </string> diff --git a/indra/newview/skins/default/xui/pl/floater_buy_currency.xml b/indra/newview/skins/default/xui/pl/floater_buy_currency.xml index 5e59482883..f2a6579dc3 100644 --- a/indra/newview/skins/default/xui/pl/floater_buy_currency.xml +++ b/indra/newview/skins/default/xui/pl/floater_buy_currency.xml @@ -1,50 +1,43 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="buy currency" title="KUP $L"> - <text name="info_buying"> - Kup L$: - </text> - <text name="info_cannot_buy"> - Brak możliwości zakupu L$ teraz: - </text> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="buy currency" title="KUP L$"> + <floater.string name="buy_currency"> + Kup [LINDENS] L$ za [LOCALAMOUNT] + </floater.string> <text name="info_need_more"> - Potrzebujesz wiecęj L$: + Potrzebujesz więcej L$ </text> - <text name="error_message"> - Pojawienie się błędu. - </text> - <button label="Idź do strony internetowej" name="error_web" width="168"/> <text name="contacting"> Kontaktowanie z LindeX... </text> - <text name="buy_action_unknown"> - Kup L$ w systemie walutowej wymiany LindeX + <text name="info_buying"> + Kup L$ </text> - <text name="buy_action"> - [NAME] [PRICE]L$ + <text name="balance_label"> + Obecnie posiadasz + </text> + <text name="balance_amount"> + [AMT]L$ </text> <text name="currency_action"> Kup </text> - <line_editor name="currency_amt" left_delta="32"> + <text name="currency_label"> + L$ + </text> + <line_editor label="L$" left_delta="32" name="currency_amt"> 1234 </line_editor> + <text name="buying_label"> + Cena + </text> <text name="currency_est"> za [LOCALAMOUNT] </text> <text name="getting_data"> - Otrzymywanie danych... + Kalkulowanie... </text> - <text name="balance_label"> - Obecnie posiadasz - </text> - <text name="balance_amount"> - [AMT]L$ - </text> - <text name="buying_label"> - Kupujesz - </text> - <text name="buying_amount"> - [AMT]L$ + <text name="buy_action"> + [ACTION] </text> <text name="total_label"> Twój nowy stan konta @@ -52,18 +45,22 @@ <text name="total_amount"> [AMT]L$ </text> - <text name="purchase_warning_repurchase" height="48" bottom_delta="-64" right="-10"> - Dokonując potwierdzenia na podaną transakcję, -wyrażasz zgodę jedynie na zakup waluty. -Sprobuj wykonać operację ponownie. + <text name="currency_links"> + [http://www.secondlife.com/my/account/payment_method_management.php metoda płatności] | [http://www.secondlife.com/my/account/currency.php waluta] | [http://www.secondlife.com/my/account/exchange_rates.php kurs wymiany] + </text> + <text name="exchange_rate_note"> + Wpisz ponownie kwotę aby zobaczyć ostatni kurs wymiany. </text> - <text name="purchase_warning_notenough" bottom_delta="16"> - Nie zakupujesz wystarczającej ilości waluty. -Proszę zwiększyć ilość. + <text bottom_delta="-64" height="48" name="purchase_warning_repurchase" right="-10"> + Potwierdzasz zakup L$, nie obiektu. + </text> + <text bottom_delta="16" name="purchase_warning_notenough"> + Nie zakupiono wystarczającej ilości L$. Proszę zwiększyć kwotę. + </text> + <button label="Kup teraz" name="buy_btn"/> + <button label="Anuluj" name="cancel_btn"/> + <text name="info_cannot_buy"> + Nie można kupić </text> - <button label="Anuluj" name="cancel_btn" /> - <button label="Kup" name="buy_btn" /> - <string name="buy_currency"> - Kup [LINDENS]L$ za [LOCALAMOUNT] - </string> + <button label="Przejdź na stronę WWW" name="error_web" width="168"/> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_buy_land.xml b/indra/newview/skins/default/xui/pl/floater_buy_land.xml index 648888828b..3d01129d9b 100644 --- a/indra/newview/skins/default/xui/pl/floater_buy_land.xml +++ b/indra/newview/skins/default/xui/pl/floater_buy_land.xml @@ -1,5 +1,133 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="buy land" title="BUY LAND"> +<floater name="buy land" title="KUP POSIADŁOŚĆ"> + <floater.string name="can_resell"> + Może być odsprzedana. + </floater.string> + <floater.string name="can_not_resell"> + Nie może być odsprzedana. + </floater.string> + <floater.string name="can_change"> + Mogą być łączone i dzielone. + </floater.string> + <floater.string name="can_not_change"> + Nie mogą być łączone ani dzielone. + </floater.string> + <floater.string name="cant_buy_for_group"> + Nie masz pozwolenia na zakup Posiadłości dla Twojej aktywnej Grupy. + </floater.string> + <floater.string name="no_land_selected"> + Obszar nie jest wybrany. + </floater.string> + <floater.string name="multiple_parcels_selected"> + Wybrałeś wiele różnych Posiadłości. +Spróbuj wybrać mniejszy obszar. + </floater.string> + <floater.string name="no_permission"> + Nie masz pozwolenia na zakup Posiadłości dla Twojej aktywnej Grupy. + </floater.string> + <floater.string name="parcel_not_for_sale"> + Wybrana Posiadłość nie jest na sprzedaż. + </floater.string> + <floater.string name="group_already_owns"> + Ta Posiadłość już należy do Grupy. + </floater.string> + <floater.string name="you_already_own"> + Ta Posiadłość już należy do Ciebie. + </floater.string> + <floater.string name="set_to_sell_to_other"> + Wybrana Posiadłość będzie sprzedana komuś innemu. + </floater.string> + <floater.string name="no_public_land"> + Wybrany obszar nie ma publicznych Posiadłości. + </floater.string> + <floater.string name="not_owned_by_you"> + Wybrałeś Posiadłość, której Właścicielem jest inny Rezydent. +Spróbuj wybrać ponownie mniejszą powierzchnię Posiadłości. + </floater.string> + <floater.string name="processing"> + Przetwarzanie Twojego zakupu... + +(Może zająć kilka minut) + </floater.string> + <floater.string name="fetching_error"> + Błąd podczas wczytywania informacji zakupu Posiadłości. + </floater.string> + <floater.string name="buying_will"> + Zakup tej Posiadłości spowoduje: + </floater.string> + <floater.string name="buying_for_group"> + Zakup ziemi dla Grupy: + </floater.string> + <floater.string name="cannot_buy_now"> + Nie możesz teraz kupić: + </floater.string> + <floater.string name="not_for_sale"> + Nie jest na sprzedaż: + </floater.string> + <floater.string name="none_needed"> + Poprawność danych. + </floater.string> + <floater.string name="must_upgrade"> + Musisz mieć konto Premium żebyś mógł mieć Posiadłości. + </floater.string> + <floater.string name="cant_own_land"> + Twoje konto pozwala Ci mieć Posiadłości. + </floater.string> + <floater.string name="land_holdings"> + Jesteś właścicielem [BUYER] m² ziemi. + </floater.string> + <floater.string name="pay_to_for_land"> + Zapłać [SELLER] [AMOUNT]L$ za Posiadłość + </floater.string> + <floater.string name="buy_for_US"> + Kup L$ [AMOUNT] za [LOCAL_AMOUNT], + </floater.string> + <floater.string name="parcel_meters"> + Podana posiadłość to [AMOUNT] m² ziemi. + </floater.string> + <floater.string name="premium_land"> + Podana posiadłość jest w cenie premium adekwatnie jak za [AMOUNT] m². + </floater.string> + <floater.string name="discounted_land"> + Wybrana posiadłość jest w cenie zniżkowej adekwatnie jak za [AMOUNT] m². + </floater.string> + <floater.string name="meters_supports_object"> + [AMOUNT] m² +wspiera [AMOUNT2] obiektów + </floater.string> + <floater.string name="sold_with_objects"> + sprzedane z obiektami + </floater.string> + <floater.string name="sold_without_objects"> + obiekty nie są zawarte w sprzedaży + </floater.string> + <floater.string name="info_price_string"> + L$ [PRICE] +(L$ [PRICE_PER_SQM]/m²) +[SOLD_WITH_OBJECTS] + </floater.string> + <floater.string name="insufficient_land_credits"> + Grupa [GROUP] musi mieć wystarczający kredyt na +używanie Posiadłości żeby sfinalizować ten zakup. + </floater.string> + <floater.string name="have_enough_lindens"> + Masz [AMOUNT]L$ co wystarcza na zakup tej Posiadłości. + </floater.string> + <floater.string name="not_enough_lindens"> + Masz tylko [AMOUNT]L$ i potrzebujesz [AMOUNT2]L$ dodatkowo. + </floater.string> + <floater.string name="balance_left"> + Po zakupie zostanie Ci [AMOUNT]L$. + </floater.string> + <floater.string name="balance_needed"> + Musisz dokupić [AMOUNT]L$ żeby kupić tą Posiadłość. + </floater.string> + <floater.string name="no_parcel_selected"> + (Posiadłość nie została wybrana) + </floater.string> + <floater.string name="icon_PG" value="Parcel_PG_Dark"/> + <floater.string name="icon_M" value="Parcel_M_Dark"/> + <floater.string name="icon_R" value="Parcel_R_Dark"/> <text name="region_name_label"> Region: </text> @@ -74,9 +202,9 @@ sprzedaż z obiektami Tylko członkowie z kontem Premium mogą mieć Posiadłosci. </text> <combo_box name="account_level"> - <combo_box.item name="US$9.95/month,billedmonthly" label="9.95US$/miesiąc, płatne miesięcznie" /> - <combo_box.item name="US$7.50/month,billedquarterly" label="7.50US$/miesiąc, płatne kwartalnie" /> - <combo_box.item name="US$6.00/month,billedannually" label="6.00US$/miesiąc, płatne rocznie" /> + <combo_box.item label="US$9.95/miesięcznie, naliczane miesięcznie" name="US$9.95/month,billedmonthly"/> + <combo_box.item label="US$7.50/miesięcznie, naliczane kwartalnie" name="US$7.50/month,billedquarterly"/> + <combo_box.item label="US$6.00/miesięcznie, naliczane rocznie" name="US$6.00/month,billedannually"/> </combo_box> <text name="land_use_action"> Zwiększ opłatę za używanie Posiadłości do 40US$/miesiąc. @@ -98,140 +226,12 @@ Posiadłość ta zawiera 512 m² ziemi. 1000 </line_editor> <text name="currency_est"> - za około [AMOUNT2]US$ + za [LOCAL_AMOUNT] </text> <text name="currency_balance"> Masz 2,100L$. </text> - <check_box label="Zabierz [AMOUNT] metrów donacji z Grupy." name="remove_contribution"/> + <check_box label="Usuń [AMOUNT] m² z kontrybucji w grupie." name="remove_contribution"/> <button label="Zakup" name="buy_btn"/> <button label="Anuluj" name="cancel_btn"/> - <string name="can_resell"> - Może być odsprzedana. - </string> - <string name="can_not_resell"> - Nie może być odsprzedana. - </string> - <string name="can_change"> - Mogą być łączone i dzielone. - </string> - <string name="can_not_change"> - Nie mogą być łączone ani dzielone. - </string> - <string name="cant_buy_for_group"> - Nie masz pozwolenia na zakup Posiadłości dla Twojej aktywnej Grupy. - </string> - <string name="no_land_selected"> - Obszar nie jest wybrany. - </string> - <string name="multiple_parcels_selected"> - Wybrałeś wiele różnych Posiadłości. -Spróbuj wybrać mniejszy obszar. - </string> - <string name="no_permission"> - Nie masz pozwolenia na zakup Posiadłości dla Twojej aktywnej Grupy. - </string> - <string name="parcel_not_for_sale"> - Wybrana Posiadłość nie jest na sprzedaż. - </string> - <string name="group_already_owns"> - Ta Posiadłość już należy do Grupy. - </string> - <string name="you_already_own"> - Ta Posiadłość już należy do Ciebie. - </string> - <string name="set_to_sell_to_other"> - Wybrana Posiadłość będzie sprzedana komu innemu. - </string> - <string name="no_public_land"> - Wybrany obszar nie ma publicznych Posiadłości. - </string> - <string name="not_owned_by_you"> - Wybrana Posiadłość należy do kogoś innego. -Spróbuj wybrać inny obszar. - </string> - <string name="processing"> - Przetwarzanie Twojego zakupu... - -(Może zająć kilka minut) - </string> - <string name="fetching_error"> - Błąd podczas wczytywania informacji zakupu Posiadłości. - </string> - <string name="buying_will"> - Zakup tej Posiadłości spowoduje: - </string> - <string name="buying_for_group"> - Zakup ziemi dla grupy: - </string> - <string name="cannot_buy_now"> - Nie możesz teraz kupić: - </string> - <string name="not_for_sale"> - Nie jest na sprzedaż: - </string> - <string name="none_needed"> - Poprawność danych. - </string> - <string name="must_upgrade"> - Musisz mieć konto Premium żebyś mógł mieć Posiadłości. - </string> - <string name="cant_own_land"> - Twoje konto pozwala Ci mieć Posiadłości. - </string> - <string name="land_holdings"> - Jesteś właścicielem [BUYER] m² ziemi. - </string> - <string name="pay_to_for_land"> - Zapłać [SELLER] [AMOUNT]L$ za Posiadłość - </string> - <string name="buy_for_US"> - Kup L$ [AMOUNT] za US$ [AMOUNT2], - </string> - <string name="parcel_meters"> - Podana posiadłość to [AMOUNT] m² ziemi. - </string> - <string name="premium_land"> - Podana posiadłość jest w cenie premium adekwatnie jak za [AMOUNT] m². - </string> - <string name="discounted_land"> - Wybrana posiadłość jest w cenie zniżkowej adekwatnie jak za [AMOUNT] m². - </string> - <string name="meters_supports_object"> - [AMOUNT] m² -wspiera [AMOUNT2] obiektów - </string> - <string name="sold_with_objects"> - sprzedane z obiektami - </string> - <string name="sold_without_objects"> - obiekty nie są zawarte w sprzedaży - </string> - <string name="info_price_string"> - L$ [PRICE] -(L$ [PRICE_PER_SQM]/m²) -[SOLD_WITH_OBJECTS] - </string> - <string name="insufficient_land_credits"> - Grupa [GROUP] musi mieć wystarczający kredyt na -używanie Posiadłości żeby sfinalizować ten zakup. - </string> - <string name="have_enough_lindens"> - Masz [AMOUNT]L$ co wystarcza na zakup tej Posiadłości. - </string> - <string name="not_enough_lindens"> - Masz tylko [AMOUNT]L$ i potrzebujesz [AMOUNT2]L$ dodatkowo. - </string> - <string name="balance_left"> - Po zakupie zostanie Ci [AMOUNT]L$. - </string> - <string name="balance_needed"> - Musisz dokupić [AMOUNT]L$ żeby kupić tą Posiadłość. - </string> - <string name="no_parcel_selected"> - (Posiadłość nie wybrana) - </string> - <string name="buy_currency"> - Kup [LINDENS]L$ za około [USD]US$ - </string> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_buy_object.xml b/indra/newview/skins/default/xui/pl/floater_buy_object.xml index bad7982228..7958ed76a1 100644 --- a/indra/newview/skins/default/xui/pl/floater_buy_object.xml +++ b/indra/newview/skins/default/xui/pl/floater_buy_object.xml @@ -1,13 +1,13 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="contents" title="KUP KOPIĘ OBIEKTU"> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="contents" title="KUP KOPIĘ"> <text name="contents_text"> - i jej zawartość: + i jej zawartość </text> <text name="buy_text"> Kupić za [AMOUNT]L$ od [NAME]? </text> - <button label="Anuluj" label_selected="Anuluj" name="cancel_btn" /> - <button label="Kup" label_selected="Kup" name="buy_btn" /> + <button label="Anuluj" label_selected="Anuluj" name="cancel_btn"/> + <button label="Kup" label_selected="Kup" name="buy_btn"/> <string name="title_buy_text"> Kup </string> diff --git a/indra/newview/skins/default/xui/pl/floater_camera.xml b/indra/newview/skins/default/xui/pl/floater_camera.xml index 95d82a3f9c..aec75f026f 100644 --- a/indra/newview/skins/default/xui/pl/floater_camera.xml +++ b/indra/newview/skins/default/xui/pl/floater_camera.xml @@ -9,6 +9,18 @@ <floater.string name="move_tooltip"> Poruszaj kamerą w dół/górę oraz w prawo/lewo </floater.string> + <floater.string name="orbit_mode_title"> + Obracaj + </floater.string> + <floater.string name="pan_mode_title"> + W prawo lub w lewo + </floater.string> + <floater.string name="avatar_view_mode_title"> + Ustawienia + </floater.string> + <floater.string name="free_mode_title"> + Zobacz obiekt + </floater.string> <panel name="controls"> <joystick_track name="cam_track_stick" tool_tip="Poruszaj kamerą w górę, w dół, w lewo i w prawo"/> <panel name="zoom" tool_tip="Najedź kamerą w kierunku obiektu"> @@ -16,16 +28,16 @@ </panel> <joystick_rotate name="cam_rotate_stick" tool_tip="Obracaj kamerę wokoł osi"/> <panel name="camera_presets"> - <button name="rear_view" tool_tip="Widok z Tyłu"/> + <button name="rear_view" tool_tip="Widok z tyłu"/> <button name="group_view" tool_tip="Podgląd Grupy"/> - <button name="front_view" tool_tip="Widok z Przodu"/> - <button name="mouselook_view" tool_tip="Widok Panoramiczny"/> + <button name="front_view" tool_tip="Widok z przodu"/> + <button name="mouselook_view" tool_tip="Widok panoramiczny"/> </panel> </panel> <panel name="buttons"> - <button label="" name="orbit_btn" tool_tip="Obracaj Kamerę"/> - <button label="" name="pan_btn" tool_tip="Kamera Horyzontalna"/> - <button label="" name="avatarview_btn" tool_tip="Widok Awatara"/> - <button label="" name="freecamera_btn" tool_tip="Podgląd Obiektu"/> + <button label="" name="orbit_btn" tool_tip="Obracaj kamerę"/> + <button label="" name="pan_btn" tool_tip="Kamera horyzontalna"/> + <button label="" name="avatarview_btn" tool_tip="Ustawienia"/> + <button label="" name="freecamera_btn" tool_tip="Podgląd obiektu"/> </panel> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_choose_group.xml b/indra/newview/skins/default/xui/pl/floater_choose_group.xml index 72b6617094..877cedc0bc 100644 --- a/indra/newview/skins/default/xui/pl/floater_choose_group.xml +++ b/indra/newview/skins/default/xui/pl/floater_choose_group.xml @@ -1,8 +1,8 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="groups" title="GRUPY"> <text name="groupdesc"> - Wybierz grupę: + Wybierz Grupę: </text> - <button label="OK" label_selected="OK" name="OK" /> - <button label="Anuluj" label_selected="Anuluj" name="Cancel" /> + <button label="OK" label_selected="OK" name="OK"/> + <button label="Anuluj" label_selected="Anuluj" name="Cancel"/> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_color_picker.xml b/indra/newview/skins/default/xui/pl/floater_color_picker.xml index 7bbdc35f94..a607ca982f 100644 --- a/indra/newview/skins/default/xui/pl/floater_color_picker.xml +++ b/indra/newview/skins/default/xui/pl/floater_color_picker.xml @@ -21,11 +21,11 @@ <check_box label="Zastosuj teraz" name="apply_immediate"/> <button label="" label_selected="" name="color_pipette"/> <button label="Anuluj" label_selected="Anuluj" name="cancel_btn"/> - <button label="Ok" label_selected="Ok" name="select_btn"/> + <button label="OK" label_selected="OK" name="select_btn"/> <text name="Current color:"> - Obecny Kolor: + Obecny kolor: </text> <text name="(Drag below to save.)"> - (Przeciągnij tutaj by zapisać) + (Przeciągnij tutaj aby zapisać) </text> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_customize.xml b/indra/newview/skins/default/xui/pl/floater_customize.xml index 0c01d15faf..dd1d5cf684 100644 --- a/indra/newview/skins/default/xui/pl/floater_customize.xml +++ b/indra/newview/skins/default/xui/pl/floater_customize.xml @@ -1,7 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater customize" title="WYGLĄD"> <tab_container name="customize tab container"> - <placeholder label="Części Ciała" name="body_parts_placeholder"/> + <text label="Części Ciała" name="body_parts_placeholder"> + Części ciała + </text> <panel label="Kształt" name="Shape"> <button label="Wróć" label_selected="Wróć" name="Revert"/> <button label="Ciało" label_selected="Ciało" name="Body"/> @@ -14,8 +16,8 @@ <button label="Tułów" label_selected="Tułów" name="Torso"/> <button label="Nogi" label_selected="Nogi" name="Legs"/> <radio_group name="sex radio"> - <radio_item name="radio" label="Kobieta"/> - <radio_item name="radio2" label="Mężczyzna"/> + <radio_item label="Kobieta" name="radio" value="0"/> + <radio_item label="Mężczyzna" name="radio2" value="1"/> </radio_group> <text name="title"> [DESC] @@ -33,9 +35,7 @@ Zapisane w [PATH] </text> <text name="not worn instructions"> - Załóż nowy kształt poprzez przeciągnięcie go ze swojej szafy -na awatara. Alternatywnie, możesz także stworzyć własny kształt -z plików roboczych. + Załóż nowy kształt poprzez przeciągnięcie go ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własny kształt z plików roboczych. </text> <text name="no modify instructions"> Nie posiadasz prawa do modyfikowania tego kształtu. @@ -43,15 +43,15 @@ z plików roboczych. <text name="Item Action Label"> Kształt: </text> - <button label="Nowy Kształt" label_selected="Nowy Kształt" name="Create New"/> + <button label="Nowy kształt" label_selected="Nowy kształt" name="Create New"/> <button label="Zapisz" label_selected="Zapisz" name="Save"/> - <button label="Zapisz Jako..." label_selected="Zapisz Jako..." name="Save As"/> + <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/> </panel> <panel label="Skórka" name="Skin"> - <button label="Kolor Skórki" label_selected="Kolor Skórki" name="Skin Color"/> - <button label="Detale Twarzy" label_selected="Detale Twarzy" name="Face Detail"/> + <button label="Kolor skórki" label_selected="Kolor skórki" name="Skin Color"/> + <button label="Detale twarzy" label_selected="Detale twarzy" name="Face Detail"/> <button label="Makijaż" label_selected="Makijaż" name="Makeup"/> - <button label="Detale Ciała" label_selected="Detale Ciała" name="Body Detail"/> + <button label="Detale ciała" label_selected="Detale ciała" name="Body Detail"/> <text name="title"> [DESC] </text> @@ -68,9 +68,7 @@ z plików roboczych. Zapisane w [PATH] </text> <text name="not worn instructions"> - Załóż nową skórkę poprzez przeciągnięcie jej ze swojej szafy -na awatara. Alternatywnie, możesz także stworzyć własną skórkę -z plików roboczych. + Załóż nową skórkę poprzez przeciągnięcie jej ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własną skórkę z plików roboczych. </text> <text name="no modify instructions"> Nie posiadasz prawa do modyfikowania tej skórki. @@ -78,12 +76,12 @@ z plików roboczych. <text name="Item Action Label"> Skórka: </text> - <texture_picker label="Tatuaże Głowy" name="Head Tattoos" tool_tip="Kliknij by wybrać teksturę"/> - <texture_picker label="Tatuaże Górne" name="Upper Tattoos" tool_tip="Kliknij by wybrać teksturę"/> - <texture_picker label="Tatuaże Dolne" name="Lower Tattoos" tool_tip="Kliknij by wybrać teksturę"/> - <button label="Nowa Skórka" label_selected="Nowa Skórka" name="Create New"/> + <texture_picker label="Tatuaże głowy" name="Head Tattoos" tool_tip="Kliknij by wybrać teksturę"/> + <texture_picker label="Tatuaże górne" name="Upper Tattoos" tool_tip="Kliknij by wybrać teksturę"/> + <texture_picker label="Tatuaże dolne" name="Lower Tattoos" tool_tip="Kliknij by wybrać teksturę"/> + <button label="Nowa skórka" label_selected="Nowa skórka" name="Create New"/> <button label="Zapisz" label_selected="Zapisz" name="Save"/> - <button label="Zapisz Jako..." label_selected="Zapisz Jako..." name="Save As"/> + <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/> <button label="Wróć" label_selected="Wróć" name="Revert"/> </panel> <panel label="Włosy" name="Hair"> @@ -107,9 +105,7 @@ z plików roboczych. Zapisane w [PATH] </text> <text name="not worn instructions"> - Załóż nowe włosy poprzez przeciągnięcie ich ze swojej szafy -na awatara. Alternatywnie, możesz także stworzyć własne włosy -z plików roboczych. + Załóż nowe włosy poprzez przeciągnięcie ich ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własne włosy z plików roboczych. </text> <text name="no modify instructions"> Nie posiadasz prawa do modyfikowania tych włosów. @@ -118,9 +114,9 @@ z plików roboczych. Włosy: </text> <texture_picker label="Tekstura" name="Texture" tool_tip="Kliknij by wybrać teksturę"/> - <button label="Nowe Włosy" label_selected="Nowe Włosy" name="Create New"/> + <button label="Nowe włosy" label_selected="Nowe włosy" name="Create New"/> <button label="Zapisz" label_selected="Zapisz" name="Save"/> - <button label="Zapisz Jako..." label_selected="Zapisz Jako..." name="Save As"/> + <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/> <button label="Wróć" label_selected="Wróć" name="Revert"/> </panel> <panel label="Oczy" name="Eyes"> @@ -140,9 +136,7 @@ z plików roboczych. Zapisane w [PATH] </text> <text name="not worn instructions"> - Załóż nowe oczy poprzez przeciągnięcie ich ze swojej szafy -na awatara. Alternatywnie, możesz także stworzyć własne oczy -z plików roboczych. + Załóż nowe oczy poprzez przeciągnięcie ich ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własne oczy z plików roboczych. </text> <text name="no modify instructions"> Nie posiadasz prawa do modyfikowania tych oczów. @@ -151,19 +145,21 @@ z plików roboczych. Oczy: </text> <texture_picker label="Tęczówka" name="Iris" tool_tip="Kliknij by wybrać teksturę"/> - <button label="Nowe Oczy" label_selected="Nowe Oczy" name="Create New"/> + <button label="Nowe oczy" label_selected="Nowe oczy" name="Create New"/> <button label="Zapisz" label_selected="Zapisz" name="Save"/> - <button label="Zapisz Jako..." label_selected="Zapisz Jako..." name="Save As"/> + <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/> <button label="Wróć" label_selected="Wróć" name="Revert"/> </panel> - <panel label="Ubrania" name="clothes_placeholder"/> + <text label="Ubrania" name="clothes_placeholder"> + Ubrania + </text> <panel label="Koszula" name="Shirt"> <texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij by wybrać teksturę"/> - <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij by wybrać kolor"/> - <button label="Nowa Koszula" label_selected="Nowa Koszula" name="Create New"/> + <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/> <button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/> + <button label="Nowa Koszula" label_selected="Nowa Koszula" name="Create New"/> <button label="Zapisz" label_selected="Zapisz" name="Save"/> - <button label="Zapisz Jako..." label_selected="Zapisz Jako..." name="Save As"/> + <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/> <button label="Wróć" label_selected="Wróć" name="Revert"/> <text name="title"> [DESC] @@ -181,9 +177,7 @@ z plików roboczych. Zapisane w [PATH] </text> <text name="not worn instructions"> - Załóż nową koszulę poprzez przeciągnięcie jej ze swojej szafy -na awatara. Alternatywnie, możesz także stworzyć własną koszulę -z plików roboczych. + Załóż nową koszulę poprzez przeciągnięcie jej ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własną koszulę z plików roboczych. </text> <text name="no modify instructions"> Nie posiadasz prawa do modyfikowania tej koszuli. @@ -194,11 +188,11 @@ z plików roboczych. </panel> <panel label="Spodnie" name="Pants"> <texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij tutaj by wybrać teksturę"/> - <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij by wybrać kolor"/> - <button label="Nowe Spodnie" label_selected="Nowe Spodnie" name="Create New"/> + <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/> <button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/> + <button label="Nowe spodnie" label_selected="Nowe spodnie" name="Create New"/> <button label="Zapisz" label_selected="Zapisz" name="Save"/> - <button label="Zapisz Jako..." label_selected="Zapisz Jako..." name="Save As"/> + <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/> <button label="Wróć" label_selected="Wróć" name="Revert"/> <text name="title"> [DESC] @@ -216,9 +210,7 @@ z plików roboczych. Zapisane w [PATH] </text> <text name="not worn instructions"> - Załóż nowe spodnie poprzez przeciągnięcie ich ze swojej szafy -na awatara. Alternatywnie, możesz także stworzyć własne spodnie -z plików roboczych. + Załóż nowe spodnie poprzez przeciągnięcie ich ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własne spodnie z plików roboczych. </text> <text name="no modify instructions"> Nie posiadasz prawa do modyfikowania tych spodni. @@ -244,10 +236,9 @@ z plików roboczych. Zapisane w [PATH] </text> <text name="not worn instructions"> - Załóż nowe buty poprzez przeciągnięcie ich ze swojej szafy -na awatara. Alternatywnie, możesz także stworzyć własne buty -z plików roboczych. + Załóż nowe buty poprzez przeciągnięcie ich ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własne buty z plików roboczych. </text> + <button label="Nowe Buty" label_selected="Nowe Buty" name="Create New"/> <text name="no modify instructions"> Nie posiadasz prawa do modyfikowania tych butów. </text> @@ -255,11 +246,10 @@ z plików roboczych. Buty: </text> <texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij by wybrać teksturę"/> - <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij by wybrać kolor"/> - <button label="Nowe Buty" label_selected="Nowe Buty" name="Create New"/> + <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/> <button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/> <button label="Zapisz" label_selected="Zapisz" name="Save"/> - <button label="Zapisz Jako..." label_selected="Zapisz Jako..." name="Save As"/> + <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/> <button label="Wróć" label_selected="Wróć" name="Revert"/> </panel> <panel label="Skarpety" name="Socks"> @@ -279,10 +269,9 @@ z plików roboczych. Zapisane w [PATH] </text> <text name="not worn instructions"> - Załóż nowe skarpety poprzez przeciągnięcie ich ze swojej szafy -na awatara. Alternatywnie, możesz także stworzyć własne skarpety -z plików roboczych. + Załóż nowe skarpety poprzez przeciągnięcie ich ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własne skarpety z plików roboczych. </text> + <button label="Nowe Skarpety" label_selected="Nowe Skarpety" name="Create New"/> <text name="no modify instructions"> Nie posiadasz prawa do modyfikowania tych skarpet. </text> @@ -290,11 +279,10 @@ z plików roboczych. Skarpetki: </text> <texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij by wybrać teksturę"/> - <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij by wybrać kolor"/> - <button label="Nowe Skarpety" label_selected="Nowe Skarpety" name="Create New"/> + <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/> <button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/> <button label="Zapisz" label_selected="Zapisz" name="Save"/> - <button label="Zapisz Jako..." label_selected="Zapisz Jako..." name="Save As"/> + <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/> <button label="Wróć" label_selected="Wróć" name="Revert"/> </panel> <panel label="Kurtka" name="Jacket"> @@ -314,23 +302,21 @@ z plików roboczych. Zapisane w [PATH] </text> <text name="not worn instructions"> - Załóż nową kurtkę poprzez przeciągnięcie jej ze swojej szafy -na awatara. Alternatywnie, możesz także stworzyć własną kurtkę -z plików roboczych. + Załóż nową kurtkę poprzez przeciągnięcie jej ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własną kurtkę z plików roboczych. </text> + <button label="Nowa Kurtka" label_selected="Nowa Kurtka" name="Create New"/> <text name="no modify instructions"> Nie posiadasz prawa do modyfikowania tej kurtki. </text> <text name="Item Action Label"> Kurtka: </text> - <texture_picker label="Górny Materiał" name="Upper Fabric" tool_tip="Kliknij by wybrać teksturę" width="76"/> - <texture_picker label="Dolny Materiał" name="Lower Fabric" tool_tip="Kliknij by wybrać kolor" width="76"/> - <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij by wybrać kolor" width="76"/> - <button label="Nowa Kurtka" label_selected="Nowa Kurtka" name="Create New"/> + <texture_picker label="Górny materiał" name="Upper Fabric" tool_tip="Kliknij by wybrać teksturę" width="76"/> + <texture_picker label="Dolny materiał" name="Lower Fabric" tool_tip="Kliknij by wybrać kolor" width="76"/> + <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor" width="76"/> <button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/> <button label="Zapisz" label_selected="Zapisz" name="Save"/> - <button label="Zapisz Jako..." label_selected="Zapisz Jako..." name="Save As"/> + <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/> <button label="Wróć" label_selected="Wróć" name="Revert"/> </panel> <panel label="Rękawiczki" name="Gloves"> @@ -350,10 +336,9 @@ z plików roboczych. Zapisane w [PATH] </text> <text name="not worn instructions"> - Załóż nowe rękawiczki poprzez przeciągnięcie ich ze swojej szafy -na awatara. Alternatywnie, możesz także stworzyć własne rękawiczki -z plików roboczych. + Załóż nowe rękawiczki poprzez przeciągnięcie ich ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własne rękawiczki z plików roboczych. </text> + <button label="Nowe Rękawiczki" label_selected="Nowe Rękawiczki" name="Create New"/> <text name="no modify instructions"> Nie posiadasz prawa do modyfikowania tych rękawiczek </text> @@ -361,11 +346,10 @@ z plików roboczych. Rękawiczki: </text> <texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij by wybrać teksturę"/> - <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij by wybrać kolor"/> - <button label="Nowe Rękawiczki" label_selected="Nowe Rękawiczki" name="Create New"/> + <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/> <button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/> <button label="Zapisz" label_selected="Zapisz" name="Save"/> - <button label="Zapisz Jako..." label_selected="Zapisz Jako..." name="Save As"/> + <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/> <button label="Wróć" label_selected="Wróć" name="Revert"/> </panel> <panel label="Podkoszulek" name="Undershirt"> @@ -385,10 +369,9 @@ z plików roboczych. Zapisane w [PATH] </text> <text name="not worn instructions"> - Załóż nowy podkoszulek poprzez przeciągnięcie ich ze swojej szafy -na awatara. Alternatywnie, możesz także stworzyć własny podkoszulek -z plików roboczych. + Załóż nowy podkoszulek poprzez przeciągnięcie ich ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własny podkoszulek z plików roboczych. </text> + <button label="Nowy Podkoszulek" label_selected="Nowy Podkoszulek" name="Create New"/> <text name="no modify instructions"> Nie posiadasz prawa do modyfikowania tego podkoszulka. </text> @@ -396,11 +379,10 @@ z plików roboczych. Podkoszulka: </text> <texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij by wybrać teksturę"/> - <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij by wybrać kolor"/> - <button label="Nowy Podkoszulek" label_selected="Nowy Podkoszulek" name="Create New"/> + <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/> <button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/> <button label="Zapisz" label_selected="Zapisz" name="Save"/> - <button label="Zapisz Jako..." label_selected="Zapisz Jako..." name="Save As"/> + <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/> <button label="Wróć" label_selected="Wróć" name="Revert"/> </panel> <panel label="Bielizna" name="Underpants"> @@ -420,10 +402,9 @@ z plików roboczych. Zapisane w [PATH] </text> <text name="not worn instructions"> - Załóż nową bieliznę poprzez przeciągnięcie jej ze swojej szafy -na awatara. Alternatywnie, możesz także stworzyć własną bieliznę -z plików roboczych. + Załóż nową bieliznę poprzez przeciągnięcie jej ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własną bieliznę z plików roboczych. </text> + <button label="Nowa Bielizna" label_selected="Nowa Bielizna" name="Create New"/> <text name="no modify instructions"> Nie posiadasz prawa do modyfikowania tej bielizny. </text> @@ -431,11 +412,10 @@ z plików roboczych. Bielizna: </text> <texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij by wybrać teksturę"/> - <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij by wybrać kolor"/> - <button label="Nowa Bielizna" label_selected="Nowa Bielizna" name="Create New"/> + <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/> <button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/> <button label="Zapisz" label_selected="Zapisz" name="Save"/> - <button label="Zapisz Jako..." label_selected="Zapisz Jako..." name="Save As"/> + <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/> <button label="Wróć" label_selected="Wróć" name="Revert"/> </panel> <panel label="Spódnica" name="Skirt"> @@ -455,10 +435,9 @@ z plików roboczych. Zapisane w [PATH] </text> <text name="not worn instructions"> - Załóż nową spódnicę poprzez przeciągnięcie jej ze swojej szafy -na awatara. Alternatywnie, możesz także stworzyć własną spódnicę -z plików roboczych. + Załóż nową spódnicę poprzez przeciągnięcie jej ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własną spódnicę z plików roboczych. </text> + <button label="Nowa Spódnica" label_selected="Nowa Spódnica" name="Create New"/> <text name="no modify instructions"> Nie posiadasz prawa do modyfikowania tej spódnicy. </text> @@ -466,15 +445,85 @@ z plików roboczych. Spódnica: </text> <texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij by wybrać teksturę"/> - <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij by wybrać kolor"/> - <button label="Nowa Spódnica" label_selected="Nowa Spódnica" name="Create New"/> + <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/> + <button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/> + <button label="Zapisz" label_selected="Zapisz" name="Save"/> + <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/> + <button label="Wróć" label_selected="Wróć" name="Revert"/> + </panel> + <panel label="Tatuaż" name="Tattoo"> + <text name="title"> + [DESC] + </text> + <text name="title_no_modify"> + [DESC]: nie można modyfikować + </text> + <text name="title_loading"> + [DESC]: ładowanie... + </text> + <text name="title_not_worn"> + [DESC]: nienałożone + </text> + <text name="path"> + Zapisane w [PATH] + </text> + <text name="not worn instructions"> + Załóż nowy tatuaż poprzez przeciągnięcie go ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własny tatuaż z plików roboczych. + </text> + <button label="Utwórz Nowy Tatuaż" label_selected="Stwórz Nowy Tatuaż" name="Create New"/> + <text name="no modify instructions"> + Nie posiadasz uprawnień do modyfikowania tych ubrań/części ciała. + </text> + <text name="Item Action Label"> + Tatuaż: + </text> + <texture_picker label="Tatuaż głowy" name="Head Tattoo" tool_tip="Kliknij aby wybrać teksturę"/> + <texture_picker label="Górny tatuaż" name="Upper Tattoo" tool_tip="Kliknij aby wybrać teksturę"/> + <texture_picker label="Tatuaż dolnej części ciała" name="Lower Tattoo" tool_tip="Kliknij aby wybrać teksturę"/> + <button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/> + <button label="Zapisz" label_selected="Zapisz" name="Save"/> + <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/> + <button label="Wróć" label_selected="Wróć" name="Revert"/> + </panel> + <panel label="Alpha" name="Alpha"> + <text name="title"> + [DESC] + </text> + <text name="title_no_modify"> + [DESC]: nie można modyfikować + </text> + <text name="title_loading"> + [DESC]: ładowanie... + </text> + <text name="title_not_worn"> + [DESC]: nienałożone + </text> + <text name="path"> + Zapisane w [PATH] + </text> + <text name="not worn instructions"> + Załóż nową maskę alpha poprzez przeciągnięcie jej ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własną z plików roboczych. + </text> + <button label="Stwórz nową Alpha" label_selected="Utwórz Nową Alpha" name="Create New"/> + <text name="no modify instructions"> + Nie posiadasz uprawnień do modyfikowania tych ubrań/części ciała. + </text> + <text name="Item Action Label"> + Alpha: + </text> + <texture_picker label="Dolna Alpha" name="Lower Alpha" tool_tip="Kliknij aby wybrać teksturę"/> + <texture_picker label="Alpha górnej części ciała" name="Upper Alpha" tool_tip="Kliknij aby wybrać teksturę"/> + <texture_picker label="Alpha głowy" name="Head Alpha" tool_tip="Kliknij aby wybrać teksturę"/> + <texture_picker label="Alpha oka" name="Eye Alpha" tool_tip="Kliknij aby wybrać teksturę"/> + <texture_picker label="Alpha włosów" name="Hair Alpha" tool_tip="Kliknij aby wybrać teksturę"/> <button label="Zdejmij" label_selected="Zdejmij" name="Take Off"/> <button label="Zapisz" label_selected="Zapisz" name="Save"/> - <button label="Zapisz Jako..." label_selected="Zapisz Jako..." name="Save As"/> + <button label="Zapisz jako..." label_selected="Zapisz jako..." name="Save As"/> <button label="Wróć" label_selected="Wróć" name="Revert"/> </panel> </tab_container> + <button label="Info o skrypcie" label_selected="Info o skrypcie" name="script_info" tool_tip="Pokaż skrypty przyłączone do Twojego awatara"/> + <button label="Stwórz ubranie" label_selected="Stwórz Ubranie" name="make_outfit_btn"/> <button label="Anuluj" label_selected="Anuluj" name="Cancel"/> <button label="OK" label_selected="OK" name="Ok"/> - <button label="Stwórz Ubranie..." label_selected="Stwórz Ubranie..." name="Make Outfit" width="115"/> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/pl/floater_day_cycle_options.xml index 6671bb853e..0cb2114f99 100644 --- a/indra/newview/skins/default/xui/pl/floater_day_cycle_options.xml +++ b/indra/newview/skins/default/xui/pl/floater_day_cycle_options.xml @@ -62,7 +62,7 @@ <button label="Dodaj" label_selected="Dodaj" name="WLAddKey" /> <button label="Usuń" label_selected="Usuń" name="WLDeleteKey" /> <text name="WLCurKeyFrameText"> - Preferencje Czasu: + Preferencje czasu: </text> <text name="WLCurKeyTimeText"> Czas: @@ -78,7 +78,7 @@ </text> <combo_box label="5 min" name="WLSnapOptions" /> <text name="DayCycleText2"> - Długość Cyklu: + Długość cyklu: </text> <spinner label="Godz" name="WLLengthOfDayHour" /> <spinner label="Min" name="WLLengthOfDayMin" /> @@ -88,11 +88,11 @@ </text> <button label="Start" label_selected="Start" name="WLAnimSky" /> <button label="Stop" label_selected="Stop" name="WLStopAnimSky" /> - <button label="Używaj Czasu Regionu" label_selected="Używaj Czasu Regionu" + <button label="Używaj czasu regionu" label_selected="Używaj czasu regionu" name="WLUseLindenTime" /> - <button label="Zapisz Test Dnia" label_selected="Zapisz Test Dnia" + <button label="Zapisz test dnia" label_selected="Zapisz test dnia" name="WLSaveDayCycle" /> - <button label="Załaduj Test Dnia" label_selected="Załaduj Test Dnia" + <button label="Załaduj test dnia" label_selected="Załaduj test dnia" name="WLLoadDayCycle" /> </panel> </tab_container> diff --git a/indra/newview/skins/default/xui/pl/floater_device_settings.xml b/indra/newview/skins/default/xui/pl/floater_device_settings.xml index e79478731d..c485fb2e29 100644 --- a/indra/newview/skins/default/xui/pl/floater_device_settings.xml +++ b/indra/newview/skins/default/xui/pl/floater_device_settings.xml @@ -1,3 +1,2 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="floater_device_settings" - title="USTAWIENIA URZĄDZEŃ KOMUNIKACJI GŁOSOWEJ" /> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_device_settings" title="USTAWIENIA URZĄDZEŃ KOMUNIKACJI GŁOSOWEJ"/> diff --git a/indra/newview/skins/default/xui/pl/floater_env_settings.xml b/indra/newview/skins/default/xui/pl/floater_env_settings.xml index e197d94b27..3ab854fbbb 100644 --- a/indra/newview/skins/default/xui/pl/floater_env_settings.xml +++ b/indra/newview/skins/default/xui/pl/floater_env_settings.xml @@ -1,26 +1,28 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="Environment Editor Floater" title="EDYTOR ŚRODOWISKA"> + <floater.string name="timeStr"> + [hour12,datetime,utc]:[min,datetime,utc] [ampm,datetime,utc] + </floater.string> <text name="EnvTimeText"> Czas </text> <text name="EnvTimeText2"> 12:00 PM </text> - <slider label="" name="EnvTimeSlider" /> + <slider label="" name="EnvTimeSlider"/> <text name="EnvCloudText"> Chmury: </text> - <slider label="" name="EnvCloudSlider" /> + <slider label="" name="EnvCloudSlider"/> <text name="EnvWaterColorText"> - Kolor Wody + Kolor wody </text> - <color_swatch label="" name="EnvWaterColor" tool_tip="Kliknij by wybrać kolor" /> + <color_swatch label="" name="EnvWaterColor" tool_tip="Kliknij aby wybrać kolor"/> <text name="EnvWaterFogText"> Zamglenie: </text> - <slider label="" name="EnvWaterFogSlider" /> - <button label="Używaj Czasu Regionu" name="EnvUseEstateTimeButton" /> - <button label="Zaawansowane Niebo" name="EnvAdvancedSkyButton" /> - <button label="Zaawansowana Woda" name="EnvAdvancedWaterButton" /> - <button label="?" name="EnvSettingsHelpButton" /> + <slider label="" name="EnvWaterFogSlider"/> + <button label="Używaj czasu regionu" name="EnvUseEstateTimeButton"/> + <button label="Zaawansowane niebo" name="EnvAdvancedSkyButton"/> + <button label="Zaawansowana woda" name="EnvAdvancedWaterButton"/> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_event.xml b/indra/newview/skins/default/xui/pl/floater_event.xml new file mode 100644 index 0000000000..7588493464 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/floater_event.xml @@ -0,0 +1,72 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater label="IMPREZA" name="Event" title="IMPREZA"> + <floater.string name="none"> + żadne + </floater.string> + <floater.string name="notify"> + Zawiadom + </floater.string> + <floater.string name="dont_notify"> + Nie zawiadamiaj + </floater.string> + <floater.string name="moderate"> + Mature + </floater.string> + <floater.string name="adult"> + Adult + </floater.string> + <floater.string name="general"> + PG + </floater.string> + <floater.string name="unknown"> + Nieznana + </floater.string> + <layout_stack name="layout"> + <layout_panel name="profile_stack"> + <text name="event_name"> + Brak nazwy dla wydarzenia. + </text> + <text name="event_category"> + (bez kategorii) + </text> + <text name="event_runby_label"> + Prowadzona przez: + </text> + <text initial_value="(przetwarzanie)" name="event_runby"/> + <text name="event_date_label"> + Data: + </text> + <text name="event_date"> + 10/10/2010 + </text> + <text name="event_duration_label"> + Długość: + </text> + <text name="event_duration"> + 1 godzina + </text> + <text name="event_covercharge_label"> + Opłata: + </text> + <text name="event_cover"> + Bez opłaty + </text> + <text name="event_location_label"> + Lokalizacja: + </text> + <text name="event_location" value="SampleParcel, Name Long (145, 228, 26)"/> + <text name="rating_label" value="Rodzaj:"/> + <text name="rating_value" value="nieznane"/> + <expandable_text name="event_desc"> + Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + </expandable_text> + </layout_panel> + <layout_panel name="button_panel"> + <button name="create_event_btn" tool_tip="Stwórz Imprezę"/> + <button name="god_delete_event_btn" tool_tip="Skasuj Imprezę"/> + <button label="Zawiadom mnie" name="notify_btn"/> + <button label="Teleportuj" name="teleport_btn"/> + <button label="Mapa" name="map_btn"/> + </layout_panel> + </layout_stack> +</floater> diff --git a/indra/newview/skins/default/xui/pl/floater_gesture.xml b/indra/newview/skins/default/xui/pl/floater_gesture.xml index 4685eb6afe..750a9e4a66 100644 --- a/indra/newview/skins/default/xui/pl/floater_gesture.xml +++ b/indra/newview/skins/default/xui/pl/floater_gesture.xml @@ -1,16 +1,27 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="gestures" title="AKTYWNE GESTY"> - <text name="help_label"> - Kliknij podwójnie by aktywować głos i animację gestu. - </text> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater label="Miejsca" name="gestures" title="GESTY"> + <floater.string name="loading"> + Ładowanie... + </floater.string> + <floater.string name="playing"> + (Odtwarzanie) + </floater.string> + <floater.string name="copy_name"> + Kopia [COPY_NAME] + </floater.string> <scroll_list name="gesture_list"> - <column label="Aktywuj" name="trigger" /> - <column label="Klucz" name="shortcut" /> - <column label="" name="key" /> - <column label="Nazwa" name="name" /> + <scroll_list.columns label="Nazwa" name="name"/> + <scroll_list.columns label="Czat" name="trigger"/> + <scroll_list.columns label="" name="key"/> + <scroll_list.columns label="Klucz" name="shortcut"/> </scroll_list> - <button label="Nowy" name="new_gesture_btn" /> - <button label="Edytuj" name="edit_btn" /> - <button label="Odtwarzaj" name="play_btn" /> - <button label="Zatrzymaj" name="stop_btn" /> + <panel label="bottom_panel" name="bottom_panel"> + <menu_button name="gear_btn" tool_tip="Więcej opcji"/> + <button name="new_gesture_btn" tool_tip="Stwórz nową gesturę"/> + <button name="activate_btn" tool_tip="Aktywuj/Dezaktywuj wybrany gest"/> + <button name="del_btn" tool_tip="Usuń gest"/> + </panel> + <button label="Edytuj" name="edit_btn"/> + <button label="Odtwarzaj" name="play_btn"/> + <button label="Zatrzymaj" name="stop_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_god_tools.xml b/indra/newview/skins/default/xui/pl/floater_god_tools.xml index a3ccffac03..4d49c32fc1 100644 --- a/indra/newview/skins/default/xui/pl/floater_god_tools.xml +++ b/indra/newview/skins/default/xui/pl/floater_god_tools.xml @@ -2,26 +2,25 @@ <floater name="godtools floater" title="BOSKIE NARZĘDZIA"> <tab_container name="GodTools Tabs"> <panel label="Grid" name="grid"> - <button width="205" label="Usuń wszystkich użytkowników" label_selected="Usuń wszystkich użytkowników" name="Kick all users"/> - <button width="285" label="Wyrównaj Widoczność Buforu Mapy Regionu" label_selected="Wyrównaj Widoczność Buforu Mapy Regionu" name="Flush This Region's Map Visibility Caches"/> + <button label="Wyrzuć wszystkich Rezydentów" label_selected="Wyrzuć wszystkich Rezydentów" name="Kick all users" width="205"/> + <button label="Wyrównaj widoczność buforu mapy Regionu" label_selected="Wyrównaj widoczność buforu mapy Regionu" name="Flush This Region's Map Visibility Caches" width="285"/> </panel> <panel label="Region" name="region"> <text name="Sim Name:" width="100"> Nazwa Symulatora: </text> - <line_editor left="115" name="region name" width="178" /> - <line_editor name="region name"/> - <check_box label="Wstęp" name="check prelude" /> + <line_editor left="115" name="region name" width="178"/> + <check_box label="Wstęp" name="check prelude" tool_tip="Set this to make the region a prelude"/> <check_box label="Korekta Słońca" name="check fixed sun" tool_tip="Skorektuj ustawienia pozycji słońca."/> - <check_box height="32" label="Zresetuj Pozycję Miejsca Startowego" name="check reset home" /> - <check_box bottom_delta="-32" label="Widoczny" name="check visible" tool_tip="Wybierz tę opcję by ustawić region widocznym dla wszystkich."/> + <check_box height="32" label="Zresetuj pozycję Miejsca Startowego" name="check reset home" tool_tip="Zresetuj miejsce startu Rezydentów po teleportacji"/> + <check_box bottom_delta="-32" label="Widoczny" name="check visible" tool_tip="Wybierz tą opcję by ustawić region widocznym dla wszystkich."/> <check_box label="Zniszczenia" name="check damage" tool_tip="Wybierz tę opcję by uruchomić opcję zniszczeń w regionie."/> - <check_box label="Zablokuj Monitorowanie Trafficu" name="block dwell" tool_tip="Wybierz tę opcję by zablokować monitorowanie trafficu w regionie."/> - <check_box label="Zablokuj Terraformowanie" name="block terraform" tool_tip="Wybierz tę opcję by zablokować terraforming w regionie"/> - <check_box label="Piaskownica" name="is sandbox" /> - <button width="138" label="Ustal Teren" label_selected="Ustal Teren" name="Bake Terrain" tool_tip="Zapamiętaj obecny teren jako początkowy dla cofnięcia modyfikacji terenu."/> - <button width="138" label="Cofnięcie Modyfikacji" label_selected="Cofnięcie Modyfikacji" name="Revert Terrain" tool_tip="Przywróć Ustawienia Domyślne Regionu."/> - <button width="138" label="Zamień Teren" label_selected="Zamień Teren" name="Swap Terrain" /> + <check_box label="Zablokuj Monitorowanie Trafficu" name="block dwell" tool_tip="Wybierz tą opcję by zablokować monitorowanie trafficu w regionie."/> + <check_box label="Zablokuj Terraformowanie" name="block terraform" tool_tip="Wybierz tą opcję by zablokować terraforming w regionie"/> + <check_box label="Piaskownica" name="is sandbox" tool_tip="Toggle whether this is a sandbox region"/> + <button label="Ustal teren" label_selected="Ustal teren" name="Bake Terrain" tool_tip="Zapamiętaj obecny teren jako początkowy dla cofnięcia modyfikacji terenu." width="138"/> + <button label="Cofnięcie modyfikacji" label_selected="Cofnięcie modyfikacji" name="Revert Terrain" tool_tip="Przywróć ustawienia domyślne Regionu." width="138"/> + <button label="Zamień teren" label_selected="Zamień teren" name="Swap Terrain" tool_tip="Swap current terrain with default" width="138"/> <text name="estate id"> ID Regionu: </text> @@ -33,46 +32,46 @@ <text name="Grid Pos: "> Pozycje Gridu: </text> - <line_editor name="gridposx" tool_tip="Pozycja x gridu dla regionu" left_delta="110" width="35" /> - <line_editor name="gridposy" tool_tip="Pozycja y gridu dla regionu" left_delta="45" width="35" /> + <line_editor left_delta="110" name="gridposx" tool_tip="Pozycja x gridu dla regionu" width="35"/> + <line_editor left_delta="45" name="gridposy" tool_tip="Pozycja y gridu dla regionu" width="35"/> <text name="Redirect to Grid: "> Przełącz do gridu: </text> - <line_editor left_delta="110" name="redirectx" width="35" /> - <line_editor left_delta="45" name="redirecty" width="35" /> - <spinner name="billable factor"/> + <line_editor left_delta="110" name="redirectx" width="35"/> + <line_editor left_delta="45" name="redirecty" width="35"/> <text name="billable factor text"> - Czynnik Płatności: + Czynnik płatności: </text> - <spinner name="land cost"/> + <spinner name="billable factor"/> <text name="land cost text"> L$/m²: </text> - <button label="Odśwież" label_selected="Odśwież" name="Refresh" /> - <button label="Zastosuj" label_selected="Zastosuj" name="Apply" /> - <button width="150" left="156" label="Wybierz Region" label_selected="Wybierz Region" name="Select Region" tool_tip="Wybierz cały region za pomocą narzędzi edycji terenu"/> - <button width="150" left="156" label="Automatyczne Zapisanie" label_selected="Automatyczne Zapisanie" name="Autosave now" /> + <spinner name="land cost"/> + <button label="Odśwież" label_selected="Odśwież" name="Refresh" tool_tip="Click here to refresh the above information"/> + <button label="Zastosuj" label_selected="Zastosuj" name="Apply" tool_tip="Click here to apply any changes from above"/> + <button label="Wybierz Region" label_selected="Wybierz Region" left="156" name="Select Region" tool_tip="Wybierz cały Region za pomocą narzędzi edycji terenu" width="150"/> + <button label="Automatyczne zapisanie" label_selected="Automatyczne zapisanie" left="156" name="Autosave now" tool_tip="Save gzipped state to autosave directory" width="150"/> </panel> <panel label="Obiekty" name="objects"> <text name="Sim Name:" width="105"> Nazwa Symulatora: </text> - <text name="region name" left_delta="110"> + <text left_delta="110" name="region name"> Welsh </text> - <check_box label="Wyłącz Skrypty" name="disable scripts" /> - <check_box label="Deaktywuj Kolizje" name="disable collisions" /> - <check_box label="Wylącz Fizykę" name="disable physics" /> - <button label="Zastosuj" label_selected="Zastosuj" name="Apply" /> - <button label="Ustaw Cel" label_selected="Set Target" name="Set Target" /> + <check_box label="Wyłącz skrypty" name="disable scripts" tool_tip="Set this to disable all scripts in this region"/> + <check_box label="Deaktywuj kolizje" name="disable collisions" tool_tip="Set this to disable non-agent collisions in this region"/> + <check_box label="Wylącz fizykę" name="disable physics" tool_tip="Set this to disable all physics in this region"/> + <button label="Zastosuj" label_selected="Zastosuj" name="Apply" tool_tip="Click here to apply any changes from above"/> + <button label="Ustaw Cel" label_selected="Set Target" name="Set Target" tool_tip="Set the target avatar for object deletion"/> <text name="target_avatar_name"> (brak) </text> - <button label="Usuń cel z oskryptowanych obiektów na innych posiadłościach" label_selected="Usuń cel 's skryptowane obiekty na innych posiadłościach" name="Delete Target's Scripted Objects On Others Land" /> - <button label="Usuń cel z oskryptowanych obiektów na jakichkolwiek posiadłościach" label_selected="Usuń cel 's skryptowane obiekty na jakichkolwiek posiadłościach" name="Delete Target's Scripted Objects On *Any* Land" /> - <button label="Usuń wszystkie cele i obiekty" label_selected="Usuń wszystkie cele i obiekty" name="Delete *ALL* Of Target's Objects" /> - <button label="Główne Kolizje" label_selected="Główne Kolizje" name="Get Top Colliders" /> - <button label="Główne Skrypty" label_selected="Główne Skrypty" name="Get Top Scripts" /> + <button label="Usuń cel z oskryptowanych obiektów na innych posiadłościach" label_selected="Usuń cel 's skryptowane obiekty na innych posiadłościach" name="Delete Target's Scripted Objects On Others Land" tool_tip="Delete all scripted objects owned by the target on land not owned by the target. (no copy) objects will be returned."/> + <button label="Usuń cel z oskryptowanych obiektów na jakichkolwiek posiadłościach" label_selected="Usuń cel 's skryptowane obiekty na jakichkolwiek posiadłościach" name="Delete Target's Scripted Objects On *Any* Land" tool_tip="Delete all scripted objects owned by the target in this region. (no copy) objects will be returned."/> + <button label="Usuń wszystkie cele i obiekty" label_selected="Usuń wszystkie cele i obiekty" name="Delete *ALL* Of Target's Objects" tool_tip="Delete all objects owned by the target in this region. (no copy) objects will be returned."/> + <button label="Główne kolizje" label_selected="Główne kolizje" name="Get Top Colliders" tool_tip="Gets list of objects experiencing the most narrowphase callbacks"/> + <button label="Główne skrypty" label_selected="Główne skrypty" name="Get Top Scripts" tool_tip="Gets list of objects spending the most time running scripts"/> <button label="Treść skryptów" label_selected="Treść skryptów" name="Scripts digest" tool_tip="Wyświetla listę wszystkich skryptów i liczbę ich zastosowań."/> </panel> <panel label="Zażądaj" name="request"> @@ -80,17 +79,17 @@ Cel: </text> <combo_box name="destination"> - <combo_box.item name="item1" label="Selekcja" /> - <combo_box.item name="item2" label="Agent Regionu" /> + <combo_box.item label="Selekcja" name="item1"/> + <combo_box.item label="Agent Regionu" name="item2"/> </combo_box> <text name="Request:"> Żądanie: </text> <combo_box name="request"> - <combo_box.item name="item1" label="kolidery <kroki>" /> - <combo_box.item name="item2" label="skrypty <policz>,<opcjonalnie powtórzenie>" /> - <combo_box.item name="item3" label="obiekty <powtórzenia>" /> - <combo_box.item name="item4" label="rez <asset_id>" /> + <combo_box.item label="kolidery <kroki>" name="item1"/> + <combo_box.item label="skrypty <policz>,<opcjonalnie powtórzenie>" name="item2"/> + <combo_box.item label="obiekty <powtórzenia>" name="item3"/> + <combo_box.item label="rez <asset_id>" name="item4"/> </combo_box> <text name="Parameter:"> Parameter: diff --git a/indra/newview/skins/default/xui/pl/floater_hardware_settings.xml b/indra/newview/skins/default/xui/pl/floater_hardware_settings.xml index 39695a67b6..bd5dd7e7d2 100644 --- a/indra/newview/skins/default/xui/pl/floater_hardware_settings.xml +++ b/indra/newview/skins/default/xui/pl/floater_hardware_settings.xml @@ -1,28 +1,28 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="Hardware Settings Floater" title="USTAWIENIA SPRZĘTOWE"> <text name="Filtering:"> Filtrowanie: </text> - <check_box label="Filtrowanie Anizotropowe" name="ani" /> + <check_box label="Filtr anizotropowy" name="ani"/> <text name="Antialiasing:"> - Antialiasing: + Antyaliasing: </text> <combo_box label="Antialiasing" name="fsaa" width="84"> - <combo_box.item name="FSAADisabled" label="Wyłączone" /> - <combo_box.item name="2x" label="2x" /> - <combo_box.item name="4x" label="4x" /> - <combo_box.item name="8x" label="8x" /> - <combo_box.item name="16x" label="16x" /> + <combo_box.item label="Wyłączone" name="FSAADisabled"/> + <combo_box.item label="2x" name="2x"/> + <combo_box.item label="4x" name="4x"/> + <combo_box.item label="8x" name="8x"/> + <combo_box.item label="16x" name="16x"/> </combo_box> - <spinner label="Gamma:" name="gamma" /> + <spinner label="Gamma:" name="gamma"/> <text name="(brightness, lower is brighter)"> - (jaskrawość, mniej jest jaśniej, 0=domyślny) + (0=domyślna jaskrawość, niższa wartość=jaśniej) </text> <text name="Enable VBO:"> Włącz VBO: </text> - <check_box label="Włącz Bufor Vertexów OpenGL" name="vbo" tool_tip="" /> - <slider label="Pamięć Tekstur (MB):" name="GrapicsCardTextureMemory" tool_tip="" /> - <spinner label="Stosunek Dystansu Mgły:" name="fog" /> - <button label="OK" label_selected="OK" name="OK" /> + <check_box initial_value="true" label="Włącz rozszerzenie OpenGL" name="vbo" tool_tip=""/> + <slider label="Pamięć na tekstury (MB):" name="GraphicsCardTextureMemory" tool_tip="Ilość alokacji pamięci dla tekstur. Domyślne dla karty pamięci video. Obniżenie poziomu tych funkcji może polepszyć wydajność systemową jednak spowoduje zmniejszenie jakości i wyrazistości tekstur."/> + <spinner label="Stosunek dystansu mgły:" name="fog"/> + <button label="OK" label_selected="OK" name="OK"/> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_help_browser.xml b/indra/newview/skins/default/xui/pl/floater_help_browser.xml new file mode 100644 index 0000000000..dfd5f907e5 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/floater_help_browser.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_help_browser" title="PRZEGLĄDARKA POMOCY"> + <floater.string name="loading_text"> + Ładowanie... + </floater.string> + <layout_stack name="stack1"> + <layout_panel name="external_controls"/> + </layout_stack> +</floater> diff --git a/indra/newview/skins/default/xui/pl/floater_im.xml b/indra/newview/skins/default/xui/pl/floater_im.xml index 67c9d13496..e40935ccb7 100644 --- a/indra/newview/skins/default/xui/pl/floater_im.xml +++ b/indra/newview/skins/default/xui/pl/floater_im.xml @@ -1,7 +1,7 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <multi_floater name="im_floater" title="Wiadomość (IM)"> <string name="only_user_message"> - Jesteś jedyną osobą w tej konferencji. + Jesteś jedynym uczestnikiem tej konferencji. </string> <string name="offline_message"> [FIRST] [LAST] - ta osoba jest obecnie niedostępna. @@ -10,7 +10,7 @@ Kliknij na [BUTTON NAME] przycisk by zaakceptować/dołączyć do tej rozmowy. </string> <string name="muted_message"> - Ten Rezydent jest przez Ciebie wyciszony. Wysyłanie wiadomości automatycznie wyłączy tryb wyciszenia. + Zablokowałeś tego Rezydenta. Wysłanie wiadomości automatycznie odblokuje go. </string> <string name="generic_request_error"> Błąd. Spróbuj ponownie za kilka minut. @@ -31,7 +31,7 @@ Moderator wyciszył Cię. </string> <string name="add_session_event"> - Nie można dodać nikogo do czatu z [RECIPIENT]. + Niemożliwość dodania Rezydentów do tej konferencji z [RECIPIENT]. </string> <string name="message_session_event"> Nie można wysłać Twojej wiadomości do sesji czatu z [RECIPIENT]. diff --git a/indra/newview/skins/default/xui/pl/floater_im_container.xml b/indra/newview/skins/default/xui/pl/floater_im_container.xml new file mode 100644 index 0000000000..ddf0790fa8 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/floater_im_container.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<multi_floater name="floater_im_box" title="ROZMOWY"/> diff --git a/indra/newview/skins/default/xui/pl/floater_im_session.xml b/indra/newview/skins/default/xui/pl/floater_im_session.xml index f4dd7d00e1..db513f787c 100644 --- a/indra/newview/skins/default/xui/pl/floater_im_session.xml +++ b/indra/newview/skins/default/xui/pl/floater_im_session.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="panel_im"> <layout_stack name="im_panels"> - <layout_panel label="Panel Kontroli Wiadomości Prywatnej (IM)" name="panel_im_control_panel"/> + <layout_panel label="Panel kontroli wiadomości prywatnej (IM)" name="panel_im_control_panel"/> <layout_panel> <line_editor label="Do" name="chat_editor"/> </layout_panel> diff --git a/indra/newview/skins/default/xui/pl/floater_image_preview.xml b/indra/newview/skins/default/xui/pl/floater_image_preview.xml index 27f898a66b..a27e8ffed3 100644 --- a/indra/newview/skins/default/xui/pl/floater_image_preview.xml +++ b/indra/newview/skins/default/xui/pl/floater_image_preview.xml @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="Image Preview" title=""> <text name="name_label"> Nazwa: @@ -10,23 +10,23 @@ Wyświetl obraz jako: </text> <combo_box label="Rodzaj Ubrania" name="clothing_type_combo"> - <combo_box.item name="Image" label="Obraz" /> - <combo_box.item name="Hair" label="Włosy" /> - <combo_box.item name="FemaleHead" label="Damska Głowa" /> - <combo_box.item name="FemaleUpperBody" label="Damska Górna Część Ciała" /> - <combo_box.item name="FemaleLowerBody" label="Damska Górna Część Ciała" /> - <combo_box.item name="MaleHead" label="Męska Głowa" /> - <combo_box.item name="MaleUpperBody" label="Męska Górna Część Ciała" /> - <combo_box.item name="MaleLowerBody" label="Męska Dolna Część Ciała" /> - <combo_box.item name="Skirt" label="Spódnica" /> - <combo_box.item name="SculptedPrim" label="Sculpt" /> + <combo_box.item label="Obraz" name="Image"/> + <combo_box.item label="Włosy" name="Hair"/> + <combo_box.item label="Damska głowa" name="FemaleHead"/> + <combo_box.item label="Damska górna część ciała" name="FemaleUpperBody"/> + <combo_box.item label="Damska górna część ciała" name="FemaleLowerBody"/> + <combo_box.item label="Męska głowa" name="MaleHead"/> + <combo_box.item label="Męska górna część ciała" name="MaleUpperBody"/> + <combo_box.item label="Męska dolna część ciała" name="MaleLowerBody"/> + <combo_box.item label="Spódnica" name="Skirt"/> + <combo_box.item label="Prim sculptowy" name="SculptedPrim"/> </combo_box> <text name="bad_image_text"> Nie można wczytać obrazu. Spróbuj zapisać obraz jako 24 bitową Targa (.tga). </text> - <check_box label="Użyj kompresji bez strat" name="lossless_check" /> - <button label="Anuluj" name="cancel_btn" /> - <button label="Załaduj ([AMOUNT]L$)" name="ok_btn" /> + <check_box label="Użyj kompresji bez strat" name="lossless_check"/> + <button label="Anuluj" name="cancel_btn"/> + <button label="Załaduj ([AMOUNT]L$)" name="ok_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_incoming_call.xml b/indra/newview/skins/default/xui/pl/floater_incoming_call.xml new file mode 100644 index 0000000000..e5ec3804ae --- /dev/null +++ b/indra/newview/skins/default/xui/pl/floater_incoming_call.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="incoming call" title="DZWONI NIEZNANA OSOBA"> + <floater.string name="lifetime"> + 5 + </floater.string> + <floater.string name="localchat"> + Rozmowy głosowe w pobliżu + </floater.string> + <floater.string name="anonymous"> + anonimowy + </floater.string> + <floater.string name="VoiceInviteP2P"> + dzwoni. + </floater.string> + <floater.string name="VoiceInviteAdHoc"> + rozpoczął rozmowę głosową w czacie konferencji. + </floater.string> + <floater.string name="VoiceInviteGroup"> + zaczyna rozmowę z grupą [GROUP]. + </floater.string> + <text name="question"> + Czy chcesz opuścić [CURRENT_CHAT] i dołączyć do tej rozmowy głosowej? + </text> + <button label="Zaakceptuj" label_selected="Zaakceptuj" name="Accept"/> + <button label="Odmów" label_selected="Odmów" name="Reject"/> + <button label="Rozpocznij IM" name="Start IM"/> +</floater> diff --git a/indra/newview/skins/default/xui/pl/floater_inspect.xml b/indra/newview/skins/default/xui/pl/floater_inspect.xml index c98e0541d8..2c66f2851d 100644 --- a/indra/newview/skins/default/xui/pl/floater_inspect.xml +++ b/indra/newview/skins/default/xui/pl/floater_inspect.xml @@ -1,13 +1,14 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="inspect" title="INSPEKCJA OBIEKTÓW"> + <floater.string name="timeStamp"> + [wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local] + </floater.string> <scroll_list name="object_list" tool_tip=""> - <column label="Nazwa" name="object_name" /> - <column label="Właściciel" name="owner_name" /> - <column label="Twórca" name="creator_name" /> - <column label="Data Kreacji" name="creation_date" /> + <scroll_list.columns label="Nazwa" name="object_name"/> + <scroll_list.columns label="Właściciel" name="owner_name"/> + <scroll_list.columns label="Twórca" name="creator_name"/> + <scroll_list.columns label="Data kreacji" name="creation_date"/> </scroll_list> - <button label="Profil Właściciela..." label_selected="" name="button owner" - tool_tip="" /> - <button label="Profil Twórcy..." label_selected="" name="button creator" - tool_tip="" /> + <button label="Profil Właściciela..." label_selected="" name="button owner" tool_tip=""/> + <button label="Profil Twórcy..." label_selected="" name="button creator" tool_tip=""/> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_inventory.xml b/indra/newview/skins/default/xui/pl/floater_inventory.xml index 157be76c4d..0dc4d5b96d 100644 --- a/indra/newview/skins/default/xui/pl/floater_inventory.xml +++ b/indra/newview/skins/default/xui/pl/floater_inventory.xml @@ -1,47 +1,16 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="Inventory" title="MOJA SZAFA"> - <search_editor label="Wyszukiwarka" name="inventory search editor"/> - <tab_container name="inventory filter tabs"> - <inventory_panel label="Wszystkie Obiekty" name="All Items"/> - <inventory_panel label="Nowe Obiekty" name="Recent Items"/> - </tab_container> - <menu_bar name="Inventory Menu"> - <menu label="Plik" name="File"> - <menu_item_call label="Otwórz" name="Open"/> - <menu_item_call label="Nowe Okno" name="New Window"/> - <menu_item_call label="Pokaż Filtr" name="Show Filters"/> - <menu_item_call label="Zresetuj Filtr" name="Reset Current"/> - <menu_item_call label="Zamknij Wszystkie Foldery" name="Close All Folders"/> - <menu_item_call label="Opróżnij Kosz" name="Empty Trash"/> - </menu> - <menu label="Stwórz" name="Create"> - <menu_item_call label="Nowy Folder" name="New Folder"/> - <menu_item_call label="Nowy Skrypt" name="New Script"/> - <menu_item_call label="Nową Notę" name="New Note"/> - <menu_item_call label="Nowy Gest" name="New Gesture"/> - <menu name="New Clothes"> - <menu_item_call label="Nowa Koszula" name="New Shirt"/> - <menu_item_call label="Nowe Spodnie" name="New Pants"/> - <menu_item_call label="Nowe Buty" name="New Shoes"/> - <menu_item_call label="Nowe Skarpety" name="New Socks"/> - <menu_item_call label="Nowa Kurtka" name="New Jacket"/> - <menu_item_call label="Nowa Spódnica" name="New Skirt"/> - <menu_item_call label="Nowe Rękawiczki" name="New Gloves"/> - <menu_item_call label="Nowy Podkoszulek" name="New Undershirt"/> - <menu_item_call label="Nowa Bielizna" name="New Underpants"/> - </menu> - <menu name="New Body Parts"> - <menu_item_call label="Nowy Kształt" name="New Shape"/> - <menu_item_call label="Nową Skórkę" name="New Skin"/> - <menu_item_call label="Nowe Włosy" name="New Hair"/> - <menu_item_call label="Nowe Oczy" name="New Eyes"/> - </menu> - </menu> - <menu label="Porządkuj" name="Sort"> - <menu_item_check label="Według Nazwy" name="By Name"/> - <menu_item_check label="Według Daty" name="By Date"/> - <menu_item_check label="Foldery Zawsze Według Nazwy" name="Folders Always By Name"/> - <menu_item_check label="Ułożenie Folderów od Góry" name="System Folders To Top"/> - </menu> - </menu_bar> + <floater.string name="Title"> + MOJA SZAFA + </floater.string> + <floater.string name="TitleFetching"> + MOJA SZAFA (Dostarczanie [ITEM_COUNT] obiektów...) [FILTER] + </floater.string> + <floater.string name="TitleCompleted"> + MOJA SZAFA ([ITEM_COUNT] Obiektów) [FILTER] + </floater.string> + <floater.string name="Fetched"> + Dostarczono + </floater.string> + <panel label="Panel Moja Szafa" name="Inventory Panel"/> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/pl/floater_inventory_item_properties.xml index 665172dd49..1e63987585 100644 --- a/indra/newview/skins/default/xui/pl/floater_inventory_item_properties.xml +++ b/indra/newview/skins/default/xui/pl/floater_inventory_item_properties.xml @@ -1,5 +1,20 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="item properties" title="WŁAŚCIWOŚCI OBIEKTÓW W SZAFIE"> + <floater.string name="unknown"> + (nieznany) + </floater.string> + <floater.string name="public"> + (publiczny) + </floater.string> + <floater.string name="you_can"> + Opcje: + </floater.string> + <floater.string name="owner_can"> + Właściciel może: + </floater.string> + <floater.string name="acquiredDate"> + [wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local] + </floater.string> <text name="LabelItemNameTitle"> Nazwa: </text> @@ -12,14 +27,14 @@ <text name="LabelCreatorName"> Nicole Linden </text> - <button label="Profil..." label_selected="" name="BtnCreator" /> + <button label="Profil..." label_selected="" name="BtnCreator"/> <text name="LabelOwnerTitle"> Właściciel: </text> <text name="LabelOwnerName"> Thrax Linden </text> - <button label="Profil..." label_selected="" name="BtnOwner" /> + <button label="Profil..." label_selected="" name="BtnOwner"/> <text name="LabelAcquiredTitle"> Nabyte: </text> @@ -27,55 +42,32 @@ Wed May 24 12:50:46 2006 </text> <text name="OwnerLabel"> - Opcje: - </text> - <check_box label="Modyfikuj" name="CheckOwnerModify" /> - <check_box label="Kopiuj" name="CheckOwnerCopy" /> - <check_box label="Sprzedaj/Oddaj" name="CheckOwnerTransfer" /> - <text name="BaseMaskDebug"> - P: - </text> - <text name="OwnerMaskDebug"> - W: + Ty: </text> - <text name="GroupMaskDebug"> - G: + <check_box label="Edytuj" name="CheckOwnerModify"/> + <check_box label="Kopiuj" name="CheckOwnerCopy"/> + <check_box label="Odsprzedaż" name="CheckOwnerTransfer"/> + <text name="AnyoneLabel"> + Każdy: </text> - <text name="EveryoneMaskDebug"> - W: + <check_box label="Kopiuj" name="CheckEveryoneCopy"/> + <text name="GroupLabel"> + Grupa: </text> - <text name="NextMaskDebug"> - N: - </text> - <check_box label="Udostępnij grupie" name="CheckShareWithGroup" /> - <check_box label="Udostępnij kopiowanie każdemu" name="CheckEveryoneCopy" /> + <check_box label="Udostępnij" name="CheckShareWithGroup"/> <text name="NextOwnerLabel"> - Następna Osoba: - </text> - <check_box label="Modyfikuje" name="CheckNextOwnerModify" /> - <check_box label="Kopiuje" name="CheckNextOwnerCopy" /> - <check_box label="Sprzedaje/Oddaje" name="CheckNextOwnerTransfer" /> - <text name="SaleLabel"> - Zaznacz Artykuł: + Następny właściciel: + </text> + <check_box label="Edytuj" name="CheckNextOwnerModify"/> + <check_box label="Kopiuje" name="CheckNextOwnerCopy"/> + <check_box label="Odsprzedaż" name="CheckNextOwnerTransfer"/> + <check_box label="Sprzedaż" name="CheckPurchase"/> + <combo_box name="combobox sale copy"> + <combo_box.item label="Kopiuj" name="Copy"/> + <combo_box.item label="Oryginalny" name="Original"/> + </combo_box> + <spinner label="Cena:" name="Edit Cost"/> + <text name="CurrencySymbol"> + L$ </text> - <check_box label="Sprzedaż" name="CheckPurchase" /> - <radio_group name="RadioSaleType"> - <radio_item name="radio" label="Oryginał" /> - <radio_item name="radio2" label="Kopia" /> - </radio_group> - <text name="TextPrice"> - Cena: L$ - </text> - <string name="unknown"> - (nieznany) - </string> - <string name="public"> - (publiczny) - </string> - <string name="you_can"> - Opcje: - </string> - <string name="owner_can"> - Właściciel może: - </string> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/pl/floater_inventory_view_finder.xml index 9204262304..bd7b221c5d 100644 --- a/indra/newview/skins/default/xui/pl/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/pl/floater_inventory_view_finder.xml @@ -4,7 +4,7 @@ <check_box label="Wizytówki" name="check_calling_card" /> <check_box label="Ubrania" name="check_clothing" /> <check_box label="Gesty" name="check_gesture" /> - <check_box label="Zakładki Miejsc" name="check_landmark" /> + <check_box label="Landmarki" name="check_landmark" /> <check_box label="Noty" name="check_notecard" /> <check_box label="Obiekty" name="check_object" /> <check_box label="Skrypty" name="check_script" /> diff --git a/indra/newview/skins/default/xui/pl/floater_joystick.xml b/indra/newview/skins/default/xui/pl/floater_joystick.xml index 22ac458b85..78742c39d1 100644 --- a/indra/newview/skins/default/xui/pl/floater_joystick.xml +++ b/indra/newview/skins/default/xui/pl/floater_joystick.xml @@ -1,110 +1,110 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Joystick" width="590" title="KONFIGURACJA JOYSTICKA"> - <check_box name="enable_joystick" label="Aktywuj Joystick:"/> +<floater name="Joystick" title="KONFIGURACJA JOYSTICKA" width="590"> + <check_box label="Aktywuj Joystick:" name="enable_joystick"/> <text left="130" name="joystick_type" width="360"/> - <spinner label="Kalibracja Osi X" left="20" width="170" label_width="130" name="JoystickAxis1"/> - <spinner label="Kalibracja Osi Y" left="210" width="170" label_width="130" name="JoystickAxis2" /> - <spinner label="Kalibracja Osi Z" left="400" width="170" label_width="130" name="JoystickAxis0" /> - <spinner label="Kalibracja Wznoszenia" left="20" width="170" label_width="130" name="JoystickAxis4" /> - <spinner label="Kalibracja Wychylania" left="210" width="170" label_width="130" name="JoystickAxis5" /> - <spinner label="Kalibracja Obrotu" left="400" width="170" label_width="130" name="JoystickAxis3"/> - <spinner label="Kalibracja Powiększania" width="170" label_width="130" name="JoystickAxis6" /> - <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:"> + <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 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 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:"> Kontroluj: </text> - <check_box left="130" width="90" name="JoystickAvatarEnabled" label="Awatara"/> - <check_box left="205" width="90" name="JoystickBuildEnabled" label="Budowanie"/> - <check_box left="282" width="90" name="JoystickFlycamEnabled" label="Kamerę podczas latania"/> - <text width="104" name="XScale"> + <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"> Skala X </text> - <spinner left="133" name="AvatarAxisScale1" /> - <spinner left="208" name="BuildAxisScale1" /> - <spinner left="283" name="FlycamAxisScale1" /> - <text width="104" name="YScale"> + <spinner left="133" name="AvatarAxisScale1"/> + <spinner left="208" name="BuildAxisScale1"/> + <spinner left="283" name="FlycamAxisScale1"/> + <text name="YScale" width="104"> Skala Y </text> - <spinner left="133" name="AvatarAxisScale2" /> - <spinner left="208" name="BuildAxisScale2" /> - <spinner left="283" name="FlycamAxisScale2" /> - <text width="104" name="ZScale"> + <spinner left="133" name="AvatarAxisScale2"/> + <spinner left="208" name="BuildAxisScale2"/> + <spinner left="283" name="FlycamAxisScale2"/> + <text name="ZScale" width="104"> Skala Z </text> - <spinner left="133" name="AvatarAxisScale0" /> - <spinner left="208" name="BuildAxisScale0" /> - <spinner left="283" name="FlycamAxisScale0" /> - <text width="104" name="PitchScale"> - Skala Wznoszenia - </text> - <spinner left="133" name="AvatarAxisScale4" /> - <spinner left="208" name="BuildAxisScale4" /> - <spinner left="283" name="FlycamAxisScale4" /> - <text width="104" name="YawScale"> - Skala Odchylania - </text> - <spinner left="133" name="AvatarAxisScale5" /> - <spinner left="208" name="BuildAxisScale5" /> - <spinner left="283" name="FlycamAxisScale5" /> - <text width="104" name="RollScale"> - Skala Obrotu - </text> - <spinner left="208" name="BuildAxisScale3" /> - <spinner left="283" name="FlycamAxisScale3" /> - <text width="104" name="XDeadZone"> - Tolerancja Osi X - </text> - <spinner left="133" name="AvatarAxisDeadZone1" /> - <spinner left="208" name="BuildAxisDeadZone1" /> - <spinner left="283" name="FlycamAxisDeadZone1" /> - <text width="104" name="YDeadZone"> - Tolerancja Osi Y - </text> - <spinner left="133" name="AvatarAxisDeadZone2" /> - <spinner left="208" name="BuildAxisDeadZone2" /> - <spinner left="283" name="FlycamAxisDeadZone2" /> - <text width="104" name="ZDeadZone"> - Tolerancja Osi Z - </text> - <spinner left="133" name="AvatarAxisDeadZone0" /> - <spinner left="208" name="BuildAxisDeadZone0" /> - <spinner left="283" name="FlycamAxisDeadZone0" /> - <text width="104" name="PitchDeadZone"> - Tolerancja Wznoszenia - </text> - <spinner left="133" name="AvatarAxisDeadZone4" /> - <spinner left="208" name="BuildAxisDeadZone4" /> - <spinner left="283" name="FlycamAxisDeadZone4" /> - <text width="104" name="YawDeadZone"> - Tolerancja Odchylania - </text> - <spinner left="133" name="AvatarAxisDeadZone5" /> - <spinner left="208" name="BuildAxisDeadZone5" /> - <spinner left="283" name="FlycamAxisDeadZone5" /> - <text width="104" name="RollDeadZone"> - Tolerancja Obrotu - </text> - <spinner left="208" name="BuildAxisDeadZone3" /> - <spinner left="283" name="FlycamAxisDeadZone3" /> - <text width="104" name="Feathering"> + <spinner left="133" name="AvatarAxisScale0"/> + <spinner left="208" name="BuildAxisScale0"/> + <spinner left="283" name="FlycamAxisScale0"/> + <text name="PitchScale" width="104"> + Skala wznoszenia + </text> + <spinner left="133" name="AvatarAxisScale4"/> + <spinner left="208" name="BuildAxisScale4"/> + <spinner left="283" name="FlycamAxisScale4"/> + <text name="YawScale" width="104"> + Skala odchylania + </text> + <spinner left="133" name="AvatarAxisScale5"/> + <spinner left="208" name="BuildAxisScale5"/> + <spinner left="283" name="FlycamAxisScale5"/> + <text name="RollScale" width="104"> + Skala obrotu + </text> + <spinner left="208" name="BuildAxisScale3"/> + <spinner left="283" name="FlycamAxisScale3"/> + <text name="XDeadZone" width="104"> + Tolerancja osi X + </text> + <spinner left="133" name="AvatarAxisDeadZone1"/> + <spinner left="208" name="BuildAxisDeadZone1"/> + <spinner left="283" name="FlycamAxisDeadZone1"/> + <text name="YDeadZone" width="104"> + Tolerancja osi Y + </text> + <spinner left="133" name="AvatarAxisDeadZone2"/> + <spinner left="208" name="BuildAxisDeadZone2"/> + <spinner left="283" name="FlycamAxisDeadZone2"/> + <text name="ZDeadZone" width="104"> + Tolerancja osi Z + </text> + <spinner left="133" name="AvatarAxisDeadZone0"/> + <spinner left="208" name="BuildAxisDeadZone0"/> + <spinner left="283" name="FlycamAxisDeadZone0"/> + <text name="PitchDeadZone" width="104"> + Tolerancja wznoszenia + </text> + <spinner left="133" name="AvatarAxisDeadZone4"/> + <spinner left="208" name="BuildAxisDeadZone4"/> + <spinner left="283" name="FlycamAxisDeadZone4"/> + <text name="YawDeadZone" width="104"> + Tolerancja odchylania + </text> + <spinner left="133" name="AvatarAxisDeadZone5"/> + <spinner left="208" name="BuildAxisDeadZone5"/> + <spinner left="283" name="FlycamAxisDeadZone5"/> + <text name="RollDeadZone" width="104"> + Tolerancja obrotu + </text> + <spinner left="208" name="BuildAxisDeadZone3"/> + <spinner left="283" name="FlycamAxisDeadZone3"/> + <text name="Feathering" width="104"> Przenikanie </text> - <slider left="125" label="" name="AvatarFeathering" /> - <slider left="200" label="" name="BuildFeathering" /> - <slider left="275" label="" name="FlycamFeathering" /> - <text width="104" name="ZoomScale2"> - Skala Powiększania + <slider label="" left="125" name="AvatarFeathering"/> + <slider label="" left="200" name="BuildFeathering"/> + <slider label="" left="275" name="FlycamFeathering"/> + <text name="ZoomScale2" width="104"> + Skala powiększania </text> - <spinner left="283" label="" name="FlycamAxisScale6" /> - <text width="104" name="ZoomDeadZone"> - Tolerancja Powiększania + <spinner label="" left="283" name="FlycamAxisScale6"/> + <text name="ZoomDeadZone" width="104"> + Tolerancja powiększania </text> - <spinner left="283" label="" name="FlycamAxisDeadZone6" /> - <button left="366" label="Ustawienia Domyślne" name="SpaceNavigatorDefaults" /> - <button left="366" label="OK" label_selected="OK" name="ok_btn" /> - <button label="Anuluj" label_selected="Anuluj" name="cancel_btn" /> + <spinner label="" left="283" name="FlycamAxisDeadZone6"/> + <button label="Ustawienia domyślne" left="366" 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"> <stat_bar label="Oś 0" name="axis0"/> <stat_bar label="Oś 1" name="axis1"/> @@ -113,7 +113,7 @@ <stat_bar label="Oś 4" name="axis4"/> <stat_bar label="Oś 5" name="axis5"/> </stat_view> - <string name="NoDevice"> + <string name="NoDevice"> brak podłącznego urządzenia </string> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_lagmeter.xml b/indra/newview/skins/default/xui/pl/floater_lagmeter.xml index 69d563bdba..8038550bcb 100644 --- a/indra/newview/skins/default/xui/pl/floater_lagmeter.xml +++ b/indra/newview/skins/default/xui/pl/floater_lagmeter.xml @@ -1,154 +1,151 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater_lagmeter" title="POMIAR LAGÓW"> - <button label="" label_selected="" name="client_lagmeter" - tool_tip="Status lagów klienta" /> - <text name="client"> - Klient: - </text> - <text name="client_text"> - W normie - </text> - <button label="" label_selected="" name="network_lagmeter" - tool_tip="Network lag status" /> - <text name="network"> - Sieć: - </text> - <text name="network_text"> - W normie - </text> - <button label="" label_selected="" name="server_lagmeter" tool_tip="Server lag status" /> - <text name="server"> - Serwer: - </text> - <text name="server_text"> - W normie - </text> - <button label="?" name="server_help" /> - <button label=">>" name="minimize" /> - <string name="max_title_msg"> - Pomiar Lagów - </string> - <string name="max_width_px"> + <floater.string name="max_title_msg"> + Pomiar lagów + </floater.string> + <floater.string name="max_width_px"> 360 - </string> - <string name="min_title_msg"> + </floater.string> + <floater.string name="min_title_msg"> Lag - </string> - <string name="min_width_px"> + </floater.string> + <floater.string name="min_width_px"> 90 - </string> - <string name="client_text_msg"> + </floater.string> + <floater.string name="client_text_msg"> Klient - </string> - <string name="client_frame_rate_critical_fps"> + </floater.string> + <floater.string name="client_frame_rate_critical_fps"> 10 - </string> - <string name="client_frame_rate_warning_fps"> + </floater.string> + <floater.string name="client_frame_rate_warning_fps"> 15 - </string> - <string name="client_frame_time_window_bg_msg"> + </floater.string> + <floater.string name="client_frame_time_window_bg_msg"> W normie, okno w tle - </string> - <string name="client_frame_time_critical_msg"> + </floater.string> + <floater.string name="client_frame_time_critical_msg"> Ilość klatek na sekundę klienta poniżej [CLIENT_FRAME_RATE_CRITICAL] - </string> - <string name="client_frame_time_warning_msg"> + </floater.string> + <floater.string name="client_frame_time_warning_msg"> Ilość klatek na sekundę pomiędzy [CLIENT_FRAME_RATE_CRITICAL] i [CLIENT_FRAME_RATE_WARNING] - </string> - <string name="client_frame_time_normal_msg"> + </floater.string> + <floater.string name="client_frame_time_normal_msg"> W normie - </string> - <string name="client_draw_distance_cause_msg"> - Przyczyna: Dystans rysowania jest za wysoki - </string> - <string name="client_texture_loading_cause_msg"> - Przyczyna: Ładowanie obrazu - </string> - <string name="client_texture_memory_cause_msg"> - Przyczyna: Za dużo obrazów w pamięci - </string> - <string name="client_complex_objects_cause_msg"> - Przyczyna: Za dużo złożonych obiektów - </string> - <string name="network_text_msg"> + </floater.string> + <floater.string name="client_draw_distance_cause_msg"> + Przyczyna: dystans rysowania jest za wysoki + </floater.string> + <floater.string name="client_texture_loading_cause_msg"> + Przyczyna: ładowanie obrazu + </floater.string> + <floater.string name="client_texture_memory_cause_msg"> + Przyczyna: za dużo obrazów w pamięci + </floater.string> + <floater.string name="client_complex_objects_cause_msg"> + Przyczyna: za dużo złożonych obiektów + </floater.string> + <floater.string name="network_text_msg"> Sieć - </string> - <string name="network_packet_loss_critical_pct"> + </floater.string> + <floater.string name="network_packet_loss_critical_pct"> 10 - </string> - <string name="network_packet_loss_warning_pct"> + </floater.string> + <floater.string name="network_packet_loss_warning_pct"> 5 - </string> - <string name="network_packet_loss_critical_msg"> + </floater.string> + <floater.string name="network_packet_loss_critical_msg"> Utrata pakietów przekracza [NETWORK_PACKET_LOSS_CRITICAL]% - </string> - <string name="network_packet_loss_warning_msg"> + </floater.string> + <floater.string name="network_packet_loss_warning_msg"> Utrata pakietów przekracza [NETWORK_PACKET_LOSS_WARNING]%-[NETWORK_PACKET_LOSS_CRITICAL]% - </string> - <string name="network_performance_normal_msg"> + </floater.string> + <floater.string name="network_performance_normal_msg"> W normie - </string> - <string name="network_ping_critical_ms"> + </floater.string> + <floater.string name="network_ping_critical_ms"> 600 - </string> - <string name="network_ping_warning_ms"> + </floater.string> + <floater.string name="network_ping_warning_ms"> 300 - </string> - <string name="network_ping_critical_msg"> + </floater.string> + <floater.string name="network_ping_critical_msg"> Fatalny ping - [NETWORK_PING_CRITICAL] ms - </string> - <string name="network_ping_warning_msg"> + </floater.string> + <floater.string name="network_ping_warning_msg"> Wolny ping - [NETWORK_PING_WARNING]-[NETWORK_PING_CRITICAL] ms - </string> - <string name="network_packet_loss_cause_msg"> + </floater.string> + <floater.string name="network_packet_loss_cause_msg"> Złe połączenie lub przepustowość. - </string> - <string name="network_ping_cause_msg"> + </floater.string> + <floater.string name="network_ping_cause_msg"> Złe połączenie lub aplikacja współdzieląca pliki. - </string> - <string name="server_text_msg"> + </floater.string> + <floater.string name="server_text_msg"> Serwer - </string> - <string name="server_frame_rate_critical_fps"> + </floater.string> + <floater.string name="server_frame_rate_critical_fps"> 20 - </string> - <string name="server_frame_rate_warning_fps"> + </floater.string> + <floater.string name="server_frame_rate_warning_fps"> 30 - </string> - <string name="server_single_process_max_time_ms"> + </floater.string> + <floater.string name="server_single_process_max_time_ms"> 20 - </string> - <string name="server_frame_time_critical_msg"> + </floater.string> + <floater.string name="server_frame_time_critical_msg"> Ilość klatek na sekundę poniżej [SERVER_FRAME_RATE_CRITICAL] - </string> - <string name="server_frame_time_warning_msg"> + </floater.string> + <floater.string name="server_frame_time_warning_msg"> Ilość klatek na sekundę pomiędzy [SERVER_FRAME_RATE_CRITICAL] i [SERVER_FRAME_RATE_WARNING] - </string> - <string name="server_frame_time_normal_msg"> + </floater.string> + <floater.string name="server_frame_time_normal_msg"> W normie - </string> - <string name="server_physics_cause_msg"> - Przyczyna: Za dużo obiektów fizycznych - </string> - <string name="server_scripts_cause_msg"> - Przyczyna: Za dużo obieków skryptowanych - </string> - <string name="server_net_cause_msg"> - Przyczyna: Za duży ruch w sieci - </string> - <string name="server_agent_cause_msg"> - Przyczyna: Za dużo poruszających się awatarów w regionie - </string> - <string name="server_images_cause_msg"> - Przyczyna: Za dużo kalkulacji obrazu - </string> - <string name="server_generic_cause_msg"> - Przyczyna: Symulator ładuje się zbyt powoli - </string> - <string name="smaller_label"> + </floater.string> + <floater.string name="server_physics_cause_msg"> + Przyczyna: za dużo obiektów fizycznych + </floater.string> + <floater.string name="server_scripts_cause_msg"> + Przyczyna: za dużo obieków skryptowanych + </floater.string> + <floater.string name="server_net_cause_msg"> + Przyczyna: za duży ruch w sieci + </floater.string> + <floater.string name="server_agent_cause_msg"> + Przyczyna: za dużo poruszających się awatarów w regionie + </floater.string> + <floater.string name="server_images_cause_msg"> + Przyczyna: za dużo kalkulacji obrazu + </floater.string> + <floater.string name="server_generic_cause_msg"> + Przyczyna: symulator ładuje się zbyt powoli + </floater.string> + <floater.string name="smaller_label"> >> - </string> - <string name="bigger_label"> + </floater.string> + <floater.string name="bigger_label"> << - </string> + </floater.string> + <button label="" label_selected="" name="client_lagmeter" tool_tip="Status lagów klienta"/> + <text name="client"> + Klient + </text> + <text name="client_text"> + W normie + </text> + <button label="" label_selected="" name="network_lagmeter" tool_tip="Network lag status"/> + <text name="network"> + Sieć + </text> + <text name="network_text"> + W normie + </text> + <button label="" label_selected="" name="server_lagmeter" tool_tip="Server lag status"/> + <text name="server"> + Serwer + </text> + <text name="server_text"> + W normie + </text> + <button label=">>" name="minimize" tool_tip="Złącz rozmiar pliku xml"/> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_land_holdings.xml b/indra/newview/skins/default/xui/pl/floater_land_holdings.xml index 13e6a8b16d..72a078949a 100644 --- a/indra/newview/skins/default/xui/pl/floater_land_holdings.xml +++ b/indra/newview/skins/default/xui/pl/floater_land_holdings.xml @@ -1,14 +1,14 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="land holdings floater" title="MOJA POSIADŁOŚĆ"> <scroll_list name="parcel list"> - <column label="Nazwa posiadłości" name="name"/> + <column label="Posiadłość" name="name"/> <column label="Region" name="location"/> <column label="Typ" name="type"/> <column label="Obszar" name="area"/> <column label="" name="hidden"/> </scroll_list> <button label="Teleportuj" label_selected="Teleport" name="Teleport" tool_tip="Teleportuj się do centrum tej Posiadłości."/> - <button label="Pokaż na Mapie" label_selected="Pokaż na mapie" name="Show on Map" tool_tip="Pokaż to miejsce na mapie świata."/> + <button label="Mapa" label_selected="Mapa" name="Show on Map" tool_tip="Pokaż to miejsce na mapie świata."/> <text name="contrib_label"> Kontrybucje do Twoich Grup: </text> @@ -20,21 +20,21 @@ Dozwolone udziały przy obecnym planie płatności: </text> <text name="allowed_text"> - [AREA] metrów + [AREA] m² </text> <text name="current_label"> Udziały w Posiadłościach: </text> <text name="current_text"> - [AREA] metrów + [AREA] m² </text> <text name="available_label"> Dostępne na zakup Posiadłości: </text> <text name="available_text"> - [AREA] metrów + [AREA] m² </text> <string name="area_string"> - [AREA] metrów + [AREA] m² </string> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_lsl_guide.xml b/indra/newview/skins/default/xui/pl/floater_lsl_guide.xml index 5601aa4464..7b1b395f87 100644 --- a/indra/newview/skins/default/xui/pl/floater_lsl_guide.xml +++ b/indra/newview/skins/default/xui/pl/floater_lsl_guide.xml @@ -1,7 +1,7 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="script ed float" title="LSL WIKI"> - <check_box label="Idź za kursorem" name="lock_check" /> - <combo_box label="Zablokuj" name="history_combo" /> - <button label="Wróć" name="back_btn" /> - <button label="Do Przodu" name="fwd_btn" /> + <check_box label="Idź za kursorem" name="lock_check"/> + <combo_box label="Zablokuj" name="history_combo"/> + <button label="Wróć" name="back_btn"/> + <button label="Do przodu" name="fwd_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_map.xml b/indra/newview/skins/default/xui/pl/floater_map.xml index 6eabde7c52..1e5f3e6d46 100644 --- a/indra/newview/skins/default/xui/pl/floater_map.xml +++ b/indra/newview/skins/default/xui/pl/floater_map.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Map"> +<floater name="Map" title="Mini-Mapa"> <floater.string name="mini_map_north"> N </floater.string> diff --git a/indra/newview/skins/default/xui/pl/floater_media_browser.xml b/indra/newview/skins/default/xui/pl/floater_media_browser.xml index 74210c75e5..9787736ad8 100644 --- a/indra/newview/skins/default/xui/pl/floater_media_browser.xml +++ b/indra/newview/skins/default/xui/pl/floater_media_browser.xml @@ -1,19 +1,19 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater_about" title="PRZEGLĄDARKA MEDIÓW"> <layout_stack name="stack1"> <layout_panel name="nav_controls"> - <button label="Wróć" name="back" /> - <button label="Do Przodu" name="forward" /> - <button label="Załaduj" name="reload" /> - <button label="Idź" name="go" /> + <button label="Wróć" name="back"/> + <button label="Do przodu" name="forward"/> + <button label="Załaduj" name="reload"/> + <button label="Idź" name="go"/> </layout_panel> <layout_panel name="parcel_owner_controls"> - <button label="Wyślij Obecny URL do Posiadłości" name="assign" /> + <button label="Wyślij bieżącą stronę do Parceli" name="assign"/> </layout_panel> <layout_panel name="external_controls"> - <button label="Użyj Mojej Przeglądarki" name="open_browser" /> - <check_box label="Zawsze otwieraj w mojej przeglądarce internetowej" name="open_always" /> - <button label="Zamknij" name="close" /> + <button label="Użyj mojej przeglądarki" name="open_browser"/> + <check_box label="Zawsze otwieraj w mojej przeglądarce internetowej" name="open_always"/> + <button label="Zamknij" name="close"/> </layout_panel> </layout_stack> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_media_settings.xml b/indra/newview/skins/default/xui/pl/floater_media_settings.xml new file mode 100644 index 0000000000..5a36331c9a --- /dev/null +++ b/indra/newview/skins/default/xui/pl/floater_media_settings.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="media_settings" title="MEDIA"> + <button label="OK" label_selected="OK" name="OK"/> + <button label="Anuluj" label_selected="Anuluj" name="Cancel"/> + <button label="Zastosuj" label_selected="Zastosuj" name="Apply"/> +</floater> diff --git a/indra/newview/skins/default/xui/pl/floater_mem_leaking.xml b/indra/newview/skins/default/xui/pl/floater_mem_leaking.xml index 87d74f6c15..9ce99692d0 100644 --- a/indra/newview/skins/default/xui/pl/floater_mem_leaking.xml +++ b/indra/newview/skins/default/xui/pl/floater_mem_leaking.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="MemLeak" title="STYMULACJA WYCIEKU PAMIĘCI"> - <spinner label="Prędkość Przecieków (byty na klatkę):" name="leak_speed"/> - <spinner label="Max Przecieki (MB):" name="max_leak"/> + <spinner label="Prędkość przecieków (byty na klatkę):" name="leak_speed"/> + <spinner label="Max przecieki (MB):" name="max_leak"/> <text name="total_leaked_label"> Przeciekło: [SIZE] KB </text> diff --git a/indra/newview/skins/default/xui/pl/floater_moveview.xml b/indra/newview/skins/default/xui/pl/floater_moveview.xml index e28cfd589d..9c97a8a0e7 100644 --- a/indra/newview/skins/default/xui/pl/floater_moveview.xml +++ b/indra/newview/skins/default/xui/pl/floater_moveview.xml @@ -1,15 +1,43 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="move_floater"> -<panel name="panel_actions"> - <button label="" label_selected="" name="turn left btn" tool_tip="Obróć w lewo" /> - <button label="" label_selected="" name="turn right btn" tool_tip="Obroć w Prawo" /> - <button label="" label_selected="" name="move up btn" - tool_tip="Skocz lub zacznij latać w górę" /> - <button label="" label_selected="" name="move down btn" - tool_tip="Pochyl się lub zacznij latać w dół" /> - <joystick_slide name="slide left btn" tool_tip="Przesuń w lewo" /> - <joystick_slide name="slide right btn" tool_tip="Przesuń w prawo" /> - <joystick_turn name="forward btn" tool_tip="Przesuń do przodu" /> - <joystick_turn name="backward btn" tool_tip="Przesuń do tyłu" /> -</panel> + <string name="walk_forward_tooltip"> + Idź (naciśnij Strzałkę w Górę lub W) + </string> + <string name="walk_back_tooltip"> + Idź do tyłu (naciśnij Strzałkę w Dół lub S) + </string> + <string name="run_forward_tooltip"> + Biegnij do przodu (naciśnij Strzałkę w Górę lub W) + </string> + <string name="run_back_tooltip"> + Biegnij do przodu (naciśnij Strzałkę w Dół lub S) + </string> + <string name="fly_forward_tooltip"> + Leć do przodu (naciśnij Strzałkę w Górę lub W) + </string> + <string name="fly_back_tooltip"> + Leć do tyłu (naciśnij Strzałkę na Dół lub S) + </string> + <string name="walk_title"> + Idź + </string> + <string name="run_title"> + Biegnij + </string> + <string name="fly_title"> + Lataj + </string> + <panel name="panel_actions"> + <button label="" label_selected="" name="turn left btn" tool_tip="Obróć w lewo (naciśnij Lewą Strzałkę lub A)"/> + <button label="" label_selected="" name="turn right btn" tool_tip="Obróć w prawo (naciśnij Prawą Strzałkę lub D)"/> + <button label="" label_selected="" name="move up btn" tool_tip="Leć do góry, naciśnij E"/> + <button label="" label_selected="" name="move down btn" tool_tip="Leć w dół, naciśnij C"/> + <joystick_turn name="forward btn" tool_tip="Idź (naciśnij Strzałkę w Górę lub W)"/> + <joystick_turn name="backward btn" tool_tip="Cofaj się (naciśnij Strzałkę w Dół lub S)"/> + </panel> + <panel name="panel_modes"> + <button label="" name="mode_walk_btn" tool_tip="Tryb chodzenia"/> + <button label="" name="mode_run_btn" tool_tip="Tryb biegu"/> + <button label="" name="mode_fly_btn" tool_tip="Tryb latania"/> + </panel> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_mute_object.xml b/indra/newview/skins/default/xui/pl/floater_mute_object.xml index 8055617371..4af5872ef5 100644 --- a/indra/newview/skins/default/xui/pl/floater_mute_object.xml +++ b/indra/newview/skins/default/xui/pl/floater_mute_object.xml @@ -9,6 +9,6 @@ <text name="note"> * Zablokuj jedynie tekst obiektu, bez dźwięku </text> - <button label="Ok" name="OK"/> + <button label="OK" name="OK"/> <button label="Anuluj" name="Cancel"/> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_nearby_chat.xml b/indra/newview/skins/default/xui/pl/floater_nearby_chat.xml new file mode 100644 index 0000000000..e00b3188ea --- /dev/null +++ b/indra/newview/skins/default/xui/pl/floater_nearby_chat.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="nearby_chat" title="CZAT LOKALNY"/> diff --git a/indra/newview/skins/default/xui/pl/floater_openobject.xml b/indra/newview/skins/default/xui/pl/floater_openobject.xml index fbbed0f11d..8e94ae821c 100644 --- a/indra/newview/skins/default/xui/pl/floater_openobject.xml +++ b/indra/newview/skins/default/xui/pl/floater_openobject.xml @@ -1,10 +1,8 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="objectcontents" title="ZAWARTOŚĆ OBIEKTU"> <text name="object_name"> [DESC]: </text> - <button label="Kopiuj do Szafy" label_selected="Kopiuj do Szafy" - name="copy_to_inventory_button" /> - <button label="Kopiuj i Zalóż" label_selected="Kopiuj i Załóż" - name="copy_and_wear_button" /> + <button label="Kopiuj do Szafy" label_selected="Kopiuj do Szafy" name="copy_to_inventory_button"/> + <button label="Kopiuj i zalóż" label_selected="Kopiuj i załóż" name="copy_and_wear_button"/> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/pl/floater_outfit_save_as.xml new file mode 100644 index 0000000000..a8d2e10c5f --- /dev/null +++ b/indra/newview/skins/default/xui/pl/floater_outfit_save_as.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="modal container" title="Stwórz ubranie"> + <button label="Zapisz" label_selected="Zapisz" name="Save"/> + <button label="Anuluj" label_selected="Anuluj" name="Cancel"/> + <text name="Save item as:"> + Zapisz to co mam w tej chwili założone +jako nowy komplet ubrania: + </text> + <line_editor name="name ed"> + [DESC] (nowy) + </line_editor> +</floater> diff --git a/indra/newview/skins/default/xui/pl/floater_outgoing_call.xml b/indra/newview/skins/default/xui/pl/floater_outgoing_call.xml new file mode 100644 index 0000000000..8a70cb3247 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/floater_outgoing_call.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="outgoing call" title="ROZMOWA GŁOSOWA"> + <floater.string name="lifetime"> + 5 + </floater.string> + <floater.string name="localchat"> + Rozmowy głosowe w pobliżu + </floater.string> + <floater.string name="anonymous"> + anonimowy + </floater.string> + <floater.string name="VoiceInviteP2P"> + dzwoni. + </floater.string> + <floater.string name="VoiceInviteAdHoc"> + uczestniczy w konferencyjnej rozmowie głosowej + </floater.string> + <text name="connecting"> + Łączy z [CALLEE_NAME] + </text> + <text name="calling"> + Dzwoni [CALEE_NAME] + </text> + <text name="noanswer"> + Brak odpowiedzi. Proszę spróbować ponownie później. + </text> + <text name="nearby"> + Zostaleś rozłączony z [VOICE_CHANNEL_NAME]. [RECONNECT_NEARBY] + </text> + <text name="nearby_P2P_by_other"> + [VOICE_CHANNEL_NAME] zakończył/a rozmowę głosową. [RECONNECT_NEARBY] + </text> + <text name="nearby_P2P_by_agent"> + Zakończyłeś rozmowę. [RECONNECT_NEARBY] + </text> + <text name="leaving"> + Opuszcza [CURRENT_CHAT] + </text> + <button label="Anuluj" label_selected="Anuluj" name="Cancel"/> +</floater> diff --git a/indra/newview/skins/default/xui/pl/floater_pay.xml b/indra/newview/skins/default/xui/pl/floater_pay.xml index dfb1b6616c..dccb7ed2bb 100644 --- a/indra/newview/skins/default/xui/pl/floater_pay.xml +++ b/indra/newview/skins/default/xui/pl/floater_pay.xml @@ -1,22 +1,26 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="Give Money" title=""> - <button label="L$1" label_selected="L$1" name="fastpay 1" /> - <button label="L$5" label_selected="L$5" name="fastpay 5" /> - <button label="L$10" label_selected="L$10" name="fastpay 10" /> - <button label="L$20" label_selected="L$20" name="fastpay 20" /> - <button label="Zapłać" label_selected="Zapłać" name="pay btn" /> - <button label="Anuluj" label_selected="Anuluj" name="cancel btn" /> + <string name="payee_group"> + Zapłać Grupie + </string> + <string name="payee_resident"> + Zapłać Rezydentowi + </string> <text name="payee_label"> - Zapłata dla: + Zapłać: </text> + <icon name="icon_person" tool_tip="Osoba"/> <text name="payee_name"> [FIRST] [LAST] </text> - <text name="fastpay text" halign="left" left="12"> - Szybka Zapłata: - </text> + <button label="L$1" label_selected="L$1" name="fastpay 1"/> + <button label="L$5" label_selected="L$5" name="fastpay 5"/> + <button label="L$10" label_selected="L$10" name="fastpay 10"/> + <button label="L$20" label_selected="L$20" name="fastpay 20"/> <text name="amount text"> - Suma: + lub wybierz kwotę: </text> - <line_editor left="52" name="amount" /> + <line_editor left="52" name="amount"/> + <button label="Zapłać" label_selected="Zapłać" name="pay btn"/> + <button label="Anuluj" label_selected="Anuluj" name="cancel btn"/> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_pay_object.xml b/indra/newview/skins/default/xui/pl/floater_pay_object.xml index 376f517aaa..d0c69a6c21 100644 --- a/indra/newview/skins/default/xui/pl/floater_pay_object.xml +++ b/indra/newview/skins/default/xui/pl/floater_pay_object.xml @@ -1,31 +1,30 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="Give Money" title=""> - <text name="payee_group" width="100" halign="left"> - Zapłać Grupie: - </text> - <text name="payee_resident" width="120" halign="left" > - Zapłać Rezydentowi: - </text> - <text name="payee_name" left="125"> + <string halign="left" name="payee_group" width="100"> + Zapłać Grupie + </string> + <string halign="left" name="payee_resident" width="120"> + Zapłać Rezydentowi + </string> + <icon name="icon_person" tool_tip="Osoba"/> + <text left="125" name="payee_name"> [FIRST] [LAST] </text> - <text name="object_name_label" left="5" width="95" halign="left"> + <text halign="left" left="5" name="object_name_label" width="95"> Poprzez Obiekt: </text> - <text name="object_name_text" left="105" > - ... - </text> - <text name="fastpay text" width="95" halign="left"> - Szybka Zapłata: + <icon name="icon_object" tool_tip="Obiekt"/> + <text left="105" name="object_name_text"> + Poprzez obiekt </text> - <text name="amount text" left="5" halign="left"> - Suma: + <button label="L$1" label_selected="L$1" left="105" name="fastpay 1"/> + <button label="L$5" label_selected="L$5" left="190" name="fastpay 5"/> + <button label="L$10" label_selected="L$10" left="105" name="fastpay 10"/> + <button label="L$20" label_selected="L$20" left="190" name="fastpay 20"/> + <text halign="left" left="5" name="amount text"> + lub wybierz kwotę: </text> - <button label="L$1" label_selected="L$1" name="fastpay 1" left="105"/> - <button label="L$5" label_selected="L$5" name="fastpay 5" left="190"/> - <button label="L$10" label_selected="L$10" name="fastpay 10" left="105"/> - <button label="L$20" label_selected="L$20" name="fastpay 20" left="190"/> - <button label="Zapłać" label_selected="Zapłać" name="pay btn" /> - <button label="Anuluj" label_selected="Anuluj" name="cancel btn" /> - <line_editor left="50" name="amount" width="50" /> + <line_editor left="50" name="amount" width="50"/> + <button label="Zapłać" label_selected="Zapłać" name="pay btn"/> + <button label="Anuluj" label_selected="Anuluj" name="cancel btn"/> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_perm_prefs.xml b/indra/newview/skins/default/xui/pl/floater_perm_prefs.xml index 1b0dd6113e..2128cfa3c8 100644 --- a/indra/newview/skins/default/xui/pl/floater_perm_prefs.xml +++ b/indra/newview/skins/default/xui/pl/floater_perm_prefs.xml @@ -5,7 +5,7 @@ <check_box label="Udostępnij grupie" name="share_with_group"/> <check_box label="Pozwól kopiować każdemu" name="everyone_copy"/> <text name="NextOwnerLabel"> - Następny właściciel: + Następny Właściciel: </text> <check_box label="Modyfikuje" name="next_owner_modify"/> <check_box label="Kopiuje" name="next_owner_copy"/> diff --git a/indra/newview/skins/default/xui/pl/floater_post_process.xml b/indra/newview/skins/default/xui/pl/floater_post_process.xml index 6bd91f97b1..a3515915bf 100644 --- a/indra/newview/skins/default/xui/pl/floater_post_process.xml +++ b/indra/newview/skins/default/xui/pl/floater_post_process.xml @@ -16,40 +16,40 @@ </text> <slider label="" name="wmiColorFilterContrast" /> <text name="wmiColorFilterBaseText"> - Kontrast Koloru Podstawowego + Kontrast koloru podstawowego </text> <slider label="R" name="wmiColorFilterBaseR" /> <slider label="G" name="wmiColorFilterBaseG" /> <slider label="B" name="wmiColorFilterBaseB" /> <slider label="I" name="wmiColorFilterBaseI" /> </panel> - <panel label="Wizja Nocna" name="wmiNightVisionPanel"> + <panel label="Wizja nocna" name="wmiNightVisionPanel"> <check_box label="Udostępnij" name="wmiNightVisionToggle" /> <text name="wmiNightVisionBrightMultText"> - Wielokrotne Wzmocnienie Światła + Wielokrotne wzmocnienie światła </text> <slider label="" name="wmiNightVisionBrightMult" /> <text name="wmiNightVisionNoiseSizeText"> - Rozmiar Szumu + Rozmiar szumu </text> <slider label="" name="wmiNightVisionNoiseSize" /> <text name="wmiNightVisionNoiseStrengthText"> - Moc Szumu + Moc szumu </text> <slider label="" name="wmiNightVisionNoiseStrength" /> </panel> <panel label="Bloom" name="wmiBloomPanel"> <check_box label="Udostępnij" name="wmiBloomToggle" /> <text name="wmiBloomExtractText"> - Ekstracja Luminacji + Ekstracja luminacji </text> <slider label="" name="wmiBloomExtract" /> <text name="wmiBloomSizeText"> - Rozmiar Rozmazania Obrazu + Rozmiar rozmazania obrazu </text> <slider label="" name="wmiBloomSize" /> <text name="wmiBloomStrengthText"> - Moc Rozmazania Obrazu + Moc rozmazania obrazu </text> <slider label="" name="wmiBloomStrength" /> </panel> diff --git a/indra/newview/skins/default/xui/pl/floater_postcard.xml b/indra/newview/skins/default/xui/pl/floater_postcard.xml index 8f4018924d..095974aa61 100644 --- a/indra/newview/skins/default/xui/pl/floater_postcard.xml +++ b/indra/newview/skins/default/xui/pl/floater_postcard.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Postcard" title="WYŚLIJ POCZTÓWKĘ"> +<floater name="Postcard" title="WYŚLIJ POCZTÓWKĘ (EMAIL)"> <text name="to_label"> Email Odbiorcy: </text> @@ -20,12 +20,12 @@ Wpisz treść swojej wiadomości tutaj </text_editor> <text name="fine_print"> - Jeżeli odbiorca tej pocztówki dołączy do [SECOND_LIFE], otrzymasz bonusa. + Jeżeli Odbiorca tej pocztówki dołączy do [SECOND_LIFE], otrzymasz bonus. </text> <button label="Anuluj" name="cancel_btn"/> <button label="Wyślij" name="send_btn"/> <string name="default_subject"> - Pocztówki z [SECOND_LIFE] + Pocztówka z [SECOND_LIFE]. </string> <string name="default_message"> Sprawdź i przekonaj się sam! diff --git a/indra/newview/skins/default/xui/pl/floater_preferences.xml b/indra/newview/skins/default/xui/pl/floater_preferences.xml index 2be663283f..3f62d764c6 100644 --- a/indra/newview/skins/default/xui/pl/floater_preferences.xml +++ b/indra/newview/skins/default/xui/pl/floater_preferences.xml @@ -1,8 +1,15 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="Preferences" title="USTAWIENIA"> - <button label="OK" label_selected="OK" name="OK" /> - <button label="Anuluj" label_selected="Anuluj" name="Cancel" /> - <button label="Zastosuj" label_selected="Zastosuj" name="Apply" /> - <button label="O Second Life" label_selected="O Second Life" name="About..." /> - <button label="Pomoc" label_selected="Pomoc" name="Help" /> + <button label="OK" label_selected="OK" name="OK"/> + <button label="Anuluj" label_selected="Anuluj" name="Cancel"/> + <tab_container name="pref core"> + <panel label="Ogólne" name="general"/> + <panel label="Grafika" name="display"/> + <panel label="Prywatność" name="im"/> + <panel label="Dźwięk & Media" name="audio"/> + <panel label="Czat" name="chat"/> + <panel label="Powiadomienia" name="msgs"/> + <panel label="Ustawienie" name="input"/> + <panel label="Zaawansowane" name="advanced1"/> + </tab_container> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_preview_animation.xml b/indra/newview/skins/default/xui/pl/floater_preview_animation.xml index 2a49864e93..6ce6914771 100644 --- a/indra/newview/skins/default/xui/pl/floater_preview_animation.xml +++ b/indra/newview/skins/default/xui/pl/floater_preview_animation.xml @@ -6,6 +6,6 @@ <text name="desc txt"> Opis: </text> - <button label="Używaj w Świecie" label_selected="Stop" left="20" name="Anim play btn" tool_tip="Uruchom tę animację by widzieli ją pozostali Rezydenci" width="131"/> - <button label="Używaj lokalnie" label_selected="Stop" left="162" name="Anim audition btn" tool_tip="Uruchom tę animację widoczną tylko przez Ciebie" width="125"/> + <button label="Uruchom in-world" label_selected="Stop" left="20" name="Anim play btn" tool_tip="Uruchom animację by widzieli ją pozostali Rezydenci" width="131"/> + <button label="Używaj lokalnie" label_selected="Stop" left="162" name="Anim audition btn" tool_tip="Uruchom animację widoczną tylko przez Ciebie" width="125"/> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_preview_event.xml b/indra/newview/skins/default/xui/pl/floater_preview_event.xml index 9fc0ff4da6..5d9e47bc00 100644 --- a/indra/newview/skins/default/xui/pl/floater_preview_event.xml +++ b/indra/newview/skins/default/xui/pl/floater_preview_event.xml @@ -1,2 +1,6 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="event_preview" title="INFORMACJE O IMPREZIE" /> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="event_preview" title="INFO O IMPREZIE"> + <floater.string name="Title"> + Impreza: [NAME] + </floater.string> +</floater> diff --git a/indra/newview/skins/default/xui/pl/floater_preview_gesture.xml b/indra/newview/skins/default/xui/pl/floater_preview_gesture.xml index 1c7a3f6631..05758ac04d 100644 --- a/indra/newview/skins/default/xui/pl/floater_preview_gesture.xml +++ b/indra/newview/skins/default/xui/pl/floater_preview_gesture.xml @@ -1,14 +1,32 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="gesture_preview"> - <string name="stop_txt"> + <floater.string name="step_anim"> + Animacja + </floater.string> + <floater.string name="step_sound"> + Dźwięk: + </floater.string> + <floater.string name="step_chat"> + Czat: + </floater.string> + <floater.string name="step_wait"> + Wstrzymaj: + </floater.string> + <floater.string name="stop_txt"> Stop - </string> - <string name="preview_txt"> + </floater.string> + <floater.string name="preview_txt"> Pokaż - </string> - <string name="none_text"> + </floater.string> + <floater.string name="none_text"> -- Brak -- - </string> + </floater.string> + <floater.string name="Title"> + Gest: [NAME] + </floater.string> + <text name="name_text"> + Nazwa: + </text> <text name="desc_label"> Opis: </text> @@ -27,29 +45,23 @@ <text name="library_label"> Zbiór: </text> + <scroll_list name="library_list"/> + <button label="Dodaj >>" name="add_btn"/> <text name="steps_label"> Etapy: </text> - <scroll_list name="library_list"> - Animacja -Dźwięk -Czat -Wstrzymaj - </scroll_list> - <button label="Dodaj >>" name="add_btn"/> - <button label="W Górę" name="up_btn"/> - <button label="W Dół" name="down_btn"/> + <button label="W górę" name="up_btn"/> + <button label="W dół" name="down_btn"/> <button label="Usuń" name="delete_btn"/> - <text name="help_label"> - Wszystkie etapy nastąpią razem, -chyba, że dodasz pauzy. - </text> <radio_group name="animation_trigger_type"> - <radio_item name="start" label="Start" /> - <radio_item name="stop" label="Stop" /> + <radio_item label="Start" name="start"/> + <radio_item label="Stop" name="stop"/> </radio_group> <check_box label="do końca animacji" name="wait_anim_check"/> <check_box label="czas w sekundach" name="wait_time_check"/> + <text name="help_label"> + Wszystkie etapy nastąpią razem, chyba, że dodasz pauzy. + </text> <check_box label="Aktywny" name="active_check" tool_tip="Aktywne gesty można włączać używając przypisanej frazy w czacie albo używając przypisanego klawisza skrótowego. W przypaku konfliktu przypisań gesty zazwyczaj nie będą działać."/> <button label="Pokaż" name="preview_btn"/> <button label="Zapisz" name="save_btn"/> diff --git a/indra/newview/skins/default/xui/pl/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/pl/floater_preview_gesture_info.xml new file mode 100644 index 0000000000..d31cada96d --- /dev/null +++ b/indra/newview/skins/default/xui/pl/floater_preview_gesture_info.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Gesture" title="GEST"/> diff --git a/indra/newview/skins/default/xui/pl/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/pl/floater_preview_gesture_shortcut.xml new file mode 100644 index 0000000000..d33b799476 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/floater_preview_gesture_shortcut.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Gesture" title="GESTY"> + <text name="trigger_label"> + Czat: + </text> + <text name="key_label"> + Klawiatura: + </text> + <combo_box label="Żaden" name="modifier_combo"/> + <combo_box label="Żaden" name="key_combo"/> + <text name="replace_text" tool_tip="Zmień włączającą frazę na inną. Na przykład zmiana 'witam' na 'cześć' zmieni czat 'Chciałem powiedzieć witam' na 'Chciałem powiedzieć cześć' i pokaże animację!"> + Zamień na: + </text> + <line_editor name="replace_editor" tool_tip="Zmień włączającą frazę na inną. Na przykład zmiana 'witam' na 'cześć' zmieni czat 'Chciałem powiedzieć witam' na 'Chciałem powiedzieć cześć' i pokaże animację"/> +</floater> diff --git a/indra/newview/skins/default/xui/pl/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/pl/floater_preview_gesture_steps.xml new file mode 100644 index 0000000000..6592d9dad0 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/floater_preview_gesture_steps.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Gesture" title="GESTY"/> diff --git a/indra/newview/skins/default/xui/pl/floater_preview_notecard.xml b/indra/newview/skins/default/xui/pl/floater_preview_notecard.xml index b9f80490ab..1ad07c236b 100644 --- a/indra/newview/skins/default/xui/pl/floater_preview_notecard.xml +++ b/indra/newview/skins/default/xui/pl/floater_preview_notecard.xml @@ -1,16 +1,22 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="preview notecard" title="NOTA:"> - <button label="Zapisz" label_selected="Zapisz" name="Save" /> + <floater.string name="no_object"> + Nie można znaleźć obiektu zawierającego tą notkę. + </floater.string> + <floater.string name="not_allowed"> + Nie masz pozwolenia na zobaczenie tej notki. + </floater.string> + <floater.string name="Title"> + Notka: [NAME] + </floater.string> + <floater.string label="Zapisz" label_selected="Zapisz" name="Save"> + Zapisz + </floater.string> <text name="desc txt"> Opis: </text> <text_editor name="Notecard Editor"> Ładowanie... </text_editor> - <string name="no_object"> - Nie można znaleść obiektu zawierającego tą notkę. - </string> - <string name="not_allowed"> - Nie masz pozwolenia na zobaczenie tej notki. - </string> + <button label="Zapisz" label_selected="Zapisz" name="Save"/> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_preview_sound.xml b/indra/newview/skins/default/xui/pl/floater_preview_sound.xml index 656b9bec38..d02b3ca75e 100644 --- a/indra/newview/skins/default/xui/pl/floater_preview_sound.xml +++ b/indra/newview/skins/default/xui/pl/floater_preview_sound.xml @@ -1,12 +1,11 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="preview_sound"> + <floater.string name="Title"> + Dźwięk: [NAME] + </floater.string> <text name="desc txt"> Opis: </text> - <button label="Odtwarzaj Lokalnie" label_selected="Odtwarzaj Lokalnie" - name="Sound audition btn" - tool_tip="Dźwięk będzie słyszalny tylko dla Ciebie." /> - <button label="Odtwarzaj w Świecie" label_selected="Odtwarzaj w Świecie" - name="Sound play btn" - tool_tip="Dźwięk będzie słyszalny przez wszystkich." width="130" left_delta="-136"/> + <button label="Odtwarzaj" label_selected="Odtwarzaj" left_delta="-136" name="Sound play btn" tool_tip="Dźwięk będzie słyszalny przez wszystkich." width="130"/> + <button label="Odtwarzaj Lokalnie" label_selected="Odtwarzaj lokalnie" name="Sound audition btn" tool_tip="Dźwięk będzie słyszalny tylko dla Ciebie."/> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_preview_texture.xml b/indra/newview/skins/default/xui/pl/floater_preview_texture.xml index 8bcd800411..e58acee139 100644 --- a/indra/newview/skins/default/xui/pl/floater_preview_texture.xml +++ b/indra/newview/skins/default/xui/pl/floater_preview_texture.xml @@ -1,9 +1,47 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="preview_texture"> + <floater.string name="Title"> + Tekstura: [NAME] + </floater.string> + <floater.string name="Copy"> + Kopiuj do Szafy + </floater.string> <text name="desc txt"> Opis: </text> <text name="dimensions"> - Wymiary: [WIDTH] x [HEIGHT] + [WIDTH]px x [HEIGHT]px </text> + <text name="aspect_ratio"> + Zobacz proporcje + </text> + <combo_box name="combo_aspect_ratio" tool_tip="Wyświetl w domyślnych proporcjach"> + <combo_item name="Unconstrained"> + Swobodny + </combo_item> + <combo_item name="1:1" tool_tip="Insygnia Grupy lub realny Profil"> + 1:1 + </combo_item> + <combo_item name="4:3" tool_tip="[SECOND_LIFE] profil"> + 4:3 + </combo_item> + <combo_item name="10:7" tool_tip="Reklamy i atrakcje, landmarki"> + 10:7 + </combo_item> + <combo_item name="3:2" tool_tip="O Posiadłości"> + 3:2 + </combo_item> + <combo_item name="16:10"> + 16:10 + </combo_item> + <combo_item name="16:9" tool_tip="Lubię"> + 16:9 + </combo_item> + <combo_item name="2:1"> + 2:1 + </combo_item> + </combo_box> + <button label="OK" name="Keep"/> + <button label="Wyrzuć" name="Discard"/> + <button label="Zapisz jako" name="save_tex_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_publish_classified.xml b/indra/newview/skins/default/xui/pl/floater_publish_classified.xml new file mode 100644 index 0000000000..12cda04e10 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/floater_publish_classified.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="publish_classified" title="Publikowanie Reklam"> + <text name="explanation_text"> + Twoja reklama zostanie wyświetlana przez okres jednego tygodnia od daty jej publikacji. + +Pamiętaj, opłaty za reklamy nie podlegają prawu zwrotu. + </text> + <spinner label="Cena za Reklamę:" name="price_for_listing" tool_tip="Cena za umieszczenie reklamy w wyszukiwarce." value="50"/> + <text name="l$_text" value="L$"/> + <text name="more_info_text"> + Więcej info (link do pomocy) + </text> + <button label="Publikuj" name="publish_btn"/> + <button label="Anuluj" name="cancel_btn"/> +</floater> diff --git a/indra/newview/skins/default/xui/pl/floater_region_info.xml b/indra/newview/skins/default/xui/pl/floater_region_info.xml index ca3c1391db..a1f7785f48 100644 --- a/indra/newview/skins/default/xui/pl/floater_region_info.xml +++ b/indra/newview/skins/default/xui/pl/floater_region_info.xml @@ -1,2 +1,2 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="regioninfo" title="REGION/MAJĄTEK" /> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="regioninfo" title="REGION/MAJĄTEK"/> diff --git a/indra/newview/skins/default/xui/pl/floater_report_abuse.xml b/indra/newview/skins/default/xui/pl/floater_report_abuse.xml index 18ce1b230f..a6f8ba6c11 100644 --- a/indra/newview/skins/default/xui/pl/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/pl/floater_report_abuse.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater_report_abuse" title="RAPORT O NADUŻYCIU"> <floater.string name="Screenshot"> - Zdjęcie Ekranu + Zdjęcie ekranu </floater.string> <check_box label="Załącz zdjęcie do raportu" name="screen_check"/> <text name="reporter_title"> @@ -40,42 +40,42 @@ </text> <combo_box name="category_combo" tool_tip="Wybór kategorii - wybierz kategorię, której dotyczy raport"> <combo_box.item label="Wybierz Kategorię:" name="Select_category"/> - <combo_box.item label="Wiek > Udawanie Nieletniej Osoby" name="Age__Age_play"/> + <combo_box.item label="Wiek > Udawanie nieletniej osoby" name="Age__Age_play"/> <combo_box.item label="Wiek > Dorosły Rezydent w Teen Second Life" name="Age__Adult_resident_on_Teen_Second_Life"/> <combo_box.item label="Wiek > Nieletni Rezydent poza Teen Second Life" name="Age__Underage_resident_outside_of_Teen_Second_Life"/> - <combo_box.item label="Napaść > Strefa Militarna / Niebezpieczny Obszar" name="Assault__Combat_sandbox___unsafe_area"/> - <combo_box.item label="Napaść > Bezpieczny Obszar" name="Assault__Safe_area"/> - <combo_box.item label="Napaść > Obszar do Testowania Broni" name="Assault__Weapons_testing_sandbox"/> - <combo_box.item label="Handel > Niedostarczenie Produktu lub Usługi" name="Commerce__Failure_to_deliver_product_or_service"/> - <combo_box.item label="Naruszenie Prywatności > Dane Osobiste" name="Disclosure__Real_world_information"/> - <combo_box.item label="Ujawnienie > Monitorowanie Czatu" name="Disclosure__Remotely_monitoring chat"/> - <combo_box.item label="Ujawnienie > Dane z Second Life / Czatu / IM" name="Disclosure__Second_Life_information_chat_IMs"/> - <combo_box.item label="Zakłócanie Spokoju > Nieuczciwe Używanie Zasobów Regionu" name="Disturbing_the_peace__Unfair_use_of_region_resources"/> - <combo_box.item label="Zakłócanie Spokoju > Przesadnie Skryptowane Obiekty" name="Disturbing_the_peace__Excessive_scripted_objects"/> - <combo_box.item label="Zakłócanie Spokoju > Śmiecenie Obiektami" name="Disturbing_the_peace__Object_littering"/> - <combo_box.item label="Zakłócanie Spokoju > Ciągły Spam" name="Disturbing_the_peace__Repetitive_spam"/> - <combo_box.item label="Zakłócanie Spokoju > Nieporządany Spam Reklamowy" name="Disturbing_the_peace__Unwanted_advert_spam"/> + <combo_box.item label="Napaść > strefa militarna / niebezpieczny obszar" name="Assault__Combat_sandbox___unsafe_area"/> + <combo_box.item label="Napaść > nezpieczny obszar" name="Assault__Safe_area"/> + <combo_box.item label="Napaść > obszar do testowania broni" name="Assault__Weapons_testing_sandbox"/> + <combo_box.item label="Handel > niedostarczenie produktu lub usługi" name="Commerce__Failure_to_deliver_product_or_service"/> + <combo_box.item label="Naruszenie prywatności > dane osobiste" name="Disclosure__Real_world_information"/> + <combo_box.item label="Ujawnienie > monitorowanie czatu" name="Disclosure__Remotely_monitoring chat"/> + <combo_box.item label="Ujawnienie > dane z Second Life / Czatu / IM" name="Disclosure__Second_Life_information_chat_IMs"/> + <combo_box.item label="Zakłócanie spokoju > nieuczciwe używanie zasobów Regionu" name="Disturbing_the_peace__Unfair_use_of_region_resources"/> + <combo_box.item label="Zakłócanie spokoju > przesadnie skryptowane obiekty" name="Disturbing_the_peace__Excessive_scripted_objects"/> + <combo_box.item label="Zakłócanie spokoju > śmiecenie obiektami" name="Disturbing_the_peace__Object_littering"/> + <combo_box.item label="Zakłócanie spokoju > ciągły spam" name="Disturbing_the_peace__Repetitive_spam"/> + <combo_box.item label="Zakłócanie spokoju > nieporządany spam reklamowy" name="Disturbing_the_peace__Unwanted_advert_spam"/> <combo_box.item label="Oszustwo > L$" name="Fraud__L$"/> <combo_box.item label="Oszustwo > Posiadłości" name="Fraud__Land"/> - <combo_box.item label="Oszustwo > Piramidy albo Listy Łańcuchowe" name="Fraud__Pyramid_scheme_or_chain_letter"/> + <combo_box.item label="Oszustwo > piramidy albo listy łańcuchowe" name="Fraud__Pyramid_scheme_or_chain_letter"/> <combo_box.item label="Oszustwo > US$" name="Fraud__US$"/> - <combo_box.item label="Prześladowanie > Farmy Reklamowe / Wizualny Spam" name="Harassment__Advert_farms___visual_spam"/> - <combo_box.item label="Prześladowanie > Zniesławianie Jedostek lub Grup" name="Harassment__Defaming_individuals_or_groups"/> - <combo_box.item label="Prześladowanie > Ograniczanie Ruchu" name="Harassment__Impeding_movement"/> - <combo_box.item label="Prześladowanie > Molestowanie Seksualne" name="Harassment__Sexual_harassment"/> - <combo_box.item label="Prześladowanie > Namawianie/Zachęcanie Innych do Łamania Warunków Umowy (ToS)" name="Harassment__Solicting_inciting_others_to_violate_ToS"/> + <combo_box.item label="Prześladowanie > farmy reklamowe / wizualny spam" name="Harassment__Advert_farms___visual_spam"/> + <combo_box.item label="Prześladowanie > zniesławianie jedostek lub grup" name="Harassment__Defaming_individuals_or_groups"/> + <combo_box.item label="Prześladowanie > Ograniczanie ruchu" name="Harassment__Impeding_movement"/> + <combo_box.item label="Prześladowanie > Molestowanie seksualne" name="Harassment__Sexual_harassment"/> + <combo_box.item label="Prześladowanie > Namawianie/Zachęcanie innych do łamania warunków umowy (ToS)" name="Harassment__Solicting_inciting_others_to_violate_ToS"/> <combo_box.item label="Prześladowanie > Znieważanie Słowne" name="Harassment__Verbal_abuse"/> - <combo_box.item label="Nieprzyzwoitość > Obraźliwa Treść lub Postępowanie" name="Indecency__Broadly_offensive_content_or_conduct"/> - <combo_box.item label="Nieprzyzwoitość > Niestosowne Imię Awatara" name="Indecency__Inappropriate_avatar_name"/> - <combo_box.item label="Nieprzyzwoitość > Obraźliwa treść i postępowanie w regionie 'PG'" name="Indecency__Mature_content_in_PG_region"/> - <combo_box.item label="Nieprzyzwoitość > Obraźliwa treść i postępowanie w regionie 'Mature'" name="Indecency__Inappropriate_content_in_Mature_region"/> - <combo_box.item label="Naruszenie Własności Intelektualnej > Usunięcie Treści" name="Intellectual_property_infringement_Content_Removal"/> - <combo_box.item label="Naruszenie Własności Intelektualnej > CopyBot albo Nadużycie Przywilejów" name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit"/> + <combo_box.item label="Nieprzyzwoitość > Obraźliwa treść lub postępowanie" name="Indecency__Broadly_offensive_content_or_conduct"/> + <combo_box.item label="Nieprzyzwoitość > Niestosowne imię awatara" name="Indecency__Inappropriate_avatar_name"/> + <combo_box.item label="Nieprzyzwoitość > Obraźliwa treść i postępowanie w Regionie 'PG'" name="Indecency__Mature_content_in_PG_region"/> + <combo_box.item label="Nieprzyzwoitość > Obraźliwa treść i postępowanie w Regionie 'Mature'" name="Indecency__Inappropriate_content_in_Mature_region"/> + <combo_box.item label="Naruszenie własności intelektualnej > usunięcie treści" name="Intellectual_property_infringement_Content_Removal"/> + <combo_box.item label="Naruszenie własności intelektualnej > CopyBot albo nadużycie przywilejów" name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit"/> <combo_box.item label="Nietolerancja" name="Intolerance"/> - <combo_box.item label="Posiadłości > Nadużywanie Piaskownicy" name="Land__Abuse_of_sandbox_resources"/> - <combo_box.item label="Posiadłości > Naruszenie > Obiekty/Tekstury" name="Land__Encroachment__Objects_textures"/> - <combo_box.item label="Posiadłości > Naruszenie > Cząsteczki" name="Land__Encroachment__Particles"/> - <combo_box.item label="Posiadłości > Naruszenie > Drzewa/Rośliny" name="Land__Encroachment__Trees_plants"/> + <combo_box.item label="Posiadłości > nadużywanie piaskownicy" name="Land__Abuse_of_sandbox_resources"/> + <combo_box.item label="Posiadłości > naruszenie > obiekty/tekstury" name="Land__Encroachment__Objects_textures"/> + <combo_box.item label="Posiadłości > naruszenie > cząsteczki" name="Land__Encroachment__Particles"/> + <combo_box.item label="Posiadłości > naruszenie > drzewa/rośliny" name="Land__Encroachment__Trees_plants"/> <combo_box.item label="Zakłady/Hazard" name="Wagering_gambling"/> <combo_box.item label="Inne" name="Other"/> </combo_box> diff --git a/indra/newview/skins/default/xui/pl/floater_script_debug_panel.xml b/indra/newview/skins/default/xui/pl/floater_script_debug_panel.xml new file mode 100644 index 0000000000..e70a30fa24 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/floater_script_debug_panel.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="script" short_title="[ALL SCRIPTS]" title="[ALL SCRIPTS]"/> diff --git a/indra/newview/skins/default/xui/pl/floater_script_limits.xml b/indra/newview/skins/default/xui/pl/floater_script_limits.xml new file mode 100644 index 0000000000..dd13d641a0 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/floater_script_limits.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="scriptlimits" title="SKRYPT"/> diff --git a/indra/newview/skins/default/xui/pl/floater_script_preview.xml b/indra/newview/skins/default/xui/pl/floater_script_preview.xml index e3e72e15a3..eb6a1df77b 100644 --- a/indra/newview/skins/default/xui/pl/floater_script_preview.xml +++ b/indra/newview/skins/default/xui/pl/floater_script_preview.xml @@ -1,5 +1,8 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="preview lsl text" title="SKRYPT: SKRYPT OBROTU"> + <floater.string name="Title"> + Skrypt: [NAME] + </floater.string> <text name="desc txt"> Opis: </text> diff --git a/indra/newview/skins/default/xui/pl/floater_script_queue.xml b/indra/newview/skins/default/xui/pl/floater_script_queue.xml index 7655f5fcac..bdfdba569e 100644 --- a/indra/newview/skins/default/xui/pl/floater_script_queue.xml +++ b/indra/newview/skins/default/xui/pl/floater_script_queue.xml @@ -1,4 +1,19 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="queue" title="ZRESETUJ PRACĘ W TOKU"> - <button label="Zamknij" label_selected="Zamknij" name="close" /> + <floater.string name="Starting"> + Rozpoczęcie [START] [COUNT] elementów. + </floater.string> + <floater.string name="Done"> + Wykonane. + </floater.string> + <floater.string name="Resetting"> + Trwa resetowanie + </floater.string> + <floater.string name="Running"> + Skrypt działa + </floater.string> + <floater.string name="NotRunning"> + Skrypt nie działa + </floater.string> + <button label="Zamknij" label_selected="Zamknij" name="close"/> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_script_search.xml b/indra/newview/skins/default/xui/pl/floater_script_search.xml index 255ab4264c..cb010daee4 100644 --- a/indra/newview/skins/default/xui/pl/floater_script_search.xml +++ b/indra/newview/skins/default/xui/pl/floater_script_search.xml @@ -1,10 +1,9 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="script search" title="SZUKAJ SKRYPTU"> - <check_box label="CapsLoock Nieaktywny" name="case_text" /> - <button label="Szukaj" label_selected="Szukaj" name="search_btn" /> - <button label="Zamień" label_selected="Zamień" name="replace_btn" /> - <button label="Zamień Wszystko" label_selected="Zamień Wszystko" - name="replace_all_btn" /> + <check_box label="CapsLoock nieaktywny" name="case_text"/> + <button label="Szukaj" label_selected="Szukaj" name="search_btn"/> + <button label="Zamień" label_selected="Zamień" name="replace_btn"/> + <button label="Zamień Wszystko" label_selected="Zamień wszystko" name="replace_all_btn"/> <text name="txt"> Szukaj </text> diff --git a/indra/newview/skins/default/xui/pl/floater_search.xml b/indra/newview/skins/default/xui/pl/floater_search.xml new file mode 100644 index 0000000000..a0198670e4 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/floater_search.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_search" title="SZUKAJ"> + <floater.string name="loading_text"> + Ładowanie... + </floater.string> + <floater.string name="done_text"> + Wykonano + </floater.string> + <layout_stack name="stack1"> + <layout_panel name="browser_layout"> + <text name="refresh_search"> + Ustaw wyszukiwanie na odzwierciedlanie poziomu boskiego + </text> + </layout_panel> + </layout_stack> +</floater> diff --git a/indra/newview/skins/default/xui/pl/floater_select_key.xml b/indra/newview/skins/default/xui/pl/floater_select_key.xml index cf0abb2c23..190ad61352 100644 --- a/indra/newview/skins/default/xui/pl/floater_select_key.xml +++ b/indra/newview/skins/default/xui/pl/floater_select_key.xml @@ -2,6 +2,6 @@ <floater name="modal container" title=""> <button label="Anuluj" label_selected="Anuluj" name="Cancel"/> <text name="Save item as:"> - Naciśnij by uruchomić przycisk mówienia. + Naciśnij klawisz aby ustawić przełącznik Mówić. </text> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_sell_land.xml b/indra/newview/skins/default/xui/pl/floater_sell_land.xml index a306ec2c34..eb1ed74797 100644 --- a/indra/newview/skins/default/xui/pl/floater_sell_land.xml +++ b/indra/newview/skins/default/xui/pl/floater_sell_land.xml @@ -1,62 +1,65 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="sell land" title="SELL LAND"> - <scroll_container name="profile_scroll"> - <panel name="scroll_content_panel"> - <text name="info_parcel_label"> - Posiadłość: - </text> - <text name="info_parcel"> - NAZWA POSIADŁOŚCI - </text> - <text name="info_size_label"> - Obszar: - </text> - <text name="info_size"> - [AREA] m. - </text> - <text name="info_action"> - Aby sprzedać tą Posiadłość: - </text> - <text name="price_label"> - Ustal cenę: - </text> - <text name="price_text"> - Wybierz właściwą cenę za tą Posiadłość. - </text> - <text name="price_ld"> - L$ - </text> - <text name="price_per_m"> - ([PER_METER]L$ za metr) - </text> - <text name="sell_to_label"> - Kupiec: - </text> - <text name="sell_to_text"> - Wybierz sprzedaż dla kogokolwiek albo dla wybranego kupca. - </text> - <combo_box name="sell_to"> - <combo_box.item name="--selectone--" label="wybierz --" /> - <combo_box.item name="Anyone" label="Ktokolwiek" /> - <combo_box.item name="Specificuser:" label="Wybrany kupiec:" /> - </combo_box> - <button label="Wybierz..." name="sell_to_select_agent" /> - <text name="sell_objects_label"> - Obiekty sprzedawane razem z Posiadłością? - </text> - <text name="sell_objects_text"> - Przekazywalne obiekty właściciela Posiadłości zmienią właściciela. - </text> - <radio_group name="sell_objects"> - <radio_item name="no" label="Nie, zatrzymaj obiekty" /> - <radio_item name="yes" label="Tak, sprzedaj obiekty razem z Posiadłością" /> - </radio_group> - <button label="Pokaż Obiekty" name="show_objects" /> - <text name="nag_message_label"> - PAMIĘTAJ: Sprzedaż jest nieodwracalna. - </text> - <button label="Wystaw Ziemię na Sprzedaż" name="sell_btn" /> - <button label="Anuluj" name="cancel_btn" /> - </panel> - </scroll_container> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="sell land" title="SPRZEDAJ POSIADŁOŚĆ"> + <scroll_container name="profile_scroll"> + <panel name="scroll_content_panel"> + <text name="info_parcel_label"> + Posiadłość: + </text> + <text name="info_parcel"> + NAZWA POSIADŁOŚCI + </text> + <text name="info_size_label"> + Rozmiar: + </text> + <text name="info_size"> + [AREA] m² + </text> + <text name="info_action"> + Aby sprzedać tą Posiadłość: + </text> + <text name="price_label"> + 1. Ustal cenę: + </text> + <text name="price_text"> + Wybierz właściwą cenę za tą Posiadłość. + </text> + <text name="price_ld"> + L$ + </text> + <line_editor name="price"> + 0 + </line_editor> + <text name="price_per_m"> + (L$[PER_METER] za m²) + </text> + <text name="sell_to_label"> + 2. Sprzedaj Posiadłość: + </text> + <text name="sell_to_text"> + Wybierz sprzedaż dla kogokolwiek albo dla wybranego kupca. + </text> + <combo_box name="sell_to"> + <combo_box.item label="- Wybierz -" name="--selectone--"/> + <combo_box.item label="Ktokolwiek" name="Anyone"/> + <combo_box.item label="Wybrany Kupiec:" name="Specificuser:"/> + </combo_box> + <button label="Wybierz" name="sell_to_select_agent"/> + <text name="sell_objects_label"> + 3. Obiekty sprzedawane razem z Posiadłością? + </text> + <text name="sell_objects_text"> + Przekazywalne obiekty właściciela Posiadłości zmienią właściciela. + </text> + <radio_group name="sell_objects"> + <radio_item label="Nie, zatrzymaj obiekty" name="no"/> + <radio_item label="Tak, sprzedaj obiekty razem z Posiadłością" name="yes"/> + </radio_group> + <button label="Pokaż Obiekty" name="show_objects"/> + <text name="nag_message_label"> + PAMIĘTAJ: Sprzedaż jest nieodwracalna. + </text> + <button label="Wystaw ziemię na sprzedaż" name="sell_btn"/> + <button label="Anuluj" name="cancel_btn"/> + </panel> + </scroll_container> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_settings_debug.xml b/indra/newview/skins/default/xui/pl/floater_settings_debug.xml index f87e2edecc..7c29d52e7b 100644 --- a/indra/newview/skins/default/xui/pl/floater_settings_debug.xml +++ b/indra/newview/skins/default/xui/pl/floater_settings_debug.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="settings_debug" title="USTAWIENIA USUWANIA BŁĘDÓW"> - <combo_box name="boolean_combo"> - <combo_box.item name="TRUE" label="PRAWDA" /> - <combo_box.item name="FALSE" label="NIEPRAWDA" /> - </combo_box> - <color_swatch label="Kolor" name="color_swatch"/> +<floater name="settings_debug" title="USTAWIENIA DEBUGOWANIA"> + <radio_group name="boolean_combo"> + <radio_item label="PRAWDA" name="TRUE" value="prawda"/> + <radio_item label="NIEPRAWDA" name="FALSE" value=""/> + </radio_group> + <color_swatch label="Kolor" name="val_color_swatch"/> <spinner label="x" name="val_spinner_1"/> <spinner label="x" name="val_spinner_2"/> <spinner label="x" name="val_spinner_3"/> diff --git a/indra/newview/skins/default/xui/pl/floater_snapshot.xml b/indra/newview/skins/default/xui/pl/floater_snapshot.xml index c807087170..df4e5b43bc 100644 --- a/indra/newview/skins/default/xui/pl/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/pl/floater_snapshot.xml @@ -4,23 +4,23 @@ Lokacja zapisu </text> <radio_group label="Rodzaje zdjęć" name="snapshot_type_radio"> - <radio_item name="postcard" label="Wyślij (email) pocztówkę" /> - <radio_item name="texture" label="Załaduj do szafy ([AMOUNT]L$)" /> - <radio_item name="local" label="Zapisz na dysk" /> + <radio_item label="Email" name="postcard"/> + <radio_item label="Załaduj do Szafy (L$[AMOUNT])" name="texture"/> + <radio_item label="Zapisz na dysk" name="local"/> </radio_group> <text name="file_size_label"> - Rozmiar pliku: [SIZE] KB + [SIZE] KB </text> - <button label="Odśwież Zdjęcie" name="new_snapshot_btn"/> + <button label="Odśwież zdjęcie" name="new_snapshot_btn"/> <button label="Wyślij" name="send_btn"/> <button label="Załaduj (L$[AMOUNT])" name="upload_btn"/> <flyout_button label="Zapisz" name="save_btn" tool_tip="Zapisz zdjęcie na dysk"> - <flyout_button.item name="save_item" label="Zapisz"/> - <flyout_button.item name="saveas_item" label="Zapisz Jako..."/> + <flyout_button.item label="Zapisz" name="save_item"/> + <flyout_button.item label="Zapisz jako..." name="saveas_item"/> </flyout_button> <button label="Anuluj" name="discard_btn"/> - <button label="Więcej >>" name="more_btn" tool_tip="Ustawienia Zaawansowane"/> - <button label="<< Mniej" name="less_btn" tool_tip="Ustawienia Zaawansowane"/> + <button label="Więcej" name="more_btn" tool_tip="Zaawansowane"/> + <button label="Mniej" name="less_btn" tool_tip="Zaawansowane"/> <text name="type_label2"> Wymiar </text> @@ -28,45 +28,45 @@ Format </text> <combo_box label="Rozdzielczość" name="postcard_size_combo"> - <combo_box.item name="CurrentWindow" label="Obecne Okno" /> - <combo_box.item name="640x480" label="640x480" /> - <combo_box.item name="800x600" label="800x600" /> - <combo_box.item name="1024x768" label="1024x768" /> - <combo_box.item name="Custom" label="Wybierz" /> + <combo_box.item label="Obecne Okno" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + <combo_box.item label="Wybierz" name="Custom"/> </combo_box> <combo_box label="Rozdzielczość" name="texture_size_combo"> - <combo_box.item name="CurrentWindow" label="Obecne Okno" /> - <combo_box.item name="Small(128x128)" label="Mały (128x128)" /> - <combo_box.item name="Medium(256x256)" label="Średni (256x256)" /> - <combo_box.item name="Large(512x512)" label="Duży (512x512)" /> - <combo_box.item name="Custom" label="Wybierz" /> + <combo_box.item label="Obecne Okno" name="CurrentWindow"/> + <combo_box.item label="Mały (128x128)" name="Small(128x128)"/> + <combo_box.item label="Średni (256x256)" name="Medium(256x256)"/> + <combo_box.item label="Duży (512x512)" name="Large(512x512)"/> + <combo_box.item label="Wybierz" name="Custom"/> </combo_box> <combo_box label="Rozdzielczość" name="local_size_combo"> - <combo_box.item name="CurrentWindow" label="Obecne Okno" /> - <combo_box.item name="320x240" label="320x240" /> - <combo_box.item name="640x480" label="640x480" /> - <combo_box.item name="800x600" label="800x600" /> - <combo_box.item name="1024x768" label="1024x768" /> - <combo_box.item name="1280x1024" label="1280x1024" /> - <combo_box.item name="1600x1200" label="1600x1200" /> - <combo_box.item name="Custom" label="Wybierz" /> + <combo_box.item label="Obecne Okno" name="CurrentWindow"/> + <combo_box.item label="320x240" name="320x240"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + <combo_box.item label="1280x1024" name="1280x1024"/> + <combo_box.item label="1600x1200" name="1600x1200"/> + <combo_box.item label="Wybierz" name="Custom"/> </combo_box> <combo_box label="Format" name="local_format_combo"> - <combo_box.item name="PNG" label="PNG" /> - <combo_box.item name="JPEG" label="JPEG" /> - <combo_box.item name="BMP" label="BMP" /> + <combo_box.item label="PNG" name="PNG"/> + <combo_box.item label="JPEG" name="JPEG"/> + <combo_box.item label="BMP" name="BMP"/> </combo_box> <spinner label="Szer." name="snapshot_width"/> <spinner label="Wys." name="snapshot_height"/> - <check_box label="Ograniczone Proporcje" name="keep_aspect_check"/> - <slider label="Jakość Zdjęcia" name="image_quality_slider"/> + <check_box label="Ograniczone proporcje" name="keep_aspect_check"/> + <slider label="Jakość zdjęcia" name="image_quality_slider"/> <text name="layer_type_label"> Zapisz: </text> <combo_box label="Warstwy Obrazu" name="layer_types"> - <combo_box.item name="Colors" label="Kolory" /> - <combo_box.item name="Depth" label="Głębokość" /> - <combo_box.item name="ObjectMattes" label="Obiekty Ślepe" /> + <combo_box.item label="Kolory" name="Colors"/> + <combo_box.item label="Głębokość" name="Depth"/> + <combo_box.item label="Obiekty ślepe" name="ObjectMattes"/> </combo_box> <check_box label="Pokaż interfejs na zdjęciu" name="ui_check"/> <check_box label="Pokaż obiekty HUD na zdjęciu" name="hud_check"/> diff --git a/indra/newview/skins/default/xui/pl/floater_sound_preview.xml b/indra/newview/skins/default/xui/pl/floater_sound_preview.xml index c66ac0a98f..ac041dff6a 100644 --- a/indra/newview/skins/default/xui/pl/floater_sound_preview.xml +++ b/indra/newview/skins/default/xui/pl/floater_sound_preview.xml @@ -7,5 +7,5 @@ Opis: </text> <button label="Anuluj" label_selected="Anuluj" name="cancel_btn"/> - <button label="Załaduj (L$[AMOUNT])" label_selected="Załaduj (L$[AMOUNT])" name="ok_btn"/> + <button label="Załaduj ([AMOUNT]L$)" label_selected="Załaduj ([AMOUNT]L$)" name="ok_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_stats.xml b/indra/newview/skins/default/xui/pl/floater_stats.xml index acd3df0585..ee5fba4d63 100644 --- a/indra/newview/skins/default/xui/pl/floater_stats.xml +++ b/indra/newview/skins/default/xui/pl/floater_stats.xml @@ -3,17 +3,17 @@ <scroll_container name="statistics_scroll"> <container_view name="statistics_view"> <stat_view label="Podstawowe" name="basic"> - <stat_bar label="Ilość Obrazów/Sec (FPS)" name="fps"/> + <stat_bar label="Ilość obrazów/sek (FPS)" name="fps"/> <stat_bar label="Przepustowość" name="bandwidth"/> - <stat_bar label="Stracone Pakiety" name="packet_loss"/> - <stat_bar label="Ping Sim" name="ping"/> + <stat_bar label="Stracone pakiety" name="packet_loss"/> + <stat_bar label="Ping sim" name="ping"/> </stat_view> <stat_view label="Zaawansowane" name="advanced"> <stat_view label="Renderuj" name="render"> <stat_bar label="KTris Drawn" name="ktrisframe"/> <stat_bar label="KTris Drawn" name="ktrissec"/> - <stat_bar label="Wszystkie Obiekty" name="objs"/> - <stat_bar label="Nowe Obiekty" name="newobjs"/> + <stat_bar label="Wszystkie obiekty" name="objs"/> + <stat_bar label="Nowe obiekty" name="newobjs"/> </stat_view> <stat_view label="Tekstura" name="texture"> <stat_bar label="Suma" name="numimagesstat"/> @@ -24,8 +24,8 @@ <stat_bar label="Bound Mem" name="glboundmemstat"/> </stat_view> <stat_view label="Sieć" name="network"> - <stat_bar label="Pakiety Wewnętrzne" name="packetsinstat"/> - <stat_bar label="Pakiety Zewnętrzne" name="packetsoutstat"/> + <stat_bar label="Pakiety wewnętrzne" name="packetsinstat"/> + <stat_bar label="Pakiety zewnętrzne" name="packetsoutstat"/> <stat_bar label="Obiekty" name="objectkbitstat"/> <stat_bar label="Tesktura" name="texturekbitstat"/> <stat_bar label="Asset" name="assetkbitstat"/> @@ -40,30 +40,30 @@ <stat_bar label="Ilość Obrazów/Sec na Symulatorze (Sim FPS)" name="simfps"/> <stat_bar label="Fizyka Obrazów/Sec" name="simphysicsfps"/> <stat_view label="Szczegóły Fizyki" name="physicsdetail"> - <stat_bar label="Pinned Objects" name="physicspinnedtasks"/> + <stat_bar label="Pinned objects" name="physicspinnedtasks"/> <stat_bar label="Niskie LOD Obiektów" name="physicslodtasks"/> - <stat_bar label="Alokacja Pamięci" name="physicsmemoryallocated"/> - <stat_bar label="Aktualizacja Agentów/Sec" name="simagentups"/> - <stat_bar label="Główni Agenci" name="simmainagents"/> - <stat_bar label="Child Agents" name="simchildagents"/> + <stat_bar label="Alokacja pamięci" name="physicsmemoryallocated"/> + <stat_bar label="Aktualizacja agentów/Sek" name="simagentups"/> + <stat_bar label="Główni agenci" name="simmainagents"/> + <stat_bar label="Child agents" name="simchildagents"/> <stat_bar label="Obiekty" name="simobjects"/> - <stat_bar label="Aktywne Obiekty" name="simactiveobjects"/> - <stat_bar label="Aktywne Skrypty" name="simactivescripts"/> - <stat_bar label="Wydarzenie Skryptowe" name="simscripteps"/> - <stat_bar label="Pakiety Wewnętrzne" name="siminpps"/> - <stat_bar label="Pakiety Zewnętrzne" name="simoutpps"/> - <stat_bar label="Oczekiwane na Pobranie" name="simpendingdownloads"/> - <stat_bar label="Oczekiwane na Załadowanie" name="simpendinguploads"/> - <stat_bar label="Wszystkie Niepotwierdzone Bity" name="simtotalunackedbytes"/> + <stat_bar label="Aktywne obiekty" name="simactiveobjects"/> + <stat_bar label="Aktywne skrypty" name="simactivescripts"/> + <stat_bar label="Wydarzenie skryptowe" name="simscripteps"/> + <stat_bar label="Pakiety wewnętrzne" name="siminpps"/> + <stat_bar label="Pakiety zewnętrzne" name="simoutpps"/> + <stat_bar label="Oczekiwane na pobranie" name="simpendingdownloads"/> + <stat_bar label="Oczekiwane na załadowanie" name="simpendinguploads"/> + <stat_bar label="Wszystkie niepotwierdzone bity" name="simtotalunackedbytes"/> </stat_view> <stat_view label="Czas (ms)" name="simperf"> - <stat_bar label="Całkowity Czas Obrazu" name="simframemsec"/> - <stat_bar label="Czas Sieciowy" name="simnetmsec"/> - <stat_bar label="Czas Fizyki" name="simsimphysicsmsec"/> - <stat_bar label="Czas Symulatora" name="simsimothermsec"/> - <stat_bar label="Czas Agenta" name="simagentmsec"/> - <stat_bar label="Czas Obrazu" name="simimagesmsec"/> - <stat_bar label="Czas Skryptu" name="simscriptmsec"/> + <stat_bar label="Całkowity czas obrazu" name="simframemsec"/> + <stat_bar label="Czas sieciowy" name="simnetmsec"/> + <stat_bar label="Czas fizyki" name="simsimphysicsmsec"/> + <stat_bar label="Czas symulatora" name="simsimothermsec"/> + <stat_bar label="Czas agenta" name="simagentmsec"/> + <stat_bar label="Czas obrazu" name="simimagesmsec"/> + <stat_bar label="Czas skryptu" name="simscriptmsec"/> </stat_view> </stat_view> </container_view> diff --git a/indra/newview/skins/default/xui/pl/floater_sys_well.xml b/indra/newview/skins/default/xui/pl/floater_sys_well.xml new file mode 100644 index 0000000000..e6c73af4f3 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/floater_sys_well.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="sys_well_window" title="ZAWIADOMIENIA"> + <string name="title_im_well_window"> + ROZMOWY + </string> + <string name="title_notification_well_window"> + ZAWIADOMIENIA + </string> +</floater> diff --git a/indra/newview/skins/default/xui/pl/floater_telehub.xml b/indra/newview/skins/default/xui/pl/floater_telehub.xml index 9f564452a9..32cc08810d 100644 --- a/indra/newview/skins/default/xui/pl/floater_telehub.xml +++ b/indra/newview/skins/default/xui/pl/floater_telehub.xml @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="telehub" title="OBSŁUGA TELEPORTERA" min_height="300" height="300" > +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater height="300" min_height="300" name="telehub" title="TELPORTER"> <text name="status_text_connected" width="250"> Teleporter połączony z obiektem [OBJECT] </text> @@ -12,20 +12,17 @@ <text name="help_text_not_connected"> Wybierz obiekt i kliknij Połącz z teleporterem </text> - <button label="Połącz z teleporterem" name="connect_btn" width="132" /> - <button label="Rozłącz" name="disconnect_btn" left="152" width="88"/> + <button label="Połącz z teleporterem" name="connect_btn" width="132"/> + <button label="Rozłącz" left="152" name="disconnect_btn" width="88"/> <text name="spawn_points_text" width="250"> - Punkty Składowe (pozycje - nie obiekty!): + Punkty składowe (pozycje - nie obiekty!): </text> - <button label="Dodaj Punkt" name="add_spawn_point_btn" /> - <button label="Usuń Punkt" name="remove_spawn_point_btn" /> + <button label="Dodaj punkt" name="add_spawn_point_btn"/> + <button label="Usuń punkt" name="remove_spawn_point_btn"/> <text name="spawn_point_help"> - Wybierz obiekt i wybierz Dodaj by sprecyzować -pozycję. Wówczas możesz przesunąć lub -usunąć obiekt. Pozycje są relatywne do części -centralnej teleportera. - -Wybierz obiekt z listy by zobaczyć jego pozycję -w świecie. + Wybierz obiekt i wybierz "Dodaj" by sprecyzować pozycję. +Możesz przesunąć lub usunąć obiekt. +Pozycje są relatywne do części centralnej teleportera. +Wybierz obiekt z listy by zobaczyć jego pozycję w świecie. </text> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/pl/floater_texture_ctrl.xml index 011dc8ee7c..52c0cb8a93 100644 --- a/indra/newview/skins/default/xui/pl/floater_texture_ctrl.xml +++ b/indra/newview/skins/default/xui/pl/floater_texture_ctrl.xml @@ -4,7 +4,7 @@ Kliknij by wybrać obraz </string> <text name="Multiple"> - Wiele Tekstur + Wiele tekstur </text> <text name="unknown"> Rozmiar: [DIMENSIONS] @@ -12,12 +12,12 @@ <button label="Domyślna" label_selected="Domyślna" name="Default"/> <button label="Żadna" label_selected="Żadna" name="None"/> <button label="Pusta" label_selected="Pusta" name="Blank"/> - <check_box label="Pokaż Foldery" name="show_folders_check"/> - <search_editor label="Filtruj Tektury" name="inventory search editor"/> + <check_box label="Pokaż foldery" name="show_folders_check"/> + <search_editor label="Filtruj tektury" name="inventory search editor"/> <check_box label="Zastosuj teraz" name="apply_immediate_check"/> <button label="" label_selected="" name="Pipette"/> <button label="Anuluj" label_selected="Anuluj" name="Cancel"/> - <button label="Ok" label_selected="Ok" name="Select"/> + <button label="OK" label_selected="OK" name="Select"/> <string name="pick title"> Wybór: </string> diff --git a/indra/newview/skins/default/xui/pl/floater_tools.xml b/indra/newview/skins/default/xui/pl/floater_tools.xml index e898c283c5..5bc3811ef6 100644 --- a/indra/newview/skins/default/xui/pl/floater_tools.xml +++ b/indra/newview/skins/default/xui/pl/floater_tools.xml @@ -1,45 +1,81 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="toolbox floater" title="" short_title="BUDUJ"> +<floater name="toolbox floater" short_title="BUDUJ" title=""> + <floater.string name="status_rotate"> + Przeciągaj kolorowe pierścienie żeby obracać obiekt + </floater.string> + <floater.string name="status_scale"> + Kliknij i przeciągaj żeby rozciągnąć wybraną stronę + </floater.string> + <floater.string name="status_move"> + Wybierz opcję: + </floater.string> + <floater.string name="status_modifyland"> + Kliknij i przytrzymaj żeby modyfikować teren + </floater.string> + <floater.string name="status_camera"> + Kliknij i przeciągnij żeby zmienić widok + </floater.string> + <floater.string name="status_grab"> + Przeciągnij by przesunąć, wybierz Ctrl by podnieść, wybierz Ctrl-Shift by obrócić + </floater.string> + <floater.string name="status_place"> + Kliknij in-world by zacząć budować + </floater.string> + <floater.string name="status_selectland"> + Edytowanie Terenu: + </floater.string> + <floater.string name="grid_screen_text"> + Widok + </floater.string> + <floater.string name="grid_local_text"> + Lokalna + </floater.string> + <floater.string name="grid_world_text"> + Świat + </floater.string> + <floater.string name="grid_reference_text"> + Względa + </floater.string> + <floater.string name="grid_attachment_text"> + Załączniki + </floater.string> <button label="" label_selected="" name="button focus" tool_tip="Zbliżenie"/> <button label="" label_selected="" name="button move" tool_tip="Przesunięcie"/> <button label="" label_selected="" name="button edit" tool_tip="Edycja"/> <button label="" label_selected="" name="button create" tool_tip="Stwórz"/> <button label="" label_selected="" name="button land" tool_tip="Teren"/> + <text name="text status"> + Przeciągnij żeby przenieść, shift-przeciągnij żeby skopiować + </text> <radio_group name="focus_radio_group"> <radio_item label="Zbliżenie" name="radio zoom"/> <radio_item label="Obracanie (Ctrl)" name="radio orbit"/> - <radio_item label="Przesunięcie (Ctrl-Shift)" name="radio pan"/> + <radio_item label="Przesunięcie (Ctrl+Shift)" name="radio pan"/> </radio_group> <radio_group name="move_radio_group"> <radio_item label="Przesuń" name="radio move"/> <radio_item label="Podnieś (Ctrl)" name="radio lift"/> - <radio_item label="Obróć (Ctrl-Shift)" name="radio spin"/> + <radio_item label="Obracanie (Ctrl+Shift)" name="radio spin"/> </radio_group> <radio_group name="edit_radio_group"> - <radio_item label="Pozycja" name="radio position"/> + <radio_item label="Przesuń" name="radio position"/> <radio_item label="Obróć (Ctrl)" name="radio rotate"/> - <radio_item label="Rozciągnij (Ctrl-Shift)" name="radio stretch"/> - <radio_item label="Wybierz Teksturę" name="radio select face"/> + <radio_item label="Rozciągnij (Ctrl+Shift)" name="radio stretch"/> + <radio_item label="Wybierz teksturę" name="radio select face"/> </radio_group> - <check_box label="Edytuj Połączone Części" name="checkbox edit linked parts"/> - <text name="text ruler mode"> - Linijka: + <check_box label="Edytuj połączone części" name="checkbox edit linked parts"/> + <text name="RenderingCost" tool_tip="Pokazuje koszt renderowania tego obiektu"> + þ: [COUNT] </text> - <combo_box name="combobox grid mode"> - <combo_box.item name="World" label="Świat" - /> - <combo_box.item name="Local" label="Lokalna" - /> - <combo_box.item name="Reference" label="Względna" - /> - </combo_box> <check_box label="Rozciągnij 2 Strony" name="checkbox uniform"/> - <check_box label="Rozciągnij Teksturę" name="checkbox stretch textures"/> - <check_box label="Użyj Siatki" name="checkbox snap to grid"/> - <button label="Opcje..." label_selected="Opcje..." name="Options..."/> - <text name="text status"> - Przeciągnij żeby przenieść, shift-przeciągnij żeby skopiować - </text> + <check_box initial_value="true" label="Rozciągnij Teksturę" name="checkbox stretch textures"/> + <check_box initial_value="true" label="Użyj siatki" name="checkbox snap to grid"/> + <combo_box name="combobox grid mode" tool_tip="Wybierz rodzaj linijki siatki dla pozycjonowania obiektu"> + <combo_box.item label="Świat" name="World"/> + <combo_box.item label="Lokalna" name="Local"/> + <combo_box.item label="Względna" name="Reference"/> + </combo_box> + <button label="Opcje..." label_selected="Opcje..." name="Options..." tool_tip="Więcej opcji siatki"/> <button label="" label_selected="" name="ToolCube" tool_tip="Sześcian"/> <button label="" label_selected="" name="ToolPrism" tool_tip="Graniastosłup"/> <button label="" label_selected="" name="ToolPyramid" tool_tip="Ostrosłup"/> @@ -57,7 +93,7 @@ <button label="" label_selected="" name="ToolGrass" tool_tip="Trawa"/> <check_box label="Trzymaj zaznaczone" name="checkbox sticky"/> <check_box label="Kopiuj zaznaczone" name="checkbox copy selection"/> - <check_box label="Środek" name="checkbox copy centers"/> + <check_box initial_value="true" label="Środek" name="checkbox copy centers"/> <check_box label="Obróć" name="checkbox copy rotates"/> <radio_group name="land_radio_group"> <radio_item label="Zaznaczanie" name="radio select land"/> @@ -68,7 +104,6 @@ <radio_item label="Fałdowanie" name="radio noise"/> <radio_item label="Cofnij modyfikację" name="radio revert"/> </radio_group> - <button label="Zastosuj" label_selected="Zastosuj" name="button apply to selection" tool_tip="Modyfikuj zaznaczony teren"/> <text name="Bulldozer:"> Burzenie: </text> @@ -78,15 +113,52 @@ <text name="Strength:"> Siła </text> - <volume_slider name="slider force"/> + <slider_bar initial_value="0.00" name="slider force"/> + <button label="Zastosuj" label_selected="Zastosuj" name="button apply to selection" tool_tip="Modyfikuj zaznaczony teren"/> <text name="obj_count"> - Wybrane obiekty: [COUNT] + Obiekty: [COUNT] </text> <text name="prim_count"> - primy: [COUNT] + Primy: [COUNT] </text> <tab_container name="Object Info Tabs"> <panel label="Ogólne" name="General"> + <panel.string name="text deed continued"> + Przypisz + </panel.string> + <panel.string name="text deed"> + Przypisz + </panel.string> + <panel.string name="text modify info 1"> + Możesz modyfikować ten obiekt + </panel.string> + <panel.string name="text modify info 2"> + Możesz modyfikować te obiekty + </panel.string> + <panel.string name="text modify info 3"> + Nie możesz modyfikować tego obiektu + </panel.string> + <panel.string name="text modify info 4"> + Nie możesz modyfikować tych obiektów + </panel.string> + <panel.string name="text modify warning"> + Musisz zaznaczyć cały obiekt by ustawić prawa. + </panel.string> + <panel.string name="Cost Default"> + Cena: L$ + </panel.string> + <panel.string name="Cost Total"> + Cena całkowita: L$ + </panel.string> + <panel.string name="Cost Per Unit"> + Cena za: L$ + </panel.string> + <panel.string name="Cost Mixed"> + Cena mieszana + </panel.string> + <panel.string name="Sale Mixed"> + Sprzedaż mieszana + </panel.string> <text name="Name:"> Nazwa: </text> @@ -101,133 +173,74 @@ <text name="Creator Name"> Thrax Linden </text> - <button label="Profil..." label_selected="Profil..." name="button creator profile"/> <text name="Owner:"> Właściciel: </text> <text name="Owner Name"> Thrax Linden </text> - <button label="Profil..." label_selected="Profil..." name="button owner profile"/> <text name="Group:"> Grupa: </text> - <text name="Group Name Proxy"> - The Lindens - </text> - <button label="Ustaw..." label_selected="Ustaw..." name="button set group"/> - <text name="Permissions:"> - Prawa: - </text> - - <check_box label="Udostępnij grupie" name="checkbox share with group" tool_tip="Pozwól członkom grupy przesuwać, modyfikować, kopiować i usuwać."/> - <string name="text deed continued"> - Przypisz... - </string> - <string name="text deed"> - Przypisz - </string> - <button label="Przypisz..." label_selected="Przypisz..." name="button deed" tool_tip=""/> - <check_box label="Pozwól przesuwać każdemu" name="checkbox allow everyone move"/> - <check_box label="Pozwól kopiować każdemu" name="checkbox allow everyone copy"/> - <check_box label="Pokaż w wyszukiwarce" name="search_check" tool_tip="Udostępnij wyświetlanie się tego przedmiotu w wynikach wyszukiwania"/> - <check_box label="Na Sprzedaż" name="checkbox for sale"/> - <text name="Cost"> - Cena: L$ + <button label="Ustaw..." label_selected="Ustaw..." name="button set group" tool_tip="Wybierz grupę, która uzyska dostęp do praw obiektu"/> + <name_box initial_value="Ładowanie..." name="Group Name Proxy"/> + <button label="Przypisz" label_selected="Przypisz" name="button deed" tool_tip="Przypisanie oddaje prawa następnemu właścicielowi. Obiekty posiadane przez grupę mogą zostać przypisane przez oficera grupy."/> + <check_box label="Udostępnij" name="checkbox share with group" tool_tip="Pozwól członkom grupy na dzielenie praw do modyfikacji tego obiektu. Musisz przypisać obiekt aby uaktywnić ograniczenia dla ról."/> + <text name="label click action"> + Kliknij: </text> - <line_editor name="Edit Cost"/> + <combo_box name="clickaction"> + <combo_box.item label="Dotknij (domyślne)" name="Touch/grab(default)"/> + <combo_box.item label="Usiądź na obiekcie" name="Sitonobject"/> + <combo_box.item label="Kup obiekt" name="Buyobject"/> + <combo_box.item label="Zapłać obiektowi" name="Payobject"/> + <combo_box.item label="Otwórz" name="Open"/> + <combo_box.item label="Przybliż" name="Zoom"/> + </combo_box> + <check_box label="Na sprzedaż:" name="checkbox for sale"/> <combo_box name="sale type"> <combo_box.item label="Kopia" name="Copy"/> <combo_box.item label="Zawartość" name="Contents"/> <combo_box.item label="Orginał" name="Original"/> </combo_box> - - <text name="label click action"> - Lewe Kliknięcie: - </text> - <combo_box name="clickaction"> - <combo_box.item name="Touch/grab(default)" label="Dotknij (domyślne)" - /> - <combo_box.item name="Sitonobject" label="Usiądź na Obiekcie" - /> - <combo_box.item name="Buyobject" label="Kup Obiekt" - /> - <combo_box.item name="Payobject" label="Zapłać Obiektowi" - /> - <combo_box.item name="Open" label="Otwórz" - /> - <combo_box.item name="Play" label="Odtwarzaj Media" - /> - <combo_box.item name="Opemmedia" label="Otwrórz Media" - /> - </combo_box> - <panel name="perms_build"> - <text name="perm_modify"> - Nie masz prawda do modyfikacji tego obiektu - </text> - <text name="B:"> - B: - </text> - <text name="O:"> - O: - </text> - <text name="G:"> - G: - </text> - <text name="E:"> - E: - </text> - <text name="N:"> - N: - </text> - <text name="F:"> - F: - </text> - <text name="Next owner can:"> - Następny właściciel: - </text> - <check_box label="Zmienia" name="checkbox next owner can modify"/> - <check_box label="Kopiuje" name="checkbox next owner can copy"/> - <check_box name="checkbox next owner can transfer"/> - </panel> - <string name="text modify info 1"> - Możesz modyfikować ten obiekt - </string> - <string name="text modify info 2"> - Możesz modyfikować te obiekty - </string> - <string name="text modify info 3"> - Nie możesz modyfikować tego obiektu - </string> - <string name="text modify info 4"> - Nie możesz modyfikować tych obieków - </string> - <string name="text modify warning"> - Musisz zaznaczyć cały obiekt by ustawić prawa - </string> - <string name="Cost Default"> - Cena: L$ - </string> - <string name="Cost Total"> - Cena Całości: L$ - </string> - <string name="Cost Per Unit"> - Cena Za: L$ - </string> - <string name="Cost Mixed"> - Cena Mieszana - </string> - <string name="Sale Mixed"> - Sprzedaż Mieszana - </string> + <spinner label="Cena: L$" name="Edit Cost"/> + <check_box label="Pokaż w wyszukiwarce" name="search_check" tool_tip="Udostępnij wyświetlanie się tego przedmiotu w wynikach wyszukiwania"/> + <panel name="perms_build"> + <text name="perm_modify"> + Możesz modyfikować ten obiekt + </text> + <text name="Anyone can:"> + Każdy: + </text> + <check_box label="Przesuń" name="checkbox allow everyone move"/> + <check_box label="Kopiuj" name="checkbox allow everyone copy"/> + <text name="Next owner can:"> + Następny Właściciel: + </text> + <check_box label="Zmienia" name="checkbox next owner can modify"/> + <check_box label="Kopiuje" name="checkbox next owner can copy"/> + <check_box label="Oddaje/Sprzedaje" name="checkbox next owner can transfer" tool_tip="Następny Właściciel może oddawać lub sprzedawać ten obiekt"/> + <text name="B:"> + B: + </text> + <text name="O:"> + O: + </text> + <text name="G:"> + G: + </text> + <text name="E:"> + E: + </text> + <text name="N:"> + N: + </text> + <text name="F:"> + F: + </text> + </panel> </panel> <panel label="Obiekt" name="Object"> - <text name="select_single"> - Wybierz tylko jeden element by edytować jego parametry - </text> - <text name="edit_object"> - Edytuj parametry obiektu: - </text> <check_box label="Zablokowany" name="checkbox locked" tool_tip="Chroni obiekty przed ich przesunięciem lub usunięciem. Pomocne także w czasie budowania by uniknąc niepotrzebnych edycji."/> <check_box label="Fizyczny" name="Physical Checkbox Ctrl" tool_tip="Umożliwia obcność sił grawitacyjnych i oddziaływania pomiędzy obiektami."/> <check_box label="Tymczasowy" name="Temporary Checkbox Ctrl" tool_tip="Umożliwia usunięcie obiektu po 1 minucie od jego stworzenia."/> @@ -250,48 +263,27 @@ <spinner label="X" name="Rot X"/> <spinner label="Y" name="Rot Y"/> <spinner label="Z" name="Rot Z"/> - <text name="label material"> - Materiał - </text> - <combo_box name="material"> - <combo_box.item name="Stone" label="Kamień" - /> - <combo_box.item name="Metal" label="Metal" - /> - <combo_box.item name="Glass" label="Szkło" - /> - <combo_box.item name="Wood" label="Drewno" - /> - <combo_box.item name="Flesh" label="Ciało" - /> - <combo_box.item name="Plastic" label="Plastik" - /> - <combo_box.item name="Rubber" label="Guma" - /> - </combo_box> - <text name="label basetype"> - Rodzaj Bloku Budowalnego - </text> <combo_box name="comboBaseType"> - <combo_box.item name="Box" label="Klocek" - /> - <combo_box.item name="Cylinder" label="Walec" - /> - <combo_box.item name="Prism" label="Graniastosłup" - /> - <combo_box.item name="Sphere" label="Kula" - /> - <combo_box.item name="Torus" label="Torus" - /> - <combo_box.item name="Tube" label="Rura" - /> - <combo_box.item name="Ring" label="Pierścień" - /> - <combo_box.item name="Sculpted" label="Skulpty" - /> + <combo_box.item label="Klocek" name="Box"/> + <combo_box.item label="Walec" name="Cylinder"/> + <combo_box.item label="Graniastosłup" name="Prism"/> + <combo_box.item label="Kula" name="Sphere"/> + <combo_box.item label="Torus" name="Torus"/> + <combo_box.item label="Rura" name="Tube"/> + <combo_box.item label="Pierścień" name="Ring"/> + <combo_box.item label="Skulpty" name="Sculpted"/> + </combo_box> + <combo_box name="material"> + <combo_box.item label="Kamień" name="Stone"/> + <combo_box.item label="Metal" name="Metal"/> + <combo_box.item label="Szkło" name="Glass"/> + <combo_box.item label="Drewno" name="Wood"/> + <combo_box.item label="Ciało" name="Flesh"/> + <combo_box.item label="Plastik" name="Plastic"/> + <combo_box.item label="Guma" name="Rubber"/> </combo_box> <text name="text cut"> - Wykrój początek i koniec + Wykrój (początek/koniec) </text> <spinner label="P" name="cut begin"/> <spinner label="K" name="cut end"/> @@ -307,17 +299,13 @@ Kształt Wydrążenia </text> <combo_box name="hole"> - <combo_box.item name="Default" label="Domyślny" - /> - <combo_box.item name="Circle" label="Koło" - /> - <combo_box.item name="Square" label="Kwadrat" - /> - <combo_box.item name="Triangle" label="Trójkąt" - /> + <combo_box.item label="Domyślny" name="Default"/> + <combo_box.item label="Koło" name="Circle"/> + <combo_box.item label="Kwadrat" name="Square"/> + <combo_box.item label="Trójkąt" name="Triangle"/> </combo_box> <text name="text twist"> - Skręcenie + Skręcenie (początek/koniec) </text> <spinner label="P" name="Twist Begin"/> <spinner label="K" name="Twist End"/> @@ -325,23 +313,23 @@ Zwężenie </text> <text name="scale_hole"> - Rozmiar Wgłębienia + Rozmiar wgłębienia </text> <spinner label="X" name="Taper Scale X"/> <spinner label="Y" name="Taper Scale Y"/> <text name="text topshear"> - Przesunięcie Górne + Przesunięcie górne </text> <spinner label="X" name="Shear X"/> <spinner label="Y" name="Shear Y"/> <text name="advanced_cut"> - Wykrojenie Przekroju + Wykrojenie przekroju (początek/koniec) </text> <text name="advanced_dimple"> - Przesunięcie Promienia + Przesunięcie promienia (początek/koniec) </text> <text name="advanced_slice"> - Przetnij początek i koniec + Przetnij(początek/koniec) </text> <spinner label="P" name="Path Limit Begin"/> <spinner label="K" name="Path Limit End"/> @@ -358,23 +346,18 @@ </text> <spinner name="Radius Offset"/> <spinner name="Revolutions"/> - <texture_picker label="Tekstura Skulptowa" name="sculpt texture control" tool_tip="Click to choose a picture"/> - <check_box label="Odbicie" name="sculpt mirror control" tool_tip="Odwraca skulpt wzdłóż osi X."/> - <check_box label="Środek na zewnątrz" name="sculpt invert control" tool_tip="Odwarca normalne skulptu."/> + <texture_picker label="Tekstura skulptowa" name="sculpt texture control" tool_tip="Click to choose a picture"/> + <check_box label="Odbicie" name="sculpt mirror control" tool_tip="Odwraca skulpt wzdłuż osi X."/> + <check_box label="Środek na zewnątrz" name="sculpt invert control" tool_tip="Odwraca normalne skulptu."/> <text name="label sculpt type"> - Typ Ścięgna + Typ ścięgna </text> <combo_box name="sculpt type control"> - <combo_box.item name="None" label="(żadne)" - /> - <combo_box.item name="Sphere" label="Kula" - /> - <combo_box.item name="Torus" label="Torus" - /> - <combo_box.item name="Plane" label="Płaczyzna" - /> - <combo_box.item name="Cylinder" label="Walec" - /> + <combo_box.item label="(żadne)" name="None"/> + <combo_box.item label="Kula" name="Sphere"/> + <combo_box.item label="Torus" name="Torus"/> + <combo_box.item label="Płaszczyzna" name="Plane"/> + <combo_box.item label="Walec" name="Cylinder"/> </combo_box> </panel> <panel label="Atrybuty" name="Features"> @@ -384,7 +367,7 @@ <text name="edit_object"> Edytuj cechy obiektu: </text> - <check_box label="Elastyczność" name="Flexible1D Checkbox Ctrl" tool_tip=""/> + <check_box label="Elastyczność" name="Flexible1D Checkbox Ctrl" tool_tip="Elastyczność wzdłuż osi Z (tylko po stronie klienta)"/> <spinner label="Gładkość" name="FlexNumSections"/> <spinner label="Ciężar" name="FlexGravity"/> <spinner label="Drżenie" name="FlexFriction"/> @@ -394,124 +377,99 @@ <spinner label="Siła Y" name="FlexForceY"/> <spinner label="Siła Z" name="FlexForceZ"/> <check_box label="Światło" name="Light Checkbox Ctrl" tool_tip="Umożliwia emitajcę światła"/> - <text name="label color"> - Kolor - </text> - <color_swatch label="" name="colorswatch" tool_tip="Kliknij by wybrać kolor"/> + <color_swatch label="" name="colorswatch" tool_tip="Kliknij aby wybrać kolor"/> + <texture_picker label="" name="light texture control" tool_tip="Kliknij aby wybrać obraz (efekt występuje tylko z aktywowanym opóźnionym renderowaniem)"/> <spinner label="Siła" name="Light Intensity"/> + <spinner label="FOV" name="Light FOV"/> <spinner label="Promień" name="Light Radius"/> + <spinner label="Przybliżenie" name="Light Focus"/> <spinner label="Spadek" name="Light Falloff"/> + <spinner label="Otoczenie/Nastrój" name="Light Ambiance"/> </panel> <panel label="Tekstura" name="Texture"> + <panel.string name="string repeats per meter"> + Powtórzenia / m + </panel.string> + <panel.string name="string repeats per face"> + Powtórzenia + </panel.string> <texture_picker label="Tekstura" name="texture control" tool_tip="Kliknij by wybrać obraz"/> - <color_swatch label="Kolor" name="colorswatch" tool_tip="Kliknij by wybrać kolor"/> - <text name="color trans" left="170" width="99"> + <color_swatch label="Kolor" name="colorswatch" tool_tip="Kliknij aby wybrać kolor"/> + <text left="170" name="color trans" width="99"> Przezroczystość% </text> <spinner left="170" name="ColorTrans"/> - <text name="glow label" left="170"> + <text left="170" name="glow label"> Blask </text> <spinner left="170" name="glow"/> - <check_box label="Jaskrawość" name="checkbox fullbright" left="170"/> + <check_box label="Jaskrawość" left="170" name="checkbox fullbright"/> <text name="tex gen"> Mapowanie </text> <combo_box name="combobox texgen"> - <combo_box.item name="Default" label="Domyślne" - /> - <combo_box.item name="Planar" label="Planarne" - /> + <combo_box.item label="Domyślne" name="Default"/> + <combo_box.item label="Planarne" name="Planar"/> </combo_box> <text name="label shininess"> Połysk </text> <combo_box name="combobox shininess"> - <combo_box.item name="None" label="Żadny" - /> - <combo_box.item name="Low" label="Niski" - /> - <combo_box.item name="Medium" label="Średni" - /> - <combo_box.item name="High" label="Wysoki" - /> + <combo_box.item label="Żadny" name="None"/> + <combo_box.item label="Niski" name="Low"/> + <combo_box.item label="Średni" name="Medium"/> + <combo_box.item label="Wysoki" name="High"/> </combo_box> <text name="label bumpiness"> Powierzchnia </text> <combo_box name="combobox bumpiness"> - <combo_box.item name="None" label="Żadna" - /> - <combo_box.item name="Brightness" label="Najjaśniejsza" - /> - <combo_box.item name="Darkness" label="Najciemniejsza" - /> - <combo_box.item name="woodgrain" label="Drewniano-ziarnista" - /> - <combo_box.item name="bark" label="Kory Drzewa" - /> - <combo_box.item name="bricks" label="Cegieł" - /> - <combo_box.item name="checker" label="Planszy Szachowej" - /> - <combo_box.item name="concrete" label="Betonu" - /> - <combo_box.item name="crustytile" label="Płytki/Kafelki" - /> - <combo_box.item name="cutstone" label="Kamienia" - /> - <combo_box.item name="discs" label="Dysku CD" - /> - <combo_box.item name="gravel" label="Żwiru" - /> - <combo_box.item name="petridish" label="Skamieliny" - /> - <combo_box.item name="siding" label="Brzegu" - /> - <combo_box.item name="stonetile" label="Płytki Kamiennej" - /> - <combo_box.item name="stucco" label="Stucco" - /> - <combo_box.item name="suction" label="Suction" - /> - <combo_box.item name="weave" label="Fali" - /> + <combo_box.item label="Żadna" name="None"/> + <combo_box.item label="Najjaśniejsza" name="Brightness"/> + <combo_box.item label="Najciemniejsza" name="Darkness"/> + <combo_box.item label="Drewniano-ziarnista" name="woodgrain"/> + <combo_box.item label="Kory Drzewa" name="bark"/> + <combo_box.item label="Cegieł" name="bricks"/> + <combo_box.item label="Planszy Szachowej" name="checker"/> + <combo_box.item label="Betonu" name="concrete"/> + <combo_box.item label="Płytki/Kafelki" name="crustytile"/> + <combo_box.item label="Kamienia" name="cutstone"/> + <combo_box.item label="Dysku CD" name="discs"/> + <combo_box.item label="Żwiru" name="gravel"/> + <combo_box.item label="Skamieliny" name="petridish"/> + <combo_box.item label="Brzegu" name="siding"/> + <combo_box.item label="Płytki Kamiennej" name="stonetile"/> + <combo_box.item label="Stucco" name="stucco"/> + <combo_box.item label="Suction" name="suction"/> + <combo_box.item label="Fali" name="weave"/> </combo_box> <text name="tex scale"> - Ilość powtórzeń + Powtórzenia </text> <spinner label="Poziomo (U)" name="TexScaleU"/> <check_box label="Odwróć" name="checkbox flip s"/> <spinner label="Pionowo (V)" name="TexScaleV"/> <check_box label="Odwróć" name="checkbox flip t"/> - <text name="tex rotate"> - Obrót (stopnie) - </text> - <spinner name="TexRot"/> - <string name="string repeats per meter"> - Powtórzenia / m - </string> - <string name="string repeats per face"> - Powtórzenia - </string> - <text name="rpt"> - Powtórzenia / m - </text> - <spinner name="rptctrl"/> + <spinner label="Powtórzenia˚" name="TexRot"/> + <spinner label="Powtórzenia / metr" name="rptctrl"/> <button label="Zastosuj" label_selected="Zastosuj" name="button apply"/> <text name="tex offset"> - Dopasowanie + Wyrównanie tekstury </text> <spinner label="Poziome (U)" name="TexOffsetU"/> <spinner label="Pionowe (V)" name="TexOffsetV"/> - <text name="textbox autofix"> - Dopasuj Teksturę Mediów -(najpierw załaduj) - </text> - <button label="Dopasuj" label_selected="Dopasuj" name="button align" left="160"/> + <panel name="Add_Media"> + <text name="media_tex"> + Media + </text> + <button name="add_media" tool_tip="Dodaj media"/> + <button name="delete_media" tool_tip="Usuń tą teksturę mediów"/> + <button name="edit_media" tool_tip="Edytuj media"/> + <button label="Dodaj" label_selected="Dopasuj teksturę mediów" name="button align" tool_tip="Dodaj teksturę mediów (musi się najpierw załadować)"/> + </panel> </panel> <panel label="Treść" name="Contents"> - <button label="Nowy Skrypt" label_selected="Nowy Skrypt" name="button new script"/> + <button label="Nowy skrypt" label_selected="Nowy skrypt" name="button new script"/> <button label="Prawa" name="button permissions"/> </panel> </tab_container> @@ -520,62 +478,29 @@ Informacje o Posiadłości </text> <text name="label_area_price"> - Cena: L$[PRICE] za [AREA] m + Cena: L$[PRICE] za [AREA] m² </text> <text name="label_area"> - Obszar: [AREA] m + Obszar: [AREA] m² </text> - <button label="O Posiadłości..." label_selected="O Posiadłości..." name="button about land"/> - <check_box label="Pokaż Właścicieli" name="checkbox show owners" tool_tip="Pokoloruj posiadłości zgodnie z przynależnością do właściciela: Zielony = Twoja Posiadłość Morski = Posiadłość Twojej Grupy Czerwony = Posiadłości Innych Żółty = Na Sprzedaż Fioletowy = Na Aukcję Szary = Publiczna"/> - <button label="?" label_selected="?" name="button show owners help" left_delta="120"/> + <button label="O Posiadłości" label_selected="O Posiadłości" name="button about land"/> + <check_box label="Pokaż Właścicieli" name="checkbox show owners" tool_tip="Pokoloruj Posiadłości zgodnie z przynależnością do Właściciela: + +Zielony = Twoja Posiadłość +Morski = Posiadłość Twojej Grupy +Czerwony = Posiadłości innych +Żółty = Na sprzedaż +Fioletowy = Na aukcję +Szary = Publiczna"/> <text name="label_parcel_modify"> Modyfikuj Posiadłość </text> <button label="Podziel" label_selected="Podziel" name="button subdivide land"/> <button label="Złącz" label_selected="Złącz" name="button join land"/> <text name="label_parcel_trans"> - Transakcje na posiadłości + Transakcje na Posiadłości </text> - <button label="Kup" label_selected="Kup" name="button buy land"/> - <button label="Anuluj" label_selected="Anuluj" name="button abandon land"/> + <button label="Kup Posiadłość" label_selected="Kup Posiadłość" name="button buy land"/> + <button label="Porzuć Posiadłość" label_selected="Porzuć Posiadłość" name="button abandon land"/> </panel> - <floater.string name="status_rotate"> - Przeciągaj kolorowe pierścienie żeby obracać obiekt - </floater.string> - <floater.string name="status_scale"> - Kliknij i przeciągaj żeby rozciągnąć wybraną stronę - </floater.string> - <floater.string name="status_move"> - Wybierz opcję: - </floater.string> - <floater.string name="status_modifyland"> - Kliknij i przytrzymaj żeby modyfikować teren - </floater.string> - <floater.string name="status_camera"> - Kliknij i przeciągnij żeby zmienić widok - </floater.string> - <floater.string name="status_grab"> - Przeciągnij by przesunąć, wybierz Ctrl by podnieść, wybierz Ctrl-Shift by obrócić - </floater.string> - <floater.string name="status_place"> - Kliknij in-world by zacząć budować - </floater.string> - <floater.string name="status_selectland"> - Edytowanie Terenu: - </floater.string> - <floater.string name="grid_screen_text"> - Widok - </floater.string> - <floater.string name="grid_local_text"> - Lokalna - </floater.string> - <floater.string name="grid_world_text"> - Świat - </floater.string> - <floater.string name="grid_reference_text"> - Względa - </floater.string> - <floater.string name="grid_attachment_text"> - Załączniki - </floater.string> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_top_objects.xml b/indra/newview/skins/default/xui/pl/floater_top_objects.xml index e7299b0abb..6afbce7e10 100644 --- a/indra/newview/skins/default/xui/pl/floater_top_objects.xml +++ b/indra/newview/skins/default/xui/pl/floater_top_objects.xml @@ -1,55 +1,56 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="top_objects" title="ŁADOWANIE..."> +<floater name="top_objects" title="Główne Obiekty"> + <floater.string name="top_scripts_title"> + Główne skrypty + </floater.string> + <floater.string name="top_scripts_text"> + [COUNT] skryptów działa w czasie [TIME] ms + </floater.string> + <floater.string name="scripts_score_label"> + Czas + </floater.string> + <floater.string name="scripts_mono_time_label"> + Mono Time + </floater.string> + <floater.string name="top_colliders_title"> + Główne kolizje + </floater.string> + <floater.string name="top_colliders_text"> + [COUNT] obiektów odczuwa działanie wielu potencjalnych kolizji + </floater.string> + <floater.string name="colliders_score_label"> + Wynik + </floater.string> + <floater.string name="none_descriptor"> + Nieodnalezione + </floater.string> <text name="title_text"> Ładowanie... </text> <scroll_list name="objects_list"> - <column label="Wynik" name="score"/> - <column label="Nazwa" name="name"/> - <column label="Właściciel" name="owner"/> - <column label="Miejsce" name="location"/> - <column label="Czas" name="time"/> - <column label="Mono Time" name="mono_time"/> + <scroll_list.columns label="Wynik" name="score"/> + <scroll_list.columns label="Nazwa" name="name"/> + <scroll_list.columns label="Właściciel" name="owner"/> + <scroll_list.columns label="Miejsce" name="location"/> + <scroll_list.columns label="Czas" name="time"/> + <scroll_list.columns label="Mono Time" name="mono_time"/> + <scroll_list.columns label="URL" name="URLs"/> </scroll_list> <text name="id_text"> - ID Obiektu: + ID obiektu: </text> - <button label="Pokaż Emitery" name="show_beacon_btn"/> + <button label="Pokaż emitery" name="show_beacon_btn"/> <text name="obj_name_text"> - Nazwa Obiektu: + Nazwa obiektu: </text> <button label="Filtr" name="filter_object_btn"/> <text name="owner_name_text"> - Owner Name: + Właściciel: </text> <button label="Filter" name="filter_owner_btn"/> - <button label="Zwróć Wybrane" name="return_selected_btn"/> - <button label="Zwróć Wszystko" name="return_all_btn"/> - <button label="Deaktywuj Wybrane" name="disable_selected_btn"/> - <button label="Deaktywuj Wszystko" name="disable_all_btn"/> <button label="Odśwież" name="refresh_btn"/> - <string name="top_scripts_title"> - Główne Skrypty - </string> - <string name="top_scripts_text"> - [COUNT] skryptów działa w czasie [TIME] ms - </string> - <string name="scripts_score_label"> - Czas - </string> - <string name="scripts_mono_time_label"> - Mono Time - </string> - <string name="top_colliders_title"> - Główne Kolizje - </string> - <string name="top_colliders_text"> - [COUNT] obiektów odczuwa działanie wielu potencjalnych kolizji - </string> - <string name="colliders_score_label"> - Wynik - </string> - <string name="none_descriptor"> - Nie odnalezione - </string> + <button label="Zwróć wybrane" name="return_selected_btn"/> + <button label="Zwróć wszystko" name="return_all_btn"/> + <button label="Deaktywuj wybrane" name="disable_selected_btn"/> + <button label="Deaktywuj wszystko" name="disable_all_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_tos.xml b/indra/newview/skins/default/xui/pl/floater_tos.xml index b9a146df22..6f71488347 100644 --- a/indra/newview/skins/default/xui/pl/floater_tos.xml +++ b/indra/newview/skins/default/xui/pl/floater_tos.xml @@ -1,11 +1,10 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="modal container" title=""> - <button label="Kontynuuj" label_selected="Kontynuuj" name="Continue" /> - <button label="Anuluj" label_selected="Anuluj" name="Cancel" /> - <check_box label="Zgadzam się na Warunki Serwisu (Terms of Service)" name="agree_chk" /> + <button label="Kontynuuj" label_selected="Kontynuuj" name="Continue"/> + <button label="Anuluj" label_selected="Anuluj" name="Cancel"/> + <check_box label="Zgadzam się na Warunki Serwisu (Terms of Service) i Politykę Prywatności (Privacy Policy)" name="agree_chk"/> <text name="tos_heading"> - Proszę dokładnie przeczytać następujące Warunki Serwisu (Terms of Service). Musisz -zaakceptować umowę żeby kontynuować logowanie do [SECOND_LIFE]. + Proszę dokładnie przeczytać następujące Warunki Serwisu (Terms of Service) i Politykę Prywatności (Privacy Policy). Musisz zaakceptować umowę żeby kontynuować logowanie do [SECOND_LIFE]. </text> <text_editor name="tos_text"> TOS_TEXT diff --git a/indra/newview/skins/default/xui/pl/floater_voice_controls.xml b/indra/newview/skins/default/xui/pl/floater_voice_controls.xml new file mode 100644 index 0000000000..6bee3e911c --- /dev/null +++ b/indra/newview/skins/default/xui/pl/floater_voice_controls.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="floater_voice_controls" title="Przełączniki Głosu"> + <string name="title_nearby"> + ROZMOWY GŁOSOWE W POBLIŻU + </string> + <string name="title_group"> + Rozmowa głosowa z grupą [GROUP] + </string> + <string name="title_adhoc"> + Konferencja + </string> + <string name="title_peer_2_peer"> + Rozmowa głosowa z [NAME] + </string> + <string name="no_one_near"> + Nikt w pobliżu nie ma aktywnych rozmów głosowych + </string> + <layout_stack name="my_call_stack"> + <layout_panel name="my_panel"> + <text name="user_text" value="Mój awatar:"/> + </layout_panel> + <layout_panel name="leave_call_btn_panel"> + <button label="Zakończ" name="leave_call_btn"/> + </layout_panel> + </layout_stack> +</floater> diff --git a/indra/newview/skins/default/xui/pl/floater_water.xml b/indra/newview/skins/default/xui/pl/floater_water.xml index 7333633c1d..9720dae516 100644 --- a/indra/newview/skins/default/xui/pl/floater_water.xml +++ b/indra/newview/skins/default/xui/pl/floater_water.xml @@ -1,32 +1,32 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="Water Floater" title="ZAAWANSOWANY EDYTOR WODY"> <text name="KeyFramePresetsText"> - Ustawienia Wody: + Ustawienia wody: </text> - <button label="Nowe" label_selected="Nowe" name="WaterNewPreset" /> - <button label="Zapisz" label_selected="Zapisz" name="WaterSavePreset" /> - <button label="Usuń" label_selected="Usuń" name="WaterDeletePreset" /> + <button label="Nowe" label_selected="Nowe" name="WaterNewPreset"/> + <button label="Zapisz" label_selected="Zapisz" name="WaterSavePreset"/> + <button label="Usuń" label_selected="Usuń" name="WaterDeletePreset"/> <tab_container name="Water Tabs"> - <panel label="Ustawienia" name="Settings"> + <panel label="USTAWIENIA" name="Settings"> <text name="BHText"> - Kolor Podwodnej Mgły + Kolor podwodnej mgły </text> - <button label="?" name="WaterFogColorHelp" /> - <color_swatch label="" name="WaterFogColor" tool_tip="Kliknij by wybrać kolor" /> + <button label="?" name="WaterFogColorHelp"/> + <color_swatch label="" name="WaterFogColor" tool_tip="Kliknij aby wybrać kolor"/> <text name="WaterFogDensText"> - Wykładnik Gęstości Mgły + Wykładnik gęstości mgły </text> - <button label="?" name="WaterFogDensityHelp" /> - <slider label="" name="WaterFogDensity" /> + <button label="?" name="WaterFogDensityHelp"/> + <slider label="" name="WaterFogDensity"/> <text name="WaterUnderWaterFogModText"> - Modyfikator Mgły + Modyfikator mgły </text> - <button label="?" name="WaterUnderWaterFogModHelp" /> - <slider label="" name="WaterUnderWaterFogMod" /> + <button label="?" name="WaterUnderWaterFogModHelp"/> + <slider label="" name="WaterUnderWaterFogMod"/> <text name="BDensText"> - Skala Zmarszczeń + Skala zmarszczeń </text> - <button label="?" name="WaterNormalScaleHelp" /> + <button label="?" name="WaterNormalScaleHelp"/> <text name="BHText2"> 1 </text> @@ -36,65 +36,65 @@ <text name="BHText4"> 3 </text> - <slider label="" name="WaterNormalScaleX" /> - <slider label="" name="WaterNormalScaleY" /> - <slider label="" name="WaterNormalScaleZ" /> + <slider label="" name="WaterNormalScaleX"/> + <slider label="" name="WaterNormalScaleY"/> + <slider label="" name="WaterNormalScaleZ"/> <text name="HDText"> Skala Fresnela </text> - <button label="?" name="WaterFresnelScaleHelp" /> - <slider label="" name="WaterFresnelScale" /> + <button label="?" name="WaterFresnelScaleHelp"/> + <slider label="" name="WaterFresnelScale"/> <text name="FresnelOffsetText"> Przesunięcie Fresnela </text> - <button label="?" name="WaterFresnelOffsetHelp" /> - <slider label="" name="WaterFresnelOffset" /> + <button label="?" name="WaterFresnelOffsetHelp"/> + <slider label="" name="WaterFresnelOffset"/> <text name="DensMultText"> - Górna Refrakcja + Górna refrakcja </text> - <button label="?" name="WaterScaleAboveHelp" /> - <slider label="" name="WaterScaleAbove" /> + <button label="?" name="WaterScaleAboveHelp"/> + <slider label="" name="WaterScaleAbove"/> <text name="WaterScaleBelowText"> - Dolna Refrakcja + Dolna refrakcja </text> - <button label="?" name="WaterScaleBelowHelp" /> - <slider label="" name="WaterScaleBelow" /> + <button label="?" name="WaterScaleBelowHelp"/> + <slider label="" name="WaterScaleBelow"/> <text name="MaxAltText"> - Mnożnik Rozmycia + Mnożnik rozmycia </text> - <button label="?" name="WaterBlurMultiplierHelp" /> - <slider label="" name="WaterBlurMult" /> + <button label="?" name="WaterBlurMultiplierHelp"/> + <slider label="" name="WaterBlurMult"/> </panel> - <panel label="Rysowanie" name="Waves"> + <panel label="OBRAZ" name="Waves"> <text name="BHText"> - Kierunek Dużych Fal + Kierunek dużych fal </text> - <button label="?" name="WaterWave1Help" /> + <button label="?" name="WaterWave1Help"/> <text name="WaterWave1DirXText"> X </text> <text name="WaterWave1DirYText"> Y </text> - <slider label="" name="WaterWave1DirX" /> - <slider label="" name="WaterWave1DirY" /> + <slider label="" name="WaterWave1DirX"/> + <slider label="" name="WaterWave1DirY"/> <text name="BHText2"> - Kierunek Małych Fal + Kierunek małych fal </text> - <button label="?" name="WaterWave2Help" /> + <button label="?" name="WaterWave2Help"/> <text name="WaterWave2DirXText"> X </text> <text name="WaterWave2DirYText"> Y </text> - <slider label="" name="WaterWave2DirX" /> - <slider label="" name="WaterWave2DirY" /> + <slider label="" name="WaterWave2DirX"/> + <slider label="" name="WaterWave2DirY"/> <text name="BHText3"> - Mapa Normalnych + Mapa normalnych </text> - <button label="?" name="WaterNormalMapHelp" /> - <texture_picker label="" name="WaterNormalMap" /> + <button label="?" name="WaterNormalMapHelp"/> + <texture_picker label="" name="WaterNormalMap"/> </panel> </tab_container> <string name="WLDefaultWaterNames"> diff --git a/indra/newview/skins/default/xui/pl/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/pl/floater_wearable_save_as.xml index 2d4582392c..925295102e 100644 --- a/indra/newview/skins/default/xui/pl/floater_wearable_save_as.xml +++ b/indra/newview/skins/default/xui/pl/floater_wearable_save_as.xml @@ -1,9 +1,9 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="modal container" title=""> - <button label="Zapisz" label_selected="Zapisz" name="Save" /> - <button label="Anuluj" label_selected="Anuluj" name="Cancel" /> + <button label="Zapisz" label_selected="Zapisz" name="Save"/> + <button label="Anuluj" label_selected="Anuluj" name="Cancel"/> <text name="Save item as:"> - Zachowaj jako: + Zapisz obiekt w mojej Szafie jako: </text> <line_editor name="name ed"> Nowe [DESC] diff --git a/indra/newview/skins/default/xui/pl/floater_whitelist_entry.xml b/indra/newview/skins/default/xui/pl/floater_whitelist_entry.xml new file mode 100644 index 0000000000..4081b8a37e --- /dev/null +++ b/indra/newview/skins/default/xui/pl/floater_whitelist_entry.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="whitelist_entry" title="BIAŁA LISTA"> + <text name="media_label"> + Wprowadź URL lub wzorzec URL dla dodania do listy dozwolonych domen + </text> + <line_editor name="whitelist_entry" tool_tip="Wprowadź URL lub wzorzec URL do Białej Listy"/> + <button label="OK" name="ok_btn"/> + <button label="Anuluj" name="cancel_btn"/> +</floater> diff --git a/indra/newview/skins/default/xui/pl/floater_windlight_options.xml b/indra/newview/skins/default/xui/pl/floater_windlight_options.xml index 86ef9300da..49e523fae8 100644 --- a/indra/newview/skins/default/xui/pl/floater_windlight_options.xml +++ b/indra/newview/skins/default/xui/pl/floater_windlight_options.xml @@ -1,19 +1,18 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="WindLight floater" title="ZAAWANSOWANY EDYTOR NIEBA"> <text name="KeyFramePresetsText"> - Ustawienia Nieba: + Ustawienia nieba: </text> - <button label="Nowe" label_selected="Nowe" name="WLNewPreset" /> - <button label="Zapisz" label_selected="Zapisz" name="WLSavePreset" /> - <button label="Usuń" label_selected="Usuń" name="WLDeletePreset" /> - <button label="Edytor Cyklu Dnia" label_selected="Edytor Cyklu Dnia" - name="WLDayCycleMenuButton" /> + <button label="Nowe" label_selected="Nowe" name="WLNewPreset"/> + <button label="Zapisz" label_selected="Zapisz" name="WLSavePreset"/> + <button label="Usuń" label_selected="Usuń" name="WLDeletePreset"/> + <button label="Edytor cyklu dnia" label_selected="Edytor cyklu dnia" name="WLDayCycleMenuButton"/> <tab_container name="WindLight Tabs"> - <panel label="Atmosfera" name="Atmosphere"> + <panel label="ATMOSFERA" name="Atmosphere"> <text name="BHText"> - Horyzont Błękitu + Horyzont błękitu </text> - <button label="?" name="WLBlueHorizonHelp" /> + <button label="?" name="WLBlueHorizonHelp"/> <text name="BHText2"> R </text> @@ -26,19 +25,19 @@ <text name="BHText5"> I </text> - <slider label="" name="WLBlueHorizonR" /> - <slider label="" name="WLBlueHorizonG" /> - <slider label="" name="WLBlueHorizonB" /> - <slider label="" name="WLBlueHorizonI" /> + <slider label="" name="WLBlueHorizonR"/> + <slider label="" name="WLBlueHorizonG"/> + <slider label="" name="WLBlueHorizonB"/> + <slider label="" name="WLBlueHorizonI"/> <text name="BDensText"> - Horyzont Zamglenia + Horyzont zamglenia </text> - <button label="?" name="WLHazeHorizonHelp" /> - <slider label="" name="WLHazeHorizon" /> + <button label="?" name="WLHazeHorizonHelp"/> + <slider label="" name="WLHazeHorizon"/> <text name="BDensText2"> - Gęstość Błękitu + Gęstość błękitu </text> - <button label="?" name="WLBlueDensityHelp" /> + <button label="?" name="WLBlueDensityHelp"/> <text name="BHText6"> R </text> @@ -51,36 +50,36 @@ <text name="BHText9"> I </text> - <slider label="" name="WLBlueDensityR" /> - <slider label="" name="WLBlueDensityG" /> - <slider label="" name="WLBlueDensityB" /> - <slider label="" name="WLBlueDensityI" /> + <slider label="" name="WLBlueDensityR"/> + <slider label="" name="WLBlueDensityG"/> + <slider label="" name="WLBlueDensityB"/> + <slider label="" name="WLBlueDensityI"/> <text name="HDText"> - Gęstość Zamglenia + Gęstość zamglenia </text> - <button label="?" name="WLHazeDensityHelp" /> - <slider label="" name="WLHazeDensity" /> + <button label="?" name="WLHazeDensityHelp"/> + <slider label="" name="WLHazeDensity"/> <text name="DensMultText"> - Mnożnik Gęsości + Mnożnik gęsości </text> - <button label="?" name="WLDensityMultHelp" /> - <slider label="" name="WLDensityMult" /> + <button label="?" name="WLDensityMultHelp"/> + <slider label="" name="WLDensityMult"/> <text name="WLDistanceMultText"> - Mnożnik Dystansu + Mnożnik dystansu </text> - <button label="?" name="WLDistanceMultHelp" /> - <slider label="" name="WLDistanceMult" /> + <button label="?" name="WLDistanceMultHelp"/> + <slider label="" name="WLDistanceMult"/> <text name="MaxAltText"> - Max Wysokość + Max wysokość </text> - <button label="?" name="WLMaxAltitudeHelp" /> - <slider label="" name="WLMaxAltitude" /> + <button label="?" name="WLMaxAltitudeHelp"/> + <slider label="" name="WLMaxAltitude"/> </panel> - <panel label="Światło" name="Lighting"> + <panel label="ŚWIATŁO" name="Lighting"> <text name="SLCText"> - Kolor Słońca/Księżyca + Kolor słońca/księżyca </text> - <button label="?" name="WLSunlightColorHelp" /> + <button label="?" name="WLSunlightColorHelp"/> <text name="BHText"> R </text> @@ -93,19 +92,19 @@ <text name="BHText4"> I </text> - <slider label="" name="WLSunlightR" /> - <slider label="" name="WLSunlightG" /> - <slider label="" name="WLSunlightB" /> - <slider label="" name="WLSunlightI" /> + <slider label="" name="WLSunlightR"/> + <slider label="" name="WLSunlightG"/> + <slider label="" name="WLSunlightB"/> + <slider label="" name="WLSunlightI"/> <text name="TODText"> - Pozycja Słońca/Księżyca + Pozycja słońca/księżyca </text> - <button label="?" name="WLTimeOfDayHelp" /> - <slider label="" name="WLSunAngle" /> + <button label="?" name="WLTimeOfDayHelp"/> + <slider label="" name="WLSunAngle"/> <text name="WLAmbientText"> Otoczenie </text> - <button label="?" name="WLAmbientHelp" /> + <button label="?" name="WLAmbientHelp"/> <text name="BHText5"> R </text> @@ -118,37 +117,37 @@ <text name="BHText8"> I </text> - <slider label="" name="WLAmbientR" /> - <slider label="" name="WLAmbientG" /> - <slider label="" name="WLAmbientB" /> - <slider label="" name="WLAmbientI" /> + <slider label="" name="WLAmbientR"/> + <slider label="" name="WLAmbientG"/> + <slider label="" name="WLAmbientB"/> + <slider label="" name="WLAmbientI"/> <text name="WLEastAngleText"> - Pozycja Wschodu + Pozycja wschodu </text> - <button label="?" name="WLEastAngleHelp" /> - <slider label="" name="WLEastAngle" /> + <button label="?" name="WLEastAngleHelp"/> + <slider label="" name="WLEastAngle"/> <text name="SunGlowText"> - Blask Słońca + Blask słońca </text> - <button label="?" name="WLSunGlowHelp" /> - <slider label="Ostrość" name="WLGlowB" /> - <slider label="Rozmiar" name="WLGlowR" /> + <button label="?" name="WLSunGlowHelp"/> + <slider label="Ostrość" name="WLGlowB"/> + <slider label="Rozmiar" name="WLGlowR"/> <text name="SceneGammaText"> - Jasność Obrazu + Jasność obrazu </text> - <button label="?" name="WLSceneGammaHelp" /> - <slider label="" name="WLGamma" /> + <button label="?" name="WLSceneGammaHelp"/> + <slider label="" name="WLGamma"/> <text name="WLStarText"> - Blask Gwiazd + Blask gwiazd </text> - <button label="?" name="WLStarBrightnessHelp" /> - <slider label="" name="WLStarAlpha" /> + <button label="?" name="WLStarBrightnessHelp"/> + <slider label="" name="WLStarAlpha"/> </panel> - <panel label="Chmury" name="Clouds"> + <panel label="CHMURY" name="Clouds"> <text name="WLCloudColorText"> - Kolor Chmur + Kolor chmur </text> - <button label="?" name="WLCloudColorHelp" /> + <button label="?" name="WLCloudColorHelp"/> <text name="BHText"> R </text> @@ -161,14 +160,14 @@ <text name="BHText4"> I </text> - <slider label="" name="WLCloudColorR" /> - <slider label="" name="WLCloudColorG" /> - <slider label="" name="WLCloudColorB" /> - <slider label="" name="WLCloudColorI" /> + <slider label="" name="WLCloudColorR"/> + <slider label="" name="WLCloudColorG"/> + <slider label="" name="WLCloudColorB"/> + <slider label="" name="WLCloudColorI"/> <text name="WLCloudColorText2"> Chmury (XY/Gęstość) </text> - <button label="?" name="WLCloudDensityHelp" /> + <button label="?" name="WLCloudDensityHelp"/> <text name="BHText5"> X </text> @@ -178,23 +177,23 @@ <text name="BHText7"> G </text> - <slider label="" name="WLCloudX" /> - <slider label="" name="WLCloudY" /> - <slider label="" name="WLCloudDensity" /> + <slider label="" name="WLCloudX"/> + <slider label="" name="WLCloudY"/> + <slider label="" name="WLCloudDensity"/> <text name="WLCloudCoverageText"> - Pokrycie Chmur + Pokrycie chmur </text> - <button label="?" name="WLCloudCoverageHelp" /> - <slider label="" name="WLCloudCoverage" /> + <button label="?" name="WLCloudCoverageHelp"/> + <slider label="" name="WLCloudCoverage"/> <text name="WLCloudScaleText"> - Skala Chmur + Skala chmur </text> - <button label="?" name="WLCloudScaleHelp" /> - <slider label="" name="WLCloudScale" /> + <button label="?" name="WLCloudScaleHelp"/> + <slider label="" name="WLCloudScale"/> <text name="WLCloudDetailText"> - Szczegóły (XY/Gęstość) + Szczegóły (XY/gęstość) </text> - <button label="?" name="WLCloudDetailHelp" /> + <button label="?" name="WLCloudDetailHelp"/> <text name="BHText8"> X </text> @@ -204,23 +203,23 @@ <text name="BHText10"> G </text> - <slider label="" name="WLCloudDetailX" /> - <slider label="" name="WLCloudDetailY" /> - <slider label="" name="WLCloudDetailDensity" /> + <slider label="" name="WLCloudDetailX"/> + <slider label="" name="WLCloudDetailY"/> + <slider label="" name="WLCloudDetailDensity"/> <text name="WLCloudScrollXText"> - Przewijanie Chmur X + Przewijanie chmur X </text> - <button label="?" name="WLCloudScrollXHelp" /> - <check_box label="Zablokuj" name="WLCloudLockX" /> - <slider label="" name="WLCloudScrollX" /> + <button label="?" name="WLCloudScrollXHelp"/> + <check_box label="Zablokuj" name="WLCloudLockX"/> + <slider label="" name="WLCloudScrollX"/> <text name="WLCloudScrollYText"> - Przewijanie Chmur Y + Przewijanie chmur Y </text> - <button label="?" name="WLCloudScrollYHelp" /> - <check_box label="Zablokuj" name="WLCloudLockY" /> - <slider label="" name="WLCloudScrollY" /> - <check_box label="Klasyczne Chmury" name="DrawClassicClouds" /> - <button label="?" name="WLClassicCloudsHelp" /> + <button label="?" name="WLCloudScrollYHelp"/> + <check_box label="Zablokuj" name="WLCloudLockY"/> + <slider label="" name="WLCloudScrollY"/> + <check_box label="Klasyczne chmury" name="DrawClassicClouds"/> + <button label="?" name="WLClassicCloudsHelp"/> </panel> </tab_container> <string name="WLDefaultSkyNames"> diff --git a/indra/newview/skins/default/xui/pl/floater_window_size.xml b/indra/newview/skins/default/xui/pl/floater_window_size.xml new file mode 100644 index 0000000000..2a6c257e54 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/floater_window_size.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="window_size" title="WYMIARY OKNA"> + <string name="resolution_format"> + [RES_X] x [RES_Y] + </string> + <text name="windowsize_text"> + Ustaw rozmiar okna: + </text> + <combo_box name="window_size_combo" tool_tip="szerokość x wysokość"> + <combo_box.item label="1000 x 700 (domyślnie)" name="item0"/> + <combo_box.item label="1024 x 768" name="item1"/> + <combo_box.item label="1280 x 720 (720p)" name="item2"/> + <combo_box.item label="1920 x 1080 (1080p)" name="item3"/> + </combo_box> + <button label="Ustaw" name="set_btn"/> + <button label="Anuluj" name="cancel_btn"/> +</floater> diff --git a/indra/newview/skins/default/xui/pl/floater_world_map.xml b/indra/newview/skins/default/xui/pl/floater_world_map.xml index 36e3b0651b..95010e0b91 100644 --- a/indra/newview/skins/default/xui/pl/floater_world_map.xml +++ b/indra/newview/skins/default/xui/pl/floater_world_map.xml @@ -1,59 +1,70 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="worldmap" title="MAPA ŚWIATA"> - <tab_container name="maptab"> - <panel label="Obiekty" name="objects_mapview"/> - <panel label="Teren" name="terrain_mapview"/> - </tab_container> - <text name="you_label"> - Ty - </text> - <icon left="1058" name="home"/> - <text name="home_label"> - Start - </text> - <text name="auction_label"> - Aukcja - </text> - <text name="land_for_sale_label"> - Na Sprzedaż - </text> - <button width="122" left="1116" label="Teleportuj do Start" label_selected="Teleportuj do Start" name="Go Home" tool_tip="Teleportuj się do miejsca startowego"/> - <check_box label="Rezydent" name="people_chk"/> - <check_box label="Infohub" name="infohub_chk"/> - <check_box label="Telehub" name="telehubchk"/> - <check_box label="Posiadłość na sprzedaż" name="land_for_sale_chk"/> - <text name="events_label"> - Wydarzenia: - </text> - <check_box label="'PG'" name="event_chk"/> - <check_box label="'Mature'" name="event_mature_chk"/> - <check_box label="'Adult'" name="event_adult_chk"/> - <icon bottom="-196" name="avatar_icon"/> - <combo_box label="Dostępni Znajomi" name="friend combo" tool_tip="Znajomi na mapie"> - <combo_box.item name="item1" label="Dostępni Znajomi" /> - </combo_box> - <combo_box label="Zapisane Miejsca" name="landmark combo" tool_tip="Zapisane miejsca na mapie"> - <combo_box.item name="item1" label="Zapisane Miejsca" /> - </combo_box> - <line_editor label="Szukaj po nazwie regionu" name="location" tool_tip="Wpisz nazwę regionu"/> - <button label="Szukaj" name="DoSearch" tool_tip="Wyszukiwaie regionu"/> - <text name="search_label"> - Wyniki wyszukiwania: - </text> - <scroll_list name="search_results" bottom_delta="-310" height="304" > - <column label="" name="icon"/> - <column label="" name="sim_name"/> - </scroll_list> - <text name="location_label"> - Położenie: - </text> - <spinner name="spin x" tool_tip="współrzędne X na mapie"/> - <spinner name="spin y" tool_tip="współrzędne Y na mapie"/> - <spinner name="spin z" tool_tip="współrzędne Z na mapie"/> - <button label="Teleportuj" label_selected="Teleportuj" name="Teleport" tool_tip="Teleportuj do wybranego miejsca"/> - <button label="Pokaż Cel" label_selected="Pokaż Cel" name="Show Destination" tool_tip="Wycentruj miejsce celu na mapie"/> - <button label="Wyczyść" label_selected="Wyczyść" name="Clear" tool_tip="Stop tracking"/> - <button label="Pokaż moje miejsce" label_selected="Pokaż moje miejsce" name="Show My Location" tool_tip="Wycentruj pozcję awatara na mapie"/> - <button label="Kopiuj SLurl do schowka" name="copy_slurl" tool_tip="Kopie SLurl obecnego miejsca będę mogły zostać użyte na stronie internetowej."/> - <slider label="Skala" name="zoom slider"/> + <panel name="layout_panel_1"> + <text name="events_label"> + Legenda + </text> + </panel> + <panel name="layout_panel_2"> + <button name="Show My Location" tool_tip="Wyśrodkuj mapę w miejscu, gdzie znajduje się mój awatar"/> + <text name="me_label"> + Ja + </text> + <text name="person_label"> + Osoba + </text> + <text name="infohub_label"> + Infohub + </text> + <text name="land_sale_label"> + Sprzedaż Posiadłości + </text> + <text name="by_owner_label"> + przez Właściciela + </text> + <text name="auction_label"> + aukcja Posiadłości + </text> + <button name="Go Home" tool_tip="Teleportuj do mojego Miejsca Startowego"/> + <text name="Home_label"> + Miejsce Startu + </text> + <text name="events_label"> + Wydarzenia: + </text> + <text name="pg_label"> + Ogólne + </text> + <check_box initial_value="prawda" name="event_mature_chk"/> + <text name="mature_label"> + Moderuj + </text> + <text name="adult_label"> + Adult + </text> + </panel> + <panel name="layout_panel_3"> + <text name="find_on_map_label"> + Znajdź na mapie + </text> + </panel> + <panel name="layout_panel_4"> + <combo_box label="Dostępni Znajomi" name="friend combo" tool_tip="Pokaż znajomych na mapie"> + <combo_box.item label="Moi Dostępni Znajomi" name="item1"/> + </combo_box> + <combo_box label="Zapisane Miejsca" name="landmark combo" tool_tip="Pokaż zapisane miejsce na mapie"> + <combo_box.item label="Zapisane Miejsca" name="item1"/> + </combo_box> + <search_editor label="Regiony Według Nazwy" name="location" tool_tip="Wpisz nazwę regionu"/> + <button label="Znajdź" name="DoSearch" tool_tip="Szukaj regionu"/> + <button name="Clear" tool_tip="Wyczyść zapamiętane linie oraz zresetuj mapę"/> + <button label="Teleportuj" name="Teleport" tool_tip="Teleportuj do wybranego miejsca"/> + <button label="Kopiuj SLurl" name="copy_slurl" tool_tip="Kopie obecnego miejsca jako SLurl mogą zostać użyte na stronie internetowej."/> + <button label="Pokaż wybrane" name="Show Destination" tool_tip="Wyśrodkuj mapę w wybranym miejscu"/> + </panel> + <panel name="layout_panel_5"> + <text name="zoom_label"> + Przybliż + </text> + </panel> </floater> diff --git a/indra/newview/skins/default/xui/pl/inspect_avatar.xml b/indra/newview/skins/default/xui/pl/inspect_avatar.xml index 4ba36de6fa..3ee0b976eb 100644 --- a/indra/newview/skins/default/xui/pl/inspect_avatar.xml +++ b/indra/newview/skins/default/xui/pl/inspect_avatar.xml @@ -13,9 +13,9 @@ <slider name="volume_slider" tool_tip="Posiom Głośności" value="0.5"/> <button label="Dodaj Znajomość" name="add_friend_btn"/> <button label="IM" name="im_btn"/> - <button label="Więcej" name="view_profile_btn"/> + <button label="Profil" name="view_profile_btn"/> <panel name="moderator_panel"> - <button label="Wyłącz Komunikację Głosową" name="disable_voice"/> - <button label="Włącz Komunikację Głosową" name="enable_voice"/> + <button label="Wyłącz komunikację głosową" name="disable_voice"/> + <button label="Włącz komunikację głosową" name="enable_voice"/> </panel> </floater> diff --git a/indra/newview/skins/default/xui/pl/inspect_group.xml b/indra/newview/skins/default/xui/pl/inspect_group.xml index d434443794..0a2a62ce74 100644 --- a/indra/newview/skins/default/xui/pl/inspect_group.xml +++ b/indra/newview/skins/default/xui/pl/inspect_group.xml @@ -5,10 +5,10 @@ --> <floater name="inspect_group"> <string name="PrivateGroup"> - Grupa Prywatna + Grupa prywatna </string> <string name="FreeToJoin"> - Wstęp Wolny + Wstęp wolny </string> <string name="CostToJoin"> L$[AMOUNT] by dołączyć diff --git a/indra/newview/skins/default/xui/pl/inspect_object.xml b/indra/newview/skins/default/xui/pl/inspect_object.xml new file mode 100644 index 0000000000..2e15691463 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/inspect_object.xml @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<!-- + Not can_close / no title to avoid window chrome + Single instance - only have one at a time, recycle it each spawn +--> +<floater name="inspect_object"> + <string name="Creator"> + Przez [CREATOR] + </string> + <string name="CreatorAndOwner"> + przez [CREATOR] +właściciel [OWNER] + </string> + <string name="Price"> + L$[AMOUNT] + </string> + <string name="PriceFree"> + Darmowe! + </string> + <string name="Touch"> + Dotknij + </string> + <string name="Sit"> + Usiądź tutaj + </string> + <button label="Kup" name="buy_btn"/> + <button label="Zapłać" name="pay_btn"/> + <button label="Weź kopię" name="take_free_copy_btn"/> + <button label="Dotknij" name="touch_btn"/> + <button label="Usiądź tutaj" name="sit_btn"/> + <button label="Otwórz" name="open_btn"/> + <icon name="secure_browsing" tool_tip="Zabezpiecz przeglądanie"/> + <button label="Więcej" name="more_info_btn"/> +</floater> diff --git a/indra/newview/skins/default/xui/pl/menu_attachment_self.xml b/indra/newview/skins/default/xui/pl/menu_attachment_self.xml index 1107a5d9d1..ff695be205 100644 --- a/indra/newview/skins/default/xui/pl/menu_attachment_self.xml +++ b/indra/newview/skins/default/xui/pl/menu_attachment_self.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Attachment Pie"> - <menu_item_call label="Dotnij" name="Attachment Object Touch"/> + <menu_item_call label="Dotknij" name="Attachment Object Touch"/> <menu_item_call label="Edytuj" name="Edit..."/> <menu_item_call label="Odłącz" name="Detach"/> <menu_item_call label="Opuść" name="Drop"/> diff --git a/indra/newview/skins/default/xui/pl/menu_avatar_self.xml b/indra/newview/skins/default/xui/pl/menu_avatar_self.xml index 427c0d464b..0bca90168f 100644 --- a/indra/newview/skins/default/xui/pl/menu_avatar_self.xml +++ b/indra/newview/skins/default/xui/pl/menu_avatar_self.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Self Pie"> <menu_item_call label="Wstań" name="Stand Up"/> - <context_menu label="Zdejmij >" name="Take Off >"> - <context_menu label="Ubranie >" name="Clothes >"> + <context_menu label="Zdejmij ▶" name="Take Off >"> + <context_menu label="Ubrania ▶" name="Clothes >"> <menu_item_call label="Koszulkę" name="Shirt"/> <menu_item_call label="Spodnie" name="Pants"/> <menu_item_call label="Spódnicę" name="Skirt"/> @@ -16,8 +16,8 @@ <menu_item_call label="Ubranie Przezroczyste" name="Self Alpha"/> <menu_item_call label="Wszystko" name="All Clothes"/> </context_menu> - <context_menu label="HUD >" name="Object Detach HUD"/> - <context_menu label="Odłącz >" name="Object Detach"/> + <context_menu label="HUD ▶" name="Object Detach HUD"/> + <context_menu label="Odłącz ▶" name="Object Detach"/> <menu_item_call label="Odłącz Wszystko" name="Detach All"/> </context_menu> <menu_item_call label="Mój Wygląd" name="Appearance..."/> diff --git a/indra/newview/skins/default/xui/pl/menu_bottomtray.xml b/indra/newview/skins/default/xui/pl/menu_bottomtray.xml index 818dfc08ae..9fcf1b3440 100644 --- a/indra/newview/skins/default/xui/pl/menu_bottomtray.xml +++ b/indra/newview/skins/default/xui/pl/menu_bottomtray.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="hide_camera_move_controls_menu"> - <menu_item_check label="Przycisk Gesturek" name="ShowGestureButton"/> + <menu_item_check label="Przycisk Gestur" name="ShowGestureButton"/> <menu_item_check label="Przycisk Ruchu" name="ShowMoveButton"/> <menu_item_check label="Przycisk Widoku" name="ShowCameraButton"/> <menu_item_check label="Przycisk Zdjęć" name="ShowSnapshotButton"/> @@ -8,5 +8,5 @@ <menu_item_call label="Kopiuj" name="NearbyChatBar_Copy"/> <menu_item_call label="Wklej" name="NearbyChatBar_Paste"/> <menu_item_call label="Usuń" name="NearbyChatBar_Delete"/> - <menu_item_call label="Zaznacz Wszystko" name="NearbyChatBar_Select_All"/> + <menu_item_call label="Zaznacz wszystko" name="NearbyChatBar_Select_All"/> </menu> diff --git a/indra/newview/skins/default/xui/pl/menu_favorites.xml b/indra/newview/skins/default/xui/pl/menu_favorites.xml index 0a0b54a548..cbacaf4beb 100644 --- a/indra/newview/skins/default/xui/pl/menu_favorites.xml +++ b/indra/newview/skins/default/xui/pl/menu_favorites.xml @@ -3,7 +3,7 @@ <menu_item_call label="Teleportuj" name="Teleport To Landmark"/> <menu_item_call label="Zobacz/Edytuj Ulubione Miejsce" name="Landmark Open"/> <menu_item_call label="Kopiuj SLurl" name="Copy slurl"/> - <menu_item_call label="Pokaż na Mapie" name="Show On Map"/> + <menu_item_call label="Pokaż na mapie" name="Show On Map"/> <menu_item_call label="Kopiuj" name="Landmark Copy"/> <menu_item_call label="Wklej" name="Landmark Paste"/> <menu_item_call label="Usuń" name="Delete"/> diff --git a/indra/newview/skins/default/xui/pl/menu_hide_navbar.xml b/indra/newview/skins/default/xui/pl/menu_hide_navbar.xml index 1c2687338d..d30f5a4d3f 100644 --- a/indra/newview/skins/default/xui/pl/menu_hide_navbar.xml +++ b/indra/newview/skins/default/xui/pl/menu_hide_navbar.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="hide_navbar_menu"> - <menu_item_check label="Pokaż Pasek Nawigacji" name="ShowNavbarNavigationPanel"/> - <menu_item_check label="Pokaż Pasek Ulubionych" name="ShowNavbarFavoritesPanel"/> + <menu_item_check label="Pokaż pasek Nawigacji" name="ShowNavbarNavigationPanel"/> + <menu_item_check label="Pokaż pasek Ulubionych" name="ShowNavbarFavoritesPanel"/> </menu> diff --git a/indra/newview/skins/default/xui/pl/menu_im_well_button.xml b/indra/newview/skins/default/xui/pl/menu_im_well_button.xml new file mode 100644 index 0000000000..207bc2211b --- /dev/null +++ b/indra/newview/skins/default/xui/pl/menu_im_well_button.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="IM Well Button Context Menu"> + <menu_item_call label="Zamknij wszystkie" name="Close All"/> +</context_menu> diff --git a/indra/newview/skins/default/xui/pl/menu_imchiclet_adhoc.xml b/indra/newview/skins/default/xui/pl/menu_imchiclet_adhoc.xml index 925272d5ee..4ead44878a 100644 --- a/indra/newview/skins/default/xui/pl/menu_imchiclet_adhoc.xml +++ b/indra/newview/skins/default/xui/pl/menu_imchiclet_adhoc.xml @@ -1,4 +1,4 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="IMChiclet AdHoc Menu"> - <menu_item_call label="Zakończ Rozmowę" name="End Session"/> + <menu_item_call label="Zakończ rozmowę" name="End Session"/> </menu> diff --git a/indra/newview/skins/default/xui/pl/menu_imchiclet_group.xml b/indra/newview/skins/default/xui/pl/menu_imchiclet_group.xml index dc232c096d..c53f72c043 100644 --- a/indra/newview/skins/default/xui/pl/menu_imchiclet_group.xml +++ b/indra/newview/skins/default/xui/pl/menu_imchiclet_group.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="IMChiclet Group Menu"> <menu_item_call label="O Grupie" name="Show Profile"/> - <menu_item_call label="Pokaż Sesję" name="Chat"/> - <menu_item_call label="Zakończ Rozmowę" name="End Session"/> + <menu_item_call label="Pokaż sesję" name="Chat"/> + <menu_item_call label="Zakończ rozmowę" name="End Session"/> </menu> diff --git a/indra/newview/skins/default/xui/pl/menu_imchiclet_p2p.xml b/indra/newview/skins/default/xui/pl/menu_imchiclet_p2p.xml index df991cbc36..c0c812c0a7 100644 --- a/indra/newview/skins/default/xui/pl/menu_imchiclet_p2p.xml +++ b/indra/newview/skins/default/xui/pl/menu_imchiclet_p2p.xml @@ -2,6 +2,6 @@ <menu name="IMChiclet P2P Menu"> <menu_item_call label="Zobacz Profil" name="Show Profile"/> <menu_item_call label="Dodaj Znajomość" name="Add Friend"/> - <menu_item_call label="Pokaż Sesję" name="Send IM"/> - <menu_item_call label="Zakończ Rozmowę" name="End Session"/> + <menu_item_call label="Pokaż sesję" name="Send IM"/> + <menu_item_call label="Zakończ rozmowę" name="End Session"/> </menu> diff --git a/indra/newview/skins/default/xui/pl/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/pl/menu_inspect_avatar_gear.xml index 22d81cb823..325072d0fb 100644 --- a/indra/newview/skins/default/xui/pl/menu_inspect_avatar_gear.xml +++ b/indra/newview/skins/default/xui/pl/menu_inspect_avatar_gear.xml @@ -7,11 +7,13 @@ <menu_item_call label="Teleportuj" name="teleport"/> <menu_item_call label="Zaproś do Grupy" name="invite_to_group"/> <menu_item_call label="Zablokuj" name="block"/> + <menu_item_call label="Odblokuj" name="unblock"/> <menu_item_call label="Raport" name="report"/> <menu_item_call label="Unieruchom" name="freeze"/> <menu_item_call label="Wyrzuć" name="eject"/> <menu_item_call label="Debug" name="debug"/> - <menu_item_call label="Znajdź na Mapie" name="find_on_map"/> + <menu_item_call label="Znajdź na mapie" name="find_on_map"/> <menu_item_call label="Przybliż" name="zoom_in"/> <menu_item_call label="Zapłać" name="pay"/> + <menu_item_call label="Udostępnij" name="share"/> </menu> diff --git a/indra/newview/skins/default/xui/pl/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/pl/menu_inspect_object_gear.xml index 988c31a6e4..2c56d2ca3d 100644 --- a/indra/newview/skins/default/xui/pl/menu_inspect_object_gear.xml +++ b/indra/newview/skins/default/xui/pl/menu_inspect_object_gear.xml @@ -5,7 +5,7 @@ <menu_item_call label="Zapłać" name="pay"/> <menu_item_call label="Kup" name="buy"/> <menu_item_call label="Weź" name="take"/> - <menu_item_call label="Weź Kopię" name="take_copy"/> + <menu_item_call label="Weź kopię" name="take_copy"/> <menu_item_call label="Otwórz" name="open"/> <menu_item_call label="Edytuj" name="edit"/> <menu_item_call label="Ubierz" name="wear"/> @@ -13,5 +13,5 @@ <menu_item_call label="Zablokuj" name="block"/> <menu_item_call label="Przybliż" name="zoom_in"/> <menu_item_call label="Usuń" name="remove"/> - <menu_item_call label="Więcej Informacji" name="more_info"/> + <menu_item_call label="Więcej informacji" name="more_info"/> </menu> diff --git a/indra/newview/skins/default/xui/pl/menu_inventory.xml b/indra/newview/skins/default/xui/pl/menu_inventory.xml index 75c84c275d..7fe9da3c0c 100644 --- a/indra/newview/skins/default/xui/pl/menu_inventory.xml +++ b/indra/newview/skins/default/xui/pl/menu_inventory.xml @@ -4,32 +4,32 @@ <menu_item_call label="Otwórz" name="Task Open"/> <menu_item_call label="Odtwarzaj" name="Task Play"/> <menu_item_call label="Właściwości" name="Task Properties"/> - <menu_item_call label="Zmień Nazwę" name="Task Rename"/> + <menu_item_call label="Zmień nazwę" name="Task Rename"/> <menu_item_call label="Usuń" name="Task Remove"/> <menu_item_call label="Opróżnij Kosz" name="Empty Trash"/> <menu_item_call label="Opróżnij Folder Zgubione i Odnalezione" name="Empty Lost And Found"/> - <menu_item_call label="Nowy Folder" name="New Folder"/> - <menu_item_call label="Nowy Skrypt" name="New Script"/> - <menu_item_call label="Nowa Nota" name="New Note"/> - <menu_item_call label="Nowy Gest" name="New Gesture"/> + <menu_item_call label="Nowy folder" name="New Folder"/> + <menu_item_call label="Nowy skrypt" name="New Script"/> + <menu_item_call label="Nowa nota" name="New Note"/> + <menu_item_call label="Nowy gest" name="New Gesture"/> <menu label="Nowe Ubranie" name="New Clothes"> - <menu_item_call label="Nowa Koszulka" name="New Shirt"/> - <menu_item_call label="Nowe Spodnie" name="New Pants"/> - <menu_item_call label="Nowe Buty" name="New Shoes"/> - <menu_item_call label="Nowe Skarpety" name="New Socks"/> - <menu_item_call label="Nowa Kurtka" name="New Jacket"/> - <menu_item_call label="Nowa Spódnica" name="New Skirt"/> - <menu_item_call label="Nowe Rękawiczki" name="New Gloves"/> - <menu_item_call label="Nowy Podkoszulek" name="New Undershirt"/> - <menu_item_call label="Nowa Bielizna" name="New Underpants"/> - <menu_item_call label="Nowa Maska Przezroczysta" name="New Alpha Mask"/> - <menu_item_call label="Nowy Tatuaż" name="New Tattoo"/> + <menu_item_call label="Nowa koszulka" name="New Shirt"/> + <menu_item_call label="Nowe spodnie" name="New Pants"/> + <menu_item_call label="Nowe buty" name="New Shoes"/> + <menu_item_call label="Nowe skarpety" name="New Socks"/> + <menu_item_call label="Nowa kurtka" name="New Jacket"/> + <menu_item_call label="Nowa spódnica" name="New Skirt"/> + <menu_item_call label="Nowe rękawiczki" name="New Gloves"/> + <menu_item_call label="Nowy podkoszulek" name="New Undershirt"/> + <menu_item_call label="Nowa bielizna" name="New Underpants"/> + <menu_item_call label="Nowa maska Alpha" name="New Alpha Mask"/> + <menu_item_call label="Nowy tatuaż" name="New Tattoo"/> </menu> <menu label="Nowa Część Ciała" name="New Body Parts"> - <menu_item_call label="Nowy Kształt" name="New Shape"/> - <menu_item_call label="Nowa Skórka" name="New Skin"/> - <menu_item_call label="Nowe Włosy" name="New Hair"/> - <menu_item_call label="Nowe Oczy" name="New Eyes"/> + <menu_item_call label="Nowy kształt" name="New Shape"/> + <menu_item_call label="Nowa skórka" name="New Skin"/> + <menu_item_call label="Nowe włosy" name="New Hair"/> + <menu_item_call label="Nowe oczy" name="New Eyes"/> </menu> <menu label="Zmień Czcionkę" name="Change Type"> <menu_item_call label="Domyślna" name="Default"/> @@ -46,32 +46,31 @@ <menu_item_call label="Teleportuj" name="Landmark Open"/> <menu_item_call label="Otwórz" name="Animation Open"/> <menu_item_call label="Otwórz" name="Sound Open"/> - <menu_item_call label="Usuń Obiekt" name="Purge Item"/> - <menu_item_call label="Przywróć Obiekt" name="Restore Item"/> - <menu_item_call label="Otwórz Link" name="Goto Link"/> + <menu_item_call label="Zmień strój" name="Replace Outfit"/> + <menu_item_call label="Dodaj do stroju" name="Add To Outfit"/> + <menu_item_call label="Usuń obiekt" name="Purge Item"/> + <menu_item_call label="Przywróć obiekt" name="Restore Item"/> <menu_item_call label="Otwórz" name="Open"/> <menu_item_call label="Właściwości" name="Properties"/> - <menu_item_call label="Zmień Nazwę" name="Rename"/> - <menu_item_call label="Kopiuj Dane UUID" name="Copy Asset UUID"/> + <menu_item_call label="Zmień nazwę" name="Rename"/> + <menu_item_call label="Kopiuj dane UUID" name="Copy Asset UUID"/> <menu_item_call label="Kopiuj" name="Copy"/> <menu_item_call label="Wklej" name="Paste"/> - <menu_item_call label="Wklej jako Link" name="Paste As Link"/> + <menu_item_call label="Wklej jako link" name="Paste As Link"/> <menu_item_call label="Usuń" name="Delete"/> - <menu_item_call label="Zdejmij Obiekt" name="Take Off Items"/> - <menu_item_call label="Dodaj do Stroju" name="Add To Outfit"/> - <menu_item_call label="Zmień Strój" name="Replace Outfit"/> - <menu_item_call label="Rozpocznij Konferencję Czatową" name="Conference Chat Folder"/> + <menu_item_call label="Skasuj Folder Systemu" name="Delete System Folder"/> + <menu_item_call label="Rozpocznij konferencję czatową" name="Conference Chat Folder"/> <menu_item_call label="Odtwarzaj" name="Sound Play"/> <menu_item_call label="O Miejscu" name="About Landmark"/> - <menu_item_call label="Odtwarzaj w Świecie" name="Animation Play"/> - <menu_item_call label="Odtwarzaj Lokalnie" name="Animation Audition"/> + <menu_item_call label="Używaj in-world" name="Animation Play"/> + <menu_item_call label="Odtwarzaj lokalnie" name="Animation Audition"/> <menu_item_call label="Wyślij IM" name="Send Instant Message"/> - <menu_item_call label="Zaoferuj Teleportację..." name="Offer Teleport..."/> - <menu_item_call label="Rozpocznij Konferencję Czatową" name="Conference Chat"/> + <menu_item_call label="Teleportuj..." name="Offer Teleport..."/> + <menu_item_call label="Rozpocznij konferencję czatową" name="Conference Chat"/> <menu_item_call label="Aktywuj" name="Activate"/> <menu_item_call label="Deaktywuj" name="Deactivate"/> <menu_item_call label="Zapisz jako" name="Save As"/> - <menu_item_call label="Odłącz od Siebie" name="Detach From Yourself"/> + <menu_item_call label="Odłącz od siebie" name="Detach From Yourself"/> <menu_item_call label="Ubierz" name="Object Wear"/> <menu label="Dołącz do" name="Attach To"/> <menu label="Dołącz do Załączników HUD" name="Attach To HUD"/> diff --git a/indra/newview/skins/default/xui/pl/menu_inventory_add.xml b/indra/newview/skins/default/xui/pl/menu_inventory_add.xml index 5b8c5426dd..b4d85c2c5c 100644 --- a/indra/newview/skins/default/xui/pl/menu_inventory_add.xml +++ b/indra/newview/skins/default/xui/pl/menu_inventory_add.xml @@ -1,32 +1,32 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="menu_inventory_add"> <menu label="Załaduj" name="upload"> - <menu_item_call label="Obraz (L$[COST])..." name="Upload Image"/> - <menu_item_call label="Dźwięk (L$[COST])..." name="Upload Sound"/> - <menu_item_call label="Animację (L$[COST])..." name="Upload Animation"/> - <menu_item_call label="Zbiór Plików (L$[COST] za jeden plik)..." name="Bulk Upload"/> + <menu_item_call label="obraz (L$[COST])..." name="Upload Image"/> + <menu_item_call label="dźwięk (L$[COST])..." name="Upload Sound"/> + <menu_item_call label="animację (L$[COST])..." name="Upload Animation"/> + <menu_item_call label="zbiór plików (L$[COST] za jeden plik)..." name="Bulk Upload"/> </menu> - <menu_item_call label="Nowy Folder" name="New Folder"/> - <menu_item_call label="Nowy Skrypt" name="New Script"/> - <menu_item_call label="Nowa Nota" name="New Note"/> - <menu_item_call label="Nowa Gesturka" name="New Gesture"/> + <menu_item_call label="Nowy folder" name="New Folder"/> + <menu_item_call label="Nowy skrypt" name="New Script"/> + <menu_item_call label="Nowa nota" name="New Note"/> + <menu_item_call label="Nowy gest" name="New Gesture"/> <menu label="Nowe Ubranie" name="New Clothes"> - <menu_item_call label="Nowa Koszulka" name="New Shirt"/> - <menu_item_call label="Nowe Spodnie" name="New Pants"/> - <menu_item_call label="Nowe Buty" name="New Shoes"/> - <menu_item_call label="Nowe Skarpetki" name="New Socks"/> - <menu_item_call label="Nowa Kurtka" name="New Jacket"/> - <menu_item_call label="Nowa Spódnica" name="New Skirt"/> - <menu_item_call label="Nowe Rękawiczki" name="New Gloves"/> - <menu_item_call label="Nowy Podkoszulek" name="New Undershirt"/> - <menu_item_call label="Nowa Bielizna" name="New Underpants"/> - <menu_item_call label="Nowe Ubranie Przezroczyste" name="New Alpha"/> - <menu_item_call label="Nowy Tatuaż" name="New Tattoo"/> + <menu_item_call label="Nowa koszulka" name="New Shirt"/> + <menu_item_call label="Nowe spodnie" name="New Pants"/> + <menu_item_call label="Nowe buty" name="New Shoes"/> + <menu_item_call label="Nowe skarpetki" name="New Socks"/> + <menu_item_call label="Nowa kurtka" name="New Jacket"/> + <menu_item_call label="Nowa spódnica" name="New Skirt"/> + <menu_item_call label="Nowe rękawiczki" name="New Gloves"/> + <menu_item_call label="Nowy podkoszulek" name="New Undershirt"/> + <menu_item_call label="Nowa bielizna" name="New Underpants"/> + <menu_item_call label="Nowe ubranie Przezroczyste" name="New Alpha"/> + <menu_item_call label="Nowy tatuaż" name="New Tattoo"/> </menu> <menu label="Nowa Część Ciała" name="New Body Parts"> - <menu_item_call label="Nowy Kształt" name="New Shape"/> - <menu_item_call label="Nowa Skórka" name="New Skin"/> - <menu_item_call label="Nowe Włosy" name="New Hair"/> - <menu_item_call label="Nowe Oczy" name="New Eyes"/> + <menu_item_call label="Nowy kształt" name="New Shape"/> + <menu_item_call label="Nowa skórka" name="New Skin"/> + <menu_item_call label="Nowe włosy" name="New Hair"/> + <menu_item_call label="Nowe oczy" name="New Eyes"/> </menu> </menu> diff --git a/indra/newview/skins/default/xui/pl/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/pl/menu_inventory_gear_default.xml index 8f5f94a02f..2ec3741682 100644 --- a/indra/newview/skins/default/xui/pl/menu_inventory_gear_default.xml +++ b/indra/newview/skins/default/xui/pl/menu_inventory_gear_default.xml @@ -1,14 +1,14 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="menu_gear_default"> - <menu_item_call label="Nowe Okno Szafy" name="new_window"/> - <menu_item_call label="Porządkuj Według Nazwy" name="sort_by_name"/> - <menu_item_call label="Porządkuj Według Daty" name="sort_by_recent"/> - <menu_item_call label="Pokaż Filtry" name="show_filters"/> - <menu_item_call label="Zresetuj Filtry" name="reset_filters"/> - <menu_item_call label="Zamknij Wszystkie Foldery" name="close_folders"/> + <menu_item_call label="Nowe okno Szafy" name="new_window"/> + <menu_item_call label="Porządkuj według nazwy" name="sort_by_name"/> + <menu_item_call label="Porządkuj według daty" name="sort_by_recent"/> + <menu_item_call label="Pokaż filtry" name="show_filters"/> + <menu_item_call label="Zresetuj filtry" name="reset_filters"/> + <menu_item_call label="Zamknij wszystkie foldery" name="close_folders"/> <menu_item_call label="Opróżnij Kosz" name="empty_trash"/> <menu_item_call label="Opróżnij Zagubione i Odnalezione" name="empty_lostnfound"/> - <menu_item_call label="Zapisz Teksturę Jako" name="Save Texture As"/> - <menu_item_call label="Znajdź Oryginał" name="Find Original"/> - <menu_item_call label="Znajdź Wszystkie Linki" name="Find All Links"/> + <menu_item_call label="Zapisz teksturę jako" name="Save Texture As"/> + <menu_item_call label="Znajdź oryginał" name="Find Original"/> + <menu_item_call label="Znajdź wszystkie linki" name="Find All Links"/> </menu> diff --git a/indra/newview/skins/default/xui/pl/menu_land.xml b/indra/newview/skins/default/xui/pl/menu_land.xml index 2c89b43525..1e1ce73089 100644 --- a/indra/newview/skins/default/xui/pl/menu_land.xml +++ b/indra/newview/skins/default/xui/pl/menu_land.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Land Pie"> <menu_item_call label="O Posiadłości" name="Place Information..."/> - <menu_item_call label="Usiądź Tutaj" name="Sit Here"/> + <menu_item_call label="Usiądź tutaj" name="Sit Here"/> <menu_item_call label="Kup Posiadłość" name="Land Buy"/> - <menu_item_call label="Kup Wstęp" name="Land Buy Pass"/> + <menu_item_call label="Kup przepustkę" name="Land Buy Pass"/> <menu_item_call label="Buduj" name="Create"/> - <menu_item_call label="Edytuj Teren" name="Edit Terrain"/> + <menu_item_call label="Edytuj teren" name="Edit Terrain"/> </context_menu> diff --git a/indra/newview/skins/default/xui/pl/menu_landmark.xml b/indra/newview/skins/default/xui/pl/menu_landmark.xml index 8cd7e03bf1..aa5808390c 100644 --- a/indra/newview/skins/default/xui/pl/menu_landmark.xml +++ b/indra/newview/skins/default/xui/pl/menu_landmark.xml @@ -3,5 +3,5 @@ <menu_item_call label="Kopiuj SLurl" name="copy"/> <menu_item_call label="Usuń" name="delete"/> <menu_item_call label="Utwórz" name="pick"/> - <menu_item_call label="Dodaj do Paska Ulubionych" name="add_to_favbar"/> + <menu_item_call label="Dodaj do paska Ulubionych" name="add_to_favbar"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/pl/menu_login.xml b/indra/newview/skins/default/xui/pl/menu_login.xml index 5084b59397..2673f5c271 100644 --- a/indra/newview/skins/default/xui/pl/menu_login.xml +++ b/indra/newview/skins/default/xui/pl/menu_login.xml @@ -2,7 +2,7 @@ <menu_bar name="Login Menu"> <menu label="Ja" name="File"> <menu_item_call label="Ustawienia" name="Preferences..."/> - <menu_item_call label="Wyłącz Program" name="Quit"/> + <menu_item_call label="Wyłącz program" name="Quit"/> </menu> <menu label="Pomoc" name="Help"> <menu_item_call label="[SECOND_LIFE]: Pomoc" name="Second Life Help"/> @@ -16,15 +16,15 @@ <menu_item_call label="Wklej" name="Paste"/> <menu_item_call label="Usuń" name="Delete"/> <menu_item_call label="Powiel" name="Duplicate"/> - <menu_item_call label="Zaznacz Wszystko" name="Select All"/> + <menu_item_call label="Zaznacz wszystko" name="Select All"/> <menu_item_call label="Odznacz" name="Deselect"/> </menu> - <menu_item_call label="Ustawienia Debugowania" name="Debug Settings"/> - <menu_item_call label="Ustawienia UI/Kolor" name="UI/Color Settings"/> - <menu_item_call label="Pokaż schowek" name="Show Side Tray"/> + <menu_item_call label="Ustawienia debugowania" name="Debug Settings"/> + <menu_item_call label="Ustawienia UI/kolor" name="UI/Color Settings"/> <menu label="UI Testy" name="UI Tests"/> + <menu_item_call label="Ustaw rozmiar interfejsu..." name="Set Window Size..."/> <menu_item_call label="Wyświetl TOS" name="TOS"/> - <menu_item_call label="Wyświetl Wiadomość Krytyczną" name="Critical"/> - <menu_item_call label="Test Przeglądarki Internetowej" name="Web Browser Test"/> + <menu_item_call label="Wyświetl wiadomość krytyczną" name="Critical"/> + <menu_item_call label="Test przeglądarki internetowej" name="Web Browser Test"/> </menu> </menu_bar> diff --git a/indra/newview/skins/default/xui/pl/menu_mini_map.xml b/indra/newview/skins/default/xui/pl/menu_mini_map.xml index dbebeadfbe..94e4c91abb 100644 --- a/indra/newview/skins/default/xui/pl/menu_mini_map.xml +++ b/indra/newview/skins/default/xui/pl/menu_mini_map.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="Popup"> - <menu_item_call label="Zoom Blisko" name="Zoom Close"/> - <menu_item_call label="Zoom Średnio" name="Zoom Medium"/> - <menu_item_call label="Zoom Daleko" name="Zoom Far"/> - <menu_item_check label="Obróć Mapę" name="Rotate Map"/> + <menu_item_call label="Zoom blisko" name="Zoom Close"/> + <menu_item_call label="Zoom średnio" name="Zoom Medium"/> + <menu_item_call label="Zoom daleko" name="Zoom Far"/> + <menu_item_check label="Obróć mapę" name="Rotate Map"/> <menu_item_call label="Zatrzymaj" name="Stop Tracking"/> <menu_item_call label="Mapa Świata" name="World Map"/> </menu> diff --git a/indra/newview/skins/default/xui/pl/menu_navbar.xml b/indra/newview/skins/default/xui/pl/menu_navbar.xml index 8d84f3e764..f38b805ee2 100644 --- a/indra/newview/skins/default/xui/pl/menu_navbar.xml +++ b/indra/newview/skins/default/xui/pl/menu_navbar.xml @@ -1,11 +1,11 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="Navbar Menu"> - <menu_item_check label="Pokaż Współrzędne" name="Show Coordinates"/> - <menu_item_check label="Pokaż Właściwości Posiadłości" name="Show Parcel Properties"/> + <menu_item_check label="Pokaż współrzędne" name="Show Coordinates"/> + <menu_item_check label="Pokaż właściwości Posiadłości" name="Show Parcel Properties"/> <menu_item_call label="Ulubione Miejsce" name="Landmark"/> <menu_item_call label="Wytnij" name="Cut"/> <menu_item_call label="Kopiuj" name="Copy"/> <menu_item_call label="Wklej" name="Paste"/> <menu_item_call label="Usuń" name="Delete"/> - <menu_item_call label="Zaznacz Wszystko" name="Select All"/> + <menu_item_call label="Zaznacz wszystko" name="Select All"/> </menu> diff --git a/indra/newview/skins/default/xui/pl/menu_nearby_chat.xml b/indra/newview/skins/default/xui/pl/menu_nearby_chat.xml index 78b8c0a4fc..fe5bc6ba6f 100644 --- a/indra/newview/skins/default/xui/pl/menu_nearby_chat.xml +++ b/indra/newview/skins/default/xui/pl/menu_nearby_chat.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="NearBy Chat Menu"> - <menu_item_call label="Pokaż Osoby w Pobliżu..." name="nearby_people"/> - <menu_item_check label="Pokaż Zablokowany Tekst" name="muted_text"/> - <menu_item_check label="Wyświetlaj Ikonki Znajomych" name="show_buddy_icons"/> - <menu_item_check label="Wyświetlaj Imiona" name="show_names"/> - <menu_item_check label="Wyświetlaj Ikonki i Imiona" name="show_icons_and_names"/> - <menu_item_call label="Rozmiar Czcionki" name="font_size"/> + <menu_item_call label="Pokaż osoby w pobliżu..." name="nearby_people"/> + <menu_item_check label="Pokaż zablokowany tekst" name="muted_text"/> + <menu_item_check label="Wyświetlaj ikonki znajomych" name="show_buddy_icons"/> + <menu_item_check label="Wyświetlaj imiona" name="show_names"/> + <menu_item_check label="Wyświetlaj ikonki i imiona" name="show_icons_and_names"/> + <menu_item_call label="Rozmiar czcionki" name="font_size"/> </menu> diff --git a/indra/newview/skins/default/xui/pl/menu_notification_well_button.xml b/indra/newview/skins/default/xui/pl/menu_notification_well_button.xml new file mode 100644 index 0000000000..bd3d42f9b1 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/menu_notification_well_button.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Notification Well Button Context Menu"> + <menu_item_call label="Zamknij" name="Close All"/> +</context_menu> diff --git a/indra/newview/skins/default/xui/pl/menu_object.xml b/indra/newview/skins/default/xui/pl/menu_object.xml index bdeeb61bf4..763b120f89 100644 --- a/indra/newview/skins/default/xui/pl/menu_object.xml +++ b/indra/newview/skins/default/xui/pl/menu_object.xml @@ -4,21 +4,24 @@ <menu_item_call label="Edytuj" name="Edit..."/> <menu_item_call label="Buduj" name="Build"/> <menu_item_call label="Otwórz" name="Open"/> - <menu_item_call label="Usiądź Tutaj" name="Object Sit"/> + <menu_item_call label="Usiądź tutaj" name="Object Sit"/> + <menu_item_call label="Wstań" name="Object Stand Up"/> <menu_item_call label="Sprawdź" name="Object Inspect"/> - <context_menu label="Połóż >" name="Put On"> + <menu_item_call label="Przybliż" name="Zoom In"/> + <context_menu label="Załóż na ▶" name="Put On"> <menu_item_call label="Załóż" name="Wear"/> - <context_menu label="Dołącz do >" name="Object Attach"/> - <context_menu label="Dołącz do HUD >" name="Object Attach HUD"/> + <context_menu label="Dołącz ▶" name="Object Attach"/> + <context_menu label="Dołącz HUD ▶" name="Object Attach HUD"/> </context_menu> - <context_menu label="Usuń >" name="Remove"> - <menu_item_call label="Weź" name="Pie Object Take"/> + <context_menu label="Usuń ▶" name="Remove"> <menu_item_call label="Raport" name="Report Abuse..."/> <menu_item_call label="Zablokuj" name="Object Mute"/> <menu_item_call label="Zwróć" name="Return..."/> <menu_item_call label="Usuń" name="Delete"/> </context_menu> - <menu_item_call label="Weź Kopię" name="Take Copy"/> + <menu_item_call label="Kup" name="Pie Object Bye"/> + <menu_item_call label="Weź" name="Pie Object Take"/> + <menu_item_call label="Weź kopię" name="Take Copy"/> <menu_item_call label="Zapłać" name="Pay..."/> <menu_item_call label="Kup" name="Buy..."/> </context_menu> diff --git a/indra/newview/skins/default/xui/pl/menu_participant_list.xml b/indra/newview/skins/default/xui/pl/menu_participant_list.xml index 604ee2d104..079b8558da 100644 --- a/indra/newview/skins/default/xui/pl/menu_participant_list.xml +++ b/indra/newview/skins/default/xui/pl/menu_participant_list.xml @@ -1,16 +1,20 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Participant List Context Menu"> + <menu_item_check label="Sortuj według imienia" name="SortByName"/> + <menu_item_check label="Sortuj według ostatniego mówcy" name="SortByRecentSpeakers"/> <menu_item_call label="Zobacz Profil" name="View Profile"/> <menu_item_call label="Dodaj Znajomość" name="Add Friend"/> <menu_item_call label="IM" name="IM"/> <menu_item_call label="Zadzwoń" name="Call"/> <menu_item_call label="Udostępnij" name="Share"/> <menu_item_call label="Zapłać" name="Pay"/> - <menu_item_check label="Zablokuj/Odblokuj" name="Block/Unblock"/> - <menu_item_check label="Zablokuj Tekst" name="MuteText"/> - <menu_item_check label="Odblokuj Tekst" name="AllowTextChat"/> - <menu_item_call label="Zablokuj tego uczestnika" name="ModerateVoiceMuteSelected"/> - <menu_item_call label="Zablokuj wszystkich pozostałych" name="ModerateVoiceMuteOthers"/> - <menu_item_call label="Oblokuj tego uczestnika" name="ModerateVoiceUnMuteSelected"/> - <menu_item_call label="Odblokuj wszystkich pozostałych" name="ModerateVoiceUnMuteOthers"/> + <menu_item_check label="Zablokuj głos" name="Block/Unblock"/> + <menu_item_check label="Zablokuj tekst" name="MuteText"/> + <context_menu label="Opcje Moderatora >" name="Moderator Options"> + <menu_item_check label="Czat/IM dozwolony" name="AllowTextChat"/> + <menu_item_call label="Wycisz tego uczestnika" name="ModerateVoiceMuteSelected"/> + <menu_item_call label="Wycisz wszystkich pozostałych" name="ModerateVoiceMuteOthers"/> + <menu_item_call label="Odblokuj wyciszenie tego uczestnika" name="ModerateVoiceUnMuteSelected"/> + <menu_item_call label="Odblokuj wyciszenie wszystkich" name="ModerateVoiceUnMuteOthers"/> + </context_menu> </context_menu> diff --git a/indra/newview/skins/default/xui/pl/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/pl/menu_people_friends_view_sort.xml index 0043030035..9c33fad00f 100644 --- a/indra/newview/skins/default/xui/pl/menu_people_friends_view_sort.xml +++ b/indra/newview/skins/default/xui/pl/menu_people_friends_view_sort.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="menu_group_plus"> - <menu_item_check label="Porządkuj Według Nazwy" name="sort_name"/> - <menu_item_check label="Porządkuj Według Statusu" name="sort_status"/> - <menu_item_check label="Wyświetlaj Ikonki" name="view_icons"/> - <menu_item_call label="Pokaż Zablokowanych Rezydentów & Obiekty" name="show_blocked_list"/> + <menu_item_check label="Porządkuj według nazwy" name="sort_name"/> + <menu_item_check label="Porządkuj według statusu" name="sort_status"/> + <menu_item_check label="Wyświetlaj ikonki" name="view_icons"/> + <menu_item_call label="Pokaż zablokowanych Rezydentów & obiekty" name="show_blocked_list"/> </menu> diff --git a/indra/newview/skins/default/xui/pl/menu_people_groups.xml b/indra/newview/skins/default/xui/pl/menu_people_groups.xml new file mode 100644 index 0000000000..567482dcda --- /dev/null +++ b/indra/newview/skins/default/xui/pl/menu_people_groups.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<menu name="menu_group_plus"> + <menu_item_call label="Zobacz Info" name="View Info"/> + <menu_item_call label="Czat" name="Chat"/> + <menu_item_call label="Rozmowa" name="Call"/> + <menu_item_call label="Aktywuj" name="Activate"/> + <menu_item_call label="Opuść" name="Leave"/> +</menu> diff --git a/indra/newview/skins/default/xui/pl/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/pl/menu_people_groups_view_sort.xml index f661cfeba0..4be60d9b83 100644 --- a/indra/newview/skins/default/xui/pl/menu_people_groups_view_sort.xml +++ b/indra/newview/skins/default/xui/pl/menu_people_groups_view_sort.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="menu_group_plus"> - <menu_item_check label="Wyświetlaj Ikonki Grupy" name="Display Group Icons"/> - <menu_item_call label="Opuść Zaznaczone Grupy" name="Leave Selected Group"/> + <menu_item_check label="Wyświetlaj ikonki Grupy" name="Display Group Icons"/> + <menu_item_call label="Opuść zaznaczone Grupy" name="Leave Selected Group"/> </menu> diff --git a/indra/newview/skins/default/xui/pl/menu_people_nearby.xml b/indra/newview/skins/default/xui/pl/menu_people_nearby.xml index 0f80b56c16..afe3a5200b 100644 --- a/indra/newview/skins/default/xui/pl/menu_people_nearby.xml +++ b/indra/newview/skins/default/xui/pl/menu_people_nearby.xml @@ -2,9 +2,12 @@ <context_menu name="Avatar Context Menu"> <menu_item_call label="Zobacz Profil" name="View Profile"/> <menu_item_call label="Dodaj Znajomość" name="Add Friend"/> + <menu_item_call label="Usuń z listy Znajomych" name="Remove Friend"/> <menu_item_call label="IM" name="IM"/> <menu_item_call label="Zadzwoń" name="Call"/> + <menu_item_call label="Mapa" name="Map"/> <menu_item_call label="Udostępnij" name="Share"/> <menu_item_call label="Zapłać" name="Pay"/> <menu_item_check label="Zablokuj/Odblokuj" name="Block/Unblock"/> + <menu_item_call label="Teleportuj" name="teleport"/> </context_menu> diff --git a/indra/newview/skins/default/xui/pl/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/pl/menu_people_nearby_multiselect.xml index 156c10e3f3..bc89402a96 100644 --- a/indra/newview/skins/default/xui/pl/menu_people_nearby_multiselect.xml +++ b/indra/newview/skins/default/xui/pl/menu_people_nearby_multiselect.xml @@ -1,6 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Multi-Selected People Context Menu"> <menu_item_call label="Dodaj Znajomych" name="Add Friends"/> + <menu_item_call label="Usuń Znajomych" name="Remove Friend"/> <menu_item_call label="IM" name="IM"/> <menu_item_call label="Zadzwoń" name="Call"/> <menu_item_call label="Udostępnij" name="Share"/> diff --git a/indra/newview/skins/default/xui/pl/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/pl/menu_people_nearby_view_sort.xml index 9e5f1a5917..8ec3820f84 100644 --- a/indra/newview/skins/default/xui/pl/menu_people_nearby_view_sort.xml +++ b/indra/newview/skins/default/xui/pl/menu_people_nearby_view_sort.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="menu_group_plus"> - <menu_item_check label="Porządkuj Według Ostatnich Rozmówców" name="sort_by_recent_speakers"/> - <menu_item_check label="Porządkuj Według Nazwy" name="sort_name"/> - <menu_item_check label="Porządkuj Według Odległości" name="sort_distance"/> - <menu_item_check label="Wyświetlaj Ikonki" name="view_icons"/> - <menu_item_call label="Pokaż Zablokowanych Rezydentów & Obiekty" name="show_blocked_list"/> + <menu_item_check label="Porządkuj według ostatnich rozmówców" name="sort_by_recent_speakers"/> + <menu_item_check label="Porządkuj według nazwy" name="sort_name"/> + <menu_item_check label="Porządkuj według odległości" name="sort_distance"/> + <menu_item_check label="Wyświetlaj ikonki" name="view_icons"/> + <menu_item_call label="Pokaż zablokowanych Rezydentów & obiekty" name="show_blocked_list"/> </menu> diff --git a/indra/newview/skins/default/xui/pl/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/pl/menu_people_recent_view_sort.xml index 418b67bce8..b474a556bd 100644 --- a/indra/newview/skins/default/xui/pl/menu_people_recent_view_sort.xml +++ b/indra/newview/skins/default/xui/pl/menu_people_recent_view_sort.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="menu_group_plus"> - <menu_item_check label="Porządkuj Według Daty" name="sort_most"/> - <menu_item_check label="Porządkuj Według Nazwy" name="sort_name"/> - <menu_item_check label="Wyświetlaj Ikonki" name="view_icons"/> - <menu_item_call label="Pokaż Zablokowanych Rezydentów & Obiekty" name="show_blocked_list"/> + <menu_item_check label="Porządkuj według daty" name="sort_most"/> + <menu_item_check label="Porządkuj według nazwy" name="sort_name"/> + <menu_item_check label="Wyświetlaj ikonki" name="view_icons"/> + <menu_item_call label="Pokaż zablokowanych Rezydentów & obiekty" name="show_blocked_list"/> </menu> diff --git a/indra/newview/skins/default/xui/pl/menu_picks_plus.xml b/indra/newview/skins/default/xui/pl/menu_picks_plus.xml index 14ab9c2978..8f196612a8 100644 --- a/indra/newview/skins/default/xui/pl/menu_picks_plus.xml +++ b/indra/newview/skins/default/xui/pl/menu_picks_plus.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <toggleable_menu name="picks_plus_menu"> - <menu_item_call label="Utwórz" name="create_pick"/> + <menu_item_call label="Stwórz" name="create_pick"/> <menu_item_call label="Nowa Reklama" name="create_classified"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/pl/menu_place.xml b/indra/newview/skins/default/xui/pl/menu_place.xml index 72f4b1265f..312bfc6bb0 100644 --- a/indra/newview/skins/default/xui/pl/menu_place.xml +++ b/indra/newview/skins/default/xui/pl/menu_place.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <toggleable_menu name="place_overflow_menu"> - <menu_item_call label="Zapisz Ulubione Miejsce" name="landmark"/> + <menu_item_call label="Zapisz Landmark" name="landmark"/> <menu_item_call label="Utwórz" name="pick"/> - <menu_item_call label="Kup Wstęp" name="pass"/> + <menu_item_call label="Kup Przepustkę" name="pass"/> <menu_item_call label="Edytuj" name="edit"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/pl/menu_place_add_button.xml b/indra/newview/skins/default/xui/pl/menu_place_add_button.xml index a737fc49ce..6175671fb9 100644 --- a/indra/newview/skins/default/xui/pl/menu_place_add_button.xml +++ b/indra/newview/skins/default/xui/pl/menu_place_add_button.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="menu_folder_gear"> - <menu_item_call label="Dodaj Folder" name="add_folder"/> - <menu_item_call label="Dodaj do Ulubionych Miejsc" name="add_landmark"/> + <menu_item_call label="Dodaj folder" name="add_folder"/> + <menu_item_call label="Dodaj do Landmarków" name="add_landmark"/> </menu> diff --git a/indra/newview/skins/default/xui/pl/menu_places_gear_folder.xml b/indra/newview/skins/default/xui/pl/menu_places_gear_folder.xml index f5ece87b28..d17b6c1033 100644 --- a/indra/newview/skins/default/xui/pl/menu_places_gear_folder.xml +++ b/indra/newview/skins/default/xui/pl/menu_places_gear_folder.xml @@ -1,15 +1,15 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="menu_folder_gear"> - <menu_item_call label="Dodaj do Ulubionych Miejsc" name="add_landmark"/> - <menu_item_call label="Dodaj Folder" name="add_folder"/> + <menu_item_call label="Dodaj do Landmarków" name="add_landmark"/> + <menu_item_call label="Dodaj folder" name="add_folder"/> <menu_item_call label="Wytnij" name="cut"/> <menu_item_call label="Kopiuj" name="copy_folder"/> <menu_item_call label="Wklej" name="paste"/> - <menu_item_call label="Zmień Nazwę" name="rename"/> + <menu_item_call label="Zmień nazwę" name="rename"/> <menu_item_call label="Usuń" name="delete"/> <menu_item_call label="Rozwiń" name="expand"/> <menu_item_call label="Schowaj" name="collapse"/> - <menu_item_call label="Rozwiń Wszystkie Foldery" name="expand_all"/> - <menu_item_call label="Schowaj Wszystkie Foldery" name="collapse_all"/> + <menu_item_call label="Rozwiń wszystkie foldery" name="expand_all"/> + <menu_item_call label="Schowaj wszystkie foldery" name="collapse_all"/> <menu_item_check label="Sortuj według daty" name="sort_by_date"/> </menu> diff --git a/indra/newview/skins/default/xui/pl/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/pl/menu_places_gear_landmark.xml index e88f650ed0..0720aea8aa 100644 --- a/indra/newview/skins/default/xui/pl/menu_places_gear_landmark.xml +++ b/indra/newview/skins/default/xui/pl/menu_places_gear_landmark.xml @@ -1,18 +1,18 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <menu name="menu_ladmark_gear"> <menu_item_call label="Teleportuj" name="teleport"/> - <menu_item_call label="Więcej Informacji" name="more_info"/> - <menu_item_call label="Pokaż na Mapie" name="show_on_map"/> - <menu_item_call label="Dodaj do Ulubionych Miejsc" name="add_landmark"/> - <menu_item_call label="Dodaj Folder" name="add_folder"/> + <menu_item_call label="Więcej informacji" name="more_info"/> + <menu_item_call label="Pokaż na mapie" name="show_on_map"/> + <menu_item_call label="Dodaj do Landmarków" name="add_landmark"/> + <menu_item_call label="Dodaj folder" name="add_folder"/> <menu_item_call label="Wytnij" name="cut"/> - <menu_item_call label="Kopiuj Ulubione Miejsce" name="copy_landmark"/> + <menu_item_call label="Kopiuj Landmark" name="copy_landmark"/> <menu_item_call label="Kopiuj SLurl" name="copy_slurl"/> <menu_item_call label="Wklej" name="paste"/> - <menu_item_call label="Zmień Nazwę" name="rename"/> + <menu_item_call label="Zmień nazwę" name="rename"/> <menu_item_call label="Usuń" name="delete"/> - <menu_item_call label="Rozwiń Wszystkie Foldery" name="expand_all"/> - <menu_item_call label="Schowaj Wszystkie Foldery" name="collapse_all"/> + <menu_item_call label="Rozwiń wszystkie foldery" name="expand_all"/> + <menu_item_call label="Schowaj wszystkie foldery" name="collapse_all"/> <menu_item_check label="Sortuj według daty" name="sort_by_date"/> <menu_item_call label="Stwórz Ulubione" name="create_pick"/> </menu> diff --git a/indra/newview/skins/default/xui/pl/menu_profile_overflow.xml b/indra/newview/skins/default/xui/pl/menu_profile_overflow.xml index 8405d48e49..ef836c8ecf 100644 --- a/indra/newview/skins/default/xui/pl/menu_profile_overflow.xml +++ b/indra/newview/skins/default/xui/pl/menu_profile_overflow.xml @@ -1,5 +1,12 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <toggleable_menu name="profile_overflow_menu"> + <menu_item_call label="Mapa" name="show_on_map"/> <menu_item_call label="Zapłać" name="pay"/> <menu_item_call label="Udostępnij" name="share"/> + <menu_item_call label="Zablokuj" name="block"/> + <menu_item_call label="Odblokuj" name="unblock"/> + <menu_item_call label="Wyrzuć" name="kick"/> + <menu_item_call label="Unieruchom" name="freeze"/> + <menu_item_call label="Uruchom" name="unfreeze"/> + <menu_item_call label="CSR" name="csr"/> </toggleable_menu> diff --git a/indra/newview/skins/default/xui/pl/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/pl/menu_teleport_history_item.xml index 7e58747267..cd36c116b0 100644 --- a/indra/newview/skins/default/xui/pl/menu_teleport_history_item.xml +++ b/indra/newview/skins/default/xui/pl/menu_teleport_history_item.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Teleport History Item Context Menu"> <menu_item_call label="Teleportuj" name="Teleport"/> - <menu_item_call label="Więcej Szczegółów" name="More Information"/> + <menu_item_call label="Więcej szczegółów" name="More Information"/> <menu_item_call label="Kopiuj do schowka" name="CopyToClipboard"/> </context_menu> diff --git a/indra/newview/skins/default/xui/pl/menu_url_agent.xml b/indra/newview/skins/default/xui/pl/menu_url_agent.xml index 0f210b140b..7c90e6582d 100644 --- a/indra/newview/skins/default/xui/pl/menu_url_agent.xml +++ b/indra/newview/skins/default/xui/pl/menu_url_agent.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Url Popup"> <menu_item_call label="Pokaż Profil Rezydenta" name="show_agent"/> - <menu_item_call label="Kopiuj Nazwę do Schowka" name="url_copy_label"/> + <menu_item_call label="Kopiuj nazwę do schowka" name="url_copy_label"/> <menu_item_call label="Kopiuj SLurl do schowka" name="url_copy"/> </context_menu> diff --git a/indra/newview/skins/default/xui/pl/menu_url_group.xml b/indra/newview/skins/default/xui/pl/menu_url_group.xml index 38e4360691..109f96e562 100644 --- a/indra/newview/skins/default/xui/pl/menu_url_group.xml +++ b/indra/newview/skins/default/xui/pl/menu_url_group.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Url Popup"> - <menu_item_call label="Pokaż Szczegóły o Grupie" name="show_group"/> - <menu_item_call label="Kopiuj Grupę do Schowka" name="url_copy_label"/> + <menu_item_call label="Pokaż szczegóły o Grupie" name="show_group"/> + <menu_item_call label="Kopiuj Grupę do schowka" name="url_copy_label"/> <menu_item_call label="Kopiuj SLurl do schowka" name="url_copy"/> </context_menu> diff --git a/indra/newview/skins/default/xui/pl/menu_url_http.xml b/indra/newview/skins/default/xui/pl/menu_url_http.xml index 0d8793d41e..e73f7b6745 100644 --- a/indra/newview/skins/default/xui/pl/menu_url_http.xml +++ b/indra/newview/skins/default/xui/pl/menu_url_http.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Url Popup"> - <menu_item_call label="Otwórz Przeglądarkę Internetową" name="url_open"/> - <menu_item_call label="Otwórz w Wewnętrzenej Przeglądarce" name="url_open_internal"/> - <menu_item_call label="Otwórz w Zewnętrznej Przeglądarce" name="url_open_external"/> + <menu_item_call label="Otwórz przeglądarkę internetową" name="url_open"/> + <menu_item_call label="Otwórz w wewnętrzenej przeglądarce" name="url_open_internal"/> + <menu_item_call label="Otwórz w zewnętrznej przeglądarce" name="url_open_external"/> <menu_item_call label="Kopiuj URL do schowka" name="url_copy"/> </context_menu> diff --git a/indra/newview/skins/default/xui/pl/menu_url_inventory.xml b/indra/newview/skins/default/xui/pl/menu_url_inventory.xml index c11860d6fe..ce3309cba0 100644 --- a/indra/newview/skins/default/xui/pl/menu_url_inventory.xml +++ b/indra/newview/skins/default/xui/pl/menu_url_inventory.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Url Popup"> - <menu_item_call label="Pokaż Obiekt w Szafie" name="show_item"/> - <menu_item_call label="Kopiuj Nazwę do Schowka" name="url_copy_label"/> + <menu_item_call label="Pokaż obiekt w Szafie" name="show_item"/> + <menu_item_call label="Kopiuj nazwę do schowka" name="url_copy_label"/> <menu_item_call label="Kopiuj SLurl do schowka" name="url_copy"/> </context_menu> diff --git a/indra/newview/skins/default/xui/pl/menu_url_map.xml b/indra/newview/skins/default/xui/pl/menu_url_map.xml index becbd8276f..179ab1f676 100644 --- a/indra/newview/skins/default/xui/pl/menu_url_map.xml +++ b/indra/newview/skins/default/xui/pl/menu_url_map.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Url Popup"> - <menu_item_call label="Pokaż na Mapie" name="show_on_map"/> - <menu_item_call label="Teleportuj do Miejsca" name="teleport_to_location"/> + <menu_item_call label="Pokaż na mapie" name="show_on_map"/> + <menu_item_call label="Teleportuj do miejsca" name="teleport_to_location"/> <menu_item_call label="Kopiuj SLurl do schowka" name="url_copy"/> </context_menu> diff --git a/indra/newview/skins/default/xui/pl/menu_url_objectim.xml b/indra/newview/skins/default/xui/pl/menu_url_objectim.xml index 0bdf1da2a4..7576208a9e 100644 --- a/indra/newview/skins/default/xui/pl/menu_url_objectim.xml +++ b/indra/newview/skins/default/xui/pl/menu_url_objectim.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Url Popup"> - <menu_item_call label="Pokaż Szczegóły o Obiekcie" name="show_object"/> - <menu_item_call label="Pokaż na Mapie" name="show_on_map"/> - <menu_item_call label="Teleportuj to Miejsca Obiektu" name="teleport_to_object"/> - <menu_item_call label="Kopiuj Nazwę Obiektu do Schowka" name="url_copy_label"/> + <menu_item_call label="Pokaż szczegóły o obiekcie" name="show_object"/> + <menu_item_call label="Pokaż na mapie" name="show_on_map"/> + <menu_item_call label="Teleportuj to miejsca obiektu" name="teleport_to_object"/> + <menu_item_call label="Kopiuj nazwę obiektu do schowka" name="url_copy_label"/> <menu_item_call label="Kopiuj SLurl do schowka" name="url_copy"/> </context_menu> diff --git a/indra/newview/skins/default/xui/pl/menu_url_parcel.xml b/indra/newview/skins/default/xui/pl/menu_url_parcel.xml index 881c010bc1..43b945b8be 100644 --- a/indra/newview/skins/default/xui/pl/menu_url_parcel.xml +++ b/indra/newview/skins/default/xui/pl/menu_url_parcel.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Url Popup"> - <menu_item_call label="Pokaż Szczegóły o Miejscu" name="show_parcel"/> - <menu_item_call label="Pokaż na Mapie" name="show_on_map"/> + <menu_item_call label="Pokaż szczegóły o Miejscu" name="show_parcel"/> + <menu_item_call label="Pokaż na mapie" name="show_on_map"/> <menu_item_call label="Kopiuj SLurl do schowka" name="url_copy"/> </context_menu> diff --git a/indra/newview/skins/default/xui/pl/menu_url_slurl.xml b/indra/newview/skins/default/xui/pl/menu_url_slurl.xml index b9fa692365..456146d8e5 100644 --- a/indra/newview/skins/default/xui/pl/menu_url_slurl.xml +++ b/indra/newview/skins/default/xui/pl/menu_url_slurl.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Url Popup"> - <menu_item_call label="Pokaż Szczegóły o Miejscu" name="show_place"/> - <menu_item_call label="Pokaż na Mapie" name="show_on_map"/> + <menu_item_call label="Pokaż szczegóły o Miejscu" name="show_place"/> + <menu_item_call label="Pokaż na mapie" name="show_on_map"/> <menu_item_call label="Teleportuj do miejsca" name="teleport_to_location"/> <menu_item_call label="Kopiuj SLurl do schowka" name="url_copy"/> </context_menu> diff --git a/indra/newview/skins/default/xui/pl/menu_viewer.xml b/indra/newview/skins/default/xui/pl/menu_viewer.xml index 2a5842e553..85ceb9592f 100644 --- a/indra/newview/skins/default/xui/pl/menu_viewer.xml +++ b/indra/newview/skins/default/xui/pl/menu_viewer.xml @@ -7,44 +7,45 @@ <menu_item_call label="Mój Profil" name="Profile"/> <menu_item_call label="Mój Wygląd" name="Appearance"/> <menu_item_check label="Moja Szafa" name="Inventory"/> - <menu_item_call label="Pokaż Szafę w Schowku" name="ShowSidetrayInventory"/> - <menu_item_call label="Moje Gesturki" name="Gestures"/> + <menu_item_check label="Moja Szafa" name="ShowSidetrayInventory"/> + <menu_item_check label="Moje Gesty" name="Gestures"/> <menu label="Mój Status" name="Status"> <menu_item_call label="Tryb Oddalenia" name="Set Away"/> <menu_item_call label="Tryb Pracy" name="Set Busy"/> </menu> - <menu_item_call label="Zarządaj Statusu Administratora" name="Request Admin Options"/> + <menu_item_call label="Zażądaj Statusu Administratora" name="Request Admin Options"/> <menu_item_call label="Wyłącz Status Administratora" name="Leave Admin Options"/> <menu_item_call label="Wyłącz [APP_NAME]" name="Quit"/> </menu> - <menu label="Kommunikacja" name="Communicate"> + <menu label="Komunikacja" name="Communicate"> <menu_item_call label="Znajomi" name="My Friends"/> <menu_item_call label="Grupy" name="My Groups"/> <menu_item_check label="Czat Lokalny" name="Nearby Chat"/> <menu_item_call label="Osoby w Pobliżu" name="Active Speakers"/> - <menu_item_check label="Media w Pobliżu" name="Nearby Media"/> </menu> <menu label="Świat" name="World"> - <menu_item_check label="Ustawienia Ruchu" name="Movement Controls"/> - <menu_item_check label="Widok" name="Camera Controls"/> - <menu_item_call label="O Posiadłości" name="About Land"/> - <menu_item_call label="Region/Majątek" name="Region/Estate"/> + <menu_item_check label="Mini-Mapa" name="Mini-Map"/> + <menu_item_check label="Mapa Świata" name="World Map"/> + <menu_item_call label="Zrób Zdjęcie" name="Take Snapshot"/> + <menu_item_call label="Zapamiętaj to Miejsce" name="Create Landmark Here"/> + <menu label="Miejsce" name="Land"> + <menu_item_call label="O Posiadłości" name="About Land"/> + <menu_item_call label="Region/Majątek" name="Region/Estate"/> + </menu> <menu_item_call label="Kup Posiadłość" name="Buy Land"/> <menu_item_call label="Moje Posiadłości" name="My Land"/> - <menu label="Pokaż" name="Land"> - <menu_item_check label="Linie Banu" name="Ban Lines"/> + <menu label="Pokaż" name="LandShow"> + <menu_item_check label="Ustawienia Ruchu" name="Movement Controls"/> + <menu_item_check label="Zobacz Ustawienia" name="Camera Controls"/> + <menu_item_check label="Linie Bana" name="Ban Lines"/> <menu_item_check label="Emitery" name="beacons"/> <menu_item_check label="Granice Posiadłości" name="Property Lines"/> <menu_item_check label="Właściciele Posiadłości" name="Land Owners"/> + <menu_item_check label="Współrzędne" name="Coordinates"/> + <menu_item_check label="Właściwości Posiadłości" name="Parcel Properties"/> </menu> - <menu label="Ulubione Miejsca" name="Landmarks"> - <menu_item_call label="Zapisz Ulubione Miejsce" name="Create Landmark Here"/> - <menu_item_call label="Ustaw Miejsce Startu" name="Set Home to Here"/> - </menu> - <menu_item_call label="Miejsce Startu" name="Teleport Home"/> - <menu_item_check label="Mini-Mapa" name="Mini-Map"/> - <menu_item_check label="Mapa Świata" name="World Map"/> - <menu_item_call label="Zrób Zdjęcie" name="Take Snapshot"/> + <menu_item_call label="Teleportuj do Miejsca Startu" name="Teleport Home"/> + <menu_item_call label="Ustaw Miejsce Startu" name="Set Home to Here"/> <menu label="Słońce" name="Environment Settings"> <menu_item_call label="Wschód Słońca" name="Sunrise"/> <menu_item_call label="Południe" name="Noon"/> @@ -74,12 +75,14 @@ <menu_item_call label="Zaznacz Wszystko" name="Select All"/> <menu_item_call label="Cofnij Zaznaczenie" name="Deselect"/> </menu> - <menu_item_call label="Grupuj" name="Link"/> + <menu_item_call label="Linkuj" name="Link"/> <menu_item_call label="Rozlinkuj" name="Unlink"/> + <menu_item_check label="Edytuj Zgrupowane Obiekty" name="Edit Linked Parts"/> <menu_item_call label="Ogniskowa Selekcji" name="Focus on Selection"/> <menu_item_call label="Przybliż do Selekcji" name="Zoom to Selection"/> <menu label="Obiekt" name="Object"> - <menu_item_call label="Kup" name="Menu Object Take"/> + <menu_item_call label="Kup" name="Menu Object Buy"/> + <menu_item_call label="Weź" name="Menu Object Take"/> <menu_item_call label="Weź Kopię" name="Take Copy"/> <menu_item_call label="Zapisz Obiekt do Szafy" name="Save Object Back to My Inventory"/> <menu_item_call label="Zapisz do Treści Obiektu" name="Save Object Back to Object Contents"/> @@ -92,25 +95,18 @@ <menu_item_call label="Wstrzymaj Działanie Skryptów w Selekcji" name="Set Scripts to Not Running"/> </menu> <menu label="Opcje" name="Options"> - <menu_item_check label="Edytuj Części Zlinkowane" name="Edit Linked Parts"/> <menu_item_call label="Ustaw Domyślne Pozwolenia Ładowania" name="perm prefs"/> <menu_item_check label="Pokaż Zaawansowane Pozwolenia" name="DebugPermissions"/> - <menu label="Selekcja" name="Selection"> - <menu_item_check label="Wybierz Tylko Moje Obiekty" name="Select Only My Objects"/> - <menu_item_check label="Zaznacz Tylko Poruszające się Obiekty" name="Select Only Movable Objects"/> - <menu_item_check label="Wybierz Przez Zaznaczenie" name="Select By Surrounding"/> - </menu> - <menu label="Pokaż" name="Show"> - <menu_item_check label="Pokaż Ukrytą Selekcję" name="Show Hidden Selection"/> - <menu_item_check label="Pokaż Promień Światła dla Selekcji" name="Show Light Radius for Selection"/> - <menu_item_check label="Pokaż Emitery Selekcji" name="Show Selection Beam"/> - </menu> - <menu label="Siatka" name="Grid"> - <menu_item_check label="Przeciągnij Obiekt" name="Snap to Grid"/> - <menu_item_call label="Przeciągnij Obiekt XY do Siatki" name="Snap Object XY to Grid"/> - <menu_item_call label="Zastosuj Zaznaczenie dla Siatki" name="Use Selection for Grid"/> - <menu_item_call label="Ustawienia Siatki" name="Grid Options"/> - </menu> + <menu_item_check label="Wybierz Tylko Moje Obiekty" name="Select Only My Objects"/> + <menu_item_check label="Wybierz Tylko Obiekty Przesuwalne" name="Select Only Movable Objects"/> + <menu_item_check label="Wybierz przez Otoczenie" name="Select By Surrounding"/> + <menu_item_check label="Zobacz Ukrytą Selekcję" name="Show Hidden Selection"/> + <menu_item_check label="Pokaż Promień Emitera dla Selekcji" name="Show Light Radius for Selection"/> + <menu_item_check label="Pokaż Emiter Selekcji" name="Show Selection Beam"/> + <menu_item_check label="Uruchom Siatkę" name="Snap to Grid"/> + <menu_item_call label="Przeciągnij Obiekt do Siatki" name="Snap Object XY to Grid"/> + <menu_item_call label="Wybierz Zaznaczenie Siatki" name="Use Selection for Grid"/> + <menu_item_call label="Opcje Siatki" name="Grid Options"/> </menu> <menu label="Wybierz Zlinkowane Części" name="Select Linked Parts"> <menu_item_call label="Wybierz Następną Część" name="Select Next Part"/> @@ -121,15 +117,14 @@ </menu> <menu label="Pomoc" name="Help"> <menu_item_call label="[SECOND_LIFE] Portal Pomocy" name="Second Life Help"/> - <menu_item_call label="Samouczek" name="Tutorial"/> <menu_item_call label="Złóż Raport o Nadużyciu" name="Report Abuse"/> <menu_item_call label="Zgłoś Błędy Klienta" name="Report Bug"/> </menu> <menu label="Zaawansowane" name="Advanced"> - <menu_item_check label="Uruchom Tryb Oddalenia po 30 Minutach" name="Go Away/AFK When Idle"/> <menu_item_call label="Zatrzymaj Wszystkie Animacje" name="Stop Animating My Avatar"/> <menu_item_call label="Odswież Wyświetlanie Tekstur" name="Rebake Texture"/> <menu_item_call label="Domyślne Ustawienia Rozmiaru Interfejsu" name="Set UI Size to Default"/> + <menu_item_call label="Ustaw Rozmiar Interfejsu..." name="Set Window Size..."/> <menu_item_check label="Ogranicz Dystans Selekcji" name="Limit Select Distance"/> <menu_item_check label="Wyłącz Ograniczenia Zasięgu Kamery" name="Disable Camera Distance"/> <menu_item_check label="Wysoka Rozdzielczość Zdjęć" name="HighResSnapshot"/> @@ -176,8 +171,8 @@ <menu_item_check label="Uruchom Wiele Wątków" name="Run Multiple Threads"/> <menu_item_call label="Wyczyść Bufor Danych Grupy" name="ClearGroupCache"/> <menu_item_check label="Wygładzanie Ruchu Myszki" name="Mouse Smoothing"/> - <menu_item_check label="Pokaż Wiadomości w Pobliżu" name="IMInChat"/> <menu label="Skróty" name="Shortcuts"> + <menu_item_call label="Obraz (L$[COST])..." name="Upload Image"/> <menu_item_check label="Szukaj" name="Search"/> <menu_item_call label="Zwolnij Klawisze" name="Release Keys"/> <menu_item_call label="Domyślne Ustawienia Rozmiaru Interfejsu" name="Set UI Size to Default"/> @@ -189,7 +184,7 @@ <menu_item_call label="Widok Panoramiczny" name="Mouselook"/> <menu_item_check label="Wolna Kamera" name="Joystick Flycam"/> <menu_item_call label="Reset Widoku" name="Reset View"/> - <menu_item_call label="Zobacz Ostatniego Rozmówce" name="Look at Last Chatter"/> + <menu_item_call label="Zobacz Ostatniego Rozmówcę" name="Look at Last Chatter"/> <menu label="Wybierz Narzędzie Budowania" name="Select Tool"> <menu_item_call label="Narzędzie Ogniskowej" name="Focus"/> <menu_item_call label="Narzędzie Ruchu" name="Move"/> @@ -205,7 +200,7 @@ <menu_item_call label="Pokaż Ustawienia Debugowania" name="Debug Settings"/> <menu_item_check label="Pokaż Menu Progresu" name="Debug Mode"/> </menu> - <menu label="Postęp" name="Develop"> + <menu label="Postęp..." name="Develop"> <menu label="Konsola" name="Consoles"> <menu_item_check label="Konsola Tekstur" name="Texture Console"/> <menu_item_check label="Debugowanie Zdarzeń Konsoli" name="Debug Console"/> @@ -217,6 +212,7 @@ <menu_item_call label="Info Regionu do Debugowania Konsoli" name="Region Info to Debug Console"/> <menu_item_check label="Kamera" name="Camera"/> <menu_item_check label="Wiatr" name="Wind"/> + <menu_item_check label="Znak" name="Badge"/> </menu> <menu label="Pokaż Informacje" name="Display Info"> <menu_item_check label="Pokaż Czas" name="Show Time"/> diff --git a/indra/newview/skins/default/xui/pl/mime_types.xml b/indra/newview/skins/default/xui/pl/mime_types.xml index c90d5761e6..cbf2afa91d 100644 --- a/indra/newview/skins/default/xui/pl/mime_types.xml +++ b/indra/newview/skins/default/xui/pl/mime_types.xml @@ -2,13 +2,13 @@ <mimetypes name="default"> <widgetset name="web"> <label name="web_label"> - Zawartość Strony Internetowej + Zawartość przeglądarki internetowej </label> <tooltip name="web_tooltip"> - To miejsce posiada zawartość strony internetowej + To miejsce posiada zawartość przeglądarki internetowej </tooltip> <playtip name="web_playtip"> - Pokaż zawartość strony internetowej + Pokaż zawartość przeglądarki internetowej </playtip> </widgetset> <widgetset name="movie"> diff --git a/indra/newview/skins/default/xui/pl/mime_types_linux.xml b/indra/newview/skins/default/xui/pl/mime_types_linux.xml new file mode 100644 index 0000000000..a2b8168b51 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/mime_types_linux.xml @@ -0,0 +1,217 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<mimetypes name="default"> + <widgetset name="web"> + <label name="web_label"> + Zawartość przeglądarki internetowej + </label> + <tooltip name="web_tooltip"> + W tym miejscu można zobaczyć zawartość przeglądarki internetowej + </tooltip> + <playtip name="web_playtip"> + Pokaż zawartość przeglądarki internetowej + </playtip> + </widgetset> + <widgetset name="movie"> + <label name="movie_label"> + Film + </label> + <tooltip name="movie_tooltip"> + To miejsce wyświtela filmy + </tooltip> + <playtip name="movie_playtip"> + Zacznij odtwarzanie filmu + </playtip> + </widgetset> + <widgetset name="image"> + <label name="image_label"> + Obraz + </label> + <tooltip name="image_tooltip"> + W tym miejscu można zobaczyć obrazy + </tooltip> + <playtip name="image_playtip"> + Zobacz obrazy wyświetlane w tym miejscu + </playtip> + </widgetset> + <widgetset name="audio"> + <label name="audio_label"> + Audio + </label> + <tooltip name="audio_tooltip"> + W tym miejscu odtwarzane jest audio + </tooltip> + <playtip name="audio_playtip"> + Zacznij odtwarzanie audio + </playtip> + </widgetset> + <scheme name="rtsp"> + <label name="rtsp_label"> + Strumieniowe w czasie rzeczywistym + </label> + </scheme> + <mimetype name="blank"> + <label name="blank_label"> + - Żadne - + </label> + </mimetype> + <mimetype name="none/none"> + <label name="none/none_label"> + - Żadne - + </label> + </mimetype> + <mimetype name="audio/*"> + <label name="audio2_label"> + Audio + </label> + </mimetype> + <mimetype name="video/*"> + <label name="video2_label"> + Video + </label> + </mimetype> + <mimetype name="image/*"> + <label name="image2_label"> + Obraz + </label> + </mimetype> + <mimetype name="video/vnd.secondlife.qt.legacy"> + <label name="vnd.secondlife.qt.legacy_label"> + Film (QuickTime) + </label> + </mimetype> + <mimetype name="application/javascript"> + <label name="application/javascript_label"> + Javascript + </label> + </mimetype> + <mimetype name="application/ogg"> + <label name="application/ogg_label"> + Ogg Audio/Video + </label> + </mimetype> + <mimetype name="application/pdf"> + <label name="application/pdf_label"> + Dokument PDF + </label> + </mimetype> + <mimetype name="application/postscript"> + <label name="application/postscript_label"> + Dokument Postscript + </label> + </mimetype> + <mimetype name="application/rtf"> + <label name="application/rtf_label"> + Tekst (RTF) + </label> + </mimetype> + <mimetype name="application/smil"> + <label name="application/smil_label"> + Synchronized Multimedia Integration Language (SMIL) + </label> + </mimetype> + <mimetype name="application/xhtml+xml"> + <label name="application/xhtml+xml_label"> + Strona internetowa (XHTML) + </label> + </mimetype> + <mimetype name="application/x-director"> + <label name="application/x-director_label"> + Macromedia Director + </label> + </mimetype> + <mimetype name="audio/mid"> + <label name="audio/mid_label"> + Audio (MIDI) + </label> + </mimetype> + <mimetype name="audio/mpeg"> + <label name="audio/mpeg_label"> + Audio (MP3) + </label> + </mimetype> + <mimetype name="audio/x-aiff"> + <label name="audio/x-aiff_label"> + Audio (AIFF) + </label> + </mimetype> + <mimetype name="audio/x-wav"> + <label name="audio/x-wav_label"> + Audio (WAV) + </label> + </mimetype> + <mimetype name="image/bmp"> + <label name="image/bmp_label"> + Obraz (BMP) + </label> + </mimetype> + <mimetype name="image/gif"> + <label name="image/gif_label"> + Obraz (GIF) + </label> + </mimetype> + <mimetype name="image/jpeg"> + <label name="image/jpeg_label"> + Obraz (JPEG) + </label> + </mimetype> + <mimetype name="image/png"> + <label name="image/png_label"> + Obraz (PNG) + </label> + </mimetype> + <mimetype name="image/svg+xml"> + <label name="image/svg+xml_label"> + Obraz (SVG) + </label> + </mimetype> + <mimetype name="image/tiff"> + <label name="image/tiff_label"> + Obraz (TIFF) + </label> + </mimetype> + <mimetype name="text/html"> + <label name="text/html_label"> + Strona internetowa + </label> + </mimetype> + <mimetype name="text/plain"> + <label name="text/plain_label"> + Tekst + </label> + </mimetype> + <mimetype name="text/xml"> + <label name="text/xml_label"> + XML + </label> + </mimetype> + <mimetype name="video/mpeg"> + <label name="video/mpeg_label"> + Film (MPEG) + </label> + </mimetype> + <mimetype name="video/mp4"> + <label name="video/mp4_label"> + Film (MP4) + </label> + </mimetype> + <mimetype name="video/quicktime"> + <label name="video/quicktime_label"> + Film (QuickTime) + </label> + </mimetype> + <mimetype name="video/x-ms-asf"> + <label name="video/x-ms-asf_label"> + Film (Windows Media ASF) + </label> + </mimetype> + <mimetype name="video/x-ms-wmv"> + <label name="video/x-ms-wmv_label"> + Film (Windows Media WMV) + </label> + </mimetype> + <mimetype name="video/x-msvideo"> + <label name="video/x-msvideo_label"> + Film (AVI) + </label> + </mimetype> +</mimetypes> diff --git a/indra/newview/skins/default/xui/pl/mime_types_mac.xml b/indra/newview/skins/default/xui/pl/mime_types_mac.xml index bd39ff7ac3..ae860249bb 100644 --- a/indra/newview/skins/default/xui/pl/mime_types_mac.xml +++ b/indra/newview/skins/default/xui/pl/mime_types_mac.xml @@ -2,13 +2,13 @@ <mimetypes name="default"> <widgetset name="web"> <label name="web_label"> - Zawartość Przeglądarki Internetowej + Zawartość przeglądarki internetowej </label> <tooltip name="web_tooltip"> - To miejsce posiada zawartość internetową + W tym miejscu można zobaczyć zawartość przeglądarki internetowej </tooltip> <playtip name="web_playtip"> - Pokaż Zawartość Przeglądarki Internetowej + Pokaż zawartość przeglądarki internetowej </playtip> </widgetset> <widgetset name="movie"> diff --git a/indra/newview/skins/default/xui/pl/notifications.xml b/indra/newview/skins/default/xui/pl/notifications.xml index 3cf9be507d..12d68ed30e 100644 --- a/indra/newview/skins/default/xui/pl/notifications.xml +++ b/indra/newview/skins/default/xui/pl/notifications.xml @@ -9,72 +9,43 @@ <global name="implicitclosebutton"> Zamknij </global> - <template name="okbutton"> - <form> - <button - name="OK" - text="$yestext"/> - </form> - </template> - - <template name="okignore"> - <form> - <button - name="OK" - text="$yestext"/> - <ignore text="$ignoretext"/> - </form> - </template> - - <template name="okcancelbuttons"> - <form> - <button - name="OK" - text="$yestext"/> - <button - name="Cancel" - text="$notext"/> - </form> - </template> - - <template name="okcancelignore"> - <form> - <button - name="OK" - text="$yestext"/> - <button - name="Cancel" - text="$notext"/> - <ignore text="$ignoretext"/> - </form> - </template> - - <template name="okhelpbuttons"> - <form> - <button - name="OK" - text="$yestext"/> - <button - name="Help" - text="$helptext"/> - </form> - </template> - - <template name="yesnocancelbuttons"> - <form> - <button - name="Yes" - text="$yestext"/> - <button - name="No" - text="$notext"/> - <button - name="Cancel" - text="$canceltext"/> - </form> - </template> + <template name="okbutton"> + <form> + <button name="OK_okbutton" text="$yestext"/> + </form> + </template> + <template name="okignore"> + <form> + <button name="OK_okignore" text="$yestext"/> + </form> + </template> + <template name="okcancelbuttons"> + <form> + <button name="OK_okcancelbuttons" text="$yestext"/> + <button name="Cancel_okcancelbuttons" text="$notext"/> + </form> + </template> + <template name="okcancelignore"> + <form> + <button name="OK_okcancelignore" text="$yestext"/> + <button name="Cancel_okcancelignore" text="$canceltext"/> + </form> + </template> + <template name="okhelpbuttons"> + <form> + <button name="OK_okhelpbuttons" text="$yestext"/> + <button name="Help" text="$helptext"/> + </form> + </template> + <template name="yesnocancelbuttons"> + <form> + <button name="Yes" text="$yestext"/> + <button name="No" text="$notext"/> + <button name="Cancel_yesnocancelbuttons" text="$canceltext"/> + </form> + </template> <notification functor="GenericAcknowledge" label="Nieznany rodzaj komunikatu" name="MissingAlert"> - Twoja wersja klienta [APP_NAME] nie może wyświetlić odebranej wiadomości. + Twoja wersja klienta [APP_NAME] nie może wyświetlić odebranej wiadomości. Upewnij się, że posiadasz najnowszą wersję klienta. Szczegóły błędu: Błąd o nazwie '[_NAME]' nie został odnaleziony w pliku notifications.xml. <usetemplate name="okbutton" yestext="OK"/> @@ -97,24 +68,18 @@ Szczegóły błędu: Błąd o nazwie '[_NAME]' nie został odnaleziony <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Tak"/> </notification> <notification name="BadInstallation"> - Podczas aktualizacji klienta [APP_NAME] wystąpił błąd. Proszę odwiedzić stronę secondlife.com by ściągnąć najnowszą wersje klienta. - <usetemplate - name="okbutton" - yestext="OK"/> + Podczas aktualizacji [APP_NAME] wystąpił błąd. Proszę odwiedzić stronę [http://get.secondlife.com download the latest version] by ściągnąć najnowszą wersje klienta. + <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="LoginFailedNoNetwork"> - Błąd sieci: Brak połączenia. + Brak połączenia z [SECOND_LIFE_GRID]. '[DIAGNOSTIC]' Sprawdź stan swojego połączenia sieciowego. - <usetemplate - name="okbutton" - yestext="OK"/> + <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="MessageTemplateNotFound"> Wzór komunikatu dla [PATH] nie odnaleziony. - <usetemplate - name="okbutton" - yestext="OK"/> + <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="WearableSave"> Zapisać zmiany dotyczące ubrania/części ciała? @@ -124,7 +89,7 @@ Sprawdź stan swojego połączenia sieciowego. W trakcie ładwania tekstu dla skryptu pojawił się problem z następującego powodu: [REASON]. Spróbuj ponownie za kilka minut. </notification> <notification name="CompileQueueSaveBytecode"> - W trakcie ładwania skompilowanego skryptu pojawił się problem z następującego powodu: [REASON]. Spróbuj ponownie za kilka minut. + W trakcie ładowania skompilowanego skryptu pojawił się problem z następującego powodu: [REASON]. Spróbuj ponownie za kilka minut. </notification> <notification name="WriteAnimationFail"> Problem w zapisywaniu danych animacji. Spróbuj ponownie za kilka minut. @@ -140,15 +105,17 @@ Wybierz pojedynczy obiekt i spróbuj jeszcze raz. Zapisać wszystkie zmiany dotyczące ubrania/cześci ciała? <usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Nie Zapisuj" yestext="Zapisz"/> </notification> + <notification name="FriendsAndGroupsOnly"> + Osoby spoza listy znajomych, których rozmowy głosowe i IM są ignorowane, nie wiedzą o tym. + <usetemplate name="okbutton" yestext="OK"/> + </notification> <notification name="GrantModifyRights"> - Udzielenie praw modyfikacji innemu Rezydentowi umożliwia modyfikację, usuwanie lub wzięcie JAKIEGOKOLWIEK z Twoich obiektów. -Używaj tej opcji z rozwagą! + Udzielenie praw modyfikacji innemu Rezydentowi umożliwia modyfikację, usuwanie lub wzięcie JAKIEGOKOLWIEK z Twoich obiektów. Używaj tej opcji z rozwagą! Czy chcesz dać prawa modyfikacji osobie [FIRST_NAME] [LAST_NAME]? <usetemplate name="okcancelbuttons" notext="Nie" yestext="Tak"/> </notification> <notification name="GrantModifyRightsMultiple"> - Udzielenie praw modyfikacji innym Rezydentom umożliwia im modyfikację, usuwanie lub wzięcie JAKIEGOKOLWIEK z Twoich obiektów. -Używaj tej opcji z rozwagą! + Udzielenie praw modyfikacji innym Rezydentom umożliwia im modyfikację, usuwanie lub wzięcie JAKIEGOKOLWIEK z Twoich obiektów. Używaj tej opcji z rozwagą! Czy chcesz dać prawa modyfikacji wybranym osobom? <usetemplate name="okcancelbuttons" notext="Nie" yestext="Tak"/> </notification> @@ -179,7 +146,7 @@ Czy chcesz dać prawa modyfikacji wybranym osobom? Ta funkcja nie może być odebrana. Członkowie muszą sami zrezygnować z pełnienia tej funkcji. Chcesz kontynuować? - <usetemplate ignoretext="Podczas dodawania członków grupy do funkcji właściciela" name="okcancelignore" notext="Nie" yestext="Tak"/> + <usetemplate ignoretext="Przed dodaniem nowego właściciela do grupy, proszę potwierdzić swoją decyzję." name="okcancelignore" notext="Nie" yestext="Tak"/> </notification> <notification name="AssignDangerousActionWarning"> Dodajesz przywilej [ACTION_NAME] do fukcji [ROLE_NAME]. @@ -201,67 +168,31 @@ Udzielaj tego przywileju z rozwagą. Dodać ten przywilej do funkcji [ROLE_NAME]? <usetemplate name="okcancelbuttons" notext="Nie" yestext="Tak"/> </notification> - <notification name="ClickPublishHelpLand"> - Wybranie opcji Publikuj w Wyszukiwarce Wybranie tej opcji umożliwi pokazywanie: -- tej posiadłości w wynikach wyszukiwarki -- publicznych obiektów na tej posiadłości -- tej posiadłości w przeglądarce internetowej - </notification> - <notification name="ClickSoundHelpLand"> - Media oraz muzyka są aktywne według ustawień posiadłości dla mediów. Dźwięk oraz komunikacja głosowa mogą być ograniczone w danej posiadłości, w zależności od ustawień rodzaju treści jaką zawiera. Skorzystaj z [SECOND_LIFE]:Pomoc by uzyskać więcej informacji na temat dostępu do regionów z podanym rodzajem treści jaką zawiera. - <url name="url"> - https://support.secondlife.com/ics/support/default.asp?deptID=4417&task=knowledge&questionID=5046 - </url> - <usetemplate - name="okcancelbuttons" - yestext="[SECOND_LIFE]:Pomoc" - notext="Zamknij" /> - </notification> - <notification name="ClickSearchHelpAll"> - Wyniki wyszukiwania wyświetlają się na podstawie rodzaju zakładki wyszukiwarki, z której korzystasz, rodzaju statusu Twojego wieku, wybranej kategorii, oraz innych czynników. By uzyskać wiecej szczegółów skorzystaj z [SECOND_LIFE]:Pomoc. - <url name="url"> - https://support.secondlife.com/ics/support/default.asp?deptID=4417&task=knowledge&questionID=4722 - </url> - <usetemplate - name="okcancelbuttons" - yestext="[SECOND_LIFE]:Pomoc" - notext="Zamknij" /> - </notification> - <notification name="ClickPublishHelpLandDisabled"> - Ta posiadłość nie może być pokazywana w wynikach wyszukiwania ponieważ region w którym się znajduje zabrania tego. - </notification> - <notification name="ClickPublishHelpAvatar"> - Wybranie opcji Publikuj w Wyszukiwarce umożliwi pokazywanie: -- Twojego profilu w wynikach wyszukiwarki -- linku do Twojego profilu na publicznych stronach - </notification> - <notification name="ClickPartnerHelpAvatar"> - Możesz zaproponować związek innemu Rezydentowi lub rozwiązać istniejący związek na stronie internetowej [SECOND_LIFE]. - -Chcesz dowiedzieć się więcej na temat związków w [SECOND_LIFE]? - <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Idź na stronę"/> - </notification> - <notification name="ClickUploadHelpPermissions"> - Twoje domyślne ustawienia praw dla Twoich obiektów mogą nie działać poprawnie w starszych regionach. - </notification> - <notification name="ClickWebProfileHelpAvatar"> - Jeżeli ten Rezydent posiada link URL w profilu możesz: - * Kliknąć 'Załaduj' żeby zobaczyć stronę w tej zakładce WWW. - * Kliknąć 'Załaduj' > 'Użyj zewnętrznej przeglądarki' żeby zobaczyć stronę używając domyślnej zewnętrznej przeglądarki. - * Kliknąć 'Załaduj' > 'Otwórz URL strony profilu' żeby wrócić do strony tego Rezydenta po jej opuszczeniu. - -Oglądając swój profil możesz wpisać dowolny link URL i kliknąć OK żeby go zapisać. -Rezydenci mogą odwiedzać podany adres, kiedy przeglądają Twój profil. + <notification name="AttachmentDrop"> + Wybrałeś opcję opuszczenia swojego załącznika. + Czy chcesz kontynuować? + <usetemplate ignoretext="Potwierdź przed zdjęciem załącznika." name="okcancelignore" notext="Nie" yestext="Tak"/> </notification> <notification name="JoinGroupCanAfford"> Dołączenie do tej grupy kosztuje [COST]L$. Chcesz kontynuować? <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Dołącz"/> </notification> + <notification name="JoinGroupNoCost"> + Dołączasz do grupy [NAME]. +Czy chcesz kontynuować? + <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Zaakceptuj"/> + </notification> <notification name="JoinGroupCannotAfford"> Członkostwo w tej grupie kosztuje [COST]L$ Masz za mało L$ żeby zostać członkiem. </notification> + <notification name="CreateGroupCost"> + Stworzenie tej grupy kosztuje 100L$. +W grupie powinien być więcej niż jeden członek, albo zostanie na zawsze skasowana. +Zaproś proszę członków w ciągu 48 godzin. + <usetemplate canceltext="Anuluj" name="okcancelbuttons" notext="Anuluj" yestext="Stwórz grupę za 100L$"/> + </notification> <notification name="LandBuyPass"> Za [COST]L$ możesz odwiedzić tą posiadłość ('[PARCEL_NAME]') na [TIME] godzin. Chcesz kupić przepustkę? <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/> @@ -276,9 +207,9 @@ Cena wynosi [SALE_PRICE]L$ i sprzedaż będzie autoryzowana dla [NAME]. <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/> </notification> <notification name="ConfirmLandSaleToAnyoneChange"> - UWAGA: Wybierając Sprzedaż dla Kogokolwiek umożliwiasz zakup posiadłości wszystkim Rezydentom [SECOND_LIFE]. + UWAGA: Wybierając opcję "Sprzedaj Każdemu" udostępniasz swoją posiadłość do sprzedaży dla jakiegokolwiek Rezydenta [SECOND_LIFE] , nawet osób nieobecnych w tym regionie. -Posiadłość o powierzchni [LAND_SIZE] m zostaje wystawiona na sprzedaż. +Posiadłość o powierzchni [LAND_SIZE] m² zostaje wystawiona na sprzedaż. Cena wynosi [SALE_PRICE]L$ i sprzedaż będzie autoryzowana dla [NAME]. <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/> </notification> @@ -324,7 +255,7 @@ Obiekty: [N] <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/> </notification> <notification name="DisableAllTopObjects"> - Czy na pewno chcesz deaktywować wszystkie obiekty w tym regionie? + Czy na pewno chcesz deaktywować wszystkie obiekty w tym Regionie? <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/> </notification> <notification name="ReturnObjectsNotOwnedByGroup"> @@ -338,6 +269,12 @@ Obiekty: [N] Ten region pozwala na uszkodzenia. Skrypty muszą pozostać aktywne dla prawidłowego działania broni. </notification> + <notification name="MultipleFacesSelected"> + Obecnie zaznaczono wiele powierzchni. +Jeśli działanie będzie kontynuowane, oddzielne media będą ustawione na wielu powierzchniach obiektu. +W celu umieszczenia mediów tylko na jednej powierzchni skorzystaj z Wybierz Powierzchnię i kliknij na wybranej powierzchni obiektu oraz kliknij Dodaj. + <usetemplate ignoretext="Media zostaną ustawione na wielu zaznaczonych powierzchniach" name="okcancelignore" notext="Anuluj" yestext="OK"/> + </notification> <notification name="MustBeInParcel"> Musisz znajdować się wewnątrz posiadłości żeby wybrać punkt lądowania. </notification> @@ -373,6 +310,10 @@ Folder stroju nie zawiera żadnego ubrania, części ciała ani załączników. <notification name="CannotWearTrash"> Nie możesz założyć ubrania, które znajduje się w koszu. </notification> + <notification name="MaxAttachmentsOnOutfit"> + Nie można dołączyć obiektu. +Limit [MAX_ATTACHMENTS] załączników został przekroczony. Proszę najpierw odłączyć inny obiekt. + </notification> <notification name="CannotWearInfoNotComplete"> Nie możesz założyć tego artkułu ponieważ nie załadował się poprawnie. Spróbuj ponownie za kilka minut. </notification> @@ -382,27 +323,36 @@ Czy chcesz przejść na stronę www.secondlife.com by założyć konto? <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/> </notification> <notification name="AddClassified"> - Ogłoszenia reklamowe ukazują się w zakładce Reklama w wyszukiwarce (Szukaj) oraz na stronie internetowej www.secondlife.com przez tydzień. + Ogłoszenia reklamowe ukazują się w zakładce Reklama w wyszukiwarce (Szukaj) oraz na [http://secondlife.com/community/classifieds secondlife.com] przez tydzień. Napisz treść swojej reklamy, kliknij Zamieść by dodać katalogu ogłoszeń. -Po zamieszczeniu reklamy zostaniesz poproszony o sprecyzowanie opłaty za reklamę. +Po zamieszczeniu reklamy zostaniesz poproszony o sprecyzowanie opłaty za Reklamę. Im wyższa opłata tym wyżej Twoja reklama wyświetla się w katalogu i wyszukiwarce po wpisaniu słów kluczowych. - <usetemplate ignoretext="W momencie dodawania nowej reklamy" name="okcancelignore" notext="Anuluj" yestext="OK"/> + <usetemplate ignoretext="Jak stworzyć nową reklamę?" name="okcancelignore" notext="Anuluj" yestext="OK"/> </notification> <notification name="DeleteClassified"> Usunąć reklamę '[NAME]'? Pamiętaj! Nie ma rekompensaty za poniesione koszta. <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/> </notification> + <notification name="DeleteMedia"> + Wybrano usunięcie mediów związanych z tą powierzchnią. +Czy na pewno chcesz kontynuować? + <usetemplate ignoretext="Potwierdź przed usunięciem mediów z obiektu" name="okcancelignore" notext="Nie" yestext="Tak"/> + </notification> <notification name="ClassifiedSave"> - Zapisać zmiany w reklamie [NAME]? + Zapisać zmiany w Reklamie [NAME]? <usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Nie Zapisuj" yestext="Zapisz"/> </notification> + <notification name="ClassifiedInsufficientFunds"> + Nie posiadasz wystarczających środków aby dodać Reklamę. + <usetemplate name="okbutton" yestext="OK"/> + </notification> <notification name="DeleteAvatarPick"> Usunąć wybór [PICK] z kategorii Lubię? <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/> </notification> <notification name="PromptGoToEventsPage"> - Odwiedzić internetową stronę imprez [SECOND_LIFE]? + Odwiedzić internetową stronę Imprez [SECOND_LIFE]? <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/> </notification> <notification name="SelectProposalToView"> @@ -411,26 +361,18 @@ Pamiętaj! Nie ma rekompensaty za poniesione koszta. <notification name="SelectHistoryItemToView"> Wybierz obiekt z historii, który chcesz zobaczyć. </notification> - <notification name="ResetShowNextTimeDialogs"> - Zresetować 'Pokaż następnym razem' opcję we wszystkich dialogach? - <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/> - </notification> - <notification name="SkipShowNextTimeDialogs"> - Wyłączyć 'Pokaż następnym razem' opcję we wszystkich dialogach? - <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/> - </notification> <notification name="CacheWillClear"> - Bufor danych na dysku zostanie zresetowany po relogu do [APP_NAME]. + Bufor danych zostanie wyczyszczony po restarcie aplikacji [APP_NAME]. </notification> <notification name="CacheWillBeMoved"> - Bufor danych na dysku zostanie przemieszczony po relogu do [APP_NAME]. -Bufor będzie również wyczyszczony. + Bufor danych zostanie przeniesiony po restarcie aplikacji [APP_NAME]. +Pamiętaj: Opcja ta wyczyszcza bufor danych. </notification> <notification name="ChangeConnectionPort"> - Ustawienia portu zostaną wprowadzone po relogu do [APP_NAME]. + Ustawienia portu zostają zaktualizowane po restarcie aplikacji [APP_NAME]. </notification> <notification name="ChangeSkin"> - Nowa skórka zostanie wprowadzona po relogu do [APP_NAME]. + Nowa skórka zostanie wczytana po restarcie aplikacji [APP_NAME]. </notification> <notification name="GoToAuctionPage"> Odwiedzić stronę internetową [SECOND_LIFE] żeby zobaczyć szczgóły aukcji lub zrobić ofertę? @@ -450,17 +392,17 @@ Usuń kilka etapów i zapisz jeszcze raz. </notification> <notification name="GestureSaveFailedObjectNotFound"> Nie można zapisać gestu ponieważ obiekt lub szafa powiązanego obiektu nie został znaleziony. -Obiekt może znajdować się zbyt daleko albo został usuniety. +Obiekt może znajdować się zbyt daleko albo został usunięty. </notification> <notification name="GestureSaveFailedReason"> - Nie można zapisać gestu z następującego powodu: [REASON]. Spróbuj zapisać jeszcze raz póżniej. + Nie można zapisać gestu z następującego powodu: [REASON]. Spróbuj zapisać jeszcze raz później. </notification> <notification name="SaveNotecardFailObjectNotFound"> Nie można zapisać notki ponieważ obiekt lub szafa powiązanego obiektu nie został znaleziony. Obiekt może znajdować się zbyt daleko albo został usuniety. </notification> <notification name="SaveNotecardFailReason"> - Nie można zapisać notki z następującego powodu: [REASON]. Spróbuj zapisać jeszcze raz póżniej. + Nie można zapisać notki z następującego powodu: [REASON]. Spróbuj zapisać jeszcze raz później. </notification> <notification name="ScriptCannotUndo"> Nie można cofnąć wszystkich zmian w Twojej wersji skryptu. @@ -469,7 +411,7 @@ Czy chcesz załadować ostatnią wersję zapisaną na serwerze? <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/> </notification> <notification name="SaveScriptFailReason"> - Nie można zapisać skryptu z następującego powodu: [REASON]. Spróbuj zapisać jeszcze raz póżniej. + Nie można zapisać skryptu z następującego powodu: [REASON]. Spróbuj zapisać jeszcze raz później. </notification> <notification name="SaveScriptFailObjectNotFound"> Nie można zapisać skryptu ponieważ obiekt w którym się zawiera nie został znaleziony. @@ -478,6 +420,11 @@ Obiekt może znajdować się zbyt daleko albo został usuniety. <notification name="SaveBytecodeFailReason"> Nie można zapisać skompilowanego skryptu z następującego powodu: [REASON]. Spróbuj zapisać jeszcze raz póżniej. </notification> + <notification name="StartRegionEmpty"> + Oops, Twoje miejsce startu nie zostało określone. +Wpisz proszę nazwę regionu w lokalizację startu w polu Lokalizacja Startu lub wybierz Moja Ostatnia Lokalizacja albo Miejsce Startu. + <usetemplate name="okbutton" yestext="OK"/> + </notification> <notification name="CouldNotStartStopScript"> Nie można uruchomić lub zatrzymać skryptu ponieważ obiekt w którym się zawiera nie został znaleziony. Obiekt może znajdować się zbyt daleko albo został usuniety. @@ -489,26 +436,26 @@ Obiekt może znajdować się zbyt daleko albo został usuniety. Nie można zapisać pliku [[FILE]] </notification> <notification name="UnsupportedHardware"> - Uwaga: Twój system nie spełnia minimalnych wymagań sprzętowych [APP_NAME]. Jakość i prędkość [APP_NAME] mogą być pogorszone. Niestety, nie będziemy w stanie udzielić Ci technicznej pomocy, ponieważ konfiguracja Twojego systemu nie spełnia wymagań sprzętowych. + Niestety Twój komputer nie spełnia minimalnych wymogów sprzętowych dla poprawnego działania [APP_NAME]. Możesz odczuwać bardzo niską wydajność operacyjną. Niestety portal pomocy, [SUPPORT_SITE] nie posiada informacji na temat poprawnej konfiguracji technicznej Twojego systemu. -MINSPECS -Czy chcesz odwiedzić stronę [_URL] po dodatkowe informacje? +Po więcej info, odwiedź stronę [_URL] . <url name="url" option="0"> http://www.secondlife.com/corporate/sysreqs.php </url> - <usetemplate ignoretext="Zignoruj ostrzeżenie" name="okcancelignore" notext="Nie" yestext="Tak"/> + <usetemplate ignoretext="Dysk twardy mojego komputera nie jest wspomagany" name="okcancelignore" notext="Nie" yestext="Tak"/> </notification> <notification name="UnknownGPU"> - Twój system jest wyposażony w kartę graficzną której jeszcze nie znamy. -To się często zdarza z nowym sprzętem, którego jeszcze nie testowaliśmy. -[APP_NAME] najprawdopodobniej będzie działało poprawnie. Możliwe, że będziesz musiał wyregulować ustawienia grafiki. -(Edycja > Ustawienia > Grafika). + Twój system jest wyposażony w kartę graficzną, która nie jest rozpoznana przez [APP_NAME]. +Zdarza się to częstow w przypadku nowego sprzętu, który nie był testowany z [APP_NAME]. Prawdopodobnie wystarczy dostosowanie ustawień grafiki aby działanie było poprawne. +(Ja > Właściwości > Grafika). <form name="form"> - <ignore name="ignore" text="Zignoruj ostrzeżenie"/> + <ignore name="ignore" text="Karta graficzna nie została zidentyfikowana."/> </form> </notification> <notification name="DisplaySettingsNoShaders"> - [APP_NAME] zawiesił się podczas inicjalizacji sterowników graficznych. Jakość grafiki została zmniejszona - może pomoże. Pewne funkcje graficzne zostały wyłączone. Zalecamy aktualizcje strerowników grapicznych. + [APP_NAME] zawiesił się podczas inicjalizacji sterowników graficznych. +Jakość grafiki została zmniejszona - może pomoże. +Pewne funkcje graficzne zostały wyłączone. Zalecamy aktualizcje sterowników graficznych. Możesz podnieść jakość grafiki pod Ustawienia > Grafika. </notification> <notification name="RegionNoTerraforming"> @@ -553,6 +500,9 @@ Ta osoba tymczasowo nie będzie mógła się poruszać, nie będzie mógł używ Wyrzucić [AVATAR_NAME] z Twojej posiadłości? <usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Wyrzuć i zabroń wstępu (ban)" yestext="Wyrzuć"/> </notification> + <notification name="EjectAvatarFromGroup"> + Wyrzuć [AVATAR_NAME] z grupy [GROUP_NAME] + </notification> <notification name="AcquireErrorTooManyObjects"> BŁĄD OTRZYMYWANIA: Zbyt wiele wybranych obiektów. </notification> @@ -562,12 +512,12 @@ Ta osoba tymczasowo nie będzie mógła się poruszać, nie będzie mógł używ <notification name="PromptGoToCurrencyPage"> [EXTRA] -Iść na stronę [_URL] po informacje dotyczące zakupu L$? +Odwiedź stronę [_URL] po więcej informacji na temat zakupu L$? <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/> </notification> <notification name="UnableToLinkObjects"> Nie można połączyć [COUNT] obiektów. -Maksimalnie można połączyć [MAX] obiektów. +Maksymalnie można połączyć [MAX] obiektów. </notification> <notification name="CannotLinkIncompleteSet"> Możesz łączyć tylko kompletne zbiory obiektów i musisz wybrać więcej niż jeden obiekt. @@ -643,12 +593,19 @@ Oczekiwana - [VALIDS] Nie można utworzyć pliku wyjściowego: [FILE] </notification> <notification name="DoNotSupportBulkAnimationUpload"> - Ładowanie zbiorów plików animacji nie jest jeszcze dostępne. + [APP_NAME] obecnie nie wspomaga ładowania grupowego plików animacji. </notification> <notification name="CannotUploadReason"> Ładowanie pliku [FILE] nie powiodło się z powodu: [REASON] Spróbuj jeszcze raz póżniej. </notification> + <notification name="LandmarkCreated"> + Dodano "[LANDMARK_NAME]" do folderu [FOLDER_NAME]. + </notification> + <notification name="LandmarkAlreadyExists"> + Posiadasz już landmark dla tej lokalizacji. + <usetemplate name="okbutton" yestext="OK"/> + </notification> <notification name="CannotCreateLandmarkNotOwner"> Nie możesz zapamiętać tego miejsca (LM) ponieważ właściciel posiadłości nie pozwala na to. </notification> @@ -672,6 +629,9 @@ Wybierz obiekty zawierające skrypty. Wybierz skryptowane obiekty do których masz prawa modyfikacji. </notification> + <notification name="CannotOpenScriptObjectNoMod"> + Nie można otworzyć skryptu bez prawa do modyfikacji obiektu. + </notification> <notification name="CannotSetRunningSelectObjectsNoScripts"> 'Uruchomienie' skryptów nie powiodło się. @@ -697,52 +657,47 @@ Nowe zapytanie: [FINALQUERY] Teleportacja nie powiodła się. [REASON] </notification> - - <notification name="invalid_tport"> -Wystąpił problem z teleportacją. Wyloguj się i zaloguj ponownie. -Jeśli nadal otrzymujesz ten komunikat sprawdź Pomoc Techniczną na stronie: -www.secondlife.com/support. - </notification> - <notification name="invalid_region_handoff"> -Wystąpił problem ze zmianą regionu. Wyloguj się i zaloguj ponownie. -Jeśli nadal otrzymujesz ten komunikat sprawdź Pomoc Techniczną na stronie: -www.secondlife.com/support. - </notification> - <notification name="blocked_tport"> -Przepraszamy, teleportacja jest chwilowo niedostępna. Spróbuj jeszcze raz. + <notification name="invalid_tport"> + Niestety, pojawił się błąd podczas próby teleportacji. Proponujemy wylogowanie się i spróbowanie teleportacji ponownie. +Jeżeli nadal otrzymujesz tę wiadomość proponujemy odwiedzić stronę [SUPPORT_SITE]. + </notification> + <notification name="invalid_region_handoff"> + Niestety, pojawił się błąd podczas próby przedostania się na drugi region. Proponujemy wylogowanie się i spróbowanie przedostania się na drugi region ponownie. +Jeżeli nadal otrzymujesz tę wiadomość proponujemy odwiedzić stronę [SUPPORT_SITE]. + </notification> + <notification name="blocked_tport"> + Przepraszamy, teleportacja jest chwilowo niedostępna. Spróbuj jeszcze raz. Jeśli nadal nie możesz się teleportować wyloguj się i ponownie zaloguj. - </notification> - <notification name="nolandmark_tport"> -Przepraszamy, ale nie możemy znaleźć miejsca docelowego. - </notification> - <notification name="timeout_tport"> -Przepraszamy, ale nie udało się przeprowadzić teleportacji. Spróbuj jeszcze raz. - </notification> - <notification name="noaccess_tport"> -Przepraszamy, ale nie masz dostępu do miejsca docelowego. - </notification> - <notification name="missing_attach_tport"> -Czekamy na Twoje akcesoria. Możesz poczekać kilka minut lub zrobić relog przed następną próbą teleportacji. - </notification> - <notification name="too_many_uploads_tport"> -Obecnie ten region ma problemy z ładowaniem obiektów w związku z czym teleportacja bardzo sie opóznia. + </notification> + <notification name="nolandmark_tport"> + Przepraszamy, ale nie możemy znaleźć miejsca docelowego. + </notification> + <notification name="timeout_tport"> + Przepraszamy, ale nie udało się przeprowadzić teleportacji. Spróbuj jeszcze raz. + </notification> + <notification name="noaccess_tport"> + Przepraszamy, ale nie masz dostępu do miejsca docelowego. + </notification> + <notification name="missing_attach_tport"> + Czekamy na Twoje akcesoria. Możesz poczekać kilka minut lub zrobić relog przed następną próbą teleportacji. + </notification> + <notification name="too_many_uploads_tport"> + Obecnie ten region ma problemy z ładowaniem obiektów w związku z czym teleportacja bardzo sie opóźnia. Spróbuj jeszcze raz za kilka minut albo teleportuj się do mniej zatłoczonego miejsca. - </notification> - <notification name="expired_tport"> -Przepraszamy, ale nie udało się przeprowadzić teleportacji wystarczająco szybko. Spróbuj jeszcze raz za kilka minut. - </notification> - <notification name="expired_region_handoff"> -Przepraszamy, ale nie udało się przeprowadzić zmiany regionu wystarczająco szybko. Spróbuj jeszcze raz za kilka minut. - </notification> - <notification name="no_host"> -Nie możemy znaleść miejsca docelowego. To miejsce może być chwilowo nieosiągalne albo przestało istnieć. + </notification> + <notification name="expired_tport"> + Przepraszamy, ale nie udało się przeprowadzić teleportacji wystarczająco szybko. Spróbuj jeszcze raz za kilka minut. + </notification> + <notification name="expired_region_handoff"> + Przepraszamy, ale nie udało się przeprowadzić zmiany regionu wystarczająco szybko. Spróbuj jeszcze raz za kilka minut. + </notification> + <notification name="no_host"> + Nie możemy znaleść miejsca docelowego. To miejsce może być chwilowo nieosiągalne albo przestało istnieć. Spróbuj jeszcze raz za kilka minut. - </notification> - <notification name="no_inventory_host"> -Szafa chwilowo nie działa. - </notification> - - + </notification> + <notification name="no_inventory_host"> + Szafa chwilowo nie działa. + </notification> <notification name="CannotSetLandOwnerNothingSelected"> Nie można wybrać właściciela posiadłości. Posiadłość nie została wybrana. @@ -751,7 +706,8 @@ Posiadłość nie została wybrana. Nie można wybrać właściciela posiadłości ponieważ wybrany obszar przekracza granicę regionów. Wybierz mniejszy obszar i spróbuj jeszcze raz. </notification> <notification name="ForceOwnerAuctionWarning"> - Ta posiadłość jest wystawiona na aukcję. Wymuszenie własności anulue aukcję i potencjalnie może zdenerwować zainteresowanych Rezydentów, jeżeli licytacja już się rozpoczęła. Wymusić własność? + Ta posiadłość jest wystawiona na aukcję. Wymuszenie własności anuluje aukcję i potencjalnie może zdenerwować zainteresowanych Rezydentów, jeżeli licytacja już się rozpoczęła. +Wymusić własność? <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/> </notification> <notification name="CannotContentifyNothingSelected"> @@ -779,7 +735,7 @@ Posiadłość nie została wybrana. Region nie znaleziony. </notification> <notification name="CannotCloseFloaterBuyLand"> - Dialog Kup Posiadłość nie może zostać zamknięty dopóki [APP_NAME] nie oszacuje ceny tej tranzakcji. + Okno zakupu landu nie może zostać zamknięte dopóki aplikacja [APP_NAME] nie określi ceny dla tej transkacji. </notification> <notification name="CannotDeedLandNothingSelected"> Nie można przekazać posiadłości: @@ -790,8 +746,8 @@ Posiadłość nie została wybrana. Grupa nie została wybrana. </notification> <notification name="CannotDeedLandNoRegion"> - Nie można przekazać posiadłości: -Region nie znaleziony. + Brak możliwości przepisania posiadłości grupie: +Region, gdzie posiadłość się znajduje nie został odnaleziony. </notification> <notification name="CannotDeedLandMultipleSelected"> Nie można przekazać posiadłości: @@ -799,14 +755,6 @@ Wiele posiadłości jest wybranych. Spróbuj wybrać pojedynczą posiadłość. </notification> - <notification name="ParcelCanPlayMedia"> - To miejsce może odtwarzać strumienie mediów. -Odtwarzanie strumieni wymaga szybkiego połączenia do Internetu. - -Odtwarzać dostępne strumienie mediów? -(Selekcja może zostać zmieniona póżniej pod Ustawienia > Audio i Video.) - <usetemplate name="okcancelbuttons" notext="Wyłącz" yestext="Odtwarzaj"/> - </notification> <notification name="CannotDeedLandWaitingForServer"> Nie można przekazać posiadłości: Serwer aktualizuje dane własności. @@ -836,8 +784,8 @@ Nie masz praw do porzucenia tej posiadłości. Twoje posiadłości są podkreślone na zielono. </notification> <notification name="CannotReleaseLandRegionNotFound"> - Nie można porzucić posiadłości: -Region nie znaleziony. + Brak możliwości porzucenia posiadłości: +Region, gdzie posiadłość się znajduje nie został odnaleziony. </notification> <notification name="CannotReleaseLandNoTransfer"> Nie możesz porzucić posiadłości: @@ -875,12 +823,12 @@ Podzielić posiadłość? <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/> </notification> <notification name="CannotDivideLandNoRegion"> - Nie można podzielić posiadłości: -Region nie znaleziony. + Brak możliwości podziału posiadłości: +Region, gdzie posiadłość się znajduje nie został odnaleziony. </notification> <notification name="CannotJoinLandNoRegion"> - Nie można połączyć posiadłości: -Region nie znaleziony. + Brak możliwości złączenia posiadłości: +Region, gdzie posiadłość się znajduje nie został odnaleziony. </notification> <notification name="CannotJoinLandNothingSelected"> Nie można połączyć posiadłości: @@ -904,17 +852,6 @@ Wybierz obaszar usytuowany na obu posiadłościach. Połączyć posiadłości? <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/> </notification> - <notification name="ShowOwnersHelp"> - Pokaż właścicieli: -Pokoloruj posiadłości zgodnie z przynależnością do właściciela - -Zielony = Twoja Posiadłość -Morski = Posiadłość Twojej Grupy -Czerwony = Posiadłości Innych -Żółty = Na Sprzedaż -Fioletowy = Na Aukcję -Szary = Publiczna - </notification> <notification name="ConfirmNotecardSave"> Ta notka musi być zapisana żeby mogła być skopiowana lub zobaczona. Zapisać notkę? <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/> @@ -927,10 +864,10 @@ Szary = Publiczna Zmiana rozdzielczości do [RESX] x [RESY] nie powidła się </notification> <notification name="ErrorUndefinedGrasses"> - Błąd: Niezdefiniowane trawy: [SPECIES] + Błąd: niezdefiniowane trawy: [SPECIES] </notification> <notification name="ErrorUndefinedTrees"> - Bład: Niezdefiniowane drzewa: [SPECIES] + Bład: niezdefiniowane drzewa: [SPECIES] </notification> <notification name="CannotSaveWearableOutOfSpace"> Nie można zapisać '[NAME]' do pliku stroju. Musisz zwolnić trochę miejsca na Twoim komputerze i zapisać strój jeszcze raz. @@ -940,11 +877,8 @@ Szary = Publiczna Zazwyczaj jest to tymczasowy problem. Możesz kontynuować modyfikacje i zapisać strój ponownie za kilka minut. </notification> <notification name="YouHaveBeenLoggedOut"> - Twoja sesja [SECOND_LIFE] została zakończona: -[MESSAGE] - -Kliknij Kontynuuj żeby zobaczyć IMy i czat. -Żadne inne operacje nie będą dozwolone. Kliknij Wyłącz w celu natychmiastowego opuszczenia [APP_NAME]. + Nastąpiło wylogowanie z [SECOND_LIFE] + [MESSAGE] <usetemplate name="okcancelbuttons" notext="Wyłącz" yestext="Kontynuuj"/> </notification> <notification name="OnlyOfficerCanBuyLand"> @@ -996,7 +930,7 @@ ze wszystkich posiadłości w tym symulatorze? <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/> </notification> <notification name="BlankClassifiedName"> - Musisz nadać tytuł Twojej reklamie. + Musisz nadać tytuł Twojej Reklamie. </notification> <notification name="MinClassifiedPrice"> Minimalna cena za publikację wynosi [MIN_PRICE]L$. @@ -1097,29 +1031,39 @@ Przekazać tą posiadłość o powierzchni [AREA] m² grupie '[GROUP_NAME]& </notification> <notification name="ErrorMessage"> [ERROR_MESSAGE] + <usetemplate name="okbutton" yestext="OK"/> </notification> - <notification name="AvatarMoved"> - Twoje miejsce [TYPE] jest obecnie niedostępne. [HELP] -Przeniesiono Cię do pobliskiego regionu. + <notification name="AvatarMovedDesired"> + Miejsce, do którego chcesz się teleportować jest chwilowo nieobecne. +Zostałeś przeniesiony do regionu sąsiedniego. + </notification> + <notification name="AvatarMovedLast"> + Twoje miejsce startu jest obecnie niedostępne. +Zostałeś przeniesiony do sąsiedniego regionu. + </notification> + <notification name="AvatarMovedHome"> + Twoje miejsce startu jest obecnie niedostępne. +Zostałeś przeniesiony do pobliskiego regionu. +Możesz ustawić nowe miejsce startu. </notification> <notification name="ClothingLoading"> Twoje ubranie wciąż się ładuje. Możesz normalnie używać [SECOND_LIFE], inni użytkownicy będą Cię widzieli poprawnie. <form name="form"> - <ignore name="ignore" text="Ładowanie ubrania zajmuje dużo czasu"/> + <ignore name="ignore" text="Ładowanie ubrań nadal trwa"/> </form> </notification> <notification name="FirstRun"> Instalacja [APP_NAME] zakończona. Jeżeli używasz [SECOND_LIFE] po raz pierwszy to musisz stworzyć konto żeby móc się zalogować. -Przejść na stronę www.secondlife.com żeby stworzyć nowe konto? +Czy chcesz przejść na stronę [http://join.secondlife.com secondlife.com] żeby stworzyć nowe konto? <usetemplate name="okcancelbuttons" notext="Kontynuuj" yestext="Nowe Konto..."/> </notification> <notification name="LoginPacketNeverReceived"> - Problemy z połączeniem. Problem może być spowodowany Twoim połączeniem z Internetem albo może istnieć po stronie serwerów [SECOND_LIFE]. + Problemy z połączeniem. Problem może być spowodowany Twoim połączeniem z Internetem albo może istnieć po stronie [SECOND_LIFE_GRID]. -Możesz sprawdzić swoje połączenie z Internetem i spróbować ponownie za kilka minut albo kliknij Pomoc żeby połączyć się ze stroną pomocy technicznej albo wybierz Teleportuj żeby spróbować teleportacji do Twojego miejsca startu. +Możesz sprawdzić swoje połączenie z Internetem i spróbować ponownie za kilka minut lub połączyć się ze stroną pomocy technicznej tutaj [SUPPORT_SITE] lub wybrać Teleportuj by teleportować się do swojego miejsca startu. <form name="form"> <button name="OK" text="OK"/> <button name="Help" text="Pomoc"/> @@ -1139,10 +1083,10 @@ Ten wybór będzie można później zmienić. [NAME] [PRICE]L$ Masz za mało L$. </notification> <notification name="GrantedModifyRights"> - Masz teraz prawa modyfikacji obiektów należących do [FIRST_NAME] [LAST_NAME]. + Masz teraz prawa modyfikacji obiektów należących do [NAME]. </notification> <notification name="RevokedModifyRights"> - Prawa modyfikacji obiektów należących do [FIRST_NAME] [LAST_NAME] zostały Ci odebrane. + Prawa modyfikacji obiektów należących do [NAME] zostały Ci odebrane. </notification> <notification name="FlushMapVisibilityCaches"> To spowoduje wyczyszczenie buforów map regionu. @@ -1188,10 +1132,10 @@ Zamień teksturę [TEXTURE_NUM] na 24-o bitową teksturę o wymiarze 512x512 lub Maksymalna liczba gości wynosi [MAX_AGENTS]. </notification> <notification name="MaxBannedAgentsOnRegion"> - Maksymalna liczba nieporządanych Rezydentów (banów) wynosi [MAX_BANNED]. + Maksymalna liczba niepożądanych Rezydentów (banów) wynosi [MAX_BANNED]. </notification> <notification name="MaxAgentOnRegionBatch"> - Próba dodania [NUM_ADDED] osób nie powidła się: + Próba dodania [NUM_ADDED] osób nie powiodła się: [MAX_AGENTS] [LIST_TYPE] limit przekroczony o [NUM_EXCESS]. </notification> <notification name="MaxAllowedGroupsOnRegion"> @@ -1236,12 +1180,30 @@ Aktualizacja nie jest wymagana ale jest zalecana w celu poprawy prędkości i st Aktualizacja nie jest wymagana ale jest zalecana w celu poprawy prędkości i stabilności. <usetemplate name="okcancelbuttons" notext="Kontynuuj" yestext="Załaduj"/> </notification> + <notification name="DownloadLinuxMandatory"> + Nowa wersja [APP_NAME] jest dostępna. +[MESSAGE] +Musisz pobrać aktualizację aby korzystać z [APP_NAME]. + <usetemplate name="okcancelbuttons" notext="Wyjdź" yestext="Pobieranie"/> + </notification> + <notification name="DownloadLinux"> + Aktualizacja [APP_NAME] jest dostępna. +[MESSAGE] +Ta aktualizacja nie jest wymagana ale zaleca się jej instalację w celu poprawienia szybkości i stabilności. + <usetemplate name="okcancelbuttons" notext="Kontynuuj" yestext="Pobieranie"/> + </notification> + <notification name="DownloadLinuxReleaseForDownload"> + Uaktualniona wersja [APP_NAME]została opublikowana. +[MESSAGE] +Aktualizacja nie jest wymagana ale jest zalecana w celu poprawy prędkości i stabilności. + <usetemplate name="okcancelbuttons" notext="Kontynuuj" yestext="Pobieranie"/> + </notification> <notification name="DownloadMacMandatory"> Nowa wersja [APP_NAME] została opublikowana. [MESSAGE] Musisz zainstalować nową wersję żeby używać [APP_NAME]. -Załadować do foldera Aplikacji? +Pobrać i zapisać w folderze Aplikacji? <usetemplate name="okcancelbuttons" notext="Wyłącz program" yestext="Załaduj"/> </notification> <notification name="DownloadMac"> @@ -1249,7 +1211,7 @@ Załadować do foldera Aplikacji? [MESSAGE] Aktualizacja nie jest wymagana ale jest zalecana w celu poprawy prędkości i stabilności. -Załadować do foldera Aplikacji? +Pobrać i zapisać w folderze Aplikacji? <usetemplate name="okcancelbuttons" notext="Kontynuuj" yestext="Załaduj"/> </notification> <notification name="DownloadMacReleaseForDownload"> @@ -1257,55 +1219,51 @@ Załadować do foldera Aplikacji? [MESSAGE] Aktualizacja nie jest wymagana ale jest zalecana w celu poprawy prędkości i stabilności. -Załadować do foldera Aplikacji? +Pobrać i zapisać w folderze Aplikacji? <usetemplate name="okcancelbuttons" notext="Kontynuuj" yestext="Załaduj"/> </notification> <notification name="DeedObjectToGroup"> - Przekazanie tego obiektu spowoduje, że grupa: + Przekazanie tego obiektu spowoduje, że Grupa: * Otrzyma L$ zapłacone temu obiektowi - <usetemplate ignoretext="Przekazując obiekty grupom" name="okcancelignore" notext="Anuluj" yestext="Przekaż"/> + <usetemplate ignoretext="Proszę potwierdzić decyzję przed przepisaniem obiektu do grupy" name="okcancelignore" notext="Anuluj" yestext="Przekaż"/> </notification> <notification name="WebLaunchExternalTarget"> - Otworzyć systemową przegłądarke żeby zobaczyć tą zawartość? - <usetemplate ignoretext="Otwierając systemową przeglądarkę żeby zobaczyć stronę" name="okcancelignore" notext="Anuluj" yestext="OK"/> + Czy chcesz otworzyć swoją przeglądarkę internetową by zobaczyć zawartość? + <usetemplate ignoretext="Uruchom przeglądarkę internetową by zobaczyć stronę internetową" name="okcancelignore" notext="Anuluj" yestext="OK"/> </notification> <notification name="WebLaunchJoinNow"> - Otworzyć stronę www.secondlife.com żeby zarządzać Twoim kontem? - <usetemplate ignoretext="Otwierając systemową przeglądarkę żeby zarządzać Twoim kontem" name="okcancelignore" notext="Anuluj" yestext="OK"/> + By dokonać zmian i aktualizacji swojego konta, odwiedź [http://secondlife.com/account/ Dashboard]. + <usetemplate ignoretext="Uruchom przeglądarkę internetową by dokonać zmian w konfiguracji mojego konta" name="okcancelignore" notext="Anuluj" yestext="OK"/> </notification> <notification name="WebLaunchSecurityIssues"> Odwiedź [SECOND_LIFE] Wiki i zobacz jak zgłaszać problemy z bezpieczeństwem danych. - <usetemplate ignoretext="Otwierając przeglądarkę żeby zobaczyć Wiki kwestii bezpieczeństwa danych" name="okcancelignore" notext="Anuluj" yestext="OK"/> + <usetemplate ignoretext="Uruchom przeglądarkę internetową by dowiedzieć się więcej na temat zgłaszania problemów bezpieczeństwa" name="okcancelignore" notext="Anuluj" yestext="OK"/> </notification> <notification name="WebLaunchQAWiki"> Odwiedź [SECOND_LIFE] Wiki pytań i odpowiedzi. - <usetemplate ignoretext="Otwierając przeglądarkę żeby zobaczyć Wiki pytań i odpowiedzi" name="okcancelignore" notext="Anuluj" yestext="OK"/> + <usetemplate ignoretext="Uruchom przeglądarkę internetową by zobaczyć QA Wiki" name="okcancelignore" notext="Anuluj" yestext="OK"/> </notification> <notification name="WebLaunchPublicIssue"> Odwiedź [SECOND_LIFE] katalog publicznych problemów, gdzie możesz zgłaszać błędy i inne problemy. - <usetemplate ignoretext="Otwierając przeglądarkę żeby zobaczyć katalog publicznych problemów" name="okcancelignore" notext="Anuluj" yestext="OK"/> - </notification> - <notification name="WebLaunchPublicIssueHelp"> - Odwiedź [SECOND_LIFE] Wiki i sprawdź jak używać katalogu publicznych problemów. - <usetemplate ignoretext="Otwierając przeglądarkę żeby zobaczyć Wiki katalogu publicznych problemów" name="okcancelignore" notext="Anuluj" yestext="OK"/> + <usetemplate ignoretext="Uruchom przeglądarkę internetową by wysłać Błędy Klienta" name="okcancelignore" notext="Anuluj" yestext="OK"/> </notification> <notification name="WebLaunchSupportWiki"> Otwórz oficjalny blog Lindenów żeby zobaczyć nowe wiadomości i informacje. - <usetemplate ignoretext="Otwierając przeglądarkę żeby zobaczyć blog" name="okcancelignore" notext="Anuluj" yestext="OK"/> + <usetemplate ignoretext="Uruchom przeglądarkę internetową by zobaczyć blog" name="okcancelignore" notext="Anuluj" yestext="OK"/> </notification> <notification name="WebLaunchLSLGuide"> - Otworzyć przewodnik skryptowania po pomoc ze skryptami? - <usetemplate ignoretext="Otwierając przeglądarkę żeby zobaczyć przewodnik skryptowania" name="okcancelignore" notext="Anuluj" yestext="OK"/> + Czy chcesz otworzyć samouczek Języka Skryptowania? + <usetemplate ignoretext="Uruchom przeglądarkę internetową by samouczek Języka Skryptowania" name="okcancelignore" notext="Anuluj" yestext="OK"/> </notification> <notification name="WebLaunchLSLWiki"> - Otworzyć portal LSL po pomoc ze skryptami? - <usetemplate ignoretext="Otwierając przeglądarkę żeby zobaczyć portal LSL" name="okcancelignore" notext="Anuluj" yestext="OK"/> + Czy napewno chcesz odwiedzić portal LSL Portal? + <usetemplate ignoretext="Uruchom przeglądarkę internetową by LSL Portal" name="okcancelignore" notext="Anuluj" yestext="OK"/> </notification> <notification name="ReturnToOwner"> Czy na pewno chcesz zwrócić wybrane obiekty do ich właścicieli? Wszystkie udostępnione obiekty z prawem transferu zostaną zwrócone poprzednim właścicielom. *UWAGA* Wszystkie udostępnione obiekty bez prawa transferu zostaną usunięte! - <usetemplate ignoretext="Zwracając obiekty ich właścicielom" name="okcancelignore" notext="Anuluj" yestext="OK"/> + <usetemplate ignoretext="Potwierdź zanim zwrócisz obiekty do ich właścicieli" name="okcancelignore" notext="Anuluj" yestext="OK"/> </notification> <notification name="GroupLeaveConfirmMember"> Jesteś członkiem grupy [GROUP]. @@ -1313,18 +1271,18 @@ Chcesz opuścić grupę? <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/> </notification> <notification name="ConfirmKick"> - NA PEWNO chcesz wyrzucić wszystkich użytkowników z sieci? - <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Wyrzuć Wszystkich Użytkowników"/> + Napewno chcesz wyrzucić wszystkich Rezydentów z gridu? + <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Wyrzuć wszystkich Rezydentów"/> </notification> <notification name="MuteLinden"> - Przepraszamy, ale nie możesz wyciszyć Lindena. + Przepraszamy, ale nie możesz zablokować Lindena. <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="CannotStartAuctionAlreadyForSale"> Aukcja nie może zostać rozpoczęta w posiadłości, która została już wcześniej wystawiona na aukcję. Deaktywuj opcję sprzedaży posiadłości jeżeli chcesz rozpocząć aukcję. </notification> - <notification label="Błąd Wyciszenia Obiektu Przez Nazwę" name="MuteByNameFailed"> - Ta osoba została już wyciszona przez Ciebie. + <notification label="Zablokuj obiekty według wpisanej nazwy" name="MuteByNameFailed"> + Rezydent/obiekt jest już zablokowany. <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="RemoveItemWarn"> @@ -1341,19 +1299,21 @@ Chcesz opuścić grupę? </notification> <notification name="BusyModeSet"> Tryb Pracy jest włączony. -Czat i IMy bedą ukryte. Wysłane IMy będą otrzymywały Twoją odpowiedź Trybu Pracy. Propozycje teleportacji będą odrzucone. -Dodatkowo, wszystkie podarowane dla Ciebie obiekty będą automatycznie zapisywane w folderze "Kosz" w Twojej szafie. - <usetemplate ignoretext="Włączając Tryb Pracy" name="okignore" yestext="OK"/> +Czat i IM będą ukryte. Wysłane IM będą otrzymywały Twoją odpowiedź Trybu Pracy. Propozycje teleportacji będą odrzucone. +Dodatkowo, wszystkie podarowane dla Ciebie obiekty będą automatycznie zapisywane w folderze "Kosz" w Twojej szafie. + <usetemplate ignoretext="Status zmieniony na Tryb Pracy" name="okignore" yestext="OK"/> </notification> <notification name="JoinedTooManyGroupsMember"> - Należysz już do maksymalnej ilości grup. -Musisz opuścić przynajmniej jedną grupę żeby przyjąć członkostwo w tej grupie, albo musisz odmówić. W celu opuszczenia grupy wybierz opcję 'Grupy...' z menu 'Edycja'. + Należysz już do maksymalnej ilości grup. Opuść proszę przynajmniej jedną grupę żeby przyjąć członkostwo w tej grupie, albo odmów. [NAME] oferuje Ci członkostwo w grupie. -[INVITE] <usetemplate name="okcancelbuttons" notext="Odmów" yestext="Przyjmij"/> </notification> + <notification name="JoinedTooManyGroups"> + Należysz już do maksymalnej ilości grup. Opuść proszę przynajmiej jedną grupę żeby przyjąć członkostwo w tej grupie, albo odmów. + <usetemplate name="okbutton" yestext="OK"/> + </notification> <notification name="KickUser"> - Z jakim komunikatem wyrzucić tego użytkownia? + Wyrzuć tego Rezydenta, wysyłając następujący komunikat. <form name="form"> <input name="message"> Administrator wylogował Cię. @@ -1373,7 +1333,7 @@ Musisz opuścić przynajmniej jedną grupę żeby przyjąć członkostwo w tej g </form> </notification> <notification name="FreezeUser"> - Z jakim komunikatem unieruchomić tego użytkownia? + Unieruchom tego Rezydenta, wysyłając następujący komunikat. <form name="form"> <input name="message"> Unieruchomiono Cię. Nie możesz się ruszać ani rozmawiać. Administrator skontaktuje się z Tobą poprzez IM. @@ -1383,7 +1343,7 @@ Musisz opuścić przynajmniej jedną grupę żeby przyjąć członkostwo w tej g </form> </notification> <notification name="UnFreezeUser"> - Z jakim komunikatem odblokować tego użytkownia? + Cofnij unieruchomienie tego Rezydenta, wysyłając następujący komunikat. <form name="form"> <input name="message"> Odblokowano Cię. @@ -1403,7 +1363,7 @@ Musisz opuścić przynajmniej jedną grupę żeby przyjąć członkostwo w tej g </form> </notification> <notification name="OfferTeleportFromGod"> - Wymusić przeniesienie użytkownika do miejsca Twojego pobytu? + Wysłać propozycję teleportacji do Twojego miejsca? <form name="form"> <input name="message"> Zapraszam do siebie. Region: [REGION] @@ -1413,8 +1373,16 @@ Musisz opuścić przynajmniej jedną grupę żeby przyjąć członkostwo w tej g </form> </notification> <notification name="TeleportFromLandmark"> - Na pewno chcesz się teleportować? - <usetemplate ignoretext="Teleportując z miejsca (LM) z Twojej szafy" name="okcancelignore" notext="Anuluj" yestext="Teleportuj"/> + Na pewno chcesz się teleportować do <nolink>[LOCATION]</nolink>? + <usetemplate ignoretext="Potwierdź próbę teleportacji do zapisanego miejsca" name="okcancelignore" notext="Anuluj" yestext="Teleportuj"/> + </notification> + <notification name="TeleportToPick"> + Teleportuj do [PICK]? + <usetemplate ignoretext="Potwierdź, że chcesz teleportować się do miejsca w Ulubionych" name="okcancelignore" notext="Anuluj" yestext="Teleportuj"/> + </notification> + <notification name="TeleportToClassified"> + Teleportuj do [CLASSIFIED]? + <usetemplate ignoretext="Potwierdź, że chcesz teleportować się do lokalizacji z Reklamy" name="okcancelignore" notext="Anuluj" yestext="Teleportuj"/> </notification> <notification label="Wiadomość do Wszystkich w Twoim Majątku" name="MessageEstate"> Wpisz krótką wiadomość która zostanie wysłana do wszystkich osób w Twoim majątku. @@ -1425,9 +1393,9 @@ Musisz opuścić przynajmniej jedną grupę żeby przyjąć członkostwo w tej g </form> </notification> <notification label="Zmiana Majątku Lindenów" name="ChangeLindenEstate"> - Dokonujesz zmiany w Regionie Głównym należącym do Lindenów (Regiony Główne, Teen Grid, Orientacja). - -Żądana operacja jest wyjątkowo niebezpieczna dla wszystkich Rezydentów przebywających w regionie. Dodatkowo, zmiany dokonane w Regionie Głównym mogą spowodować problemy przestrzeni serwerowej innych regionów. + Czy napewno chcesz zmienić ustawienia majątku Linden (mainland, teen grid, orientacja, itp). + +Jest to wyjątkowo niebezpieczna decyzja, odczuwalna przez wszystkich Rezydentów. Dla mainland, spowoduje to zmianę tysięcy regionów oraz ich przestrzeń serwerową. Kontynuować? <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/> @@ -1485,9 +1453,7 @@ Kontynuować? Ze względu na Twój wiek, nie jesteś uprawniony do przebywania w tym regionie. Może być to wynikiem braku informacji na temat weryfikacji Twojego wieku. Upewnij się, że masz zainstalowaną najnowszą wersję klienta i skorzystaj z [SECOND_LIFE]:Pomoc by uzyskać więcej informacji na temat dostępu do regionów z podanym rodzajem treści jaką zawiera. - <usetemplate - name="okbutton" - yestext="OK"/> + <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="RegionEntryAccessBlocked_KB"> Ze względu na Twój wiek, nie jesteś uprawniony do przebywania w tym regionie. @@ -1496,37 +1462,26 @@ Skorzystaj z [SECOND_LIFE]:Pomoc by uzyskać więcej informacji na temat dostęp <url name="url"> https://support.secondlife.com/ics/support/default.asp?deptID=4417&task=knowledge&questionID=6010 </url> - <usetemplate - name="okcancelignore" - yestext="[SECOND_LIFE]:Pomoc" - notext="Zamknij" - ignoretext="Dostęp do posiadłości jest zablokowany ze względu na rodzaj treści jaką zawiera"/> + <usetemplate ignoretext="Ze względu na Twój wiek, nie jesteś uprawniony do przebywania w tym regionie. Może być to wynikiem braku informacji na temat weryfikacji Twojego wieku." name="okcancelignore" notext="Zamknij" yestext="[SECOND_LIFE]:Pomoc"/> </notification> <notification name="RegionEntryAccessBlocked_Notify"> Ze względu na Twój wiek, nie jesteś uprawniony do przebywania w tym regionie. </notification> <notification name="RegionEntryAccessBlocked_Change"> - W związku ze statusem ustawień Twojego wieku, nie jesteś uprawniony do przebywania w tym regionie. - -Możeszy wybrać 'Zmień Ustawienia' by dokonać zmian w ustawieniach Twojego wieku by uzyskać dostęp do regionu. Wówczas będziesz w stanie znaleźć oraz mieć dostęp do [REGIONMATURITY] treści. Jeżeli zdecydujesz się na powrót do poprzednich ustawień, wybierz Edycja > Ustawienia... > Główne. - <form name="form"> - <button - name="OK" - text="Zmień Ustawienia"/> - <button - default="true" - name="Cancel" - text="Zamknij"/> - <ignore name="ignore" text="Dostęp do posiadłości jest zablokowany ze względu na ustawienia rodzaju treści jaką zawiera"/> - </form> + Ze względu na Twój wiek, nie jesteś uprawniony do przebywania w tym regionie. + +Możesz wybrać 'Zmień Ustawienia' by dokonać zmian w ustawieniach Twojego wieku by uzyskać dostęp do regionu. Wówczas będziesz w stanie znaleźć oraz mieć dostęp do [REGIONMATURITY] treści. Jeżeli zdecydujesz się na powrót do poprzednich ustawień, wybierz Ja > Ustawienia > Główne. + <form name="form"> + <button name="OK" text="Zmień Ustawienia"/> + <button default="true" name="Cancel" text="Zamknij"/> + <ignore name="ignore" text="Moje ustawienia wieku nie dopuszczają do regionu"/> + </form> </notification> <notification name="LandClaimAccessBlocked"> W związku ze statusem ustawień Twojego wieku, nie możesz odzyskać tej posiadłości. Możesz potrzebować weryfikacji wieku bądź instalacji najnowszej wersji klienta. Upewnij się, że masz zainstalowaną najnowszą wersję klienta i skorzystaj z [SECOND_LIFE]:Pomoc by uzyskać więcej informacji na temat dostępu do regionów z podanym rodzajem treści jaką zawiera. - <usetemplate - name="okbutton" - yestext="OK"/> + <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="LandClaimAccessBlocked_KB"> Ze względu na Twój wiek, nie możesz odzyskać tej posiadłości. @@ -1535,11 +1490,7 @@ Skorzystaj z [SECOND_LIFE]:Pomoc by uzyskać więcej informacji na temat dostęp <url name="url"> https://support.secondlife.com/ics/support/default.asp?deptID=4417&task=knowledge&questionID=6010 </url> - <usetemplate - name="okcancelignore" - yestext="[SECOND_LIFE]:Pomoc" - notext="Zamknij" - ignoretext="Odzyskanie posiadłości jest zablokowane ze względu na rodzaj treści jaką zwiera"/> + <usetemplate ignoretext="W związku ze statusem ustawień Twojego wieku, nie możesz odzyskać tej posiadłości." name="okcancelignore" notext="Zamknij" yestext="[SECOND_LIFE]:Pomoc"/> </notification> <notification name="LandClaimAccessBlocked_Notify"> Ze względu na Twój wiek, nie możesz odzyskać tej posiadłości. @@ -1547,20 +1498,14 @@ Skorzystaj z [SECOND_LIFE]:Pomoc by uzyskać więcej informacji na temat dostęp <notification name="LandClaimAccessBlocked_Change"> W związku ze statusem ustawień Twojego wieku, nie możesz odzyskać tej posiadłości. -Możeszy wybrać 'Zmień Ustawienia' by dokonać zmian w ustawieniach Twojego wieku by uzyskać dostęp do posiadłości. Wówczas będziesz w stanie znaleźć, oraz mieć dostęp do [REGIONMATURITY] treści. Jeżeli zdecydujesz się na powrót do poprzednich ustawień, wybierz Edycja > Ustawienia... > Główne. - <usetemplate - name="okcancelignore" - yestext="Zmień Ustawienia" - notext="Zamknij" - ignoretext="Odzyskanie posiadłości jest zablokowane ze względu na ustawienia rodzaju treści jaką zawiera"/> +Możesz wybrać 'Zmień Ustawienia' by dokonać zmian w ustawieniach Twojego wieku by uzyskać dostęp do regionu. Wówczas będziesz w stanie znaleźć oraz mieć dostęp do [REGIONMATURITY] treści. Jeżeli zdecydujesz się na powrót do poprzednich ustawień, wybierz Ja > Ustawienia > Główne. + <usetemplate ignoretext="Ze względu na Twój wiek, nie możesz odzyskać tej posiadłości." name="okcancelignore" notext="Zamknij" yestext="Zmień Ustawienia"/> </notification> <notification name="LandBuyAccessBlocked"> Ze względu na Twój wiek, nie możesz kupić tej posiadłości. Może być to wynikiem braku informacji na temat weryfikacji Twojego wieku. Upewnij się, że masz zainstalowaną najnowszą wersję klienta i skorzystaj z [SECOND_LIFE]:Pomoc by uzyskać więcej informacji na temat dostępu do regionów z podanym rodzajem treści jaką zawiera. - <usetemplate - name="okbutton" - yestext="OK"/> + <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="LandBuyAccessBlocked_KB"> Ze względu na Twój wiek, nie możesz kupić tej posiadłości. @@ -1569,11 +1514,7 @@ Skorzystaj z [SECOND_LIFE]:Pomoc by uzyskać więcej informacji na temat dostęp <url name="url"> https://support.secondlife.com/ics/support/default.asp?deptID=4417&task=knowledge&questionID=6010 </url> - <usetemplate - name="okcancelignore" - yestext="[SECOND_LIFE]:Pomoc" - notext="Zamknij" - ignoretext="Zakup posiadłości jest zablokowany ze względu na rodzaj treści jaką zawiera"/> + <usetemplate ignoretext="Ze względu na Twój wiek, nie możesz kupić tej posiadłości." name="okcancelignore" notext="Zamknij" yestext="[SECOND_LIFE]:Pomoc"/> </notification> <notification name="LandBuyAccessBlocked_Notify"> Ze względu na Twój wiek, nie możesz kupić tej posiadłości. @@ -1581,12 +1522,11 @@ Skorzystaj z [SECOND_LIFE]:Pomoc by uzyskać więcej informacji na temat dostęp <notification name="LandBuyAccessBlocked_Change"> W związku ze statusem ustawień Twojego wieku, nie możesz kupić tej posiadłości. -Możesz wybrać 'Zmień Ustawienia' by dokonać zmian w ustawieniach Twojego wieku by uzyskać dostęp do posiadłości. Wówczas będziesz w stanie znaleźć oraz mieć dostęp do [REGIONMATURITY] treści. Jeżeli zdecydujesz się na powrót do poprzednich ustawień, wybierz Edycja > Ustawienia... > Główne. - <usetemplate - name="okcancelignore" - yestext="Zmień Ustawienia" - notext="Zamknij" - ignoretext="Zakup posiadłości jest zablokowany ze względu na ustawienia rodzaju treści jaką zawiera"/> +Możesz wybrać 'Zmień Ustawienia' by dokonać zmian w ustawieniach Twojego wieku by uzyskać dostęp do regionu. Wówczas będziesz w stanie znaleźć oraz mieć dostęp do [REGIONMATURITY] treści. Jeżeli zdecydujesz się na powrót do poprzednich ustawień, wybierz Ja > Ustawienia > Główne. + <usetemplate ignoretext="W związku ze statusem ustawień Twojego wieku, nie możesz kupić tej posiadłości." name="okcancelignore" notext="Zamknij" yestext="Zmień Ustawienia"/> + </notification> + <notification name="TooManyPrimsSelected"> + Zbyt wiele wybranych obiektów. Wybierz [MAX_PRIM_COUNT] lub mniej i spróbuj ponownie </notification> <notification name="ProblemImportingEstateCovenant"> Problem z importem umowy majątku. @@ -1600,9 +1540,7 @@ Możesz wybrać 'Zmień Ustawienia' by dokonać zmian w ustawieniach T </notification> <notification name="UnableToLoadNotecardAsset"> Brak możliwości załadowania noty w tej chwili. - <usetemplate - name="okbutton" - yestext="OK"/> + <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="NotAllowedToViewNotecard"> Niewystarczające prawa do zobaczenia notki przypisanej do wybranego ID. @@ -1620,19 +1558,11 @@ Zamieścić tą reklamę za [AMOUNT]L$? </notification> <notification name="SetClassifiedMature"> Czy ta reklama zawiera treść 'Mature'? - <usetemplate - canceltext="Anuluj" - name="yesnocancelbuttons" - notext="Nie" - yestext="Tak"/> + <usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Nie" yestext="Tak"/> </notification> <notification name="SetGroupMature"> Czy ta grupa zawiera treść 'Mature'? - <usetemplate - canceltext="Anuluj" - name="yesnocancelbuttons" - notext="Nie" - yestext="Tak"/> + <usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Nie" yestext="Tak"/> </notification> <notification label="Potwierdź Restart" name="ConfirmRestart"> Na pewno chcesz zrobić restart tego regionu za 2 minuty? @@ -1646,201 +1576,14 @@ Zamieścić tą reklamę za [AMOUNT]L$? <button name="Cancel" text="Anuluj"/> </form> </notification> - <notification label="Blokowanie Kształtowania Terenu" name="HelpRegionBlockTerraform"> - Jeżeli ta opcja jest wybrana właściciele posiadłości nie będą mogli kształtować terenu niezależnie od ustawienia opcji 'Edycja Terenu' dla posiadłości. - -Domyślnie: nie wybrana - </notification> - <notification label="Blokowanie Latania" name="HelpRegionBlockFly"> - Jeżeli ta opcja jest wybrana ludzie nie będą mogli latać w tym regionie niezależnie od ustawienia opcji 'Latanie' dla posiadłości. - -Domyślnie: nie wybrana - </notification> - <notification label="Zezwalanie na Uszkodzenia" name="HelpRegionAllowDamage"> - Jeżeli ta opcja jest wybrana system zdrowia będzie aktywny we wszystkich posiadłościach niezależnie od ustawień dla indywidualnych posiadłości. Jeżeli ta opcja nie jest wybrana właściciele indywidualych posiadłości będą mogli kontrolować system zdrowia w swoich posiadłościach. - -Domyślnie: nie wybrana - </notification> - <notification label="Limit Liczby Awatarów" name="HelpRegionAgentLimit"> - Wybierz maksymalną liczbę awatarów dozwoloną w tym regionie. -Wydajność systemu może się zmieniać w zależności od liczby obecnych awatarów. - -Domyślnie: 40 - </notification> - <notification label="Ekstra Obiekty" name="HelpRegionObjectBonus"> - Ekstra Obiekty jest to mnożnik dla dozwolonych elementów (obiektów prostych). Dozwolony zakres to 1 do 10. Ustawienie '1' pozwala na 117 elementów na każdej posiadłości o powierzchni 512m. Ustawienie '2' pozwala na 234 elementy, czyli dwa razy tyle, itd. -Maksymalna liczba elementów w regionie to 15000 niezależnie od ustawienia Ekstra Obiektów. Pamiętaj - zmniejszenie Ekstra Obiektów po fakcie może spowodować odsyłanie lub usuwanie istniejących obiektów. - -Domyślnie: 1,0 - </notification> - <notification label="Treść" name="HelpRegionMaturity"> - Aktywuj opcję klasyfikacji regionu ze względu na treść jaką zawiera, która zostaje wyświetlana w górnym pasku widoku w nazwie regionu oraz w podpowiedziach Mapy Świata. Dodatkowo, opcja ta wpływa na dostęp do wyników w czasie wyszukiwania danego regionu. By móc odwiedzić dany region lub mieć dostęp do jego wyników w czasie wyszukiwania, Rezydent musi mieć takie same ustawienia dla treści jak dany region. - -By dokonana zmiana została zsynchronizowana z Mapą Świata, poczekaj kilka minut. - </notification> - <notification label="Blokowanie Popychania" name="HelpRegionRestrictPushObject"> - Ta opcja powoduje, że popychanie będzie ograniczone w całym regionie. Jeżeli ta opcja jest wybrana Rezydenci mogą być popchnięci tylko przez samych siebie lub przez właściciela posiadłości. -(Popychanie odnosi sie do funkcji llPushObject() w LSL.) - -Domyślnie: nie wybrana - </notification> - <notification label="Dzielenie / Łączenie Posiadłości" name="HelpParcelChanges"> - Ta opcja kontroluje czy posiadłości nie należące do właściciela tego majątku mogą być łączone / dzielone. -Jeżeli opcja nie jest wybrana: -* Tylko właściciele majątku i zarządcy mogą łączyć / dzielić posiadłości. -* Tylko posiadłości należące do właściciela albo do grupy mogą być - łączone / dzielone przez członków z wystarczającymi prawami. -Jeżeli ta opcja jest wybrana: -* Wszyscy właściciele mogą łączyć / dzielić swoje posiadłości. -* Posiadłości należące do grupy mogą być łączone / dzielone - przez członków z wystarczającymi prawami. - -Domyślnie: wybrana - </notification> - <notification label="Nie Pokazuj w Wyszukiwaniu" name="HelpRegionSearch"> - Wybranie tej opcji uniemożliwi właścicielom posiadłość wyświetlanie ich posiadłości w wyszukiwaniu -Domyślinie: nie wybrana - </notification> <notification label="Zmienione Restrykcje Wieku dla Regionu" name="RegionMaturityChange"> Ustawienie restrykcji wieku dla regionu zostało zmienione. Zazwyczaj musi upłynąć nieco czasu zanim ta zmiana zostanie odzwierciedlona na mapie. - </notification> - <notification label="Odsprzedaż Posiadłości" name="HelpRegionLandResell"> - Właściciele majątku i zarządcy mogą sprzedawać posiadłości należące do właściciela majątku. -Jeżeli ta opcja nie jest wybrana kupujący nie będą mogli odsprzedać posiadłości w tym regionie. -Jeżeli ta opcja jest wybrana kupujący będą mogli odsprzedać posiadłości w tym regionie. - -Domyślinie: nie pozwalaj - </notification> - <notification label="Wyłącz Skrypty" name="HelpRegionDisableScripts"> - Słaba wydajność / prędkość symulatora może być spowodowana przez skrypt. Otwórz panel Statystyki (Ctrl+Shift+1). Sprawdź ilość klatek na sekundę (FPS) w Fizyce Symulatora. Jeżeli jest mniej niż 45 wybierz panel Czas znajdujący się na dole panelu Statystyki. Jeżeli Czas Skryptów wynosi 25 ms lub więcej kliknij na Główne Skrypty. Zobaczysz listę nazw i lokacji skryptów które mogą być odpowiedzialne za pogorszenie wydajności. - -Wybranie opcji Wyłącz Skrypty i naciśnięcie Zastosuj tymczasowo wyłączy wszystkie skrypty w tym regionie. Wybranie tej opcji może być niezbędne w celu umożliwienia podróży do lokacji wymienionego Głównego Skryptu. -Po przebyciu na miejsce zobacz skrypt i sprawdź czy jest on źródłem problemu. W razie potrzeby skontaktuj się z właścicielem skryptu albo usuń lub zwróć obiekt. -Wyłączenie opcji Wyłącz Skrypty i naciśnięcie Zastosuj ponownie włączy skrypty w tym regionie. - -Domyślnie: nie wybrana - </notification> - <notification label="Wyłącz Kolizje" name="HelpRegionDisableCollisions"> - Słaba wydajność / prędkość symulatora może być spowodowana przez fizyczne obiekty. Otwórz panel Statystyki (Ctrl+Shift+1). Sprawdź ilość klatek na sekundę (FPS) w Fizyce Symulatora. Jeżeli jest mniej niż 45 wybierz panel Czas znajdujący się na dole panelu Statystyki. Jeżeli Czas Symulatora (Fizyka) wynosi 20 ms lub więcej kliknij na Główne Kolizje. Zobaczysz listę nazw i lokacji fizycznych obiektów które mogą być odpowiedzialne za pogorszenie wydajności. - -Wybranie opcji Wyłącz Kolizje i naciśnięcie Zastosuj tymczasowo wyłączy kolizje obiektów. Wybranie tej opcji może być niezbędne w celu umożliwienia podróży do lokacji wymienionych Główneych Kolizji. -Po przebyciu na miejsce zobacz obiekt i sprawdź czy jest on źródłem kolizji z innymi obiektami. W razie potrzeby skontaktuj się z właścicielem obiektu albo usuń lub zwróć obiekt. -Wyłączenie opcji Wyłącz Kolizje i naciśnięcie Zastosuj ponownie włączy kolizje w tym regionie. - -Domyślnie: nie wybrana - </notification> - <notification label="Wyłącz Fizykę" name="HelpRegionDisablePhysics"> - Opcja Wyłącz Fizykę jest podobna do opcji Wyłącz Kolizje i spowoduje wyłączenie symulacji fizyki. Oznacza to, że nie tylko obiekty przestaną się zderzać, ale również awatary nie będą się mogły poruszać. - -Ta opcja powinna być używana wyłącznie w przypadku kiedy użycie opcji Wyłącz Kolizje nie zwiększa wystarczająco wydajności symulatora w celu sprawdzenia problemów związanych z fizyką i z kolizjami. - -Po zakończeniu badań musisz ponownie włączyć fizykę żeby awatary mogły się poruszać. - -Domyślnie: nie wybrana - </notification> - <notification label="Główne Kolizje" name="HelpRegionTopColliders"> - Pokaż listę obiektów potencjalnie doświadczających największej ilości kolizji między obiektami. Te obiekty mogą być odpowiedzialne za zmniejszenie wydajności. Wybierz Widok > Statystyki i zobacz Symulator > Czas > Czas Symulatora (Fizyka) i sprawdź czy więcej niż 20 ms jest spędzane w fizyce. - </notification> - <notification label="Główne Skrypty" name="HelpRegionTopScripts"> - Pokaż listę obiektów spędzających najwęcej czasu wykonując skrypty LSL. Te obiekty mogą być odpowiedzialne za zmniejszenie wydajności. Wybierz Widok > Statystyki i zobacz Symulator > Czas > Czas Skryptów i sprawdź czy więcej niż 25 ms jest spędzane w skryptach. - </notification> - <notification label="Restart Regionu" name="HelpRegionRestart"> - Restart procesu na serwerze obsługującym ten region za dwie minuty. Wszyscy Rezydenci w tym regionie zostaną wylogowani. Region zapisze swoje dane i powinien wystartować w przeciągu 90 sekund. - -Restart regionu nie naprawi większości problemów związanych z wydajnością / prędkością i generalnie powinnien być używany na polecenie. - </notification> - <notification label="Poziom Wody" name="HelpRegionWaterHeight"> - Jest to poziom w metrach gdzie pojawia się woda. Jeżeli jest wybrana inna wartość niż 20 i Twoja woda sąsiaduje z krawędzią świata lub pustym miejscem to będzie widoczny uskok. - -Domyślnie: 20 - </notification> - <notification label="Wznoszenie Terenu" name="HelpRegionTerrainRaise"> - Jest to dystans w metrach o który właściciele posiadłości mogą podnieść teren powyżej ustalonego poziomu odniesienia. - -Domyślnie: 4 - </notification> - <notification label="Obniżanie Terenu" name="HelpRegionTerrainLower"> - Jest to dystans w metrach o który właściciele posiadłości mogą obniżyć teren poniżej ustalonego poziomu odniesienia. - -Domyślnie: -4 - </notification> - <notification label="Ładowanie RAW Terenu" name="HelpRegionUploadRaw"> - Ten przycisk ładuje plik .RAW dla tego regionu. -Plik musi mieć poprawne wymiary (RGB, 256x256) i 13 kanałów. -Najprostszy sposób na stworzenie pliku terenu to zapisanie istniejącego pliku RAW. Zalecany pierwszy krok to modyfikacje kanału czerwieni (wysokość terenu) i ładowanie nowego pliku. - -Ładowanie pliku może zająć 45 sekund. Załadowanie terenu nie przemieści obiektów znajdujących się na tym terenie, tylko teren i prawa przypisane do posiadłości ulegną zmianie. Może to spowodować, że niektóre obiekty znikną pod ziemią. - -Aby uzyskać więcej informacji o edycji map wysokości sprawdź F1 Pomoc. - </notification> - <notification label="Zapisywanie RAW Terenu" name="HelpRegionDownloadRaw"> - Ten przycisk zapisuje plik zawierający mapę wysokości, wymiary posiadłości, dane o posiadłościach na sprzedaż i niektóre prawa przypisane do posiadłości w tym regionie. Jeżeli otwierasz ten plik w programie takim jak Photoshop musisz zdefniować wymiary dokumentu jako: RGB, 256x256, 13 kanałów. Ten plik terenu nie może zostać otwarty w żaden inny sposób. - -Aby uzyskać więcej informacji o edycji map wysokości sprawdź F1 Pomoc. - </notification> - <notification label="Używaj Słońca Majątku" name="HelpRegionUseEstateSun"> - Ta opcja ustala pozycję słońca w tym regionie żeby była taka sama jak pozycja słońca w reszcie majątku. - -Domyślnie: włączona - </notification> - <notification label="Stałe Słońce" name="HelpRegionFixedSun"> - Ta opcja ustala pozycję słońca do pozycji w suwaku faz i unieruchamia słońce w wybranej pozycji. - -Domyślnie: nie włączona - </notification> - <notification label="Ustalanie Terenu" name="HelpRegionBakeTerrain"> - Ten przycisk zapisuje obecne ukształtowanie terenu jako nowy punkt odniesienia dla regionu. Po ustaleniu punktu odniesienia teren może zostać odtworzony do zapisanego kształtu wybierając opcję Odtwórz w Edycji Terenu. Zapisany, ustalony teren jest również punktem odniesienia dla górnego i dolnego limitu zmian wysokości. - </notification> - <notification label="Zarządcy Majątku" name="HelpEstateEstateManager"> - Zarządca majątku jest Rezydentem oddelegowanym przez Ciebie do kontroli ustawień regionu i majątku. Zarządca majątku może zmieniać wszystkie ustawienia dostępne na tym panelu, za wyjątkiem ładowania, zapisywania i ustalania terenu. W szczgólności może kontrolować dostęp innych Rezydentów (bany) do Twojego majątku. - -Zarządcy majątku mogą być dodawani i usuwani wyłącznie przez właściciela majątku. Wybieraj na zarządców tylko tych Rezydentów którym ufasz ponieważ ponosisz odpowiedzialność za ich działania. - </notification> - <notification label="Używaj Globalnego Czasu" name="HelpEstateUseGlobalTime"> - Ta opcja ustala pozycję słońca w Twoim majątku żeby była taka sama jak pozycja słońca w regionach głównych należących do Lindenów. - </notification> - <notification label="Stałe Słońce" name="HelpEstateFixedSun"> - Ta opcja ustala pozycję słońca do pozycji w suwaku faz i unieruchamia słońce w wybranej pozycji. - </notification> - <notification label="Dostęp Publiczny" name="HelpEstateExternallyVisible"> - Ta opcja kontroluje czy Rezydenci znajdujący się w innych majątkach mogą przenosić się do tego majątku jeżeli nie są umieszczeni na liście dostępu. - -Domyślnie: włączona - </notification> - <notification label="Pozwalaj na Bezpośrednią Teleportację" name="HelpEstateAllowDirectTeleport"> - Włączenie tej opcji pozwala Rezydentom na bezpośrednią teleportację do dowolnego miejsca a Twoim majątku. Jeżeli ta opcja nie jest wyłączona Rezydenci mogą się teleportować do najbliższego teleportera. -Domyślnie: nie włączona - </notification> - <notification label="Dostęp do Majątku" name="HelpEstateAllowResident"> - Dostęp do tego majątku będzie ograniczony do wymienionych Rezydentów i poniższych grup. Ta opcja jest dostępna tylko wtedy kiedy opcja Dostępu Publicznego jest wyłączona. - </notification> - <notification label="Dostęp Grup do Majątku" name="HelpEstateAllowGroup"> - Dostęp do tego majątku będzie ograniczony do wymienionych grup i powyższych Rezydentów. Ta opcja jest dostępna tylko wtedy kiedy opcja Dostępu Publicznego jest wyłączona. - </notification> - <notification label="Email o Nadużyciach" name="HelpEstateAbuseEmailAddress"> - Wpisanie ważnego email adresu spowoduje, że raporty o nadużyciach w obrębie tego majątku będą wysyłane na ten adres. Zostawienie pustego miejsca spowoduje, że raporty o nadużyciach będą wysyłane wyłącznie do Linden Lab. - </notification> - <notification label="Wstęp Wzbroniony (bany)" name="HelpEstateBanResident"> - Rezydenci umieszczeni na tej liście nie mają dostępu do Twojego majątku, niezależnie od jakichkolwiek innych ustawień. - </notification> - <notification label="Pozwalaj na Rozmowy" name="HelpEstateVoiceChat"> - Posiadłości w tym majątku mogą mieć własne kanały głosu pozwalające Rezydentom na rozmowy z osobami w pobliżu. - -Domyślnie: nie włączone +Aby wejść do regionu Adult, Rezydenci muszą posiadać zweryfikowane konto, albo w wyniku weryfikacji wieku albo płatości. </notification> <notification label="Wersja Niezgodna z Systemem Rozmów" name="VoiceVersionMismatch"> - Ta wersja [APP_NAME] nie jest kompatybilna z systemem Rozmów w tym regionie. Musisz zainstalować aktualną wersję [APP_NAME] żeby Rozmowy działały porawnie. - </notification> - <notification label="Umowa Majątku" name="HelpEstateCovenant"> - Włączenie opcji umowy majątku jest wymagane w celu umożliwienia sprzedaży posiadłości w obrębie majątku. -Jeżeli opcja umowy nie jest wybrana sprzedaż posiadłości nie jest dozwolona. Notka określająca Twoją umowę może być pusta jeżeli nie chcesz ustalić zasad specyficznych dla Twojego majątku i jeżeli nie chcesz uprzedzać nabywców o faktach odnoszących się do posiadłości przed zakupem. - -Umowa może być używana w celu określenia zasad, zaleceń, przekazywania informacji o kulturze lub, po prostu, Twoich własnych oczekiwań w odniesieniu do potencjalnego nabywacy. -Możesz zdefiniować zasady podziału posidłości, prawa budowlane, zasady opłat i wszystkie dodatkowe informacje z którymi nowy właściciel powinien zapoznać się i zaakceptować przed zakupem. - -Nabywca musi wybrać opcję akceptacji umowy żeby trasakcja mogła zostać sfinalizowana. Umowa majątku jest zawsze dostępna w dialogu O Posiadłości dla każedej posiadłości ze zdefinowaną umową. + Ta wersja [APP_NAME] nie jest kompatybilna z systemem rozmów w tym Regionie. Musisz zainstalować aktualną wersję [APP_NAME] aby komunikacja głosowa działała poprawnie. </notification> <notification label="Nie Można Kupić Obiektów" name="BuyObjectOneOwner"> Jednorazowo możesz kupować tylko od jednego właściciela. @@ -1917,63 +1660,45 @@ Wpisz hasło ponownie i kliknij OK. </notification> <notification name="SetPickLocation"> Uwaga: -Lokacja tego wyboru została zaktualizowana ale pozostałe szczegóły zachowają oryginalne wartości. +Lokalizacja tego wyboru została zaktualizowana ale pozostałe szczegóły zachowają oryginalne wartości. <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="MoveInventoryFromObject"> - Wybrane obiekty szafy nie mają praw kopiowania. -Obiekty zostaną przeniesione do Twojej szafy, nie zostaną skopiowane. + Wybrane obiekty Szafy nie mają praw kopiowania. +Obiekty zostaną przeniesione do Twojej Szafy, nie zostaną skopiowane. -Przenieść obiekty szafy? - <usetemplate ignoretext="Przenosząc szafę bez praw kopiowania z obiektów" name="okcancelignore" notext="Anuluj" yestext="OK"/> +Przenieść obiekty Szafy? + <usetemplate ignoretext="Uprzedź przed przeniesieniem zawartości niekopiowalnej z obiektu" name="okcancelignore" notext="Anuluj" yestext="OK"/> </notification> <notification name="MoveInventoryFromScriptedObject"> - Wybrane obiekty szafy nie mają praw kopiowania. + Wybrane obiekty Szafy nie mają praw kopiowania. Obiekty zostaną przeniesione do Twojej Szafy, nie zostaną skopiowane. -Ponieważ obiekty zawierają skrypty, przeniesienie obiektów do Twojej szafy może spowodować niepoprawne działanie skryptów. +Ponieważ obiekty zawierają skrypty, przeniesienie obiektów do Twojej Szafy może spowodować niepoprawne działanie skryptów. Przenieść obiekty szafy? - <usetemplate ignoretext="Przenosząc szafę bez praw kopiowania ze skryptowanych obiektów" name="okcancelignore" notext="Anuluj" yestext="OK"/> + <usetemplate ignoretext="Uprzedź przed przeniesieniem zawartości niekopiowalnej z obiektu, która może uszkodzić skrypty obiektu" name="okcancelignore" notext="Anuluj" yestext="OK"/> </notification> <notification name="ClickActionNotPayable"> - Uwaga: Opcja 'Zapłać Obiektowi' została wybrana, ale żeby ta opcja działała musi być dodany skrypt z funkcją money(). + Uwaga: Opcja Zapłać Obiektowi została wybrana, ale żeby ta opcja działała musi być dodany skrypt z funkcją money(). <form name="form"> - <ignore name="ignore" text="Wybierając opcję Zapłać Obiektowi dla obiektów bez funkcji money()"/> + <ignore name="ignore" text="Opcja Zapłać Obiektowi została aktywowana podczas budowania obiektów bez skryptu z funkcją money()."/> </form> </notification> <notification name="OpenObjectCannotCopy"> W tym obiekcie nie ma elementów które możesz skopiować. </notification> <notification name="WebLaunchAccountHistory"> - Przejść na stronę [SECOND_LIFE] żeby zobaczyć historię konta? - <usetemplate ignoretext="Ładując stronę historii konta." name="okcancelignore" notext="Anuluj" yestext="Idź na stronę"/> - </notification> - <notification name="ClickOpenF1Help"> - Przejść na stronę [SECOND_LIFE]? - <usetemplate ignoretext="Odwiedzając stronę [SECOND_LIFE]." name="okcancelignore" notext="Anuluj" yestext="Idź"/> + Przejść na stronę [http://secondlife.com/account/ Dashboard] żeby zobaczyć historię konta? + <usetemplate ignoretext="Uruchom przeglądarkę internetową by zobaczyć historię konta" name="okcancelignore" notext="Anuluj" yestext="Idź na stronę"/> </notification> <notification name="ConfirmQuit"> Na pewno chcesz skończyć? - <usetemplate ignoretext="Wyłączając [APP_NAME]." name="okcancelignore" notext="Kontynuuj" yestext="Wyłącz"/> + <usetemplate ignoretext="Na pewno chcesz skończyć?" name="okcancelignore" notext="Nie kończ" yestext="Wyłącz"/> </notification> <notification name="HelpReportAbuseEmailLL"> - Używaj tej opcji do zgłaszania nadużyć Warunków Umowy (Terms of Service) i Standardów Społeczeństwa (Community Standards). Zobacz: - -http://secondlife.com/corporate/tos.php -http://secondlife.com/corporate/cs.php - -Wszystkie zgłoszone nadużycia Warunków Umowy (Terms of Service) i Standardów Społeczeństwa (Community Standards) są badane i rozwiązywane. Możesz zobaczyć konkluzję zgłoszenia w Raporcie Zgłoszeń pod: + Używaj tej opcji do zgłaszania nadużyć [http://secondlife.com/corporate/tos.php Warunków Umowy (Terms of Service)] i [http://secondlife.com/corporate/cs.php Standardów Społeczeństwa (Community Standards)]. -http://secondlife.com/support/incidentreport.php - </notification> - <notification name="HelpReportAbuseEmailEO"> - UWAGA: Ten raport zostanie wysłany do właściciela regionu w którym się znajdujesz i nie będzie wysłany do Linden Lab. - -W ramach serwisu dla Rezydentów i gości właściciel tego regionu postanowił odbierać i rozwiązywać wszystkie reporty wysłane z tego regionu. Linden Lab nie będzie analizował żadnych reportów zgłoszonych z tego miejsca. - -Właściciel regionu będzie rozpatrywał raporty w oparciu o lokalne prawa tego regionu zdefiniowane w umowie majątku. (Możesz zobaczyć umowę wybierając opcję O Posiadłości z menu Świat.) - -Rozwiązanie tego raportu odnosi się wyłącznie do tego regionu; konkluzja tego raportu nie będzie miała wpływu na dostęp Rezydentów do innych regionów w [SECOND_LIFE]. Wyłącznie Linden Lab może całkowicie odebrać dostęp do [SECOND_LIFE]. +Wszystkie zgłoszone nadużycia są badane i rozwiązywane. </notification> <notification name="HelpReportAbuseSelectCategory"> Wybierz kategorię dla tego raportu o nadużyciu. @@ -2001,9 +1726,9 @@ Dokładne dane pomogą nam w klasyfikacji i prztwarzaniu raportu. Jeżeli składasz raport dotyczący naruszenia praw autorskich proszę się upewnić, że robisz to poprawnie: -(1) Przypadek Nadużycia. Możesz złożyć raport jeżeli sądzisz, że Rezydent narusza system przywilejów [SECOND_LIFE], na przykład używając CopyBot lub podobnych narzędzi robiących kopie, naruszając prawa autorskie. Komisja Nadużyć bada wykrocznia i stosuje akcje dyscyplinarne za zachowania sprzeczne z zasadami Warunków Umowy (Terms of Service) i Standardów Społeczeństwa (Community Standards) [SECOND_LIFE]. Komisja Nadużyć nie zajmuje się i nie odpowiada na żądania usunięcia treści ze środowiska [SECOND_LIFE]. +(1) Przypadek Nadużycia. Możesz złożyć raport jeżeli sądzisz, że Rezydent narusza system przywilejów [SECOND_LIFE], na przykład używając CopyBot lub podobnych narzędzi robiących kopie, naruszając prawa autorskie. Komisja Nadużyć bada wykroczenia i stosuje akcje dyscyplinarne za zachowania sprzeczne z zasadami Warunków Umowy [SECOND_LIFE] [http://secondlife.com/corporate/tos.php Terms of Service] i Standardów Społeczeństwa [http://secondlife.com/corporate/cs.php Community Standards]. Komisja Nadużyć nie zajmuje się i nie odpowiada na żądania usunięcia treści ze środowiska [SECOND_LIFE]. -(2) Przypadek DMCA lub Usuwanie Treści. Aby wystąpić z żądaniem o usunięcie treści ze środowiska [SECOND_LIFE] MUSISZ przedłożyć ważne zawiadomienie o nadużyciu zgodne z naszą polisą DMCA pod http://secondlife.com/corporate/dmca.php. +(2) Przypadek DMCA lub Usuwanie Treści. Aby wystąpić z żądaniem o usunięcie treści ze środowiska [SECOND_LIFE] MUSISZ przedłożyć ważne zawiadomienie o nadużyciu zgodne z naszą polityką DMCA [http://secondlife.com/corporate/dmca.php DMCA Policy]. Jeżeli chcesz kontynuować dalej zamknij to okno i dokończ wysyłanie raportu. Może być potrzebny wybór kategorii 'CopyBot albo Nadużycie Przywilejów'. @@ -2019,7 +1744,7 @@ Linden Lab Obecnie masz już dołączony obiekt do tej części Twojego ciała. Chcesz go zamienić na wybrany obiekt? <form name="form"> - <ignore name="ignore" save_option="true" text="Zamieniając istniejące dodatki"/> + <ignore name="ignore" save_option="true" text="Obecnie masz już dołączony obiekt do tej części Twojego ciała.Chcesz go zamienić na wybrany obiekt?"/> <button ignore="Zamień Automatycznie" name="Yes" text="OK"/> <button ignore="Nie Zamieniaj" name="No" text="Anuluj"/> </form> @@ -2029,18 +1754,22 @@ Chcesz go zamienić na wybrany obiekt? Chcesz wyłączyć Tryb Pracy przed zakończeniem tej tranzakcji? <form name="form"> - <ignore name="ignore" save_option="true" text="Płacąc osobie lub obiektowi będąc w Trybie Pracy"/> + <ignore name="ignore" save_option="true" text="Jesteś w Trybie Pracy co oznacza, że nie dostaniesz żadnych obiektów w zamian za tą opłatę. Chcesz wyłączyć Tryb Pracy przed zakończeniem tej transakcji?"/> <button ignore="Zawsz wyłączaj Tryb Pracy" name="Yes" text="OK"/> <button ignore="Nie wyłączaj Trybu Pracy" name="No" text="Anuluj"/> </form> </notification> + <notification name="ConfirmDeleteProtectedCategory"> + Ten folder '[FOLDERNAME]' to folder systemowy. Usunięcie foldera systemowego spowoduje niestabilność. Czy na pewno chcesz go skasować? + <usetemplate ignoretext="Potwierdź zanim folder systemu zostanie skasowany" name="okcancelignore" notext="Anuluj" yestext="OK"/> + </notification> <notification name="ConfirmEmptyTrash"> - Na pewno chcesz permanentnie usunąć zawartość Śmietnika? - <usetemplate ignoretext="Usuwając zawartość Śmietnika" name="okcancelignore" notext="Anuluj" yestext="OK"/> + Na pewno chcesz permanentnie usunąć zawartość Kosza? + <usetemplate ignoretext="Potwierdź przed usunięciem zawartości Kosza" name="okcancelignore" notext="Anuluj" yestext="OK"/> </notification> <notification name="ConfirmClearBrowserCache"> Na pewno chcesz wyczyścić bufor przeglądarki? - <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Tak"/> + <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/> </notification> <notification name="ConfirmClearCookies"> Na pewno chcesz wyczyścić ciasteczka? @@ -2051,39 +1780,18 @@ Chcesz wyłączyć Tryb Pracy przed zakończeniem tej tranzakcji? <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Tak"/> </notification> <notification name="ConfirmEmptyLostAndFound"> - Na pewno chcesz permanentnie usunąć zawartość Twojego foldera Zgubione i Znalezione? - <usetemplate ignoretext="Usuwając szafę z Twojego foldera Zgubione i Znalezione" name="okcancelignore" notext="Nie" yestext="Tak"/> + Na pewno chcesz permanentnie usunąć zawartość Twojego foldera Zgubione i Odnalezione? + <usetemplate ignoretext="Potwierdź przed usunięciem zawartości foldera Zagubione i Odnalezione" name="okcancelignore" notext="Nie" yestext="Tak"/> </notification> <notification name="CopySLURL"> - Następujący link SLurl został skopiowany do pamięci podręcznej: + Następujący link SLURL został skopiowany do schowka: [SLURL] -Zamieść go na stronie Internetowej żeby umożliwić innym łatwy dostęp do tego miejsca, albo wklej go do panela adresu Twojej przeglądarki żeby go wypróbować. +Zamieść go na stronie internetowej żeby umożliwić innym łatwy dostęp do tego miejsca, albo wklej go do panela adresu Twojej przeglądarki żeby go otworzyć. <form name="form"> - <ignore name="ignore" text="Kopiując SLurl do pamięci podręcznej"/> + <ignore name="ignore" text="SLurl skopiowany do schowka"/> </form> </notification> - <notification name="GraphicsPreferencesHelp"> - Ten panel kontroluje wymiary i rozdzielczość okna oraz jakość grafiki klienta. Panel Ustawienia > Grafika pozwala na wybór jednego z czterech poziomów jakości grafiki: Niska, Średnia, Wysoka i Super. Możesz również dostosować grafikę do własnych potrzeb wybierając opcję Zaawansowane i zmieniając następujące ustawienia: - -Shadery: Opcja ta pozwala włączyć i wyłączyć różne rodzaje shaderów pikseli. - -Ustawienia Odbić: Określa rodzaje obiektów które mogą odbijać się w wodzie. - -Prezentacja Awatarów: Określa opcje mające wpływ na rysowanie awatarów przez klienta. - -Głębia Rysowania: Określa od jakiej odległości od pozycji kamery obiekty będą rysowane w tle. - -Liczba Cząsteczek: Określa maksymalną liczbę cząsteczek widocznych jednocześnie na ekranie. - -Jakość Post-Procesu: Określa rozdzielczość z jaką jest wyświetlana poświata. - -Szczegóły Meszu: Określa ilość szczegółów albo liczbę trójkątów używaną przy rysowaniu pewnych obiektów. Większa wartość zwalnia prędkość rysowania ale powoduje, że obiekty wyglądają bardziej szczgółowo. - -Ustawienia Światła: Określa jaki rodzaj światła jest używany do rysowania. - -Szczegóły Terenu: Określa ilość szczgółów widoczną w teksturach terenu. - </notification> <notification name="WLSavePresetAlert"> Chcesz zmienić zapisane ustawienia? <usetemplate name="okcancelbuttons" notext="Nie" yestext="Tak"/> @@ -2102,152 +1810,6 @@ Szczegóły Terenu: Określa ilość szczgółów widoczną w teksturach terenu. Efekt Post-Procesu już istnieje. Chcesz zapisać nowy na jego miejsce? <usetemplate name="okcancelbuttons" notext="Nie" yestext="Tak"/> </notification> - <notification name="HelpEditSky"> - Ustaw suwaki żeby stworzyć i zapisać zbiór nieb. - </notification> - <notification name="HelpEditDayCycle"> - Wybierz których nieb używać w przeciągu dnia. - </notification> - <notification name="EnvSettingsHelpButton"> - Te ustawienia zmieniają wygląd środowiska na Twoim komputerze. Twoja karta graficzna musi posiadać opcję shaderów atmosfery aby umożliwić dostęp do wszystkich ustawień. - -Ustaw suwak "Pora Dnia" żeby zmienić lokalną porę dnia w kliencie. - -Ustaw suwak "Chmury" żeby zmienić ilość chmur widoczną na niebie. - -Wybierz kolor w selekcji "Kolor Wody" żeby zmienić kolor wody. - -Ustaw suwak "Zamglenie" żeby zmienić gęstość zamglenia pod wodą. - -Kliknij "Używaj Czasu Regionu" żeby dostosowywać porę dnia do pory dnia w regionie. - -Kliknij "Zaawansowane Niebo" żeby wybrać bardziej szczegółowy edytor ustawień nieba. - -Kliknij "Zaawansowana Woda" żeby wybrać bardziej szczegółowy edytor ustawień wody. - </notification> - <notification name="HelpDayCycle"> - Edytor Cyklu Dnia pozwala na kontrolę nieba podczas cyklu dnia/nocy w [SECOND_LIFE]. Ten cykl jest używany przez suwak Pora Dnia w podstawowym Edytorze Środowiska. - -Edytor Cyklu Dnia ustala klatki odniesienia. Są to punkty (widoczne jako szare plamki na wykresie czasu) które mają przypisane Ustawienia Nieba. W miarę upływu czasu niebo jest animowane używając średnich pomiędzy klatkami odniesienia. - -Żółta strzałka powyżej linii czasu odpowiada biżącemu widokowi opartemu na Porze Dnia. Kliknij i przeciągnij strzałkę żeby zobaczyć animację w przeciągu dnia. Możesz dodawać i usuwać klatki odniesienia używająć przycisków Dodaj i Usuń po prawej stronie linii czasu. - -Długość Cyklu dyktuje całkowitą długość "dnia". Wybranie małej wartości (na przykład 2 min) oznacza, że Twoja 24-o godzinna linia czasu będzie animowana w całości w przeciągu dwóch minut czasu rzeczywistego! Po wybraniu odpowiednich ustawień linii czasu i klatek odniesienia użyj przycisków Start i Stop żeby zobaczyć rezultaty. Pamiętaj - zawsze możesz używać żółtej strzałki wskażnika czasu powyżej linii czasu żeby zmieniać animację dynamicznie. Użycie przycisku Używaj Czasu Regionu zsynchronizuje Twoją długość dnia i czas z cyklem Regionu. - -Po zdefiniowaniu Cyklu Dnia możesz zapisać i załadować ustawienia używając przycisków Zapisz Test Dnia i Załaduj Test Dnia. Uwaga, obecnie tylko jeden Cykl Dnia jest dozwolony. - </notification> - <notification name="HelpBlueHorizon"> - Ustaw suwaki Czerwony/Zielony/Niebieski (RGB) żeby zmienić kolor nieba. Możesz używać suwaka Intensywność (I) żeby zmieniać ustawienia suwaków wszystkich kolorów (RGB) jednocześnie. - </notification> - <notification name="HelpHazeHorizon"> - Horyzont Zamglenia jest jednym z ważniejszych parametrów kontrolujących oświetlenie sceny. Jest efektywnym do symulacji wielu ustawień oświetlenia takich jak rozbyski słońca i ciemniejsze ustawienia zamkniętej przesłony. - </notification> - <notification name="HelpBlueDensity"> - Gęstość Błękitu ma wpływ na nasycenie koloru nieba i mgły. Jeżeli przesuniesz suwak Intensywności (I) w prawo kolory będą jaśniejsze i żywsze. Jeżeli przesuniesz całkowicie w lewo kolory będą rozmywać się aż do przejścia w biel i czerń. Jeżeli chcesz precyzyjnie kontrolować balans koloru nieba możesz używać suwaków kolorów Czerwony/Zielony/Niebieski (RGB) w celu zmiany nasycenia indywidualnych składników. - </notification> - <notification name="HelpHazeDensity"> - Gęstość Zamglenia kontroluje zawartość mętnego, szarego zamglenia w atmosferze. Jest to przydatne do symulacji scen z dużą ilością dymu i zanieczyszczeń. -Oraz do symulacji mgły i zamgleń. - </notification> - <notification name="HelpDensityMult"> - Mnożnik Gęstości wpływa na gęstość atmosfery w całości. Niskie ustawienie sprawia wrażenie lekkiego powietrza, wyższe ustawienia tworzą bardzo ciężki, zamglony efekt. - </notification> - <notification name="HelpDistanceMult"> - Mnożnik Dystansu wpływa na postrzeganie dystansu. Wartość zero niweluje wpływ dystansu na wygląd terenu i obiektów. -Wartości większe od 1 symulują większy dystans tworząc silniejszy efekt atmosferyczny. - </notification> - <notification name="HelpMaxAltitude"> - Max Wysokość wpływa na obliczanie światła atmosferycznego. -O póżniejszych porach dnia ta wartość jest przydatna do regulacji percepcji dystansu zachodącego słońca. - </notification> - <notification name="HelpSunlightColor"> - Reguluje kolor i intensywność bezpośredniego światła w scenie. - </notification> - <notification name="HelpSunAmbient"> - Reguluje kolor i intensywność rozproszonego światła atmosferycznego w scenie. - </notification> - <notification name="HelpSunGlow"> - Suwak Rozmiar kontroluje wielkość słońca. -Suwak Ostrość kontroluje ostrość słońca na niebie. - </notification> - <notification name="HelpSceneGamma"> - Reguluje dystrybucję światła i cienia na ekranie. - </notification> - <notification name="HelpStarBrightness"> - Reguluje blask gwiazd na niebie. - </notification> - <notification name="HelpTimeOfDay"> - Kontroluje pozycję słońca na niebie. -Zbliżone do wysokości. - </notification> - <notification name="HelpEastAngle"> - Kontroluje pozycję słońca na niebie. -Zbliżone do azymutu. - </notification> - <notification name="HelpCloudColor"> - Kontroluje kolor chmur. Generalnie powinny być białawe, ale hej, pobaw się jeżeli masz ochotę. - </notification> - <notification name="HelpCloudDetail"> - Kontroluje szczegółowy obraz nałożony na górę głównego obrazu chmur. X i Y kontrolują jego pozycję. G (Gęstość) kontroluje jak puchate lub postrzępione są chmury. - </notification> - <notification name="HelpCloudDensity"> - Suwaki X i Y kontrolują pozycję chmur. -Suwak G (Gęstość) kontroluje gęstość chmur. - </notification> - <notification name="HelpCloudCoverage"> - Kontroluje ilość chmur pokrywających niebo. - </notification> - <notification name="HelpCloudScale"> - Kontroluje skalę obrazu chmur na kopule nieba. - </notification> - <notification name="HelpCloudScrollX"> - Kontroluje prędkość przemieszczania chmur wzdłuż osi X. - </notification> - <notification name="HelpCloudScrollY"> - Kontroluje prędkość przemieszczania chmur wzdłuż osi Y. - </notification> - <notification name="HelpClassicClouds"> - Wybierz tą opcję w celu używania dodatkowo starszej, klasycznej wersji chmur [SECOND_LIFE]. - </notification> - <notification name="HelpWaterFogColor"> - Kontroluje kolor podwodnej mgły. - </notification> - <notification name="HelpWaterFogDensity"> - Kontroluje gęstość mgły i głębie wizji pod wodą. - </notification> - <notification name="HelpUnderWaterFogMod"> - Modyfikuje wpływ wykładnika gęstości mgły na głębie wizji awatara pod wodą. - </notification> - <notification name="HelpWaterGlow"> - Kontroluje emisję światła z powierzchni wody. - </notification> - <notification name="HelpWaterNormalScale"> - Kontroluje skalę trzech zmarszczeń które tworzą wodę. - </notification> - <notification name="HelpWaterFresnelScale"> - Kontroluje jak dużo światła jest odbijane pod różnymi kątami. - </notification> - <notification name="HelpWaterFresnelOffset"> - Kontroluje jak dużo intensywności światła jest odbijane. - </notification> - <notification name="HelpWaterScaleAbove"> - Kontroluje jak dużo światła odbija się od górnej powierzchni wody. - </notification> - <notification name="HelpWaterScaleBelow"> - Kontroluje jak dużo światła odbija się od dolnej powierzchni wody. - </notification> - <notification name="HelpWaterBlurMultiplier"> - Kontroluje jak fale i odbicia są mieszane. - </notification> - <notification name="HelpWaterNormalMap"> - Kontroluje która mapa normalnych jest używana w wodzie do określania odbić/załamań. - </notification> - <notification name="HelpWaterWave1"> - Kontroluje gdzie i jak szybko duża wersja mapy normalnych przemieszcza się wzdłuż osi X i Y. - </notification> - <notification name="HelpWaterWave2"> - Kontroluje gdzie i jak szybko mała wersja mapy normalnych przemieszcza się wzdłuż osi X i Y. - </notification> <notification name="NewSkyPreset"> Nazwij nowe niebo. <form name="form"> @@ -2275,7 +1837,7 @@ Suwak G (Gęstość) kontroluje gęstość chmur. Ustawienie już istnieje! </notification> <notification name="WaterNoEditDefault"> - Domyśle ustawienie nie może być zmienione ani usunięte. + Domyślne ustawienie nie może być zmienione ani usunięte. </notification> <notification name="ChatterBoxSessionStartError"> Błąd podczas rozpoczynania czatu/IM z [RECIPIENT]. @@ -2293,8 +1855,7 @@ Suwak G (Gęstość) kontroluje gęstość chmur. <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="Cannot_Purchase_an_Attachment"> - Rzeczy nie mogą być kupione jeżeli - są częścią załącznika. + Rzeczy nie mogą być kupione jeżeli są częścią załącznika. </notification> <notification label="Prośba o Zgodę na Pobieranie L$" name="DebitPermissionDetails"> Akceptując tą prośbę wyrażasz zgodę na ciągłe pobieranie Lindenów (L$) z Twojego konta. Żeby cofnąć to pozwolenie właściciel obiektu będzie musiał usunąć ten obiekt albo zresetowć skrypty obieku. @@ -2302,27 +1863,25 @@ Suwak G (Gęstość) kontroluje gęstość chmur. </notification> <notification name="AutoWearNewClothing"> Czy chcesz automatycznie nosić ubranie które tworzysz? - <usetemplate ignoretext="Automatycznie noś nowe ubranie" name="okcancelignore" notext="Nie" yestext="Tak"/> + <usetemplate ignoretext="Załóż ubranie automatycznie będąc w trybie Edycji Wyglądu" name="okcancelignore" notext="Nie" yestext="Tak"/> </notification> <notification name="NotAgeVerified"> - Nie masz dostępu do tej posiadłości ze względu na brak weryfikacji Twojego wieku. -Czy chcesz odwiedzić stronę [SECOND_LIFE] żeby to zmienić? + Nie masz dostępu do tej posiadłości ze względu na brak weryfikacji Twojego wieku. Czy chcesz odwiedzić stronę [SECOND_LIFE] żeby to zmienić? [_URL] <url name="url" option="0"> https://secondlife.com/account/verification.php </url> - <usetemplate ignoretext="Ostrzegaj o braku weryfikacji wieku" name="okcancelignore" notext="Nie" yestext="Tak"/> + <usetemplate ignoretext="Brak weryfikacji wieku" name="okcancelignore" notext="Nie" yestext="Tak"/> </notification> <notification name="Cannot enter parcel: no payment info on file"> - Nie masz dostępu do tej posiadłości ze względu na brak danych o Twoim koncie. -Czy chcesz odwiedzić stronę [SECOND_LIFE] żeby to zmienić? + Nie masz dostępu do tej posiadłości ze względu na brak danych o Twoim koncie. Czy chcesz odwiedzić stronę [SECOND_LIFE] żeby to zmienić? [_URL] <url name="url" option="0"> https://secondlife.com/account/ </url> - <usetemplate ignoretext="Ostrzegaj o braku danych konta" name="okcancelignore" notext="Nie" yestext="Tak"/> + <usetemplate ignoretext="Brak danych o koncie" name="okcancelignore" notext="Nie" yestext="Tak"/> </notification> <notification name="MissingString"> Zdanie [STRING_NAME] nie znalezione w strings.xml @@ -2371,11 +1930,10 @@ Czy chcesz odwiedzić stronę [SECOND_LIFE] żeby to zmienić? Plik terrain.raw ściągniety. </notification> <notification name="GestureMissing"> - Gest [NAME] nie znaleziony w bazie danych. + Gesturka [NAME] nie znaleziony w bazie danych. </notification> <notification name="UnableToLoadGesture"> Ładowanie gestu [NAME] nie powiodło się. -Spróbuj jeszcze raz. </notification> <notification name="LandmarkMissing"> Miejsce (LM) nie znalezione w bazie danych. @@ -2444,7 +2002,7 @@ Wybierz jeden obiekt. Wyłączanie trybu boskiego, poziom [LEVEL] </notification> <notification name="CopyFailed"> - Kopiowanie się nie powiodło - nie masz pozwolenia + Nie masz praw do skopiowania wybranych obiektów. </notification> <notification name="InventoryAccepted"> Podarunek od Ciebie został przyjęty przez [NAME]. @@ -2462,12 +2020,14 @@ Wybierz jeden obiekt. Twoja wizytówka została odrzucona. </notification> <notification name="TeleportToLandmark"> - Jesteś w Głównym Regionie i możesz się stąd teleportować do innych miejsc jak '[NAME]' wybierając Moja Szafa w prawym dolnym rogu ekranu i wybierając folder Miejsca (LM). -Kliknij dwa razy na miejsce (LM) i wybierz Teleportuj żeby tam się przenieść. + Jesteś w Głównym Regionie i możesz się stąd teleportować do innych miejsc jak '[NAME]' wybierając Moja Szafa w prawym dolnym rogu ekranu +i wybierając folder Zapisane Miejsca (LM). +(Kliknij dwa razy na miejsce (LM) i wybierz 'Teleport' żeby tam się przenieść.) </notification> <notification name="TeleportToPerson"> - Jesteś w Głównym Regionie i możesz komunikować się z innymi Rezydentami jak '[NAME]' wybierając Moja Szafa w prawym dolnym rogu ekranu i wybierając folder Wizytówki. -Kliknij dwa razy na wizytówce, wybierz Wyślij IM i napisz wiadomość. + Możesz skontaktować się z Rezydentem '[NAME]' poprzez otworzenie panelu Ludzie po prawej stronie ekranu. +Wybierz Rezydenta z listy, następnie kliknij 'IM' na dole panelu. +(Możesz także kliknąć podwójnie na ich imię na liście, lub prawym przyciskiem i wybrać 'IM'). </notification> <notification name="CantSelectLandFromMultipleRegions"> Nie możesz przekraczać granic serwera wybierając obszar. @@ -2490,6 +2050,9 @@ Spróbuj wybrać mniejszy obszar. <notification name="SystemMessage"> [MESSAGE] </notification> + <notification name="PaymentRecived"> + [MESSAGE] + </notification> <notification name="EventNotification"> Zawiadomienie o Imprezie: @@ -2515,7 +2078,19 @@ Spróbuj wybrać mniejszy obszar. </notification> <notification name="NoQuickTime"> Wygląda na to, że QuickTime z Apple nie jest zainstalowany na Twoim komputerze. -Jeżeli chcesz odtwarzać media na tej posiadłości które używają QuickTime idź do http://www.apple.com/quicktime i zainstaluj odtwarzacz. +Jeżeli chcesz odtwarzać media na tej posiadłości które używają QuickTime idź do [http://www.apple.com/quicktime QuickTime site] i zainstaluj odtwarzacz. + </notification> + <notification name="NoPlugin"> + Nie znaleziono wtyczki mediów dla "[MIME_TYPE]" typu mime. Media tego typu będą niedostępne. + </notification> + <notification name="MediaPluginFailed"> + Następujące wtyczki mediów nie działają: + [PLUGIN] + +Zainstaluj proszę wtyczki ponownie lub skontaktuj się z dostawcą jeśli nadal problem będzie występował. + <form name="form"> + <ignore name="ignore" text="Wtyczka mediów nie działa"/> + </form> </notification> <notification name="OwnedObjectsReturned"> Twoje obiekty z wybranej posiadłości zostały zwrócone do Twojej Szafy. @@ -2524,7 +2099,7 @@ Jeżeli chcesz odtwarzać media na tej posiadłości które używają QuickTime Obiekty należące do [FIRST] [LAST] na wybranej posiadłości zostały zwrócone do szafy tej osoby. </notification> <notification name="OtherObjectsReturned2"> - Obiekty z wybranej posiadłości należącej do Rezydenta '[NAME]' zostały zwrócone do ich właściciela. + Obiekty z posiadłości należącej do Rezydenta'[NAME]' zostały zwrócone do właściciela. </notification> <notification name="GroupObjectsReturned"> Obiekty z wybranej posiadłości przypisane do grupy [GROUPNAME] zostały zwrócone do szafy ich właścicieli. @@ -2534,6 +2109,10 @@ Nieprzekazywalne obiekty przekazane grupie zostały usunięte. <notification name="UnOwnedObjectsReturned"> Obiekty z wybranej posiadłości które nie należą do Ciebie zostały zwrócone do ich właścicieli. </notification> + <notification name="ServerObjectMessage"> + Wiadomość od [NAME]: +<nolink>[MSG]</nolink> + </notification> <notification name="NotSafe"> Ta posiadłość pozwala na uszkodzenia. Możesz doznać tutaj urazu. Jeżeli zginiesz nastąpi teleportacja do Twojego miejsca startu. @@ -2543,15 +2122,13 @@ Możesz doznać tutaj urazu. Jeżeli zginiesz nastąpi teleportacja do Twojego m Nie możesz tutaj latać. </notification> <notification name="PushRestricted"> - Popychanie niedozwolone. -Nie możesz tutaj popychać innych, chyba, że jesteś właścicielem tej posiadłości. + Popychanie niedozwolone. Nie możesz tutaj popychać innych, chyba, że jesteś właścicielem tej posiadłości. </notification> <notification name="NoVoice"> Ta posiadłość nie pozwala na rozmowy. </notification> <notification name="NoBuild"> - Ta posiadłość nie pozwala na budowanie. -Nie możesz tworzyć tutaj obiektów. + Ta posiadłość nie pozwala na budowanie. Nie możesz tworzyć tutaj obiektów. </notification> <notification name="ScriptsStopped"> Administrator czasowo zatrzymał skrypty w tym regionie. @@ -2561,7 +2138,8 @@ Nie możesz tworzyć tutaj obiektów. </notification> <notification name="NoOutsideScripts"> Ta posiadłość nie pozwala na zewnętrzne skrypty. -Żadne skrypty nie będą tutaj działać za wyjątkiem skryptów zleżących do właściciela posiadłości. + +Żadne skrypty nie będą tutaj działać za wyjątkiem skryptów należących do właściciela posiadłości. </notification> <notification name="ClaimPublicLand"> Tylko publiczne posiadłości w tym regionie mogą być przejęte. @@ -2577,16 +2155,9 @@ Skorzystaj z [SECOND_LIFE]:Pomoc by uzyskać więcej informacji na temat dostęp <notification name="NoTeenGridAccess"> Twoje konto nie może zostać połączone z podanym regionem Teen Grid. </notification> - <notification name="NoHelpIslandTP"> - Brak możliwości ponownej teleportacji do Help Island. -Odwiedź 'Help Island Public' by powtórzyć szkolenie. - </notification> <notification name="ImproperPaymentStatus"> Nie posiadasz odpowiedniego statusu płatniczego by uzyskać dostęp do regionu. </notification> - <notification name="MustGetAgeRegion"> - By odwiedzić ten region, Twoje konto musi zostać poddane weryfikacji wieku. - </notification> <notification name="MustGetAgeParcel"> By móc przebywać na tej posiadłości wymagana jest weryfikacja Twojego wieku. </notification> @@ -2649,31 +2220,35 @@ Spróbuj ponowanie za kilka minut. Nieważana posiadłość. </notification> <notification name="ObjectGiveItem"> - Obiekt [OBJECTFROMNAME] należący do [FIRST] [LAST] dał Ci [OBJECTTYPE] [OBJECTNAME]. + Obiekt [OBJECTFROMNAME] należący do [NAME_SLURL] dał Ci [OBJECTTYPE]: +[ITEM_SLURL] <form name="form"> <button name="Keep" text="Zachowaj"/> <button name="Discard" text="Wyrzuć"/> - <button name="Mute" text="Wycisz"/> + <button name="Mute" text="Zablokuj"/> </form> </notification> <notification name="ObjectGiveItemUnknownUser"> - Obiekt [OBJECTFROMNAME] należący do (właściciel nieznany) dał Ci [OBJECTTYPE] [OBJECTNAME]. + Obiekt [OBJECTFROMNAME] należący (właściciel nieznany) dał Ci [OBJECTTYPE]: +[ITEM_SLURL] <form name="form"> <button name="Keep" text="Zachowaj"/> <button name="Discard" text="Wyrzuć"/> - <button name="Mute" text="Wycisz"/> + <button name="Mute" text="Zablokuj"/> </form> </notification> <notification name="UserGiveItem"> - [NAME] dał Ci [OBJECTTYPE] '[OBJECTNAME]'. + [NAME_SLURL] dał Ci [OBJECTTYPE]: +[ITEM_SLURL] <form name="form"> - <button name="Keep" text="Zachowaj"/> + <button name="Show" text="Pokaż"/> <button name="Discard" text="Wyrzuć"/> - <button name="Mute" text="Wycisz"/> + <button name="Mute" text="Zablokuj"/> </form> </notification> <notification name="GodMessage"> [NAME] + [MESSAGE] </notification> <notification name="JoinGroup"> @@ -2685,7 +2260,7 @@ Spróbuj ponowanie za kilka minut. </form> </notification> <notification name="TeleportOffered"> - [NAME] proponuje Ci teleportację do siebie: + [NAME] proponuje Ci teleportcję do siebie: [MESSAGE] <form name="form"> @@ -2693,6 +2268,9 @@ Spróbuj ponowanie za kilka minut. <button name="Cancel" text="Anuluj"/> </form> </notification> + <notification name="TeleportOfferSent"> + Oferta teleportacji wysłana do [TO_NAME] + </notification> <notification name="GotoURL"> [MESSAGE] [URL] @@ -2712,6 +2290,9 @@ Spróbuj ponowanie za kilka minut. <button name="Decline" text="Odmów"/> </form> </notification> + <notification name="FriendshipOffered"> + Oferta znajomości dla [TO_NAME] + </notification> <notification name="OfferFriendshipNoMessage"> [NAME] proponuje Ci znajomość. @@ -2727,9 +2308,15 @@ Spróbuj ponowanie za kilka minut. <notification name="FriendshipDeclined"> Twoja propozycja znajomości została odrzucona przez [NAME]. </notification> + <notification name="FriendshipAcceptedByMe"> + Propozycja znajomości została zaakceptowana. + </notification> + <notification name="FriendshipDeclinedByMe"> + Propozycja znajomości została odrzucona. + </notification> <notification name="OfferCallingCard"> - [FIRST] [LAST] daje Ci swoją wizytówkę. -Wizytówka w Twojej Szafie może być używana do komunikowania się (IM) z tym Rezydentem. + [FIRST] [LAST] daje Tobie swoją wizytówkę. +Wizytówka będzie znajdowała się w Szafie i umożliwi szybkie wysłanie IM do tego Rezydenta. <form name="form"> <button name="Accept" text="Zaakceptuj"/> <button name="Decline" text="Odmów"/> @@ -2740,7 +2327,7 @@ Wizytówka w Twojej Szafie może być używana do komunikowania się (IM) z tym Nastąpi wylogowanie jeżeli zostaniesz w tym regionie. </notification> <notification name="RegionRestartSeconds"> - Restart regionu za [MINUTES] sek. + Restart regionu za [SECONDS] sec. Nastąpi wylogowanie jeżeli zostaniesz w tym regionie. </notification> <notification name="LoadWebPage"> @@ -2761,7 +2348,7 @@ Obiekt: [OBJECTNAME], właściciel: [NAME]? [TYPE] [DESC] - nie znaleziono w bazie danych. </notification> <notification name="InvalidWearable"> - Obiekt, który chcesz założyć używa narzędzia nieobecnego w wersji klienta, którą używasz. By go założyć ściągnij najnowszą wersję klienta [APP_NAME]. + Obiekt, który chcesz założyć używa narzędzia nieobecnego w wersji klienta, którą używasz. By go założyć ściągnij najnowszą wersję [APP_NAME]. </notification> <notification name="ScriptQuestion"> '[OBJECTNAME]', właściciel: '[NAME]', chciał by: @@ -2771,14 +2358,14 @@ Zgadzasz się? <form name="form"> <button name="Yes" text="Tak"/> <button name="No" text="Nie"/> - <button name="Mute" text="Wycisz"/> + <button name="Mute" text="Zablokuj"/> </form> </notification> <notification name="ScriptQuestionCaution"> - '[OBJECTNAME]', właściciel: '[NAME]', chciał by: + Obiekt '[OBJECTNAME]', należący do '[NAME]' proponuje Ci: [QUESTIONS] -Jeżeli nie ufasz temu obiektowi lub jego twórcy - odmów. Wybierz Szczegóły żeby otrzymać więcej informacji. +Jeżeli nie znasz tego obiektu lub kreatora, odmów. Zgadzasz się? <form name="form"> @@ -2801,39 +2388,12 @@ Zgadzasz się? <button name="Ignore" text="Zignoruj"/> </form> </notification> - <notification name="FirstBalanceIncrease"> - Przekazano Ci [AMOUNT]L$. -Obiekty i inni użytkownicy mogą Ci dawać L$. -Twój balans jest wyświetlony w prawym górnym rogu ekranu. - </notification> - <notification name="FirstBalanceDecrease"> - Pobrano od Ciebie [AMOUNT]L$. -Twój balans jest wyświetlony w prawym górnym rogu ekranu. - </notification> - <notification name="FirstSit"> - Siedzisz. -Używaj strzałek (albo AWSD) żeby zmieniać widok. -Naciśnij przycisk Wstań żeby sie podnieść. - </notification> - <notification name="FirstMap"> - Kliknij i przeciągnij by przsuwać mapę. -Kliknij dwa razy żeby się teleportować. -Używaj narzędzi po prawej stronie żeby znajdować i wyświetlać różne obiekty. - </notification> - <notification name="FirstBuild"> - Możesz budować nowe obiekty w niektórych miejscach. -Używaj narzędzi w lewym górnym rogu żeby budować, przyciskaj Ctrl lub Alt żeby szybko zmieniać narzędzia. -Naciśnij Esc żeby skończyć budować. - </notification> - <notification name="FirstLeftClickNoHit"> - Lewy klik żeby używać specjalnych obiektów. -Jeżeli strzałka zmieni się na rączkę możesz używać tego obiektu. -Prawy klik zawsze pokazuje menu dostępnych operacji. - </notification> - <notification name="FirstTeleport"> - Nastąpiła teleportacja. -Jesteś przy Infohub najbliższej Twojego celu. -Twój cel jest zaznaczony wysokim czerwonym wskaźnikiem. + <notification name="BuyLindenDollarSuccess"> + Dziękujemy za wpłatę! + +Twój stan konta L$ zostanie zaktualizowany w momencie zakończenia transakcji. Jeżeli w ciągu 20 minut, Twój balans konta nie ulegnie zmianie, transakcja została anulowana. W tym przypadku, pobrana kwota zostanie zwrócona na stan konta w US$. + +Status transkacji możesz sprawdzić odwiedzając Historię Transakcji swojego konta na [http://secondlife.com/account/ Dashboard] </notification> <notification name="FirstOverrideKeys"> Twoje sterujące klawisze zostały przejęte przez obiekt. @@ -2841,41 +2401,10 @@ Użyj strzałek lub AWSD żeby sprawdzić ich działanie. Niektóre obiekty (np broń) wymagają trybu panoramicznego. Nacisnij 'M' żeby go wybrać. </notification> - <notification name="FirstAppearance"> - Edytujesz swój wygląd. -Używaj strzałek do obracania i zbliżenia. -Po skończeniu wybierz 'Zapisz Zmiany' -żeby zapisać Twój wygląd i wyjść. -Możesz edytować wygląd jak często chcesz. - </notification> - <notification name="FirstInventory"> - To jest Twoja Szafa, który zawiera obikty, notki, ubrania i inne Twoje rzeczy. -* Żeby założyć obiekt lub strój (folder) przeciągnij go na siebie. -* Żeby przenieść obiekt do świata przeciągnij go na grunt. -* Żeby przeczytać notkę kliknij na niej dwa razy. - </notification> <notification name="FirstSandbox"> Ten region to piaskownica. -Obiekty które tu zbudujesz mogą zostać usunięte jak opuścisz ten obszar - piaskownice są regularnie czyszczone, sprawdź informacje na górze ekranu obok nazwy regionu. -Piaskownice spotyka się rzadko i są zawsze oznakowane. - </notification> - <notification name="FirstFlexible"> - To jest elastyczny obiekt. -Obiekty elastyczne nie mogą być fizyczne i muszą być typu fantom. - </notification> - <notification name="FirstDebugMenus"> - Zaawansowane menu zostało włączone. -To menu zawiera funkcje użyteczne dla programistów analizujących [SECOND_LIFE]. -To menu jest aktywowane dzięki kombinacji klawiszy Ctrl+Alt+D (Windows) lub ⌥⌘D (Mac). - </notification> - <notification name="FirstSculptedPrim"> - Edytujesz sculpt. -Skulpty wymagają specjalnych tekstur które definiują ich kształt. -Przykłady tekstur znajdują się w bibliotece szafy. - </notification> - <notification name="FirstMedia"> - Odtwarzasz media. Możesz wybrać automatyczne odtwarzanie w Ustawieniach pod Audio i Video. Odtwarzanie mediów w miejscach którym nie ufasz może być niebezpieczne. +Obiekty które tu zbudujesz mogą zostać usunięte jak opuścisz ten obszar - piaskownice są regularnie czyszczone, sprawdź informacje na górze ekranu obok nazwy regionu. </notification> <notification name="MaxListSelectMessage"> Maksymalnie możesz wybrać [MAX_SELECT] rzeczy @@ -2884,50 +2413,47 @@ z tej listy. <notification name="VoiceInviteP2P"> [NAME] zaprasza Cię do rozmowy głosem. Wybierz Zaakceptuj żeby rozmawiać albo Odmów żeby nie przyjąć zaproszenia. -Wybierz Wycisz żeby wyciszyć dzwoniącą osobę. +Wybierz Zablokuj żeby wyciszyć dzwoniącą osób <form name="form"> <button name="Accept" text="Zaakceptuj"/> <button name="Decline" text="Odmów"/> - <button name="Mute" text="Wycisz"/> + <button name="Mute" text="Zablokuj"/> </form> </notification> <notification name="AutoUnmuteByIM"> - Wiadomość (IM) została wysłana do [FIRST] [LAST] i wyciszenie zostało automatycznie usunięte. + Wiadomość (IM) została wysłana do [FIRST] [LAST] i blokada została automatycznie usunięta. </notification> <notification name="AutoUnmuteByMoney"> - Pieniądze zostały przekazane do [FIRST] [LAST] i wyciszenie zostało automatycznie usunięte. + Pieniądze zostały przekazane do [FIRST] [LAST] i blokada została automatycznie usunięta. </notification> <notification name="AutoUnmuteByInventory"> - Oferta z szafy dla [FIRST] [LAST] automatycznie usunęła wyciszenie. + Oferta z szafy dla [FIRST] [LAST] i blokada została automatycznie usunięta. </notification> <notification name="VoiceInviteGroup"> [NAME] zaczyna rozmowę z grupą [GROUP]. -Wybierz Zaakceptuj żeby rozmawiać albo Odmów żeby nie przyjąć zaproszenia. -Wybierz Wycisz żeby wyciszyć dzwoniącą osobę. +Wybierz Zaakceptuj żeby rozmawiać albo Odmów żeby nie przyjąć zaproszenia. Wybierz Zablokuj żeby wyciszyć dzwoniącą osobę. <form name="form"> <button name="Accept" text="Zaakceptuj"/> <button name="Decline" text="Odmów"/> - <button name="Mute" text="Wycisz"/> + <button name="Mute" text="Zablokuj"/> </form> </notification> <notification name="VoiceInviteAdHoc"> [NAME] zaczyna konferencję głosem. -Wybierz Zaakceptuj żeby rozmawiać albo Odmów żeby nie przyjąć zaproszenia. -Wybierz Wycisz żeby wyciszyć dzwoniącą osobę. +Wybierz Zaakceptuj żeby rozmawiać albo Odmów żeby nie przyjąć zaproszenia. Wybierz Zablokuj żeby wyciszyć dzwoniącą osobę. <form name="form"> <button name="Accept" text="Zaakceptuj"/> <button name="Decline" text="Odmów"/> - <button name="Mute" text="Wycisz"/> + <button name="Mute" text="Zablokuj"/> </form> </notification> <notification name="InviteAdHoc"> [NAME] zaprasza Cię do konferencji poprzez Czat/IM. -Wybierz Zaakceptuj żeby zacząć czat albo Odmów żeby nie przyjąć zaproszenia. -Wybierz Wycisz żeby wyciszyć tą osobę. +Wybierz Zaakceptuj żeby zacząć czat albo Odmów żeby nie przyjąć zaproszenia. Wybierz Zablokuj żeby wyciszyć tą osobę. <form name="form"> <button name="Accept" text="Zaakceptuj"/> <button name="Decline" text="Odmów"/> - <button name="Mute" text="Wycisz"/> + <button name="Mute" text="Block"/> </form> </notification> <notification name="VoiceChannelFull"> @@ -2970,10 +2496,54 @@ Wybierz Wycisz żeby wyciszyć tą osobę. Błąd podczas łączenia z rozmową [VOICE_CHANNEL_NAME]. Spróbuj póżniej. </notification> <notification name="ServerVersionChanged"> - Ten region używa innej wersji symulatora. Kliknij na tą wiadomość żeby uzyskać więcej informacji. + Ten region używa innej wersji symulatora. Kliknij na tą wiadomość żeby uzyskać więcej informacji: [[URL] View the release notes.] + </notification> + <notification name="UnsupportedCommandSLURL"> + Nie można otworzyć wybranego SLurl. </notification> - <notification name="UnableToOpenCommandURL"> - Wybrany link nie daje się otworzyć z tej przeglądarki. + <notification name="BlockedSLURL"> + SLurl został otrzymany z niesprawdzonej przeglądarki i został zablokowany dla bezpieczeństwa. + </notification> + <notification name="ThrottledSLURL"> + Wiele SLurlów zostało otrzymanych w krótkim czasie od niesprawdzonej przeglądarki. +Zostaną zablokowane na kilka sekund dla bezpieczeństwa. + </notification> + <notification name="IMToast"> + [MESSAGE] + <form name="form"> + <button name="respondbutton" text="Odpowiedź"/> + </form> + </notification> + <notification name="ConfirmCloseAll"> + Czy chcesz zamknąć wszystkie wiadomości IM? + <usetemplate ignoretext="Potwierdź, przed zamknięciem wszystkich wiadomości prywatnych (IM)." name="okcancelignore" notext="Anuluj" yestext="OK"/> + </notification> + <notification name="AttachmentSaved"> + Załącznik został zapisany. + </notification> + <notification name="UnableToFindHelpTopic"> + Nie można znależć tematu pomocy dla tego elementu. + </notification> + <notification name="ObjectMediaFailure"> + Błąd serwera: aktualizacja mediów nie powiodła się. +'[ERROR]' + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="TextChatIsMutedByModerator"> + Twój czat został wyciszony przez moderatora. + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="VoiceIsMutedByModerator"> + Twoja rozmowa głosowa została wyciszona przez moderatora. + <usetemplate name="okbutton" yestext="OK"/> + </notification> + <notification name="ConfirmClearTeleportHistory"> + Czy na pewno chcesz usunąć historię teleportacji? + <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/> + </notification> + <notification name="BottomTrayButtonCanNotBeShown"> + Wybrany przycisk nie może zostać wyświetlony w tej chwili. +Przycisk zostanie wyświetlony w przypadku dostatecznej ilości przestrzeni. </notification> <global name="UnsupportedCPU"> - Prędkość Twojego CPU nie spełnia minimalnych wymagań. @@ -2981,7 +2551,7 @@ Wybierz Wycisz żeby wyciszyć tą osobę. <global name="UnsupportedGLRequirements"> Wygląda na to, że Twój system nie spełnia wymagań sprzętowych [APP_NAME]. [APP_NAME] wymaga karty graficznej kompatybilnej z OpenGL z multiteksturami. Jeżeli masz taką kartę zainstaluj najnowsze sterowniki do niej i uaktualnienia systemu operacyjnego. -Jeżeli wciąż masz problemy sprawdź: http://www.secondlife.com/support +Jeżeli wciąż masz problemy sprawdź: [SUPPORT_SITE]. </global> <global name="UnsupportedCPUAmount"> 796 @@ -2995,10 +2565,8 @@ Jeżeli wciąż masz problemy sprawdź: http://www.secondlife.com/support <global name="UnsupportedRAM"> - Pamięć Twojego systemu nie spełnia minimalnych wymagań. </global> - <global name="PermYes"> - Tak - </global> - <global name="PermNo"> - Nie + <global name="You can only set your 'Home Location' on your land or at a mainland Infohub."> + Jeśli jesteś właścicielem posiadłości, możesz ustawić na niej miejsce startu. +W innym przypadku możesz poszukać na mapie miejsca oznaczone jako "Infohub". </global> </notifications> diff --git a/indra/newview/skins/default/xui/pl/panel_active_object_row.xml b/indra/newview/skins/default/xui/pl/panel_active_object_row.xml new file mode 100644 index 0000000000..57dc8a3dd7 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_active_object_row.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="panel_activeim_row"> + <string name="unknown_obj"> + Nieznany Obiekt + </string> + <text name="object_name"> + Nienazwany Obiekt + </text> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/pl/panel_adhoc_control_panel.xml new file mode 100644 index 0000000000..6cd47c6ce7 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_adhoc_control_panel.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="panel_im_control_panel"> + <layout_stack name="vertical_stack"> + <layout_panel name="call_btn_panel"> + <button label="Dzwoń" name="call_btn"/> + </layout_panel> + <layout_panel name="end_call_btn_panel"> + <button label="Zakończ Rozmowe" name="end_call_btn"/> + </layout_panel> + <layout_panel name="voice_ctrls_btn_panel"> + <button label="Przełączniki Głosu" name="voice_ctrls_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_audio_device.xml b/indra/newview/skins/default/xui/pl/panel_audio_device.xml index fc3b3776f0..fa8dde77eb 100644 --- a/indra/newview/skins/default/xui/pl/panel_audio_device.xml +++ b/indra/newview/skins/default/xui/pl/panel_audio_device.xml @@ -13,7 +13,7 @@ Poziom Wejścia </text> <text_editor name="voice_intro_text1"> - Użyj suwaka by dostosować jak głośno Cię słychać dla innych Rezydentów. By przetestować poziom wejścia, zacznij mówić do mikrofonu. + Użyj suwaka by dostosować jak głośno Cię słychać dla innych Rezydentów. W celu przetestowania poziomu wejścia, zacznij mówić do mikrofonu. </text_editor> <volume_slider name="mic_volume_slider" tool_tip="By zmienić poziom głośności użyj suwaka" /> diff --git a/indra/newview/skins/default/xui/pl/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/pl/panel_avatar_list_item.xml index 5c362ab772..917610d3e9 100644 --- a/indra/newview/skins/default/xui/pl/panel_avatar_list_item.xml +++ b/indra/newview/skins/default/xui/pl/panel_avatar_list_item.xml @@ -22,4 +22,5 @@ [COUNT]lat </string> <text name="avatar_name" value="Nieznane"/> + <button name="profile_btn" tool_tip="Zobacz profil"/> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/pl/panel_block_list_sidetray.xml index d7fcb8c966..122d834bdd 100644 --- a/indra/newview/skins/default/xui/pl/panel_block_list_sidetray.xml +++ b/indra/newview/skins/default/xui/pl/panel_block_list_sidetray.xml @@ -3,8 +3,8 @@ <text name="title_text"> Lista Blokad </text> - <scroll_list name="blocked" tool_tip="Lista zablokowanych obecnie rezydentów"/> - <button label="Zablokuj Rezydenta..." label_selected="Zablokuj Rezydenta..." name="Block resident..." tool_tip="Wybierz rezydenta, którego chcesz zablokować"/> + <scroll_list name="blocked" tool_tip="Lista Zablokowanych Osób"/> + <button label="Zablokuj Rezydenta..." label_selected="Zablokuj Rezydenta..." name="Block resident..." tool_tip="Wybierz Rezydenta aby zablokować"/> <button label="Zablokuj obiekt według nazwy..." label_selected="Zablokuj obiekt według nazwy..." name="Block object by name..."/> - <button label="Odblokuj" label_selected="Odblokuj" name="Unblock" tool_tip="Usuń rezydenta lub obiekt z listy blokad"/> + <button label="Odblokuj" label_selected="Odblokuj" name="Unblock" tool_tip="Usuń Rezydenta lub Obiekt z Listy Zablokowanych"/> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_bottomtray.xml b/indra/newview/skins/default/xui/pl/panel_bottomtray.xml new file mode 100644 index 0000000000..e21d8a077d --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_bottomtray.xml @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="bottom_tray"> + <string name="SpeakBtnToolTip"> + Włącza/Wyłącza mikrofon + </string> + <string name="VoiceControlBtnToolTip"> + Pokazuje/Ukrywa panel kontroli głosu + </string> + <layout_stack name="toolbar_stack"> + <layout_panel name="speak_panel"> + <talk_button name="talk"> + <speak_button label="Mów" label_selected="Mów" name="speak_btn"/> + </talk_button> + </layout_panel> + <layout_panel name="gesture_panel"> + <gesture_combo_list label="Gestury" name="Gesture" tool_tip="Pokazuje/Ukrywa gestury"/> + </layout_panel> + <layout_panel name="movement_panel"> + <button label="Ruch" name="movement_btn" tool_tip="Pokaż/Ukryj Ustawienia Ruchu"/> + </layout_panel> + <layout_panel name="cam_panel"> + <button label="Widok" name="camera_btn" tool_tip="Pokaż/Ukryj Ustawienia Kamery"/> + </layout_panel> + <layout_panel name="snapshot_panel"> + <button label="" name="snapshots" tool_tip="Zrób Zdjęcie"/> + </layout_panel> + <layout_panel name="im_well_panel"> + <chiclet_im_well name="im_well"> + <button name="Unread IM messages" tool_tip="Rozmowy"/> + </chiclet_im_well> + </layout_panel> + <layout_panel name="notification_well_panel"> + <chiclet_notification name="notification_well"> + <button name="Unread" tool_tip="Ogłoszenia"/> + </chiclet_notification> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_bottomtray_lite.xml b/indra/newview/skins/default/xui/pl/panel_bottomtray_lite.xml new file mode 100644 index 0000000000..77d2e86b7e --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_bottomtray_lite.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="bottom_tray_lite"> + <layout_stack name="toolbar_stack_lite"> + <layout_panel name="gesture_panel"> + <gesture_combo_list label="Gest" name="Gest" tool_tip="Pokaż/ukryj gestury"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_classified_info.xml b/indra/newview/skins/default/xui/pl/panel_classified_info.xml new file mode 100644 index 0000000000..0b275d6dcf --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_classified_info.xml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="panel_classified_info"> + <panel.string name="l$_price"> + L$[PRICE] + </panel.string> + <panel.string name="click_through_text_fmt"> + [TELEPORT] teleport, [MAP] map, [PROFILE] profile + </panel.string> + <panel.string name="date_fmt"> + [mthnum,datetime,slt]/[day,datetime,slt]/[year,datetime,slt] + </panel.string> + <panel.string name="auto_renew_on"> + Aktywne + </panel.string> + <panel.string name="auto_renew_off"> + Wyłączone + </panel.string> + <text name="title" value="Reklama"/> + <scroll_container name="profile_scroll"> + <panel name="scroll_content_panel"> + <text_editor name="classified_name" value="[name]"/> + <text name="classified_location_label" value="Miejsce:"/> + <text_editor name="classified_location" value="[loading...]"/> + <text name="content_type_label" value="Rodzaj Zawartości:"/> + <text_editor name="content_type" value="[content type]"/> + <text name="category_label" value="Kategoria:"/> + <text_editor name="category" value="[category]"/> + <text name="creation_date_label" value="Data stworzenia:"/> + <text_editor name="creation_date" tool_tip="Data stworzenia" value="[date]"/> + <text name="price_for_listing_label" value="Cena za wyświetlenie:"/> + <text_editor name="price_for_listing" tool_tip="Cena za umieszczenie reklamy." value="[price]"/> + <layout_stack name="descr_stack"> + <layout_panel name="clickthrough_layout_panel"> + <text name="click_through_label" value="Kliknięcia:"/> + <text_editor name="click_through_text" tool_tip="Kliknij według daty" value="[clicks]"/> + </layout_panel> + <layout_panel name="price_layout_panel"> + <text name="auto_renew_label" value="Automatyczne przedłużenie:"/> + <text name="auto_renew" value="Aktywne"/> + </layout_panel> + <layout_panel name="descr_layout_panel"> + <text name="classified_desc_label" value="Opis:"/> + <text_editor name="classified_desc" value="[description]"/> + </layout_panel> + </layout_stack> + </panel> + </scroll_container> + <panel name="buttons"> + <button label="Teleportuj" name="teleport_btn"/> + <button label="Mapa" name="show_on_map_btn"/> + <button label="Edytuj" name="edit_btn"/> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_edit_alpha.xml b/indra/newview/skins/default/xui/pl/panel_edit_alpha.xml new file mode 100644 index 0000000000..ac2739633e --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_edit_alpha.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="edit_alpha_panel"> + <panel name="avatar_alpha_color_panel"> + <texture_picker label="Alpha Dolnej Części Ciała" name="Lower Alpha" tool_tip="Kliknij aby wybrać teksturę"/> + <texture_picker label="Alpha Górnej Części Ciała" name="Upper Alpha" tool_tip="Kliknij aby wybrać teksturę"/> + <texture_picker label="Alpha Głowy" name="Head Alpha" tool_tip="Kliknij aby wybrać teksturę"/> + <texture_picker label="Alpha Oka" name="Eye Alpha" tool_tip="Kliknij aby wybrać teksturę"/> + <texture_picker label="Alpha Włosów" name="Hair Alpha" tool_tip="Kliknij aby wybrać teksturę"/> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_edit_classified.xml b/indra/newview/skins/default/xui/pl/panel_edit_classified.xml new file mode 100644 index 0000000000..6395d5c59a --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_edit_classified.xml @@ -0,0 +1,48 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Edytuj Reklamę" name="panel_edit_classified"> + <panel.string name="location_notice"> + (zostanie zaktualizowane po zapisaniu) + </panel.string> + <string name="publish_label"> + Publikuj + </string> + <string name="save_label"> + Zapisz + </string> + <text name="title"> + Edytuj Reklamę + </text> + <scroll_container name="profile_scroll"> + <panel name="scroll_content_panel"> + <panel name="snapshot_panel"> + <icon label="" name="edit_icon" tool_tip="Kliknij by wybrać teksturę"/> + </panel> + <text name="Name:"> + Tytuł: + </text> + <text name="description_label"> + Opis: + </text> + <text name="location_label"> + Lokalizacja: + </text> + <text name="classified_location"> + ładowanie... + </text> + <button label="Ustaw na bieżącą lokalizację" name="set_to_curr_location_btn"/> + <text name="category_label" value="Kategoria:"/> + <text name="content_type_label" value="Typ Zawartości:"/> + <icons_combo_box label="Treść Ogólna" name="content_type"> + <icons_combo_box.item label="Moderuj Treść" name="mature_ci" value="Mature"/> + <icons_combo_box.item label="Treść Ogólna" name="pg_ci" value="PG"/> + </icons_combo_box> + <text name="price_for_listing_label" value="Cena za wyświetlenie:"/> + <spinner label="L$" name="price_for_listing" tool_tip="Cena za umieszczenie reklamy." value="50"/> + <check_box label="Ponawiaj automatycznie co tydzień." name="auto_renew"/> + </panel> + </scroll_container> + <panel label="bottom_panel" name="bottom_panel"> + <button label="[LABEL]" name="save_changes_btn"/> + <button label="Anuluj" name="cancel_btn"/> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_edit_eyes.xml b/indra/newview/skins/default/xui/pl/panel_edit_eyes.xml new file mode 100644 index 0000000000..5e7a3a8fa0 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_edit_eyes.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="edit_eyes_panel"> + <panel name="avatar_eye_color_panel"> + <texture_picker label="Iris" name="Iris" tool_tip="Kliknij aby wybrać teksturę"/> + </panel> + <accordion name="wearable_accordion"> + <accordion_tab name="eyes_main_tab" title="Oczy"/> + </accordion> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_edit_gloves.xml b/indra/newview/skins/default/xui/pl/panel_edit_gloves.xml new file mode 100644 index 0000000000..8b16506d9c --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_edit_gloves.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="edit_gloves_panel"> + <panel name="avatar_gloves_color_panel"> + <texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij aby wybrać teksturę"/> + <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać teksturę"/> + </panel> + <accordion name="wearable_accordion"> + <accordion_tab name="gloves_main_tab" title="Rękawiczki"/> + </accordion> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_edit_hair.xml b/indra/newview/skins/default/xui/pl/panel_edit_hair.xml new file mode 100644 index 0000000000..567ff10506 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_edit_hair.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="edit_hair_panel"> + <panel name="avatar_hair_color_panel"> + <texture_picker label="Tekstura" name="Texture" tool_tip="Kliknij aby wybrać teksturę"/> + </panel> + <accordion name="wearable_accordion"> + <accordion_tab name="hair_color_tab" title="Kolor"/> + <accordion_tab name="hair_style_tab" title="Styl"/> + <accordion_tab name="hair_eyebrows_tab" title="Brwi"/> + <accordion_tab name="hair_facial_tab" title="Twarzy"/> + </accordion> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_edit_jacket.xml b/indra/newview/skins/default/xui/pl/panel_edit_jacket.xml new file mode 100644 index 0000000000..f4ea9303aa --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_edit_jacket.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="edit_jacket_panel"> + <panel name="avatar_jacket_color_panel"> + <texture_picker label="Górny materiał" name="Upper Fabric" tool_tip="Kliknij aby wybrać teksturę"/> + <texture_picker label="Dolny materiał" name="Lower Fabric" tool_tip="Kliknij aby wybrać teksturę"/> + <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/> + </panel> + <accordion name="wearable_accordion"> + <accordion_tab name="jacket_main_tab" title="Kurtka"/> + </accordion> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_edit_pants.xml b/indra/newview/skins/default/xui/pl/panel_edit_pants.xml new file mode 100644 index 0000000000..247d63c5a3 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_edit_pants.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="edit_pants_panel"> + <panel name="avatar_pants_color_panel"> + <texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij aby wybrać teksturę"/> + <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/> + </panel> + <accordion name="wearable_accordion"> + <accordion_tab name="pants_main_tab" title="Spodnie"/> + </accordion> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_edit_pick.xml b/indra/newview/skins/default/xui/pl/panel_edit_pick.xml new file mode 100644 index 0000000000..22fb00671d --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_edit_pick.xml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Edytuj Ulubione" name="panel_edit_pick"> + <panel.string name="location_notice"> + (aktualizacja nastąpi po zapisaniu) + </panel.string> + <text name="title"> + Edytuj Ulubione + </text> + <scroll_container name="profile_scroll"> + <panel name="scroll_content_panel"> + <icon label="" name="edit_icon" tool_tip="Kliknij aby wybrać teksturę"/> + <text name="Name:"> + Tytuł: + </text> + <text name="description_label"> + Opis: + </text> + <text name="location_label"> + Lokalizacja: + </text> + <text name="pick_location"> + ładowanie... + </text> + <button label="Ustaw na bieżąca lokalizację" name="set_to_curr_location_btn"/> + </panel> + </scroll_container> + <panel label="bottom_panel" name="bottom_panel"> + <button label="Zapisz obrazek" name="save_changes_btn"/> + <button label="Anuluj" name="cancel_btn"/> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_edit_profile.xml b/indra/newview/skins/default/xui/pl/panel_edit_profile.xml index 97fa3118f8..edd7415751 100644 --- a/indra/newview/skins/default/xui/pl/panel_edit_profile.xml +++ b/indra/newview/skins/default/xui/pl/panel_edit_profile.xml @@ -1,45 +1,51 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel name="edit_profile_panel"> - <string name="CaptionTextAcctInfo"> - [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION] - </string> - <string name="AcctTypeResident" - value="Rezydent" /> - <string name="AcctTypeTrial" - value="Próbne" /> - <string name="AcctTypeCharterMember" - value="Członek-zalożyciel" /> - <string name="AcctTypeEmployee" - value="Pracownik Linden Lab" /> - <string name="PaymentInfoUsed" - value="Dane Konta Używane" /> - <string name="PaymentInfoOnFile" - value="Dane Konta Dostępne" /> - <string name="NoPaymentInfoOnFile" - value="Brak Danych Konta" /> - <string name="AgeVerified" - value="Wiek Zweryfikowany" /> - <string name="NotAgeVerified" - value="Brak Weryfikacji Wieku" /> - <string name="partner_edit_link_url"> - http://www.secondlife.com/account/partners.php?lang=pl - </string> - <panel name="scroll_content_panel"> - <panel name="data_panel" > - <panel name="lifes_images_panel"> - <panel name="second_life_image_panel"> - <text name="second_life_photo_title_text"> - [SECOND_LIFE]: - </text> - </panel> - </panel> - <text name="title_partner_text" value="Partner:"/> - <panel name="partner_data_panel"> - <text name="partner_text" value="[FIRST] [LAST]"/> - </panel> - <text name="text_box3"> - Pracuś Mówi: - </text> - </panel> - </panel> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Edycja profilu" name="edit_profile_panel"> + <string name="CaptionTextAcctInfo"> + [ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION] + </string> + <string name="RegisterDateFormat"> + [REG_DATE] ([AGE]) + </string> + <string name="AcctTypeResident" value="Rezydent"/> + <string name="AcctTypeTrial" value="Próbne"/> + <string name="AcctTypeCharterMember" value="Członek-zalożyciel"/> + <string name="AcctTypeEmployee" value="Pracownik Linden Lab"/> + <string name="PaymentInfoUsed" value="Dane konta używane"/> + <string name="PaymentInfoOnFile" value="Dane konta dostępne"/> + <string name="NoPaymentInfoOnFile" value="Brak danych konta"/> + <string name="AgeVerified" value="Wiek zweryfikowany"/> + <string name="NotAgeVerified" value="Brak weryfikacji wieku"/> + <string name="partner_edit_link_url"> + http://www.secondlife.com/account/partners.php?lang=pl + </string> + <string name="no_partner_text" value="Żadne"/> + <scroll_container name="profile_scroll"> + <panel name="scroll_content_panel"> + <panel name="data_panel"> + <panel name="lifes_images_panel"> + <icon label="" name="2nd_life_edit_icon" tool_tip="Kliknij aby wybrać teksturę"/> + </panel> + <panel name="first_life_image_panel"> + <text name="real_world_photo_title_text" value="Życie#1:"/> + </panel> + <icon label="" name="real_world_edit_icon" tool_tip="Kliknij aby wybrać teksturę"/> + <text name="title_homepage_text"> + WWW: + </text> + <check_box label="Pokaż w wyszukiwarce" name="show_in_search_checkbox"/> + <text name="title_acc_status_text" value="Moje Konto:"/> + <text name="my_account_link" value="[[URL] idź do Dashboard]"/> + <text name="acc_status_text" value="Rezydent. Brak danych konta."/> + <text name="title_partner_text" value="Partner:"/> + <text name="partner_edit_link" value="[[URL] Edytuj]"/> + <panel name="partner_data_panel"> + <text initial_value="(wyszukiwanie)" name="partner_text" value="[FIRST] [LAST]"/> + </panel> + </panel> + </panel> + </scroll_container> + <panel name="profile_me_buttons_panel"> + <button label="Zapisz zmiany" name="save_btn"/> + <button label="Anuluj" name="cancel_btn"/> + </panel> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_edit_shape.xml b/indra/newview/skins/default/xui/pl/panel_edit_shape.xml new file mode 100644 index 0000000000..3cacbd7fdd --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_edit_shape.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="edit_shape_panel"> + <panel name="avatar_sex_panel"> + <text name="gender_text"> + Płeć: + </text> + <radio_group name="sex_radio"> + <radio_item label="Kobieta" name="radio"/> + <radio_item label="Mężczyzna" name="radio2"/> + </radio_group> + </panel> + <accordion name="wearable_accordion"> + <accordion_tab name="shape_body_tab" title="Ciało"/> + <accordion_tab name="shape_head_tab" title="Głowa"/> + <accordion_tab name="shape_eyes_tab" title="Oczy"/> + <accordion_tab name="shape_ears_tab" title="Uszy"/> + <accordion_tab name="shape_nose_tab" title="Nos"/> + <accordion_tab name="shape_mouth_tab" title="Usta"/> + <accordion_tab name="shape_chin_tab" title="Podbródek"/> + <accordion_tab name="shape_torso_tab" title="Tułów"/> + <accordion_tab name="shape_legs_tab" title="Nogi"/> + </accordion> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_edit_shoes.xml b/indra/newview/skins/default/xui/pl/panel_edit_shoes.xml new file mode 100644 index 0000000000..09eb1008e8 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_edit_shoes.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="edit_shoes_panel"> + <panel name="avatar_shoes_color_panel"> + <texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij aby wybrać teksturę"/> + <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/> + </panel> + <accordion name="wearable_accordion"> + <accordion_tab name="shoes_main_tab" title="Buty"/> + </accordion> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_edit_skin.xml b/indra/newview/skins/default/xui/pl/panel_edit_skin.xml new file mode 100644 index 0000000000..617aad8650 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_edit_skin.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="edit_skin_panel"> + <panel name="avatar_skin_color_panel"> + <texture_picker label="Tatuaż na głowie" name="Head Tattoos" tool_tip="Kliknij aby wybrać teksturę"/> + <texture_picker label="Górny tatuaż" name="Upper Tattoos" tool_tip="Kliknij aby wybrać teksturę"/> + <texture_picker label="Dolny tatuaż" name="Lower Tattoos" tool_tip="Kliknij aby wybrać teksturę"/> + </panel> + <accordion name="wearable_accordion"> + <accordion_tab name="skin_color_tab" title="Kolor skórki"/> + <accordion_tab name="skin_face_tab" title="Szczegóły twarzy"/> + <accordion_tab name="skin_makeup_tab" title="Makijaż"/> + <accordion_tab name="skin_body_tab" title="Szczegóły budowy ciała"/> + </accordion> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_edit_skirt.xml b/indra/newview/skins/default/xui/pl/panel_edit_skirt.xml new file mode 100644 index 0000000000..f89148ffac --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_edit_skirt.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="edit_skirt_panel"> + <panel name="avatar_skirt_color_panel"> + <texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij aby wybrać teksturę"/> + <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/> + </panel> + <accordion name="wearable_accordion"> + <accordion_tab name="skirt_main_tab" title="Spódnica"/> + </accordion> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_edit_socks.xml b/indra/newview/skins/default/xui/pl/panel_edit_socks.xml new file mode 100644 index 0000000000..5481c73804 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_edit_socks.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="edit_socks_panel"> + <panel name="avatar_socks_color_panel"> + <texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij aby wybrać teksturę"/> + <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/> + </panel> + <accordion name="wearable_accordion"> + <accordion_tab name="socks_main_tab" title="Skarpetki"/> + </accordion> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/pl/panel_edit_tattoo.xml index 5efa402698..b5e1828588 100644 --- a/indra/newview/skins/default/xui/pl/panel_edit_tattoo.xml +++ b/indra/newview/skins/default/xui/pl/panel_edit_tattoo.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="edit_tattoo_panel"> <panel name="avatar_tattoo_color_panel"> - <texture_picker label="Tatuaż Głowy" name="Head Tattoo" tool_tip="Kliknij by wybrać grafikę"/> - <texture_picker label="Tatuaż Górnej Części Ciała" name="Upper Tattoo" tool_tip="Kliknij by wybrać grafikę"/> - <texture_picker label="Tatuaż Dolnej Części Ciała" name="Lower Tattoo" tool_tip="Kliknij by wybrać grafikę"/> + <texture_picker label="Tatuaż głowy" name="Head Tattoo" tool_tip="Kliknij by wybrać grafikę"/> + <texture_picker label="Tatuaż górnej części ciała" name="Upper Tattoo" tool_tip="Kliknij by wybrać grafikę"/> + <texture_picker label="Tatuaż dolnej części ciała" name="Lower Tattoo" tool_tip="Kliknij by wybrać grafikę"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_edit_underpants.xml b/indra/newview/skins/default/xui/pl/panel_edit_underpants.xml new file mode 100644 index 0000000000..94034aa8ab --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_edit_underpants.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="edit_underpants_panel"> + <panel name="avatar_underpants_color_panel"> + <texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij aby wybrać kolor"/> + <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/> + </panel> + <accordion name="wearable_accordion"> + <accordion_tab name="underpants_main_tab" title="Bielizna"/> + </accordion> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_edit_undershirt.xml b/indra/newview/skins/default/xui/pl/panel_edit_undershirt.xml new file mode 100644 index 0000000000..72b72b76de --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_edit_undershirt.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="edit_undershirt_panel"> + <panel name="avatar_undershirt_color_panel"> + <texture_picker label="Materiał" name="Fabric" tool_tip="Kliknij aby wybrać teksturę"/> + <color_swatch label="Kolor/Barwa" name="Color/Tint" tool_tip="Kliknij aby wybrać kolor"/> + </panel> + <accordion name="wearable_accordion"> + <accordion_tab name="undershirt_main_tab" title="Podkoszulek"/> + </accordion> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_edit_wearable.xml b/indra/newview/skins/default/xui/pl/panel_edit_wearable.xml new file mode 100644 index 0000000000..cf17afea3f --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_edit_wearable.xml @@ -0,0 +1,101 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Ubranie/części ciała" name="panel_edit_wearable"> + <string name="edit_shape_title"> + Edycja kształtu + </string> + <string name="edit_skin_title"> + Edycja skórki + </string> + <string name="edit_hair_title"> + Edycja włosów + </string> + <string name="edit_eyes_title"> + Edycja oczu + </string> + <string name="edit_shirt_title"> + Edycja spódnicy + </string> + <string name="edit_pants_title"> + Edycja spodni + </string> + <string name="edit_shoes_title"> + Edycja butów + </string> + <string name="edit_socks_title"> + Edycja skarpetek + </string> + <string name="edit_jacket_title"> + Edycja kurtki + </string> + <string name="edit_skirt_title"> + Edycja spódnicy + </string> + <string name="edit_gloves_title"> + Edycja rękawiczek + </string> + <string name="edit_undershirt_title"> + Edycja podkoszulki + </string> + <string name="edit_underpants_title"> + Edycja bielizny + </string> + <string name="edit_alpha_title"> + Edycja maski Alpha + </string> + <string name="edit_tattoo_title"> + Edycja tatuażu + </string> + <string name="shape_desc_text"> + Kształt: + </string> + <string name="skin_desc_text"> + Skórka: + </string> + <string name="hair_desc_text"> + Włosy: + </string> + <string name="eyes_desc_text"> + Oczy: + </string> + <string name="shirt_desc_text"> + Koszula: + </string> + <string name="pants_desc_text"> + Spodnie: + </string> + <string name="shoes_desc_text"> + Buty: + </string> + <string name="socks_desc_text"> + Skarpetki: + </string> + <string name="jacket_desc_text"> + Kurtka: + </string> + <string name="skirt_skirt_desc_text"> + Spódnica: + </string> + <string name="gloves_desc_text"> + Rękawiczki: + </string> + <string name="undershirt_desc_text"> + Podkoszulek: + </string> + <string name="underpants_desc_text"> + Bielizna: + </string> + <string name="alpha_desc_text"> + Maska Alpha: + </string> + <string name="tattoo_desc_text"> + Tatuaż: + </string> + <text name="edit_wearable_title" value="Edycja Kształtu"/> + <panel label="Koszula" name="wearable_type_panel"> + <text name="description_text" value="Kształt:"/> + </panel> + <panel name="button_panel"> + <button label="Zapisz" name="save_as_button"/> + <button label="Wróć" name="revert_button"/> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_friends.xml b/indra/newview/skins/default/xui/pl/panel_friends.xml index b6df36f199..fca0dad380 100644 --- a/indra/newview/skins/default/xui/pl/panel_friends.xml +++ b/indra/newview/skins/default/xui/pl/panel_friends.xml @@ -1,27 +1,20 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="friends"> <string name="Multiple"> - Znajomi... + Znajomi </string> - <scroll_list name="friend_list" - tool_tip="By wybrać wielu znajomych za jednym razem przetrzymaj klawisz shift lub control"> - <column name="icon_online_status" tool_tip="Status dostępności" /> - <column label="Imię" name="friend_name" tool_tip="Imię" /> - <column name="icon_visible_online" - tool_tip="Ta osoba może widzieć czy jesteś w Second Life" /> - <column name="icon_visible_map" - tool_tip="Ta osoba może zlokalizować Cię na mapie" /> - <column name="icon_edit_mine" - tool_tip="Ta osoba może edytować, usunąć lub wziąć Twoje obiekty" /> - <column name="icon_edit_theirs" tool_tip="Możesz edytować obiekty tej osoby" /> + <scroll_list name="friend_list" tool_tip="By wybrać wielu znajomych za jednym razem przetrzymaj klawisz shift lub control"> + <column name="icon_online_status" tool_tip="Status dostępności"/> + <column label="Imię" name="friend_name" tool_tip="Imię"/> + <column name="icon_visible_online" tool_tip="Ta osoba może widzieć czy jesteś w Second Life"/> + <column name="icon_visible_map" tool_tip="Ta osoba może zlokalizować Cię na mapie"/> + <column name="icon_edit_mine" tool_tip="Ta osoba może edytować, usunąć lub wziąć Twoje obiekty"/> + <column name="icon_edit_theirs" tool_tip="Możesz edytować obiekty tej osoby"/> </scroll_list> - <button label="Czat/IM" name="im_btn" tool_tip="Rozpocznij sesję czatu/IM" /> - <button label="Profil" name="profile_btn" - tool_tip="Pokaż zdjęcia, grupy i inne informacje" /> - <button label="Teleportuj..." name="offer_teleport_btn" - tool_tip="Zaoferuj teleportację do siebie" /> - <button label="Zapłać..." name="pay_btn" tool_tip="Zapłać L$ tej osobie" /> - <button label="Usuń..." name="remove_btn" - tool_tip="Usuń tę osobę z listy znajomych" /> - <button label="Dodaj..." name="add_btn" tool_tip="Zaproponuj znajomość" /> + <button label="Czat/IM" name="im_btn" tool_tip="Rozpocznij sesję czatu/IM"/> + <button label="Profil" name="profile_btn" tool_tip="Pokaż zdjęcia, grupy i inne informacje"/> + <button label="Teleportuj" name="offer_teleport_btn" tool_tip="Zaoferuj teleportację do siebie"/> + <button label="Zapłać" name="pay_btn" tool_tip="Zapłać L$ tej osobie"/> + <button label="Usuń" name="remove_btn" tool_tip="Usuń tę osobę z listy znajomych"/> + <button label="Dodaj" name="add_btn" tool_tip="Zaoferuj znajomość"/> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_group_control_panel.xml b/indra/newview/skins/default/xui/pl/panel_group_control_panel.xml new file mode 100644 index 0000000000..b57ec8f2e6 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_group_control_panel.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="panel_im_control_panel"> + <layout_stack name="vertical_stack"> + <layout_panel name="group_info_btn_panel"> + <button label="Grupa" name="group_info_btn"/> + </layout_panel> + <layout_panel name="call_btn_panel"> + <button label="Dzwoń" name="call_btn"/> + </layout_panel> + <layout_panel name="end_call_btn_panel"> + <button label="Zakończ Rozmowę" name="end_call_btn"/> + </layout_panel> + <layout_panel name="voice_ctrls_btn_panel"> + <button label="Przełączniki Głosu" name="voice_ctrls_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_group_general.xml b/indra/newview/skins/default/xui/pl/panel_group_general.xml index d09ff72226..67fa0bf085 100644 --- a/indra/newview/skins/default/xui/pl/panel_group_general.xml +++ b/indra/newview/skins/default/xui/pl/panel_group_general.xml @@ -1,70 +1,55 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Ogólne" name="general_tab"> - <string name="help_text"> - Zakładka Ogólne zawiera informacje na temat tej grupy, listę właścicieli, widocznych członków, ustawienia grupy oraz opcje członkostwa. - </string> - <string name="group_info_unchanged"> + <panel.string name="help_text"> + Zakładka Główne zawiera ogólne informacje na temat tej grupy, ustawień dla całej grupy oraz danego członka. + +By otrzymać pomoc i dodatkowe wskazówki przesuń kursor na przyciski. + </panel.string> + <panel.string name="group_info_unchanged"> Ogólne informacje na temat grupy uległy zmianie. - </string> - <button label="?" label_selected="?" name="help_button"/> - <line_editor label="Wpisz nazwę grupy tutaj" name="group_name_editor"/> - <text name="group_name"> - Wpisz nazwę grupy tutaj - </text> - <text name="prepend_founded_by"> - Założyciel: - </text> - <text name="founder_name"> - (proszę czekać) - </text> - <text name="group_charter_label"> - Status Grupy - </text> - <texture_picker label="Insygnia Grupy" name="insignia" tool_tip="Kliknij by wybrać zdjęcie"/> + </panel.string> + <panel.string name="incomplete_member_data_str"> + Wyszukiwanie informacji o członku + </panel.string> + <panel name="group_info_top"> + <texture_picker label="" name="insignia" tool_tip="Kliknij by wybrać obraz"/> + <text name="prepend_founded_by"> + Założyciel: + </text> + <name_box initial_value="(przetwarzanie)" name="founder_name"/> + <text name="join_cost_text"> + Wstęp wolny + </text> + <button label="DOŁĄCZ TERAZ!" name="btn_join"/> + </panel> <text_editor name="charter"> Status Grupy </text_editor> - <button label="Dołącz (L$0)" label_selected="Dołącz (L$0)" name="join_button"/> - <button label="Szczegóły" label_selected="Szczegóły" name="info_button"/> - <text name="text_owners_and_visible_members"> - Właściciele i widoczni członkowie - </text> - <text name="text_owners_are_shown_in_bold"> - (Właściciele wyświetlają się pogrubioną czcionką) - </text> <name_list name="visible_members"> - <name_list.columns label="Imię" name="name"/> + <name_list.columns label="Członek" name="name"/> <name_list.columns label="Tytuł" name="title"/> - <name_list.columns label="Ostatnio w SL" name="online"/> + <name_list.columns label="Status" name="status"/> </name_list> - <text name="text_group_preferences"> - Ustawienia Grupy + <text name="my_group_settngs_label"> + ja </text> + <text name="active_title_label"> + Mój Aktywny Tytuł: + </text> + <combo_box name="active_title" tool_tip="Ustaw tytuł który wyświetla się kiedy grupa jest aktywna."/> + <check_box label="Otrzymuj grupowe ogłoszenia" name="receive_notices" tool_tip="Zaznacz jeżeli chcesz otrzymywać ogłoszenia z tej grupy. Anuluj z zaznaczenia, jeżeli nie chcesz otrzymywać żadnych ogłoszeń z tej grupy."/> + <check_box label="Wyświetl grupę w profilu" name="list_groups_in_profile" tool_tip="Zaznacz jeżeli chcesz by grupa wyświetlała się w Twoim profilu"/> <panel name="preferences_container"> - <check_box label="Wyświetlaj w wyszukiwarce" name="show_in_group_list" tool_tip="Udostępnij info o grupie w wyszukiwarce"/> - <check_box label="Wolny Wstęp" name="open_enrollement" tool_tip="Sprawdź czy grupa oferuje wolny wstęp i nie wymaga zaproszenia."/> - <check_box label="Opłata Wstępu:" name="check_enrollment_fee" tool_tip="Ustaw opłatę za przyłączenie się do grupy."/> - <spinner name="spin_enrollment_fee" tool_tip="Nowi członkowie grupy muszą zapłacić wymaganą opłatę by dołączyć do grupy."/> + <text name="group_settngs_label"> + Grupa + </text> + <check_box label="Wolny wstęp" name="open_enrollement" tool_tip="Sprawdź czy grupa oferuje wolny wstęp i nie wymaga zaproszenia."/> + <check_box label="Opłata wstępu" name="check_enrollment_fee" tool_tip="Ustaw opłatę za przyłączenie się do grupy."/> + <spinner label="L$" name="spin_enrollment_fee" tool_tip="Nowi członkowie grupy muszą zapłacić wymaganą opłatę by dołączyć do grupy."/> <combo_box name="group_mature_check" tool_tip="Wybierz jeżeli uważasz, iż Twoja grupa klasyfikowana jest jako 'Mature'."> - <combo_box.item name="select_mature" label="- Wybierz Treść -"/> - <combo_box.item name="mature" label="Treść 'Mature'"/> - <combo_box.item name="pg" label="Treść 'PG'"/> + <combo_box.item label="Treść 'PG'" name="pg"/> + <combo_box.item label="Treść 'Mature'" name="mature"/> </combo_box> - <panel name="title_container"> - <text name="active_title_label"> - Mój Aktywny Tytuł - </text> - <combo_box name="active_title" tool_tip="Ustaw tytuł który wyświetla się kiedy grupa jest aktywna."/> - </panel> - <check_box label="Otrzymuj grupowe ogłoszenia" name="receive_notices" tool_tip="Zaznacz jeżeli chcesz otrzymywać ogłoszenia z tej grupy. Anuluj z zaznaczenia, jeżeli nie chcesz otrzymywać żadnych ogłoszeń z tej grupy."/> - <check_box label="Wyświetl grupę w profilu" name="list_groups_in_profile" tool_tip="Zaznacz jeżeli chcesz by grupa wyświetlała się w Twoim profilu"/> + <check_box initial_value="true" label="Wyświetlaj w wyszukiwarce" name="show_in_group_list" tool_tip="Udostępnij info o grupie w wyszukiwarce"/> </panel> - <string name="incomplete_member_data_str"> - Wyszukiwanie informacji o członku - </string> - <string name="confirm_group_create_str"> - Koszt utworzenia tej grupy wynosi L$100. -Czy napewno jesteś PEWNY,że chcesz zapłacić L$100 by utworzyć grupę? -Pamiętaj, jeżeli w ciągu 48h od utworzenia grupy nikt do niej nie dołączy, informacje o grupie zostaną usunięte z bazy, a nazwa grupy zablokowana do użycia w przyszłości. - </string> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/pl/panel_group_info_sidetray.xml new file mode 100644 index 0000000000..509c2893cf --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_group_info_sidetray.xml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="O Grupie" name="GroupInfo"> + <panel.string name="default_needs_apply_text"> + Nie zapisałeś zmian + </panel.string> + <panel.string name="want_apply_text"> + Czy chcesz zachować te zmiany? + </panel.string> + <panel.string name="group_join_btn"> + Dołącz (L$[AMOUNT]) + </panel.string> + <panel.string name="group_join_free"> + Darmowe + </panel.string> + <panel name="group_info_top"> + <text name="group_name" value="(Ładowanie...)"/> + <line_editor label="Wpisz nazwę swojej nowej grupy tutaj" name="group_name_editor"/> + </panel> + <layout_stack name="layout"> + <layout_panel name="group_accordions"> + <accordion name="groups_accordion"> + <accordion_tab name="group_general_tab" title="Ogólne"/> + <accordion_tab name="group_roles_tab" title="Funkcja"/> + <accordion_tab name="group_notices_tab" title="Notki"/> + <accordion_tab name="group_land_tab" title="Posiadlość/Majątek"/> + </accordion> + </layout_panel> + <layout_panel name="button_row"> + <button label="Czat" name="btn_chat"/> + <button label="Konferencja Głosowa" name="btn_call" tool_tip="Konferencja Głosowa"/> + <button label="Zapisz" label_selected="Zapisz" name="btn_apply"/> + <button label="Stwórz nową Grupę" name="btn_create" tool_tip="Stwórz nową Grupę"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_group_invite.xml b/indra/newview/skins/default/xui/pl/panel_group_invite.xml index 12d48279ad..e520c06944 100644 --- a/indra/newview/skins/default/xui/pl/panel_group_invite.xml +++ b/indra/newview/skins/default/xui/pl/panel_group_invite.xml @@ -1,23 +1,27 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Zaproszenie do Grupy" name="invite_panel"> + <panel.string name="confirm_invite_owner_str"> + Jesteś pewny, że chcesz wybrać nowych właścieli grupy? Ta decyzja jest ostateczna! + </panel.string> + <panel.string name="loading"> + (ładowanie...) + </panel.string> + <panel.string name="already_in_group"> + Niektórzy Rezydenci, których wybrałeś już należą do grupy i nie otrzymali zaproszenia. + </panel.string> <text name="help_text"> - Możesz zaprosić kilku Rezydentów -do swojej grupy. Wybierz 'Otwórz -Katalog Osobisty' by rozpocząć. + Możesz zaprosić kilku Rezydentów do swojej grupy. Wybierz 'Otwórz Katalog Osobisty' aby rozpocząć. </text> <button label="Otwórz Katalog Osobisty" name="add_button" tool_tip=""/> - <name_list name="invitee_list" tool_tip="" /> - <button label="Usuń z Listy" name="remove_button" tool_tip="" /> + <name_list name="invitee_list" tool_tip="Przytrzymaj klawisz Ctrl i kliknij imię Rezydenta aby wybrać kilka osób."/> + <button label="Usuń z Listy" name="remove_button" tool_tip="Usuwa wybranych powyżej Rezydentów z listy zaproszeń."/> <text name="role_text"> Wybierz rolę dla nowego członka: </text> - <combo_box name="role_name" tool_tip="" /> - <button label="Wyślij Zaproszenia" name="ok_button" /> - <button label="Anuluj" name="cancel_button" /> - <string name="confirm_invite_owner_str"> - Jesteś pewny, że chcesz wybrać nowych właścieli grupy? Ta decyzja jest ostateczna! - </string> - <string name="loading"> - (loading...) + <combo_box name="role_name" tool_tip="Wybierz z listy Role, które możesz przypisać Członkom"/> + <button label="Wyślij Zaproszenia" name="ok_button"/> + <button label="Anuluj" name="cancel_button"/> + <string name="GroupInvitation"> + Zaproszenie do Grupy </string> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_group_land_money.xml b/indra/newview/skins/default/xui/pl/panel_group_land_money.xml index dbfa8e3122..a52b7f7745 100644 --- a/indra/newview/skins/default/xui/pl/panel_group_land_money.xml +++ b/indra/newview/skins/default/xui/pl/panel_group_land_money.xml @@ -1,84 +1,81 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Posiadłości i L$" name="land_money_tab"> - <string name="help_text"> - Posiadłości, które są własnością grupy zawierają dane poszczególnych kontrybucji ich członków. W przypadku kiedy całkowita ilość metrów przypisanej danej posiadłości przez grupę jest mniejsza lub równa całkowitej liczbie kontrybucji dla przypisanej ilości metrów pojawia się ostrzeżenie. Zakładki: Planowanie, Szczegóły oraz Sprzedaże udostępniają informacje na temat statusu finansowego grupy. - </string> - <button label="?" name="help_button"/> - <string name="cant_view_group_land_text"> + <panel.string name="help_text"> + Ostrzeżenie pojawia się kiedy Łączna Powierzchnia Posiadłości jest mniejsza lub = Kontrybucjom + </panel.string> + <panel.string name="cant_view_group_land_text"> Nie masz pozwolenia na oglądanie Posiadłości Grupy. - </string> - <string name="cant_view_group_accounting_text"> + </panel.string> + <panel.string name="cant_view_group_accounting_text"> Nie masz dostępu do konta, finansów Grupy. - </string> - <string name="loading_txt"> + </panel.string> + <panel.string name="loading_txt"> Ładowanie... - </string> - <text name="group_land_heading"> - Posiadłości Grupy - </text> - <scroll_list name="group_parcel_list"> - <column label="Posiadłości" name="name"/> - <column label="Region" name="location"/> - <column label="Typ" name="type"/> - <column label="Obszar" name="area"/> - <column label="" name="hidden"/> - </scroll_list> - <button label="Pokaż na Mapie" label_selected="Pokaż na Mapie" name="map_button"/> - <text name="total_contributed_land_label"> - Kontrybucje: - </text> - <text name="total_contributed_land_value"> - [AREA] metrów - </text> - <text name="total_land_in_use_label"> - Używane Posiadłości: - </text> - <text name="total_land_in_use_value"> - [AREA] metrów - </text> - <text name="land_available_label"> - Dostępne Posiadłości: - </text> - <text name="land_available_value"> - [AREA] metrów - </text> - <text name="your_contribution_label"> - Twoje Kontrybucje: - </text> - <string name="land_contrib_error"> + </panel.string> + <panel.string name="land_contrib_error"> Nie można ustalić Twoich kontrybucji. - </string> - <text name="your_contribution_units"> - ( m ) - </text> - <text name="your_contribution_max_value"> - ([AMOUNT] maksimum) - </text> - <text name="group_over_limit_text"> - Członkowie Grupy muszą zwiększyć kredyt na używanie Posiadłości. - </text> - <text name="group_money_heading"> - L$ Grupy - </text> + </panel.string> + <panel name="layout_panel_landmoney"> + <scroll_list name="group_parcel_list"> + <scroll_list.columns label="Posiadłość" name="name"/> + <scroll_list.columns label="Region" name="location"/> + <scroll_list.columns label="Typ" name="type"/> + <scroll_list.columns label="Obszar" name="area"/> + </scroll_list> + <text name="total_contributed_land_label"> + Kontrybucje: + </text> + <text name="total_contributed_land_value"> + [AREA] m² + </text> + <button label="Mapa" label_selected="Mapa" name="map_button"/> + <text name="total_land_in_use_label"> + Używane Posiadłości: + </text> + <text name="total_land_in_use_value"> + [AREA] m² + </text> + <text name="land_available_label"> + Dostępne Posiadłości: + </text> + <text name="land_available_value"> + [AREA] m² + </text> + <text name="your_contribution_label"> + Twoje Kontrybucje: + </text> + <text name="your_contribution_units"> + m² + </text> + <text name="your_contribution_max_value"> + ([AMOUNT] max) + </text> + <text name="group_over_limit_text"> + Należy zwięszyć kredyt na używanie Posiadłości. + </text> + <text name="group_money_heading"> + L$ Grupy + </text> + </panel> <tab_container name="group_money_tab_container"> - <panel label="Planowanie" name="group_money_planning_tab"> + <panel label="PLANOWANIE" name="group_money_planning_tab"> <text_editor name="group_money_planning_text"> - Obliczanie... + Ładowanie... </text_editor> </panel> - <panel label="Szczegóły" name="group_money_details_tab"> + <panel label="SZCZEGÓŁY" name="group_money_details_tab"> <text_editor name="group_money_details_text"> - Obliczanie... + Ładowanie... </text_editor> - <button label="< Wcześniej" label_selected="< Wcześniej" name="earlier_details_button" tool_tip="Do tyłu w czasie"/> - <button label="Później >" label_selected="Później >" name="later_details_button" tool_tip="Do przodu w czasie"/> + <button label="< Wcześniej" label_selected="< Wcześniej" name="earlier_details_button" tool_tip="Wcześniej"/> + <button label="Później >" label_selected="Później >" name="later_details_button" tool_tip="Później"/> </panel> - <panel label="Sprzedaż" name="group_money_sales_tab"> + <panel label="SPRZEDAŻ" name="group_money_sales_tab"> <text_editor name="group_money_sales_text"> - Obliczanie... + Ładowanie... </text_editor> - <button label="< Wcześniej" label_selected="< Wcześniej" name="earlier_sales_button" tool_tip="Do tyłu w czasie"/> - <button label="Później >" label_selected="Później >" name="later_sales_button" tool_tip="Do przodu w czasie"/> + <button label="< Wcześniej" label_selected="< Wcześniej" name="earlier_sales_button" tool_tip="Wcześniej"/> + <button label="Później >" label_selected="Później >" name="later_sales_button" tool_tip="Później"/> </panel> </tab_container> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_group_list_item.xml b/indra/newview/skins/default/xui/pl/panel_group_list_item.xml index e8e819e7ce..a8b4056976 100644 --- a/indra/newview/skins/default/xui/pl/panel_group_list_item.xml +++ b/indra/newview/skins/default/xui/pl/panel_group_list_item.xml @@ -1,4 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="group_list_item"> <text name="group_name" value="Nieznana"/> + <button name="profile_btn" tool_tip="Zobacz profil"/> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_group_notices.xml b/indra/newview/skins/default/xui/pl/panel_group_notices.xml index 1c19571ec0..31882ab0e6 100644 --- a/indra/newview/skins/default/xui/pl/panel_group_notices.xml +++ b/indra/newview/skins/default/xui/pl/panel_group_notices.xml @@ -1,38 +1,30 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Ogłoszenia" name="notices_tab"> - <string name="help_text"> + <panel.string name="help_text"> Ogłoszenia to szybka droga do komunikowania się ze wszystkmi członkami grupy poprzez wysylanie ich na grupowym kanale. Dodatkowo, do ogłoszenia można dołańczać załączniki. Ogłoszenia docierają jedynie do członków grupy, którzy mają zdolność ich otrzymywania. By nie otrzymywać ogłoszeń, w zakładce Ogólne pozostaw niezaznaczonym "Otrzymuj grupowe ogłoszenia". - </string> - <string name="no_notices_text"> + </panel.string> + <panel.string name="no_notices_text"> Brak przeszłych ogłoszeń - </string> - <button label="?" label_selected="?" name="help_button" /> - <text name="lbl"> - Archiwum Grupowych Ogłoszeń - </text> + </panel.string> <text name="lbl2"> - Ogłoszenia przechowywane są przez 14 dni. + Ogłoszenia przechowywane są przez 14 dni. Limit dzienny ogłoszeń dla grupy wynosi 200. </text> <scroll_list name="notice_list"> - <column label="" name="icon" /> - <column label="Temat" name="subject" /> - <column label="Autor" name="from" /> - <column label="Data" name="date" /> + <scroll_list.columns label="" name="icon"/> + <scroll_list.columns label="Temat" name="subject"/> + <scroll_list.columns label="Autor" name="from"/> + <scroll_list.columns label="Data" name="date"/> </scroll_list> <text name="notice_list_none_found"> - Nie znalezione. + Nie znaleziono </text> - <button label="Stwórz Nowe Ogłoszenie" label_selected="Stwórz Nowe Ogłoszenie" - name="create_new_notice" /> - <button label="Odśwież" label_selected="Odśwież Listę" name="refresh_notices" /> + <button label="Stwórz Ogłoszenie" label_selected="Stwórz Nowe Ogłoszenie" name="create_new_notice" tool_tip="Stwórz Ogłoszenie"/> + <button label="Odśwież" label_selected="Odśwież Listę" name="refresh_notices" tool_tip="Użyj Odśwież by zobaczyć czy nowe ogłoszenia zostały wysłane."/> <panel label="Stwórz Nowe Ogłoszenie" name="panel_create_new_notice"> <text name="lbl"> Stwórz Ogłoszenie </text> - <text name="lbl2"> - Możesz także dołączyć pojedynczy załącznik ze swojej szafy. Załącznik musi mieć prawo modyfikacyjne do kopiowania oraz transferu. - </text> <text name="lbl3"> Temat: </text> @@ -42,17 +34,19 @@ Limit dzienny ogłoszeń dla grupy wynosi 200. <text name="lbl5"> Załącz: </text> - <button label="Usuń Załącznik" label_selected="Usuń Załącznik" - name="remove_attachment" /> - <button label="Wyślij" label_selected="Wyślij" name="send_notice" /> - <panel name="drop_target" tool_tip="" /> + <text name="string"> + Przeciągnij i upuść załącznik tutaj aby go dodać: + </text> + <button label="Usuń załącznik" label_selected="Usuń Załącznik" name="remove_attachment" tool_tip="Usuń załącznik z noty"/> + <button label="Wyślij" label_selected="Wyślij" name="send_notice"/> + <group_drop_target name="drop_target" tool_tip="Przeciągnij załącznik ze swojej Szafy na pole docelowe aby wysłać go z Ogłoszeniem. Musisz posiadać prawo do kopiowania i transferu załącznika aby go dodać do ogłoszenia."/> </panel> - <panel label="Zobacz Przeszłe Ogłoszenia" name="panel_view_past_notice"> + <panel label="Zobacz przeszłe Ogłoszenia" name="panel_view_past_notice"> <text name="lbl"> - Ogłoszenia Zachowane + Ogłoszenia zachowane </text> <text name="lbl2"> - By wysłać nowe ogłoszenie, kliknij Stwórz Nowe Ogłoszenie. + W celu wysłania nowego ogłoszenia kliknij przycisk + </text> <text name="lbl3"> Temat: @@ -60,7 +54,6 @@ Limit dzienny ogłoszeń dla grupy wynosi 200. <text name="lbl4"> Treść: </text> - <button label="Otwórz Załącznik" label_selected="Otwórz Załącznik" - name="open_attachment" /> + <button label="Otwórz Załącznik" label_selected="Otwórz Załącznik" name="open_attachment"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_group_notify.xml b/indra/newview/skins/default/xui/pl/panel_group_notify.xml new file mode 100644 index 0000000000..d81c3f68f2 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_group_notify.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="instant_message" name="panel_group_notify"> + <panel label="header" name="header"> + <text name="title" value="Imię Nadawcy / Nazwa Grupy"/> + </panel> + <text name="attachment" value="Załącznik"/> + <button label="OK" name="btn_ok"/> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_group_roles.xml b/indra/newview/skins/default/xui/pl/panel_group_roles.xml index 6a0cbbd23a..8a422e2586 100644 --- a/indra/newview/skins/default/xui/pl/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/pl/panel_group_roles.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Członkowie" name="roles_tab"> <panel.string name="default_needs_apply_text"> - Zakładka zawiera niezapisane zmiany + Panel zawiera niezapisane zmiany. </panel.string> <panel.string name="want_apply_text"> Czy chcesz zapisać zmiany? @@ -57,7 +57,7 @@ Istnieje wiele Przywilei. </tab_container> <panel name="members_footer"> <text name="static"> - Przypisani Członkowie + Przywileje </text> <scroll_list name="member_assigned_roles"> <scroll_list.columns label="" name="checkbox"/> diff --git a/indra/newview/skins/default/xui/pl/panel_im_control_panel.xml b/indra/newview/skins/default/xui/pl/panel_im_control_panel.xml new file mode 100644 index 0000000000..ffd75994cb --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_im_control_panel.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="panel_im_control_panel"> + <layout_stack name="button_stack"> + <layout_panel name="view_profile_btn_panel"> + <button label="Profil" name="view_profile_btn"/> + </layout_panel> + <layout_panel name="add_friend_btn_panel"> + <button label="Poznaj" name="add_friend_btn"/> + </layout_panel> + <layout_panel name="teleport_btn_panel"> + <button label="Teleportuj" name="teleport_btn" tool_tip="Teleportuj"/> + </layout_panel> + <layout_panel name="share_btn_panel"> + <button label="Udostępnij" name="share_btn"/> + </layout_panel> + <layout_panel name="pay_btn_panel"> + <button label="Zapłać" name="pay_btn"/> + </layout_panel> + <layout_panel name="call_btn_panel"> + <button label="Dzwoń" name="call_btn"/> + </layout_panel> + <layout_panel name="end_call_btn_panel"> + <button label="Zakończ Rozmowę" name="end_call_btn"/> + </layout_panel> + <layout_panel name="voice_ctrls_btn_panel"> + <button label="Przełączniki Głosu" name="voice_ctrls_btn"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_landmark_info.xml b/indra/newview/skins/default/xui/pl/panel_landmark_info.xml index dc73d08680..64479176fa 100644 --- a/indra/newview/skins/default/xui/pl/panel_landmark_info.xml +++ b/indra/newview/skins/default/xui/pl/panel_landmark_info.xml @@ -18,6 +18,7 @@ <string name="acquired_date"> [wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local] </string> + <button name="back_btn" tool_tip="Cofnij"/> <text name="title" value="Profil Miejsca"/> <scroll_container name="place_scroll"> <panel name="scrolling_panel"> diff --git a/indra/newview/skins/default/xui/pl/panel_landmarks.xml b/indra/newview/skins/default/xui/pl/panel_landmarks.xml new file mode 100644 index 0000000000..dcc495b5a8 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_landmarks.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="Landmarks"> + <accordion name="landmarks_accordion"> + <accordion_tab name="tab_favorites" title="Ulubione"/> + <accordion_tab name="tab_landmarks" title="Landmarki"/> + <accordion_tab name="tab_inventory" title="Moja Szafa"/> + <accordion_tab name="tab_library" title="Biblioteka"/> + </accordion> + <panel name="bottom_panel"> + <button name="options_gear_btn" tool_tip="Pokaż dodatkowe opcje"/> + <button name="add_btn" tool_tip="Dodaj nowy landmark"/> + <dnd_button name="trash_btn" tool_tip="Usuń zaznaczony landmark"/> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_login.xml b/indra/newview/skins/default/xui/pl/panel_login.xml index 42088eae28..6b0061926b 100644 --- a/indra/newview/skins/default/xui/pl/panel_login.xml +++ b/indra/newview/skins/default/xui/pl/panel_login.xml @@ -13,7 +13,7 @@ </text> <line_editor label="Imię" name="first_name_edit" tool_tip="[SECOND_LIFE] First Name"/> <line_editor label="Nazwisko" name="last_name_edit" tool_tip="[SECOND_LIFE] Last Name"/> - <check_box label="Zapamiętaj hasło" name="remember_check"/> + <check_box label="Zapamiętaj Hasło" name="remember_check"/> <text name="start_location_text"> Rozpocznij w: </text> diff --git a/indra/newview/skins/default/xui/pl/panel_main_inventory.xml b/indra/newview/skins/default/xui/pl/panel_main_inventory.xml index e34fd69671..e0d9def8b3 100644 --- a/indra/newview/skins/default/xui/pl/panel_main_inventory.xml +++ b/indra/newview/skins/default/xui/pl/panel_main_inventory.xml @@ -1,26 +1,22 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Rzeczy" name="main inventory panel"> - <panel.string name="Title"> - Rzeczy + <panel.string name="ItemcountFetching"> + Dostarczanie [ITEM_COUNT] obiektów... [FILTER] </panel.string> - <filter_editor label="Filtr" name="inventory search editor"/> - <tab_container name="inventory filter tabs"> - <inventory_panel label="Wszystkie Obiekty" name="All Items"/> - <inventory_panel label="Ostatnio Dodane Obiekty" name="Recent Items"/> - </tab_container> - <panel name="bottom_panel"> - <button name="options_gear_btn" tool_tip="Pokaż dodatkowe opcje"/> - <button name="add_btn" tool_tip="Dodaj nowy obiekt"/> - <dnd_button name="trash_btn" tool_tip="Usuń wybrany obiekt"/> - </panel> + <panel.string name="ItemcountCompleted"> + [ITEM_COUNT] obiekty [FILTER] + </panel.string> + <text name="ItemcountText"> + Obiekty: + </text> <menu_bar name="Inventory Menu"> <menu label="Plik" name="File"> <menu_item_call label="Otwórz" name="Open"/> <menu label="Załaduj" name="upload"> - <menu_item_call label="Obraz (L$[COST])..." name="Upload Image"/> - <menu_item_call label="Dźwięk (L$[COST])..." name="Upload Sound"/> - <menu_item_call label="Animację (L$[COST])..." name="Upload Animation"/> - <menu_item_call label="Zbiór Plików (L$[COST] za jeden plik)..." name="Bulk Upload"/> + <menu_item_call label="obraz (L$[COST])..." name="Upload Image"/> + <menu_item_call label="dźwięk (L$[COST])..." name="Upload Sound"/> + <menu_item_call label="animację (L$[COST])..." name="Upload Animation"/> + <menu_item_call label="zbiór plików (L$[COST] za jeden plik)..." name="Bulk Upload"/> </menu> <menu_item_call label="Nowe Okno" name="New Window"/> <menu_item_call label="Pokaż Filtry" name="Show Filters"/> @@ -30,35 +26,45 @@ <menu_item_call label="Opróżnij Folder Zgubione i Znalezione" name="Empty Lost And Found"/> </menu> <menu label="Stwórz" name="Create"> - <menu_item_call label="Nowy Folder" name="New Folder"/> - <menu_item_call label="Nowy Skrypt" name="New Script"/> - <menu_item_call label="Nową Notę" name="New Note"/> - <menu_item_call label="Nową Gesturkę" name="New Gesture"/> + <menu_item_call label="Nowy folder" name="New Folder"/> + <menu_item_call label="Nowy skrypt" name="New Script"/> + <menu_item_call label="Nowa nota" name="New Note"/> + <menu_item_call label="Nowy gest" name="New Gesture"/> <menu label="Nowe Ubranie" name="New Clothes"> - <menu_item_call label="Nową Koszulkę" name="New Shirt"/> - <menu_item_call label="Nowe Spodnie" name="New Pants"/> - <menu_item_call label="Nowe Buty" name="New Shoes"/> - <menu_item_call label="Nowe Skarpetki" name="New Socks"/> - <menu_item_call label="Nową Kurtkę" name="New Jacket"/> - <menu_item_call label="Nową Spódnicę" name="New Skirt"/> - <menu_item_call label="Nowe Rękawiczki" name="New Gloves"/> - <menu_item_call label="Nowy Podkoszulek" name="New Undershirt"/> - <menu_item_call label="Nową Bieliznę" name="New Underpants"/> - <menu_item_call label="Nowe Ubranie Przezroczyste" name="New Alpha"/> - <menu_item_call label="Nowy Tatuaż" name="New Tattoo"/> + <menu_item_call label="Nową kkoszulkę" name="New Shirt"/> + <menu_item_call label="Nowe spodnie" name="New Pants"/> + <menu_item_call label="Nowe buty" name="New Shoes"/> + <menu_item_call label="Nowe skarpetki" name="New Socks"/> + <menu_item_call label="Nową kurtkę" name="New Jacket"/> + <menu_item_call label="Nową spódnicę" name="New Skirt"/> + <menu_item_call label="Nowe rękawiczki" name="New Gloves"/> + <menu_item_call label="Nowy podkoszulek" name="New Undershirt"/> + <menu_item_call label="Nową bieliznę" name="New Underpants"/> + <menu_item_call label="Nowe ubranie Alpha" name="New Alpha"/> + <menu_item_call label="Nowy tatuaż" name="New Tattoo"/> </menu> <menu label="Nową Część Ciała" name="New Body Parts"> - <menu_item_call label="Nowy Kształt" name="New Shape"/> - <menu_item_call label="Nową Skórkę" name="New Skin"/> - <menu_item_call label="Nowe Włosy" name="New Hair"/> - <menu_item_call label="Nowe Oczy" name="New Eyes"/> + <menu_item_call label="Nowy kształt" name="New Shape"/> + <menu_item_call label="Nową skórkę" name="New Skin"/> + <menu_item_call label="Nowe włosy" name="New Hair"/> + <menu_item_call label="Nowe oczy" name="New Eyes"/> </menu> </menu> <menu label="Uporządkuj" name="Sort"> - <menu_item_check label="Wegług Nazwy" name="By Name"/> - <menu_item_check label="Według Daty" name="By Date"/> + <menu_item_check label="Wegług bazwy" name="By Name"/> + <menu_item_check label="Według daty" name="By Date"/> <menu_item_check label="Foldery zawsze według nazwy" name="Folders Always By Name"/> - <menu_item_check label="Foldery Systemowe od Góry" name="System Folders To Top"/> + <menu_item_check label="Foldery Systemowe od góry" name="System Folders To Top"/> </menu> </menu_bar> + <filter_editor label="Filtr" name="inventory search editor"/> + <tab_container name="inventory filter tabs"> + <inventory_panel label="Wszystkie obiekty" name="All Items"/> + <inventory_panel label="Ostatnio dodane obiekty" name="Recent Items"/> + </tab_container> + <panel name="bottom_panel"> + <button name="options_gear_btn" tool_tip="Pokaż dodatkowe opcje"/> + <button name="add_btn" tool_tip="Dodaj nowy obiekt"/> + <dnd_button name="trash_btn" tool_tip="Usuń wybrany obiekt"/> + </panel> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_me.xml b/indra/newview/skins/default/xui/pl/panel_me.xml new file mode 100644 index 0000000000..72a5f51520 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_me.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Mój Profil" name="panel_me"> + <tab_container name="tabs"> + <panel label="PROFIL" name="panel_profile"/> + <panel label="ULUBIONE" name="panel_picks"/> + </tab_container> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_media_settings_general.xml b/indra/newview/skins/default/xui/pl/panel_media_settings_general.xml new file mode 100644 index 0000000000..03b063ddfe --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_media_settings_general.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Ogólne" name="Media Settings General"> + <text name="home_label"> + Strona Domowa: + </text> + <text name="home_fails_whitelist_label"> + (ta strona nie została zaakceptowana przez filtr listy dostępowej) + </text> + <line_editor name="home_url" tool_tip="Strona domowa dla źródla mediów"/> + <text name="preview_label"> + Pokaż + </text> + <text name="current_url_label"> + Obecna Strona: + </text> + <text name="current_url" tool_tip="The current page for this media source" value=""/> + <button label="Zresetuj" name="current_url_reset_btn"/> + <check_box initial_value="false" label="Pętla" name="auto_loop"/> + <check_box initial_value="false" label="Interakcja Kliknięcia" name="first_click_interact"/> + <check_box initial_value="false" label="Autopowiększenie" name="auto_zoom"/> + <check_box initial_value="false" label="Automatyczne Odtwarzanie Mediów" name="auto_play"/> + <text name="media_setting_note"> + Pamiętaj: Rezydenci mogą zmienić to ustawienie + </text> + <check_box initial_value="false" label="Automatyczne dopasowanie mediów na twarzy lub obiekcie" name="auto_scale"/> + <text name="size_label"> + Rozmiar: + </text> + <text name="X_label"> + X + </text> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_media_settings_permissions.xml b/indra/newview/skins/default/xui/pl/panel_media_settings_permissions.xml index 4d91c3cdc8..939bcbbb42 100644 --- a/indra/newview/skins/default/xui/pl/panel_media_settings_permissions.xml +++ b/indra/newview/skins/default/xui/pl/panel_media_settings_permissions.xml @@ -11,10 +11,10 @@ Mini </combo_item> </combo_box> - <check_box initial_value="false" label="Pozwól na Nawigację & Interaktywność" name="perms_owner_interact"/> + <check_box initial_value="false" label="Pozwól na nawigację & interaktywność" name="perms_owner_interact"/> <check_box initial_value="false" label="Pokaż Pasek Kontroli" name="perms_owner_control"/> - <check_box initial_value="false" label="Pozwól na Nawigację & Interaktywność" name="perms_group_interact"/> + <check_box initial_value="false" label="Pozwól na nawigację & Interaktywność" name="perms_group_interact"/> <check_box initial_value="false" label="Pokaż Pasek Kontroli" name="perms_group_control"/> - <check_box initial_value="false" label="Pozwól na Nawigację & Interaktywność" name="perms_anyone_interact"/> + <check_box initial_value="false" label="Pozwól na nawigację & interaktywność" name="perms_anyone_interact"/> <check_box initial_value="false" label="Pokaż Pasek Kontroli" name="perms_anyone_control"/> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_media_settings_security.xml b/indra/newview/skins/default/xui/pl/panel_media_settings_security.xml new file mode 100644 index 0000000000..da3142b54e --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_media_settings_security.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Ochrona" name="Media Settings Security"> + <check_box initial_value="false" label="Dostęp dozwolony tylko dla wybranych URL" name="whitelist_enable"/> + <text name="home_url_fails_some_items_in_whitelist"> + Wejścia na stronę WWW, które się nie powiodły są zaznaczone: + </text> + <button label="Dodaj" name="whitelist_add"/> + <button label="Usuń" name="whitelist_del"/> + <text name="home_url_fails_whitelist"> + UWAGA: WWW wyszczególnione w Ogólne nie przeszły Białej Listy. Została ona wyłączona dopóki poprawny zapis nie zostanie dodany. + </text> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_my_profile.xml b/indra/newview/skins/default/xui/pl/panel_my_profile.xml new file mode 100644 index 0000000000..7ca762b825 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_my_profile.xml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Profil" name="panel_profile"> + <string name="no_partner_text" value="Żadne"/> + <string name="no_group_text" value="Żadne"/> + <string name="RegisterDateFormat"> + [REG_DATE] ([AGE]) + </string> + <layout_stack name="layout"> + <layout_panel name="profile_stack"> + <scroll_container name="profile_scroll"> + <panel name="scroll_content_panel"> + <panel name="second_life_image_panel"> + <icon label="" name="2nd_life_edit_icon" tool_tip="Kliknij przycisk Edytuj Profil by zmienić zdjęcie"/> + <text name="title_sl_descr_text" value="[SECOND_LIFE]:"/> + </panel> + <panel name="first_life_image_panel"> + <icon label="" name="real_world_edit_icon" tool_tip="Kliknij przycisk Edytuj Profil by zmienić zdjęcie"/> + <text name="title_rw_descr_text" value="Życie#1:"/> + </panel> + <text name="title_member_text" value="Urodziny:"/> + <text name="title_acc_status_text" value="Konto:"/> + <text name="title_partner_text" value="Partner:"/> + <panel name="partner_data_panel"> + <name_box initial_value="(przetwarzanie)" name="partner_text"/> + </panel> + <text name="title_groups_text" value="Grupy:"/> + </panel> + </scroll_container> + </layout_panel> + <layout_panel name="profile_me_buttons_panel"> + <button label="Edytuj Profil" name="edit_profile_btn" tool_tip="Edytuj swoje dane"/> + <button label="Edytuj Wygląd" name="edit_appearance_btn" tool_tip="Stwórz/edytuj swój wygląd: dane fizyczne, ubrania itp."/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_navigation_bar.xml b/indra/newview/skins/default/xui/pl/panel_navigation_bar.xml new file mode 100644 index 0000000000..b01e686c41 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_navigation_bar.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="navigation_bar"> + <panel name="navigation_panel"> + <pull_button name="back_btn" tool_tip="Wróć do poprzedniej lokalizacji"/> + <pull_button name="forward_btn" tool_tip="Idź do następnej lokalizacji"/> + <button name="home_btn" tool_tip="Teleportuj do miejsca startu"/> + <location_input label="Lokalizacja" name="location_combo"/> + <search_combo_box label="Szukaj" name="search_combo_box" tool_tip="Szukaj"> + <combo_editor label="Szukaj [SECOND_LIFE]" name="search_combo_editor"/> + </search_combo_box> + </panel> + <favorites_bar name="favorite" tool_tip="Przeciągnij swoje landmarki tutaj by szybko dostać się do swoich ulubionych miejsc w Second Life!"> + <label name="favorites_bar_label" tool_tip="Przeciągnij swoje landmarki tutaj by szybko dostać się do swoich ulubionych miejsc w Second Life!"> + Pasek Ulubionych + </label> + <chevron_button name=">>" tool_tip="Pokaż więcej Moich Ulubionych"/> + </favorites_bar> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_nearby_chat.xml b/indra/newview/skins/default/xui/pl/panel_nearby_chat.xml new file mode 100644 index 0000000000..bcecaeabb3 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_nearby_chat.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<!-- All our XML is utf-8 encoded. --> +<panel name="nearby_chat"> + <panel name="chat_caption"> + <text name="sender_name"> + CZAT LOKALNY + </text> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/pl/panel_nearby_chat_bar.xml new file mode 100644 index 0000000000..2d1decd960 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_nearby_chat_bar.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="chat_bar"> + <string name="min_width"> + 192 + </string> + <string name="max_width"> + 320 + </string> + <line_editor label="Kliknij tutaj aby rozmawiać." name="chat_box" tool_tip="Naciśnij Enter aby mówić, Ctrl + Enter aby krzyknąć"/> + <button name="show_nearby_chat" tool_tip="Pokazuje/ukrywa pobliski Czat"/> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_nearby_media.xml b/indra/newview/skins/default/xui/pl/panel_nearby_media.xml new file mode 100644 index 0000000000..a05c0d856f --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_nearby_media.xml @@ -0,0 +1,67 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="nearby_media"> + <string name="empty_item_text"> + <empty> + </string> + <string name="parcel_media_name"> + Strumień Mediów Posiadłości + </string> + <string name="parcel_audio_name"> + Strumień Audio Posiadłości + </string> + <string name="playing_suffix"> + (odtwarzanie) + </string> + <panel name="minimized_controls"> + <button label="Zatrzymaj" name="all_nearby_media_disable_btn" tool_tip="Wyłącz wszystkie media w pobliżu"/> + <button label="Włącz" name="all_nearby_media_enable_btn" tool_tip="Włącz wszystkie media w pobliżu"/> + <button name="open_prefs_btn" tool_tip="Uruchom preferencje medialne"/> + <button label="Więcej >>" label_selected="Mniej <<" name="more_less_btn" tool_tip="Zaawansowane"/> + </panel> + <panel name="nearby_media_panel"> + <text name="nearby_media"> + Media w pobliżu + </text> + <text name="show"> + Pokaż: + </text> + <combo_box name="show_combo"> + <combo_box.item label="Wszystkie" name="All"/> + <combo_box.item label="Na obecnej Parceli" name="WithinParcel"/> + <combo_box.item label="Poza Posiadłością" name="OutsideParcel"/> + <combo_box.item label="Na innych awatarach" name="OnOthers"/> + </combo_box> + <scroll_list name="media_list"> + <scroll_list.columns label="Dokładność" name="media_proximity"/> + <scroll_list.columns label="Widoczność" name="media_visibility"/> + <scroll_list.columns label="Klasa" name="media_class"/> + <scroll_list.columns label="Nazwa" name="media_name"/> + <scroll_list.columns label="Debugowanie" name="media_debug"/> + </scroll_list> + <panel name="media_controls_panel"> + <layout_stack name="media_controls"> + <layout_panel name="stop"> + <button name="stop_btn" tool_tip="Zatrzymaj wybrane media"/> + </layout_panel> + <layout_panel name="play"> + <button name="play_btn" tool_tip="Odtwarzaj wybrane media"/> + </layout_panel> + <layout_panel name="pause"> + <button name="pause_btn" tool_tip="Zatrzymaj wybrane media"/> + </layout_panel> + <layout_panel name="volume_slider_ctrl"> + <slider_bar initial_value="0.5" name="volume_slider" tool_tip="Regulacja audio dla wybranych mediów"/> + </layout_panel> + <layout_panel name="mute"> + <button name="mute_btn" tool_tip="Wycisz audio wybranych mediów"/> + </layout_panel> + <layout_panel name="zoom"> + <button name="zoom_btn" tool_tip="Przybliż do wybranych mediów"/> + </layout_panel> + <layout_panel name="unzoom"> + <button name="unzoom_btn" tool_tip="Oddal od wybranych mediów"/> + </layout_panel> + </layout_stack> + </panel> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_notes.xml b/indra/newview/skins/default/xui/pl/panel_notes.xml new file mode 100644 index 0000000000..35cb7e1bce --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_notes.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Notatki & Prywatność" name="panel_notes"> + <layout_stack name="layout"> + <panel name="notes_stack"> + <scroll_container name="profile_scroll"> + <panel name="profile_scroll_panel"> + <text name="status_message" value="Notatki:"/> + <text name="status_message2" value="Pozwól tej osobie na:"/> + <check_box label="Widzenie mojego statusu" name="status_check"/> + <check_box label="Lokalizowanie mnie na mapie" name="map_check"/> + <check_box label="Edytowanie, kasowanie lub zabieranie moich obiektów" name="objects_check"/> + </panel> + </scroll_container> + </panel> + <panel name="notes_buttons_panel"> + <button label="Dodaj do znajomych" name="add_friend" tool_tip="Zaoferuj znajomość Rezydentowi"/> + <button label="IM" name="im" tool_tip="Otwórz wiadomości IM"/> + <button label="Dzwoń" name="call" tool_tip="Zadzwoń do Rezydenta"/> + <button label="Mapa" name="show_on_map_btn" tool_tip="Pokaż Rezydenta na mapie"/> + <button label="Teleportuj" name="teleport" tool_tip="Teleportuj"/> + </panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_online_status.xml b/indra/newview/skins/default/xui/pl/panel_online_status.xml new file mode 100644 index 0000000000..fdc489f375 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_online_status.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="friend_online_status" name="friend_online_status"/> diff --git a/indra/newview/skins/default/xui/pl/panel_online_status_toast.xml b/indra/newview/skins/default/xui/pl/panel_online_status_toast.xml new file mode 100644 index 0000000000..fdc489f375 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_online_status_toast.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="friend_online_status" name="friend_online_status"/> diff --git a/indra/newview/skins/default/xui/pl/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/pl/panel_outfits_inventory.xml index 162df37e52..5e7fd46754 100644 --- a/indra/newview/skins/default/xui/pl/panel_outfits_inventory.xml +++ b/indra/newview/skins/default/xui/pl/panel_outfits_inventory.xml @@ -1,7 +1,14 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="Outfits"> - <accordion name="outfits_accordion"> - <accordion_tab name="tab_cof" title="Aktualne Ubranie"/> - <accordion_tab name="tab_outfits" title="Moje Ubrania"/> - </accordion> +<panel label="Rzeczy" name="Outfits"> + <tab_container name="appearance_tabs"> + <inventory_panel label="MOJE UBRANIA" name="outfitslist_tab"/> + <inventory_panel label="ZAŁOŻONE" name="cof_tab"/> + </tab_container> + <panel name="bottom_panel"> + <button name="options_gear_btn" tool_tip="Pokaż opcje dodatkowe"/> + <dnd_button name="trash_btn" tool_tip="Usuń zaznaczony obiekt"/> + <button label="Zapisz Ubranie" name="make_outfit_btn" tool_tip="Zapisz wygląd jako ubranie"/> + <button label="Ubierz" name="wear_btn" tool_tip="Ubierz wybrany obiekt"/> + <button label="M" name="look_edit_btn"/> + </panel> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_outfits_inventory_gear_default.xml b/indra/newview/skins/default/xui/pl/panel_outfits_inventory_gear_default.xml new file mode 100644 index 0000000000..5b77c390ca --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_outfits_inventory_gear_default.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<menu name="menu_gear_default"> + <menu_item_call label="Zastąp Obecne Ubranie" name="wear"/> + <menu_item_call label="Dodaj do Obecnego Ubrania" name="add"/> + <menu_item_call label="Usuń z Obecnego Ubrania" name="remove"/> + <menu_item_call label="Zmień nazwę" name="rename"/> + <menu_item_call label="Usuń Link" name="remove_link"/> + <menu_item_call label="Usuń Ubranie" name="delete"/> +</menu> diff --git a/indra/newview/skins/default/xui/pl/panel_people.xml b/indra/newview/skins/default/xui/pl/panel_people.xml index ff65cd2abb..5ea5356c60 100644 --- a/indra/newview/skins/default/xui/pl/panel_people.xml +++ b/indra/newview/skins/default/xui/pl/panel_people.xml @@ -3,17 +3,18 @@ <panel label="Ludzie" name="people_panel"> <string name="no_people" value="Brak ludzi"/> <string name="no_one_near" value="Nikogo w pobliżu"/> - <string name="no_friends_online" value="Brak dostępnych przyjaciół"/> - <string name="no_friends" value="Brak przyjaciół"/> - <string name="no_groups" value="Brak grup"/> + <string name="no_friends_online" value="Brak dostępnych Znajomych"/> + <string name="no_friends" value="Brak Znajomych"/> <string name="people_filter_label" value="Filtruj Ludzi"/> <string name="groups_filter_label" value="Filtruj Grupy"/> + <string name="no_filtered_groups_msg" value="[secondlife:///app/search/groups Może spróbuj odnaleźć Grupę korzystając z Szukaj?]"/> + <string name="no_groups_msg" value="[secondlife:///app/search/groups Spróbuj wyszukać grupy aby do nich dołączyć.]"/> <filter_editor label="Filtr" name="filter_input"/> <tab_container name="tabs"> <panel label="W POBLIŻU" name="nearby_panel"> <panel label="bottom_panel" name="bottom_panel"> <button name="nearby_view_sort_btn" tool_tip="Opcje"/> - <button name="add_friend_btn" tool_tip="Dodaj wybranych Rezydentów do swojej listy znajomych"/> + <button name="add_friend_btn" tool_tip="Dodaj wybranego Rezydenta do Znajomych"/> </panel> </panel> <panel label="ZNAJOMI" name="friends_panel"> @@ -26,6 +27,10 @@ <button name="add_btn" tool_tip="Zaproponuj znajomość"/> <button name="del_btn" tool_tip="Usuń wybraną osobę ze swojej listy znajomych"/> </panel> + <text name="no_friends_msg"> + By dodać nową znajomość skorzystaj ze strony [secondlife:///app/search/people ogólne wyszukiwanie] lub kliknij prawym przyciskiem myszki na Rezydenta by wysłać mu zaproszenie. +Jeżeli szukasz ludzi, z którymi można się spotkać, kliknij tutaj [secondlife:///app/worldmap skorzystaj z mapy]. + </text> </panel> <panel label="GRUPY" name="groups_panel"> <panel label="bottom_panel" name="bottom_panel"> @@ -37,17 +42,18 @@ <panel label="OSTATNIE" name="recent_panel"> <panel label="bottom_panel" name="bottom_panel"> <button name="recent_viewsort_btn" tool_tip="Opcje"/> - <button name="add_friend_btn" tool_tip="Zaproponuj znajomość"/> + <button name="add_friend_btn" tool_tip="Dodaj wybranego Rezydenta do Znajomych"/> </panel> </panel> </tab_container> <panel name="button_bar"> - <button label="Profil" name="view_profile_btn" tool_tip="Pokaż grafiki, grupy oraz inne informacje dostępne o Rezydentach"/> + <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"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_pick_info.xml b/indra/newview/skins/default/xui/pl/panel_pick_info.xml new file mode 100644 index 0000000000..0454ecc430 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_pick_info.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="panel_pick_info"> + <text name="title" value="Info o Ulubionych"/> + <scroll_container name="profile_scroll"> + <panel name="scroll_content_panel"> + <text name="pick_name" value="[name]"/> + <text name="pick_location" value="[loading...]"/> + <text name="pick_desc" value="[description]"/> + </panel> + </scroll_container> + <panel name="buttons"> + <button label="Teleportuj" name="teleport_btn"/> + <button label="Mapa" name="show_on_map_btn"/> + <button label="Edytuj" name="edit_btn"/> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_place_profile.xml b/indra/newview/skins/default/xui/pl/panel_place_profile.xml new file mode 100644 index 0000000000..3714a141db --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_place_profile.xml @@ -0,0 +1,111 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="place_profile"> + <string name="on" value="Włącz"/> + <string name="off" value="Wyłącz"/> + <string name="anyone" value="Każdy"/> + <string name="available" value="dostępny"/> + <string name="allocated" value="przydzielony"/> + <string name="title_place" value="Profil Miejsca"/> + <string name="title_teleport_history" value="Historia teleportacji"/> + <string name="not_available" value="(brak)"/> + <string name="unknown" value="(nieznany)"/> + <string name="public" value="(publiczny)"/> + <string name="none_text" value="(żaden)"/> + <string name="sale_pending_text" value="(Sprzedaż w Toku Realizacji)"/> + <string name="group_owned_text" value="(Własność Grupy)"/> + <string name="price_text" value="L$"/> + <string name="area_text" value="m²"/> + <string name="all_residents_text" value="Każdemu"/> + <string name="group_text" value="Grupie"/> + <string name="can_resell"> + Posiadłość zakupiona w tym regionie może być odsprzedana. + </string> + <string name="can_not_resell"> + Posiadłość zakupiona w tym regionie nie może być odsprzedana. + </string> + <string name="can_change"> + Posiadłość zakupiona w tym regionie może być łączona/dzielona. + </string> + <string name="can_not_change"> + Posiadłość zakupiona w tym regionie nie może być łączona/dzielona. + </string> + <string name="server_update_text"> + Informacje o tym miejscu nie będą dostępne bez aktualizacji serwera. + </string> + <string name="server_error_text"> + Informacje o tym miejscu są obecnie niedostępne, spróbuj później. + </string> + <string name="server_forbidden_text"> + Dostęp do informacji o tym miejscu jest ograniczony. Zweryfikuj swoje przywileje z właścicielem posiadłości. + </string> + <string name="acquired_date"> + [wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local] + </string> + <button name="back_btn" tool_tip="Cofnij"/> + <text name="title" value="Profil Miejsca"/> + <scroll_container name="place_scroll"> + <panel name="scrolling_panel"> + <text name="owner_label" value="Właściciel:"/> + <text name="maturity_value" value="nieznany"/> + <accordion name="advanced_info_accordion"> + <accordion_tab name="parcel_characteristics_tab" title="Posiadłość"> + <panel name="parcel_characteristics_panel"> + <text name="rating_label" value="Rodzaj:"/> + <text name="rating_value" value="nieznane"/> + <text name="voice_label" value="Komunikacja Głosowa:"/> + <text name="voice_value" value="Włączone"/> + <text name="fly_label" value="Lataj:"/> + <text name="fly_value" value="Włączone"/> + <text name="push_label" value="Popchnięcia:"/> + <text name="push_value" value="Wyłączone"/> + <text name="build_label" value="Budowanie:"/> + <text name="build_value" value="Włączone"/> + <text name="scripts_label" value="Skrypty:"/> + <text name="scripts_value" value="Włączone"/> + <text name="damage_label" value="Zniszczenia:"/> + <text name="damage_value" value="Wyłączone"/> + <button label="O Posiadłości" name="about_land_btn"/> + </panel> + </accordion_tab> + <accordion_tab name="region_information_tab" title="Region"> + <panel name="region_information_panel"> + <text name="region_name_label" value="Region:"/> + <text name="region_name" value="Mooseland"/> + <text name="region_type_label" value="Typ:"/> + <text name="region_type" value="Moose"/> + <text name="region_rating_label" value="Rodzaj:"/> + <text name="region_rating" value="Adult"/> + <text name="region_owner_label" value="Właściciel:"/> + <text name="region_owner" value="moose Van Moose"/> + <text name="region_group_label" value="Grupa:"/> + <text name="region_group"> + The Mighty Moose of mooseville soundvillemoose + </text> + <button label="Region/Majątek" name="region_info_btn"/> + </panel> + </accordion_tab> + <accordion_tab name="estate_information_tab" title="Majątek"> + <panel name="estate_information_panel"> + <text name="estate_name_label" value="Majątek:"/> + <text name="estate_rating_label" value="Rodzaj:"/> + <text name="estate_owner_label" value="Właściciel:"/> + <text name="covenant_label" value="Umowa:"/> + </panel> + </accordion_tab> + <accordion_tab name="sales_tab" title="Na Sprzedaż"> + <panel name="sales_panel"> + <text name="sales_price_label" value="Cena:"/> + <text name="area_label" value="Powierzchnia:"/> + <text name="traffic_label" value="Ruch:"/> + <text name="primitives_label" value="Primy:"/> + <text name="parcel_scripts_label" value="Skrypty:"/> + <text name="terraform_limits_label" value="Ograniczenia terraformingu:"/> + <text name="subdivide_label" value="Podziel/Złącz:"/> + <text name="resale_label" value="Możliwość sprzedaży:"/> + <text name="sale_to_label" value="Na sprzedaż:"/> + </panel> + </accordion_tab> + </accordion> + </panel> + </scroll_container> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_places.xml b/indra/newview/skins/default/xui/pl/panel_places.xml new file mode 100644 index 0000000000..c7f3f00d98 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_places.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Miejsca" name="places panel"> + <string name="landmarks_tab_title" value="MOJE LANDMARKI"/> + <string name="teleport_history_tab_title" value="HISTORIA TELEPORTÓW"/> + <filter_editor label="Filtruj Moje Miejsca" name="Filter"/> + <panel name="button_panel"> + <button label="Teleportuj" name="teleport_btn" tool_tip="Teleportuj do wybranego miejsca"/> + <button label="Mapa" name="map_btn"/> + <button label="Edytuj" name="edit_btn" tool_tip="Edytuj informacje landmarka"/> + <button label="▼" name="overflow_btn" tool_tip="Pokaż opcje dodatkowe"/> + <button label="Zamknij" name="close_btn"/> + <button label="Anuluj" name="cancel_btn"/> + <button label="Zapisz" name="save_btn"/> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/pl/panel_preferences_advanced.xml index c3bd66274b..9905bbbc18 100644 --- a/indra/newview/skins/default/xui/pl/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/pl/panel_preferences_advanced.xml @@ -1,48 +1,32 @@ <?xml version="1.0" encoding="utf-8"?> -<panel name="advanced"> - <panel.string name="resolution_format"> - [RES_X] x [RES_Y] - </panel.string> +<panel label="Zaawansowane" name="advanced"> <panel.string name="aspect_ratio_text"> [NUM]:[DEN] </panel.string> - <check_box label="Czat Chmurkowy" name="bubble_text_chat"/> - <color_swatch name="background" tool_tip="Wybierz kolor czatu w chmurce"/> - <slider label="Intensywność" name="bubble_chat_opacity"/> - <text name="AspectRatioLabel1" tool_tip="width / height"> - Proporcje - </text> - <combo_box name="aspect_ratio" tool_tip="width / height"> - <combo_box.item label="4:3 (Standardowy CRT)" name="item1"/> - <combo_box.item label="5:4 (1280x1024 LCD)" name="item2"/> - <combo_box.item label="8:5 (Panoramiczny)" name="item3"/> - <combo_box.item label="16:9 (Panoramiczny)" name="item4"/> - </combo_box> - <check_box label="Automatyczne Wykrywanie" name="aspect_auto_detect"/> - <text name="heading1"> - Kamery: - </text> - <slider label="Kąt Widoku" name="camera_fov"/> + <panel.string name="middle_mouse"> + Środkowy klawisz myszki + </panel.string> + <slider label="Kąt widoku" name="camera_fov"/> <slider label="Odległość" name="camera_offset_scale"/> <text name="heading2"> - Automatyczne pozycjonowanie dla: + Automatyczna pozycja dla: </text> <check_box label="Buduj/Edytuj" name="edit_camera_movement" tool_tip="Używaj automatycznego pozycjonowania kamery aktywując i deaktywując tryb edycji"/> <check_box label="Wygląd" name="appearance_camera_movement" tool_tip="Używaj automatycznego pozycjonowania kamery podczas trybu edycji"/> - <text name="heading3"> - Awatary: - </text> <check_box label="Pokaż w trybie widoku panoramicznego" name="first_person_avatar_visible"/> <check_box label="Aktywacja klawiszy strzałek do poruszania awatarem" name="arrow_keys_move_avatar_check"/> <check_box label="kliknij-kliknij-przytrzymaj, aby uruchomić" name="tap_tap_hold_to_run"/> <check_box label="Poruszaj ustami awatara kiedy używana jest komunikacja głosowa" name="enable_lip_sync"/> - <check_box label="Pokaż błędy skryptów" name="show_script_errors"/> + <check_box label="Czat Chmurkowy" name="bubble_text_chat"/> + <slider label="Intensywność" name="bubble_chat_opacity"/> + <color_swatch name="background" tool_tip="Wybierz kolor czatu w chmurce"/> + <check_box label="Pokaż błędy skryptu w:" name="show_script_errors"/> <radio_group name="show_location"> - <radio_item label="W czacie" name="0"/> - <radio_item label="W oknie" name="1"/> + <radio_item label="Czat Lokalny" name="0"/> + <radio_item label="Osobne okno:" name="1"/> </radio_group> - <check_box label="Uruchom tryb mówienia przez mikrofon podczas nasiśnięcia przycisku Mów:" name="push_to_talk_toggle_check" tool_tip="Jeżeli jesteś w trybie mówienia, w celu aktywacji lub deaktywacji swojego mikrofonu wybierz i wyłącz przycisk Mów tylko raz. Jeżeli nie jesteś w trybie mówienia, mikrofon przesyła Twój głos tylko w momencie aktywacji pełnej przycisku Mów."/> + <check_box label="Włącz/Wyłącz głos:" name="push_to_talk_toggle_check" tool_tip="Jeżeli jesteś w trybie mówienia, w celu aktywacji lub deaktywacji swojego mikrofonu wybierz i wyłącz przycisk Mów tylko raz. Jeżeli nie jesteś w trybie mówienia, mikrofon przesyła Twój głos tylko w momencie aktywacji pełnej przycisku Mów."/> <line_editor label="Naciśnij Mów by rozpocząć komunikację głosową" name="modifier_combo"/> <button label="wybierz Klawisz" name="set_voice_hotkey_button"/> - <button label="Środkowy Przycisk Myszki" name="set_voice_middlemouse_button"/> + <button label="Środkowy Przycisk Myszki" name="set_voice_middlemouse_button" tool_tip="Zresetuj do środkowego przycisku myszy"/> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/pl/panel_preferences_alerts.xml index 7195c30f20..e843342aa2 100644 --- a/indra/newview/skins/default/xui/pl/panel_preferences_alerts.xml +++ b/indra/newview/skins/default/xui/pl/panel_preferences_alerts.xml @@ -4,11 +4,11 @@ Powiadom mnie: </text> <check_box label="Kiedy wydaję lub otrzymuję L$" name="notify_money_change_checkbox"/> - <check_box label="Kiedy moi znajomi się logują lub wylogowują" name="friends_online_notify_checkbox"/> + <check_box label="Kiedy moi Znajomi zalogowują się i wylogowują" name="friends_online_notify_checkbox"/> <text name="show_label"> - Zawsze pokazuj te powiadomienia: + Zawsze pokazuj: </text> <text name="dont_show_label"> - Nigdy nie pokazuj tych powiadomień: + Nie pokazuj: </text> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_chat.xml b/indra/newview/skins/default/xui/pl/panel_preferences_chat.xml index 5599c21686..ae13cf662f 100644 --- a/indra/newview/skins/default/xui/pl/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/pl/panel_preferences_chat.xml @@ -1,10 +1,16 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Czat/IM" name="chat"> + <text name="font_size"> + Rozmiar czcionki: + </text> <radio_group name="chat_font_size"> - <radio_item label="Mała" name="radio"/> - <radio_item label="Średnia" name="radio2"/> - <radio_item label="Duża" name="radio3"/> + <radio_item label="Mała" name="radio" value="0"/> + <radio_item label="Średnia" name="radio2" value="1"/> + <radio_item label="Duża" name="radio3" value="2"/> </radio_group> + <text name="font_colors"> + Kolor czcionki: + </text> <color_swatch label="Ty" name="user"/> <text name="text_box1"> Ja @@ -39,4 +45,14 @@ </text> <check_box initial_value="true" label="Używaj animacji podczas pisania" name="play_typing_animation"/> <check_box label="Wysyłaj wszystkie wiadomości (IM) na moją skrzynkę pocztową kiedy jestem niedostępny" name="send_im_to_email"/> + <text name="show_ims_in_label"> + Pokaż wiadomości (IM) w: + </text> + <text name="requires_restart_label"> + (restart wymagany) + </text> + <radio_group name="chat_window" tool_tip="Pokaż wiadomości IM osobno lub razem (restart wymagany)"> + <radio_item label="Osobne okna" name="radio" value="0"/> + <radio_item label="Etykiety" name="radio2" value="1"/> + </radio_group> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_general.xml b/indra/newview/skins/default/xui/pl/panel_preferences_general.xml index 97b4975f29..e7134f23c3 100644 --- a/indra/newview/skins/default/xui/pl/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/pl/panel_preferences_general.xml @@ -1,91 +1,67 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Ogólne" name="general_panel"> - <combo_box name="start_location_combo"> - <combo_box.item name="MyHome" tool_tip="Domyślnie loguj mnie do mojego miejsca startu." label="Mój Start"/> - <combo_box.item name="MyLastLocation" tool_tip="Domyślnie loguj mnie do ostatnio odwiedzonego miejsca." label="Ostatnie Miejsce"/> - </combo_box> - <check_box label="Pokaż Miejsce Startu podczas Logowania" name="show_location_checkbox"/> - <combo_box name="fade_out_combobox"> - <combo_box.item name="Never" label="Nigdy"/> - <combo_box.item name="Show Temporarily" label="Tymczasowo"/> - <combo_box.item name="Always" label="Zawsze"/> - </combo_box> - <check_box label="Używaj Małych Imion Awatarów" name="small_avatar_names_checkbox"/> - <check_box label="Nie Wyświetlaj Mojego Imienia" name="show_my_name_checkbox"/> - <text name="group_titles_textbox"> - Tytuły Grupowe: - </text> - <check_box label="Nie Wyświetlaj Żadnych Tytułów Grupowych" name="show_all_title_checkbox"/> - <check_box label="Nie Wyświetlaj Mojego Tytułu Grupowego" name="show_my_title_checkbox"/> - <color_swatch label="" name="effect_color_swatch" tool_tip="Selekcja koloru"/> - <text name="UI Size:"> - Wymiar Interfejsu (UI): + <text name="language_textbox"> + Język: </text> - <slider name="ui_scale_slider"/> - <check_box label="Używaj Skali Nizależnej od Rozdzielczości" name="ui_auto_scale"/> - <spinner label="Zasypiaj w:" name="afk_timeout_spinner"/> - <check_box label="Powiadamiaj o Wydatkach i Zarobkach (L$)" name="notify_money_change_checkbox"/> - <text name="maturity_desired_label"> - Treść: + <combo_box name="language_combobox"> + <combo_box.item label="Domyślny" name="System Default Language"/> + <combo_box.item label="English (Angielski)" name="English"/> + <combo_box.item label="Dansk (Duński) - Beta" name="Danish"/> + <combo_box.item label="Deutsch (Niemiecki) - Beta" name="Deutsch(German)"/> + <combo_box.item label="Español (Hiszpański) - Beta" name="Spanish"/> + <combo_box.item label="Français (Francuski) - Beta" name="French"/> + <combo_box.item label="Italiano (Włoski) - Beta" name="Italian"/> + <combo_box.item label="Nederlands (Niderlandzki) - Beta" name="Dutch"/> + <combo_box.item label="Polski - Beta" name="Polish"/> + <combo_box.item label="Portugués (Portugalski) - Beta" name="Portugese"/> + <combo_box.item label="日本語 (Japoński) - Beta" name="(Japanese)"/> + </combo_box> + <text name="language_textbox2"> + (Restart wymagany) </text> <text name="maturity_desired_prompt"> Chcę uzyskać dostęp do miejsc zakwalifikowanych jako: </text> + <text name="maturity_desired_textbox"/> <combo_box name="maturity_desired_combobox"> - <combo_box.item name="Desired_Adult" label="'PG', 'Mature' oraz 'Adult'"/> - <combo_box.item name="Desired_Mature" label="'PG' i 'Mature'"/> - <combo_box.item name="Desired_PG" label="'PG'"/> + <combo_box.item label="'PG', 'Mature' oraz 'Adult'" name="Desired_Adult"/> + <combo_box.item label="'PG' i 'Mature'" name="Desired_Mature"/> + <combo_box.item label="'PG'" name="Desired_PG"/> </combo_box> - <text name="maturity_desired_textbox"> - 'PG' - </text> <text name="start_location_textbox"> Miejsce Startu: </text> - <text name="show_names_textbox"> + <combo_box name="start_location_combo"> + <combo_box.item label="Ostatnie Miejsce" name="MyLastLocation" tool_tip="Domyślnie loguj mnie do ostatnio odwiedzonego miejsca."/> + <combo_box.item label="Mój Start" name="MyHome" tool_tip="Domyślnie loguj mnie do mojego miejsca startu."/> + </combo_box> + <check_box initial_value="true" label="Pokaż przy zalogowaniu" name="show_location_checkbox"/> + <text name="name_tags_textbox"> Imiona: </text> + <radio_group name="Name_Tag_Preference"> + <radio_item label="Wyłącz" name="radio" value="0"/> + <radio_item label="Włącz" name="radio2" value="1"/> + <radio_item label="Pokaż w skrócie" name="radio3" value="2"/> + </radio_group> + <check_box label="Wyświetl moje imię:" name="show_my_name_checkbox1"/> + <check_box initial_value="true" label="Używaj Małych Imion Awatarów" name="small_avatar_names_checkbox"/> + <check_box label="Wyświetl Tytuł Grupowy" name="show_all_title_checkbox1"/> <text name="effects_color_textbox"> - Kolor dla Moich Efektów: - </text> - <text name="seconds_textbox"> - sekund - </text> - <text name="crash_report_textbox"> - Zgłaszanie Błędów: - </text> - <text name="language_textbox"> - Język: + Kolor moich efektów: </text> - <text name="language_textbox2"> - (Restart wymagany) + <text name="title_afk_text"> + Zasypiaj w czasie: </text> - <string name="region_name_prompt"> - <Wpisz Region> - </string> - <combo_box name="crash_behavior_combobox"> - <combo_box.item name="Askbeforesending" label="Pytaj przed wysłaniem"/> - <combo_box.item name="Alwayssend" label="Zawsze wysyłaj"/> - <combo_box.item name="Neversend" label="Nigdy nie wysyłaj"/> - </combo_box> - <combo_box name="language_combobox"> - <combo_box.item name="System Default Language" label="Domyślny"/> - <combo_box.item name="English" label="English (Angielski)"/> - <combo_box.item name="Danish" label="Dansk (Duński) - Beta"/> - <combo_box.item name="Deutsch(German)" label="Deutsch (Niemiecki) - Beta"/> - <combo_box.item name="Spanish" label="Español (Hiszpański) - Beta"/> - <combo_box.item name="French" label="Français (Francuski) - Beta"/> - <combo_box.item name="Italian" label="Italiano (Włoski) - Beta"/> - <combo_box.item name="Hungarian" label="Magyar (Węgierski) - Beta"/> - <combo_box.item name="Dutch" label="Nederlands (Niderlandzki) - Beta"/> - <combo_box.item name="Polish" label="Polski - Beta"/> - <combo_box.item name="Portugese" label="Portugués (Portugalski) - Beta"/> - <combo_box.item name="Russian" label="Русский (Rosyjski) - Beta"/> - <combo_box.item name="Turkish" label="Türkçe (Turecki) - Beta"/> - <combo_box.item name="Ukrainian" label="Українська (Ukraiński) - Beta"/> - <combo_box.item name="Chinese" label="中文 (简体) (Chiński) - Beta"/> - <combo_box.item name="(Japanese)" label="日本語 (Japoński) - Beta"/> - <combo_box.item name="(Korean)" label="한국어 (Koreański) - Beta"/> + <color_swatch label="" name="effect_color_swatch" tool_tip="Selekcja koloru"/> + <combo_box label="Czas Trybu Oddalenia:" name="afk"> + <combo_box.item label="2 minuty" name="item0"/> + <combo_box.item label="5 minut" name="item1"/> + <combo_box.item label="10 minut" name="item2"/> + <combo_box.item label="30 minut" name="item3"/> + <combo_box.item label="nigdy" name="item4"/> </combo_box> - <check_box label="Język znany publicznie" name="language_is_public" tool_tip="Pozwala obiektom w świecie poznać Twój wybór język."/> + <text name="text_box3"> + Odpowiedź w trybie pracy: + </text> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/pl/panel_preferences_graphics1.xml index ddd4c736d6..bc08e025dd 100644 --- a/indra/newview/skins/default/xui/pl/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/pl/panel_preferences_graphics1.xml @@ -1,42 +1,18 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Grafika" name="Display panel"> - <button label="?" name="GraphicsPreferencesHelpButton" /> - <check_box label="Uruchom Second Life w oknie" name="windowed mode" /> - <text_editor name="FullScreenInfo"> - Wyłączone = klient uruchamiany w trybie pełnoekranowym. - </text_editor> - <text name="WindowSizeLabel"> - Wymiary Okna: + <text name="UI Size:"> + UI rozmiar: </text> - <combo_box name="windowsize combo"> - <combo_box.item name="640x480" label="640x480" /> - <combo_box.item name="800x600" label="800x600" /> - <combo_box.item name="720x480" label="720x480 (NTSC)" /> - <combo_box.item name="768x576" label="768x576 (PAL)" /> - <combo_box.item name="1024x768" label="1024x768" /> - </combo_box> - <text name="DisplayResLabel"> - Rozdzielczość: - </text> - <text name="AspectRatioLabel1" tool_tip="width / height"> - Proporcje: - </text> - <combo_box name="aspect_ratio" tool_tip="width / height"> - <combo_box.item name="4:3(StandardCRT)" label="4:3 (Standardowy CRT)" /> - <combo_box.item name="5:4(1280x1024LCD)" label="5:4 (1280x1024 LCD)" /> - <combo_box.item name="8:5(Widescreen)" label="8:5 (Panoramiczny)" /> - <combo_box.item name="16:9(Widescreen)" label="16:9 (Panoramiczny)" /> - </combo_box> - <check_box label="Detekcja proporcji" name="aspect_auto_detect" /> - <text name="HigherText"> - Jakość i - </text> - <text name="QualityText"> - Prędkość: + <text name="QualitySpeed"> + Jakość i prędkość: </text> <text name="FasterText"> Prędkość </text> + <text name="BetterText"> + Lepiej + </text> + <slider label="" name="QualityPerformanceSelection"/> <text name="ShadersPrefText"> Niska </text> @@ -49,99 +25,82 @@ <text name="ShadersPrefText4"> Super </text> - <text name="HigherText2"> - Wyższa - </text> - <text name="QualityText2"> - Jakość - </text> - <slider label="" name="QualityPerformanceSelection" /> - <check_box label="Zaawansowane" name="CustomSettings" /> - <panel name="CustomGraphics Panel"> - <text name="ShadersText"> - Shadery: - </text> - <check_box label="Mapowanie Wypukłości i Połysk" name="BumpShiny" /> - <check_box label="Podstawowe Shadery" name="BasicShaders" - tool_tip="Wyłączenie tej opcji może naprawić błędy niektórych sterowników graficznych." /> - <check_box label="Shadery Atmosfery" name="WindLightUseAtmosShaders" /> - <check_box label="Odbicia w Wodzie" name="Reflections" /> - <text name="ReflectionDetailText"> - Ustawienia Odbić: - </text> - <radio_group name="ReflectionDetailRadio"> - <radio_item name="0" label="Teren i Drzewa" /> - <radio_item name="1" label="Obiekty Statyczne" /> - <radio_item name="2" label="Awatary i Obiekty" /> - <radio_item name="3" label="Wszystko" /> - </radio_group> - <text name="AvatarRenderingText"> - Prezentacja Awatarów: - </text> - <check_box label="Impostoryzacja Awatarowa" name="AvatarImpostors" /> - <check_box label="Skinning" name="AvatarVertexProgram" /> - <check_box label="Ubranie Awatarów" name="AvatarCloth" /> - <text name="DrawDistanceMeterText1"> - m - </text> - <text name="DrawDistanceMeterText2"> - m - </text> - <slider label="Głębia Rysowania:" name="DrawDistance" /> - <slider label="Liczba Cząsteczek:" name="MaxParticleCount" /> - <slider label="Jakość Post-Procesu:" name="RenderPostProcess" /> - <text name="MeshDetailText"> - Szczegóły Meszu: - </text> - <slider label=" Obiekty:" name="ObjectMeshDetail" /> - <slider label=" Elastyczne:" name="FlexibleMeshDetail" /> - <slider label=" Drzewa:" name="TreeMeshDetail" /> - <slider label=" Awatary:" name="AvatarMeshDetail" /> - <slider label=" Teren:" name="TerrainMeshDetail" /> - <slider label=" Niebo:" name="SkyMeshDetail" /> - <text name="PostProcessText"> - Mało - </text> - <text name="ObjectMeshDetailText"> - Mało - </text> - <text name="FlexibleMeshDetailText"> - Mało - </text> - <text name="TreeMeshDetailText"> - Mało - </text> - <text name="AvatarMeshDetailText"> - Mało - </text> - <text name="TerrainMeshDetailText"> - Mało - </text> - <text name="SkyMeshDetailText"> - Mało - </text> - <text name="LightingDetailText"> - Ustawienia Światła: - </text> - <radio_group name="LightingDetailRadio"> - <radio_item name="SunMoon" label="Tylko Słońce i Księżyc" /> - <radio_item name="LocalLights" label="Tylko Bliskie Światła" /> - </radio_group> - <text name="TerrainDetailText"> - Szczgóły Terenu: - </text> - <radio_group name="TerrainDetailRadio"> - <radio_item name="0" label="Mało" /> - <radio_item name="2" label="Dużo" /> - </radio_group> + <panel label="CustomGraphics" name="CustomGraphics Panel"> + <text name="ShadersText"> + Cieniowanie pixeli (shadery): + </text> + <check_box initial_value="true" label="Mapowanie Wypukłości i Połysk" name="BumpShiny"/> + <check_box initial_value="true" label="Podstawowe Shadery" name="BasicShaders" tool_tip="Wyłączenie tej opcji może naprawić błędy niektórych sterowników graficznych."/> + <check_box initial_value="true" label="Shadery Atmosfery" name="WindLightUseAtmosShaders"/> + <check_box initial_value="true" label="Refleksy w wodzie" name="Reflections"/> + <text name="ReflectionDetailText"> + Ustawienia refleksów: + </text> + <radio_group name="ReflectionDetailRadio"> + <radio_item label="Teren i drzewa" name="0"/> + <radio_item label="Obiekty Statyczne" name="1"/> + <radio_item label="Awatary i Obiekty" name="2"/> + <radio_item label="Wszystko" name="3"/> + </radio_group> + <text name="AvatarRenderingText"> + Rendering awatarów + </text> + <check_box initial_value="true" label="Impostoryzacja Awatarowa" name="AvatarImpostors"/> + <check_box initial_value="true" label="Rendering awatara przez GPU" name="AvatarVertexProgram"/> + <check_box initial_value="true" label="Oddzielne warstwy ubrań" name="AvatarCloth"/> + <slider label="Pole widzenia:" name="DrawDistance"/> + <text name="DrawDistanceMeterText2"> + m + </text> + <slider label="Liczba cząsteczek:" name="MaxParticleCount"/> + <slider label="Jakość Post-Procesu:" name="RenderPostProcess"/> + <text name="MeshDetailText"> + Szczególy obiektów: + </text> + <slider label=" Przedmioty:" name="ObjectMeshDetail"/> + <slider label=" Obiekty elastyczne:" name="FlexibleMeshDetail"/> + <slider label=" Drzewa:" name="TreeMeshDetail"/> + <slider label=" Awatary:" name="AvatarMeshDetail"/> + <slider label=" Teren:" name="TerrainMeshDetail"/> + <slider label=" Niebo:" name="SkyMeshDetail"/> + <text name="PostProcessText"> + Mało + </text> + <text name="ObjectMeshDetailText"> + Mało + </text> + <text name="FlexibleMeshDetailText"> + Mało + </text> + <text name="TreeMeshDetailText"> + Mało + </text> + <text name="AvatarMeshDetailText"> + Mało + </text> + <text name="TerrainMeshDetailText"> + Mało + </text> + <text name="SkyMeshDetailText"> + Mało + </text> + <text name="LightingDetailText"> + Ustawienia świateł: + </text> + <radio_group name="LightingDetailRadio"> + <radio_item label="Tylko Słońce i Księżyc" name="SunMoon" value="0"/> + <radio_item label="Tylko Bliskie Światła" name="LocalLights" value="1"/> + </radio_group> + <text name="TerrainDetailText"> + Szczegóły terenu: + </text> + <radio_group name="TerrainDetailRadio"> + <radio_item label="Niska" name="0"/> + <radio_item label="Wysoka" name="2"/> + </radio_group> </panel> - <button label="Ustawienia Domyślne" name="Defaults" /> - <button label="Ustawnia Sprzętowe" label_selected="Ustawienia Sprzętowe" - name="GraphicsHardwareButton" /> - <panel.string name="resolution_format"> - [RES_X] x [RES_Y] - </panel.string> - <panel.string name="aspect_ratio_text"> - [NUM]:[DEN] - </panel.string> + <button label="Zastosuj" label_selected="Zastosuj" name="Apply"/> + <button label="Zresetuj" name="Defaults"/> + <button label="Zaawansowane" name="Advanced"/> + <button label="Sprzęt" label_selected="Sprzęt" name="GraphicsHardwareButton"/> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/pl/panel_preferences_privacy.xml index d72f13fabd..9504019f79 100644 --- a/indra/newview/skins/default/xui/pl/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/pl/panel_preferences_privacy.xml @@ -3,7 +3,7 @@ <panel.string name="log_in_to_change"> Zaloguj się ponownie, aby zmienić </panel.string> - <button label="Wyczyść Historię" name="clear_cache"/> + <button label="Wyczyść Historię" name="clear_cache" tool_tip="Wyczyść obraz zapisu, ostatniej lokalizacji, historii teleportów, stron i bufor danych tekstur"/> <text name="cache_size_label_l"> (Miejsca, obrazy, przeglądarka internetowa, wyszukiwarka historii) </text> @@ -11,7 +11,6 @@ <check_box label="Możliwość wysyłania wiadomości prywatnej (IM) oraz rozmowy głosowej tylko dla znajomych i grup do których należę" name="voice_call_friends_only_check"/> <check_box label="Wyłącz mikrofon po zakończeniu rozmowy głosowej" name="auto_disengage_mic_check"/> <check_box label="Akceptuj Ciasteczka" name="cookies_enabled"/> - <check_box label="Zezwól na Automatyczne Uruchomianie Mediów Strumieniowych" name="autoplay_enabled"/> <text name="Logs:"> Logi: </text> @@ -19,7 +18,7 @@ <check_box label="Zapisuj logi wiadomości prywatnych (IM) na moim komputerze" name="log_instant_messages"/> <check_box label="Pokazuj czas" name="show_timestamps_check_im"/> <text name="log_path_desc"> - Pokazuj miejsce logu + Lokalizacja zapisu: </text> <button label="Przeglądaj" label_selected="Przeglądaj" name="log_path_button"/> <button label="Lista Zablokowanych" name="block_list"/> diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_setup.xml b/indra/newview/skins/default/xui/pl/panel_preferences_setup.xml index 1e2289b496..f74f4f2333 100644 --- a/indra/newview/skins/default/xui/pl/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/pl/panel_preferences_setup.xml @@ -1,31 +1,50 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Joystick i Kamera" name="Input panel"> - <text name=" Mouselook Options:"> - Widok Panoramiczny: +<panel label="Ustawienia" name="Input panel"> + <button label="Ustawienia Joysticka" name="joystick_setup_button"/> + <text name="Mouselook:"> + Widok panoramiczny: </text> - <text name=" Mouse Sensitivity:"> - Czułość Myszki: + <text name=" Mouse Sensitivity"> + Czułość Myszki </text> - <slider_bar name="mouse_sensitivity"/> - <check_box label="Zamień klawisze myszy" name="invert_mouse"/> - <text name=" Auto Fly Options:"> - Automatczne Latanie: + <slider name="mouse_sensitivity"/> + <check_box label="Zmień klawisze myszki" name="invert_mouse"/> + <text name="Network:"> + Sieć: </text> - <check_box label="Lataj/Ląduj Używając Klawiszy PgUp/PgDn" name="automatic_fly"/> - <text name=" Camera Options:"> - Ustawienia Kamery: + <text name="Maximum bandwidth"> + Maksymalna przepustowość </text> - <text name="camera_fov_label"> - Kąt Widoku Kamery: + <text name="text_box2"> + kbps </text> - <text name="Camera Follow Distance:"> - Dystans Kamery: + <check_box label="Port dedykowany dla aplikacji" name="connection_port_enabled"/> + <spinner label="Numer Portu:" name="connection_port"/> + <text name="cache_size_label_l"> + Rozmiar bufora danych </text> - <check_box label="Edycja - Automatyczny Ruch Kamery" name="edit_camera_movement" tool_tip="Używaj automatycznego ustawienia kamery podczas włączania i wyłączania trybu edycji"/> - <check_box label="Wygląd - Automatyczny Ruch Kamery" name="appearance_camera_movement" tool_tip="Używaj automatycznego ustawienia kamery w trybu edycji"/> - <text name="text2"> - Wyświetlanie Awatara: + <text name="text_box5"> + MB </text> - <check_box label="Awatar Widoczny w Trybie Panoramicznym" name="first_person_avatar_visible"/> - <button label="Ustawienia Joysticka" name="joystick_setup_button"/> + <text name="Cache location"> + Lokalizacja bufora danych: + </text> + <button label="Ustaw" label_selected="Ustaw" name="set_cache"/> + <button label="Zresetuj" label_selected="Zresetuj" name="reset_cache"/> + <text name="Web:"> + Internet: + </text> + <radio_group name="use_external_browser"> + <radio_item label="Użyj zewnętrznej przeglądarki (IE, Firefox, Safari)" name="external" tool_tip="Używaj zewnętrznej przeglądarki. Nie jest to rekomendowane w trybie pełnoekranowym." value="1"/> + <radio_item label="Używaj wbudowanej przeglądarki." name="internal" tool_tip="Używaj wbudowanej przeglądarki. Ta przeglądarka otworzy nowe okno w [APP_NAME]." value=""/> + </radio_group> + <check_box initial_value="prawda" label="Zezwalaj na wtyczki" name="browser_plugins_enabled"/> + <check_box initial_value="prawda" label="Akceptuj ciasteczka z Internetu" name="cookies_enabled"/> + <check_box initial_value="prawda" label="Zezwalaj na Javascript" name="browser_javascript_enabled"/> + <check_box initial_value="false" label="Używaj Serwera Proxy" name="web_proxy_enabled"/> + <text name="Proxy location"> + Lokalizacja Proxy: + </text> + <line_editor name="web_proxy_editor" tool_tip="Nazwa lub IP proxy, którego chcesz użyć"/> + <spinner label="Numer portu:" name="web_proxy_port"/> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_sound.xml b/indra/newview/skins/default/xui/pl/panel_preferences_sound.xml index f9b5d221a5..b69efeb77e 100644 --- a/indra/newview/skins/default/xui/pl/panel_preferences_sound.xml +++ b/indra/newview/skins/default/xui/pl/panel_preferences_sound.xml @@ -1,14 +1,21 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Dźwięki" name="Preference Media panel"> <slider label="Główny" name="System Volume"/> - <check_box initial_value="true" label="Wycisz podczas minimalizacji" name="mute_when_minimized"/> - <slider label="Otoczenie" name="Wind Volume"/> + <check_box initial_value="true" label="Wycisz dzwięk podczas minimalizacji okna" name="mute_when_minimized"/> <slider label="Interfejs" name="UI Volume"/> + <slider label="Otoczenie" name="Wind Volume"/> + <slider label="Efekty dźwiękowe" name="SFX Volume"/> + <slider label="Muzyka strumieniowa" name="Music Volume"/> + <check_box label="Odtwarzaj media audio" name="music_enabled"/> <slider label="Media" name="Media Volume"/> - <slider label="Efekty Dźwiękowe" name="SFX Volume"/> - <slider label="Muzyka Strumieniowa" name="Music Volume"/> - <check_box label="Głos" name="enable_voice_check"/> - <slider label="Głos" name="Voice Volume"/> + <check_box label="Odtwarzaj media" name="enable_media"/> + <slider label="Komunikacja Głosowa" name="Voice Volume"/> + <check_box label="Pozwól na rozmowy głosowe" name="enable_voice_check"/> + <check_box label="Automatycznie odtwarzaj media" name="media_auto_play_btn" tool_tip="Zaznacz tę funkcję by uruchomić automatyczne uruchamianie mediów" value="prawda"/> + <check_box label="Uruchom media załączone do innych awatarów" name="media_show_on_others_btn" tool_tip="Odznacz tę funkcję by ukryć media załączone to awatarów w publiżu" value="prawda"/> + <text name="voice_chat_settings"> + Ustawienia Komunikacji Głosowej + </text> <text name="Listen from"> Odtwarzaj z: </text> diff --git a/indra/newview/skins/default/xui/pl/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/pl/panel_prim_media_controls.xml new file mode 100644 index 0000000000..f10ce5ea4d --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_prim_media_controls.xml @@ -0,0 +1,79 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="MediaControlsPanel"> + <string name="min_width"> + 300 + </string> + <string name="min_height"> + 75 + </string> + <string name="zoom_medium_padding"> + 1.1 + </string> + <string name="top_world_view_avoid_zone"> + 50 + </string> + <layout_stack name="progress_indicator_area"> + <panel name="media_progress_indicator"> + <progress_bar name="media_progress_bar" tool_tip="Wczytywanie mediów"/> + </panel> + </layout_stack> + <layout_stack name="media_controls"> + <layout_panel name="back"> + <button name="back_btn" tool_tip="Przejdź do poprzedniego"/> + </layout_panel> + <layout_panel name="fwd"> + <button name="fwd_btn" tool_tip="Przejdź do następnego"/> + </layout_panel> + <layout_panel name="home"> + <button name="home_btn" tool_tip="Strona Domowa"/> + </layout_panel> + <layout_panel name="media_stop"> + <button name="media_stop_btn" tool_tip="Zatrzymaj media"/> + </layout_panel> + <layout_panel name="reload"> + <button name="reload_btn" tool_tip="Odśwież"/> + </layout_panel> + <layout_panel name="stop"> + <button name="stop_btn" tool_tip="Zatrzymaj wczytywanie"/> + </layout_panel> + <layout_panel name="play"> + <button name="play_btn" tool_tip="Odtwarzaj Media"/> + </layout_panel> + <layout_panel name="pause"> + <button name="pause_btn" tool_tip="Wstrzymaj media"/> + </layout_panel> + <layout_panel name="media_address"> + <line_editor name="media_address_url" tool_tip="URL Mediów"/> + <layout_stack name="media_address_url_icons"> + <layout_panel> + <icon name="media_whitelist_flag" tool_tip="Biała Lista aktywna"/> + </layout_panel> + <layout_panel> + <icon name="media_secure_lock_flag" tool_tip="Zabezpiecz przeglądanie"/> + </layout_panel> + </layout_stack> + </layout_panel> + <layout_panel name="media_play_position"> + <slider_bar initial_value="0.5" name="media_play_slider" tool_tip="Postęp odtwarzania filmu"/> + </layout_panel> + <layout_panel name="skip_back"> + <button name="skip_back_btn" tool_tip="Przewiń do tyłu"/> + </layout_panel> + <layout_panel name="skip_forward"> + <button name="skip_forward_btn" tool_tip="Przewiń do przodu"/> + </layout_panel> + <layout_panel name="media_volume"> + <button name="media_mute_button" tool_tip="Wycisz Media"/> + <slider name="volume_slider" tool_tip="Głośność Mediów"/> + </layout_panel> + <layout_panel name="zoom_frame"> + <button name="zoom_frame_btn" tool_tip="Przybliż do mediów"/> + </layout_panel> + <layout_panel name="close"> + <button name="close_btn" tool_tip="Oddal"/> + </layout_panel> + <layout_panel name="new_window"> + <button name="new_window_btn" tool_tip="Otwórz URL w przeglądarce"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_profile.xml b/indra/newview/skins/default/xui/pl/panel_profile.xml index 1ff115e0b5..766ed94822 100644 --- a/indra/newview/skins/default/xui/pl/panel_profile.xml +++ b/indra/newview/skins/default/xui/pl/panel_profile.xml @@ -1,37 +1,41 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Profil" name="panel_profile"> <string name="no_partner_text" value="Brak"/> + <string name="no_group_text" value="Żadne"/> <string name="RegisterDateFormat"> [REG_DATE] ([AGE]) </string> - <scroll_container name="profile_scroll"> - <panel name="scroll_content_panel"> - <panel name="second_life_image_panel"> - <text name="title_sl_descr_text" value="[SECOND_LIFE]:"/> - </panel> - <panel name="first_life_image_panel"> - <text name="title_rw_descr_text" value=":"/> - </panel> - <text name="me_homepage_text"> - Strona Domowa: - </text> - <text name="title_member_text" value="Członek od:"/> - <text name="title_acc_status_text" value="Status Konta:"/> - <text name="acc_status_text" value="Rezydent. Brak Danych Konta"/> - <text name="title_partner_text" value="Partner:"/> - <text name="title_groups_text" value="Groupy:"/> - </panel> - </scroll_container> - <panel name="profile_buttons_panel"> - <button label="Dodaj Znajomość" name="add_friend" tool_tip="Dodaj tego Rezydenta do znajomych"/> - <button label="IM" name="im" tool_tip="Rozpocznij rozmowę prywatną"/> - <button label="Zadzwoń" name="call" tool_tip="Zadzwoń do tego Rezydenta"/> - <button label="Mapa" name="show_on_map_btn" tool_tip="Pokaż tego Rezydenta na mapie"/> - <button label="Teleportuj" name="teleport" tool_tip="Zaoferuj Teleportację"/> - <button label="▼" name="overflow_btn" tool_tip="Zapłać lub wyślij obiekt temu Rezydentowi"/> - </panel> - <panel name="profile_me_buttons_panel"> - <button label="Edytuj Profil" name="edit_profile_btn"/> - <button label="Edytuj Wygląd" name="edit_appearance_btn"/> - </panel> + <layout_stack name="layout"> + <layout_panel name="profile_stack"> + <scroll_container name="profile_scroll"> + <panel name="profile_scroll_panel"> + <panel name="second_life_image_panel"> + <text name="title_sl_descr_text" value="[SECOND_LIFE]:"/> + </panel> + <panel name="first_life_image_panel"> + <text name="title_rw_descr_text" value="Życie#1:"/> + </panel> + <text name="title_member_text" value="Urodziny:"/> + <text name="title_acc_status_text" value="Konto:"/> + <text name="title_partner_text" value="Partner:"/> + <panel name="partner_data_panel"> + <name_box initial_value="(przetwarzanie)" name="partner_text"/> + </panel> + <text name="title_groups_text" value="Grupy:"/> + </panel> + </scroll_container> + </layout_panel> + <layout_panel name="profile_buttons_panel"> + <button label="Poznaj" name="add_friend" tool_tip="Zaoferuj znajomość Rezydentowi"/> + <button label="IM" name="im" tool_tip="Rozpocznij sesję czatu (IM)"/> + <button label="Dzwoń" name="call" tool_tip="Zadzwoń"/> + <button label="Mapa" name="show_on_map_btn" tool_tip="Pokaż Rezydenta na mapie"/> + <button label="Teleportuj" name="teleport" tool_tip="Teleportuj"/> + <button label="▼" name="overflow_btn" tool_tip="Zapłać lub udostępnij obiekty Rezydentowi"/> + </layout_panel> + <layout_panel name="profile_me_buttons_panel"> + <button label="Edytuj Profil" name="edit_profile_btn" tool_tip="Edytuj swoje dane"/> + <button label="Edytuj Wygląd" name="edit_appearance_btn" tool_tip="Stwórz/edytuj swój wygląd: dane fizyczne, ubranie..."/> + </layout_panel> + </layout_stack> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_profile_view.xml b/indra/newview/skins/default/xui/pl/panel_profile_view.xml new file mode 100644 index 0000000000..637b278ef2 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_profile_view.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="panel_target_profile"> + <string name="status_online"> + Obecnie w SL + </string> + <string name="status_offline"> + Nieaktywny + </string> + <text_editor name="user_name" value="(Ładowanie...)"/> + <text name="status" value="Obecnie w SL"/> + <tab_container name="tabs"> + <panel label="PROFIL" name="panel_profile"/> + <panel label="ULUBIONE" name="panel_picks"/> + <panel label="NOTATKI & PRYWATNOŚĆ" name="panel_notes"/> + </tab_container> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_region_covenant.xml b/indra/newview/skins/default/xui/pl/panel_region_covenant.xml index 31b410c931..2b37dd96b7 100644 --- a/indra/newview/skins/default/xui/pl/panel_region_covenant.xml +++ b/indra/newview/skins/default/xui/pl/panel_region_covenant.xml @@ -31,7 +31,7 @@ wszystkich posiadłościach majątku. </text> <text bottom_delta="-36" name="covenant_instructions"> - Przeciągnij oraz wrzuć notkę by zmienić umowę dla tego majątku. + Przeciągnij oraz wrzuć notę by zmienić umowę dla tego majątku. </text> <text name="region_section_lbl"> Region @@ -58,13 +58,13 @@ wszystkich posiadłościach majątku. Odsprzedaj: </text> <text left="115" name="resellable_clause" width="350"> - Posiadłość zakupiona w tym regionie nie może być odsprzedana. + Posiadłość kupiona w tym Regionie nie może być odsprzedana. </text> <text name="changeable_lbl"> Podziel: </text> <text left="115" name="changeable_clause" width="350"> - Posiadłość zakupiona w tym regionie nie może być + Posiadłość kupiona w tym Regionie nie może być łączona/dzielona. </text> <string name="can_resell"> diff --git a/indra/newview/skins/default/xui/pl/panel_region_debug.xml b/indra/newview/skins/default/xui/pl/panel_region_debug.xml index fe7b554a13..c5b08383dc 100644 --- a/indra/newview/skins/default/xui/pl/panel_region_debug.xml +++ b/indra/newview/skins/default/xui/pl/panel_region_debug.xml @@ -6,15 +6,15 @@ <text name="region_text"> brak danych </text> - <check_box label="Zablokuj Skrypty" name="disable_scripts_check" tool_tip="Zablokuj wszystkie skrypty w tym Regionie"/> + <check_box label="Zablokuj skrypty" name="disable_scripts_check" tool_tip="Zablokuj wszystkie skrypty w tym Regionie"/> <button label="?" name="disable_scripts_help"/> - <check_box label="Zablokuj Kolizje" name="disable_collisions_check" tool_tip="Zablokuj kolizje obiektów (nie Awatarów) w tym Regionie"/> + <check_box label="Zablokuj kolizje" name="disable_collisions_check" tool_tip="Zablokuj kolizje obiektów (nie awatarów) w tym Regionie"/> <button label="?" name="disable_collisions_help"/> - <check_box label="Zablokuj Fizykę" name="disable_physics_check" tool_tip="Zablokuj wpływ fizyki w tym Regionie"/> + <check_box label="Zablokuj fizykę" name="disable_physics_check" tool_tip="Zablokuj wpływ fizyki w tym Regionie"/> <button label="?" name="disable_physics_help"/> <button label="Zastosuj" name="apply_btn"/> <text name="objret_text_lbl"> - Zwrot Obiektu + Zwrot obiektu </text> <text name="resident_text_lbl"> Rezydent: @@ -22,19 +22,19 @@ <line_editor name="target_avatar_name"> (brak) </line_editor> - <button label="Wybierz..." name="choose_avatar_btn"/> + <button label="Wybierz" name="choose_avatar_btn"/> <text name="options_text_lbl"> Opcje: </text> - <check_box label="Odeślij wyłącznie obiekty ze skryptami" name="return_scripts" tool_tip="Odeślij wyłącznie obiekty ze skryptami."/> + <check_box label="Ze skryptami" name="return_scripts" tool_tip="Odeślij wyłącznie obiekty ze skryptami"/> <check_box label="Odeślij wyłącznie obiekty które są na posiadłościach innych osób" name="return_other_land" tool_tip="Odeślij wyłącznie obiekty które są na posiadłościach innych osób"/> - <check_box label="Odeślij obiekty z wszystkich regionów w tym majątku" name="return_estate_wide" tool_tip="Odeślij obiekty z wszystkich regionów w tym majątku"/> + <check_box label="W każdym regionie tego majątku" name="return_estate_wide" tool_tip="Odeślij obiekty z wszystkich regionów w tym majątku"/> <button label="Odeślij" name="return_btn"/> - <button label="Znajdź Główne Kolizje..." name="top_colliders_btn" tool_tip="Lista obiektów doświadczających najwięcej potencjalnych kolizji"/> + <button label="Znajdź główne kolizje..." name="top_colliders_btn" tool_tip="Lista obiektów doświadczających najwięcej potencjalnych kolizji"/> <button label="?" name="top_colliders_help"/> - <button label="Główne Skrypty..." name="top_scripts_btn" tool_tip="Lista obiektów najdłużej wykonujących skrypty"/> + <button label="Główne skrypty..." name="top_scripts_btn" tool_tip="Lista obiektów najdłużej wykonujących skrypty"/> <button label="?" name="top_scripts_help"/> <button label="Restart Regionu" name="restart_btn" tool_tip="Odliczanie i restart Regionu za dwie minuty"/> <button label="?" name="restart_help"/> - <button label="Opóźnij Restart" name="cancel_restart_btn" tool_tip="Opóźnij restart Regionu o godzinę"/> + <button label="Opóźnij restart" name="cancel_restart_btn" tool_tip="Opóźnij restart Regionu o godzinę"/> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_region_estate.xml b/indra/newview/skins/default/xui/pl/panel_region_estate.xml index 4275f3f647..a796274738 100644 --- a/indra/newview/skins/default/xui/pl/panel_region_estate.xml +++ b/indra/newview/skins/default/xui/pl/panel_region_estate.xml @@ -1,8 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Majątek" name="Estate"> <text name="estate_help_text"> - Zmiany ustawień na tej zakładce odnoszą się -do wszystkich Regionów w tym Majątku. + Zmiany w tej zakładce będą odczuwalne w całym Regionie. </text> <text name="estate_text"> Majątek: @@ -11,24 +10,24 @@ do wszystkich Regionów w tym Majątku. (brak danych) </text> <text name="owner_text"> - Właściciel: + Właściciel Majątku: </text> <text name="estate_owner"> (brak danych) </text> - <check_box label="Używaj Czasu Światowego" name="use_global_time_check"/> + <check_box label="Używaj czasu światowego" name="use_global_time_check"/> <button label="?" name="use_global_time_help"/> <check_box label="Stałe Słońce" name="fixed_sun_check"/> <button label="?" name="fixed_sun_help"/> - <slider label="Pora Doby" name="sun_hour_slider"/> - <check_box label="Dostęp Publiczny" name="externally_visible_check"/> + <slider label="Pora doby" name="sun_hour_slider"/> + <check_box label="Dostęp publiczny" name="externally_visible_check"/> <button label="?" name="externally_visible_help"/> <text name="Only Allow"> - Dostęp Ograniczony do: + Ogranicz dostęp dla kont zweryfikowanych przez: </text> - <check_box label="Rezydenci z danymi o koncie" name="limit_payment" tool_tip="Zablokuj niepożądanych Rezydentów."/> - <check_box label="Dorośli ze sprawdzonym wiekiem" name="limit_age_verified" tool_tip="Zablokuj Rezydentów którzy nie zweryfikowali swojego wieku. Dodatkowe informacje pod support.secondlife.com."/> - <check_box label="Rozmowy Dozwolone" name="voice_chat_check"/> + <check_box label="Rezydenci z danymi o koncie" name="limit_payment" tool_tip="Zbanuj niezidentyfikowanych Rezydentów"/> + <check_box label="Rezydenci, którzy dokonali weryfikacji wieku" name="limit_age_verified" tool_tip="Zbanuj Rezydentów, którzy nie zweryfikowali swojego wieku. Odwiedź stronę [SUPPORT_SITE] po więcej informacji."/> + <check_box label="Rozmowy dozwolone" name="voice_chat_check"/> <button label="?" name="voice_chat_help"/> <check_box label="Teleportacja Dozwolona" name="allow_direct_teleport"/> <button label="?" name="allow_direct_teleport_help"/> @@ -41,7 +40,7 @@ do wszystkich Regionów w tym Majątku. </string> <button label="?" name="abuse_email_address_help"/> <button label="Zastosuj" name="apply_btn"/> - <button label="Wyrzuć Awatara z Majątku..." name="kick_user_from_estate_btn"/> + <button label="Wyrzuć Rezydenta z Majątku..." name="kick_user_from_estate_btn"/> <button label="Wyślij Wiadomość do Majątku..." name="message_estate_btn"/> <text name="estate_manager_label"> Zarządcy Majątku: diff --git a/indra/newview/skins/default/xui/pl/panel_region_general.xml b/indra/newview/skins/default/xui/pl/panel_region_general.xml index 20296dac71..1410a2a882 100644 --- a/indra/newview/skins/default/xui/pl/panel_region_general.xml +++ b/indra/newview/skins/default/xui/pl/panel_region_general.xml @@ -18,36 +18,26 @@ <text name="region_type"> nieznany </text> - <check_box label="Zablokuj Zmiany Terenu" name="block_terraform_check"/> - <button label="?" name="terraform_help"/> - <check_box label="Zablokuj Latanie" name="block_fly_check"/> - <button label="?" name="fly_help"/> - <check_box label="Uszkodzenia Dozwolone" name="allow_damage_check"/> - <button label="?" name="damage_help"/> - <check_box label="Zablokuj Popychanie" name="restrict_pushobject"/> - <button label="?" name="restrict_pushobject_help"/> - <check_box label="Odsprzedaż Dozwolona" name="allow_land_resell_check"/> - <button label="?" name="land_resell_help"/> - <check_box label="Łączenie/Dzielenie Dozwolone" name="allow_parcel_changes_check"/> - <button label="?" name="parcel_changes_help"/> - <check_box label="Zablokuj Wyszukiwanie" name="block_parcel_search_check" tool_tip="Pozwól na wyświetlanie nazwy regionu i posiadłości w wynikach wyszukiwania"/> - <button label="?" name="parcel_search_help"/> + <check_box label="Zablokuj zmiany terenu" name="block_terraform_check"/> + <check_box label="Zablokuj latanie" name="block_fly_check"/> + <check_box label="Uszkodzenia dozwolone" name="allow_damage_check"/> + <check_box label="Zablokuj popychanie" name="restrict_pushobject"/> + <check_box label="Odsprzedaż dozwolona" name="allow_land_resell_check"/> + <check_box label="Łączenie/Dzielenie dozwolone" name="allow_parcel_changes_check"/> + <check_box label="Zablokuj wyszukiwanie" name="block_parcel_search_check" tool_tip="Pozwól na wyświetlanie nazwy regionu i posiadłości w wynikach wyszukiwania"/> <spinner label="Limit Gości" name="agent_limit_spin"/> - <button label="?" name="agent_limit_help"/> - <spinner label="Ekstra Obiekty" name="object_bonus_spin"/> - <button label="?" name="object_bonus_help"/> - <text label="Ograniczenia Wieku" name="access_text"> + <spinner label="Ekstra obiekty" name="object_bonus_spin"/> + <text label="Ograniczenia wieku" name="access_text"> Rodzaj: </text> - <combo_box label="'Mature'" name="access_combo"> - <combo_box.item label="'Adult'" name="Adult"/> - <combo_box.item label="'Mature'" name="Mature"/> - <combo_box.item label="'PG'" name="PG"/> - </combo_box> - <button label="?" name="access_help"/> + <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="'PG'" name="PG" value="13"/> + </icons_combo_box> <button label="Zastosuj" name="apply_btn"/> - <button label="Wyrzuć Awatara..." name="kick_btn"/> - <button label="Wyrzuć Wszystkich..." name="kick_all_btn"/> - <button label="Wyślij Wiadomość do Regionu..." name="im_btn"/> - <button label="Obsługa Teleportera..." name="manage_telehub_btn"/> + <button label="Teleportuj do Miejsca Startu jednego Rezydenta..." name="kick_btn"/> + <button label="Teleportuj do Miejsca Startu wszystkich Rezydentów..." name="kick_all_btn"/> + <button label="Wyślij wiadomość do Regionu..." name="im_btn"/> + <button label="Obsługa teleportera..." name="manage_telehub_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_region_general_layout.xml b/indra/newview/skins/default/xui/pl/panel_region_general_layout.xml new file mode 100644 index 0000000000..ffa8f1e18a --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_region_general_layout.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Region" name="General"> + <text name="region_text_lbl"> + Region: + </text> + <text name="region_text"> + nieznany + </text> + <text name="version_channel_text_lbl"> + Wersja: + </text> + <text name="version_channel_text"> + nieznany + </text> + <text name="region_type_lbl"> + Typ: + </text> + <text name="region_type"> + nieznany + </text> + <check_box label="Zablokuj zmiany terenu" name="block_terraform_check"/> + <check_box label="Zablokuj latanie" name="block_fly_check"/> + <check_box label="Uszkodzenia dozwolone" name="allow_damage_check"/> + <check_box label="Zablokuj popychanie" name="restrict_pushobject"/> + <check_box label="Odsprzedaż dozwolona" name="allow_land_resell_check"/> + <check_box label="Łączenie/Dzielenie dozwolone" name="allow_parcel_changes_check"/> + <check_box label="Zablokuj wyszukiwanie" name="block_parcel_search_check" tool_tip="Pozwól na wyświetlanie nazwy Regionu i Posiadłości w wynikach wyszukiwania"/> + <spinner label="Limit Gości" name="agent_limit_spin"/> + <spinner label="Ekstra obiekty" name="object_bonus_spin"/> + <text label="Restrykcje wieku" name="access_text"> + Rodzaj: + </text> + <combo_box label="Moderuj" name="access_combo"> + <combo_box.item label="Adult" name="Adult"/> + <combo_box.item label="Moderuj" name="Mature"/> + <combo_box.item label="Ogólne" name="PG"/> + </combo_box> + <button label="Zastosuj" name="apply_btn"/> + <button label="Teleportuj do Miejsca Startu jednego Rezydenta..." name="kick_btn"/> + <button label="Teleportuj do Miejsca Startu wszystkich Rezydentów..." name="kick_all_btn"/> + <button label="Wyślij wiadomość do Regionu..." name="im_btn"/> + <button label="Obsługa teleportera..." name="manage_telehub_btn"/> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_region_terrain.xml b/indra/newview/skins/default/xui/pl/panel_region_terrain.xml index b206616e34..917ae91774 100644 --- a/indra/newview/skins/default/xui/pl/panel_region_terrain.xml +++ b/indra/newview/skins/default/xui/pl/panel_region_terrain.xml @@ -6,22 +6,22 @@ <text name="region_text"> brak danych </text> - <spinner label="Poziom Wody" name="water_height_spin" /> + <spinner label="Poziom wody" name="water_height_spin" /> <button label="?" name="water_height_help" /> - <spinner label="Górny Limit Terenu" name="terrain_raise_spin" /> + <spinner label="Górny limit terenu" name="terrain_raise_spin" /> <button label="?" name="terrain_raise_help" /> - <spinner label="Dolny Limit Terenu" name="terrain_lower_spin" /> + <spinner label="Dolny limit terenu" name="terrain_lower_spin" /> <button label="?" name="terrain_lower_help" /> <check_box label="Używaj Słońca Majątku" name="use_estate_sun_check" /> <button label="?" name="use_estate_sun_help" /> <check_box label="Stałe Słońce" name="fixed_sun_check" /> <button label="?" name="fixed_sun_help" /> - <slider label="Pora Doby" name="sun_hour_slider" /> + <slider label="Pora doby" name="sun_hour_slider" /> <button label="Zastosuj" name="apply_btn" /> - <button label="Zapisz Surowy Teren..." name="download_raw_btn" + <button label="Zapisz surowy teren..." name="download_raw_btn" tool_tip="Dostępne tylko dla Właścicieli Majątku, nie dla Zarządców" /> <button label="?" name="download_raw_help" /> - <button label="Załaduj Surowy Teren..." name="upload_raw_btn" + <button label="Załaduj surowy teren..." name="upload_raw_btn" tool_tip="Dostępne tylko dla Właścicieli Majątku, nie dla Zarządców" /> <button label="?" name="upload_raw_help" /> <button label="Ustal Teren" name="bake_terrain_btn" diff --git a/indra/newview/skins/default/xui/pl/panel_region_texture.xml b/indra/newview/skins/default/xui/pl/panel_region_texture.xml index d24579fc75..156f3db63f 100644 --- a/indra/newview/skins/default/xui/pl/panel_region_texture.xml +++ b/indra/newview/skins/default/xui/pl/panel_region_texture.xml @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Tekstury Gruntu" name="Textures"> <text name="region_text_lbl"> Region: @@ -25,33 +25,33 @@ Zakres Poziomów dla Tekstury </text> <text name="height_text_lbl6"> - Południe-Zachód + Północny-Zachód </text> <text name="height_text_lbl7"> - Północ-Zachód + Północny-Wschód </text> <text name="height_text_lbl8"> - Południe-Wschód + Południowy-Zachód </text> <text name="height_text_lbl9"> - Północ-Wschód - </text> - <spinner label="Dół" name="height_start_spin_0" /> - <spinner label="Dół" name="height_start_spin_1" /> - <spinner label="Dół" name="height_start_spin_2" /> - <spinner label="Dół" name="height_start_spin_3" /> - <spinner label="Góra" name="height_range_spin_0" /> - <spinner label="Góra" name="height_range_spin_1" /> - <spinner label="Góra" name="height_range_spin_2" /> - <spinner label="Góra" name="height_range_spin_3" /> + Południowy-Wschód + </text> + <spinner label="Dół" name="height_start_spin_0"/> + <spinner label="Dół" name="height_start_spin_1"/> + <spinner label="Dół" name="height_start_spin_2"/> + <spinner label="Dół" name="height_start_spin_3"/> + <spinner label="Góra" name="height_range_spin_0"/> + <spinner label="Góra" name="height_range_spin_1"/> + <spinner label="Góra" name="height_range_spin_2"/> + <spinner label="Góra" name="height_range_spin_3"/> <text name="height_text_lbl10"> Wartości reprezentują zakresy zlewania powyższych tekstur. </text> <text name="height_text_lbl11"> - Wartość DÓŁ, wyrażona w metrach, to MAKSYMALNY poziom dla tekstury #1, + Wartość DÓŁ, wyrażona w metrach, to MAKSYMALNY poziom dla tekstury #1, a wartość GÓRA to MINIMALNY poziom dla tekstury #4. </text> <text name="height_text_lbl12"> a wartość GÓRA to MINIMALNY poziom dla tekstury #4. </text> - <button label="Zastosuj" name="apply_btn" /> + <button label="Zastosuj" name="apply_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_script_limits_my_avatar.xml b/indra/newview/skins/default/xui/pl/panel_script_limits_my_avatar.xml new file mode 100644 index 0000000000..e1863517a2 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_script_limits_my_avatar.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="MÓJ AWATAR" name="script_limits_my_avatar_panel"> + <text name="script_memory"> + Zużycie Skryptów przez Awatara + </text> + <text name="loading_text"> + Ładowanie... + </text> + <scroll_list name="scripts_list"> + <scroll_list.columns label="Rozmiar (kb)" name="size"/> + <scroll_list.columns label="URL" name="urls"/> + <scroll_list.columns label="Nazwa Obiektu" name="name"/> + <scroll_list.columns label="Lokalizacja" name="location"/> + </scroll_list> + <button label="Odśwież listę" name="refresh_list_btn"/> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_script_limits_region_memory.xml b/indra/newview/skins/default/xui/pl/panel_script_limits_region_memory.xml new file mode 100644 index 0000000000..1419a9c9f6 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_script_limits_region_memory.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="PAMIĘĆ REGIONU" name="script_limits_region_memory_panel"> + <text name="script_memory"> + Pamięć Skryptu Parceli + </text> + <text name="loading_text"> + Ładowanie... + </text> + <scroll_list name="scripts_list"> + <scroll_list.columns label="Rozmiar (kb)" name="size"/> + <scroll_list.columns label="URL" name="urls"/> + <scroll_list.columns label="Nazwa Obiektu" name="name"/> + <scroll_list.columns label="Właściciel" name="owner"/> + <scroll_list.columns label="Parcela" name="parcel"/> + <scroll_list.columns label="Lokalizacja" name="location"/> + </scroll_list> + <button label="Odśwież listę" name="refresh_list_btn"/> + <button label="Pokaż" name="highlight_btn"/> + <button label="Zwróć" name="return_btn"/> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_side_tray.xml b/indra/newview/skins/default/xui/pl/panel_side_tray.xml index 369097cd0b..f34fd0e108 100644 --- a/indra/newview/skins/default/xui/pl/panel_side_tray.xml +++ b/indra/newview/skins/default/xui/pl/panel_side_tray.xml @@ -2,25 +2,28 @@ <!-- Side tray cannot show background because it is always partially on screen to hold tab buttons. --> <side_tray name="sidebar"> + <sidetray_tab description="Przełącz Panel Boczny" name="sidebar_openclose" tab_title="Przełącz Panel Boczny"/> <sidetray_tab description="Miejsce Startu." name="sidebar_home" tab_title="Home"> <panel label="miejsce startu" name="panel_home"/> </sidetray_tab> + <sidetray_tab description="Edytuj swój publiczny profil oraz ulubione zakładki." name="sidebar_me" tab_title="My Profile"> + <panel_container name="panel_container"> + <panel label="Ja" name="panel_me"/> + </panel_container> + </sidetray_tab> <sidetray_tab description="Znajdź swoich znajomych, kontakty oraz Rezydentów w pobliżu Ciebie." name="sidebar_people" tab_title="People"> <panel_container name="panel_container"> - <panel label="Info o Grupie" name="panel_group_info_sidetray"/> + <panel label="Grupa" name="panel_group_info_sidetray"/> <panel label="Zablokowani Rezydenci & Obiekty" name="panel_block_list_sidetray"/> </panel_container> </sidetray_tab> <sidetray_tab description="Znajdź i odwiedź miejsca, w których byłeś wcześniej." label="Miejsca" name="sidebar_places" tab_title="Places"> <panel label="Miejsca" name="panel_places"/> </sidetray_tab> - <sidetray_tab description="Edytuj swój publiczny profil oraz ulubione zakładki." name="sidebar_me" tab_title="My Profile"> - <panel label="Ja" name="panel_me"/> + <sidetray_tab description="Przeglądaj Szafę." name="sidebar_inventory" tab_title="My Inventory"> + <panel label="Edytuj Szafę" name="sidepanel_inventory"/> </sidetray_tab> <sidetray_tab description="Zmień swój obecny wygląd i ubranie." name="sidebar_appearance" tab_title="My Appearance"> <panel label="Edytuj Wygląd" name="sidepanel_appearance"/> </sidetray_tab> - <sidetray_tab description="Przeglądaj Szafę." name="sidebar_inventory" tab_title="My Inventory"> - <panel label="Edytuj Szafę" name="sidepanel_inventory"/> - </sidetray_tab> </side_tray> diff --git a/indra/newview/skins/default/xui/pl/panel_side_tray_tab_caption.xml b/indra/newview/skins/default/xui/pl/panel_side_tray_tab_caption.xml new file mode 100644 index 0000000000..0ae9c1cf61 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_side_tray_tab_caption.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="sidetray_tab_panel"> + <text name="sidetray_tab_title" value="Schowek"/> + <button name="show_help" tool_tip="Pomoc"/> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_stand_stop_flying.xml b/indra/newview/skins/default/xui/pl/panel_stand_stop_flying.xml index e47a15b67a..0f99f3911c 100644 --- a/indra/newview/skins/default/xui/pl/panel_stand_stop_flying.xml +++ b/indra/newview/skins/default/xui/pl/panel_stand_stop_flying.xml @@ -2,5 +2,5 @@ <!-- Width and height of this panel should be synchronized with "panel_modes" in the floater_moveview.xml--> <panel name="panel_stand_stop_flying"> <button label="Wstań" name="stand_btn" tool_tip="Kliknij tutaj by wstać."/> - <button label="Zatrzymaj Latanie" name="stop_fly_btn" tool_tip="Zatrzymaj Latanie"/> + <button label="Zatrzymaj latanie" name="stop_fly_btn" tool_tip="Zatrzymaj latanie"/> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_status_bar.xml b/indra/newview/skins/default/xui/pl/panel_status_bar.xml index 9226e67dff..cd2ae14f6c 100644 --- a/indra/newview/skins/default/xui/pl/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/pl/panel_status_bar.xml @@ -1,39 +1,31 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="status"> - <text name="ParcelNameText" tool_tip="Nazwa posiadłości w której się znajdujesz. Po więcej informacji kliknij O Posiadłości."> - Nazwa Posiadłości - </text> - <text name="BalanceText" tool_tip="Stan Konta"> - Ładowanie... - </text> - <button label="" label_selected="" name="buycurrency" tool_tip="Kup $L" /> - <text name="TimeText" tool_tip="Obecny Czas (Pacyficzny)"> - 12:00 AM - </text> - <string name="StatBarDaysOfWeek"> + <panel.string name="StatBarDaysOfWeek"> Niedziela:Poniedziałek:Wtorek:Środa:Czwartek:Piątek:Sobota - </string> - <string name="StatBarMonthsOfYear"> + </panel.string> + <panel.string name="StatBarMonthsOfYear"> Styczeń:Luty:Marzec:Kwiecień:Maj:Czerwiec:Lipiec:Styczeń:Wrzesień:Październik:Listopad:Grudzień - </string> - <button label="" label_selected="" name="scriptout" tool_tip="Błędy i Ostrzeżenia Skryptów" /> - <button label="" label_selected="" name="health" tool_tip="Stan" /> - <text name="HealthText" tool_tip="Stan"> - 100% - </text> - <button label="" label_selected="" name="no_fly" tool_tip="Latanie jest niedozwolone" /> - <button label="" label_selected="" name="no_build" tool_tip="Budowanie/rezzowanie jest niedozwolone" /> - <button label="" label_selected="" name="no_scripts" tool_tip="Używanie skryptów jest niedozwolone" /> - <button label="" label_selected="" name="restrictpush" tool_tip="Pochnięcia są niedozwolone" /> - <button label="" label_selected="" name="status_no_voice" tool_tip="Używanie komunikacji głosowej jest niedozwolone" /> - <button label="" label_selected="" name="buyland" tool_tip="Kup tą posiadłość" /> - <button label="" name="menubar_search_bevel_bg" /> - <line_editor label="Szukaj" name="search_editor" tool_tip="Szukaj w [SECOND_LIFE]" /> - <button label="" label_selected="" name="search_btn" tool_tip="Szukaj w [SECOND_LIFE]" /> - <string name="packet_loss_tooltip"> - Utracone Pakiety - </string> - <string name="bandwidth_tooltip"> + </panel.string> + <panel.string name="packet_loss_tooltip"> + Utracone pakiety + </panel.string> + <panel.string name="bandwidth_tooltip"> Przepustowość - </string> + </panel.string> + <panel.string name="time"> + [hour12, datetime, slt]:[min, datetime, slt] [ampm, datetime, slt] [timezone,datetime, slt] + </panel.string> + <panel.string name="timeTooltip"> + [weekday, datetime, slt], [day, datetime, slt] [month, datetime, slt] [year, datetime, slt] + </panel.string> + <panel.string name="buycurrencylabel"> + L$ [AMT] + </panel.string> + <button label="" label_selected="" name="buycurrency" tool_tip="Bilans"/> + <button label="Kup" name="buyL" tool_tip="Kliknij aby kupić L$"/> + <text name="TimeText" tool_tip="Obecny Czas (Pacyficzny)"> + 24:00 AM PST + </text> + <button name="media_toggle_btn" tool_tip="Start/Stop Wszystkie Media (Muzyka, Video, WWW)"/> + <button name="volume_btn" tool_tip="Regulacja Głośności"/> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_teleport_history.xml b/indra/newview/skins/default/xui/pl/panel_teleport_history.xml index d88d98f104..d143843eaf 100644 --- a/indra/newview/skins/default/xui/pl/panel_teleport_history.xml +++ b/indra/newview/skins/default/xui/pl/panel_teleport_history.xml @@ -4,6 +4,7 @@ <accordion_tab name="today" title="Dzisiaj"/> <accordion_tab name="yesterday" title="Wczoraj"/> <accordion_tab name="2_days_ago" title="2 dni temu"/> + 5 <accordion_tab name="3_days_ago" title="3 dni temu"/> <accordion_tab name="4_days_ago" title="4 dni temu"/> <accordion_tab name="5_days_ago" title="5 dni temu"/> @@ -11,4 +12,7 @@ <accordion_tab name="1_month_and_older" title="1 miesiąc i więcej"/> <accordion_tab name="6_months_and_older" title="6 miesięcy i więcej"/> </accordion> + <panel name="bottom_panel"> + <button name="gear_btn" tool_tip="Pokaż dodatkowe opcje"/> + </panel> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/pl/panel_teleport_history_item.xml new file mode 100644 index 0000000000..f0fe28c4ce --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_teleport_history_item.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="teleport_history_item"> + <button name="profile_btn" tool_tip="Pokaż info o obiekcie"/> +</panel> diff --git a/indra/newview/skins/default/xui/pl/panel_world_map.xml b/indra/newview/skins/default/xui/pl/panel_world_map.xml index 70479fe209..849b01a1ce 100644 --- a/indra/newview/skins/default/xui/pl/panel_world_map.xml +++ b/indra/newview/skins/default/xui/pl/panel_world_map.xml @@ -4,7 +4,7 @@ Ładowanie... </panel.string> <panel.string name="InvalidLocation"> - Niewłaściwa Lokalizacja + Niewłaściwa lokalizacja </panel.string> <panel.string name="world_map_north"> N diff --git a/indra/newview/skins/default/xui/pl/role_actions.xml b/indra/newview/skins/default/xui/pl/role_actions.xml index 5711eacf2f..ccfa5f222e 100644 --- a/indra/newview/skins/default/xui/pl/role_actions.xml +++ b/indra/newview/skins/default/xui/pl/role_actions.xml @@ -1,197 +1,76 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<?xml version="1.0" encoding="utf-8" standalone="yes"?> <role_actions> - <action_set - description="Przywileje pozwajające na dodawanie i usuwanie Członków oraz pozwalają nowym Członkom na dodawanie się bez zaproszenia." - name="Membership"> - <action description="Zapraszanie do Grupy" - longdescription="Zapraszanie nowych Ludzi do Grupy używając 'Zaproś Nową Osobę...' pod Członkowie > Członkowie." - name="member invite" /> - <action description="Usuwanie z Grupy" - longdescription="Usuwanie Członków z Grupy używając 'Usuń z Grupy' pod Członkowie > Członkowie. Właściciel może usunąć każdego za wyjątkiem innego Właściciela. Jeżeli nie jesteś Właścicielem możesz tylko usuwać Członków w Funkcji Każdy i tylko wtedy kiedy nie mają żadnej innej Funkcji. Aby odebrać Członkowi Funkcję musisz mieć Przywilej 'Odbieranie Funkcji'." - name="member eject" /> - <action - description="Selekcja opcji 'Wolne Zapisy' i wybór 'Opłaty Wstępnej'" - longdescription="Selekcja opcji 'Wolne Zapisy' (pozwola nowym Członkom na dodawanie sie bez zaproszenia) i wybiór 'Opłaty Wstępnej' w Ustawieniach Grupy w sekcji Ogólne." - name="member options" /> + <action_set description="Przywileje pozwajające na dodawanie i usuwanie Członków oraz pozwalają nowym Członkom na dodawanie się bez zaproszenia." name="Membership"> + <action description="Zapraszanie do Grupy" longdescription="Zapraszanie nowych Ludzi do Grupy używając przycisku 'Zaproś' w sekcji Ról > Członkowie" name="member invite"/> + <action description="Usuwanie z Grupy" longdescription="Usuwanie Członków z Grupy używając 'Usuń z Grupy'; pod Członkowie > Członkowie. Właściciel może usunąć każdego za wyjątkiem innego Właściciela. Jeżeli nie jesteś Właścicielem możesz tylko usuwać Członków w Funkcji Każdy i tylko wtedy kiedy nie mają żadnej innej Funkcji. Aby odebrać Członkowi Funkcję musisz mieć Przywilej 'Odbieranie Funkcji'." name="member eject"/> + <action description="Selekcja opcji 'Wolne Zapisy' i wybór 'Opłaty Wstępnej'" longdescription="Selekcja opcji 'Wolne Zapisy' (pozwala nowym Członkom na dodawanie się bez zaproszenia) i wybór 'Opłaty Wstępnej' w Ustawieniach Grupy w sekcji Ogólne." name="member options"/> </action_set> - <action_set - description="Przywileje pozwalające na dodawanie, usuwanie i edycję Funkcji w Grupie, oraz na nadawanie i odbieranie Funkcji, oraz na przypisywanie Przywilejów do Funkcji." - name="Roles"> - <action description="Dodawanie Funkcji" - longdescription="Dodawanie nowych Funkcji pod Członkowie > Funkcje." - name="role create" /> - <action description="Usuwanie Funkcji" - longdescription="Usuwanie Funkcji pod Członkowie > Funkcje." - name="role delete" /> - <action description="Zmiany nazw Funkcji, Tytułów i Opisów" - longdescription="Zmiany nazw Funkcji, Tytułów i Opisów w dolnej części Członkowie > Funkcje po wybraniu Funkcje." - name="role properties" /> - <action description="Przypisywanie Członków do posiadanych Funkcji" - longdescription="Przypisywanie Członków do Funkcji w sekcji Przypisane Funkcje pod Członkowie > Członkowie. Członek z tym Przywilejem może dodawać Członków do Funkcji które sam już posiada." - name="role assign member limited" /> - <action description="Przypisywanie Członków do wszystkich Funkcji" - longdescription="Przypisywanie Członków do wszystkich Funkcji w sekcji Przypisane Funkcje pod Członkowie > Członkowie. *UWAGA* Członek w Funkcji z tym Przywilejem może przypisać siebie i innych Członków nie będących Właścicielami do Funkcji dających więcej Przywilejów niż posiadane obecnie potencjalnie dające możliwości zbliżone do możliwości Właściciela. Udzielaj tego Przywileju z rozwagą." - name="role assign member" /> - <action description="Odbieranie Funkcji" - longdescription="Odbieranie Funkcji w sekcji Przypisane Funkcje pod Członkowie > Członkowie. Funkcja Właściciela nie może być odebrana." - name="role remove member" /> - <action description="Dodawanie i Usuwanie Przywilejów z Funkcji" - longdescription="Dodawanie i Usuwanie Przywilejów z Funkcji w sekcji Przwileje pod Członkowie > Funkcje. *UWAGA* Członek w Funkcji z tym Przywilejem może przypisać sobie i innychm Członkom nie będącym Właścicielami wszystkie Przywileje potencjalnie dające możliwości zbliżone do możliwości Właściciela. Udzielaj tego Przywileju z rozwagą." - name="role change actions" /> + <action_set description="Przywileje pozwalające na dodawanie, usuwanie i edycję Funkcji w Grupie, oraz na nadawanie i odbieranie Funkcji, oraz na przypisywanie Przywilejów do Funkcji." name="Roles"> + <action description="Dodawanie Funkcji" longdescription="Dodawanie nowych Funkcji pod Członkowie > Funkcje." name="role create"/> + <action description="Usuwanie Funkcji" longdescription="Usuń Funkcje w zakładce Funkcje > Funkcje" name="role delete"/> + <action description="Zmiany nazw Funkcji, Tytułów i Opisów i widoczność Członków w Informacjach o Grupie" longdescription="Zmiany nazw Funkcji, Tytułów i Opisów i wybór czy Członkowie z daną Rolą są widoczni Informacji o Grupie w dolnej części sekcji Funkcji > Funkcje po wybraniu Funkcje." name="role properties"/> + <action description="Przypisywanie Członków do posiadanych Funkcji" longdescription="Przypisywanie Członków do Funkcji w sekcji Przypisane Funkcje pod Członkowie > Członkowie. Członek z tym Przywilejem może dodawać Członków do Funkcji które sam już posiada." name="role assign member limited"/> + <action description="Przypisywanie Członków do wszystkich Funkcji" longdescription="Przypisywanie Członków do wszystkich Funkcji w sekcji Przypisane Funkcje pod Członkowie > Członkowie. *UWAGA* Członek w Funkcji z tym Przywilejem może przypisać siebie i innych Członków nie będących Właścicielami do Funkcji dających więcej Przywilejów niż posiadane obecnie potencjalnie dające możliwości zbliżone do możliwości Właściciela. Udzielaj tego Przywileju z rozwagą." name="role assign member"/> + <action description="Odbieranie Funkcji" longdescription="Odbieranie Funkcji w sekcji Przypisane Funkcje pod Członkowie > Członkowie. Funkcja Właściciela nie może być odebrana." name="role remove member"/> + <action description="Dodawanie i Usuwanie Przywilejów z Funkcji" longdescription="Dodawanie i Usuwanie Przywilejów z Funkcji w sekcji Przwileje pod Członkowie > Funkcje. *UWAGA* Członek w Funkcji z tym Przywilejem może przypisać sobie i innym Członkom nie będącym Właścicielami wszystkie Przywileje potencjalnie dające możliwości zbliżone do możliwości Właściciela. Udzielaj tego Przywileju z rozwagą." name="role change actions"/> </action_set> - <action_set - description="Przywileje pozwalające na edycję atrybutów Grupy takich jak widoczność w wyszukiwarce, status i insygnia." - name="Group Identity"> - <action - description="Zmiany Statusu Grupy, Insygniów, 'Widoczność w Wyszukiwarce' i widoczność Członków w Informacjach o Grupie." - longdescription="Zmiany Statusu Grupy, Insygniów, 'Widoczność w Wyszukiwarce' i widoczność Członków w Informacjach o Grupie. Dostęp poprzez ustawienia Ogólne." - name="group change identity" /> + <action_set description="Przywileje pozwalające na edycję atrybutów Grupy takich jak widoczność w wyszukiwarce, status i insygnia." name="Group Identity"> + <action description="Zmiany Statusu Grupy, Insygniów, 'Widoczność w Wyszukiwarce' i widoczność Członków w Informacjach o Grupie." longdescription="Zmiany Statusu Grupy, Insygniów, i Widoczność w Wyszukiwarce. Dostęp poprzez ustawienia Ogólne." name="group change identity"/> </action_set> - <action_set - description="Przywileje pozwalające na przypisywanie, modyfikacje i sprzedaż Posiadłości Grupy. Aby zobaczyć okno O Posiadlości wybierz grunt prawym klawiszem myszki i wybierz 'O Posiadlości' albo wybierz O Posiadłości w głównym menu." - name="Parcel Management"> - <action description="Przypisywanie i kupowanie Posiadłości dla Grupy" - longdescription="Przypisywanie i kupowanie Posiadłości dla Grupy. Dostęp poprzez O Posiadlości > ustawienia Ogólne." - name="land deed" /> - <action description="Oddawanie Posiadłości do Linden Lab" - longdescription="Oddawanie Posiadłości do Linden Lab. *UWAGA* Członek w Funkcji z tym Przywilejem może porzucać Posiadlości Grupy poprzez O Posiadlości > ustawienia Ogólne oddając Posiadłości za darmo do Linden Labs! Udzielaj tego Przywileju z rozwagą." - name="land release" /> - <action description="Sprzedaż Posiadłości" - longdescription="Sprzedaż Posiadłości. *UWAGA* Członek w Funkcji z tym Przywilejem może sprzedawać Posiadlości Grupy poprzez O Posiadlości > ustawienia Ogólne! Udzielaj tego Przywileju z rozwagą." - name="land set sale info" /> - <action description="Podział i Łączenie Posiadłości" - longdescription="Podział i Łączenie Posiadłości. Dostęp poprzez wybranie gruntu prawym klawiszem myszki, 'Edycja Terenu', i przesuwanie myszką po gruncie wybierając obszar. Aby podzielić wybierz obszar i naciśnij 'Podziel...'. Aby połączyć wybierz dwie albo więcej sąsiadujące Posiadłości i naciśnij 'Połącz...'." - name="land divide join" /> + <action_set description="Przywileje pozwalające na przypisywanie, modyfikacje i sprzedaż Posiadłości Grupy. Aby zobaczyć okno O Posiadłości wybierz grunt prawym klawiszem myszki i wybierz 'O Posiadłości' albo wybierz ikonę 'i' w głównym menu." name="Parcel Management"> + <action description="Przypisywanie i kupowanie Posiadłości dla Grupy" longdescription="Przypisywanie i kupowanie Posiadłości dla Grupy. Dostęp poprzez O Posiadlości > ustawienia Ogólne." name="land deed"/> + <action description="Oddawanie Posiadłości do Linden Lab" longdescription="Oddawanie Posiadłości do Linden Lab. *UWAGA* Członek w Funkcji z tym Przywilejem może porzucać Posiadlości Grupy poprzez O Posiadlości > ustawienia Ogólne oddając Posiadłości za darmo do Linden Labs! Udzielaj tego Przywileju z rozwagą." name="land release"/> + <action description="Sprzedaż Posiadłości" longdescription="Sprzedaż Posiadłości. *UWAGA* Członek w Funkcji z tym Przywilejem może sprzedawać Posiadlości Grupy poprzez O Posiadlości > ustawienia Ogólne! Udzielaj tego Przywileju z rozwagą." name="land set sale info"/> + <action description="Podział i Łączenie Posiadłości" longdescription="Podział i Łączenie Posiadłości. Dostęp poprzez wybranie gruntu prawym klawiszem myszki, 'Edycja Terenu', i przesuwanie myszką po gruncie wybierając obszar. Aby podzielić wybierz obszar i naciśnij 'Podziel'. Aby połączyć wybierz dwie albo więcej sąsiadujące Posiadłości i naciśnij 'Połącz'." name="land divide join"/> </action_set> - <action_set - description="Przywileje pozwalające na zmianę nazwy Posiadłości, widoczność w wyszukiwarce, widoczność w wyszukiwarce, wybór miejsce lądowania i zmianę ustawień teleportacji (TP)." - name="Parcel Identity"> - <action - description="Selekcja opcji 'Pokazuj w szukaniu miejsc' i wybór kategorii" - longdescription="Selekcja opcji 'Pokazuj w szukaniu miejsc' i wybór kategorii Posiadłości pod O Posiadłości > Opcje." - name="land find places" /> - <action - description="Zmiany nazwy Posiadłości, opisu i selekcja 'Widoczność w Wyszukiwarce'" - longdescription="Zmiany nazwy Posiadłości, opisu i selekcja 'Widoczność w Wyszukiwarce'. Dostęp poprzez O Posiadłości > Opcje." - name="land change identity" /> - <action description="Wybór miejsca lądowania i ustawienia teleportacji (TP)" - longdescription="Na Posiadłości Grupy Członek w Funkcji z tym Przywilejem może wybrać miejsce gdzie teleportujące się osoby będą ladować oraz może ustalić dodatkowe parametry teleportacji (TP). Dostęp poprzez O Posiadłości > Opcje." - name="land set landing point" /> + <action_set description="Przywileje pozwalające na zmianę nazwy Posiadłości, widoczność w wyszukiwarce, widoczność w wyszukiwarce, wybór miejsce lądowania i zmianę ustawień teleportacji (TP)." name="Parcel Identity"> + <action description="Selekcja opcji 'Pokazuj w szukaniu miejsc' i wybór kategorii" longdescription="Selekcja opcji 'Pokazuj w szukaniu miejsc' i wybór kategorii Posiadłości pod O Posiadłości > Opcje." name="land find places"/> + <action description="Zmiany nazwy Posiadłości, opisu i selekcja 'Widoczność w Wyszukiwarce'" longdescription="Zmiany nazwy Posiadłości, opisu i selekcja 'Widoczność w Wyszukiwarce'. Dostęp poprzez O Posiadłości > Opcje." name="land change identity"/> + <action description="Wybór miejsca lądowania i ustawienia teleportacji (TP)" longdescription="Na Posiadłości Grupy Członek w Funkcji z tym Przywilejem może wybrać miejsce gdzie teleportujące się osoby będą ladować oraz może ustalić dodatkowe parametry teleportacji (TP). Dostęp poprzez O Posiadłości > Opcje." name="land set landing point"/> </action_set> - <action_set - description="Przywileje pozwalające na zmianę opcji Posiadłości takich jak 'Tworzenie Obiektów', 'Edycja Terenu' i zmianę ustawień muzyki & mediów." - name="Parcel Settings"> - <action description="Zmiany ustawień muzyki & mediów" - longdescription="Zmiany ustawień muzyki & mediów pod O Posiadłości > Media." - name="land change media" /> - <action description="Selekcja opcji 'Edycja Terenu'" - longdescription="Selekcja opcji 'Edycja Terenu'. *UWAGA* O Posiadłości > Opcje > Edycja Terenu pozwala każdemu na formowanie gruntów Twojej Posiadłości oraz na przemieszczanie roślin z Linden Labs. Udzielaj tego Przywileju z rozwagą. Selekcja opcji Edycji Terenu jest dostępna poprzez O Posiadłości > Opcje." - name="land edit" /> - <action description="Dodatkowe ustawienia O Posiadłości > Opcje" - longdescription="Selekcja opcji 'Bezpieczeństwo (brak uszkodzeń)', 'Latanie', opcje dla innych Rezydentów: 'Tworzenie Obiektów', 'Edycja Terenu', 'Zapamiętywanie Miejsca (LM)', 'Skrypty' na Posiadłościach Grupy pod O Posiadłości > Opcje." - name="land options" /> + <action_set description="Przywileje pozwalające na zmianę opcji Posiadłości takich jak 'Tworzenie Obiektów', 'Edycja Terenu' i zmianę ustawień muzyki & mediów." name="Parcel Settings"> + <action description="Zmiany ustawień muzyki & mediów" longdescription="Zmiany ustawień muzyki & mediów pod O Posiadłości > Media." name="land change media"/> + <action description="Selekcja opcji 'Edycja Terenu'" longdescription="Selekcja opcji 'Edycja Terenu'. *UWAGA* O Posiadłości > Opcje > Edycja Terenu pozwala każdemu na formowanie gruntów Twojej Posiadłości oraz na przemieszczanie roślin z Linden Labs. Udzielaj tego Przywileju z rozwagą. Selekcja opcji Edycji Terenu jest dostępna poprzez O Posiadłości > Opcje." name="land edit"/> + <action description="Dodatkowe ustawienia O Posiadłości > Opcje" longdescription="Selekcja opcji 'Bezpieczeństwo (brak uszkodzeń)' 'Latanie', opcje dla innych Rezydentów: 'Tworzenie Obiektów'; 'Edycja Terenu', 'Zapamiętywanie Miejsca (LM)', i 'Skrypty' na Posiadłościach Grupy pod O Posiadłości > Opcje." name="land options"/> </action_set> - <action_set - description="Przywileje pozwalające Członkom na omijanie ograniczeń na Posiadłościach Grupy." - name="Parcel Powers"> - <action description="Pozwól na Edycję Terenu" - longdescription="Członkowie w Funkcji z tym Przywilejem mogą zawsze edytować teren na Posiadłościach Grupy." - name="land allow edit land" /> - <action description="Pozwól na Latanie" - longdescription="Członkowie w Funkcji z tym Przywilejem mogą zawsze latać na Posiadłościach Grupy." - name="land allow fly" /> - <action description="Pozwól na Tworzenie Obiektów" - longdescription="Członkowie w Funkcji z tym Przywilejem mogą zawsze tworzyć obiekty na Posiadłościach Grupy." - name="land allow create" /> - <action description="Pozwól na Zapamiętywanie Miejsc (LM)" - longdescription="Członkowie w Funkcji z tym Przywilejem mogą zawsze zapamiętywać miejsca (LM) na Posiadłościach Grupy." - name="land allow landmark" /> - <action description="Pozwól na wybór Miejsca Startu na Posiadłościach Grupy" - longdescription="Członkowie w Funkcji z tym Przywilejem mogą zawsze wybrać Miejsce Startu na Posiadłościach Grupy." - name="land allow set home" /> + <action_set description="Przywileje pozwalające Członkom na omijanie ograniczeń na Posiadłościach Grupy." name="Parcel Powers"> + <action description="Pozwól na Edycję Terenu" longdescription="Członkowie w Funkcji z tym Przywilejem mogą zawsze edytować teren na Posiadłościach Grupy." name="land allow edit land"/> + <action description="Pozwól na Latanie" longdescription="Członkowie w Funkcji z tym Przywilejem mogą zawsze latać na Posiadłościach Grupy." name="land allow fly"/> + <action description="Pozwól na Tworzenie Obiektów" longdescription="Członkowie w Funkcji z tym Przywilejem mogą zawsze tworzyć obiekty na Posiadłościach Grupy." name="land allow create"/> + <action description="Pozwól na Zapamiętywanie Miejsc (LM)" longdescription="Członkowie w Funkcji z tym Przywilejem mogą zawsze zapamiętywać miejsca (LM) na Posiadłościach Grupy." name="land allow landmark"/> + <action description="Pozwól na wybór Miejsca Startu na Posiadłościach Grupy" longdescription="Członkowie w Funkcji z tym Przywilejem mogą używać menu Świat > Zapamiętaj Miejsce > Miejsce Startu na Posiadłości przypisanej Grupie." name="land allow set home"/> </action_set> - <action_set - description="Przywileje pozwalające na dawanie i odbieranie dostępu do Posiadłości Grupy zawierające możliwości unieruchomiania i wyrzucania Rezydentów." - name="Parcel Access"> - <action description="Zarządzanie Listą Dostępu do Posiadłości" - longdescription="Zarządzanie Listą Dostępu do Posiadłości pod O Posiadłości > Dostęp." - name="land manage allowed" /> - <action description="Zarządzanie Listą Usuniętych z Posiadłości (Bany)" - longdescription="Zarządzanie Listą Usuniętych z Posiadłości (Bany) pod O Posiadlości > Usuwanie." - name="land manage banned" /> - <action description="Selekcja opcji 'Wstęp Płatny...'" - longdescription="Selekcja opcji 'Wstęp Płatny...' pod O Posiadłości > Dostęp." - name="land manage passes" /> - <action description="Wyrzucanie i unieruchamianie Rezydentów na Posiadłościach" - longdescription="Członkowie w Funkcji z tym Przywilejem mogą wpływać na niepożądanych na Posiadłościach Grupy Rezydentów wybierając ich prawym klawiszem myszki i wybierając Więcej > 'Wyrzuć...' albo 'Unieruchom...'." - name="land admin" /> + <action_set description="Przywileje pozwalające na dawanie i odbieranie dostępu do Posiadłości Grupy zawierające możliwości unieruchomiania i wyrzucania Rezydentów." name="Parcel Access"> + <action description="Zarządzanie Listą Dostępu do Posiadłości" longdescription="Zarządzanie Listą Dostępu do Posiadłości pod O Posiadłości > Dostęp." name="land manage allowed"/> + <action description="Zarządzanie Listą Usuniętych z Posiadłości (Bany)" longdescription="Zarządzanie Listą Dostępu do Posiadłości pod O Posiadłości > Dostęp." name="land manage banned"/> + <action description="Selekcja opcji 'Wstęp Płatny'" longdescription="Selekcja opcji 'Wstęp Płatny'; pod O Posiadłości > Dostęp." name="land manage passes"/> + <action description="Wyrzucanie i unieruchamianie Rezydentów na Posiadłościach" longdescription="Członkowie w Funkcji z tym Przywilejem mogą wpływać na niepożądanych na Posiadłościach Grupy Rezydentów wybierając ich prawym klawiszem myszki i wybierając ';Wyrzuć' albo 'Unieruchom'." name="land admin"/> </action_set> - <action_set - description="Przywileje pozwalające na odsyłanie obiektów i przemieszczanie roślin z Linden Lab. Użyteczne przy porządkowaniu i przemieszczaniu roślinności. *UWAGA* Odsyłanie obiektów jest nieodwracalne." - name="Parcel Content"> - <action description="Odsyłanie obiektów należących do Grupy" - longdescription="Odsyłanie obiektów należących do Grupy pod O Posiadłości > Obiekty." - name="land return group owned" /> - <action description="Odsyłanie obiektów przypisanych do Grupy" - longdescription="Odsyłanie obiektów przypisanych do Grupy pod O Posiadłości > Obiekty." - name="land return group set" /> - <action description="Odsyłanie obiektów nie przypisanych do Grupy" - longdescription="Odsyłanie obiektów nie przypisanych do Grupy pod O Posiadłości > Obiekty." - name="land return non group" /> - <action description="Ogrodnictwo używając roślin z Linden Lab" - longdescription="Ogrodnictwo pozwala na umieszczanie i przemieszczanie drzew, roślin i trawy z Linden Lab. Te obiekty znajdują się w Twojej Szafie pod Zbiór > Obiekty, mogą też być stworzone używając przycisku Buduj." - name="land gardening" /> + <action_set description="Przywileje pozwalające na odsyłanie obiektów i przemieszczanie roślin z Linden Lab. Użyteczne przy porządkowaniu i przemieszczaniu roślinności. *UWAGA* Odsyłanie obiektów jest nieodwracalne." name="Parcel Content"> + <action description="Odsyłanie obiektów należących do Grupy" longdescription="Odsyłanie obiektów należących do Grupy pod O Posiadłości > Obiekty." name="land return group owned"/> + <action description="Odsyłanie obiektów przypisanych do Grupy" longdescription="Odsyłanie obiektów przypisanych do Grupy pod O Posiadłości > Obiekty." name="land return group set"/> + <action description="Odsyłanie obiektów nie przypisanych do Grupy" longdescription="Odsyłanie obiektów nie przypisanych do Grupy pod O Posiadłości > Obiekty." name="land return non group"/> + <action description="Ogrodnictwo używając roślin z Linden Lab" longdescription="Możliwość przemieszczenia roślin z Linden Lab. Obiekty te mogą zostać odnalezione w Twojej Szafie, w folderze Biblioteka > Folderze Obiektów lub mogą zostać stworzone dzięki aktywacji Narzędzi Edycji." name="land gardening"/> </action_set> - <action_set - description="Przywileje pozwalające na przypisywanie, modyfikacje i sprzedaż obiektów należących do Grupy. Dostęp poprzez Narzędzia Edycji > Ogólne. Wybierz obiekt prawym klawiszem myszki i wybierz Edycja żeby zobaczyć ustawienia." - name="Object Management"> - <action description="Przypisywanie obiektów do Grupy" - longdescription="Przypisywanie obiektów do Grupy pod Narzędzia Edycji > Ogólne." - name="object deed" /> - <action - description="Manipulowanie (wklejanie, kopiowanie, modyfikacja) obiektami należącymi do Grupy" - longdescription="Manipulowanie (wklejanie, kopiowanie, modyfikacja) obiektami należącymi do Grupy pod Narzędzia Edycji > Ogólne." - name="object manipulate" /> - <action description="Sprzedaż obiektów należących do Grupy" - longdescription="Sprzedaż obiektów należących do Grupy pod Narzędzia Edycji > Ogólne." - name="object set sale" /> + <action_set description="Przywileje pozwalające na odsyłanie obiektów i przemieszczenia roślin z Linden Lab. Użyteczne przy porządkowaniu i przemieszczenia roślinności. *UWAGA* Odsyłanie obiektów jest nieodwracalne." name="Object Management"> + <action description="Przypisywanie obiektów do Grupy" longdescription="Przypisywanie obiektów do Grupy w Narzędziach Edycji > Ogólne" name="object deed"/> + <action description="Manipulowanie (wklejanie, kopiowanie, modyfikacja) obiektami należącymi do Grupy" longdescription="Manipulowanie (wklejanie, kopiowanie, modyfikacja) obiektami należącymi do Grupy w Narzędziach Edycji > Ogólne" name="object manipulate"/> + <action description="Sprzedaż obiektów należących do Grupy" longdescription="Sprzedaż obiektów należących do Grupy pod Narzędzia Edycji > Ogólne." name="object set sale"/> </action_set> - <action_set - description="Przywileje pozwalające na wybór opłat grupowych, otrzymywanie dochodu i ograniczanie dostępu do historii konta grupy." - name="Accounting"> - <action description="Opłaty grupowe i dochód grupowy" - longdescription="Członkowie w Funkcji z tym Przywilejem będą automatycznie wnosić opłaty grupowe i będą otrzymywać dochód grupowy. Tzn. będą codziennie otrzymywać część dochodu ze sprzedaży Posiadłości Grupy oraz będą partycypować w kosztach ogłoszeń itp." - name="accounting accountable" /> + <action_set description="Przywileje pozwalające na wybór opłat grupowych, otrzymywanie dochodu i ograniczanie dostępu do historii konta grupy." name="Accounting"> + <action description="Opłaty grupowe i dochód grupowy" longdescription="Członkowie w Funkcji z tym Przywilejem będą automatycznie wnosić opłaty grupowe i będą otrzymywać dochód grupowy. Tzn. będą codziennie otrzymywać część dochodu ze sprzedaży Posiadłości Grupy oraz będą partycypować w kosztach ogłoszeń itp." name="accounting accountable"/> </action_set> - <action_set - description="Przywileje pozwalające na wysyłanie, odbieranie i czytanie Notek Grupy." - name="Notices"> - <action description="Wysyłanie Notek" - longdescription="Członkowie w Funkcji z tym Przywilejem mogą wysyłać Notki wybierając O Grupie > Notek." - name="notices send" /> - <action description="Odbieranie Notek i dostęp do dawniejszych Notek" - longdescription="Członkowie w Funkcji z tym Przywilejem mogą odbierać nowe i czytać dawniejsze Notki wybierając O Grupie > Notki." - name="notices receive" /> + <action_set description="Przywileje pozwalające na wysyłanie, odbieranie i czytanie Notek Grupy." name="Notices"> + <action description="Wysyłanie Notek" longdescription="Członkowie w Funkcji z tym Przywilejem mogą wysyłać Notki wybierając O Grupie > Notek." name="notices send"/> + <action description="Odbieranie Notek i dostęp do dawniejszych Notek" longdescription="Członkowie w Funkcji z tym Przywilejem mogą odbierać nowe i czytać dawniejsze Notki wybierając O Grupie > Notki." name="notices receive"/> </action_set> - <action_set - description="Przywileje pozwalające na zgłaszanie Propozycji, głosowanie nad Propozycjami i śledzenie historii głosowania." - name="Proposals"> - <action description="Zgłaszanie Propozycji" - longdescription="Członkowie w Funkcji z tym Przywilejem mogą zgłaszać Propozycje do głosowania wybierając O Grupie > Propozycje." - name="proposal start" /> - <action description="Głosowanie nad Propozycjami" - longdescription="Członkowie w Funkcji z tym Przywilejem mogą głosować nad Propozycjami zgłoszonymi do głosowania wybierając O Grupie > Propozycje." - name="proposal vote" /> + <action_set description="Przywileje pozwalające na zgłaszanie Propozycji, głosowanie nad Propozycjami i śledzenie historii głosowania." name="Proposals"> + <action description="Zgłaszanie Propozycji" longdescription="Członkowie w Funkcji z tym Przywilejem mogą zgłaszać Propozycje do głosowania wybierając O Grupie > Propozycje." name="proposal start"/> + <action description="Głosowanie nad Propozycjami" longdescription="Członkowie w Funkcji z tym Przywilejem mogą głosować nad Propozycjami zgłoszonymi do głosowania wybierając O Grupie > Propozycje." name="proposal vote"/> </action_set> <action_set description="Przywileje kontrolujące czat i rozmowy grupowe." name="Chat"> - <action description="Dostęp do Czatu Grupowego" - longdescription="Członkowie w Funkcji z tym Przywilejem mogą uczestniczyć w czacie i rozmowach grupowych." - name="join group chat" /> - <action description="Dostęp do Rozmów Grupowych" - longdescription="Członkowie w Funkcji z tym Przywilejem mogą uczestniczyć w rozmowach grupowych. UWAGA: Dostęp do Czatu Grupowego jest wymagany dla rozmów grupowych." - name="join voice chat" /> - <action description="Moderator Czatu Grupowego" - longdescription="Członkowie w Funkcji z tym Przywilejem mogą kontrolować dostęp do czatu i rozmów grupowych." - name="moderate group chat" /> + <action description="Dostęp do Czatu Grupowego" longdescription="Członkowie w Funkcji z tym Przywilejem mogą uczestniczyć w czacie i rozmowach grupowych." name="join group chat"/> + <action description="Dostęp do Rozmów Grupowych" longdescription="Członkowie w Funkcji z tym Przywilejem mogą uczestniczyć w rozmowach grupowych. UWAGA: Dostęp do Czatu Grupowego jest wymagany dla rozmów grupowych." name="join voice chat"/> + <action description="Moderator Czatu Grupowego" longdescription="Członkowie w Funkcji z tym Przywilejem mogą kontrolować dostęp do czatu i rozmów grupowych." name="moderate group chat"/> </action_set> </role_actions> diff --git a/indra/newview/skins/default/xui/pl/sidepanel_appearance.xml b/indra/newview/skins/default/xui/pl/sidepanel_appearance.xml new file mode 100644 index 0000000000..ecbf262777 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/sidepanel_appearance.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Ubrania" name="appearance panel"> + <string name="No Outfit" value="Bez Ubrania"/> + <panel name="panel_currentlook"> + <text name="currentlook_title"> + (niezapisane) + </text> + </panel> + <filter_editor label="Przeglądaj Ubrania" name="Filter"/> +</panel> diff --git a/indra/newview/skins/default/xui/pl/sidepanel_inventory.xml b/indra/newview/skins/default/xui/pl/sidepanel_inventory.xml new file mode 100644 index 0000000000..d7a813b1b7 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/sidepanel_inventory.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Rzeczy" name="objects panel"> + <panel label="" name="sidepanel__inventory_panel"> + <panel name="button_panel"> + <button label="Profil" name="info_btn"/> + <button label="Ubierz" name="wear_btn"/> + <button label="Odtwarzaj" name="play_btn"/> + <button label="Teleportuj" name="teleport_btn"/> + </panel> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/pl/sidepanel_item_info.xml b/indra/newview/skins/default/xui/pl/sidepanel_item_info.xml index b70c76f652..3b038a7102 100644 --- a/indra/newview/skins/default/xui/pl/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/pl/sidepanel_item_info.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="item properties" title="Właściwości Obiektu w Szafie"> +<panel name="item properties" title="Profil Obiektu"> <panel.string name="unknown"> (nieznany) </panel.string> @@ -15,7 +15,8 @@ <panel.string name="acquiredDate"> [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="title" value="Właściwości Obiektu"/> + <text name="title" value="Profil Obiektu"/> + <text name="where" value="(Szafa)"/> <panel label=""> <text name="LabelItemNameTitle"> Nazwa: @@ -37,34 +38,36 @@ <text name="LabelAcquiredDate"> Wed May 24 12:50:46 2006 </text> - <text name="OwnerLabel"> - Ty: - </text> - <check_box label="Edytuj" name="CheckOwnerModify"/> - <check_box label="Kopiuj" name="CheckOwnerCopy"/> - <check_box label="Oddawaj" name="CheckOwnerTransfer"/> - <text name="AnyoneLabel"> - Każdemu: - </text> - <check_box label="Kopiuj" name="CheckEveryoneCopy"/> - <text name="GroupLabel"> - Groupa: - </text> - <check_box label="Podziel się" name="CheckShareWithGroup"/> - <text name="NextOwnerLabel"> - Następny właściciel: - </text> - <check_box label="Edytuje" name="CheckNextOwnerModify"/> - <check_box label="Kopiuje" name="CheckNextOwnerCopy"/> - <check_box label="Oddaje" name="CheckNextOwnerTransfer"/> + <panel name="perms_inv"> + <text name="perm_modify"> + Ty możesz: + </text> + <check_box label="Zmienia" name="CheckOwnerModify"/> + <check_box label="Kopiuje" name="CheckOwnerCopy"/> + <check_box label="Sprzedaje/Oddaje" name="CheckOwnerTransfer"/> + <text name="AnyoneLabel"> + Każdy: + </text> + <check_box label="Kopiuje" name="CheckEveryoneCopy"/> + <text name="GroupLabel"> + Grupa: + </text> + <check_box label="Udostępnij" name="CheckShareWithGroup" tool_tip="Pozwól wszystkim członkom ustawionej grupy na dzielenie prawa do modyfikacji dla tego obiektu. Musisz Przypisać aby aktywować ograniczenia wynikające z roli."/> + <text name="NextOwnerLabel"> + Następny Właściciel: + </text> + <check_box label="Modyfikuje" name="CheckNextOwnerModify"/> + <check_box label="Kopiuje" name="CheckNextOwnerCopy"/> + <check_box label="Sprzedaje/Oddaje" name="CheckNextOwnerTransfer" tool_tip="Następny właściciel może oddać lub sprzedać ten obiekt"/> + </panel> <check_box label="Na Sprzedaż" name="CheckPurchase"/> <combo_box name="combobox sale copy"> <combo_box.item label="Kopia" name="Copy"/> <combo_box.item label="Originał" name="Original"/> </combo_box> - <spinner label="Cena:" name="Edit Cost"/> - <text name="CurrencySymbol"> - L$ - </text> + <spinner label="Cena: L$" name="Edit Cost"/> + </panel> + <panel name="button_panel"> + <button label="Anuluj" name="cancel_btn"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/pl/sidepanel_task_info.xml b/indra/newview/skins/default/xui/pl/sidepanel_task_info.xml new file mode 100644 index 0000000000..17cd13f970 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/sidepanel_task_info.xml @@ -0,0 +1,129 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel name="object properties" title="Profil Obiektu"> + <panel.string name="text deed continued"> + Przypisz + </panel.string> + <panel.string name="text deed"> + Przypisz + </panel.string> + <panel.string name="text modify info 1"> + Możesz modyfikować ten obiekt + </panel.string> + <panel.string name="text modify info 2"> + Możesz modyfikować te obiekty + </panel.string> + <panel.string name="text modify info 3"> + Nie możesz modyfikować tego obiektu + </panel.string> + <panel.string name="text modify info 4"> + Nie możesz modyfikować tych obiektów + </panel.string> + <panel.string name="text modify warning"> + Ten obiekt ma części zgrupowane + </panel.string> + <panel.string name="Cost Default"> + Cena: L$ + </panel.string> + <panel.string name="Cost Total"> + Cena całkowita: L$ + </panel.string> + <panel.string name="Cost Per Unit"> + Cena za jednostkę: L$ + </panel.string> + <panel.string name="Cost Mixed"> + Cena mieszana + </panel.string> + <panel.string name="Sale Mixed"> + Sprzedaż mieszana + </panel.string> + <text name="title" value="Profil Obiektu"/> + <text name="where" value="(w świecie)"/> + <panel label="" name="properties_panel"> + <text name="Name:"> + Nazwa: + </text> + <text name="Description:"> + Opis: + </text> + <text name="CreatorNameLabel"> + Twórca: + </text> + <text name="Creator Name"> + Erica Linden + </text> + <text name="Owner:"> + Właściciel: + </text> + <text name="Owner Name"> + Erica Linden + </text> + <text name="Group_label"> + Grupa: + </text> + <button name="button set group" tool_tip="Wybierz grupę by udostępnić jej prawa do tego obiektu"/> + <name_box initial_value="Ładowanie..." name="Group Name Proxy"/> + <button label="Przypisz" label_selected="Przypisz" name="button deed" tool_tip="Opcja przepisania udostępnia obiektowi takie same prawa jak zostały zaznaczone dla następnego właściciela. Obiekty udostępnione grupie mogą zostać przepisane dla grupy przez oficera grupy."/> + <text name="label click action"> + Kliknij by: + </text> + <combo_box name="clickaction"> + <combo_box.item label="Dotknij (domyślne)" name="Touch/grab(default)"/> + <combo_box.item label="Usiądź na obiekcie" name="Sitonobject"/> + <combo_box.item label="Kup obiekt" name="Buyobject"/> + <combo_box.item label="Zapłać obiektowi" name="Payobject"/> + <combo_box.item label="Otwórz" name="Open"/> + </combo_box> + <panel name="perms_inv"> + <text name="perm_modify"> + Możesz modyfikować ten obiekt + </text> + <text name="Anyone can:"> + Każdy: + </text> + <check_box label="Kopiuj" name="checkbox allow everyone copy"/> + <check_box label="Przesuń" name="checkbox allow everyone move"/> + <text name="GroupLabel"> + Groupie: + </text> + <check_box label="Udostępnij" name="checkbox share with group" tool_tip="Udostępnij prawa do modyfikacji tego obiektu wszystkim członkom, którzy posiadają przywilej modyfikacji obiektów grupy. By ograniczyć, przypisz obiekt do grupy."/> + <text name="NextOwnerLabel"> + Następny Właściciel: + </text> + <check_box label="Modyfikuj" name="checkbox next owner can modify"/> + <check_box label="Kopiuj" name="checkbox next owner can copy"/> + <check_box label="Oddaj" name="checkbox next owner can transfer" tool_tip="Następny właściciel może sprzedać lub oddać ten obiekt"/> + </panel> + <check_box label="Na Sprzedaż" name="checkbox for sale"/> + <combo_box name="sale type"> + <combo_box.item label="Kopiuj" name="Copy"/> + <combo_box.item label="Treść" name="Contents"/> + <combo_box.item label="Oryginał" name="Original"/> + </combo_box> + <spinner label="Cena: L$" name="Edit Cost"/> + <check_box label="Pokaż w wyszukiwarce" name="search_check" tool_tip="Udostępnij widzialność tego obiektu w wyszukiwarce"/> + <text name="B:"> + B: + </text> + <text name="O:"> + O: + </text> + <text name="G:"> + G: + </text> + <text name="E:"> + E: + </text> + <text name="N:"> + N: + </text> + <text name="F:"> + F: + </text> + </panel> + <panel name="button_panel"> + <button label="Otwórz" name="open_btn"/> + <button label="Zapłać" name="pay_btn"/> + <button label="Kup" name="buy_btn"/> + <button label="Szczegóły" name="details_btn"/> + </panel> +</panel> diff --git a/indra/newview/skins/default/xui/pl/strings.xml b/indra/newview/skins/default/xui/pl/strings.xml index e8dcfac02d..c72f783a51 100644 --- a/indra/newview/skins/default/xui/pl/strings.xml +++ b/indra/newview/skins/default/xui/pl/strings.xml @@ -1,9 +1,12 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <!-- This file contains strings that used to be hardcoded in the source. It is only for those strings which do not belong in a floater. - For example, the strings used in avatar chat bubbles, and strings + For example, the strings used in avatar chat bubbles, and strings that are returned from one component and may appear in many places--> <strings> + <string name="CAPITALIZED_APP_NAME"> + SECOND LIFE + </string> <string name="SUPPORT_SITE"> Portal Pomocy Second Life </string> @@ -11,7 +14,22 @@ Wykrywanie dysku twardego... </string> <string name="StartupLoading"> - Ładowanie + Ładowanie [APP_NAME]... + </string> + <string name="StartupClearingCache"> + Czyszczenie bufora danych... + </string> + <string name="StartupInitializingTextureCache"> + Inicjowanie bufora danych tekstur... + </string> + <string name="StartupInitializingVFS"> + Inicjowanie VFS... + </string> + <string name="ProgressRestoring"> + Przywracanie... + </string> + <string name="ProgressChangingResolution"> + Zmiana rozdzielczości... </string> <string name="LoginInProgress"> Trwa logowanie. [APP_NAME] Proszę czekać. @@ -73,12 +91,33 @@ <string name="LoginFailedNoNetwork"> Błąd sieci: Brak połączenia z siecią, sprawdź status swojego połączenia internetowego. </string> + <string name="LoginFailed"> + Logowanie nie powiodło się. + </string> <string name="Quit"> Wyłącz Program </string> <string name="AgentLostConnection"> Ten region może mieć problemy. Sprawdź podłączenie do Internetu. </string> + <string name="SavingSettings"> + Zachowanie ustawień... + </string> + <string name="LoggingOut"> + Trwa wylogowanie... + </string> + <string name="ShuttingDown"> + Zamykanie... + </string> + <string name="YouHaveBeenDisconnected"> + Nastąpiło rozłączenie z regionem. + </string> + <string name="SentToInvalidRegion"> + Region jest niedostępny. + </string> + <string name="TestingDisconnect"> + Nastąpiło rozłączenie testowania klienta + </string> <string name="TooltipPerson"> Osoba </string> @@ -131,7 +170,25 @@ Kliknij by zobaczyć szczegóły tego miejsca </string> <string name="TooltipAgentUrl"> - Kliknij by zobaczyć profil tego rezydenta + Kliknij aby zobaczyc profil Rezydenta + </string> + <string name="TooltipAgentMute"> + Kliknij aby wyciszyc tego Rezydenta + </string> + <string name="TooltipAgentUnmute"> + Kliknij aby cofnąć zablokowanie tego Rezydenta + </string> + <string name="TooltipAgentIM"> + Kliknij aby wysłać wiadomość IM do tego Rezydenta + </string> + <string name="TooltipAgentPay"> + Kliknij aby zapłacić temu Rezydentowi + </string> + <string name="TooltipAgentOfferTeleport"> + Kliknij aby oferować teleport temu Rezydentowi + </string> + <string name="TooltipAgentRequestFriend"> + Kliknij aby wysłać temu Rezydentowi zaproszenie do Znajomych </string> <string name="TooltipGroupUrl"> Kliknij by zobaczyć opis tej grupy @@ -158,14 +215,33 @@ Kliknij by uruchomić secondlife:// command </string> <string name="CurrentURL" value=" Obecny Adres: [CurrentURL]"/> + <string name="TooltipPrice" value="L$[PRICE]-"/> <string name="SLurlLabelTeleport"> Teleportuj do </string> <string name="SLurlLabelShowOnMap"> Pokaż na Mapie </string> + <string name="SLappAgentMute"> + Zablokuj + </string> + <string name="SLappAgentUnmute"> + Cofnij zablokowanie + </string> + <string name="SLappAgentIM"> + IM + </string> + <string name="SLappAgentPay"> + Zapłać + </string> + <string name="SLappAgentOfferTeleport"> + Teleportuj do + </string> + <string name="SLappAgentRequestFriend"> + Oferta znajomości + </string> <string name="BUTTON_CLOSE_DARWIN"> - Zamknij (⌘W) + Zamknij (⌘W) </string> <string name="BUTTON_CLOSE_WIN"> Zamknij (Ctrl+W) @@ -182,9 +258,6 @@ <string name="BUTTON_DOCK"> Przyłącz </string> - <string name="BUTTON_UNDOCK"> - Odłącz - </string> <string name="BUTTON_HELP"> Pokaż Pomoc </string> @@ -209,9 +282,6 @@ <string name="AvatarNameWaiting"> (ładowanie) </string> - <string name="AvatarNameHippos"> - (hippos) - </string> <string name="GroupNameNone"> (brak danych) </string> @@ -320,6 +390,9 @@ <string name="symbolic link"> link </string> + <string name="symbolic folder link"> + link folderu + </string> <string name="AvatarAway"> Śpi </string> @@ -572,6 +645,9 @@ <string name="hang_up"> Połączenie rozmowy utracone. </string> + <string name="reconnect_nearby"> + Przełączanie do pobliskich rozmów głosowych + </string> <string name="ScriptQuestionCautionChatGranted"> '[OBJECTNAME]', właściciel: '[OWNERNAME]', położenie: [REGIONNAME] [REGIONPOS], pozwala Ci na: [PERMISSIONS]. </string> @@ -734,6 +810,9 @@ <string name="invalid"> niewłaściwa funkcja </string> + <string name="NewWearable"> + Nowa [WEARABLE_ITEM] + </string> <string name="next"> Następne </string> @@ -764,11 +843,8 @@ <string name="TeleportOffer"> Oferta teleportacji </string> - <string name="StartUpNotification"> - [%d] nowe zawiadomienie zostało wysłane kiedy byłeś w trybie oddalenia... - </string> <string name="StartUpNotifications"> - [%d] nowe zawiadomienia zostały wysłane kiedy byłeś w trybie oddalenia... + Nowe zawiadomienia zostały wysłane kiedy byłeś w trybie oddalenia... </string> <string name="OverflowInfoChannelString"> Masz jeszcze [%d] powiadomień @@ -804,11 +880,13 @@ Wybierz ESC by powrócić do trybu widoku normalne </string> <string name="InventoryNoMatchingItems"> - Brak wyników w szafie dla wpisanego słowa. + Obiektu nie znaleziono w Szafie. Spróbuj [secondlife:///app/search/groups "Search"]. + </string> + <string name="FavoritesNoMatchingItems"> + Przeciągnij landmark tutaj aby dodać go do swoich ulubionych. </string> <string name="InventoryNoTexture"> - Nie posiadasz kopi -tej tekstury w swojej szafie + Nie posiadasz kopii tej tekstury w Twojej Szafie. </string> <string name="no_transfer" value=" (brak oddawania)"/> <string name="no_modify" value=" (brak modyfikowania)"/> @@ -823,6 +901,7 @@ tej tekstury w swojej szafie Brak zawartości </string> <string name="WornOnAttachmentPoint" value=" (założony na [ATTACHMENT_POINT])"/> + <string name="ActiveGesture" value="[GESLABEL] (aktywne)"/> <string name="Chat" value=" Czat :"/> <string name="Sound" value=" Dźwięk :"/> <string name="Wait" value=" --- Zaczekaj :"/> @@ -916,6 +995,9 @@ tej tekstury w swojej szafie <string name="InvFolder My Outfits"> Moje Ubranie </string> + <string name="InvFolder Accessories"> + Akcesoria + </string> <string name="InvFolder Friends"> Znajomi </string> @@ -1266,11 +1348,164 @@ tej tekstury w swojej szafie wszystkie majątki, które nadzorujesz dla [OWNER] </string> <string name="RegionInfoAllowedResidents"> - Rezydenci mający dostęp: ([ALLOWEDAGENTS], max [MAXACCESS]) + Dozwoleni Rezydenci: ([ALLOWEDAGENTS], maks. [MAXACCESS]) </string> <string name="RegionInfoAllowedGroups"> Grupy mające dostęp: ([ALLOWEDGROUPS], max [MAXACCESS]) </string> + <string name="ScriptLimitsParcelScriptMemory"> + Pamięć Skryptów Parceli + </string> + <string name="ScriptLimitsParcelsOwned"> + Parcele: [PARCELS] + </string> + <string name="ScriptLimitsMemoryUsed"> + Pamięć wykorzystana: [COUNT] kb z [MAX] kb; [AVAILABLE] kb pozostało + </string> + <string name="ScriptLimitsMemoryUsedSimple"> + Pamięć wykorzystana: [COUNT] kb + </string> + <string name="ScriptLimitsParcelScriptURLs"> + Skrypty URL Parceli + </string> + <string name="ScriptLimitsURLsUsed"> + URL: [COUNT] z [MAX]; [AVAILABLE] dostępne + </string> + <string name="ScriptLimitsURLsUsedSimple"> + URL: [COUNT] + </string> + <string name="ScriptLimitsRequestError"> + Błąd wyszukiwania informacji + </string> + <string name="ScriptLimitsRequestNoParcelSelected"> + Posiadłość nie została wybrana + </string> + <string name="ScriptLimitsRequestWrongRegion"> + Błąd: informacja o skrypcie jest dostępna tylko w obecnym regionie. + </string> + <string name="ScriptLimitsRequestWaiting"> + Wyszukiwanie informacji... + </string> + <string name="ScriptLimitsRequestDontOwnParcel"> + Nie masz pozwolenia na sprawdzenie parceli. + </string> + <string name="SITTING_ON"> + Usiądź na + </string> + <string name="ATTACH_CHEST"> + Klatka piersiowa + </string> + <string name="ATTACH_HEAD"> + Głowa + </string> + <string name="ATTACH_LSHOULDER"> + Lewe Ramię + </string> + <string name="ATTACH_RSHOULDER"> + Ramię Prawe + </string> + <string name="ATTACH_LHAND"> + Ręka Lewa + </string> + <string name="ATTACH_RHAND"> + Prawa Ręka + </string> + <string name="ATTACH_LFOOT"> + Lewa Stopa + </string> + <string name="ATTACH_RFOOT"> + Stopa Prawa + </string> + <string name="ATTACH_BACK"> + Plecy + </string> + <string name="ATTACH_PELVIS"> + Miednica + </string> + <string name="ATTACH_MOUTH"> + Usta + </string> + <string name="ATTACH_CHIN"> + Podbródek + </string> + <string name="ATTACH_LEAR"> + Ucho Lewe + </string> + <string name="ATTACH_REAR"> + Prawe Ucho + </string> + <string name="ATTACH_LEYE"> + Lewe Oko + </string> + <string name="ATTACH_REYE"> + Prawe Oko + </string> + <string name="ATTACH_NOSE"> + Nos + </string> + <string name="ATTACH_RUARM"> + Ramię P Górne + </string> + <string name="ATTACH_RLARM"> + Prawe dolne ramię + </string> + <string name="ATTACH_LUARM"> + Ramię L Górne + </string> + <string name="ATTACH_LLARM"> + Lewe dolne ramię + </string> + <string name="ATTACH_RHIP"> + Biodro prawe + </string> + <string name="ATTACH_RULEG"> + P Górna Noga + </string> + <string name="ATTACH_RLLEG"> + Noga P Dolna + </string> + <string name="ATTACH_LHIP"> + Biodro Lewe + </string> + <string name="ATTACH_LULEG"> + L Górna Noga + </string> + <string name="ATTACH_LLLEG"> + Noga L Dolna + </string> + <string name="ATTACH_BELLY"> + Brzuch + </string> + <string name="ATTACH_RPEC"> + Prawa klatka + </string> + <string name="ATTACH_LPEC"> + Lewa klatka + </string> + <string name="ATTACH_HUD_CENTER_2"> + HUD Środek 2 + </string> + <string name="ATTACH_HUD_TOP_RIGHT"> + HUD P Górny + </string> + <string name="ATTACH_HUD_TOP_CENTER"> + HUD Środek Górny + </string> + <string name="ATTACH_HUD_TOP_LEFT"> + HUD L Góra + </string> + <string name="ATTACH_HUD_CENTER_1"> + HUD Środek 1 + </string> + <string name="ATTACH_HUD_BOTTOM_LEFT"> + HUD Dolna L Strona + </string> + <string name="ATTACH_HUD_BOTTOM"> + HUD Dolny + </string> + <string name="ATTACH_HUD_BOTTOM_RIGHT"> + HUD Dolna P Strona + </string> <string name="CursorPos"> Linia [LINE], Kolumna [COLUMN] </string> @@ -1280,11 +1515,17 @@ tej tekstury w swojej szafie <string name="PanelContentsNewScript"> Nowy Skrypt </string> + <string name="PanelContentsTooltip"> + Zawartość obiektu + </string> + <string name="BusyModeResponseDefault"> + Rezydent, do którego wysłałeś wiadomość prywatną znajduje się w trybie pracy. Oznacza to, iż Twoja wiadomość zostanie zapisana do przeglądnięcia poźniej. + </string> <string name="MuteByName"> (według nazwy) </string> <string name="MuteAgent"> - (rezydenta) + (Rezydent) </string> <string name="MuteObject"> (obiekt) @@ -1315,6 +1556,15 @@ tej tekstury w swojej szafie <string name="ClassifiedUpdateAfterPublish"> (zostanie zaktualizowane po publikacji) </string> + <string name="NoPicksClassifiedsText"> + Nie dodałeś nic do Ulubionych i Reklam. Kliknij na poniższy przycisk Dodaj aby dodać miejsce do Ulubionych lub Reklamy. + </string> + <string name="NoAvatarPicksClassifiedsText"> + Użytkownik nie posiada Ulubionych lub Reklam + </string> + <string name="PicksClassifiedsLoadingText"> + Ładowanie... + </string> <string name="MultiPreviewTitle"> Podgląd </string> @@ -1385,22 +1635,36 @@ tej tekstury w swojej szafie Anuluj </string> <string name="UploadingCosts"> - Koszty załadowania [%s] + Załadowanie [NAME] kosztuje [AMOUNT]L$ + </string> + <string name="BuyingCosts"> + Cena zakupu tego wynosi L$ [AMOUNT] </string> <string name="UnknownFileExtension"> Nieznane rozszerzenie dla pliku [.%s] Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh </string> + <string name="MuteObject2"> + Zablokuj + </string> <string name="AddLandmarkNavBarMenu"> Dodaj Ulubione Miejsce... </string> <string name="EditLandmarkNavBarMenu"> Edytuj Ulubione Miejce... </string> - <string name="accel-mac-control">⌃</string> - <string name="accel-mac-command">⌘</string> - <string name="accel-mac-option">⌥</string> - <string name="accel-mac-shift">⇧</string> + <string name="accel-mac-control"> + ⌃ + </string> + <string name="accel-mac-command"> + ⌘ + </string> + <string name="accel-mac-option"> + ⌥ + </string> + <string name="accel-mac-shift"> + ⇧ + </string> <string name="accel-win-control"> Ctrl+ </string> @@ -1638,43 +1902,25 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Cień o godzinie 5 </string> <string name="All White"> - Wszystko Białe + Wszystko białe </string> <string name="Anime Eyes"> - Animuj Oczy + Animuj oczy </string> <string name="Arced"> Obrócony </string> <string name="Arm Length"> - Długość Ramienia + Długość ramienia </string> <string name="Attached"> Dołączone </string> <string name="Attached Earlobes"> - Płatki Uszu Dołączone - </string> - <string name="Back Bangs"> - Tylnie Pasemka - </string> - <string name="Back Bangs Down"> - Tylnie Pasemka w Dół - </string> - <string name="Back Bangs Up"> - Tylnie Pasemka do Góry + Płatki uszu dołączone </string> <string name="Back Fringe"> - Tylnia Grzywka - </string> - <string name="Back Hair"> - Back Hair - </string> - <string name="Back Hair Down"> - Back Hair Down - </string> - <string name="Back Hair Up"> - Back Hair Up + Tylnia grzywka </string> <string name="Baggy"> Wypchane @@ -1682,12 +1928,6 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. <string name="Bangs"> Pasemka </string> - <string name="Bangs Down"> - Pasemka w Dół - </string> - <string name="Bangs Up"> - Pasemka do Góry - </string> <string name="Beady Eyes"> Oczy Załzawione </string> @@ -1700,17 +1940,14 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. <string name="Big Butt"> Duży Pośladek </string> - <string name="Big Eyeball"> - Duża Gałka Oczna - </string> <string name="Big Hair Back"> - Duże Włosy: z Tyłu + Duże Włosy: z tyłu </string> <string name="Big Hair Front"> - Duże Włosy: z Przodu + Duże Włosy: z przodu </string> <string name="Big Hair Top"> - Duże Włosy: z Góry + Duże Włosy: z góry </string> <string name="Big Head"> Duża Głowa @@ -1728,22 +1965,22 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Blond </string> <string name="Blonde Hair"> - Włosy Koloru Blond + Włosy Blond </string> <string name="Blush"> Rumieniec </string> <string name="Blush Color"> - Kolor Rumieńca + Kolor rumieńca </string> <string name="Blush Opacity"> - Intensywność Rumieńca + Intensywność rumieńca </string> <string name="Body Definition"> - Detale Ciała + Detale ciała </string> <string name="Body Fat"> - Zawartość Tkanki Tłuszczowej + Zawartość tkanki tłuszczowej </string> <string name="Body Freckles"> Piegi @@ -1761,13 +1998,13 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Bow Legged </string> <string name="Breast Buoyancy"> - Jędrność Piersi + Jędrność piersi </string> <string name="Breast Cleavage"> - Odstęp Między Piersiami + Odstęp między piersiami </string> <string name="Breast Size"> - Rozmiar Piersi + Rozmiar piersi </string> <string name="Bridge Width"> Szerokość @@ -1776,7 +2013,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Szerokie </string> <string name="Brow Size"> - Rozmiar Czoła + Rozmiar czoła </string> <string name="Bug Eyes"> Bug Eyes @@ -1812,34 +2049,34 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Chaplin </string> <string name="Cheek Bones"> - Kości Policzkowe + Kości policzkowe </string> <string name="Chest Size"> - Rozmiar Klatki Piersiowej + Rozmiar klatki piersiowej </string> <string name="Chin Angle"> - Kąt Podbródka + Kąt podbródka </string> <string name="Chin Cleft"> - Dołek w Podbródku + Dołek w podbródku </string> <string name="Chin Curtains"> - Zasłonięcie Podbródka + Zasłonięcie podbródka </string> <string name="Chin Depth"> - Długość Podbródka + Długość podbródka </string> <string name="Chin Heavy"> - Ciężar Podbródka + Ciężar podbródka </string> <string name="Chin In"> - Podbródek Wewnątrz + Podbródek wewnątrz </string> <string name="Chin Out"> - Podbródek Zewnętrzny + Podbródek zewnętrzny </string> <string name="Chin-Neck"> - Podwójny Podbródek + Podwójny podbródek </string> <string name="Clear"> Wyczyść @@ -1854,32 +2091,29 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Zamknięte </string> <string name="Closed Back"> - Zamknięte z Tyłu + Zamknięte z tyłu </string> <string name="Closed Front"> - Zamknięte z Przodu + Zamknięte z przodu </string> <string name="Closed Left"> - Lewe Oko Zamknięte + Lewe Oko zamknięte </string> <string name="Closed Right"> - Prawe Oko Zamknięte + Prawe Oko zamknięte </string> <string name="Coin Purse"> Coin Purse </string> <string name="Collar Back"> - Kołnierz z Tyłu + Kołnierz z tyłu </string> <string name="Collar Front"> - Kołnierz z Przodu + Kołnierz z przodu </string> <string name="Corner Down"> Corner Down </string> - <string name="Corner Normal"> - Corner Normal - </string> <string name="Corner Up"> Corner Up </string> @@ -1887,10 +2121,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Pognieciony </string> <string name="Crooked Nose"> - Skrzywienie Nosa - </string> - <string name="Cropped Hair"> - Przycięte Włosy + Skrzywienie nosa </string> <string name="Cuff Flare"> Cuff Flare @@ -1899,7 +2130,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Ciemne </string> <string name="Dark Green"> - Ciemne Zielone + Ciemne zielone </string> <string name="Darker"> Ciemniejsze @@ -1910,17 +2141,11 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. <string name="Default Heels"> Domyślne Buty na Obcasie </string> - <string name="Default Toe"> - Domyślny Palec - </string> <string name="Dense"> Gęstość </string> - <string name="Dense hair"> - Gęste Włosy - </string> <string name="Double Chin"> - Podwójny Podbródek + Podwójny podbródek </string> <string name="Downturned"> Downturned @@ -1929,61 +2154,58 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Duffle Bag </string> <string name="Ear Angle"> - Odstawanie Uszu + Odstawanie uszu </string> <string name="Ear Size"> - Rozmiar Uszu + Rozmiar uszu </string> <string name="Ear Tips"> - Wierzchołki Uszu + Wierzchołki uszu </string> <string name="Egg Head"> - Jajowata Głowa + Jajowata głowa </string> <string name="Eye Bags"> - Woreczek Łzowy + Woreczek łzowy </string> <string name="Eye Color"> - Kolor Oczu + Kolor oczu </string> <string name="Eye Depth"> - Głębokość Osadzenia Oczu + Głębokość osadzenia oczu </string> <string name="Eye Lightness"> - Ustawienie Jasności Oczu + Ustawienie jasności oczu </string> <string name="Eye Opening"> - Oczy Otwarte + Oczy otwarte </string> <string name="Eye Pop"> - Różnica w Wielkości Oczu + Różnica w wielkości oczu </string> <string name="Eye Size"> - Rozmiar Oczu + Rozmiar oczu </string> <string name="Eye Spacing"> - Rozstaw Oczu - </string> - <string name="Eyeball Size"> - Wielkość Gałki Ocznej + Rozstaw oczu </string> <string name="Eyebrow Arc"> - Łuk Brwiowy + Łuk brwiowy </string> <string name="Eyebrow Density"> - Gęstość Brwi + Gęstość brwi </string> <string name="Eyebrow Height"> - Wysokość Brwi + Wysokość brwi </string> <string name="Eyebrow Points"> - Kształt Brwi + Kształt brwi </string> <string name="Eyebrow Size"> - Rozmiar Brwi + Rozmiar brwi </string> <string name="Eyelash Length"> - Długość Rzęs + Długość rzęs </string> <string name="Eyeliner"> Eyeliner @@ -1991,68 +2213,20 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. <string name="Eyeliner Color"> Kolor Eyeliner'a </string> - <string name="Eyes Back"> - Eyes Back - </string> <string name="Eyes Bugged"> Eyes Bugged </string> - <string name="Eyes Forward"> - Eyes Forward - </string> - <string name="Eyes Long Head"> - Eyes Long Head - </string> - <string name="Eyes Shear Left Up"> - Eyes Shear Left Up - </string> - <string name="Eyes Shear Right Up"> - Eyes Shear Right Up - </string> - <string name="Eyes Short Head"> - Eyes Short Head - </string> - <string name="Eyes Spread"> - Rozmieszczenie Oczu - </string> - <string name="Eyes Sunken"> - Eyes Sunken - </string> - <string name="Eyes Together"> - Oczy Razem - </string> <string name="Face Shear"> - Usunięcie Twarzy + Usunięcie twarzy </string> <string name="Facial Definition"> - Detale Twarzy + Detale twarzy </string> <string name="Far Set Eyes"> Far Set Eyes </string> - <string name="Fat"> - Grubość - </string> - <string name="Fat Head"> - Gruba Głowa - </string> <string name="Fat Lips"> - Grube Usta - </string> - <string name="Fat Lower"> - Fat Lower - </string> - <string name="Fat Lower Lip"> - Fat Lower Lip - </string> - <string name="Fat Torso"> - Gruby Tułów - </string> - <string name="Fat Upper"> - Fat Upper - </string> - <string name="Fat Upper Lip"> - Fat Upper Lip + Grube usta </string> <string name="Female"> Kobieta @@ -2064,64 +2238,49 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Palce </string> <string name="Flared Cuffs"> - Flared Cuffs + Rozszerzane rękawy </string> <string name="Flat"> Płaskość </string> <string name="Flat Butt"> - Płaskie Pośladki + Płaskie pośladki </string> <string name="Flat Head"> - Płaska Głowa + Płaska głowa </string> <string name="Flat Toe"> - Płaski Palec + Płaski palec </string> <string name="Foot Size"> - Rozmiar Stopy + Rozmiar stopy </string> <string name="Forehead Angle"> - Kształt Czoła + Kształt czoła </string> <string name="Forehead Heavy"> - Ciężar Czoła + Ciężar czoła </string> <string name="Freckles"> Piegi </string> - <string name="Front Bangs Down"> - Przednie Pasemka w Dół - </string> - <string name="Front Bangs Up"> - Przednie Pasemka do Góry - </string> <string name="Front Fringe"> Przednia Grzywka </string> - <string name="Front Hair"> - Front Hair - </string> - <string name="Front Hair Down"> - Front Hair Down - </string> - <string name="Front Hair Up"> - Przednie Włosy do Góry - </string> <string name="Full Back"> - Gęstość Włosów po Bokach + Gęstość włosów po bokach </string> <string name="Full Eyeliner"> - Gęsty Eyeliner + Gęsta kredka do oczu </string> <string name="Full Front"> - Gęsty Przód + Gęsty przód </string> <string name="Full Hair Sides"> - Gęste Włosy po Bokach + Gęste włosy po bokach </string> <string name="Full Sides"> - Gęste Boki + Gęste boki </string> <string name="Glossy"> Błyszczące @@ -2130,64 +2289,64 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Rękawiczki </string> <string name="Glove Length"> - Długość Rękawiczek + Długość rękawiczek </string> <string name="Hair"> Włosy </string> <string name="Hair Back"> - Włosy: z Tyłu + Włosy: z tyłu </string> <string name="Hair Front"> - Włosy: z Przodu + Włosy: z przodu </string> <string name="Hair Sides"> - Hair: Boki + Włosy: boki </string> <string name="Hair Sweep"> - Kierunek Zaczesania + Kierunek zaczesania </string> <string name="Hair Thickess"> - Grubość Włosów + Grubość włosów </string> <string name="Hair Thickness"> - Grubość Włosów + Grubość włosów </string> <string name="Hair Tilt"> - Przesunięcie Fryzury + Przes. fryzury </string> <string name="Hair Tilted Left"> - Przesunięcie Fryzury w Lewo + Przes. fryzury L </string> <string name="Hair Tilted Right"> - Przesunięcie Fryzury w Prawo + Przes. fryzury P </string> <string name="Hair Volume"> - Włosy: Objętość + Włosy: objętość </string> <string name="Hand Size"> - Rozmiar Dłoni + Rozmiar dłoni </string> <string name="Handlebars"> Handlebars </string> <string name="Head Length"> - Długość Głowy + Długość głowy </string> <string name="Head Shape"> - Kształt Głowy + Kształt głowy </string> <string name="Head Size"> - Rozmiar Głowy + Rozmiar głowy </string> <string name="Head Stretch"> - Rozciągnięcie Głowy + Rozciągnięcie głowy </string> <string name="Heel Height"> - Wysokość Obcasa + Wysokość obcasa </string> <string name="Heel Shape"> - Ksztalt Obcasa + Ksztalt obcasa </string> <string name="Height"> Wysokość @@ -2196,7 +2355,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Wysoka </string> <string name="High Heels"> - Wysokie Obcasy + Wysokie obcasy </string> <string name="High Jaw"> High Jaw @@ -2211,34 +2370,34 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Wyżej </string> <string name="Hip Length"> - Długość Bioder + Długość bioder </string> <string name="Hip Width"> - Szerokość Bioder + Szerokość bioder </string> <string name="In"> W </string> <string name="In Shdw Color"> - Wewnętrzny Kolor Cienia + Wewnętrzny kolor cienia </string> <string name="In Shdw Opacity"> - Wewnętrzna Intensywność Cienia + Wewnętrzna intensywność cienia </string> <string name="Inner Eye Corner"> - Wenwętrzny Bok Oka + Wenwętrzny bok oka </string> <string name="Inner Eye Shadow"> - Wewnętrzny Cień Oka + Wewnętrzny cień oka </string> <string name="Inner Shadow"> - Wewnętrzny Cień + Wewnętrzny cień </string> <string name="Jacket Length"> - Długość Kurtki + Długość kurtki </string> <string name="Jacket Wrinkles"> - Zmarszczki na Kurtce + Zmarszczki na kurtce </string> <string name="Jaw Angle"> Jaw Angle @@ -2256,7 +2415,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Jowls </string> <string name="Knee Angle"> - Kąt Kolana + Kąt kolana </string> <string name="Knock Kneed"> Knock Kneed @@ -2265,22 +2424,22 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Duże </string> <string name="Large Hands"> - Duże Dłonie + Duże dłonie </string> <string name="Left Part"> Left Part </string> <string name="Leg Length"> - Długość Nogi + Długość nogi </string> <string name="Leg Muscles"> - Umięśnione Nogi + Umięśnione nogi </string> <string name="Less"> Mniej </string> <string name="Less Body Fat"> - Mniejsza Zawartości Tkanki Tłuszczowej + Mniejsza zawartości tkanki tłuszczowej </string> <string name="Less Curtains"> Less Curtains @@ -2289,7 +2448,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Mniej Piegów </string> <string name="Less Full"> - Less Full + Mniej Pełne </string> <string name="Less Gravity"> Mniej Ciężaru @@ -2298,25 +2457,25 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Less Love </string> <string name="Less Muscles"> - Mniej Mięśni + Mniej mięśni </string> <string name="Less Muscular"> - Mniej Umięśnienia + Mniej umięśnienia </string> <string name="Less Rosy"> Less Rosy </string> <string name="Less Round"> - Mniej Zaaokrąglone + Mniej zaaokrąglone </string> <string name="Less Saddle"> Less Saddle </string> <string name="Less Square"> - Mniej Kwadratowe + Mniej kwadratowe </string> <string name="Less Volume"> - Mniej Objętości + Mniej objętości </string> <string name="Less soul"> Less soul @@ -2325,25 +2484,25 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Lżejsze </string> <string name="Lip Cleft"> - Szerokość Rozszczepienia Górnej Wargi + Szerokość Rozszczepienia górnej wargi </string> <string name="Lip Cleft Depth"> - Głębokość Rozszczepienia Górnej Wargi + Głębokość rozszczepienia górnej wargi </string> <string name="Lip Fullness"> - Pełność Ust + Pełne usta </string> <string name="Lip Pinkness"> - Róż Ust + Róż ust </string> <string name="Lip Ratio"> - Proporcje Ust + Proporcje ust </string> <string name="Lip Thickness"> - Grubość Ust + Grubość ust </string> <string name="Lip Width"> - Szerokość Ust + Szerokość ust </string> <string name="Lipgloss"> Połysk @@ -2352,46 +2511,43 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Szminka </string> <string name="Lipstick Color"> - Kolor Szminki + Kolor szminki </string> <string name="Long"> Dlugość </string> <string name="Long Head"> - Długa Głowa + Długa głowa </string> <string name="Long Hips"> - Długie Biodra + Długie biodra </string> <string name="Long Legs"> - Długie Nogi + Długie nogi </string> <string name="Long Neck"> - Długi Kark + Długi kark </string> <string name="Long Pigtails"> - Długi Warkocz + Długi warkocz </string> <string name="Long Ponytail"> - Długi Kucyk + Długi kucyk </string> <string name="Long Torso"> - Długi Tułów + Długi tułów </string> <string name="Long arms"> - Dlugie Ramiona - </string> - <string name="Longcuffs"> - Długie Rękawy + Dlugie ramiona </string> <string name="Loose Pants"> - Luźne Spodnie + Luźne spodnie </string> <string name="Loose Shirt"> - Luźna Koszulka + Luźna koszulka </string> <string name="Loose Sleeves"> - Luźne Rękawy + Luźne rękawy </string> <string name="Love Handles"> Love Handles @@ -2400,16 +2556,16 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Nisko </string> <string name="Low Heels"> - Niskie Obcasy + Niskie obcasy </string> <string name="Low Jaw"> - Niska Szczęka + Niska szczęka </string> <string name="Low Platforms"> Low Platforms </string> <string name="Low and Loose"> - Niskie i Luźne + Niskie i luźne </string> <string name="Lower"> Niżej @@ -2424,7 +2580,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Mężczyzna </string> <string name="Middle Part"> - Część Środkowa + Część środkowa </string> <string name="More"> Więcej @@ -2433,7 +2589,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. More Blush </string> <string name="More Body Fat"> - Więcej Zawartości Tkanki Tłuszczowej + Więcej zawartości tkanki tłuszczowej </string> <string name="More Curtains"> More Curtains @@ -2442,34 +2598,34 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. More Eyeshadow </string> <string name="More Freckles"> - Więcej Piegów + Więcej piegów </string> <string name="More Full"> More Full </string> <string name="More Gravity"> - Więcej Ciężaru + Więcej ciężaru </string> <string name="More Lipstick"> - Więcej Szminki + Więcej szminki </string> <string name="More Love"> More Love </string> <string name="More Lower Lip"> - Więcej Dolnej Wargi + Więcej dolnej wargi </string> <string name="More Muscles"> - Więcej Mięśni + Więcej mięśni </string> <string name="More Muscular"> - Więcej Umięśnienia + Więcej umięśnienia </string> <string name="More Rosy"> More Rosy </string> <string name="More Round"> - Więcej Zaokrąglenia + Więcej zaokrąglenia </string> <string name="More Saddle"> More Saddle @@ -2478,16 +2634,16 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. More Sloped </string> <string name="More Square"> - Więcej Kwadratowy + Więcej kwadratowy </string> <string name="More Upper Lip"> - Więcej Górnej Wargi + Więcej górnej wargi </string> <string name="More Vertical"> More Vertical </string> <string name="More Volume"> - Więcej Objętości + Więcej objętości </string> <string name="More soul"> More soul @@ -2511,10 +2667,10 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Mutton Chops </string> <string name="Nail Polish"> - Lakier na Paznokciach + Lakier na paznokciach </string> <string name="Nail Polish Color"> - Kolor Lakieru na Paznokciach + Kolor lakieru na paznokciach </string> <string name="Narrow"> Wąskie @@ -2532,10 +2688,10 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Naturalne </string> <string name="Neck Length"> - Długość Karku + Długość karku </string> <string name="Neck Thickness"> - Grubość Karku + Grubość karku </string> <string name="No Blush"> No Blush @@ -2544,70 +2700,64 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Brak Eyeliner's </string> <string name="No Eyeshadow"> - Brak Cienia pod Powieką - </string> - <string name="No Heels"> - Brak Obcasów + Brak cienia pod powieką </string> <string name="No Lipgloss"> - Brak Połysku + Brak połysku </string> <string name="No Lipstick"> - Brak Szminki + Brak szminki </string> <string name="No Part"> No Part </string> <string name="No Polish"> - Brak Lakieru + Brak lakieru </string> <string name="No Red"> - Brak Czerwieni + Brak czerwieni </string> <string name="No Spikes"> - Brak Szpiców + Brak szpiców </string> <string name="No White"> - Brak Białego + Brak białego </string> <string name="No Wrinkles"> - Brak Zmarszczek + Brak zmarszczek </string> <string name="Normal Lower"> - Dół Normalny + Dół normalny </string> <string name="Normal Upper"> - Góra Normalna + Góra normalna </string> <string name="Nose Left"> - Nos w Stronę Lewą + Nos w stronę lewą </string> <string name="Nose Right"> - Nos w Stronę Prawą + Nos w stronę prawą </string> <string name="Nose Size"> - Rozmiar Nosa + Rozmiar nosa </string> <string name="Nose Thickness"> - Grubość Nosa + Grubość nosa </string> <string name="Nose Tip Angle"> - Kąt Czubka Nosa + Kąt czubka nosa </string> <string name="Nose Tip Shape"> - Kształt Czubka Nosa + Kształt czubka nosa </string> <string name="Nose Width"> - Szerokość Nosa + Szerokość nosa </string> <string name="Nostril Division"> - Przegroda Nosa + Przegroda nosa </string> <string name="Nostril Width"> - Wielkość Dziurek w Nosie - </string> - <string name="Old"> - Stare + Wielkość dziurek w nosie </string> <string name="Opaque"> Intensywność @@ -2616,16 +2766,16 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Otwarte </string> <string name="Open Back"> - Otwarte z Tyłu + Otwarte z tyłu </string> <string name="Open Front"> - Otwarte z Przodu + Otwarte z przodu </string> <string name="Open Left"> - Otwarte z Lewej + Otwarte z lewej </string> <string name="Open Right"> - Otwarte z Prawej + Otwarte z prawej </string> <string name="Orange"> Pomarańczowe @@ -2634,19 +2784,19 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Zewnętrznie </string> <string name="Out Shdw Color"> - Zewnętrzny Kolor Cienia + Zewnętrzny kolor cienia </string> <string name="Out Shdw Opacity"> - Zewnętrzna Grubość Cienia + Zewnętrzna grubość cienia </string> <string name="Outer Eye Corner"> - Zewnętrzny Bok Oka + Zewnętrzny bok oka </string> <string name="Outer Eye Shadow"> - Zewnętrzny Cień Oka + Zewnętrzny cień oka </string> <string name="Outer Shadow"> - Zewnętrzny Cień + Zewnętrzny cień </string> <string name="Overbite"> Overbite @@ -2655,25 +2805,25 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Package </string> <string name="Painted Nails"> - Pomalowane Paznokcie + Pomalowane paznokcie </string> <string name="Pale"> Pale </string> <string name="Pants Crotch"> - Krocze Spodni + Krocze spodni </string> <string name="Pants Fit"> Pants Fit </string> <string name="Pants Length"> - Długość Spodni + Długość spodni </string> <string name="Pants Waist"> - Talia Spodni + Talia spodni </string> <string name="Pants Wrinkles"> - Zmarszczki Spodni + Zmarszczki spodni </string> <string name="Part"> Część @@ -2682,7 +2832,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Part Bangs </string> <string name="Pectorals"> - Mięśnie Klatki Piersiowej + Mięśnie klatki piersiowej </string> <string name="Pigment"> Pigment @@ -2708,9 +2858,6 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. <string name="Pointy Heels"> Pointy Heels </string> - <string name="Pointy Toe"> - Pointy Toe - </string> <string name="Ponytail"> Kucyk </string> @@ -2735,27 +2882,18 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. <string name="Red Hair"> Czerwone Włosy </string> - <string name="Red Skin"> - Czerwona Skóra - </string> <string name="Regular"> Regularne </string> - <string name="Regular Muscles"> - Regularne Mięśnie - </string> <string name="Right Part"> - Prawa Cześć + Prawa część </string> <string name="Rosy Complexion"> - Kompleksowość Różu + Kompleksowość różu </string> <string name="Round"> Zaokrąglenie </string> - <string name="Round Forehead"> - Zaokrąglenie na Czole - </string> <string name="Ruddiness"> Rudowatość </string> @@ -2768,62 +2906,44 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. <string name="Saddle Bags"> Saddle Bags </string> - <string name="Saddlebags"> - Saddlebags - </string> - <string name="Scrawny"> - Scrawny - </string> <string name="Scrawny Leg"> Scrawny Leg </string> <string name="Separate"> Odzielne </string> - <string name="Shading"> - Cieniowanie - </string> - <string name="Shadow hair"> - Cieniowane Włosy - </string> <string name="Shallow"> Płytkie </string> <string name="Shear Back"> - Tylne Usunięcie Włosów + Tylne usunięcie włosów </string> <string name="Shear Face"> - Usunięcie Twarzy + Usunięcie twarzy </string> <string name="Shear Front"> - Przednie Usunięcie Włosów - </string> - <string name="Shear Left"> - Usunięcie z Lewej Strony + Przednie usunięcie włosów </string> <string name="Shear Left Up"> - Usunięcie od Lewej Strony do Góry - </string> - <string name="Shear Right"> - Usunięcie z Prawej Strony + Usunięcie od lewej strony do góry </string> <string name="Shear Right Up"> - Usunięcie od Prawej Strony do Góry + Usunięcie od prawej strony do góry </string> <string name="Sheared Back"> - Tylnie Usunięcie Włosów + Tylnie usunięcie włosów </string> <string name="Sheared Front"> - Przednie Usunięcie Włosów + Przednie usunięcie włosów </string> <string name="Shift Left"> - Przesuń w Lewo + Przesuń w lewo </string> <string name="Shift Mouth"> - Przesuń Usta + Przesuń usta </string> <string name="Shift Right"> - Przesuń w Prawo + Przesuń w prawo </string> <string name="Shirt Bottom"> Dolna Część Koszulki @@ -2832,22 +2952,22 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Shirt Fit </string> <string name="Shirt Wrinkles"> - Zmarszczki na Koszulce + Zmarszczki na koszulce </string> <string name="Shoe Height"> - Wysokość Buta + Wysokość buta </string> <string name="Short"> Krótkie </string> <string name="Short Arms"> - Krótkie Ramiona + Krótkie ramiona </string> <string name="Short Legs"> - Krótkie Nogi + Krótkie nogi </string> <string name="Short Neck"> - Krótki Kark + Krótki kark </string> <string name="Short Pigtails"> Short Pigtails @@ -2859,25 +2979,16 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Krótkie Baczki </string> <string name="Short Torso"> - Krótki Tułów + Krótki tułów </string> <string name="Short hips"> - Krótkie Biodra + Krótkie biodra </string> <string name="Shoulders"> Ramiona </string> - <string name="Side Bangs"> - Boczne Pasemka - </string> - <string name="Side Bangs Down"> - Boczne Pasemka w Dół - </string> - <string name="Side Bangs Up"> - Boczne Pasemka do Góry - </string> <string name="Side Fringe"> - Boczna Grzywka + Boczna grzywka </string> <string name="Sideburns"> Baczki @@ -2891,9 +3002,6 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. <string name="Sides Hair Up"> Boczne Włosy do Góry </string> - <string name="Skinny"> - Smukłość - </string> <string name="Skinny Neck"> Smukły Kark </string> @@ -2901,16 +3009,16 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Skirt Fit </string> <string name="Skirt Length"> - Długość Spódnicy + Długość spódnicy </string> <string name="Slanted Forehead"> - Ukośne Czoło + Ukośne czoło </string> <string name="Sleeve Length"> - Długość Rękawów + Długość rękawów </string> <string name="Sleeve Looseness"> - Luźność Rękawów + Luźność rękawów </string> <string name="Slit Back"> Slit: Back @@ -2928,22 +3036,19 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Małe </string> <string name="Small Hands"> - Małe Dłonie + Małe dłonie </string> <string name="Small Head"> - Mała Głowa + Mała głowa </string> <string name="Smooth"> Gładkie </string> <string name="Smooth Hair"> - Gładkie Włosy + Gładkie włosy </string> <string name="Socks Length"> - Długość Skarpetek - </string> - <string name="Some"> - Some + Długość skarpetek </string> <string name="Soulpatch"> Soulpatch @@ -2958,16 +3063,13 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Kwadratowe </string> <string name="Square Toe"> - Kwadratowy Palec + Kwadratowy palec </string> <string name="Squash Head"> - Ściśnięta Głowa - </string> - <string name="Squash/Stretch Head"> - Ściśnięta/Rozciągnięta Głowa + Ściśnięta głowa </string> <string name="Stretch Head"> - Rozciągnięta Głowa + Rozciągnięta głowa </string> <string name="Sunken"> Sunken @@ -2984,18 +3086,6 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. <string name="Sweep Forward"> Sweep Forward </string> - <string name="Swept Back"> - Swept Back - </string> - <string name="Swept Back Hair"> - Swept Back Hair - </string> - <string name="Swept Forward"> - Swept Forward - </string> - <string name="Swept Forward Hair"> - Swept Forward Hair - </string> <string name="Tall"> Wysokość </string> @@ -3006,67 +3096,58 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Taper Front </string> <string name="Thick Heels"> - Grube Obcasy + Grube obcasy </string> <string name="Thick Neck"> - Gruby Kark + Gruby kark </string> <string name="Thick Toe"> - Gruby Palec - </string> - <string name="Thickness"> - Grubość + Gruby palec </string> <string name="Thin"> Wąski </string> <string name="Thin Eyebrows"> - Wąskie Brwi + Wąskie brwi </string> <string name="Thin Lips"> - Wąskie Usta + Wąskie usta </string> <string name="Thin Nose"> - Wąski Nos + Wąski nos </string> <string name="Tight Chin"> - Obcisły Podbródek + Obcisły podbródek </string> <string name="Tight Cuffs"> - Obcisłe Rękawy + Obcisłe rękawy </string> <string name="Tight Pants"> - Obciesłe Spodnie + Obciesłe spodnie </string> <string name="Tight Shirt"> - Obcisły Podkoszulek + Obcisły podkoszulek </string> <string name="Tight Skirt"> - Tight Skirt + Wąska spódnica </string> <string name="Tight Sleeves"> - Obcisłe Rękawy - </string> - <string name="Tilt Left"> - Przesuń w Lewo - </string> - <string name="Tilt Right"> - Przesuń w Prawo + Obcisłe rękawy </string> <string name="Toe Shape"> - Kształt Palca + Kształt palca </string> <string name="Toe Thickness"> - Grubość Palca + Grubość palca </string> <string name="Torso Length"> - Długość Tułowia + Długość tułowia </string> <string name="Torso Muscles"> - Mięśnie Tułowia + Mięśnie tułowia </string> <string name="Torso Scrawny"> - Wychudzony Tułów + Wychudzony tułów </string> <string name="Unattached"> Nieprzyłączone @@ -3081,43 +3162,43 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Nienaturalne </string> <string name="Upper Bridge"> - Górny Mostek + Górny mostek </string> <string name="Upper Cheeks"> - Górne Policzki + Górne policzki </string> <string name="Upper Chin Cleft"> - Roszczepienie Górnego Podbródka + Roszczepienie górnego podbródka </string> <string name="Upper Eyelid Fold"> - Górna Powieka + Górna powieka </string> <string name="Upturned"> Zadarta </string> <string name="Very Red"> - Bardzo Czerwona + Bardzo czerwona </string> <string name="Waist Height"> - Wysokość Tali + Wysokość talii </string> <string name="Well-Fed"> Well-Fed </string> <string name="White Hair"> - Białe Włosy + Białe włosy </string> <string name="Wide"> Szerokie </string> <string name="Wide Back"> - Szeroki Tył + Szeroki tył </string> <string name="Wide Front"> - Szeroki Przód + Szeroki przód </string> <string name="Wide Lips"> - Szerokie Usta + Szerokie usta </string> <string name="Wild"> Dzikość @@ -3194,6 +3275,21 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. <string name="IM_moderator_label"> (Moderator) </string> + <string name="started_call"> + Rozpoczęta rozmowa głosowa + </string> + <string name="joined_call"> + Dołączył do rozmowy głosowej + </string> + <string name="ringing-im"> + Rozmowa głosowa... + </string> + <string name="connected-im"> + Połączono, kliknij Zakończ Rozmowe aby się rozłączyć + </string> + <string name="hang_up-im"> + Rozmowa głosowa zakończona + </string> <string name="only_user_message"> Jesteś jedyną osobą w tej konferencji. </string> @@ -3203,6 +3299,12 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. <string name="invite_message"> Kliknij na [BUTTON NAME] przycisk by zaakceptować/dołączyć do tej rozmowy. </string> + <string name="muted_message"> + Zablokowałeś tego Rezydenta. Wysłanie wiadomości automatycznie odblokuje go. + </string> + <string name="generic"> + Błąd zapytania, proszę spróbować później + </string> <string name="generic_request_error"> Błąd. Spróbuj ponownie za kilka minut. </string> @@ -3221,19 +3323,153 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. <string name="not_a_mod_error"> Nie jesteś moderatorem konferencji. </string> + <string name="muted"> + Moderator grupy wyłączył czat. + </string> <string name="muted_error"> Moderator wyciszył Cię. </string> <string name="add_session_event"> Nie można dodać nikogo do czatu z [RECIPIENT]. </string> + <string name="message"> + Nie można wysłać Twojej wiadomości do sesji czatu z [RECIPIENT]. + </string> <string name="message_session_event"> Nie można wysłać Twojej wiadomości do sesji czatu z [RECIPIENT]. </string> + <string name="mute"> + Błąd poczas moderacji. + </string> + <string name="removed"> + Zostałeś usunięty z grupy + </string> <string name="removed_from_group"> Usunięto Cię z grupy. </string> <string name="close_on_no_ability"> Nie posiadasz praw by uczestniczyć w tej konferencji. </string> + <string name="unread_chat_single"> + [SOURCES] powiedział/a coś nowego + </string> + <string name="unread_chat_multiple"> + [SOURCES] powiedział/a coś nowego + </string> + <string name="paid_you_ldollars"> + [NAME] zapłacił Ci L$[AMOUNT] + </string> + <string name="you_paid_ldollars"> + Zapłacono [NAME] [AMOUNT]L$ [REASON]. + </string> + <string name="you_paid_ldollars_no_reason"> + Zapłacono [NAME] [AMOUNT]L$. + </string> + <string name="you_paid_ldollars_no_name"> + Zapłacono [AMOUNT]L$ [REASON]. + </string> + <string name="for a parcel of land"> + za posiadłość + </string> + <string name="for a land access pass"> + za przepustkę na Posiadłość + </string> + <string name="for deeding land"> + dla przypisania Posiadłości + </string> + <string name="to create a group"> + aby stworzyć grupę + </string> + <string name="to join a group"> + aby dołączyć do grupy + </string> + <string name="to upload"> + aby pobrać + </string> + <string name="giving"> + Dajesz L$ [AMOUNT] + </string> + <string name="uploading_costs"> + Ładowanie kosztuje [AMOUNT]L$ + </string> + <string name="this_costs"> + To kosztuje [AMOUNT]L$ + </string> + <string name="buying_selected_land"> + Kupno wybranej Posiadłości [AMOUNT]L$ + </string> + <string name="this_object_costs"> + Ten obiekt kosztuje [AMOUNT]L$ + </string> + <string name="group_role_everyone"> + Każdy + </string> + <string name="group_role_officers"> + Oficerowie + </string> + <string name="group_role_owners"> + Właściciele + </string> + <string name="uploading_abuse_report"> + Pobieranie... + +Raport o Nadużyciu + </string> + <string name="New Shape"> + Nowy ksztalt + </string> + <string name="New Skin"> + Nowa skórka + </string> + <string name="New Hair"> + Nowe włosy + </string> + <string name="New Eyes"> + Nowe oczy + </string> + <string name="New Shirt"> + Nowa koszula + </string> + <string name="New Pants"> + Nowe spodnie + </string> + <string name="New Shoes"> + Nowe buty + </string> + <string name="New Socks"> + Nowe skarpetki + </string> + <string name="New Jacket"> + Nowa kurtka + </string> + <string name="New Gloves"> + Nowe rękawiczki + </string> + <string name="New Undershirt"> + Nowy podkoszulek + </string> + <string name="New Underpants"> + Nowa bielizna + </string> + <string name="New Skirt"> + Nowa spódnica + </string> + <string name="New Alpha"> + Nowa Alpha + </string> + <string name="New Tattoo"> + Nowy tatuaż + </string> + <string name="Invalid Wearable"> + Nieaktualne ubranie/część ciała + </string> + <string name="New Script"> + Nowy skrypt + </string> + <string name="New Folder"> + Nowy folder + </string> + <string name="Contents"> + Zawartość + </string> </strings> diff --git a/indra/newview/skins/default/xui/pl/teleport_strings.xml b/indra/newview/skins/default/xui/pl/teleport_strings.xml index 906978effe..6c4723dd7e 100644 --- a/indra/newview/skins/default/xui/pl/teleport_strings.xml +++ b/indra/newview/skins/default/xui/pl/teleport_strings.xml @@ -62,6 +62,9 @@ Spróbuj jeszcze raz za kilka minut. <message name="completing"> Finalizowanie teleportacji. </message> + <message name="completed_from"> + Teleportacja zakończona z [T_SLURL] + </message> <message name="resolving"> Namierzanie celu. </message> diff --git a/indra/newview/skins/default/xui/pt/floater_about.xml b/indra/newview/skins/default/xui/pt/floater_about.xml index 39548dc497..f1f6ff9aea 100644 --- a/indra/newview/skins/default/xui/pt/floater_about.xml +++ b/indra/newview/skins/default/xui/pt/floater_about.xml @@ -38,7 +38,7 @@ Versão Vivox: [VIVOX_VERSION] </floater.string> <tab_container name="about_tab"> <panel label="Info" name="support_panel"> - <button label="Copiar para área de transferência" name="copy_btn"/> + <button label="Copiar" name="copy_btn"/> </panel> <panel label="Créditos" name="credits_panel"> <text_editor name="credits_editor"> 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 ebb9bfc32d..252969609a 100644 --- a/indra/newview/skins/default/xui/pt/floater_about_land.xml +++ b/indra/newview/skins/default/xui/pt/floater_about_land.xml @@ -1,5 +1,14 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floaterland" title="SOBRE O TERRENO"> + <floater.string name="maturity_icon_general"> + "Parcel_PG_Dark + </floater.string> + <floater.string name="maturity_icon_moderate"> + "Parcel_M_Dark" + </floater.string> + <floater.string name="maturity_icon_adult"> + "Parcel_R_Dark" + </floater.string> <floater.string name="Minutes"> [MINUTES] minutos </floater.string> @@ -15,7 +24,7 @@ <tab_container name="landtab"> <panel label="GERAL" name="land_general_panel"> <panel.string name="new users only"> - Somente novos usuários + Somente novos residentes </panel.string> <panel.string name="anyone"> Qualquer um @@ -84,9 +93,9 @@ Vá para o menu Mundo > Sobre a Terra ou selecione outro lote para mostrar se <text name="GroupText"> Leyla Linden </text> - <button label="Ajustar..." label_selected="Ajustar..." name="Set..."/> + <button label="Ajustar" name="Set..."/> <check_box label="Permitir posse para o grupo" name="check deed" tool_tip="O gerente do grupo pode acionar essa terra ao grupo, então esta será mantida pelo gestor da ilha"/> - <button label="Passar..." label_selected="Passar..." name="Deed..." tool_tip="Você só pode delegar esta terra se você for um gerente selecionado pelo grupo."/> + <button label="Passar" name="Deed..." tool_tip="Você só pode delegar esta terra se você for um gerente selecionado pelo grupo."/> <check_box label="Proprietário faz contribuição com delegação" name="check contrib" tool_tip="Quando a terra é delegada ao grupo, o proprietário anterior contribui alocando terra suficiente para mantê-la."/> <text name="For Sale:"> À Venda: @@ -97,7 +106,7 @@ Vá para o menu Mundo > Sobre a Terra ou selecione outro lote para mostrar se <text name="For Sale: Price L$[PRICE]."> Preço: L$[PRICE] (L$[PRICE_PER_SQM]/m²). </text> - <button label="Vender Terra..." label_selected="Vender Terra..." name="Sell Land..."/> + <button label="Vender Terra" name="Sell Land..."/> <text name="For sale to"> À venda para: [BUYER] </text> @@ -109,7 +118,7 @@ Vá para o menu Mundo > Sobre a Terra ou selecione outro lote para mostrar se </text> <button label="Cancelar venda do terreno" label_selected="Cancelar venda do terreno" left="275" name="Cancel Land Sale" width="165"/> <text name="Claimed:"> - Reclamado: + Posse em: </text> <text name="DateClaimText"> Ter Ago 15 13:47:25 2006 @@ -126,28 +135,28 @@ Vá para o menu Mundo > Sobre a Terra ou selecione outro lote para mostrar se <text name="DwellText"> 0 </text> - <button label="Comprar Terra..." label_selected="Comprar Terra..." left="130" name="Buy Land..." width="125"/> + <button label="Comprar terreno..." label_selected="Comprar terreno..." left="130" name="Buy Land..." width="125"/> <button label="Dados do script" name="Scripts..."/> - <button label="Comprar para o Grupo..." label_selected="Comprar para o Grupo..." name="Buy For Group..."/> - <button label="Comprar Passe..." label_selected="Comprar Passe..." left="130" name="Buy Pass..." tool_tip="Um passe concede a você acesso temporário a esta terra." width="125"/> - <button label="Abandonar Terra.." label_selected="Abandonar Terra.." name="Abandon Land..."/> - <button label="Reclamar Terra..." label_selected="Reclamar Terra..." name="Reclaim Land..."/> - <button label="Venda Linden..." label_selected="Venda Linden..." name="Linden Sale..." tool_tip="A terra precisa ser possuída, estar com o conteúdo configurado e não estar pronta para leilão."/> + <button label="Comprar para o Grupo" name="Buy For Group..."/> + <button label="Comprar passe..." label_selected="Comprar passe..." left="130" name="Buy Pass..." tool_tip="Um passe concede a você acesso temporário a este terreno." width="125"/> + <button label="Abandonar terreno..." label_selected="Abandonar terreno..." name="Abandon Land..."/> + <button label="Pedir terreno" name="Reclaim Land..."/> + <button label="Venda Linden" name="Linden Sale..." tool_tip="O terreno precisa ser possuído, estar com o conteúdo configurado e não estar pronto para leilão."/> </panel> <panel label="CONTRATO" name="land_covenant_panel"> <panel.string name="can_resell"> - Terra comprada nesta região pode ser revendida. + Terrenos comprados nesta região podem ser revendidos. </panel.string> <panel.string name="can_not_resell"> - Terra comprada nesta região não pode ser revendida. + Terrenos comprados nesta região não podem ser revendidos. </panel.string> <panel.string name="can_change"> - Terra comprada nesta região pode ser compartilhada -ou sub-dividida. + Terrenos comprados nesta região podem ser compartilhados +ou sub-divididos. </panel.string> <panel.string name="can_not_change"> - Terra comprada nesta região não pode ser compartilhada -ou sub-dividida. + Terrenos comprados nesta região não podem ser compartilhados +ou sub-divididos. </panel.string> <text name="estate_section_lbl"> Propriedade: @@ -206,7 +215,7 @@ ou sub-dividida. [COUNT] de [MAX] ([DELETED] serão deletados) </panel.string> <text name="parcel_object_bonus"> - Fator de Bonus para Objetos na Região: [BONUS] + Fator de bônus para objetos na região: [BONUS] </text> <text name="Simulator primitive usage:"> Uso de prims: @@ -215,13 +224,13 @@ ou sub-dividida. [COUNT] de [MAX] ([AVAILABLE] disponíveis) </text> <text name="Primitives parcel supports:" width="200"> - Primitivas suportadas pelo lote: + Prims suportadas pelo lote: </text> <text left="214" name="object_contrib_text" width="152"> [COUNT] </text> <text name="Primitives on parcel:"> - Primitivas no Lote: + Prims no Lote: </text> <text left="214" name="total_objects_text" width="48"> [COUNT] @@ -233,7 +242,7 @@ ou sub-dividida. [COUNT] </text> <button label="Mostrar" label_selected="Mostrar" name="ShowOwner" right="-135" width="60"/> - <button label="Retornar..." label_selected="Retornar..." name="ReturnOwner..." right="-10" tool_tip="Retornar os objetos aos seus donos." width="119"/> + <button label="Retornar" name="ReturnOwner..." right="-10" tool_tip="Retornar os objetos aos seus donos." width="119"/> <text left="14" name="Set to group:" width="180"> Configurados ao grupo: </text> @@ -241,15 +250,15 @@ ou sub-dividida. [COUNT] </text> <button label="Mostrar" label_selected="Mostrar" name="ShowGroup" right="-135" width="60"/> - <button label="Retornar..." label_selected="Retornar..." name="ReturnGroup..." right="-10" tool_tip="Retornar os objetos para seus donos." width="119"/> + <button label="Retornar" name="ReturnGroup..." right="-10" tool_tip="Retornar os objetos para seus donos." width="119"/> <text left="14" name="Owned by others:" width="128"> - Propriedade de Outros: + Propriedade de outros: </text> <text left="214" name="other_objects_text" width="48"> [COUNT] </text> <button label="Mostrar" label_selected="Mostrar" name="ShowOther" right="-135" width="60"/> - <button label="Retornar..." label_selected="Retornar..." name="ReturnOther..." right="-10" tool_tip="Retornar os objetos aos seus donos." width="119"/> + <button label="Retornar" name="ReturnOther..." right="-10" tool_tip="Retornar os objetos aos seus donos." width="119"/> <text left="14" name="Selected / sat upon:" width="193"> Selecionado/Sentado: </text> @@ -257,13 +266,13 @@ ou sub-dividida. [COUNT] </text> <text left="4" name="Autoreturn" width="412"> - Devolver objetos de outros residentes automaticamente (digite 0 para desligar) + Devolver objetos de outros residentes (p/ desligar tecle 0) </text> <line_editor name="clean other time" right="-10"/> <text name="Object Owners:"> - Donos dos Objetos: + Donos dos objetos: </text> - <button label="Atualizar Lista" label_selected="Atualizar Lista" left="118" name="Refresh List" tool_tip="Refresh Object List"/> + <button label="Atualizar lista" label_selected="Atualizar lista" left="118" name="Refresh List" tool_tip="Refresh Object List"/> <button label="Retornar objetos..." label_selected="Retornar objetos..." left="230" name="Return objects..."/> <name_list name="owner list"> <name_list.columns label="Tipo" name="type"/> @@ -284,57 +293,57 @@ Apenas lotes maiores podem ser listados na busca. Esta opção está desabilitada porque você não pode modificar as opções deste lote. </panel.string> <panel.string name="mature_check_mature"> - Conteúdo Mature + Conteúdo Adulto </panel.string> <panel.string name="mature_check_adult"> - Conteúdo Adult + Conteúdo Adulto </panel.string> <panel.string name="mature_check_mature_tooltip"> - A informação do seu lote ou seu conteúdo são considerados mature. + A informação do seu lote ou seu conteúdo são considerados adulto. </panel.string> <panel.string name="mature_check_adult_tooltip"> - A informação do seu lote ou seu conteúdo são considerados adult. + A informação do seu lote ou seu conteúdo são considerados adulto. </panel.string> <panel.string name="landing_point_none"> (nenhum) </panel.string> <panel.string name="push_restrict_text"> - Sem Empurrar + Sem empurrar </panel.string> <panel.string name="push_restrict_region_text"> - Sem Empurrar (Imposição na Região) + Sem empurrar (imposição na região) </panel.string> <text name="allow_label"> Autorizar outros residentes a: </text> <check_box label="Editar Terreno" name="edit land check" tool_tip="Se ativado, qualquer um pode modificar a forma da sua terra. É melhor deixar esta opção desativada, uma vez que você sempre pode editar seu próprio terreno."/> <check_box label="Voar" name="check fly" tool_tip="Se ativado, os Residentes podem voar na sua terra. Se desativado, eles podem voar apenas para dentro e por cima de sua terra."/> - <text left="172" name="allow_label2"> - Criar Objetos: + <text name="allow_label2"> + Criar objetos: </text> <check_box label="Residentes" name="edit objects check"/> <check_box label="Grupo" name="edit group objects check"/> - <text left="172" name="allow_label3"> - Entrada do Objeto: + <text name="allow_label3"> + Entrada do objeto: </text> <check_box label="Residentes" name="all object entry check"/> <check_box label="Grupo" name="group object entry check"/> - <text left="172" name="allow_label4"> - Executar Scripts: + <text name="allow_label4"> + Executar scripts: </text> <check_box label="Residentes" name="check other scripts"/> <check_box label="Grupo" name="check group scripts"/> <text name="land_options_label"> - Opções de Terra: + Opções de terra: </text> <check_box label="Salvo (sem dano)" name="check safe" tool_tip="Se ativado, ajusta o terreno para Seguro, desabilitando combate com danos. Se não ativado, o combate com danos é habilitado."/> <check_box label="Sem Empurrar" name="PushRestrictCheck" tool_tip="Evita scripts que empurram. A ativação dessa opção pode ser útil para prevenir comportamentos desordeiros na sua terra."/> <check_box label="Mostrar terreno nos resultados de busca (L$30/semana)" name="ShowDirectoryCheck" tool_tip="Permitir que as pessoas vejam este terreno nos resultados de busca"/> <combo_box left="265" name="land category with adult" width="155"> - <combo_box.item label="Qualquer Categoria" name="item0"/> + <combo_box.item label="Qualquer categoria" name="item0"/> <combo_box.item label="Locação Linden" name="item1"/> - <combo_box.item label="Adult" name="item2"/> - <combo_box.item label="Artes e Cultura" name="item3"/> + <combo_box.item label="Adulto" name="item2"/> + <combo_box.item label="Artes e cultura" name="item3"/> <combo_box.item label="Negócios" name="item4"/> <combo_box.item label="Educacional" name="item5"/> <combo_box.item label="Jogos" name="item6"/> @@ -346,9 +355,9 @@ Apenas lotes maiores podem ser listados na busca. <combo_box.item label="Outros" name="item12"/> </combo_box> <combo_box left="265" name="land category" width="155"> - <combo_box.item label="Qualquer Categoria" name="item0"/> + <combo_box.item label="Qualquer categoria" name="item0"/> <combo_box.item label="Locação Linden" name="item1"/> - <combo_box.item label="Artes e Cultura" name="item3"/> + <combo_box.item label="Artes e cultura" name="item3"/> <combo_box.item label="Negócios" name="item4"/> <combo_box.item label="Educacional" name="item5"/> <combo_box.item label="Jogos" name="item6"/> @@ -359,7 +368,7 @@ Apenas lotes maiores podem ser listados na busca. <combo_box.item label="Compras" name="item11"/> <combo_box.item label="Outros" name="item12"/> </combo_box> - <check_box label="Conteúdo Mature" name="MatureCheck" tool_tip=""/> + <check_box label="Conteúdo adulto" name="MatureCheck" tool_tip=""/> <text name="Snapshot:"> Foto: </text> @@ -370,11 +379,11 @@ Apenas lotes maiores podem ser listados na busca. <button label="Definir" label_selected="Definir" name="Set" tool_tip="Define o ponto de aterrissagem aonde o visitante chega. Define para o ponto em que seu avatar se encontra neste lote."/> <button label="Limpar" label_selected="Limpar" name="Clear" tool_tip="Limpar o ponto de aterrissagem."/> <text name="Teleport Routing: "> - Rota de Tele-transporte: + Rota de Teletransporte: </text> - <combo_box left="140" name="landing type" tool_tip="Rota de Teletransporte -- Selecione como tratar os tele-transportes no seu lote." width="160"> + <combo_box left="140" name="landing type" tool_tip="Rota de Teletransporte -- Selecione como tratar os teletransportes no seu lote." width="160"> <combo_box.item label="Bloqueado" name="Blocked"/> - <combo_box.item label="Ponto de Aterrissagem" name="LandingPoint"/> + <combo_box.item label="Ponto de aterrissagem" name="LandingPoint"/> <combo_box.item label="Qualquer lugar" name="Anywhere"/> </combo_box> </panel> @@ -388,7 +397,7 @@ Apenas lotes maiores podem ser listados na busca. </text> <line_editor left="97" name="media_url"/> <button label="Definir..." label_selected="Definir..." name="set_media_url"/> - <check_box label="Esconder a URL da Mídia" left="97" name="hide_media_url" tool_tip="Ativando esta opção, a URL da mídia se ocultará para quaisquer visualizadores não autorizados a ver esta informação do lote. Notar que isto não está disponível para tipos HTML."/> + <check_box label="Esconder a URL da mídia" left="97" name="hide_media_url" tool_tip="Ativando esta opção, a URL da mídia se ocultará para quaisquer visualizadores não autorizados a ver esta informação do lote. Notar que isto não está disponível para tipos HTML."/> <text name="Description:"> Descrição: </text> @@ -426,26 +435,29 @@ Mídia: <panel.string name="access_estate_defined"> (Definições do terreno) </panel.string> + <panel.string name="allow_public_access"> + Acesso para público: [MATURITY] + </panel.string> <panel.string name="estate_override"> Uma ou mais destas opções está definida no nível de propriedade. </panel.string> <text name="Limit access to this parcel to:"> - Acesso a Este Lote + Acesso a este lote </text> <check_box label="Acesso para público categoria [MATURITY]" name="public_access"/> <text name="Only Allow"> Restringir acesso a contas confirmardas por: </text> <check_box label="Dados de pagamento fornecidos [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="Banir residentes sem identificação."/> - <check_box label="Idade confirmada: [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="Banir residentes que não comprovaram a idade. Consulte o [SUPPORT_SITE] para saber mais."/> - <check_box label="Permitir Acesso do Grupo: [GROUP]" name="GroupCheck" tool_tip="Definir grupo na aba Geral."/> + <check_box label="Idade comprovada: [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="Banir residentes que não comprovaram a idade. Consulte o [SUPPORT_SITE] para saber mais."/> + <check_box label="Permitir acesso do grupo: [GROUP]" name="GroupCheck" tool_tip="Definir grupo na aba Geral."/> <check_box label="Vender passes para:" name="PassCheck" tool_tip="Permite acesso temporário a este terreno"/> <combo_box name="pass_combo"> <combo_box.item label="Qualquer um" name="Anyone"/> <combo_box.item label="Grupo" name="Group"/> </combo_box> <spinner label="Preço em L$:" name="PriceSpin"/> - <spinner label="Horas de Acesso:" name="HoursSpin"/> + <spinner label="Horas de acesso:" name="HoursSpin"/> <panel name="Allowed_layout_panel"> <name_list name="AccessList" tool_tip="(Total [LISTED], máx de [MAX])"/> </panel> diff --git a/indra/newview/skins/default/xui/pt/floater_bulk_perms.xml b/indra/newview/skins/default/xui/pt/floater_bulk_perms.xml index 9f34111d8a..8823d04b62 100644 --- a/indra/newview/skins/default/xui/pt/floater_bulk_perms.xml +++ b/indra/newview/skins/default/xui/pt/floater_bulk_perms.xml @@ -7,20 +7,20 @@ Definindo permissões em [NAME] </floater.string> <floater.string name="start_text"> - Iniciando solicitação de mudança de permissão... + Solicitando mudança de permissão... </floater.string> <floater.string name="done_text"> Solicitação de mudança de permissão concluída. </floater.string> <check_box label="Animação" name="check_animation"/> <icon name="icon_animation" tool_tip="Animação"/> - <check_box label="Partes do Corpo" name="check_bodypart"/> + <check_box label="Partes do corpo" name="check_bodypart"/> <icon name="icon_bodypart" tool_tip="Partes do corpo"/> <check_box label="Roupas" name="check_clothing"/> <icon name="icon_clothing" tool_tip="Vestuário"/> <check_box label="Gestos" name="check_gesture"/> <icon name="icon_gesture" tool_tip="Gestos"/> - <check_box label="Notecards" name="check_notecard"/> + <check_box label="Anotações" name="check_notecard"/> <icon name="icon_notecard" tool_tip="Anotações"/> <check_box label="Objetos" name="check_object"/> <icon name="icon_object" tool_tip="Objects"/> @@ -30,7 +30,7 @@ <icon name="icon_sound" tool_tip="Sons"/> <check_box label="Texturas" name="check_texture"/> <icon name="icon_texture" tool_tip="Texturas"/> - <button label="√ Tudo" label_selected="Todas" name="check_all"/> + <button label="Tudo" label_selected="Todas" name="check_all"/> <button label="Limpar" label_selected="Nenhuma" name="check_none"/> <text name="newperms"> Novas autorizações de conteúdo diff --git a/indra/newview/skins/default/xui/pt/floater_buy_currency.xml b/indra/newview/skins/default/xui/pt/floater_buy_currency.xml index 1d0b3c4cd9..a737212b50 100644 --- a/indra/newview/skins/default/xui/pt/floater_buy_currency.xml +++ b/indra/newview/skins/default/xui/pt/floater_buy_currency.xml @@ -37,7 +37,7 @@ Calculando... </text> <text name="buy_action"> - [NAME] L$ [PRICE] + [ACTION] </text> <text name="total_label"> Saldo resultante: diff --git a/indra/newview/skins/default/xui/pt/floater_buy_land.xml b/indra/newview/skins/default/xui/pt/floater_buy_land.xml index 9500ba94e5..73b483acf2 100644 --- a/indra/newview/skins/default/xui/pt/floater_buy_land.xml +++ b/indra/newview/skins/default/xui/pt/floater_buy_land.xml @@ -40,7 +40,8 @@ A área selecionada não tem terras públicas. </floater.string> <floater.string name="not_owned_by_you"> - Está selecionada uma terra pertencente a outro usuário. Tente selecionar uma área menor. + Terrenos de outros residentes foram selecionados. +Tente selecionar uma área menor. </floater.string> <floater.string name="processing"> Processando sua compra... diff --git a/indra/newview/skins/default/xui/pt/floater_camera.xml b/indra/newview/skins/default/xui/pt/floater_camera.xml index 5114b19336..7989ce66bc 100644 --- a/indra/newview/skins/default/xui/pt/floater_camera.xml +++ b/indra/newview/skins/default/xui/pt/floater_camera.xml @@ -9,6 +9,18 @@ <floater.string name="move_tooltip"> Mover a Câmera para Cima e para Baixo, para a Esquerda e para a Direita </floater.string> + <floater.string name="orbit_mode_title"> + Órbita + </floater.string> + <floater.string name="pan_mode_title"> + Pan + </floater.string> + <floater.string name="avatar_view_mode_title"> + Predefinições + </floater.string> + <floater.string name="free_mode_title"> + Visualizar objeto + </floater.string> <panel name="controls"> <joystick_track name="cam_track_stick" tool_tip="Move a câmera para cima e para baixo, direita e esquerda"/> <panel name="zoom" tool_tip="Aproximar a Câmera in direção ao Foco"> @@ -25,7 +37,7 @@ <panel name="buttons"> <button label="" name="orbit_btn" tool_tip="Câmera orbital"/> <button label="" name="pan_btn" tool_tip="Câmera Pan"/> - <button label="" name="avatarview_btn" tool_tip="ver como o avatar"/> + <button label="" name="avatarview_btn" tool_tip="Predefinições"/> <button label="" name="freecamera_btn" tool_tip="Visualizar objeto"/> </panel> </floater> diff --git a/indra/newview/skins/default/xui/pt/floater_customize.xml b/indra/newview/skins/default/xui/pt/floater_customize.xml index 318c73e52d..2a367cb24a 100644 --- a/indra/newview/skins/default/xui/pt/floater_customize.xml +++ b/indra/newview/skins/default/xui/pt/floater_customize.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater customize" title="APARÊNCIA" width="546"> <tab_container name="customize tab container" tab_min_width="115" width="544"> - <text label="Partes de corpo" name="body_parts_placeholder"> + <text label="Corpo" name="body_parts_placeholder"> Partes do corpo </text> <panel label="Forma" name="Shape"> @@ -43,15 +43,15 @@ <text name="Item Action Label"> Forma: </text> - <button label="Criar Nova Forma" label_selected="Criar Nova Forma" name="Create New"/> + <button label="Nova" label_selected="Nova" name="Create New"/> <button label="Salvar" label_selected="Salvar" name="Save"/> <button label="Salvar como..." label_selected="Salvar como..." name="Save As"/> </panel> <panel label="Pele" name="Skin"> - <button label="Cor de Pele" label_selected="Cor de Pele" name="Skin Color" width="115"/> - <button label="Detalhes Faciais" label_selected="Detalhes Faciais" name="Face Detail" width="115"/> - <button label="Maquiagem" label_selected="Maquiagem" name="Makeup" width="115"/> - <button label="Detalhes do Corpo" label_selected="Detalhes do Corpo" name="Body Detail" width="115"/> + <button label="Cor de pele" label_selected="Cor de pele" name="Skin Color" width="115"/> + <button label="Detalhes faciais" label_selected="Detalhes faciais" name="Face Detail" width="115"/> + <button label="Maquilagem" label_selected="Maquilagem" name="Makeup" width="115"/> + <button label="Detalhes do corpo" label_selected="Detalhes do corpo" name="Body Detail" width="115"/> <text name="title"> [DESC] </text> @@ -79,7 +79,7 @@ <texture_picker label="Tattoo: cabeça" name="Head Tattoos" tool_tip="Clique para escolher um desenho" width="86"/> <texture_picker label="Tattoo: superior" name="Upper Tattoos" tool_tip="Clique para escolher um desenho" width="86"/> <texture_picker label="Tattoo: inferior" name="Lower Tattoos" tool_tip="Clique para escolher um desenho" width="86"/> - <button label="Criar Nova Pele" label_selected="Criar Nova Pele" name="Create New"/> + <button label="Novo" label_selected="Novo" name="Create New"/> <button label="Salvar" label_selected="Salvar" name="Save"/> <button label="Salvar como..." label_selected="Salvar como..." name="Save As"/> <button label="Reverter" label_selected="Reverter" name="Revert"/> @@ -114,7 +114,7 @@ Cabelo: </text> <texture_picker label="Texture" name="Texture" tool_tip="Clique para escolher uma imagem"/> - <button label="Criar Novo Cabelo" label_selected="Criar Novo Cabelo" name="Create New"/> + <button label="Criar novo cabelo" label_selected="Criar novo cabelo" name="Create New"/> <button label="Salvar" label_selected="Salvar" name="Save"/> <button label="Salvar como..." label_selected="Salvar como..." name="Save As"/> <button label="Reverter" label_selected="Reverter" name="Revert"/> @@ -145,7 +145,7 @@ Olhos: </text> <texture_picker label="Íris" name="Iris" tool_tip="Clique para escolher uma imagem"/> - <button label="Criar Novos Olhos" label_selected="Criar Novos Olhos" name="Create New"/> + <button label="Criar novos olhos" label_selected="Criar novos olhos" name="Create New"/> <button label="Salvar" label_selected="Salvar" name="Save"/> <button label="Salvar como..." label_selected="Salvar como..." name="Save As"/> <button label="Reverter" label_selected="Reverter" name="Revert"/> @@ -157,7 +157,7 @@ <texture_picker label="Tecido" name="Fabric" tool_tip="Clique para escolher uma imagem"/> <color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/> <button label="Remover" label_selected="Remover" name="Take Off"/> - <button label="Criar Nova Camisa" label_selected="Criar Nova Camisa" name="Create New"/> + <button label="Criar nova camisa" label_selected="Criar nova camisa" name="Create New"/> <button label="Salvar" label_selected="Salvar" name="Save"/> <button label="Salvar como..." label_selected="Salvar como..." name="Save As"/> <button label="Reverter" label_selected="Reverter" name="Revert"/> @@ -190,7 +190,7 @@ <texture_picker label="Tecido" name="Fabric" tool_tip="Clique para escolher uma imagem"/> <color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/> <button label="Remover" label_selected="Remover" name="Take Off"/> - <button label="Criar Novas Calças" label_selected="Criar Novas Calças" name="Create New"/> + <button label="Criar novas calças" label_selected="Criar novas calças" name="Create New"/> <button label="Salvar" label_selected="Salvar" name="Save"/> <button label="Salvar como..." label_selected="Salvar como..." name="Save As"/> <button label="Reverter" label_selected="Reverter" name="Revert"/> @@ -238,7 +238,7 @@ <text name="not worn instructions"> Para obter novos olhos, arraste um tipo de olhos do inventário para o seu avatar. Ou crie olhos novos. </text> - <button label="Criar Novos Sapatos" label_selected="Criar Novos Sapatos" name="Create New" width="166"/> + <button label="Criar novos sapatos" label_selected="Criar novos sapatos" name="Create New" width="166"/> <text name="no modify instructions"> Você não tem permissão para modificar esta vestimenta. </text> @@ -271,7 +271,7 @@ <text name="not worn instructions"> Para obter meias novas, arraste um par do inventário para o seu avatar. Ou crie meias novas. </text> - <button label="Criar Novas Meias" label_selected="Criar Novas Meias" name="Create New"/> + <button label="Criar novas meias" label_selected="Criar novas meias" name="Create New"/> <text name="no modify instructions"> Você não tem permissão para modificar essa vestimenta. </text> @@ -304,14 +304,14 @@ <text name="not worn instructions"> Para por uma jaqueta nova, arraste uma do inventário para o seu avatar. Ou crie uma jaqueta nova. </text> - <button label="Criar Nova Jaqueta" label_selected="Criar Nova Jaqueta" name="Create New"/> + <button label="Criar nova jaqueta" label_selected="Criar nova jaqueta" name="Create New"/> <text name="no modify instructions"> Você não tem permissão para modificar esta vestimenta. </text> <text name="Item Action Label"> Jaqueta: </text> - <texture_picker label="Tecido Superior" name="Upper Fabric" tool_tip="Clique para escolher uma imagem." width="84"/> + <texture_picker label="Tecido superior" name="Upper Fabric" tool_tip="Clique para escolher uma imagem." width="84"/> <texture_picker label="Tecido Inferior" name="Lower Fabric" tool_tip="Clique para escolher uma imagem." width="84"/> <color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/> <button label="Remover" label_selected="Remover" name="Take Off"/> @@ -338,7 +338,7 @@ <text name="not worn instructions"> Para obter luvas novas, arraste um par do inventário para o seu avatar. Ou crie luvas novas. </text> - <button label="Criar Novas Luvas" label_selected="Criar Novas Luvas" name="Create New"/> + <button label="Criar novas luvas" label_selected="Criar novas luvas" name="Create New"/> <text name="no modify instructions"> Você não tem permissão para modificar essa vestimenta. </text> @@ -371,7 +371,7 @@ <text name="not worn instructions"> Para obter uma camiseta nova, arraste uma do inventário para o seu avatar. Ou crie uma camiseta nova. </text> - <button label="Criar Nova Camiseta" label_selected="Criar Nova Camiseta" name="Create New"/> + <button label="Criar nova camiseta" label_selected="Criar nova camiseta" name="Create New"/> <text name="no modify instructions"> Você não ter permissão para modificar essa vestimenta. </text> @@ -404,12 +404,12 @@ <text name="not worn instructions"> Para obter roupa de baixo nova, arraste um modelo do inventário para o seu avatar. Ou crie uma roupa de baixo nova. </text> - <button label="Criar Novas Roupas de Baixo" label_selected="Criar Novas Roupas de Baixo" name="Create New" width="180"/> + <button label="Criar novas" label_selected="Criar novas" name="Create New" width="180"/> <text name="no modify instructions"> Você não tem permissão para modificar essa vestimenta. </text> <text name="Item Action Label"> - Roupas de Baixo: + Roupas de baixo: </text> <texture_picker label="Tecido" name="Fabric" tool_tip="Clique para escolher uma imagem"/> <color_swatch label="Cor/Tint" name="Color/Tint" tool_tip="Selecionar a cor"/> @@ -437,7 +437,7 @@ <text name="not worn instructions"> Para obter um saia nova, arraste uma saia do inventário para o seu avatar. Ou crie uma saia nova. </text> - <button label="Criar Nova Saia" label_selected="Criar Nova Saia" name="Create New"/> + <button label="Criar nova saia" label_selected="Criar nova saia" name="Create New"/> <text name="no modify instructions"> Você não tem permissão para modificar esta vestimenta. </text> diff --git a/indra/newview/skins/default/xui/pt/floater_event.xml b/indra/newview/skins/default/xui/pt/floater_event.xml index 4b2489654a..1cd4dcbda4 100644 --- a/indra/newview/skins/default/xui/pt/floater_event.xml +++ b/indra/newview/skins/default/xui/pt/floater_event.xml @@ -9,6 +9,18 @@ <floater.string name="dont_notify"> Não avisar </floater.string> + <floater.string name="moderate"> + Moderado + </floater.string> + <floater.string name="adult"> + Adulto + </floater.string> + <floater.string name="general"> + Público geral + </floater.string> + <floater.string name="unknown"> + Desconhecido + </floater.string> <layout_stack name="layout"> <layout_panel name="profile_stack"> <text name="event_name"> @@ -21,12 +33,21 @@ Organização: </text> <text initial_value="(pesquisando)" name="event_runby"/> + <text name="event_date_label"> + Data: + </text> <text name="event_date"> 10/10/2010 </text> + <text name="event_duration_label"> + Duração: + </text> <text name="event_duration"> 1 hora </text> + <text name="event_covercharge_label"> + Cover: + </text> <text name="event_cover"> Grátis </text> @@ -36,6 +57,9 @@ <text name="event_location" value="LoteExemplo, Nome extenso (145, 228, 26)"/> <text name="rating_label" value="Classificação:"/> <text name="rating_value" value="(Desconhecido)"/> + <expandable_text name="event_desc"> + Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + </expandable_text> </layout_panel> <layout_panel name="button_panel"> <button name="create_event_btn" tool_tip="Criar evento"/> diff --git a/indra/newview/skins/default/xui/pt/floater_god_tools.xml b/indra/newview/skins/default/xui/pt/floater_god_tools.xml index 93b2f3e90d..2e63d86281 100644 --- a/indra/newview/skins/default/xui/pt/floater_god_tools.xml +++ b/indra/newview/skins/default/xui/pt/floater_god_tools.xml @@ -2,7 +2,7 @@ <floater name="godtools floater" title="FERRAMENTAS DE DEUS"> <tab_container name="GodTools Tabs"> <panel label="Grade" name="grid"> - <button label="Desconectar todos os usuários" label_selected="Desconectar todos os usuários" name="Kick all users"/> + <button label="Chutar todos" label_selected="Chutar todos" name="Kick all users"/> <button label="Limpar os cachês de visibilidade do mapa da região." label_selected="Limpar os cachês de visibilidade do mapa da região." name="Flush This Region's Map Visibility Caches"/> </panel> <panel label="Região" name="region"> diff --git a/indra/newview/skins/default/xui/pt/floater_im.xml b/indra/newview/skins/default/xui/pt/floater_im.xml index f6057c48f1..c81d0dd7ef 100644 --- a/indra/newview/skins/default/xui/pt/floater_im.xml +++ b/indra/newview/skins/default/xui/pt/floater_im.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <multi_floater name="im_floater" title="Mensagem Instantânea"> <string name="only_user_message"> - Você é o único usuário desta sessão. + Você é o único residente nesta sessão </string> <string name="offline_message"> [FIRST] [LAST] está offline. @@ -31,7 +31,7 @@ Um moderador do grupo desabilitou seu bate-papo em texto. </string> <string name="add_session_event"> - Não foi possível adicionar usuários na sessão de bate-papo com [RECIPIENT]. + Não foi possível adicionar residentes ao bate-papo com [RECIPIENT]. </string> <string name="message_session_event"> Não foi possível enviar sua mensagem na sessão de bate- papo com [RECIPIENT]. diff --git a/indra/newview/skins/default/xui/pt/floater_moveview.xml b/indra/newview/skins/default/xui/pt/floater_moveview.xml index f67a16bb46..9c02570076 100644 --- a/indra/newview/skins/default/xui/pt/floater_moveview.xml +++ b/indra/newview/skins/default/xui/pt/floater_moveview.xml @@ -18,6 +18,15 @@ <string name="fly_back_tooltip"> Voar para trás (flecha para baixo ou S) </string> + <string name="walk_title"> + Andar + </string> + <string name="run_title"> + Correr + </string> + <string name="fly_title"> + 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)"/> @@ -30,6 +39,5 @@ <button label="" name="mode_walk_btn" tool_tip="Modo caminhar"/> <button label="" name="mode_run_btn" tool_tip="Modo correr"/> <button label="" name="mode_fly_btn" tool_tip="Modo voar"/> - <button label="Parar de voar" name="stop_fly_btn" tool_tip="Parar de voar"/> </panel> </floater> diff --git a/indra/newview/skins/default/xui/pt/floater_preferences.xml b/indra/newview/skins/default/xui/pt/floater_preferences.xml index 803f2f87b8..2736900d5f 100644 --- a/indra/newview/skins/default/xui/pt/floater_preferences.xml +++ b/indra/newview/skins/default/xui/pt/floater_preferences.xml @@ -3,7 +3,7 @@ <button label="OK" label_selected="OK" name="OK"/> <button label="Cancelar" label_selected="Cancelar" name="Cancel"/> <tab_container name="pref core" tab_width="128" width="628"> - <panel label="Público geral" name="general"/> + <panel label="Geral" name="general"/> <panel label="Vídeo" name="display"/> <panel label="Privacidade" name="im"/> <panel label="Som e mídia" name="audio"/> diff --git a/indra/newview/skins/default/xui/pt/floater_publish_classified.xml b/indra/newview/skins/default/xui/pt/floater_publish_classified.xml new file mode 100644 index 0000000000..988f8f2ce1 --- /dev/null +++ b/indra/newview/skins/default/xui/pt/floater_publish_classified.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="publish_classified" title="Publicando anúncio"> + <text name="explanation_text"> + Seu anúncio será publicado por uma semana a partir da data de publicação. + +Lembre-se, o pagamento do anúncio não é reembolsável + </text> + <spinner label="Preço do anúncio:" name="price_for_listing" tool_tip="Preço do anúncio." value="50"/> + <text name="l$_text" value="L$"/> + <text name="more_info_text"> + Mais informações (link para ajuda com anúncios) + </text> + <button label="Publicar" name="publish_btn"/> + <button label="Cancelar" name="cancel_btn"/> +</floater> diff --git a/indra/newview/skins/default/xui/pt/floater_snapshot.xml b/indra/newview/skins/default/xui/pt/floater_snapshot.xml index a3934a6667..bb852cb11a 100644 --- a/indra/newview/skins/default/xui/pt/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/pt/floater_snapshot.xml @@ -3,7 +3,7 @@ <text name="type_label"> Destino da foto </text> - <radio_group label="Tipo de Foto" name="snapshot_type_radio"> + <radio_group label="Tipo de foto" name="snapshot_type_radio"> <radio_item label="Email" name="postcard"/> <radio_item label="Meu inventário (L$[AMOUNT])" name="texture"/> <radio_item label="Salvar no meu PC" name="local"/> @@ -28,21 +28,21 @@ Formato </text> <combo_box label="Resolução" name="postcard_size_combo"> - <combo_box.item label="Janela Atual" name="CurrentWindow"/> + <combo_box.item label="Janela atual" name="CurrentWindow"/> <combo_box.item label="640x480" name="640x480"/> <combo_box.item label="800x600" name="800x600"/> <combo_box.item label="1024x768" name="1024x768"/> <combo_box.item label="Customizado" name="Custom"/> </combo_box> <combo_box label="Resolução" name="texture_size_combo"> - <combo_box.item label="Janela Atual" name="CurrentWindow"/> + <combo_box.item label="Janela atual" name="CurrentWindow"/> <combo_box.item label="Pequeno (128x128)" name="Small(128x128)"/> <combo_box.item label="Médio (256x256)" name="Medium(256x256)"/> <combo_box.item label="Grande (512x512)" name="Large(512x512)"/> <combo_box.item label="Customizado" name="Custom"/> </combo_box> <combo_box label="Resolução" name="local_size_combo"> - <combo_box.item label="Janela Atual" name="CurrentWindow"/> + <combo_box.item label="Janela atual" name="CurrentWindow"/> <combo_box.item label="320x240" name="320x240"/> <combo_box.item label="640x480" name="640x480"/> <combo_box.item label="800x600" name="800x600"/> @@ -63,10 +63,10 @@ <text name="layer_type_label"> Capturar: </text> - <combo_box label="Camadas da Imagem" name="layer_types"> + <combo_box label="Camadas da imagem" name="layer_types"> <combo_box.item label="Cores" name="Colors"/> <combo_box.item label="Formato" name="Depth"/> - <combo_box.item label="Decoração do Objeto" name="ObjectMattes"/> + <combo_box.item label="Decoração do objeto" name="ObjectMattes"/> </combo_box> <check_box label="Interface" name="ui_check"/> <check_box bottom_delta="-17" label="HUDs" name="hud_check"/> diff --git a/indra/newview/skins/default/xui/pt/floater_tools.xml b/indra/newview/skins/default/xui/pt/floater_tools.xml index fb44c5c3bf..958a166dfc 100644 --- a/indra/newview/skins/default/xui/pt/floater_tools.xml +++ b/indra/newview/skins/default/xui/pt/floater_tools.xml @@ -63,7 +63,7 @@ <radio_item label="Stretch (Ctrl+Shift)" name="radio stretch"/> <radio_item label="Face selecionada" name="radio select face"/> </radio_group> - <check_box label="Editar item linkado" name="checkbox edit linked parts"/> + <check_box label="Editar partes linkadas" name="checkbox edit linked parts"/> <text name="RenderingCost" tool_tip="Mostra o cálculo do custo de renderização do objeto"> þ: [COUNT] </text> @@ -91,7 +91,7 @@ <button label="" label_selected="" name="ToolRing" tool_tip="Anel"/> <button label="" label_selected="" name="ToolTree" tool_tip="Árvore"/> <button label="" label_selected="" name="ToolGrass" tool_tip="Grama"/> - <check_box label="Ficar com ferramenta selecionado" name="checkbox sticky"/> + <check_box label="Ficar com ferramenta selecionada" name="checkbox sticky"/> <check_box label="Copiar seleção" name="checkbox copy selection"/> <check_box initial_value="true" label="Copiar parte central" name="checkbox copy centers"/> <check_box label="Girar cópia" name="checkbox copy rotates"/> diff --git a/indra/newview/skins/default/xui/pt/floater_tos.xml b/indra/newview/skins/default/xui/pt/floater_tos.xml index 2fbbbde9e4..3603545ee7 100644 --- a/indra/newview/skins/default/xui/pt/floater_tos.xml +++ b/indra/newview/skins/default/xui/pt/floater_tos.xml @@ -2,9 +2,9 @@ <floater name="modal container" title=" "> <button label="Continuar" label_selected="Continuar" name="Continue"/> <button label="Cancelar" label_selected="Cancelar" name="Cancel"/> - <check_box label="Eu concordo com os Termos do Serviço" name="agree_chk"/> + <check_box label="Concordo com os Termos de Serviço e com a Política de Privacidade" name="agree_chk"/> <text name="tos_heading"> - Leia com atenção os Termos do Serviço. Para continuar a entrar no [SECOND_LIFE], é preciso aceitar o contrato. + Leia com atenção os Termos do Serviço e a Política de Privacidade. Para continuar a entrar no [SECOND_LIFE], é preciso aceitar esses termos. </text> <text_editor name="tos_text"> TOS_TEXT diff --git a/indra/newview/skins/default/xui/pt/floater_voice_controls.xml b/indra/newview/skins/default/xui/pt/floater_voice_controls.xml index 6ab10db96f..5ef8479b7a 100644 --- a/indra/newview/skins/default/xui/pt/floater_voice_controls.xml +++ b/indra/newview/skins/default/xui/pt/floater_voice_controls.xml @@ -17,7 +17,7 @@ </string> <layout_stack name="my_call_stack"> <layout_panel name="my_panel"> - <text name="user_text" value="Mya Avatar:"/> + <text name="user_text" value="Meu avatar:"/> </layout_panel> <layout_panel name="leave_call_btn_panel"> <button label="Desligar" name="leave_call_btn"/> diff --git a/indra/newview/skins/default/xui/pt/floater_water.xml b/indra/newview/skins/default/xui/pt/floater_water.xml index 36b995d4fd..b4613e0890 100644 --- a/indra/newview/skins/default/xui/pt/floater_water.xml +++ b/indra/newview/skins/default/xui/pt/floater_water.xml @@ -8,7 +8,7 @@ <button label="Salvar" label_selected="Salvar" name="WaterSavePreset"/> <button label="Deletar" label_selected="Deletar" name="WaterDeletePreset"/> <tab_container name="Water Tabs"> - <panel label="Configurações" name="Settings"> + <panel label="DEFINIÇÕES" name="Settings"> <text name="BHText"> Cor da névoa da Água </text> @@ -56,7 +56,7 @@ </text> <button label="?" left="640" name="WaterBlurMultiplierHelp"/> </panel> - <panel label="Imagem" name="Waves"> + <panel label="IMAGEM" name="Waves"> <text name="BHText"> Direção da Onda Maior </text> diff --git a/indra/newview/skins/default/xui/pt/floater_windlight_options.xml b/indra/newview/skins/default/xui/pt/floater_windlight_options.xml index 951e37a1a6..22632a4ef8 100644 --- a/indra/newview/skins/default/xui/pt/floater_windlight_options.xml +++ b/indra/newview/skins/default/xui/pt/floater_windlight_options.xml @@ -5,11 +5,11 @@ </text> <combo_box left_delta="130" name="WLPresetsCombo"/> <button label="Novo" label_selected="Novo" name="WLNewPreset"/> - <button label="Salvar" label_selected="Salvar" name="WLSavePreset" left_delta="72"/> - <button label="Deletar" label_selected="Deletar" name="WLDeletePreset" left_delta="72"/> - <button label="Editor de Ciclos do Dia" label_selected="Editor de Ciclos do Dia" name="WLDayCycleMenuButton" width="150" left_delta="84" /> + <button label="Salvar" label_selected="Salvar" left_delta="72" name="WLSavePreset"/> + <button label="Deletar" label_selected="Deletar" left_delta="72" name="WLDeletePreset"/> + <button label="Editor de Ciclos do Dia" label_selected="Editor de Ciclos do Dia" left_delta="84" name="WLDayCycleMenuButton" width="150"/> <tab_container name="WindLight Tabs"> - <panel label="Atmosfera" name="Atmosphere"> + <panel label="ATMOSFERA" name="Atmosphere"> <text name="BHText"> Horizonte Azul </text> @@ -53,17 +53,17 @@ <text name="DensMultText"> Multiplicador de Densidade </text> - <button label="?" name="WLDensityMultHelp" left="635"/> + <button label="?" left="635" name="WLDensityMultHelp"/> <text name="WLDistanceMultText"> Multiplicador de Distância </text> - <button label="?" name="WLDistanceMultHelp" left="635"/> + <button label="?" left="635" name="WLDistanceMultHelp"/> <text name="MaxAltText"> Altitude Máxima </text> - <button label="?" name="WLMaxAltitudeHelp" left="635"/> + <button label="?" left="635" name="WLMaxAltitudeHelp"/> </panel> - <panel label="Iluminação" name="Lighting"> + <panel label="ILUMINAÇÃO" name="Lighting"> <text name="SLCText"> Cor do Sol/Lua </text> @@ -119,7 +119,7 @@ </text> <button label="?" name="WLStarBrightnessHelp"/> </panel> - <panel label="Nuvens" name="Clouds"> + <panel label="NUVENS" name="Clouds"> <text name="WLCloudColorText"> Cor da Nuvem </text> @@ -157,10 +157,10 @@ Escala da Nuvem </text> <button label="?" name="WLCloudScaleHelp"/> - <text name="WLCloudDetailText" font="SansSerifSmall"> + <text font="SansSerifSmall" name="WLCloudDetailText"> Detalhe da Nuvem (XY/Densidade) </text> - <button label="?" name="WLCloudDetailHelp" left="421"/> + <button label="?" left="421" name="WLCloudDetailHelp"/> <text name="BHText8"> X </text> @@ -181,7 +181,7 @@ <button label="?" name="WLCloudScrollYHelp"/> <check_box label="Travar" name="WLCloudLockY"/> <check_box label="Desenhar Nuvens Clássicas" name="DrawClassicClouds"/> - <button label="?" name="WLClassicCloudsHelp" left="645"/> + <button label="?" left="645" name="WLClassicCloudsHelp"/> </panel> </tab_container> </floater> diff --git a/indra/newview/skins/default/xui/pt/floater_world_map.xml b/indra/newview/skins/default/xui/pt/floater_world_map.xml index 95bb899071..115192203f 100644 --- a/indra/newview/skins/default/xui/pt/floater_world_map.xml +++ b/indra/newview/skins/default/xui/pt/floater_world_map.xml @@ -5,8 +5,7 @@ Legenda </text> </panel> - <panel - name="layout_panel_2"> + <panel name="layout_panel_2"> <button font="SansSerifSmall" label="Mostra minha localização" label_selected="Mostra minha localização" left_delta="91" name="Show My Location" tool_tip="Centrar o mapa na localização do meu avatar" width="135"/> <text name="me_label"> Eu @@ -24,60 +23,56 @@ Venda de terreno </text> <text name="by_owner_label"> - pelo dono + o proprietário </text> <text name="auction_label"> leilão de terrenos </text> - <button label="Ir para Casa" label_selected="Ir para casa" name="Go Home" tool_tip="Teletransportar para minha casa"/> + <button label="Ir para Casa" label_selected="Ir para casa" name="Go Home" tool_tip="Teletransportar para meu início"/> <text name="Home_label"> - Casa + Início </text> <text name="events_label"> Eventos: </text> <check_box label="PG" name="event_chk"/> <text name="pg_label"> - Geral + Público geral </text> - <check_box initial_value="true" label="Mature" name="event_mature_chk"/> + <check_box initial_value="verdadeiro" label="Mature" name="event_mature_chk"/> <text name="mature_label"> Moderado </text> <check_box label="Adult" name="event_adult_chk"/> <text name="adult_label"> - Público adulto + Adulto </text> </panel> - <panel - name="layout_panel_3"> + <panel name="layout_panel_3"> <text name="find_on_map_label"> Localizar no mapa </text> </panel> - <panel - name="layout_panel_4"> - <combo_box label="Amigos Conectados" name="friend combo" tool_tip="Mostrar amigos no mapa"> + <panel name="layout_panel_4"> + <combo_box label="Amigos online" name="friend combo" tool_tip="Mostrar amigos no mapa"> <combo_box.item label="Amigos conectados" name="item1"/> </combo_box> <combo_box label="Meus marcos" name="landmark combo" tool_tip="Mostrar marco no mapa"> <combo_box.item label="Meus marcos" name="item1"/> </combo_box> - <search_editor label="Regiões por nome" name="location" tool_tip="Digite o nome de uma Região"/> - <button label="Buscar" name="DoSearch" tool_tip="Procurar por região"/> - <button name="Clear" tool_tip="Limpara linhas e redefinir mapa"/> - <button font="SansSerifSmall" label="Teletransporte" label_selected="Teletransporte" name="Teleport" tool_tip="Teletransportar para a posição selecionada"/> + <search_editor label="Regiões por nome" name="location" tool_tip="Digite o nome da região"/> + <button label="Buscar" name="DoSearch" tool_tip="Buscar região"/> + <button name="Clear" tool_tip="Limpar linhas e redefinir mapa"/> + <button font="SansSerifSmall" label="Teletransportar" label_selected="Teletransporte" name="Teleport" tool_tip="Teletransportar para o lugar selecionado"/> <button font="SansSerifSmall" label="Copiar SLurl" name="copy_slurl" tool_tip="Copia a localização atual como um SLurl para usar na web."/> - <button font="SansSerifSmall" label="Mostrar seleção" label_selected="Mostrar Destino" left_delta="91" name="Show Destination" tool_tip="Centralizar mapa na posição selecionada" width="135"/> + <button font="SansSerifSmall" label="Mostrar seleção" label_selected="Mostrar Destino" left_delta="91" name="Show Destination" tool_tip="Centrar mapa no local selecionado" width="135"/> </panel> - <panel - name="layout_panel_5"> + <panel name="layout_panel_5"> <text name="zoom_label"> Zoom </text> </panel> - <panel - name="layout_panel_6"> + <panel name="layout_panel_6"> <slider label="Zoom" name="zoom slider"/> </panel> </floater> diff --git a/indra/newview/skins/default/xui/pt/menu_inventory.xml b/indra/newview/skins/default/xui/pt/menu_inventory.xml index 8b565b9645..2691ac81b3 100644 --- a/indra/newview/skins/default/xui/pt/menu_inventory.xml +++ b/indra/newview/skins/default/xui/pt/menu_inventory.xml @@ -6,21 +6,21 @@ <menu_item_call label="Propriedades" name="Task Properties"/> <menu_item_call label="Renomear" name="Task Rename"/> <menu_item_call label="Apagar" name="Task Remove"/> - <menu_item_call label="Limpar Lixeira" name="Empty Trash"/> - <menu_item_call label="Limpar Achados e perdidos" name="Empty Lost And Found"/> - <menu_item_call label="Nova Pasta" name="New Folder"/> - <menu_item_call label="Novo Script" name="New Script"/> + <menu_item_call label="Limpar lixeira" name="Empty Trash"/> + <menu_item_call label="Limpar Achados & perdidos" name="Empty Lost And Found"/> + <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_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="Nova Calça" name="New Pants"/> - <menu_item_call label="Novos Calçados" name="New Shoes"/> - <menu_item_call label="Novas Meias" name="New Socks"/> - <menu_item_call label="Nova Jaqueta" 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 Anágua" name="New Undershirt"/> + <menu_item_call label="Nova camisa" name="New Shirt"/> + <menu_item_call label="Nova calça" name="New Pants"/> + <menu_item_call label="Novos calçados" name="New Shoes"/> + <menu_item_call label="Novas meias" name="New Socks"/> + <menu_item_call label="Nova jaqueta" 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 anágua" name="New Undershirt"/> <menu_item_call label="Nova roupa de baixo" name="New Underpants"/> <menu_item_call label="Nova máscara alfa" name="New Alpha Mask"/> <menu_item_call label="Nova tatuagem" name="New Tattoo"/> @@ -53,29 +53,29 @@ <menu_item_call label="Abrir" name="Open"/> <menu_item_call label="Propriedades" name="Properties"/> <menu_item_call label="Renomear" name="Rename"/> - <menu_item_call label="Copy Asset UUID" name="Copy Asset UUID"/> + <menu_item_call label="Copiar item UUID" name="Copy Asset UUID"/> <menu_item_call label="Copiar" name="Copy"/> <menu_item_call label="Colar" name="Paste"/> <menu_item_call label="Colar como link" name="Paste As Link"/> <menu_item_call label="Apagar" name="Delete"/> <menu_item_call label="Excluir pasta do sistema" name="Delete System Folder"/> - <menu_item_call label="Iniciar conversa em conferência" name="Conference Chat Folder"/> - <menu_item_call label="Executar" name="Sound Play"/> + <menu_item_call label="Pasta conversa em conferência" name="Conference Chat Folder"/> + <menu_item_call label="Executar som" name="Sound Play"/> <menu_item_call label="Sobre o marco" name="About Landmark"/> - <menu_item_call label="Tocar inworld" name="Animation Play"/> - <menu_item_call label="Executar localmente" name="Animation Audition"/> - <menu_item_call label="Mandar Mensagem Instantânea" name="Send Instant Message"/> + <menu_item_call label="Executar animação" name="Animation Play"/> + <menu_item_call label="Executar áudio" name="Animation Audition"/> + <menu_item_call label="Mandar MI" name="Send Instant Message"/> <menu_item_call label="Oferecer teletransporte..." name="Offer Teleport..."/> - <menu_item_call label="Iniciar conversa em conferência" name="Conference Chat"/> + <menu_item_call label="Bate-papo em conferência" name="Conference Chat"/> <menu_item_call label="Ativar" name="Activate"/> <menu_item_call label="Desativar" name="Deactivate"/> <menu_item_call label="Salvar como" name="Save As"/> - <menu_item_call label="Retirar de você" name="Detach From Yourself"/> - <menu_item_call label="Vestir" name="Object Wear"/> + <menu_item_call label="Retirar de si mesmo" name="Detach From Yourself"/> + <menu_item_call label="Vestir objeto" name="Object Wear"/> <menu label="Anexar a" name="Attach To"/> <menu label="Anexar ao HUD" name="Attach To HUD"/> <menu_item_call label="Editar" name="Wearable Edit"/> <menu_item_call label="Vestir" name="Wearable Wear"/> - <menu_item_call label="Retirar" name="Take Off"/> + <menu_item_call label="Tirar" name="Take Off"/> <menu_item_call label="--Sem opções--" name="--no options--"/> </menu> diff --git a/indra/newview/skins/default/xui/pt/menu_inventory_add.xml b/indra/newview/skins/default/xui/pt/menu_inventory_add.xml index 81898c63bf..fc40384891 100644 --- a/indra/newview/skins/default/xui/pt/menu_inventory_add.xml +++ b/indra/newview/skins/default/xui/pt/menu_inventory_add.xml @@ -24,7 +24,7 @@ <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 silhueta" name="New Shape"/> + <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"/> diff --git a/indra/newview/skins/default/xui/pt/menu_object.xml b/indra/newview/skins/default/xui/pt/menu_object.xml index 5121c9d048..a5969cacc3 100644 --- a/indra/newview/skins/default/xui/pt/menu_object.xml +++ b/indra/newview/skins/default/xui/pt/menu_object.xml @@ -5,6 +5,7 @@ <menu_item_call label="Construir" name="Build"/> <menu_item_call label="Abrir" name="Open"/> <menu_item_call label="Sentar aqui" name="Object Sit"/> + <menu_item_call label="Ficar de pé" name="Object Stand Up"/> <menu_item_call label="Perfil do objeto" name="Object Inspect"/> <menu_item_call label="Mais zoom" name="Zoom In"/> <context_menu label="Colocar no(a)" name="Put On"> diff --git a/indra/newview/skins/default/xui/pt/menu_profile_overflow.xml b/indra/newview/skins/default/xui/pt/menu_profile_overflow.xml index 2635182290..d41ecbd755 100644 --- a/indra/newview/skins/default/xui/pt/menu_profile_overflow.xml +++ b/indra/newview/skins/default/xui/pt/menu_profile_overflow.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <toggleable_menu name="profile_overflow_menu"> + <menu_item_call label="Mapa" name="show_on_map"/> <menu_item_call label="Pagar" name="pay"/> <menu_item_call label="Compartilhar" name="share"/> <menu_item_call label="Bloquear" name="block"/> diff --git a/indra/newview/skins/default/xui/pt/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/pt/menu_teleport_history_item.xml index b4216b7ddc..ec1e7a0950 100644 --- a/indra/newview/skins/default/xui/pt/menu_teleport_history_item.xml +++ b/indra/newview/skins/default/xui/pt/menu_teleport_history_item.xml @@ -2,5 +2,5 @@ <context_menu name="Teleport History Item Context Menu"> <menu_item_call label="Teletransportar" name="Teleport"/> <menu_item_call label="Mais informações" name="More Information"/> - <menu_item_call label="Copiar para área de transferência" name="CopyToClipboard"/> + <menu_item_call label="Copiar" name="CopyToClipboard"/> </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 2b83386cad..45f7ca1424 100644 --- a/indra/newview/skins/default/xui/pt/menu_viewer.xml +++ b/indra/newview/skins/default/xui/pt/menu_viewer.xml @@ -80,7 +80,7 @@ <menu_item_call label="Link" name="Link"/> <menu_item_call label="Desconectar links" name="Unlink"/> <menu_item_check label="Edit Linked Parts" name="Edit Linked Parts"/> - <menu_item_call label="Focus on Selection" name="Focus on Selection"/> + <menu_item_call label="Enfocar seleção" name="Focus on Selection"/> <menu_item_call label="Ampliar seleção" name="Zoom to Selection"/> <menu label="Objeto:" name="Object"> <menu_item_call label="Comprar" name="Menu Object Buy"/> @@ -92,29 +92,29 @@ <menu label="Scripts" name="Scripts"> <menu_item_call label="Recompilar scripts (LSL)" name="Mono"/> <menu_item_call label="Recompilar scripts (LSL)" name="LSL"/> - <menu_item_call label="Reset Scripts" name="Reset Scripts"/> + <menu_item_call label="Resetar scripts" name="Reset Scripts"/> <menu_item_call label="Scripts em modo execução" name="Set Scripts to Running"/> <menu_item_call label="Scripts em modo não execução" name="Set Scripts to Not Running"/> </menu> <menu label="Opções" name="Options"> - <menu_item_call label="Set Default Upload Permissions" name="perm prefs"/> + <menu_item_call label="Definir permissões padrão de upload" name="perm prefs"/> <menu_item_check label="Mostrar permissões avançadas" name="DebugPermissions"/> <menu_item_check label="Só selecionar meus objetos" name="Select Only My Objects"/> - <menu_item_check label="Só selecionar meus objetos" name="Select Only Movable Objects"/> + <menu_item_check label="Só selecionar objetos móveis" name="Select Only Movable Objects"/> <menu_item_check label="Selecionar contornando" name="Select By Surrounding"/> <menu_item_check label="Mostrar seleção oculta" name="Show Hidden Selection"/> - <menu_item_check label="Show Light Radius for Selection" name="Show Light Radius for Selection"/> - <menu_item_check label="Show Selection Beam" name="Show Selection Beam"/> - <menu_item_check label="Mostrar na grade" name="Snap to Grid"/> - <menu_item_call label="Snap Object XY to Grid" name="Snap Object XY to Grid"/> + <menu_item_check label="Mostrar alcance de luz da seleção" name="Show Light Radius for Selection"/> + <menu_item_check label="Mostrar raio de seleção" name="Show Selection Beam"/> + <menu_item_check label="Encaixar em grade" name="Snap to Grid"/> + <menu_item_call label="Encaixar objeto XY em grade" name="Snap Object XY to Grid"/> <menu_item_call label="Usar seleção em grade" name="Use Selection for Grid"/> <menu_item_call label="Opções de grade" name="Grid Options"/> </menu> <menu label="Selecionar partes conectadas" name="Select Linked Parts"> - <menu_item_call label="Select Next Part" name="Select Next Part"/> - <menu_item_call label="Select Previous Part" name="Select Previous Part"/> - <menu_item_call label="Include Next Part" name="Include Next Part"/> - <menu_item_call label="Include Previous Part" name="Include Previous Part"/> + <menu_item_call label="Selecionar próxima parte" name="Select Next Part"/> + <menu_item_call label="Selecionar parte anterior" name="Select Previous Part"/> + <menu_item_call label="Incluir próxima parte" name="Include Next Part"/> + <menu_item_call label="Incluir parte anterior" name="Include Previous Part"/> </menu> </menu> <menu label="Ajuda" name="Help"> @@ -133,9 +133,9 @@ <menu_item_check label="Compactar fotos para HD" name="QuietSnapshotsToDisk"/> <menu_item_check label="Compactar fotos para HD" name="CompressSnapshotsToDisk"/> <menu label="Ferramentas de desempenho" name="Performance Tools"> - <menu_item_call label="Lag Meter" name="Lag Meter"/> + <menu_item_call label="Medidor de lag" name="Lag Meter"/> <menu_item_check label="Barra de estatísticas" name="Statistics Bar"/> - <menu_item_check label="Show Avatar Rendering Cost" name="Avatar Rendering Cost"/> + <menu_item_check label="Carga de renderização de avatar" name="Avatar Rendering Cost"/> </menu> <menu label="Realces e visibilidade" name="Highlighting and Visibility"> <menu_item_check label="Efeito baliza piscando" name="Cheesy Beacon"/> @@ -166,13 +166,13 @@ <menu_item_check label="Selecionado" name="Selected"/> <menu_item_check label="Realçado" name="Highlighted"/> <menu_item_check label="Texturas dinâmicas" name="Dynamic Textures"/> - <menu_item_check label="Foot Shadows" name="Foot Shadows"/> - <menu_item_check label="Fog" name="Fog"/> - <menu_item_check label="Flexible Objects" name="Flexible Objects"/> + <menu_item_check label="Sombras nos pés" name="Foot Shadows"/> + <menu_item_check label="Neblina" name="Fog"/> + <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_call label="Limpar cache de grupo" name="ClearGroupCache"/> - <menu_item_check label="Mouse Smoothing" name="Mouse Smoothing"/> + <menu_item_check label="Smoothing de mouse" name="Mouse Smoothing"/> <menu label="Atalhos" name="Shortcuts"> <menu_item_call label="Imagem (L$[COST])..." name="Upload Image"/> <menu_item_check label="Busca" name="Search"/> @@ -205,7 +205,7 @@ <menu label="Desenvolver" name="Develop"> <menu label="Painéis" name="Consoles"> <menu_item_check label="Painel de textura" name="Texture Console"/> - <menu_item_check label="Debug Console" name="Debug Console"/> + <menu_item_check label="Console de depuração" name="Debug Console"/> <menu_item_call label="Painel de avisos" name="Notifications"/> <menu_item_check label="Painel de tamanho de textura" name="Texture Size"/> <menu_item_check label="Painel de texturas" name="Texture Category"/> @@ -218,7 +218,7 @@ </menu> <menu label="Show Info" name="Display Info"> <menu_item_check label="Mostrar hora" name="Show Time"/> - <menu_item_check label="Show Render Info" name="Show Render Info"/> + <menu_item_check label="Dados de renderização" name="Show Render Info"/> <menu_item_check label="Mostrar cor sob o cursor" name="Show Color Under Cursor"/> <menu_item_check label="Mostrar mudanças a objetos" name="Show Updates"/> </menu> @@ -239,7 +239,7 @@ </menu> <menu label="Rendering" name="Rendering"> <menu_item_check label="Axes" name="Axes"/> - <menu_item_check label="Contornos" name="Wireframe"/> + <menu_item_check label="Wireframe" name="Wireframe"/> <menu_item_check label="Global Illumination" name="Global Illumination"/> <menu_item_check label="Texturas de animação" name="Animation Textures"/> <menu_item_check label="Desativar texturas" name="Disable Textures"/> @@ -247,11 +247,11 @@ <menu_item_check label="Render Attached Particles" name="Render Attached Particles"/> <menu_item_check label="Objetos iridescentes" name="Hover Glow Objects"/> </menu> - <menu label="Network" name="Network"> + <menu label="Rede" name="Network"> <menu_item_check label="Pausar avatar" name="AgentPause"/> <menu_item_call label="Drop a Packet" name="Drop a Packet"/> </menu> - <menu_item_call label="Bumps, Pushes & Hits" name="Bumps, Pushes &amp; Hits"/> + <menu_item_call label="Empurrões, trombadas e tapas" name="Bumps, Pushes &amp; Hits"/> <menu label="Mundo" name="World"> <menu_item_check label="Impor sobre sol regional" name="Sim Sun Override"/> <menu_item_check label="Efeito baliza piscando" name="Cheesy Beacon"/> @@ -261,15 +261,15 @@ <menu label="Interface" name="UI"> <menu_item_call label="Teste de navegador web" name="Web Browser Test"/> <menu_item_call label="Print Selected Object Info" name="Print Selected Object Info"/> - <menu_item_call label="Memory Stats" name="Memory Stats"/> + <menu_item_call label="Dados de memória" name="Memory Stats"/> <menu_item_check label="Double-Click Auto-Pilot" name="Double-ClickAuto-Pilot"/> <menu_item_check label="Debug Clicks" name="Debug Clicks"/> <menu_item_check label="Debug Mouse Events" name="Debug Mouse Events"/> </menu> <menu label="XUI" name="XUI"> <menu_item_call label="Recarregar cores" name="Reload Color Settings"/> - <menu_item_call label="Show Font Test" name="Show Font Test"/> - <menu_item_call label="Load from XML" name="Load from XML"/> + <menu_item_call label="Teste de fonte" name="Show Font Test"/> + <menu_item_call label="Carregar de XML" name="Load from XML"/> <menu_item_call label="Salvar para XML" name="Save to XML"/> <menu_item_check label="Mostrar nomes XUI" name="Show XUI Names"/> <menu_item_call label="Enviar MIs de teste" name="Send Test IMs"/> diff --git a/indra/newview/skins/default/xui/pt/notifications.xml b/indra/newview/skins/default/xui/pt/notifications.xml index 60113bcf0b..5f91ff09e5 100644 --- a/indra/newview/skins/default/xui/pt/notifications.xml +++ b/indra/newview/skins/default/xui/pt/notifications.xml @@ -106,7 +106,7 @@ Por favor, selecione apenas um objeto e tente novamente. </notification> <notification name="FriendsAndGroupsOnly"> Residentes que não são amigos não veem que você decidiu ignorar ligações e MIs deles. - <usetemplate name="okbutton" yestext="Sim"/> + <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="GrantModifyRights"> Conceder direitos de modificação a outros residentes vai autorizá-los a mudar, apagar ou pegar TODOS os seus objetos. Seja MUITO cuidadoso ao conceder esta autorização. @@ -442,7 +442,6 @@ O objeto pode estar fora de alcance ou ter sido deletado. <notification name="UnsupportedHardware"> Sabe de uma coisa? Seu computador não tem os requisitos mínimos do [APP_NAME]. Talvez o desempenho seja um pouco sofrível. O suporte não pode atender pedidos de assistência técnicas em sistemas não suportados. -MINSPECS Consultar [_URL] para mais informações? <url name="url" option="0"> http://secondlife.com/support/sysreqs.php?lang=pt @@ -1283,19 +1282,19 @@ Salvar na pasta Aplicativos? </notification> <notification name="GroupLeaveConfirmMember"> Você é atualmente um membro do grupo [GROUP]. -Deixar este grupo? - <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Deixar"/> +Sair do grupo? + <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Sair"/> </notification> <notification name="ConfirmKick"> - Você quer REALMENTE expulsar todos os usuários deste grid? - <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Expulsar todos os usuários"/> + Tem CERTEZA de que deseja expulsar todos os residentes do grid? + <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Chutar todos"/> </notification> <notification name="MuteLinden"> Desculpe, nenhum Linden pode ser bloqueado. <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="CannotStartAuctionAlreadyForSale"> - Você não pode começar um leilão com um lote que já foi colocado à venda. Desabilite a venda da terra se você tem certeza que deseja iniciar um leilão. + Você não pode começar um leilão com um lote que já foi colocado à venda. Desabilite a venda se você tem certeza que deseja fazer um leilão. </notification> <notification label="Falha ao bloquear objeto por nome" name="MuteByNameFailed"> Você já bloqueou este residente. @@ -1328,7 +1327,7 @@ O bate-papo e MIs não serão exibidos. MIs enviadas para você receberão sua <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="KickUser"> - Expulsar este usuário com qual mensagem? + Chutar este residente com qual mensagem? <form name="form"> <input name="message"> Um administrador desligou você. @@ -1348,7 +1347,7 @@ O bate-papo e MIs não serão exibidos. MIs enviadas para você receberão sua </form> </notification> <notification name="FreezeUser"> - Paralise este usuário com qual mensagem? + Congelar este residente com qual mensagem? <form name="form"> <input name="message"> Você foi congelado. Você não pode se mover ou conversar. Um administrador irá contatá-lo via mensagem instantânea (MI). @@ -1358,7 +1357,7 @@ O bate-papo e MIs não serão exibidos. MIs enviadas para você receberão sua </form> </notification> <notification name="UnFreezeUser"> - Liberar este usuário com qual mensagem? + Descongelar este residente com qual mensagem? <form name="form"> <input name="message"> Você não está mais congelado. @@ -1378,7 +1377,7 @@ O bate-papo e MIs não serão exibidos. MIs enviadas para você receberão sua </form> </notification> <notification name="OfferTeleportFromGod"> - God user convocou para a sua localização? + Convocar residente à sua localização com poderes de deus? <form name="form"> <input name="message"> Junte-se a mim em [REGION] @@ -1408,11 +1407,11 @@ O bate-papo e MIs não serão exibidos. MIs enviadas para você receberão sua </form> </notification> <notification label="Mudar propriedade Linden" name="ChangeLindenEstate"> - Você está prestes a mudar uma propriedade pertencente a Linden (continente, teen grid, orientação, etc.) + Você está prestes a modificar uma propriedade da Linden (continente, teen, grid, orientação, etc) -Isto é EXTREMAMENTE PERIGOSO porque pode fundamentalmente afetar a experiência do usuário. No continente, vai mudar milhares de regiões e fazer o spaceserver soluçar. +Esta ação é EXTREMAMENTE PERIGOSA -- ela pode afetar a experiência dos residentes. No continente, isso vai mudar milhares de regiões e deixar o spaceserver sobrecarregado. -Proceder? +Deseja prosseguir? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Mudar Propriedade"/> </notification> <notification label="Mudar o acesso à propriedade Linden" name="ChangeLindenAccess"> @@ -2399,14 +2398,6 @@ Deixar? <button name="Ignore" text="Ignorar"/> </form> </notification> - <notification name="ScriptToast"> - [FIRST] [LAST], '[TITLE]' está pedindo dados de usuário. - <form name="form"> - <button name="Open" text="Abrir diálogo"/> - <button name="Ignore" text="Ignorar"/> - <button name="Block" text="Bloquear"/> - </form> - </notification> <notification name="BuyLindenDollarSuccess"> Obrigado e volte sempre! @@ -2533,7 +2524,7 @@ Para sua segurança, os SLurls serão bloqueados por alguns instantes. </notification> <notification name="ConfirmCloseAll"> Tem certeza de que quer fechar todas as MIs? - <usetemplate name="okcancelignore" notext="Cancelar" yestext="OK"/> + <usetemplate ignoretext="Confirmar antes de fechar todas as MIs" name="okcancelignore" notext="Cancelar" yestext="OK"/> </notification> <notification name="AttachmentSaved"> Anexo salvo. diff --git a/indra/newview/skins/default/xui/pt/panel_classified_info.xml b/indra/newview/skins/default/xui/pt/panel_classified_info.xml index 8441cd9913..191c005b1a 100644 --- a/indra/newview/skins/default/xui/pt/panel_classified_info.xml +++ b/indra/newview/skins/default/xui/pt/panel_classified_info.xml @@ -3,16 +3,46 @@ <panel.string name="l$_price"> L$ [PRICE] </panel.string> + <panel.string name="click_through_text_fmt"> + [TELEPORT] teletransporte, [MAP] mapa, [PROFILE] perfil + </panel.string> + <panel.string name="date_fmt"> + [mthnum,datetime,slt]/[day,datetime,slt]/[year,datetime,slt] + </panel.string> + <panel.string name="auto_renew_on"> + Ativado + </panel.string> + <panel.string name="auto_renew_off"> + Desativado + </panel.string> <text name="title" value="Dados do anúncio"/> <scroll_container name="profile_scroll"> <panel name="scroll_content_panel"> - <text_editor name="classified_name" value="[nome]"/> - <text_editor name="classified_location" value="[carregando...]"/> + <text_editor name="classified_name" value="[name]"/> + <text name="classified_location_label" value="Localização:"/> + <text_editor name="classified_location" value="[loading...]"/> + <text name="content_type_label" value="Tipo de conteúdo:"/> <text_editor name="content_type" value="[content type]"/> + <text name="category_label" value="Categoria:"/> <text_editor name="category" value="[category]"/> - <check_box label="Renovar automaticamente todas as semanas" name="auto_renew"/> - <text_editor name="price_for_listing" tool_tip="Preço do anúncio."/> - <text_editor name="classified_desc" value="[descrição]"/> + <text name="creation_date_label" value="Data de criação"/> + <text_editor name="creation_date" tool_tip="Data de criação" value="[date]"/> + <text name="price_for_listing_label" value="Preço do anúncio:"/> + <text_editor name="price_for_listing" tool_tip="Preço do anúncio." value="[price]"/> + <layout_stack name="descr_stack"> + <layout_panel name="clickthrough_layout_panel"> + <text name="click_through_label" value="Cliques:"/> + <text_editor name="click_through_text" tool_tip="Dados de click-through" value="[clicks]"/> + </layout_panel> + <layout_panel name="price_layout_panel"> + <text name="auto_renew_label" value="Renovação automática:"/> + <text name="auto_renew" value="Ativado"/> + </layout_panel> + <layout_panel name="descr_layout_panel"> + <text name="classified_desc_label" value="Descrição:"/> + <text_editor name="classified_desc" value="[description]"/> + </layout_panel> + </layout_stack> </panel> </scroll_container> <panel name="buttons"> diff --git a/indra/newview/skins/default/xui/pt/panel_edit_classified.xml b/indra/newview/skins/default/xui/pt/panel_edit_classified.xml index a754c5f070..f6fb223599 100644 --- a/indra/newview/skins/default/xui/pt/panel_edit_classified.xml +++ b/indra/newview/skins/default/xui/pt/panel_edit_classified.xml @@ -3,12 +3,20 @@ <panel.string name="location_notice"> (salvar para atualizar) </panel.string> + <string name="publish_label"> + Publicar + </string> + <string name="save_label"> + Salvar + </string> <text name="title"> Editar anúncio </text> <scroll_container name="profile_scroll"> <panel name="scroll_content_panel"> - <icon label="" name="edit_icon" tool_tip="Selecione uma imagem"/> + <panel name="snapshot_panel"> + <icon label="" name="edit_icon" tool_tip="Selecione uma imagem"/> + </panel> <text name="Name:"> Cargo: </text> @@ -22,12 +30,19 @@ Carregando... </text> <button label="Usar configuração local" name="set_to_curr_location_btn"/> + <text name="category_label" value="Categoria:"/> + <text name="content_type_label" value="Tipo de conteúdo:"/> + <icons_combo_box label="Público geral" name="content_type"> + <icons_combo_box.item label="Moderado" name="mature_ci" value="Adulto"/> + <icons_combo_box.item label="Público geral" name="pg_ci" value="Adequado para menores"/> + </icons_combo_box> + <text name="price_for_listing_label" value="Preço do anúncio:"/> <spinner label="L$" name="price_for_listing" tool_tip="Preço do anúncio" value="50"/> <check_box label="Renovação automática semanal" name="auto_renew"/> </panel> </scroll_container> <panel label="bottom_panel" name="bottom_panel"> - <button label="Salvar" name="save_changes_btn"/> + <button label="[LABEL]" name="save_changes_btn"/> <button label="Cancelar" name="cancel_btn"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/pt/panel_edit_pick.xml b/indra/newview/skins/default/xui/pt/panel_edit_pick.xml index f56533652d..96a294bc28 100644 --- a/indra/newview/skins/default/xui/pt/panel_edit_pick.xml +++ b/indra/newview/skins/default/xui/pt/panel_edit_pick.xml @@ -1,5 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Editar destaques" name="panel_edit_pick"> + <panel.string name="location_notice"> + (salvar para atualizar) + </panel.string> <text name="title"> Editar destaques </text> @@ -22,7 +25,7 @@ </panel> </scroll_container> <panel label="bottom_panel" name="bottom_panel"> - <button label="Salvar [WHAT]" name="save_changes_btn"/> + <button label="Salvar destaque" name="save_changes_btn"/> <button label="Cancelar" name="cancel_btn"/> </panel> </panel> 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 c11d800171..23cde50acc 100644 --- a/indra/newview/skins/default/xui/pt/panel_edit_tattoo.xml +++ b/indra/newview/skins/default/xui/pt/panel_edit_tattoo.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="edit_tattoo_panel"> <panel name="avatar_tattoo_color_panel"> - <texture_picker label="Tatoo de cabeça" name="Head Tattoo" tool_tip="Clique para escolher uma foto"/> - <texture_picker label="Tatoo da parte superior do corpo" name="Upper Tattoo" tool_tip="Clique para escolher uma foto"/> - <texture_picker label="Tatoo da parte inferior do corpo" name="Lower Tattoo" tool_tip="Clique para escolher uma foto"/> + <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"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/pt/panel_group_general.xml b/indra/newview/skins/default/xui/pt/panel_group_general.xml index 85488f43af..0b65b4aade 100644 --- a/indra/newview/skins/default/xui/pt/panel_group_general.xml +++ b/indra/newview/skins/default/xui/pt/panel_group_general.xml @@ -46,7 +46,7 @@ Para obter mais ajuda, passe o mouse sobre as opções. <check_box label="Qualquer um pode entrar" name="open_enrollement" tool_tip="Controla a entrada de novos membros, com ou sem convite."/> <check_box label="Taxa de inscrição" name="check_enrollment_fee" tool_tip="Controla a cobrança de uma taxa de associação ao grupo."/> <spinner label="L$" left_delta="120" name="spin_enrollment_fee" tool_tip="Se a opção 'Taxa de associação' estiver marcada, novos membros precisam pagar o valor definido para entrar no grupo." width="60"/> - <combo_box name="group_mature_check" tool_tip="Define se a informação do seu grupo é considerada mature." width="170"> + <combo_box name="group_mature_check" tool_tip="Define se os dados do seu grupo são conteúdo moderado." width="170"> <combo_box.item label="Conteúdo PG" name="pg"/> <combo_box.item label="Conteúdo Mature" name="mature"/> </combo_box> 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 2abc8bc7c8..4b5a00c761 100644 --- a/indra/newview/skins/default/xui/pt/panel_group_notices.xml +++ b/indra/newview/skins/default/xui/pt/panel_group_notices.xml @@ -19,10 +19,10 @@ Cada grupo pode enviar no máximo 200 avisos/dia Nenhum resultado foi encontrado. </text> <button label="Criar um novo aviso" label_selected="Criar nova notícia" name="create_new_notice" tool_tip="Criar um novo aviso"/> - <button label="Atualizar" label_selected="Atualizar Lista" name="refresh_notices" tool_tip="Atualizar lista de avisos"/> + <button label="Atualizar" label_selected="Atualizar lista" name="refresh_notices" tool_tip="Atualizar lista de avisos"/> <panel label="Criar nova notícia" name="panel_create_new_notice"> <text name="lbl"> - Criar uma notícia + Criar notícia </text> <text left="20" name="lbl3"> Assunto: @@ -43,7 +43,7 @@ Cada grupo pode enviar no máximo 200 avisos/dia <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."/> </panel> - <panel label="Visualizar Notícia Anterior" name="panel_view_past_notice"> + <panel label="Visualizar notícia anterior" name="panel_view_past_notice"> <text name="lbl"> Notícia arquivada </text> diff --git a/indra/newview/skins/default/xui/pt/panel_groups.xml b/indra/newview/skins/default/xui/pt/panel_groups.xml index aaea1178a6..0aea0d53dd 100644 --- a/indra/newview/skins/default/xui/pt/panel_groups.xml +++ b/indra/newview/skins/default/xui/pt/panel_groups.xml @@ -1,15 +1,15 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="groups"> <text name="groupdesc" width="268"> - Seu grupo ativo atual es'ta mostrado em negrito. + Seu grupo ativo atual está em negrito. </text> <text name="groupcount" width="300"> - Você pertence a [COUNT] grupos (de no máximo [MAX]). + Você pertence a [COUNT] grupos (máximo [MAX]). </text> - <button width="86" label="MI/Chamada" name="IM" tool_tip="Abrir sessão de Mensagem Instantânea"/> + <button width="86" label="MI/Ligação" name="IM" tool_tip="Abrir sessão de Mensagem Instantânea"/> <button width="86" label="Informações" name="Info"/> <button width="86" label="Ativar" name="Activate"/> - <button width="86" label="Deixar" name="Leave"/> + <button width="86" label="Sair" name="Leave"/> <button width="86" label="Criar..." name="Create"/> <button width="86" label="Buscar..." name="Search..."/> </panel> diff --git a/indra/newview/skins/default/xui/pt/panel_im_control_panel.xml b/indra/newview/skins/default/xui/pt/panel_im_control_panel.xml index 11e1ba0039..2535340f4c 100644 --- a/indra/newview/skins/default/xui/pt/panel_im_control_panel.xml +++ b/indra/newview/skins/default/xui/pt/panel_im_control_panel.xml @@ -13,7 +13,7 @@ <layout_panel name="share_btn_panel"> <button label="Compartilhar" name="share_btn"/> </layout_panel> - <layout_panel name="share_btn_panel"> + <layout_panel name="pay_btn_panel"> <button label="Pagar" name="pay_btn"/> </layout_panel> <layout_panel name="call_btn_panel"> 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 f64b9f319f..104c3bface 100644 --- a/indra/newview/skins/default/xui/pt/panel_main_inventory.xml +++ b/indra/newview/skins/default/xui/pt/panel_main_inventory.xml @@ -1,18 +1,14 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Coisas" name="main inventory panel"> - <panel.string name="Title"> - Coisas + <panel.string name="ItemcountFetching"> + Reunindo [ITEM_COUNT] itens ... [FILTER] </panel.string> - <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"/> - </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> + <panel.string name="ItemcountCompleted"> + [ITEM_COUNT] itens [FILTER] + </panel.string> + <text name="ItemcountText"> + Itens: + </text> <menu_bar name="Inventory Menu"> <menu label="Arquivo" name="File"> <menu_item_call label="Abrir" name="Open"/> @@ -48,7 +44,7 @@ <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 silhueta" name="New Shape"/> + <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"/> @@ -61,4 +57,14 @@ <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"/> + </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> </panel> diff --git a/indra/newview/skins/default/xui/pt/panel_media_settings_general.xml b/indra/newview/skins/default/xui/pt/panel_media_settings_general.xml index 9815b8d0b4..43c0820036 100644 --- a/indra/newview/skins/default/xui/pt/panel_media_settings_general.xml +++ b/indra/newview/skins/default/xui/pt/panel_media_settings_general.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Público geral" name="Media Settings General"> +<panel label="Geral" name="Media Settings General"> <text name="home_label"> Página web: </text> diff --git a/indra/newview/skins/default/xui/pt/panel_nearby_media.xml b/indra/newview/skins/default/xui/pt/panel_nearby_media.xml index a81d3e19f8..34db606d8b 100644 --- a/indra/newview/skins/default/xui/pt/panel_nearby_media.xml +++ b/indra/newview/skins/default/xui/pt/panel_nearby_media.xml @@ -19,10 +19,17 @@ <button label="Mais >>" label_selected="Menos <<" name="more_less_btn" tool_tip="Controles avançados"/> </panel> <panel name="nearby_media_panel"> + <text name="nearby_media"> + Mídia por perto + </text> + <text name="show"> + Mostrar: + </text> <combo_box name="show_combo"> <combo_box.item label="Tudo" name="All"/> <combo_box.item label="Neste lote" name="WithinParcel"/> <combo_box.item label="Fora deste lote" name="OutsideParcel"/> + <combo_box.item label="Nos outros avatares" name="OnOthers"/> </combo_box> <scroll_list name="media_list"> <scroll_list.columns label="Proximidade" name="media_proximity"/> @@ -31,10 +38,10 @@ <scroll_list.columns label="Nome" name="media_name"/> <scroll_list.columns label="Depurar" name="media_debug"/> </scroll_list> - <panel> + <panel name="media_controls_panel"> <layout_stack name="media_controls"> <layout_panel name="stop"> - <button name="stop_btn" tool_tip="Para mídia selecionada"/> + <button name="stop_btn" tool_tip="Parar mídia selecionada"/> </layout_panel> <layout_panel name="play"> <button name="play_btn" tool_tip="Tocar mídia selecionada"/> diff --git a/indra/newview/skins/default/xui/pt/panel_people.xml b/indra/newview/skins/default/xui/pt/panel_people.xml index 5061788757..1516a2bb65 100644 --- a/indra/newview/skins/default/xui/pt/panel_people.xml +++ b/indra/newview/skins/default/xui/pt/panel_people.xml @@ -7,6 +7,8 @@ <string name="no_friends" value="Nenhum amigo"/> <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="[secondlife:///app/search/groups Tente encontrar o grupo na Busca]"/> + <string name="no_groups_msg" value="[secondlife:///app/search/groups Tente procurar grupos que lhe interessam]"/> <filter_editor label="Filtro" name="filter_input"/> <tab_container name="tabs"> <panel label="PROXIMIDADE" name="nearby_panel"> @@ -26,7 +28,7 @@ <button name="del_btn" tool_tip="Remover a pessoa selecionada da sua lista de amigos"/> </panel> <text name="no_friends_msg"> - Para adicionar amigos, use a [secondlife:///app/search/people busca de pessoas] ou clique em um usuário para adicioná-lo. + Para adicionar amigos, use a [secondlife:///app/search/people busca de pessoas] ou clique em um residente para adicioná-lo. Para conhecer mais gente, use [secondlife:///app/worldmap o Mapa]. </text> </panel> @@ -46,12 +48,12 @@ Para conhecer mais gente, use [secondlife:///app/worldmap o Mapa]. </tab_container> <panel name="button_bar"> <button label="Perfil" name="view_profile_btn" tool_tip="Exibir fotografia, grupos e outras informações dos residentes"/> - <button label="MI" name="im_btn" tool_tip="Abrir sessão de mensagem instantânea"/> + <button label="MI" name="im_btn" tool_tip="Iniciar MI"/> <button label="Chamada" name="call_btn" tool_tip="Ligar para este residente"/> <button label="Compartilhar" name="share_btn"/> <button label="Teletransporte" name="teleport_btn" tool_tip="Oferecer teletransporte"/> <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="abrir sessão de bate- papo"/> + <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"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/pt/panel_place_profile.xml b/indra/newview/skins/default/xui/pt/panel_place_profile.xml index 453c56d280..03f997f31b 100644 --- a/indra/newview/skins/default/xui/pt/panel_place_profile.xml +++ b/indra/newview/skins/default/xui/pt/panel_place_profile.xml @@ -6,7 +6,7 @@ <string name="available" value="disponível"/> <string name="allocated" value="alocados"/> <string name="title_place" value="Perfil da região"/> - <string name="title_teleport_history" value="Histórico de teletransportes"/> + <string name="title_teleport_history" value="Teletransportes"/> <string name="not_available" value="(N\A)"/> <string name="unknown" value="(Desconhecido)"/> <string name="public" value="(público)"/> @@ -51,12 +51,12 @@ <accordion_tab name="parcel_characteristics_tab" title="Lote"> <panel name="parcel_characteristics_panel"> <text name="rating_label" value="Classificação:"/> - <text name="rating_value" value="(Desconhecido)"/> + <text name="rating_value" value="desconhecido"/> <text name="voice_label" value="Voz:"/> <text name="voice_value" value="Ligar"/> <text name="fly_label" value="Voar:"/> <text name="fly_value" value="Ligar"/> - <text name="push_label" value="Push:"/> + <text name="push_label" value="Empurrar:"/> <text name="push_value" value="Desligar"/> <text name="build_label" value="Construir:"/> <text name="build_value" value="Ligar"/> @@ -70,10 +70,17 @@ <accordion_tab name="region_information_tab" title="Região"> <panel name="region_information_panel"> <text name="region_name_label" value="Região:"/> + <text name="region_name" value="Alcelândia"/> <text name="region_type_label" value="Tipo:"/> + <text name="region_type" value="Alce"/> <text name="region_rating_label" value="Classificação:"/> + <text name="region_rating" value="Adulto"/> <text name="region_owner_label" value="Proprietário:"/> + <text name="region_owner" value="moose Van Moose"/> <text name="region_group_label" value="Grupo:"/> + <text name="region_group"> + The Mighty Moose of mooseville soundvillemoose + </text> <button label="Região/Propriedade" name="region_info_btn"/> </panel> </accordion_tab> @@ -93,7 +100,7 @@ <text name="primitives_label" value="Prims:"/> <text name="parcel_scripts_label" value="Scripts:"/> <text name="terraform_limits_label" value="Limite de terraplenagem:"/> - <text name="subdivide_label" value="Juntar/subdividir:"/> + <text name="subdivide_label" value="Capacidade de juntar/subdividir:"/> <text name="resale_label" value="Revenda:"/> <text name="sale_to_label" value="À venda para:"/> </panel> diff --git a/indra/newview/skins/default/xui/pt/panel_places.xml b/indra/newview/skins/default/xui/pt/panel_places.xml index d9045e1a37..9da4201c85 100644 --- a/indra/newview/skins/default/xui/pt/panel_places.xml +++ b/indra/newview/skins/default/xui/pt/panel_places.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Lugares" name="places panel"> <string name="landmarks_tab_title" value="MEUS MARCOS"/> - <string name="teleport_history_tab_title" value="HISTÓRICO DE TELETRANSPORTES"/> + <string name="teleport_history_tab_title" value="TELETRANSPORTES"/> <filter_editor label="Filtrar meus lugares" name="Filter"/> <panel name="button_panel"> <button label="Teletransportar" name="teleport_btn" tool_tip="Teletransportar para a área selecionada"/> 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 7ed64404e6..f30c218c81 100644 --- a/indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml @@ -3,6 +3,9 @@ <panel.string name="aspect_ratio_text"> [NUM]:[DEN] </panel.string> + <panel.string name="middle_mouse"> + Botão do meio do mouse + </panel.string> <slider label="Ângulo de visão" name="camera_fov"/> <slider label="Distância" name="camera_offset_scale"/> <text name="heading2"> @@ -13,17 +16,17 @@ <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"/> - <check_box label="Mover os lábios do avatar quando estiver falando" name="enable_lip_sync"/> + <check_box label="Mover os lábios do avatar ao falar" name="enable_lip_sync"/> <check_box label="Balão de bate-papo" name="bubble_text_chat"/> <slider label="Opacidade" name="bubble_chat_opacity"/> - <color_swatch name="background" tool_tip="Escolha a cor do balão de bate-papo"/> + <color_swatch name="background" tool_tip="Cor do balão de bate-papo"/> <check_box label="Mostrar erros de script" name="show_script_errors"/> <radio_group name="show_location"> <radio_item label="Bate-papo local" name="0"/> <radio_item label="Janelas separadas" name="1"/> </radio_group> - <check_box label="Tecla liga/desliga da minha voz:" name="push_to_talk_toggle_check" tool_tip="Quando em modo de alternância, pressione e solte o botão UMA vez para ligar e desligar o microfone. Quando em modo de alternância, o microfone só transmite sua enquanto o botão estiver pressionado."/> - <line_editor label="Botao apertar e falar" name="modifier_combo"/> - <button label="Definir chave" name="set_voice_hotkey_button"/> + <check_box label="Tecla liga/desliga da minha voz:" name="push_to_talk_toggle_check" tool_tip="Quando em modo de alternância, pressione e solte o botão UMA vez para ligar e desligar o microfone. Quando em modo de alternância, o microfone só transmite sua voz quando o botão estiver pressionado."/> + <line_editor label="Botão apertar e falar" name="modifier_combo"/> + <button label="Definir tecla" name="set_voice_hotkey_button"/> <button label="Botão do meio do mouse" name="set_voice_middlemouse_button" tool_tip="Redefinir como botão do meio do mouse"/> </panel> 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 d9b18724e2..e566fde27c 100644 --- a/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml @@ -1,10 +1,16 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Chat" name="chat"> + <text name="font_size"> + Tamanho da fonte: + </text> <radio_group name="chat_font_size"> <radio_item label="Pequeno" name="radio" value="0"/> - <radio_item label="Média" name="radio2" value="1"/> + <radio_item label="Médio" name="radio2" value="1"/> <radio_item label="Grande" name="radio3" value="2"/> </radio_group> + <text name="font_colors"> + Cor da fonte: + </text> <color_swatch label="Você" name="user"/> <text name="text_box1"> Eu @@ -38,8 +44,14 @@ URLs </text> <check_box initial_value="true" label="Executar animação digitada quando estiver conversando" name="play_typing_animation"/> - <check_box label="Envie MIs por email quando eu estiver desconectado" name="send_im_to_email"/> - <radio_group name="chat_window" tool_tip="Exibir cada bate-papo em uma janela separada, ou exibir todos em uma única janela com uma aba para cada pessoa (requer reinício)"> + <check_box label="Enviar MIs por email se estiver desconectado" name="send_im_to_email"/> + <text name="show_ims_in_label"> + Mostrar MIs em: + </text> + <text name="requires_restart_label"> + (Reinicie para ativar) + </text> + <radio_group name="chat_window" tool_tip="Exibir cada bate-papo em uma janela separada ou exibir todos em uma única janela com uma aba para cada pessoa (requer reinício)"> <radio_item label="Janelas separadas" name="radio" value="0"/> <radio_item label="Guias" name="radio2" value="1"/> </radio_group> diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_general.xml b/indra/newview/skins/default/xui/pt/panel_preferences_general.xml index 7a3e69c988..5c69fa8de1 100644 --- a/indra/newview/skins/default/xui/pt/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/pt/panel_preferences_general.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Geral" name="general_panel"> <text name="language_textbox"> - Linguagem: + Idioma: </text> <combo_box name="language_combobox"> <combo_box.item label="Padrão" name="System Default Language"/> @@ -20,20 +20,20 @@ (Reinicie para mostrar o novo idioma) </text> <text name="maturity_desired_prompt"> - Eu quero acessar conteúdo classificado: + Quero acessar conteúdo: </text> <text name="maturity_desired_textbox"/> <combo_box name="maturity_desired_combobox"> - <combo_box.item label="PG, Mature e Adult" name="Desired_Adult"/> - <combo_box.item label="PG e Mature" name="Desired_Mature"/> - <combo_box.item label="PG" name="Desired_PG"/> + <combo_box.item label="Geral, Moderado e Adulto" name="Desired_Adult"/> + <combo_box.item label="Geral e Moderado" name="Desired_Mature"/> + <combo_box.item label="Geral" name="Desired_PG"/> </combo_box> <text name="start_location_textbox"> - Ponto de partida: + Posição inicial: </text> <combo_box name="start_location_combo"> - <combo_box.item label="Minha Última Localidade" name="MyLastLocation" tool_tip="Por padrão, registrar na minha última localidade."/> - <combo_box.item label="Minha Casa" name="MyHome" tool_tip="Como padrão, registrar na minha casa."/> + <combo_box.item label="Última localização" name="MyLastLocation" tool_tip="Voltar ao lugar onde estava antes."/> + <combo_box.item label="Meu início" name="MyHome" tool_tip="Voltar ao meu início."/> </combo_box> <check_box initial_value="true" label="Mostrar ao entrar" name="show_location_checkbox"/> <text name="name_tags_textbox"> @@ -45,7 +45,7 @@ <radio_item label="Brevemente" name="radio3" value="2"/> </radio_group> <check_box label="Mostrar meu nome" name="show_my_name_checkbox1"/> - <check_box initial_value="true" label="Nomes pequenos" name="small_avatar_names_checkbox"/> + <check_box initial_value="true" label="Nome curto" name="small_avatar_names_checkbox"/> <check_box label="Mostrar cargo" name="show_all_title_checkbox1"/> <text name="effects_color_textbox"> Meus efeitos: diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_setup.xml b/indra/newview/skins/default/xui/pt/panel_preferences_setup.xml index f220bb156f..f03063d05b 100644 --- a/indra/newview/skins/default/xui/pt/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/pt/panel_preferences_setup.xml @@ -28,19 +28,22 @@ <text name="Cache location"> Localização do cache: </text> - <button label="Navegar" label_selected="Navegar" name="set_cache"/> + <button label="Procurar" label_selected="Procurar" name="set_cache"/> <button label="Redefinir" label_selected="Redefinir" name="reset_cache"/> <text name="Web:"> Web: </text> <radio_group name="use_external_browser"> - <radio_item label="Usar navegador incluso" name="internal" tool_tip="Use este navegador para consultar a ajuda, abrir links da web, etc. As janelas abrem dentro do [APP_NAME]." value="0"/> <radio_item label="Usar meu navegador (IE, Firefox, Safari)" name="external" tool_tip="Use o navegador incluso para consultar a ajuda, abrir links da web, etc. Uso em tela inteira não recomendado." value="1"/> + <radio_item label="Usar navegador incluso" name="internal" tool_tip="Use este navegador para consultar a ajuda, abrir links da web, etc. As janelas abrem dentro do [APP_NAME]." value=""/> </radio_group> + <check_box initial_value="verdadeiro" label="Habilitar plugins" name="browser_plugins_enabled"/> + <check_box initial_value="verdadeiro" label="Aceitar cookies" name="cookies_enabled"/> + <check_box initial_value="verdadeiro" label="Habilitar Javascript" name="browser_javascript_enabled"/> <check_box initial_value="false" label="Ativar web proxy" name="web_proxy_enabled"/> <text name="Proxy location"> Localização do proxy: </text> <line_editor name="web_proxy_editor" tool_tip="O nome ou endereço IP do proxy da sua preferência"/> - <spinner label="Número da porta:" name="web_proxy_port"/> + <spinner label="Porta:" name="web_proxy_port"/> </panel> diff --git a/indra/newview/skins/default/xui/pt/panel_region_estate.xml b/indra/newview/skins/default/xui/pt/panel_region_estate.xml index 0f173ab21a..e5d394865c 100644 --- a/indra/newview/skins/default/xui/pt/panel_region_estate.xml +++ b/indra/newview/skins/default/xui/pt/panel_region_estate.xml @@ -39,7 +39,7 @@ </string> <button label="?" name="abuse_email_address_help"/> <button label="Aplicar" name="apply_btn"/> - <button label="Chutar usuário da propriedade..." name="kick_user_from_estate_btn"/> + <button label="Expulsar da propriedade..." name="kick_user_from_estate_btn"/> <button label="Enviar mensagem à Propriedade" name="message_estate_btn"/> <text name="estate_manager_label"> Gerentes da propriedade: diff --git a/indra/newview/skins/default/xui/pt/panel_region_general.xml b/indra/newview/skins/default/xui/pt/panel_region_general.xml index 1a06d91aa8..d1a5eaa11e 100644 --- a/indra/newview/skins/default/xui/pt/panel_region_general.xml +++ b/indra/newview/skins/default/xui/pt/panel_region_general.xml @@ -19,35 +19,25 @@ desconhecido </text> <check_box label="Bloquear Terraform" name="block_terraform_check"/> - <button label="?" name="terraform_help"/> <check_box label="Bloquear Vôo" name="block_fly_check"/> - <button label="?" name="fly_help"/> <check_box label="Permitir Dano" name="allow_damage_check"/> - <button label="?" name="damage_help"/> <check_box label="Restringir Empurrar" name="restrict_pushobject"/> - <button label="?" name="restrict_pushobject_help"/> <check_box label="Permitir Revenda de Terra" name="allow_land_resell_check"/> - <button label="?" name="land_resell_help"/> <check_box label="Permitir Unir/Dividir Terra" name="allow_parcel_changes_check"/> - <button label="?" name="parcel_changes_help"/> <check_box label="Bloquear Mostrar Terra na Busca" name="block_parcel_search_check" tool_tip="Permitir que as pessoas vejam esta região e seus lotes nos resultados de busca"/> - <button label="?" name="parcel_search_help"/> <spinner label="Limit do Agente" name="agent_limit_spin"/> - <button label="?" name="agent_limit_help"/> <spinner label="Objeto Bonus" name="object_bonus_spin"/> - <button label="?" name="object_bonus_help"/> <text label="Maturidade" name="access_text"> Classificação: </text> - <combo_box label="Mature" name="access_combo"> - <combo_box.item label="Adult" name="Adult"/> - <combo_box.item label="Mature" name="Mature"/> - <combo_box.item label="PG" name="PG"/> - </combo_box> - <button label="?" name="access_help"/> + <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="PG" name="PG" value="13"/> + </icons_combo_box> <button label="Aplicar" name="apply_btn"/> - <button label="Teletransportar um usuário para Casa..." name="kick_btn"/> - <button label="Teletransportar Todos os Usuários..." name="kick_all_btn"/> + <button label="Teletransportar um residente para início..." name="kick_btn"/> + <button label="Teletransportar todos para início..." name="kick_all_btn"/> <button label="Enviar Mensagem para a Região..." name="im_btn"/> <button label="Gerenciar Telehub..." name="manage_telehub_btn"/> </panel> diff --git a/indra/newview/skins/default/xui/pt/panel_region_general_layout.xml b/indra/newview/skins/default/xui/pt/panel_region_general_layout.xml index 89fcb05658..d2d5fb649c 100644 --- a/indra/newview/skins/default/xui/pt/panel_region_general_layout.xml +++ b/indra/newview/skins/default/xui/pt/panel_region_general_layout.xml @@ -36,7 +36,7 @@ <combo_box.item label="Geral" name="PG"/> </combo_box> <button label="Aplicar" name="apply_btn"/> - <button label="Teletransportar para início..." name="kick_btn"/> + <button label="Teletransportar um residente para início..." name="kick_btn"/> <button label="Teletransportar todos para início..." name="kick_all_btn"/> <button label="Enviar mensagem para região..." name="im_btn"/> <button label="Gerenciar telehub..." name="manage_telehub_btn"/> diff --git a/indra/newview/skins/default/xui/pt/panel_region_texture.xml b/indra/newview/skins/default/xui/pt/panel_region_texture.xml index 7f37919af2..35928ccc67 100644 --- a/indra/newview/skins/default/xui/pt/panel_region_texture.xml +++ b/indra/newview/skins/default/xui/pt/panel_region_texture.xml @@ -25,16 +25,16 @@ Escalas de Elevação de Terreno </text> <text name="height_text_lbl6"> - Sudeste + Noroeste </text> <text name="height_text_lbl7"> - Noroeste + Nordeste </text> <text name="height_text_lbl8"> Sudoeste </text> <text name="height_text_lbl9"> - Noroeste + Sudeste </text> <spinner label="Baixo" name="height_start_spin_0"/> <spinner label="Baixo" name="height_start_spin_1"/> diff --git a/indra/newview/skins/default/xui/pt/panel_status_bar.xml b/indra/newview/skins/default/xui/pt/panel_status_bar.xml index a320d9d56d..ae2879f4a9 100644 --- a/indra/newview/skins/default/xui/pt/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/pt/panel_status_bar.xml @@ -22,7 +22,7 @@ L$ [AMT] </panel.string> <button label="" label_selected="" name="buycurrency" tool_tip="Meu saldo"/> - <button label="Comprar L$" name="buyL" tool_tip="Comprar mais L$"/> + <button label="Comprar" name="buyL" tool_tip="Comprar mais L$"/> <text name="TimeText" tool_tip="Hora atual (Pacífico)"> 24:00 AM PST </text> diff --git a/indra/newview/skins/default/xui/pt/sidepanel_task_info.xml b/indra/newview/skins/default/xui/pt/sidepanel_task_info.xml index 7981cd106f..9193730018 100644 --- a/indra/newview/skins/default/xui/pt/sidepanel_task_info.xml +++ b/indra/newview/skins/default/xui/pt/sidepanel_task_info.xml @@ -38,7 +38,7 @@ </panel.string> <text name="title" value="Perfil do objeto"/> <text name="where" value="(inworld)"/> - <panel label=""> + <panel label="" name="properties_panel"> <text name="Name:"> Nome: </text> @@ -54,12 +54,15 @@ <text name="Owner:"> Proprietário: </text> + <text name="Owner Name"> + Erica Linden + </text> <text name="Group_label"> Grupo: </text> <button name="button set group" tool_tip="Selecione o grupo que terá acesso à autorização do objeto"/> <name_box initial_value="Carregando..." name="Group Name Proxy"/> - <button label="Doar" label_selected="Doar" name="button deed" tool_tip="Ao doar este item, o próximo dono terá permissões de próximo dono. Objetos de grupos podem ser doados por um oficial do grupo."/> + <button label="Doar" label_selected="Doar" name="button deed" tool_tip="Ao doar este item, o próximo dono terá permissões de próximo dono. Objetos de grupos podem ser doados por um oficial do grupo."/> <text name="label click action"> Clique para: </text> @@ -121,5 +124,6 @@ <button label="Abrir" name="open_btn"/> <button label="Pagar" name="pay_btn"/> <button label="Comprar" name="buy_btn"/> + <button label="Detalhes" name="details_btn"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/pt/strings.xml b/indra/newview/skins/default/xui/pt/strings.xml index 195345abc0..773aea5848 100644 --- a/indra/newview/skins/default/xui/pt/strings.xml +++ b/indra/newview/skins/default/xui/pt/strings.xml @@ -8,16 +8,31 @@ SECOND LIFE </string> <string name="SUPPORT_SITE"> - Portal de Apoio do Second Life + Portal de Supporte Second Life </string> <string name="StartupDetectingHardware"> Detectando hardware... </string> <string name="StartupLoading"> - Carregando + Carregando [APP_NAME]... + </string> + <string name="StartupClearingCache"> + Limpando o cache... + </string> + <string name="StartupInitializingTextureCache"> + Iniciando cache de texturas... + </string> + <string name="StartupInitializingVFS"> + Iniciando VFS... + </string> + <string name="ProgressRestoring"> + Restaurando... + </string> + <string name="ProgressChangingResolution"> + Alterando a resolução... </string> <string name="LoginInProgress"> - Fazendo Login. [APP_NAME] pode parecer congelado. Por favor, aguarde. + Fazendo login. [APP_NAME] pode parecer congelado. Por favor, aguarde. </string> <string name="LoginInProgressNoFrozen"> Logando... @@ -29,7 +44,7 @@ Executando manutenção da conta... </string> <string name="LoginAttempt"> - Falha na tentativa anterior de login. Fazendo Login, tentativa [NUMBER] + Falha na tentativa anterior de login. Login, tentativa [NUMBER] </string> <string name="LoginPrecaching"> Carregando mundo... @@ -47,10 +62,10 @@ Verificando arquivos cache (pode levar de 60-90 segundos)... </string> <string name="LoginProcessingResponse"> - Processando Resposta... + Processando resposta... </string> <string name="LoginInitializingWorld"> - Inicializando Mundo... + Inicializando mundo... </string> <string name="LoginDecodingImages"> Decodificando imagens... @@ -59,13 +74,13 @@ Inicializando o QuickTime... </string> <string name="LoginQuicktimeNotFound"> - O QuickTime não foi encontrado - incapaz de inicializar. + O QuickTime não foi encontrado - falha ao iniciar. </string> <string name="LoginQuicktimeOK"> O QuickTime foi inicializado com sucesso. </string> <string name="LoginWaitingForRegionHandshake"> - Aguardando o handshake com a região... + Aguardando handshake com a região... </string> <string name="LoginConnectingToRegion"> Conectando à região... @@ -74,7 +89,10 @@ Baixando roupas... </string> <string name="LoginFailedNoNetwork"> - Erro de Rede: Não foi possível estabelecer a conexão, verifique sua conexão de rede. + Erro de rede: Não foi possível estabelecer a conexão, verifique sua conexão de rede. + </string> + <string name="LoginFailed"> + Falha do login. </string> <string name="Quit"> Sair @@ -85,6 +103,24 @@ <string name="AgentLostConnection"> Esta região pode estar passando por problemas. Por favor, verifique sua conexão com a internet. </string> + <string name="SavingSettings"> + Salvando configurações... + </string> + <string name="LoggingOut"> + Saindo... + </string> + <string name="ShuttingDown"> + Fechando... + </string> + <string name="YouHaveBeenDisconnected"> + Você foi desconectado da região onde estava. + </string> + <string name="SentToInvalidRegion"> + Você foi enviado para uma região inválida. + </string> + <string name="TestingDisconnect"> + Teste de desconexão + </string> <string name="TooltipPerson"> Pessoa </string> @@ -107,22 +143,22 @@ Construído por Grupo </string> <string name="TooltipFlagNoBuild"> - Não é Permitido Construir + Não é permitido construir </string> <string name="TooltipFlagNoEdit"> Construído por Grupo </string> <string name="TooltipFlagNotSafe"> - Não é Seguro + Não é seguro </string> <string name="TooltipFlagNoFly"> - Não é Permitido Voar + Não é permitido voar </string> <string name="TooltipFlagGroupScripts"> Scripts de Grupo </string> <string name="TooltipFlagNoScripts"> - Não são Permitidos Scripts + Não são permitidos scripts </string> <string name="TooltipLand"> Terreno: @@ -131,14 +167,32 @@ Apenas um item único pode ser arrastado para este local </string> <string name="TooltipHttpUrl"> - Clique para ver essa página web + Clique para ver a página web </string> <string name="TooltipSLURL"> - Clique para ver a informação desta localização + Clique para ver os dados desta localização </string> <string name="TooltipAgentUrl"> Clique para ver o perfil deste residente </string> + <string name="TooltipAgentMute"> + Clique para silenciar este residente + </string> + <string name="TooltipAgentUnmute"> + Clique para desfazer silenciar neste residente + </string> + <string name="TooltipAgentIM"> + Clique para enviar uma MI para este residente + </string> + <string name="TooltipAgentPay"> + Clique para pagar este residente + </string> + <string name="TooltipAgentOfferTeleport"> + Clique para enviar um pedido de amizade a este residente + </string> + <string name="TooltipAgentRequestFriend"> + Clique para enviar um pedido de amizade a este residente + </string> <string name="TooltipGroupUrl"> Clique para ver a descrição deste Grupo </string> @@ -146,7 +200,7 @@ Clique para ver a descrição deste evento </string> <string name="TooltipClassifiedUrl"> - Clique para ver este classificado + Clique para ver este anúncio </string> <string name="TooltipParcelUrl"> Clique para ver a descrição desta parcela @@ -161,15 +215,34 @@ Clique para ver esta localização no mapa </string> <string name="TooltipSLAPP"> - Clique para ativar no secondlife:// commando + Clique para ativar no secondlife:// comando </string> <string name="CurrentURL" value="URL atual: [CurrentURL]"/> + <string name="TooltipPrice" value="L$[PRICE]-"/> <string name="SLurlLabelTeleport"> Teletransportar para </string> <string name="SLurlLabelShowOnMap"> Mostrar no mapa para </string> + <string name="SLappAgentMute"> + Silenciar + </string> + <string name="SLappAgentUnmute"> + Desfazer silenciar + </string> + <string name="SLappAgentIM"> + MI + </string> + <string name="SLappAgentPay"> + Pagar + </string> + <string name="SLappAgentOfferTeleport"> + Oferecer teletransporte para + </string> + <string name="SLappAgentRequestFriend"> + Pedido de amizade + </string> <string name="BUTTON_CLOSE_DARWIN"> Fechar (⌘W) </string> @@ -201,7 +274,7 @@ Buscando... </string> <string name="ReleaseNotes"> - Notas de Distribuição + Notas de versão </string> <string name="LoadingData"> Carregando... @@ -270,7 +343,7 @@ objeto </string> <string name="note card"> - notecard + anotação </string> <string name="folder"> pasta @@ -320,6 +393,9 @@ <string name="symbolic link"> link </string> + <string name="symbolic folder link"> + link da pasta + </string> <string name="AvatarAway"> Distante </string> @@ -354,7 +430,7 @@ Entediado </string> <string name="anim_bow"> - Saudar curvando + Reverência </string> <string name="anim_clap"> Aplaudir @@ -414,10 +490,10 @@ Impaciente </string> <string name="anim_jumpforjoy"> - Pular de Alegria + Pular de alegria </string> <string name="anim_kissmybutt"> - Beije meu Bumbum + Beije meu bumbum </string> <string name="anim_express_kiss"> Beijar @@ -438,7 +514,7 @@ Nya-nya-nya </string> <string name="anim_punch_onetwo"> - Soco Um-Dois + Soco um-dois </string> <string name="anim_express_open_mouth"> Abrir a boca @@ -453,10 +529,10 @@ Apontar para si </string> <string name="anim_punch_l"> - Socar Esquerda + Soco esquerdo </string> <string name="anim_punch_r"> - Socar Direita + Soco direito </string> <string name="anim_rps_countdown"> RPS contar @@ -495,16 +571,16 @@ Fumar à toa </string> <string name="anim_smoke_inhale"> - Inalar Fumaça + Inalar fumaça </string> <string name="anim_smoke_throw_down"> - Expelir Fumaça + Expelir fumaça </string> <string name="anim_express_surprise"> Surpresa </string> <string name="anim_sword_strike_r"> - Golpe de Espada + Golpe de espada </string> <string name="anim_angry_tantrum"> Enraivecer @@ -561,7 +637,7 @@ grita: </string> <string name="ringing"> - Conectando à conversa de Voz no mundo + Conectando à conversa de voz no mundo </string> <string name="connected"> Conectado @@ -615,13 +691,13 @@ Controle sua camera </string> <string name="SIM_ACCESS_PG"> - PG + Público geral </string> <string name="SIM_ACCESS_MATURE"> - Mature + Moderado </string> <string name="SIM_ACCESS_ADULT"> - Adult + Adulto </string> <string name="SIM_ACCESS_DOWN"> Desconectado @@ -633,7 +709,7 @@ (desconhecido) </string> <string name="all_files"> - Todos os Arquivos + Todos os arquivos </string> <string name="sound_files"> Sons @@ -657,10 +733,10 @@ Imagens Bitmap </string> <string name="avi_movie_file"> - Arquivo de filme AVI + Arquivo de vídeo AVI </string> <string name="xaf_animation_file"> - Arquivo de Animação XAF + Arquivo de animação XAF </string> <string name="xml_file"> Arquivo XML @@ -669,25 +745,25 @@ Arquivo RAW </string> <string name="compressed_image_files"> - Imagens Compactadas + Imagens compactadas </string> <string name="load_files"> - Carregar Arquivos + Carregar arquivos </string> <string name="choose_the_directory"> - Escolher Diretório + Selecionar pasta </string> <string name="AvatarSetNotAway"> - deixar como não away + deixar como ausente </string> <string name="AvatarSetAway"> - deixar como Away + deixar como ausente </string> <string name="AvatarSetNotBusy"> - deixar como não Ocupado + deixar como não ocupado </string> <string name="AvatarSetBusy"> - Deixar como Busy + Deixar como ocupado </string> <string name="shape"> Silhueta @@ -705,7 +781,7 @@ Camisa </string> <string name="pants"> - calças + Calças </string> <string name="shoes"> Sapatos @@ -720,22 +796,25 @@ Luvas </string> <string name="undershirt"> - camiseta + Camiseta </string> <string name="underpants"> - roupa debaixo + Roupa de baixo </string> <string name="skirt"> - saia + Saia </string> <string name="alpha"> Alpha </string> <string name="tattoo"> - Tattoo + Tatuagem </string> <string name="invalid"> - inválido + Inválido + </string> + <string name="NewWearable"> + Novo [WEARABLE_ITEM] </string> <string name="next"> Próximo @@ -768,7 +847,7 @@ Oferta de teletransporte </string> <string name="StartUpNotifications"> - [%d] Novas notificações chegaram enquanto você estava fora... + Novas notificações chegaram enquanto você estava fora... </string> <string name="OverflowInfoChannelString"> Você tem mais [%d] notificações @@ -825,32 +904,33 @@ Nenhum conteúdo </string> <string name="WornOnAttachmentPoint" value="(vestido em [ATTACHMENT_POINT])"/> - <string name="Chat" value="Bate papo :"/> - <string name="Sound" value="Som :"/> - <string name="Wait" value="--- Aguarde :"/> - <string name="AnimFlagStop" value="Parar animação :"/> - <string name="AnimFlagStart" value="Iniciar animação :"/> - <string name="Wave" value="Aceno"/> + <string name="ActiveGesture" value="[GESLABEL] (ativado)"/> + <string name="Chat" value="Bate papo"/> + <string name="Sound" value="Som"/> + <string name="Wait" value="--- Aguarde"/> + <string name="AnimFlagStop" value="Parar animação"/> + <string name="AnimFlagStart" value="Iniciar animação"/> + <string name="Wave" value="Acenar"/> <string name="HelloAvatar" value="Olá, avatar!"/> - <string name="ViewAllGestures" value="Ver tudo >>"/> + <string name="ViewAllGestures" value="Ver todos>>"/> <string name="Animations" value="Animações,"/> <string name="Calling Cards" value="Cartões de visitas,"/> <string name="Clothing" value="Vestuário,"/> <string name="Gestures" value="Gestos,"/> - <string name="Landmarks" value="Landmarks,"/> - <string name="Notecards" value="Notecards,"/> + <string name="Landmarks" value="Marcos"/> + <string name="Notecards" value="Anotações"/> <string name="Objects" value="Objetos,"/> <string name="Scripts" value="Scripts,"/> - <string name="Sounds" value="Sons,"/> - <string name="Textures" value="Texturas,"/> - <string name="Snapshots" value="Fotografias,"/> + <string name="Sounds" value="Sons"/> + <string name="Textures" value="Texturas"/> + <string name="Snapshots" value="Fotografias"/> <string name="No Filters" value="Não"/> - <string name="Since Logoff" value="- desde desligado"/> + <string name="Since Logoff" value="- Desde desligado"/> <string name="InvFolder My Inventory"> - Meu Inventorio + Meu inventário </string> <string name="InvFolder My Favorites"> - Meus Favoritos + Meus favoritos </string> <string name="InvFolder Library"> Biblioteca @@ -862,10 +942,10 @@ Sons </string> <string name="InvFolder Calling Cards"> - Cartões de Visitas + Cartões de visitas </string> <string name="InvFolder Landmarks"> - Landmarks + Marcos </string> <string name="InvFolder Scripts"> Scripts @@ -877,31 +957,31 @@ Objetos </string> <string name="InvFolder Notecards"> - Notecards + Anotações </string> <string name="InvFolder New Folder"> - Nova Pasta + Nova pasta </string> <string name="InvFolder Inventory"> Inventário </string> <string name="InvFolder Uncompressed Images"> - Imagens Descompactadas + Imagens descompactadas </string> <string name="InvFolder Body Parts"> - Partes do Corpo + Corpo </string> <string name="InvFolder Trash"> Lixo </string> <string name="InvFolder Photo Album"> - Álbum de Fotografias + Álbum de fotografias </string> <string name="InvFolder Lost And Found"> Achados e Perdidos </string> <string name="InvFolder Uncompressed Sounds"> - Sons Descompactados + Sons descompactados </string> <string name="InvFolder Animations"> Animações @@ -913,10 +993,13 @@ Favoritos </string> <string name="InvFolder Current Outfit"> - Vestimanta Atual + Look atual </string> <string name="InvFolder My Outfits"> - Minhas Vestimentas + Meus looks + </string> + <string name="InvFolder Accessories"> + Acessórios </string> <string name="InvFolder Friends"> Amigos @@ -988,7 +1071,7 @@ Espinha </string> <string name="Pelvis"> - Pelvis + Pélvis </string> <string name="Mouth"> Boca @@ -1045,10 +1128,10 @@ Estômago </string> <string name="Left Pec"> - Pec esquerdo + Peitoral E </string> <string name="Right Pec"> - Pec direito + Peitoral D </string> <string name="YearsMonthsOld"> [AGEYEARS] [AGEMONTHS] de idade @@ -1126,19 +1209,19 @@ Empregado da Linden Lab </string> <string name="PaymentInfoUsed"> - Info de Pagamento usada + Dados de pagamento usados </string> <string name="PaymentInfoOnFile"> - Info de Pagamento no Arquivo + Dados de pagamento fornecidos </string> <string name="NoPaymentInfoOnFile"> - Nenhuma Info de Pagamento no Arquivo + Nenhum dado de pagamento </string> <string name="AgeVerified"> - Idade-verificada + Idade comprovada </string> <string name="NotAgeVerified"> - Idade não-verificada + Idade não comprovada </string> <string name="Center 2"> Centro 2 @@ -1165,16 +1248,16 @@ Inferior direito </string> <string name="CompileQueueDownloadedCompiling"> - Downloaded, agora compilando + Baixado, agora compilando </string> <string name="CompileQueueScriptNotFound"> Script não encontrado no servidor. </string> <string name="CompileQueueProblemDownloading"> - Problema no download + Problema no download </string> <string name="CompileQueueInsufficientPermDownload"> - Permissões insuficientes para fazer o download do script. + Permissões insuficientes para fazer o download do script. </string> <string name="CompileQueueInsufficientPermFor"> Permissões insuficientes para @@ -1183,7 +1266,7 @@ Falha desconhecida para download </string> <string name="CompileQueueTitle"> - Progresso do Recompilamento + Progresso do recompilamento </string> <string name="CompileQueueStart"> recompilar @@ -1192,7 +1275,7 @@ Reset Progresso </string> <string name="ResetQueueStart"> - reset + Zerar </string> <string name="RunQueueTitle"> Definir funcionamento do progresso @@ -1216,7 +1299,7 @@ Salvo. </string> <string name="ObjectOutOfRange"> - Script (objecto fora de alcance) + Script (objeto fora de alcance) </string> <string name="GodToolsObjectOwnedBy"> Objeto [OBJECT] de propriedade de [OWNER] @@ -1244,10 +1327,10 @@ Total </string> <string name="NoGroupDataFound"> - Não ha dados de grupo para o grupo + Não há dados de grupo </string> <string name="IMParentEstate"> - propriedade dos pais + Propriedade-pai </string> <string name="IMMainland"> continente @@ -1435,6 +1518,12 @@ <string name="PanelContentsNewScript"> Novo Script </string> + <string name="PanelContentsTooltip"> + Conteúdo do objeto + </string> + <string name="BusyModeResponseDefault"> + O residente para o qual escreveu está no modo 'ocupado', ou seja, ele prefere não receber nada no momento. Sua mensagem será exibida como uma MI mais tarde. + </string> <string name="MuteByName"> (por nome) </string> @@ -1448,10 +1537,10 @@ (grupo) </string> <string name="RegionNoCovenant"> - Não ha Contrato fornecido para essa Região. + Não foi definido um contrato para essa região. </string> <string name="RegionNoCovenantOtherOwner"> - Não ha Contrato fornecido para essa Região. O terreno nesta região está sendo vendido pelo Proprietário, não pela Linden Lab. Favor contatar o Proprietário da região para detalhes de venda. + Não foi definido um contrato para essa Região. O terreno nesta região está sendo vendido pelo Proprietário, não pela Linden Lab. Favor contatar o Proprietário da região para detalhes de venda. </string> <string name="covenant_last_modified"> Última modificação: @@ -1471,7 +1560,7 @@ (vai atualizar depois de publicado) </string> <string name="NoPicksClassifiedsText"> - Você não criou nenhum Destaque ou Anúncio. Clique no botão "+" para criar um Destaque ou Anúncio. + Você não criou nenhum Destaque ou Anúncio. Clique no botão "+" para criar um Destaque ou Anúncio. </string> <string name="NoAvatarPicksClassifiedsText"> O usuário não tem nenhum destaque ou anúncio @@ -1492,19 +1581,19 @@ possuído pelo grupo </string> <string name="InvOfferOwnedByUnknownGroup"> - possuído por um grupo desconhecido + de um grupo desconhecido </string> <string name="InvOfferOwnedBy"> - possuído por + de </string> <string name="InvOfferOwnedByUnknownUser"> - possuído por usuário desconhecido + de usuário desconhecido </string> <string name="InvOfferGaveYou"> deu a você </string> <string name="InvOfferYouDecline"> - Você declina + Você recusa </string> <string name="InvOfferFrom"> de @@ -1531,7 +1620,7 @@ pagou prêmio para o evento </string> <string name="GroupMoneyBalance"> - Balanço + Saldo </string> <string name="GroupMoneyCredits"> Créditos @@ -1549,7 +1638,10 @@ Cancelar </string> <string name="UploadingCosts"> - Uploading [%s] custos + Carregar [NAME] custa L$ [AMOUNT] + </string> + <string name="BuyingCosts"> + Isso custa L$ [AMOUNT] </string> <string name="UnknownFileExtension"> Extensão de arquivo desconhecida [.%s] @@ -1559,10 +1651,10 @@ Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh Bloquear </string> <string name="AddLandmarkNavBarMenu"> - Adicionar Landmark... + Adicionar marco... </string> <string name="EditLandmarkNavBarMenu"> - Editar Landmark... + Editar marco... </string> <string name="accel-mac-control"> ⌃ @@ -1670,7 +1762,7 @@ Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh Locação Linden </string> <string name="Adult"> - Adult + Adulto </string> <string name="Arts&Culture"> Artes e Cultura @@ -1682,13 +1774,13 @@ Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh Educacional </string> <string name="Gaming"> - Jogos + Games </string> <string name="Hangout"> Moradia </string> <string name="Newcomer Friendly"> - Amigável a Novos Usuários + Para recém-chegados </string> <string name="Parks&Nature"> Parques & Natureza @@ -1730,10 +1822,10 @@ Se a mensagem persistir, reinicie o computador e tente novamente. Se o error persistir, pode ser necessário desinstalar completamente [APP_NAME] e reinstalá-lo. </string> <string name="MBFatalError"> - Erro Fatal + Erro fatal </string> <string name="MBRequiresAltiVec"> - [APP_NAME] exige um processador com AltiVec (G4 ou superior). + [APP_NAME] exige processador com AltiVec (G4 ou superior). </string> <string name="MBAlreadyRunning"> [APP_NAME] já está em execução. @@ -1741,7 +1833,7 @@ Verifique a sua barra de tarefas para obter uma cópia do programa minimizado. Se a mensagem persistir, reinicie o computador. </string> <string name="MBFrozenCrashed"> - [APP_NAME] parece ter congelado ou falhado na execução anterior. Você gostaria de enviar um relatório de falha? + [APP_NAME] parece ter congelado ou falhado na execução anterior. Enviar relatório de falha? </string> <string name="MBAlert"> Alerta @@ -1795,7 +1887,7 @@ Também não se esqueça de definir seu monitor para True Color (32-bit), em pai Se você continuar a receber esta mensagem, contate o [SUPPORT_SITE]. </string> <string name="MBPixelFmtSetErr"> - ão é possível definir o formato de pixel + Não é possível definir o formato de pixel </string> <string name="MBGLContextErr"> Não é possível criar o contexto de renderização GL @@ -1809,7 +1901,7 @@ Se você continuar a receber esta mensagem, contate o [SUPPORT_SITE]. If you continue to receive this message, contact the [SUPPORT_SITE]. </string> <string name="5 O'Clock Shadow"> - Sombra descuidada + Barba por fazer </string> <string name="All White"> Todo branco @@ -1818,10 +1910,10 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Olhos de Anime </string> <string name="Arced"> - arqueado + Arqueados </string> <string name="Arm Length"> - Comprimento do Braço + Comprimento do braço </string> <string name="Attached"> Anexado @@ -1839,7 +1931,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Franja </string> <string name="Beady Eyes"> - Olhos malévolos + Olhos pequenos </string> <string name="Belly Size"> Tamanho da barriga @@ -1848,7 +1940,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Grande </string> <string name="Big Butt"> - Traseiro Grande + Bunda grande </string> <string name="Big Hair Back"> Cabelo volumoso: Trás @@ -1857,7 +1949,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Cabelo volumoso: Frente </string> <string name="Big Hair Top"> - cabelo volumoso: Topo + Cabelo volumoso: Topo </string> <string name="Big Head"> cabeça grande @@ -1866,7 +1958,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Peitorais grandes </string> <string name="Big Spikes"> - espinhos grandes + Pontas grandes </string> <string name="Black"> Negro @@ -1875,40 +1967,40 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Loiro </string> <string name="Blonde Hair"> - Cabelo Loiro + Cabelo loiro </string> <string name="Blush"> Blush </string> <string name="Blush Color"> - cor do Blush + Cor do blush </string> <string name="Blush Opacity"> - Opacidade do Blush + Opacidade do blush </string> <string name="Body Definition"> - definição do Corpo + Definição do corpo </string> <string name="Body Fat"> - Gordura corporal + Gordura </string> <string name="Body Freckles"> - Sardas do corpo + Sardas </string> <string name="Body Thick"> Corpo cheio </string> <string name="Body Thickness"> - Espessura do corpo + Ossatura </string> <string name="Body Thin"> Corpo magro </string> <string name="Bow Legged"> - pernas arqueadas + Pernas arqueadas </string> <string name="Breast Buoyancy"> - Flexibilidade dos seios + Caimento dos seios </string> <string name="Breast Cleavage"> Separação dos seios @@ -1923,7 +2015,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Largo </string> <string name="Brow Size"> - tamanho da sobrancelha + Tamanho da sobrancelha </string> <string name="Bug Eyes"> Olhos saltados @@ -1947,25 +2039,25 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Tamanho do traseiro </string> <string name="bustle skirt"> - Movimentação de saia + Saia armada </string> <string name="no bustle"> - Sem movimento + Saia reta </string> <string name="more bustle"> - Mais movimento + Mais </string> <string name="Chaplin"> Chaplin </string> <string name="Cheek Bones"> - Maças do rosto + Maçãs do rosto </string> <string name="Chest Size"> Tamanho do peito </string> <string name="Chin Angle"> - ângulo do queixo + Ângulo do queixo </string> <string name="Chin Cleft"> Fissura do queixo @@ -2013,7 +2105,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Direita fechada </string> <string name="Coin Purse"> - Pubis + Pouco volume </string> <string name="Collar Back"> Colarinho posterior @@ -2034,7 +2126,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Nariz torto </string> <string name="Cuff Flare"> - bainha larga + Bainha larga </string> <string name="Dark"> Escuro @@ -2043,13 +2135,13 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Verde escuro </string> <string name="Darker"> - mais escuro + Mais escuro </string> <string name="Deep"> Profundidade </string> <string name="Default Heels"> - Salto Padrão + Salto padrão </string> <string name="Dense"> Densidade @@ -2061,10 +2153,10 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Curvado para baixo </string> <string name="Duffle Bag"> - pubis + Mais volume </string> <string name="Ear Angle"> - ângulo da orelha + Ângulo da orelha </string> <string name="Ear Size"> Tamanho da orelha @@ -2091,7 +2183,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Abertura dos olhos </string> <string name="Eye Pop"> - Olho Saltado + Olho saltado </string> <string name="Eye Size"> Tamanho dos olhos @@ -2103,7 +2195,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Arco da sobrancelha </string> <string name="Eyebrow Density"> - densidade da sobrancelha + Densidade da sobrancelha </string> <string name="Eyebrow Height"> Altura da sobrancelha @@ -2166,7 +2258,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Tamanho dos pés </string> <string name="Forehead Angle"> - ângulo da testa + Ângulo da testa </string> <string name="Forehead Heavy"> Testa pronunciada @@ -2199,7 +2291,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Dedos da luva </string> <string name="Glove Length"> - comprimento das luvas + Comprimento das luvas </string> <string name="Hair"> Cabelo @@ -2238,7 +2330,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Tamanho das mãos </string> <string name="Handlebars"> - bigode + Bigode </string> <string name="Head Length"> Comprimento da cabeça @@ -2262,7 +2354,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Altura </string> <string name="High"> - alto + Alto </string> <string name="High Heels"> Salto alto @@ -2271,7 +2363,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Maxilar alto </string> <string name="High Platforms"> - Plataformas alta + Plataformas altas </string> <string name="High and Tight"> Alto e justo @@ -2307,7 +2399,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Comprimento da blusa </string> <string name="Jacket Wrinkles"> - Dobras da Blusa + Dobras da jaqueta </string> <string name="Jaw Angle"> Ângulo da mandíbula @@ -2349,7 +2441,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Menos </string> <string name="Less Body Fat"> - Menos gordura corporal + Menos gordura </string> <string name="Less Curtains"> Menos barba @@ -2364,7 +2456,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Menos gravidade </string> <string name="Less Love"> - Menos cintura + Menos excesso </string> <string name="Less Muscles"> Menos músculos @@ -2397,7 +2489,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Fenda dos lábios </string> <string name="Lip Cleft Depth"> - Prfundidade da fenda dos lábios + Profundidade da fenda dos lábios </string> <string name="Lip Fullness"> Volume dos lábios @@ -2454,37 +2546,37 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Pantalonas </string> <string name="Loose Shirt"> - Saia folgada + Camisa folgada </string> <string name="Loose Sleeves"> - Manga longa + Mangas folgadas </string> <string name="Love Handles"> Pneu </string> <string name="Low"> - baixo + Baixo </string> <string name="Low Heels"> Salto baixo </string> <string name="Low Jaw"> - maxilar baixo + Maxilar baixo </string> <string name="Low Platforms"> Plataformas baixas </string> <string name="Low and Loose"> - baixo e solto + Baixo e solto </string> <string name="Lower"> - diminuir + Mais baixo </string> <string name="Lower Bridge"> - nariz baixo + Mais baixa </string> <string name="Lower Cheeks"> - bochechas abaixadas + Bochechas abaixadas </string> <string name="Male"> Masculino @@ -2499,7 +2591,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Mais blush </string> <string name="More Body Fat"> - Mais gordura corporal + Mais gordura </string> <string name="More Curtains"> Mais barba @@ -2553,7 +2645,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Mais vertical </string> <string name="More Volume"> - Mais Volume + Mais volume </string> <string name="More soul"> Mais alma @@ -2604,16 +2696,16 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Espessura do pescoço </string> <string name="No Blush"> - Sem Blush + Sem blush </string> <string name="No Eyeliner"> Sem delineador </string> <string name="No Eyeshadow"> - Sem Sombra dos olhos + Sem sombra </string> <string name="No Lipgloss"> - Sem brilho labial + Sem brilho </string> <string name="No Lipstick"> Sem batom @@ -2628,7 +2720,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Sem vermelho </string> <string name="No Spikes"> - Sem espinhos + Sem pontas </string> <string name="No White"> Sem branco @@ -2709,10 +2801,10 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Sombra externa </string> <string name="Overbite"> - Overbite + Má oclusão </string> <string name="Package"> - Pubis + Púbis </string> <string name="Painted Nails"> Unhas pintadas @@ -2724,7 +2816,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Cavalo da calça </string> <string name="Pants Fit"> - Pants Fit + Caimento das calças </string> <string name="Pants Length"> Comprimento das calças @@ -2739,10 +2831,10 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Parte </string> <string name="Part Bangs"> - Parts da franja + Divisão da franja </string> <string name="Pectorals"> - Peitoral + Peitorais </string> <string name="Pigment"> Pigmento @@ -2787,7 +2879,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Pálpebras inchadas </string> <string name="Rainbow Color"> - Cor do arco iris + Cor do arco íris </string> <string name="Red Hair"> Cabelo ruivo @@ -2814,7 +2906,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Cabelo desalinhado </string> <string name="Saddle Bags"> - Saddle Bags + Culote </string> <string name="Scrawny Leg"> Pernas magricelas @@ -2823,7 +2915,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Separar </string> <string name="Shallow"> - raso + Raso </string> <string name="Shear Back"> Trás rente @@ -2847,22 +2939,22 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Rente frente </string> <string name="Shift Left"> - Deslocar à esquerda + Deslocar p/ esquerda </string> <string name="Shift Mouth"> Deslocar boca </string> <string name="Shift Right"> - Deslocar direita + Deslocar p/ direita </string> <string name="Shirt Bottom"> - Deslocar inferior + Barra da camisa </string> <string name="Shirt Fit"> - Deslocar ajuste + Ajuste da camisa </string> <string name="Shirt Wrinkles"> - Deslocar dobras + +/- amassada </string> <string name="Shoe Height"> Altura do sapato @@ -3126,7 +3218,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. Ver mais informações sobre a localização atual </string> <string name="LocationCtrlComboBtnTooltip"> - Meu histórico de localizações + Histórico de localizações </string> <string name="UpdaterWindowTitle"> [APP_NAME] Atualização @@ -3266,4 +3358,120 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. <string name="unread_chat_multiple"> [SOURCES] disseram alguma coisa </string> + <string name="paid_you_ldollars"> + [NAME] lhe pagou L$ [AMOUNT] + </string> + <string name="you_paid_ldollars"> + You pagou L$[AMOUNT] por [REASON] a [NAME]. + </string> + <string name="you_paid_ldollars_no_reason"> + You pagou L$[AMOUNT] a [NAME]. + </string> + <string name="you_paid_ldollars_no_name"> + You pagou L$[AMOUNT] por [REASON]. + </string> + <string name="for a parcel of land"> + por uma parcela + </string> + <string name="for a land access pass"> + por um passe de acesso + </string> + <string name="for deeding land"> + para doar um terreno + </string> + <string name="to create a group"> + para criar um grupo + </string> + <string name="to join a group"> + para entrar em um grupo + </string> + <string name="to upload"> + para carregar + </string> + <string name="giving"> + Dando L$ [AMOUNT] + </string> + <string name="uploading_costs"> + O upload custa L$ [AMOUNT] + </string> + <string name="this_costs"> + Isso custa L$ [AMOUNT] + </string> + <string name="buying_selected_land"> + Comprando terreno selecionado L$ [AMOUNT] + </string> + <string name="this_object_costs"> + Esse objeto custa L$ [AMOUNT] + </string> + <string name="group_role_everyone"> + Todos + </string> + <string name="group_role_officers"> + Oficiais + </string> + <string name="group_role_owners"> + Proprietários + </string> + <string name="uploading_abuse_report"> + Carregando... + +Denunciar abuso + </string> + <string name="New Shape"> + Nova forma + </string> + <string name="New Skin"> + Nova pele + </string> + <string name="New Hair"> + Novo cabelo + </string> + <string name="New Eyes"> + Novos olhos + </string> + <string name="New Shirt"> + Nova camisa + </string> + <string name="New Pants"> + Novas calças + </string> + <string name="New Shoes"> + Novos sapatos + </string> + <string name="New Socks"> + Novas meias + </string> + <string name="New Jacket"> + Nova blusa + </string> + <string name="New Gloves"> + Novas luvas + </string> + <string name="New Undershirt"> + Nova camiseta + </string> + <string name="New Underpants"> + Novas roupa de baixo + </string> + <string name="New Skirt"> + Nova saia + </string> + <string name="New Alpha"> + Novo alpha + </string> + <string name="New Tattoo"> + Nova tatuagem + </string> + <string name="Invalid Wearable"> + Item inválido + </string> + <string name="New Script"> + Novo script + </string> + <string name="New Folder"> + Nova pasta + </string> + <string name="Contents"> + Conteúdo + </string> </strings> diff --git a/indra/newview/skins/default/xui/pt/teleport_strings.xml b/indra/newview/skins/default/xui/pt/teleport_strings.xml index 1a0461082b..92ffee0233 100644 --- a/indra/newview/skins/default/xui/pt/teleport_strings.xml +++ b/indra/newview/skins/default/xui/pt/teleport_strings.xml @@ -59,6 +59,9 @@ Se você continuar a receber esta mensagem, por favor consulte o [SUPPORT_SITE]. <message name="completing"> Completando teletransporte. </message> + <message name="completed_from"> + Teletransporte de [T_SLURL] concluído + </message> <message name="resolving"> Identificando destino. </message> diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 3f379fcf75..18ac10fe38 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -479,8 +479,8 @@ class WindowsManifest(ViewerManifest): grid_vars_template = """ OutFile "%(installer_file)s" !define INSTFLAGS "%(flags)s" - !define INSTNAME "SecondLife" - !define SHORTCUT "Second Life" + !define INSTNAME "SecondLifeViewer2" + !define SHORTCUT "Second Life Viewer 2" !define URLNAME "secondlife" Caption "Second Life ${VERSION}" """ @@ -686,7 +686,7 @@ class DarwinManifest(ViewerManifest): def package_finish(self): - channel_standin = 'Second Life' # hah, our default channel is not usable on its own + channel_standin = 'Second Life Viewer 2' # hah, our default channel is not usable on its own if not self.default_channel(): channel_standin = self.channel() diff --git a/indra/test_apps/llplugintest/bookmarks.txt b/indra/test_apps/llplugintest/bookmarks.txt index b8b83df386..2ff64f217f 100644 --- a/indra/test_apps/llplugintest/bookmarks.txt +++ b/indra/test_apps/llplugintest/bookmarks.txt @@ -18,20 +18,20 @@ (Flash) Scribd,http://www.scribd.com/doc/14427744/Second-Life-Quickstart-Guide (Flash) MAME,http://yvern.com/fMAME/fMAME.html (QT) Local sample,file:///C|/Program Files/QuickTime/Sample.mov -(QT) Movie - Watchmen Trailer,http://movies.apple.com/movies/wb/watchmen/watchmen-tlr2_480p.mov -(QT) Movie - Transformers - Revenge of the Fallen,http://movies.apple.com/movies/paramount/transformers2/transformersrevengeofthefallen-tlr1_h.320.mov -(QT) Movie - Terminator Salvation,http://movies.apple.com/movies/wb/terminatorsalvation/terminatorsalvation-tlr3_h.320.mov -(QT) Movie - Angels and Demons,http://movies.apple.com/movies/sony_pictures/angelsanddemons/angelsanddemons-video_h.320.mov -(QT) Movie - Sin City Trailer,http://movies.apple.com/movies/miramax/sin_city/sin_city_480.mov -(QT) Movie - The Incredibles Trailer,http://movies.apple.com/movies/disney/the_incredibles/the_incredibles-tlr_a480.mov +(QT) Movie - Watchmen Trailer,http://trailers.apple.com/movies/wb/watchmen/watchmen-tlr2_480p.mov +(QT) Movie - Transformers - Revenge of the Fallen,http://trailers.apple.com/movies/paramount/transformers2/transformersrevengeofthefallen-tlr1_h.320.mov +(QT) Movie - Terminator Salvation,http://trailers.apple.com/movies/wb/terminatorsalvation/terminatorsalvation-tlr3_h.320.mov +(QT) Movie - Angels and Demons,http://trailers.apple.com/movies/sony_pictures/angelsanddemons/angelsanddemons-video_h.320.mov +(QT) Movie - Sin City Trailer,http://trailers.apple.com/movies/miramax/sin_city/sin_city_480.mov +(QT) Movie - The Incredibles Trailer,http://trailers.apple.com/movies/disney/the_incredibles/the_incredibles-tlr_a480.mov (QT) Movie - Streaming Apple Event,http://stream.qtv.apple.com/events/mar/0903lajkszg/m_090374535329zdwg_650_ref.mov (QT) Movie - MPEG-4 from Amazon S3,http://s3.amazonaws.com/callum-linden/flashdemo/interactive_flash_demo.mp4 -(QT) Movie - Star Trek,http://movies.apple.com/movies/paramount/star_trek/startrek-tlr3_h.320.mov -(QT) Movie - Ice Age 3,http://movies.apple.com/movies/fox/ice_age_iii/iceage3-tlrd_h.320.mov -(QT) Movie - AstroBoy,http://movies.apple.com/movies/summit/astroboy/astroboy-tsr_h.320.mov -(QT) Movie - Ante Up,http://movies.apple.com/movies/independent/anteup/anteup_h.320.mov -(QT) Movie - Every Little Step,http://movies.apple.com/movies/sony/everylittlestep/everylittlestep-clip_h.320.mov -(QT) Movie - The Informers,http://movies.apple.com/movies/independent/theinformers/theinformers_h.320.mov +(QT) Movie - Star Trek,http://trailers.apple.com/movies/paramount/star_trek/startrek-tlr3_h.320.mov +(QT) Movie - Ice Age 3,http://trailers.apple.com/movies/fox/ice_age_iii/iceage3-tlrd_h.320.mov +(QT) Movie - AstroBoy,http://trailers.apple.com/movies/summit/astroboy/astroboy-tsr_h.320.mov +(QT) Movie - Ante Up,http://trailers.apple.com/movies/independent/anteup/anteup_h.320.mov +(QT) Movie - Every Little Step,http://trailers.apple.com/movies/sony/everylittlestep/everylittlestep-clip_h.320.mov +(QT) Movie - The Informers,http://trailers.apple.com/movies/independent/theinformers/theinformers_h.320.mov (QT) Animated GIF,http://upload.wikimedia.org/wikipedia/commons/4/44/Optical.greysquares.arp-animated.gif (QT) Apple Text Descriptors,http://ubrowser.com/tmp/apple_text.txt (EX) Example Plugin,example://blah diff --git a/indra/test_apps/llplugintest/llmediaplugintest.cpp b/indra/test_apps/llplugintest/llmediaplugintest.cpp index e5a846f15a..7e9a8336e7 100644 --- a/indra/test_apps/llplugintest/llmediaplugintest.cpp +++ b/indra/test_apps/llplugintest/llmediaplugintest.cpp @@ -1593,8 +1593,8 @@ void LLMediaPluginTest::addMediaPanel( std::string url ) } std::string user_data_path = std::string( cwd ) + "/"; #endif - - media_source->init( launcher_name, plugin_name, false, user_data_path ); + media_source->setUserDataPath(user_data_path); + media_source->init( launcher_name, plugin_name, false ); media_source->setDisableTimeout(mDisableTimeout); // make a new panel and save parameters @@ -1831,7 +1831,8 @@ void LLMediaPluginTest::replaceMediaPanel( mediaPanel* panel, std::string url ) std::string user_data_path = std::string( cwd ) + "/"; #endif - media_source->init( launcher_name, plugin_name, false, user_data_path ); + media_source->setUserDataPath(user_data_path); + media_source->init( launcher_name, plugin_name, false ); media_source->setDisableTimeout(mDisableTimeout); // make a new panel and save parameters @@ -1954,7 +1955,7 @@ void LLMediaPluginTest::updateStatusBar() cached_distance == mDistanceCameraToSelectedGeometry ) { - // nothing changed so don't spend time in this shitty function + // nothing changed so don't spend time here return; }; diff --git a/install.xml b/install.xml index 7337241cf8..a74b97230e 100644 --- a/install.xml +++ b/install.xml @@ -948,23 +948,23 @@ anguage Infrstructure (CLI) international standard</string> <key>darwin</key> <map> <key>md5sum</key> - <string>8321cbd098e6e791a02cb00ed3bcff6c</string> + <string>171bd85ebb81d319e1f15fab8092f8cd</string> <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-4.6-darwin-20100312.tar.bz2</uri> + <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-4.6-darwin-20100326.tar.bz2</uri> </map> <key>linux</key> <map> <key>md5sum</key> - <string>ba22560ea01b03c40f3a37013b335f56</string> + <string>455d9ce60837366a7e744751bdc8b6c3</string> <key>url</key> - <uri>http://viewer-source-downloads.s3.amazonaws.com/install_pkgs/llqtwebkit-linux-20100311.tar.bz2</uri> + <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-linux-20100329.tar.bz2</uri> </map> <key>windows</key> <map> <key>md5sum</key> - <string>ee5d242ea468ba9a82d2bf8581aa308d</string> + <string>04d86bb2eeed4f928d155cb5598ca6b5</string> <key>url</key> - <uri>http://viewer-source-downloads.s3.amazonaws.com/install_pkgs/llqtwebkit-windows-qt4.6-20100312.tar.bz2</uri> + <uri>http://viewer-source-downloads.s3.amazonaws.com/install_pkgs/llqtwebkit-windows-qt4.6-20100326.tar.bz2</uri> </map> </map> </map> @@ -1386,23 +1386,23 @@ anguage Infrstructure (CLI) international standard</string> <key>darwin</key> <map> <key>md5sum</key> - <string>bce6f58d3d63bda049bb7059583ed8e8</string> + <string>38d836fa53d073b9f197eecd0f5615f0</string> <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/vivox-3.1.0001.8016-darwin-20100225.tar.bz2</uri> + <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/vivox-3.1.0001.8181-darwin-20100319.tar.bz2</uri> </map> <key>linux</key> <map> <key>md5sum</key> - <string>12aac7288af3565ac2730796cb6d8de6</string> + <string>dd8dd1c223ecb8b232bf626cca6c63ac</string> <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/vivox-3.1.0001.8016-linux-20100225.tar.bz2</uri> + <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/vivox-3.1.0001.8181-linux-20100319.tar.bz2</uri> </map> <key>windows</key> <map> <key>md5sum</key> - <string>8af04ae8c536e8db80f67e6e5305fb61</string> + <string>8b4ce60f25823cd38896cb3b7eb0dd43</string> <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/vivox-3.1.0001.8016-windows-20100225.tar.bz2</uri> + <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/vivox-3.1.0001.8181-windows-20100319.tar.bz2</uri> </map> </map> </map> |