diff --git a/indra/llcharacter/llkeyframemotion.cpp b/indra/llcharacter/llkeyframemotion.cpp index 5a2e3f73f9a46d683d7962188c5e2e6ab8b6314a..f4dc3b927ba3d3beed513011b1f6f10c6980af35 100644 --- a/indra/llcharacter/llkeyframemotion.cpp +++ b/indra/llcharacter/llkeyframemotion.cpp @@ -658,7 +658,12 @@ BOOL LLKeyframeMotion::onActivate() // If the keyframe anim has an associated emote, trigger it. if( mJointMotionList->mEmoteName.length() > 0 ) { - mCharacter->startMotion( gAnimLibrary.stringToAnimState(mJointMotionList->mEmoteName) ); + LLUUID emote_anim_id = gAnimLibrary.stringToAnimState(mJointMotionList->mEmoteName); + // don't start emote if already active to avoid recursion + if (!mCharacter->isMotionActive(emote_anim_id)) + { + mCharacter->startMotion( emote_anim_id ); + } } mLastLoopedTime = 0.f; diff --git a/indra/llcommon/llsdserialize.cpp b/indra/llcommon/llsdserialize.cpp index cf337be1615fc7860c478d1772ebc9c6b9f14f3b..fdeb93e27f23bef50a1635ab7d8b2fc3a5a7b7d4 100644 --- a/indra/llcommon/llsdserialize.cpp +++ b/indra/llcommon/llsdserialize.cpp @@ -39,6 +39,7 @@ #include <iostream> #include "apr_base64.h" +#include "zlib/zlib.h" // for davep's dirty little zip functions #if !LL_WINDOWS #include <netinet/in.h> // htonl & ntohl @@ -1989,3 +1990,141 @@ std::ostream& operator<<(std::ostream& s, const LLSD& llsd) return s; } + +//dirty little zippers -- yell at davep if these are horrid + +//return a string containing gzipped bytes of binary serialized LLSD +// VERY inefficient -- creates several copies of LLSD block in memory +std::string zip_llsd(LLSD& data) +{ + std::stringstream llsd_strm; + + LLSDSerialize::serialize(data, llsd_strm, LLSDSerialize::LLSD_BINARY); + + z_stream strm; + strm.zalloc = Z_NULL; + strm.zfree = Z_NULL; + strm.opaque = Z_NULL; + + S32 ret = deflateInit(&strm, Z_BEST_COMPRESSION); + if (ret != Z_OK) + { + llwarns << "Failed to compress LLSD block." << llendl; + return std::string(); + } + + std::string source = llsd_strm.str(); + + strm.avail_in = source.size(); + strm.next_in = (U8*) source.data(); + U8* output = new U8[strm.avail_in]; + strm.avail_out = strm.avail_in; + strm.next_out = output; + ret = deflate(&strm, Z_FINISH); + if (ret != Z_STREAM_END) + { + delete [] output; + llwarns << "Failed to compress LLSD block." << llendl; + return std::string(); + } + + std::string::size_type size = source.size()-strm.avail_out; + + std::string result((char*) output, size); + deflateEnd(&strm); + delete [] output; + + return result; +} + +//decompress a block of LLSD from provided istream +// not very efficient -- creats a copy of decompressed LLSD block in memory +// and deserializes from that copy using LLSDSerialize +bool unzip_llsd(LLSD& data, std::istream& is, S32 size) +{ + U8* result = NULL; + U32 cur_size = 0; + z_stream strm; + + const U32 CHUNK = 65536; + + U8 *in = new U8[size]; + is.read((char*) in, size); + + U8 out[CHUNK]; + + strm.zalloc = Z_NULL; + strm.zfree = Z_NULL; + strm.opaque = Z_NULL; + strm.avail_in = size; + strm.next_in = in; + + S32 ret = inflateInit(&strm); + + if (ret != Z_OK) + { + llerrs << "WTF?" << llendl; + } + + do + { + strm.avail_out = CHUNK; + strm.next_out = out; + ret = inflate(&strm, Z_NO_FLUSH); + if (ret == Z_STREAM_ERROR) + { + inflateEnd(&strm); + free(result); + delete [] in; + return false; + } + + switch (ret) + { + case Z_NEED_DICT: + ret = Z_DATA_ERROR; + case Z_DATA_ERROR: + case Z_MEM_ERROR: + inflateEnd(&strm); + free(result); + delete [] in; + return false; + break; + } + + U32 have = CHUNK-strm.avail_out; + + result = (U8*) realloc(result, cur_size + have); + memcpy(result+cur_size, out, have); + cur_size += have; + + } while (strm.avail_out == 0); + + inflateEnd(&strm); + delete [] in; + + if (ret != Z_STREAM_END) + { + free(result); + return false; + } + + //result now points to the decompressed LLSD block + { + std::string res_str((char*) result, cur_size); + std::istringstream istr(res_str); + + if (!LLSDSerialize::deserialize(data, istr, cur_size)) + { + llwarns << "Failed to unzip LLSD block" << llendl; + free(result); + return false; + } + } + + free(result); + return true; +} + + + diff --git a/indra/llcommon/llsdserialize.h b/indra/llcommon/llsdserialize.h index 2f2b292189bf099373899d3eb48d0ddddc16d74c..390eaca783828ae5b3c21159b89aeff2f1988e81 100644 --- a/indra/llcommon/llsdserialize.h +++ b/indra/llcommon/llsdserialize.h @@ -796,4 +796,8 @@ class LL_COMMON_API LLSDSerialize } }; +//dirty little zip functions -- yell at davep +LL_COMMON_API std::string zip_llsd(LLSD& data); +LL_COMMON_API bool unzip_llsd(LLSD& data, std::istream& is, S32 size); + #endif // LL_LLSDSERIALIZE_H diff --git a/indra/llimage/llimage.cpp b/indra/llimage/llimage.cpp index 7d0de18c7cb98ea3dfac889a30b5ab8ebccb7bd7..0874f574c55e025c86d45bb9a59f1d7c150e9208 100644 --- a/indra/llimage/llimage.cpp +++ b/indra/llimage/llimage.cpp @@ -93,9 +93,10 @@ LLImageBase::LLImageBase() mWidth(0), mHeight(0), mComponents(0), + mBadBufferAllocation(false), + mAllowOverSize(false), mMemType(LLMemType::MTYPE_IMAGEBASE) { - mBadBufferAllocation = FALSE ; } // virtual @@ -134,8 +135,6 @@ void LLImageBase::sanityCheck() } } -BOOL LLImageBase::sSizeOverride = FALSE; - // virtual void LLImageBase::deleteData() { @@ -157,23 +156,32 @@ U8* LLImageBase::allocateData(S32 size) llerrs << llformat("LLImageBase::allocateData called with bad dimensions: %dx%dx%d",mWidth,mHeight,mComponents) << llendl; } } - if (size < 1 || (size > 4096*4096*16 && sSizeOverride == FALSE)) + + //make this function thread-safe. + static const U32 MAX_BUFFER_SIZE = 4096 * 4096 * 16 ; //256 MB + if (size < 1 || size > MAX_BUFFER_SIZE) { llinfos << "width: " << mWidth << " height: " << mHeight << " components: " << mComponents << llendl ; + if(mAllowOverSize) + { + llinfos << "Oversize: " << size << llendl ; + } + else + { llerrs << "LLImageBase::allocateData: bad size: " << size << llendl; } - + } if (!mData || size != mDataSize) { deleteData(); // virtual - mBadBufferAllocation = FALSE ; + mBadBufferAllocation = false ; mData = new U8[size]; if (!mData) { llwarns << "allocate image data: " << size << llendl; size = 0 ; mWidth = mHeight = 0 ; - mBadBufferAllocation = TRUE ; + mBadBufferAllocation = true ; } mDataSize = size; } @@ -222,7 +230,7 @@ U8* LLImageBase::getData() return mData; } -BOOL LLImageBase::isBufferInvalid() +bool LLImageBase::isBufferInvalid() { return mBadBufferAllocation || mData == NULL ; } @@ -258,7 +266,11 @@ LLImageRaw::LLImageRaw(U16 width, U16 height, S8 components) : LLImageBase() { mMemType = LLMemType::MTYPE_IMAGERAW; - llassert( S32(width) * S32(height) * S32(components) <= MAX_IMAGE_DATA_SIZE ); + //llassert( S32(width) * S32(height) * S32(components) <= MAX_IMAGE_DATA_SIZE ); + if(S32(width) * S32(height) * S32(components) > MAX_IMAGE_DATA_SIZE) + { + llwarns << "over size: width: " << (S32)width << " height: " << (S32)height << " components: " << (S32)components << llendl ; + } allocateDataSize(width, height, components); ++sRawImageCount; } diff --git a/indra/llimage/llimage.h b/indra/llimage/llimage.h index 686f58388653fa1f5ff2e9814ea96ef46e889a0e..10444e7f89d9bd580508db6fd75b3fb3a7937581 100644 --- a/indra/llimage/llimage.h +++ b/indra/llimage/llimage.h @@ -48,7 +48,7 @@ const S32 MAX_IMAGE_SIZE = (1<<MAX_IMAGE_MIP); // 2048 const S32 MIN_IMAGE_AREA = MIN_IMAGE_SIZE * MIN_IMAGE_SIZE; const S32 MAX_IMAGE_AREA = MAX_IMAGE_SIZE * MAX_IMAGE_SIZE; const S32 MAX_IMAGE_COMPONENTS = 8; -const S32 MAX_IMAGE_DATA_SIZE = MAX_IMAGE_AREA * MAX_IMAGE_COMPONENTS; +const S32 MAX_IMAGE_DATA_SIZE = MAX_IMAGE_AREA * MAX_IMAGE_COMPONENTS; //2048 * 2048 * 8 = 16 MB // Note! These CANNOT be changed without modifying simulator code // *TODO: change both to 1024 when SIM texture fetching is deprecated @@ -124,10 +124,12 @@ class LLImageBase : public LLThreadSafeRefCount const U8 *getData() const ; U8 *getData() ; - BOOL isBufferInvalid() ; + bool isBufferInvalid() ; void setSize(S32 width, S32 height, S32 ncomponents); U8* allocateDataSize(S32 width, S32 height, S32 ncomponents, S32 size = -1); // setSize() + allocateData() + void enableOverSize() {mAllowOverSize = true ;} + void disableOverSize() {mAllowOverSize = false; } protected: // special accessor to allow direct setting of mData and mDataSize by LLImageFormatted @@ -140,8 +142,6 @@ class LLImageBase : public LLThreadSafeRefCount // <= 0 priority means that there's no need for more data. static F32 calc_download_priority(F32 virtual_size, F32 visible_area, S32 bytes_sent); - static void setSizeOverride(BOOL enabled) { sSizeOverride = enabled; } - static EImageCodec getCodecFromExtension(const std::string& exten); private: @@ -153,12 +153,10 @@ class LLImageBase : public LLThreadSafeRefCount S8 mComponents; - BOOL mBadBufferAllocation ; - + bool mBadBufferAllocation ; + bool mAllowOverSize ; public: LLMemType::DeclareMemType& mMemType; // debug - - static BOOL sSizeOverride; }; // Raw representation of an image (used for textures, and other uncompressed formats diff --git a/indra/llinventory/CMakeLists.txt b/indra/llinventory/CMakeLists.txt index b358f0a0138fa2467996229ef82af591460ccfed..a563db901a84eeaf95e19da77ff032899a3c8e71 100644 --- a/indra/llinventory/CMakeLists.txt +++ b/indra/llinventory/CMakeLists.txt @@ -20,6 +20,7 @@ set(llinventory_SOURCE_FILES llcategory.cpp lleconomy.cpp llinventory.cpp + llinventorydefines.cpp llinventorytype.cpp lllandmark.cpp llnotecard.cpp @@ -36,6 +37,7 @@ set(llinventory_HEADER_FILES llcategory.h lleconomy.h llinventory.h + llinventorydefines.h llinventorytype.h lllandmark.h llnotecard.h diff --git a/indra/llinventory/llinventory.cpp b/indra/llinventory/llinventory.cpp index d665deb60507c2d6d3f6b9ed1a3365e1af1615a4..2c767a4857592ca7810ab0c2681e6dedbb270908 100644 --- a/indra/llinventory/llinventory.cpp +++ b/indra/llinventory/llinventory.cpp @@ -31,10 +31,10 @@ */ #include "linden_common.h" - #include "llinventory.h" #include "lldbstrings.h" +#include "llinventorydefines.h" #include "llxorcipher.h" #include "llsd.h" #include "message.h" @@ -43,9 +43,8 @@ #include "llsdutil.h" ///---------------------------------------------------------------------------- -/// exported functions +/// Exported functions ///---------------------------------------------------------------------------- - static const std::string INV_ITEM_ID_LABEL("item_id"); static const std::string INV_FOLDER_ID_LABEL("folder_id"); static const std::string INV_PARENT_ID_LABEL("parent_id"); @@ -64,25 +63,23 @@ static const std::string INV_CREATION_DATE_LABEL("created_at"); // key used by agent-inventory-service static const std::string INV_ASSET_TYPE_LABEL_WS("type_default"); static const std::string INV_FOLDER_ID_LABEL_WS("category_id"); + ///---------------------------------------------------------------------------- /// Local function declarations, constants, enums, and typedefs ///---------------------------------------------------------------------------- - const U8 TASK_INVENTORY_ITEM_KEY = 0; const U8 TASK_INVENTORY_ASSET_KEY = 1; const LLUUID MAGIC_ID("3c115e51-04f4-523c-9fa6-98aff1034730"); - ///---------------------------------------------------------------------------- /// Class LLInventoryObject ///---------------------------------------------------------------------------- -LLInventoryObject::LLInventoryObject( - const LLUUID& uuid, - const LLUUID& parent_uuid, - LLAssetType::EType type, - const std::string& name) : +LLInventoryObject::LLInventoryObject(const LLUUID& uuid, + const LLUUID& parent_uuid, + LLAssetType::EType type, + const std::string& name) : mUUID(uuid), mParentUUID(parent_uuid), mType(type), @@ -99,7 +96,7 @@ LLInventoryObject::LLInventoryObject() : { } -LLInventoryObject::~LLInventoryObject( void ) +LLInventoryObject::~LLInventoryObject() { } @@ -292,18 +289,17 @@ void LLInventoryObject::updateServer(BOOL) const /// Class LLInventoryItem ///---------------------------------------------------------------------------- -LLInventoryItem::LLInventoryItem( - const LLUUID& uuid, - const LLUUID& parent_uuid, - const LLPermissions& permissions, - const LLUUID& asset_uuid, - LLAssetType::EType type, - LLInventoryType::EType inv_type, - const std::string& name, - const std::string& desc, - const LLSaleInfo& sale_info, - U32 flags, - S32 creation_date_utc) : +LLInventoryItem::LLInventoryItem(const LLUUID& uuid, + const LLUUID& parent_uuid, + const LLPermissions& permissions, + const LLUUID& asset_uuid, + LLAssetType::EType type, + LLInventoryType::EType inv_type, + const std::string& name, + const std::string& desc, + const LLSaleInfo& sale_info, + U32 flags, + S32 creation_date_utc) : LLInventoryObject(uuid, parent_uuid, type, name), mPermissions(permissions), mAssetUUID(asset_uuid), @@ -458,11 +454,18 @@ void LLInventoryItem::setCreationDate(time_t creation_date_utc) mCreationDate = creation_date_utc; } +// Currently only used in the Viewer to handle calling cards +// where the creator is actually used to store the target. +void LLInventoryItem::setCreator(const LLUUID& creator) +{ + mPermissions.setCreator(creator); +} + void LLInventoryItem::accumulatePermissionSlamBits(const LLInventoryItem& old_item) { // Remove any pre-existing II_FLAGS_PERM_OVERWRITE_MASK flags // because we now detect when they should be set. - setFlags( old_item.getFlags() | (getFlags() & ~(LLInventoryItem::II_FLAGS_PERM_OVERWRITE_MASK)) ); + setFlags( old_item.getFlags() | (getFlags() & ~(LLInventoryItemFlags::II_FLAGS_PERM_OVERWRITE_MASK)) ); // Enforce the PERM_OVERWRITE flags for any masks that are different // but only for AT_OBJECT's since that is the only asset type that can @@ -473,20 +476,20 @@ void LLInventoryItem::accumulatePermissionSlamBits(const LLInventoryItem& old_it U32 flags_to_be_set = 0; if(old_permissions.getMaskNextOwner() != getPermissions().getMaskNextOwner()) { - flags_to_be_set |= LLInventoryItem::II_FLAGS_OBJECT_SLAM_PERM; + flags_to_be_set |= LLInventoryItemFlags::II_FLAGS_OBJECT_SLAM_PERM; } if(old_permissions.getMaskEveryone() != getPermissions().getMaskEveryone()) { - flags_to_be_set |= LLInventoryItem::II_FLAGS_OBJECT_PERM_OVERWRITE_EVERYONE; + flags_to_be_set |= LLInventoryItemFlags::II_FLAGS_OBJECT_PERM_OVERWRITE_EVERYONE; } if(old_permissions.getMaskGroup() != getPermissions().getMaskGroup()) { - flags_to_be_set |= LLInventoryItem::II_FLAGS_OBJECT_PERM_OVERWRITE_GROUP; + flags_to_be_set |= LLInventoryItemFlags::II_FLAGS_OBJECT_PERM_OVERWRITE_GROUP; } LLSaleInfo old_sale_info = old_item.getSaleInfo(); if(old_sale_info != getSaleInfo()) { - flags_to_be_set |= LLInventoryItem::II_FLAGS_OBJECT_SLAM_SALE; + flags_to_be_set |= LLInventoryItemFlags::II_FLAGS_OBJECT_SLAM_SALE; } setFlags(getFlags() | flags_to_be_set); } @@ -1304,28 +1307,14 @@ void LLInventoryItem::unpackBinaryBucket(U8* bin_bucket, S32 bin_bucket_size) setCreationDate(now); } -// returns TRUE if a should appear before b -BOOL item_dictionary_sort( LLInventoryItem* a, LLInventoryItem* b ) -{ - return (LLStringUtil::compareDict( a->getName().c_str(), b->getName().c_str() ) < 0); -} - -// returns TRUE if a should appear before b -BOOL item_date_sort( LLInventoryItem* a, LLInventoryItem* b ) -{ - return a->getCreationDate() < b->getCreationDate(); -} - - ///---------------------------------------------------------------------------- /// Class LLInventoryCategory ///---------------------------------------------------------------------------- -LLInventoryCategory::LLInventoryCategory( - const LLUUID& uuid, - const LLUUID& parent_uuid, - LLFolderType::EType preferred_type, - const std::string& name) : +LLInventoryCategory::LLInventoryCategory(const LLUUID& uuid, + const LLUUID& parent_uuid, + LLFolderType::EType preferred_type, + const std::string& name) : LLInventoryObject(uuid, parent_uuid, LLAssetType::AT_CATEGORY, name), mPreferredType(preferred_type) { diff --git a/indra/llinventory/llinventory.h b/indra/llinventory/llinventory.h index 9faecbea85735d8904300ff99c8ec5f75f9cf403..b083e305b10f777f4fcd6ffee8d5fdd385e933db 100644 --- a/indra/llinventory/llinventory.h +++ b/indra/llinventory/llinventory.h @@ -33,8 +33,6 @@ #ifndef LL_LLINVENTORY_H #define LL_LLINVENTORY_H -#include <functional> - #include "lldarray.h" #include "llfoldertype.h" #include "llinventorytype.h" @@ -45,180 +43,94 @@ #include "llsd.h" #include "lluuid.h" -// consts for Key field in the task inventory update message -extern const U8 TASK_INVENTORY_ITEM_KEY; -extern const U8 TASK_INVENTORY_ASSET_KEY; - -// anonymous enumeration to specify a max inventory buffer size for -// use in packBinaryBucket() -enum -{ - MAX_INVENTORY_BUFFER_SIZE = 1024 -}; - - +class LLMessageSystem; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Class LLInventoryObject // -// This is the base class for inventory objects that handles the -// common code between items and categories. The 'mParentUUID' member -// means the parent category since all inventory objects except each -// user's root category are in some category. Each user's root -// category will have mParentUUID==LLUUID::null. +// Base class for anything in the user's inventory. Handles the common code +// between items and categories. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -class LLMessageSystem; - class LLInventoryObject : public LLRefCount { -protected: - LLUUID mUUID; - LLUUID mParentUUID; - LLAssetType::EType mType; - std::string mName; +public: + typedef std::list<LLPointer<LLInventoryObject> > object_list_t; -protected: - virtual ~LLInventoryObject( void ); - + //-------------------------------------------------------------------- + // Initialization + //-------------------------------------------------------------------- public: MEM_TYPE_NEW(LLMemType::MTYPE_INVENTORY); - LLInventoryObject(const LLUUID& uuid, const LLUUID& parent_uuid, - LLAssetType::EType type, const std::string& name); LLInventoryObject(); + LLInventoryObject(const LLUUID& uuid, + const LLUUID& parent_uuid, + LLAssetType::EType type, + const std::string& name); void copyObject(const LLInventoryObject* other); // LLRefCount requires custom copy +protected: + virtual ~LLInventoryObject(); - // accessors - virtual const LLUUID& getUUID() const; + //-------------------------------------------------------------------- + // Accessors + //-------------------------------------------------------------------- +public: + virtual const LLUUID& getUUID() const; // inventoryID that this item points to + virtual const LLUUID& getLinkedUUID() const; // inventoryID that this item points to, else this item's inventoryID const LLUUID& getParentUUID() const; - virtual const LLUUID& getLinkedUUID() const; // get the inventoryID that this item points to, else this item's inventoryID virtual const std::string& getName() const; virtual LLAssetType::EType getType() const; LLAssetType::EType getActualType() const; // bypasses indirection for linked items BOOL getIsLinkType() const; - // mutators - will not call updateServer(); + + //-------------------------------------------------------------------- + // Mutators + // Will not call updateServer + //-------------------------------------------------------------------- +public: void setUUID(const LLUUID& new_uuid); virtual void rename(const std::string& new_name); void setParent(const LLUUID& new_parent); void setType(LLAssetType::EType type); - // file support - implemented here so that a minimal information - // set can be transmitted between simulator and viewer. -// virtual BOOL importFile(LLFILE* fp); + //-------------------------------------------------------------------- + // File Support + // Implemented here so that a minimal information set can be transmitted + // between simulator and viewer. + //-------------------------------------------------------------------- +public: + // virtual BOOL importFile(LLFILE* fp); virtual BOOL exportFile(LLFILE* fp, BOOL include_asset_key = TRUE) const; - virtual BOOL importLegacyStream(std::istream& input_stream); virtual BOOL exportLegacyStream(std::ostream& output_stream, BOOL include_asset_key = TRUE) const; - // virtual methods virtual void removeFromServer(); virtual void updateParentOnServer(BOOL) const; virtual void updateServer(BOOL) const; + + //-------------------------------------------------------------------- + // Member Variables + //-------------------------------------------------------------------- +protected: + LLUUID mUUID; + LLUUID mParentUUID; // Parent category. Root categories have LLUUID::NULL. + LLAssetType::EType mType; + std::string mName; }; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Class LLInventoryItem // -// An inventory item represents something that the current user has in -// their inventory. +// An item in the current user's inventory. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - class LLInventoryItem : public LLInventoryObject { public: typedef LLDynamicArray<LLPointer<LLInventoryItem> > item_array_t; - -protected: - LLPermissions mPermissions; - LLUUID mAssetUUID; - std::string mDescription; - LLSaleInfo mSaleInfo; - LLInventoryType::EType mInventoryType; - U32 mFlags; - time_t mCreationDate; // seconds from 1/1/1970, UTC + //-------------------------------------------------------------------- + // Initialization + //-------------------------------------------------------------------- public: - - /** - * Anonymous enumeration for specifying the inventory item flags. - */ - enum - { - // The shared flags at the top are shared among all inventory - // types. After that section, all values of flags are type - // dependent. The shared flags will start at 2^30 and work - // down while item type specific flags will start at 2^0 and - // work up. - II_FLAGS_NONE = 0, - - - // - // Shared flags - // - // - - // This value means that the asset has only one reference in - // the system. If the inventory item is deleted, or the asset - // id updated, then we can remove the old reference. - II_FLAGS_SHARED_SINGLE_REFERENCE = 0x40000000, - - - // - // Landmark flags - // - II_FLAGS_LANDMARK_VISITED = 1, - - // - // Object flags - // - - // flag to indicate that object permissions should have next - // owner perm be more restrictive on rez. We bump this into - // the second byte of the flags since the low byte is used to - // track attachment points. - II_FLAGS_OBJECT_SLAM_PERM = 0x100, - - // flag to indicate that the object sale information has been changed. - II_FLAGS_OBJECT_SLAM_SALE = 0x1000, - - // These flags specify which permissions masks to overwrite - // upon rez. Normally, if no permissions slam (above) or - // overwrite flags are set, the asset's permissions are - // used and the inventory's permissions are ignored. If - // any of these flags are set, the inventory's permissions - // take precedence. - II_FLAGS_OBJECT_PERM_OVERWRITE_BASE = 0x010000, - II_FLAGS_OBJECT_PERM_OVERWRITE_OWNER = 0x020000, - II_FLAGS_OBJECT_PERM_OVERWRITE_GROUP = 0x040000, - II_FLAGS_OBJECT_PERM_OVERWRITE_EVERYONE = 0x080000, - II_FLAGS_OBJECT_PERM_OVERWRITE_NEXT_OWNER = 0x100000, - - // flag to indicate whether an object that is returned is composed - // of muiltiple items or not. - II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS = 0x200000, - - // - // wearables use the low order byte of flags to store the - // EWearableType enumeration found in newview/llwearable.h - // - II_FLAGS_WEARABLES_MASK = 0xff, - - // these bits need to be cleared whenever the asset_id is updated - // on a pre-existing inventory item (DEV-28098 and DEV-30997) - II_FLAGS_PERM_OVERWRITE_MASK = II_FLAGS_OBJECT_SLAM_PERM - | II_FLAGS_OBJECT_SLAM_SALE - | II_FLAGS_OBJECT_PERM_OVERWRITE_BASE - | II_FLAGS_OBJECT_PERM_OVERWRITE_OWNER - | II_FLAGS_OBJECT_PERM_OVERWRITE_GROUP - | II_FLAGS_OBJECT_PERM_OVERWRITE_EVERYONE - | II_FLAGS_OBJECT_PERM_OVERWRITE_NEXT_OWNER, - }; - -protected: - ~LLInventoryItem(); // ref counted - -public: - MEM_TYPE_NEW(LLMemType::MTYPE_INVENTORY); LLInventoryItem(const LLUUID& uuid, const LLUUID& parent_uuid, @@ -237,10 +149,14 @@ class LLInventoryItem : public LLInventoryObject // is prohibited LLInventoryItem(const LLInventoryItem* other); virtual void copyItem(const LLInventoryItem* other); // LLRefCount requires custom copy - void generateUUID() { mUUID.generate(); } +protected: + ~LLInventoryItem(); // ref counted - // accessors + //-------------------------------------------------------------------- + // Accessors + //-------------------------------------------------------------------- +public: virtual const LLUUID& getLinkedUUID() const; virtual const LLPermissions& getPermissions() const; virtual const LLUUID& getCreatorUUID() const; @@ -252,8 +168,12 @@ class LLInventoryItem : public LLInventoryObject virtual time_t getCreationDate() const; virtual U32 getCRC32() const; // really more of a checksum. - // mutators - will not call updateServer(), and will never fail - // (though it may correct to sane values) + //-------------------------------------------------------------------- + // Mutators + // Will not call updateServer and will never fail + // (though it may correct to sane values) + //-------------------------------------------------------------------- +public: void setAssetUUID(const LLUUID& asset_id); void setDescription(const std::string& new_desc); void setSaleInfo(const LLSaleInfo& sale_info); @@ -261,62 +181,68 @@ class LLInventoryItem : public LLInventoryObject void setInventoryType(LLInventoryType::EType inv_type); void setFlags(U32 flags); void setCreationDate(time_t creation_date_utc); + void setCreator(const LLUUID& creator); // only used for calling cards // Check for changes in permissions masks and sale info - // and set the corresponding bits in mFlags + // and set the corresponding bits in mFlags. void accumulatePermissionSlamBits(const LLInventoryItem& old_item); - - // This is currently only used in the Viewer to handle calling cards - // where the creator is actually used to store the target. - void setCreator(const LLUUID& creator) { mPermissions.setCreator(creator); } - // Put this inventory item onto the current outgoing mesage. It - // assumes you have already called nextBlock(). + // Put this inventory item onto the current outgoing mesage. + // Assumes you have already called nextBlock(). virtual void packMessage(LLMessageSystem* msg) const; - // unpack returns TRUE if the inventory item came through the - // network ok. It uses a simple crc check which is defeatable, but - // we want to detect network mangling somehow. + // Returns TRUE if the inventory item came through the network correctly. + // Uses a simple crc check which is defeatable, but we want to detect + // network mangling somehow. virtual BOOL unpackMessage(LLMessageSystem* msg, const char* block, S32 block_num = 0); - // file support + + //-------------------------------------------------------------------- + // File Support + //-------------------------------------------------------------------- +public: virtual BOOL importFile(LLFILE* fp); virtual BOOL exportFile(LLFILE* fp, BOOL include_asset_key = TRUE) const; - virtual BOOL importLegacyStream(std::istream& input_stream); virtual BOOL exportLegacyStream(std::ostream& output_stream, BOOL include_asset_key = TRUE) const; - // helper functions - - // pack all information needed to reconstruct this item into the given binary bucket. - // perm_override is optional + //-------------------------------------------------------------------- + // Helper Functions + //-------------------------------------------------------------------- +public: + // Pack all information needed to reconstruct this item into the given binary bucket. S32 packBinaryBucket(U8* bin_bucket, LLPermissions* perm_override = NULL) const; void unpackBinaryBucket(U8* bin_bucket, S32 bin_bucket_size); LLSD asLLSD() const; void asLLSD( LLSD& sd ) const; bool fromLLSD(const LLSD& sd); + //-------------------------------------------------------------------- + // Member Variables + //-------------------------------------------------------------------- +protected: + LLPermissions mPermissions; + LLUUID mAssetUUID; + std::string mDescription; + LLSaleInfo mSaleInfo; + LLInventoryType::EType mInventoryType; + U32 mFlags; + time_t mCreationDate; // seconds from 1/1/1970, UTC }; -BOOL item_dictionary_sort(LLInventoryItem* a,LLInventoryItem* b); -BOOL item_date_sort(LLInventoryItem* a, LLInventoryItem* b); - - //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Class LLInventoryCategory // -// An instance of this class represents a category of inventory -// items. Users come with a set of default categories, and can create -// new ones as needed. +// A category/folder of inventory items. Users come with a set of default +// categories, and can create new ones as needed. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - class LLInventoryCategory : public LLInventoryObject { public: typedef LLDynamicArray<LLPointer<LLInventoryCategory> > cat_array_t; -protected: - ~LLInventoryCategory(); - + //-------------------------------------------------------------------- + // Initialization + //-------------------------------------------------------------------- public: MEM_TYPE_NEW(LLMemType::MTYPE_INVENTORY); LLInventoryCategory(const LLUUID& uuid, const LLUUID& parent_uuid, @@ -325,40 +251,49 @@ class LLInventoryCategory : public LLInventoryObject LLInventoryCategory(); LLInventoryCategory(const LLInventoryCategory* other); void copyCategory(const LLInventoryCategory* other); // LLRefCount requires custom copy +protected: + ~LLInventoryCategory(); - // accessors and mutators + //-------------------------------------------------------------------- + // Accessors And Mutators + //-------------------------------------------------------------------- +public: LLFolderType::EType getPreferredType() const; void setPreferredType(LLFolderType::EType type); - // For messaging system support - virtual void packMessage(LLMessageSystem* msg) const; - virtual void unpackMessage(LLMessageSystem* msg, const char* block, S32 block_num = 0); - LLSD asLLSD() const; bool fromLLSD(const LLSD& sd); - // file support + //-------------------------------------------------------------------- + // Messaging + //-------------------------------------------------------------------- +public: + virtual void packMessage(LLMessageSystem* msg) const; + virtual void unpackMessage(LLMessageSystem* msg, const char* block, S32 block_num = 0); + + //-------------------------------------------------------------------- + // File Support + //-------------------------------------------------------------------- +public: virtual BOOL importFile(LLFILE* fp); virtual BOOL exportFile(LLFILE* fp, BOOL include_asset_key = TRUE) const; - virtual BOOL importLegacyStream(std::istream& input_stream); virtual BOOL exportLegacyStream(std::ostream& output_stream, BOOL include_asset_key = TRUE) const; + //-------------------------------------------------------------------- + // Member Variables + //-------------------------------------------------------------------- protected: - // May be the type that this category was "meant" to hold (although it may hold any type). - LLFolderType::EType mPreferredType; + LLFolderType::EType mPreferredType; // Type that this category was "meant" to hold (although it may hold any type). }; //----------------------------------------------------------------------------- -// Useful bits +// Convertors +// +// These functions convert between structured data and an inventory +// item, appropriate for serialization. //----------------------------------------------------------------------------- - -typedef std::list<LLPointer<LLInventoryObject> > InventoryObjectList; - -// These functions convert between structured data and an inventory -// item, appropriate for serialization. LLSD ll_create_sd_from_inventory_item(LLPointer<LLInventoryItem> item); -//LLPointer<LLInventoryItem> ll_create_item_from_sd(const LLSD& sd_item); LLSD ll_create_sd_from_inventory_category(LLPointer<LLInventoryCategory> cat); LLPointer<LLInventoryCategory> ll_create_category_from_sd(const LLSD& sd_cat); diff --git a/indra/llinventory/llinventorydefines.cpp b/indra/llinventory/llinventorydefines.cpp new file mode 100644 index 0000000000000000000000000000000000000000..a9610d4d4baf776fb6545851699d9d5f6bc7bba5 --- /dev/null +++ b/indra/llinventory/llinventorydefines.cpp @@ -0,0 +1,37 @@ +/** + * @file llinventorydefines.cpp + * @brief Implementation of the inventory defines. + * + * $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 "linden_common.h" +#include "llinventorydefines.h" + +const U8 TASK_INVENTORY_ITEM_KEY = 0; +const U8 TASK_INVENTORY_ASSET_KEY = 1; diff --git a/indra/llinventory/llinventorydefines.h b/indra/llinventory/llinventorydefines.h new file mode 100644 index 0000000000000000000000000000000000000000..ccf1a356dec1beba64560c561db41e64cb2fc2a8 --- /dev/null +++ b/indra/llinventory/llinventorydefines.h @@ -0,0 +1,106 @@ +/** + * @file llinventorydefines.h + * @brief LLInventoryDefines + * + * $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$ + */ + +#ifndef LL_LLINVENTORYDEFINES_H +#define LL_LLINVENTORYDEFINES_H + +// Consts for "key" field in the task inventory update message +extern const U8 TASK_INVENTORY_ITEM_KEY; +extern const U8 TASK_INVENTORY_ASSET_KEY; + +// Max inventory buffer size (for use in packBinaryBucket) +enum +{ + MAX_INVENTORY_BUFFER_SIZE = 1024 +}; + +//-------------------------------------------------------------------- +// Inventory item flags enums +// The shared flags at the top are shared among all inventory +// types. After that section, all values of flags are type +// dependent. The shared flags will start at 2^30 and work +// down while item type specific flags will start at 2^0 and work up. +//-------------------------------------------------------------------- +class LLInventoryItemFlags +{ +public: + enum EType + { + II_FLAGS_NONE = 0, + + II_FLAGS_SHARED_SINGLE_REFERENCE = 0x40000000, + // The asset has only one reference in the system. If the + // inventory item is deleted, or the assetid updated, then we + // can remove the old reference. + + II_FLAGS_LANDMARK_VISITED = 1, + + II_FLAGS_OBJECT_SLAM_PERM = 0x100, + // Object permissions should have next owner perm be more + // restrictive on rez. We bump this into the second byte of the + // flags since the low byte is used to track attachment points. + + II_FLAGS_OBJECT_SLAM_SALE = 0x1000, + // The object sale information has been changed. + + II_FLAGS_OBJECT_PERM_OVERWRITE_BASE = 0x010000, + II_FLAGS_OBJECT_PERM_OVERWRITE_OWNER = 0x020000, + II_FLAGS_OBJECT_PERM_OVERWRITE_GROUP = 0x040000, + II_FLAGS_OBJECT_PERM_OVERWRITE_EVERYONE = 0x080000, + II_FLAGS_OBJECT_PERM_OVERWRITE_NEXT_OWNER = 0x100000, + // Specify which permissions masks to overwrite + // upon rez. Normally, if no permissions slam (above) or + // overwrite flags are set, the asset's permissions are + // used and the inventory's permissions are ignored. If + // any of these flags are set, the inventory's permissions + // take precedence. + + II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS = 0x200000, + // Whether a returned object is composed of multiple items. + + II_FLAGS_WEARABLES_MASK = 0xff, + // Wearables use the low order byte of flags to store the + // EWearableType enumeration found in newview/llwearable.h + + II_FLAGS_PERM_OVERWRITE_MASK = (II_FLAGS_OBJECT_SLAM_PERM | + II_FLAGS_OBJECT_SLAM_SALE | + II_FLAGS_OBJECT_PERM_OVERWRITE_BASE | + II_FLAGS_OBJECT_PERM_OVERWRITE_OWNER | + II_FLAGS_OBJECT_PERM_OVERWRITE_GROUP | + II_FLAGS_OBJECT_PERM_OVERWRITE_EVERYONE | + II_FLAGS_OBJECT_PERM_OVERWRITE_NEXT_OWNER), + // These bits need to be cleared whenever the asset_id is updated + // on a pre-existing inventory item (DEV-28098 and DEV-30997) + }; +}; + +#endif // LL_LLINVENTORYDEFINES_H diff --git a/indra/llinventory/llinventorytype.h b/indra/llinventory/llinventorytype.h index af426b9007d098cf2ec5a16fa3400ce026e16378..37829f5eae1450ef5fa83c1427d7b3c1f4c8e2ff 100644 --- a/indra/llinventory/llinventorytype.h +++ b/indra/llinventory/llinventorytype.h @@ -77,7 +77,6 @@ class LLInventoryType // machine transation between type and strings static EType lookup(const std::string& name); static const std::string &lookup(EType type); - // translation from a type to a human readable form. static const std::string &lookupHumanReadable(EType type); diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 52a3fb21955b8ff7d142c37416d25847328fe9ff..fdd48b9e9ed312d40325d79eeafe5d61799a590a 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -47,8 +47,6 @@ #include "llvolume.h" #include "llstl.h" #include "llsdserialize.h" -#include "zlib/zlib.h" - #define DEBUG_SILHOUETTE_BINORMALS 0 #define DEBUG_SILHOUETTE_NORMALS 0 // TomY: Use this to display normals using the silhouette @@ -1964,97 +1962,15 @@ BOOL LLVolume::createVolumeFacesFromStream(std::istream& is) bool LLVolume::unpackVolumeFaces(std::istream& is, S32 size) { - U8* result = NULL; - U32 cur_size = 0; - - { - //input stream is now pointing at a zlib compressed block of LLSD - //decompress block - z_stream strm; - - const U32 CHUNK = 65536; - - U8 *in = new U8[size]; - is.read((char*) in, size); - - U8 out[CHUNK]; - - strm.zalloc = Z_NULL; - strm.zfree = Z_NULL; - strm.opaque = Z_NULL; - strm.avail_in = size; - strm.next_in = in; - - S32 ret = inflateInit(&strm); - - if (ret != Z_OK) - { - llerrs << "WTF?" << llendl; - } - - do - { - strm.avail_out = CHUNK; - strm.next_out = out; - ret = inflate(&strm, Z_NO_FLUSH); - if (ret == Z_STREAM_ERROR) - { - inflateEnd(&strm); - free(result); - delete [] in; - return false; - } - - switch (ret) - { - case Z_NEED_DICT: - ret = Z_DATA_ERROR; - case Z_DATA_ERROR: - case Z_MEM_ERROR: - inflateEnd(&strm); - free(result); - delete [] in; - return false; - break; - } - - U32 have = CHUNK-strm.avail_out; - - result = (U8*) realloc(result, cur_size + have); - memcpy(result+cur_size, out, have); - cur_size += have; - - } while (strm.avail_out == 0); - - inflateEnd(&strm); - delete [] in; - - if (ret != Z_STREAM_END) - { - free(result); - return false; - } - } - - //result now points to the decompressed LLSD block - + //input stream is now pointing at a zlib compressed block of LLSD + //decompress block LLSD mdl; - + if (!unzip_llsd(mdl, is, size)) { - std::string res_str((char*) result, cur_size); - std::istringstream istr(res_str); - - if (!LLSDSerialize::deserialize(mdl, istr, cur_size)) - { - llwarns << "not a valid mesh asset!" << llendl; - return false; - } + llwarns << "not a valid mesh asset!" << llendl; + return false; } - - - free(result); - - + { U32 face_count = mdl.size(); @@ -2094,11 +2010,56 @@ bool LLVolume::unpackVolumeFaces(std::istream& is, S32 size) U32 num_verts = pos.size()/(3*2); face.mVertices.resize(num_verts); + if (mdl[i].has("Weights")) + { + face.mWeights.resize(num_verts); + + LLSD::Binary weights = mdl[i]["Weights"]; + + U32 idx = 0; + + U32 cur_vertex = 0; + while (idx < weights.size() && cur_vertex < num_verts) + { + const U8 END_INFLUENCES = 0xFF; + U8 joint = weights[idx++]; + + U32 cur_influence = 0; + while (joint != END_INFLUENCES) + { + U16 influence = weights[idx++]; + influence = influence << 8; + influence |= weights[idx++]; + + F32 w = llmin((F32) influence / 65535.f, 0.99999f); + face.mWeights[cur_vertex].mV[cur_influence++] = (F32) joint + w; + + if (cur_influence >= 4) + { + joint = END_INFLUENCES; + } + else + { + joint = weights[idx++]; + } + } + + cur_vertex++; + } + + if (cur_vertex != num_verts || idx != weights.size()) + { + llwarns << "Vertex weight count does not match vertex count!" << llendl; + } + + } + LLVector3 min_pos; LLVector3 max_pos; LLVector2 min_tc; LLVector2 max_tc; + min_pos.setValue(mdl[i]["PositionDomain"]["Min"]); max_pos.setValue(mdl[i]["PositionDomain"]["Max"]); min_tc.setValue(mdl[i]["TexCoord0Domain"]["Min"]); diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index 60c1569e550f6a98c31085c9ba929623d7c57b79..c6a156ae3791e3e77d787e1086b7468091a48e59 100644 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -49,6 +49,7 @@ class LLVolume; //#include "vmath.h" #include "v2math.h" #include "v3math.h" +#include "v4math.h" #include "llquaternion.h" #include "llstrider.h" #include "v4coloru.h" @@ -887,6 +888,11 @@ class LLVolumeFace std::vector<U16> mTriStrip; std::vector<S32> mEdge; + //list of skin weights for rigged volumes + // format is mWeights[vertex_index].mV[influence] = <joint_index>.<weight> + // mWeights.size() should be empty or match mVertices.size() + std::vector<LLVector4> mWeights; + private: BOOL createUnCutCubeCap(LLVolume* volume, BOOL partial_build = FALSE); BOOL createCap(LLVolume* volume, BOOL partial_build = FALSE); diff --git a/indra/llmessage/llcurl.cpp b/indra/llmessage/llcurl.cpp index f8a7eb04170fad82edde94c5f893a7a3cfcae5e1..5caf62005967a6334d3b542db3b3a9ac992468c0 100644 --- a/indra/llmessage/llcurl.cpp +++ b/indra/llmessage/llcurl.cpp @@ -1180,6 +1180,5 @@ void LLCurl::cleanupClass() { llerrs << "CURL easy handles not cleaned up on shutdown!" << llendl; } - - curl_global_cleanup(); } + diff --git a/indra/llmessage/message_prehash.cpp b/indra/llmessage/message_prehash.cpp index 9e3986f257631c17d7895b7163788bec925111ca..a118e21ffbb261b7d19ef01a04bf15a6417296e3 100644 --- a/indra/llmessage/message_prehash.cpp +++ b/indra/llmessage/message_prehash.cpp @@ -1147,7 +1147,7 @@ char* _PREHASH_ForceObjectSelect = LLMessageStringTable::getInstance()->getStrin char* _PREHASH_Price = LLMessageStringTable::getInstance()->getString("Price"); char* _PREHASH_SunDirection = LLMessageStringTable::getInstance()->getString("SunDirection"); char* _PREHASH_FromName = LLMessageStringTable::getInstance()->getString("FromName"); -char* _PREHASH_ChangeInventoryItemFlags = LLMessageStringTable::getInstance()->getString("ChangeInventoryItemFlags"); +char* _PREHASH_ChangeInventoryItemFlags = LLMessageStringTable::getInstance()->getString("ChangLLInventoryItemFlags"); char* _PREHASH_Force = LLMessageStringTable::getInstance()->getString("Force"); char* _PREHASH_TransactionBlock = LLMessageStringTable::getInstance()->getString("TransactionBlock"); char* _PREHASH_PowersMask = LLMessageStringTable::getInstance()->getString("PowersMask"); diff --git a/indra/llplugin/llplugincookiestore.cpp b/indra/llplugin/llplugincookiestore.cpp index 85b1e70d7870d99827e163e1bee2d0b467b74a4d..da770c5f2e3b03da55e6676db77e1be70bc1163d 100644 --- a/indra/llplugin/llplugincookiestore.cpp +++ b/indra/llplugin/llplugincookiestore.cpp @@ -99,7 +99,7 @@ bool LLPluginCookieStore::Cookie::parse(const std::string &host) std::string::size_type cookie_end = mCookie.size(); std::string::size_type field_start = 0; - lldebugs << "parsing cookie: " << mCookie << llendl; + LL_DEBUGS("CookieStoreParse") << "parsing cookie: " << mCookie << LL_ENDL; while(field_start < cookie_end) { // Finding the start of the next field requires honoring special quoting rules @@ -167,10 +167,10 @@ bool LLPluginCookieStore::Cookie::parse(const std::string &host) ++value_end; } - lldebugs + LL_DEBUGS("CookieStoreParse") << " field name: \"" << mCookie.substr(name_start, name_end - name_start) << "\", value: \"" << mCookie.substr(value_start, value_end - value_start) << "\"" - << llendl; + << LL_ENDL; // See whether this field is one we know if(first_field) @@ -195,13 +195,13 @@ bool LLPluginCookieStore::Cookie::parse(const std::string &host) #if 1 time_t date = curl_getdate(date_string.c_str(), NULL ); mDate.secondsSinceEpoch((F64)date); - lldebugs << " expire date parsed to: " << mDate.asRFC1123() << llendl; + LL_DEBUGS("CookieStoreParse") << " expire date parsed to: " << mDate.asRFC1123() << LL_ENDL; #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; + LL_WARNS("CookieStoreParse") << "failed to parse cookie's expire date: " << date << LL_ENDL; return false; } #endif @@ -232,9 +232,14 @@ bool LLPluginCookieStore::Cookie::parse(const std::string &host) { // We don't care about the value of this field (yet) } + else if(matchName(name_start, name_end, "httponly")) + { + // We don't care about the value of this field (yet) + } else { // An unknown field is a parse failure + LL_WARNS("CookieStoreParse") << "unexpected field name: " << mCookie.substr(name_start, name_end - name_start) << LL_ENDL; return false; } @@ -270,7 +275,7 @@ bool LLPluginCookieStore::Cookie::parse(const std::string &host) mCookie += host; mDomainEnd = mCookie.size(); - lldebugs << "added domain (" << mDomainStart << " to " << mDomainEnd << "), new cookie is: " << mCookie << llendl; + LL_DEBUGS("CookieStoreParse") << "added domain (" << mDomainStart << " to " << mDomainEnd << "), new cookie is: " << mCookie << LL_ENDL; } // If the cookie doesn't have a path, add "/". @@ -288,7 +293,7 @@ bool LLPluginCookieStore::Cookie::parse(const std::string &host) mCookie += "/"; mPathEnd = mCookie.size(); - lldebugs << "added path (" << mPathStart << " to " << mPathEnd << "), new cookie is: " << mCookie << llendl; + LL_DEBUGS("CookieStoreParse") << "added path (" << mPathStart << " to " << mPathEnd << "), new cookie is: " << mCookie << LL_ENDL; } @@ -566,7 +571,7 @@ void LLPluginCookieStore::setOneCookie(const std::string &s, std::string::size_t Cookie *cookie = Cookie::createFromString(s, cookie_start, cookie_end, host); if(cookie) { - lldebugs << "setting cookie: " << cookie->getCookie() << llendl; + LL_DEBUGS("CookieStoreUpdate") << "setting cookie: " << cookie->getCookie() << LL_ENDL; // Create a key for this cookie std::string key = cookie->getKey(); @@ -579,7 +584,7 @@ void LLPluginCookieStore::setOneCookie(const std::string &s, std::string::size_t { // 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; + LL_DEBUGS("CookieStoreUpdate") << " marking dead" << LL_ENDL; } else { @@ -590,7 +595,7 @@ void LLPluginCookieStore::setOneCookie(const std::string &s, std::string::size_t delete cookie; cookie = NULL; - lldebugs << " removing" << llendl; + LL_DEBUGS("CookieStoreUpdate") << " removing" << LL_ENDL; } } @@ -607,7 +612,7 @@ void LLPluginCookieStore::setOneCookie(const std::string &s, std::string::size_t delete cookie; cookie = NULL; - lldebugs << " unchanged" << llendl; + LL_DEBUGS("CookieStoreUpdate") << " unchanged" << LL_ENDL; } else { @@ -619,7 +624,7 @@ void LLPluginCookieStore::setOneCookie(const std::string &s, std::string::size_t if(mark_changed) mHasChangedCookies = true; - lldebugs << " replacing" << llendl; + LL_DEBUGS("CookieStoreUpdate") << " replacing" << LL_ENDL; } } else @@ -631,10 +636,15 @@ void LLPluginCookieStore::setOneCookie(const std::string &s, std::string::size_t if(mark_changed) mHasChangedCookies = true; - lldebugs << " adding" << llendl; + LL_DEBUGS("CookieStoreUpdate") << " adding" << LL_ENDL; } } } + else + { + LL_WARNS("CookieStoreUpdate") << "failed to parse cookie: " << s.substr(cookie_start, cookie_end - cookie_start) << LL_ENDL; + } + } void LLPluginCookieStore::clearCookies() diff --git a/indra/llplugin/tests/llplugincookiestore_test.cpp b/indra/llplugin/tests/llplugincookiestore_test.cpp index 020d9c1977361957c37030ac6d3a4b92718027b1..c903464c6404b9e727b2a845d5a5cc5e666f5fa1 100644 --- a/indra/llplugin/tests/llplugincookiestore_test.cpp +++ b/indra/llplugin/tests/llplugincookiestore_test.cpp @@ -127,7 +127,7 @@ namespace tut // 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 cookie02 = "cookieB=value; Domain=example.com; Path=/; Max-Age=10; Secure; Version=1; Comment=foo!; HTTPOnly"; // cookie with every supported field, in different cases. 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 diff --git a/indra/llrender/llglslshader.cpp b/indra/llrender/llglslshader.cpp index ca92cb6580f70db30ca0e3053cbc9ee75369be21..949057df04948213197a3d6f42e44cbb7f8ed519 100644 --- a/indra/llrender/llglslshader.cpp +++ b/indra/llrender/llglslshader.cpp @@ -61,7 +61,7 @@ BOOL shouldChange(const LLVector4& v1, const LLVector4& v2) LLShaderFeatures::LLShaderFeatures() : calculatesLighting(false), isShiny(false), isFullbright(false), hasWaterFog(false), -hasTransport(false), hasSkinning(false), hasAtmospherics(false), isSpecular(false), +hasTransport(false), hasSkinning(false), hasObjectSkinning(false), hasAtmospherics(false), isSpecular(false), hasGamma(false), hasLighting(false), calculatesAtmospherics(false) { } @@ -717,6 +717,18 @@ GLint LLGLSLShader::getUniformLocation(const string& uniform) return -1; } +GLint LLGLSLShader::getAttribLocation(U32 attrib) +{ + if (attrib < mAttribute.size()) + { + return mAttribute[attrib]; + } + else + { + return -1; + } +} + void LLGLSLShader::uniform1i(const string& uniform, GLint v) { GLint location = getUniformLocation(uniform); diff --git a/indra/llrender/llglslshader.h b/indra/llrender/llglslshader.h index 166d4af04cab5be2363c668e0ff36515ab122ce8..dc493ba1629470ac21a56d14f0c857bc5dd2b8fe 100644 --- a/indra/llrender/llglslshader.h +++ b/indra/llrender/llglslshader.h @@ -48,6 +48,7 @@ class LLShaderFeatures bool hasWaterFog; // implies no gamma bool hasTransport; // implies no lighting (it's possible to have neither though) bool hasSkinning; + bool hasObjectSkinning; bool hasAtmospherics; bool hasGamma; @@ -109,7 +110,7 @@ class LLGLSLShader void vertexAttrib4fv(U32 index, GLfloat* v); GLint getUniformLocation(const std::string& uniform); - + GLint getAttribLocation(U32 attrib); GLint mapUniformTextureChannel(GLint location, GLenum type); diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp index 2ab6e327b7e4533bdbb1893d0e54d7893767063b..dae759ca5f6e8b37fabcb349eb9c7baa923f7f5a 100644 --- a/indra/llrender/llimagegl.cpp +++ b/indra/llrender/llimagegl.cpp @@ -105,9 +105,9 @@ void check_all_images() } } -void LLImageGL::checkTexSize() const +void LLImageGL::checkTexSize(bool forced) const { - if (gDebugGL && mTarget == GL_TEXTURE_2D) + if ((forced || gDebugGL) && mTarget == GL_TEXTURE_2D) { GLint texname; glGetIntegerv(GL_TEXTURE_BINDING_2D, &texname); @@ -129,6 +129,8 @@ void LLImageGL::checkTexSize() const glGetTexLevelParameteriv(mTarget, 0, GL_TEXTURE_WIDTH, (GLint*)&x); glGetTexLevelParameteriv(mTarget, 0, GL_TEXTURE_HEIGHT, (GLint*)&y) ; stop_glerror() ; + llcallstacks << "w: " << x << " h: " << y << llcallstacksendl ; + if(!x || !y) { return ; @@ -138,11 +140,13 @@ void LLImageGL::checkTexSize() const error = TRUE; if (gDebugSession) { - gFailLog << "wrong texture size and discard level!" << std::endl; + gFailLog << "wrong texture size and discard level!" << + mWidth << " Height: " << mHeight << " Current Level: " << mCurrentDiscardLevel << std::endl; } else { - llerrs << "wrong texture size and discard level!" << llendl ; + llerrs << "wrong texture size and discard level: width: " << + mWidth << " Height: " << mHeight << " Current Level: " << mCurrentDiscardLevel << llendl ; } } @@ -1044,7 +1048,9 @@ BOOL LLImageGL::setSubImageFromFrameBuffer(S32 fb_x, S32 fb_y, S32 x_pos, S32 y_ { if (gGL.getTexUnit(0)->bind(this, false, true)) { - //checkTexSize() ; + checkTexSize(true) ; + llcallstacks << fb_x << " : " << fb_y << " : " << x_pos << " : " << y_pos << " : " << width << " : " << height << llcallstacksendl ; + glCopyTexSubImage2D(GL_TEXTURE_2D, 0, fb_x, fb_y, x_pos, y_pos, width, height); mGLTextureCreated = true; stop_glerror(); diff --git a/indra/llrender/llimagegl.h b/indra/llrender/llimagegl.h index 1b303307f63624465423c9bc09d4949b73d17aef..03939888a503d104fd070149f2666da1d0b78f20 100644 --- a/indra/llrender/llimagegl.h +++ b/indra/llrender/llimagegl.h @@ -157,7 +157,7 @@ class LLImageGL : public LLRefCount void updatePickMask(S32 width, S32 height, const U8* data_in); BOOL getMask(const LLVector2 &tc); - void checkTexSize() const ; + void checkTexSize(bool forced = false) const ; // Sets the addressing mode used to sample the texture // (such as wrapping, mirrored wrapping, and clamp) diff --git a/indra/llrender/llshadermgr.cpp b/indra/llrender/llshadermgr.cpp index 1286e91e49c6355b18073404de16b714cdab4448..23b76351ebb3c6d74e9de3afb5c2c04013baf11e 100644 --- a/indra/llrender/llshadermgr.cpp +++ b/indra/llrender/llshadermgr.cpp @@ -152,6 +152,14 @@ BOOL LLShaderMgr::attachShaderFeatures(LLGLSLShader * shader) return FALSE; } } + + if (features->hasObjectSkinning) + { + if (!shader->attachObject("avatar/objectSkinV.glsl")) + { + return FALSE; + } + } /////////////////////////////////////// // Attach Fragment Shader Features Next diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp index 4064e688e833631609b60024d1e53ae450ef8d9a..d5b00f27a7dc25b48934dc35181bf391a6e4ec10 100644 --- a/indra/llrender/llvertexbuffer.cpp +++ b/indra/llrender/llvertexbuffer.cpp @@ -62,6 +62,7 @@ BOOL LLVertexBuffer::sIBOActive = FALSE; U32 LLVertexBuffer::sAllocatedBytes = 0; BOOL LLVertexBuffer::sMapped = FALSE; BOOL LLVertexBuffer::sUseStreamDraw = TRUE; +S32 LLVertexBuffer::sWeight4Loc = -1; std::vector<U32> LLVertexBuffer::sDeleteList; @@ -76,6 +77,7 @@ S32 LLVertexBuffer::sTypeOffsets[LLVertexBuffer::TYPE_MAX] = sizeof(LLColor4U), // TYPE_COLOR, sizeof(LLVector3), // TYPE_BINORMAL, sizeof(F32), // TYPE_WEIGHT, + sizeof(LLVector4), // TYPE_WEIGHT4, sizeof(LLVector4), // TYPE_CLOTHWEIGHT, }; @@ -1015,6 +1017,12 @@ bool LLVertexBuffer::getWeightStrider(LLStrider<F32>& strider, S32 index) { return VertexBufferStrider<F32,TYPE_WEIGHT>::get(*this, strider, index); } + +bool LLVertexBuffer::getWeight4Strider(LLStrider<LLVector4>& strider, S32 index) +{ + return VertexBufferStrider<LLVector4,TYPE_WEIGHT4>::get(*this, strider, index); +} + bool LLVertexBuffer::getClothWeightStrider(LLStrider<LLVector4>& strider, S32 index) { return VertexBufferStrider<LLVector4,TYPE_CLOTHWEIGHT>::get(*this, strider, index); @@ -1284,6 +1292,12 @@ void LLVertexBuffer::setupVertexBuffer(U32 data_mask) const { glVertexAttribPointerARB(1, 1, GL_FLOAT, FALSE, stride, (void*)(base + mOffsets[TYPE_WEIGHT])); } + + if (data_mask & MAP_WEIGHT4 && sWeight4Loc != -1) + { + glVertexAttribPointerARB(sWeight4Loc, 4, GL_FLOAT, FALSE, stride, (void*)(base+mOffsets[TYPE_WEIGHT4])); + } + if (data_mask & MAP_CLOTHWEIGHT) { glVertexAttribPointerARB(4, 4, GL_FLOAT, TRUE, stride, (void*)(base + mOffsets[TYPE_CLOTHWEIGHT])); diff --git a/indra/llrender/llvertexbuffer.h b/indra/llrender/llvertexbuffer.h index e2fecdffef9065569505507b33668840aadc9bd9..225237215cb6439f27abe8b358663980f086d8ea 100644 --- a/indra/llrender/llvertexbuffer.h +++ b/indra/llrender/llvertexbuffer.h @@ -84,6 +84,8 @@ class LLVertexBuffer : public LLRefCount static LLVBOPool sStreamIBOPool; static LLVBOPool sDynamicIBOPool; + static S32 sWeight4Loc; + static BOOL sUseStreamDraw; static void initClass(bool use_vbo); @@ -109,6 +111,7 @@ class LLVertexBuffer : public LLRefCount // These use VertexAttribPointer and should possibly be made generic TYPE_BINORMAL, TYPE_WEIGHT, + TYPE_WEIGHT4, TYPE_CLOTHWEIGHT, TYPE_MAX, TYPE_INDEX, @@ -124,6 +127,7 @@ class LLVertexBuffer : public LLRefCount // These use VertexAttribPointer and should possibly be made generic MAP_BINORMAL = (1<<TYPE_BINORMAL), MAP_WEIGHT = (1<<TYPE_WEIGHT), + MAP_WEIGHT4 = (1<<TYPE_WEIGHT4), MAP_CLOTHWEIGHT = (1<<TYPE_CLOTHWEIGHT), }; @@ -173,6 +177,7 @@ class LLVertexBuffer : public LLRefCount bool getBinormalStrider(LLStrider<LLVector3>& strider, S32 index=0); bool getColorStrider(LLStrider<LLColor4U>& strider, S32 index=0); bool getWeightStrider(LLStrider<F32>& strider, S32 index=0); + bool getWeight4Strider(LLStrider<LLVector4>& strider, S32 index=0); bool getClothWeightStrider(LLStrider<LLVector4>& strider, S32 index=0); BOOL isEmpty() const { return mEmpty; } diff --git a/indra/llui/llaccordionctrl.cpp b/indra/llui/llaccordionctrl.cpp index 2ed1082f569e6232ca1819b6c0ca0c1bc059ac86..cdcf780d2e08d058e19f284b645e4ca006fa0117 100644 --- a/indra/llui/llaccordionctrl.cpp +++ b/indra/llui/llaccordionctrl.cpp @@ -372,11 +372,33 @@ void LLAccordionCtrl::arrangeSinge() } else { - panel_height = expanded_height; + if(mFitParent) + { + panel_height = expanded_height; + } + else + { + if(accordion_tab->getAccordionView()) + { + panel_height = accordion_tab->getAccordionView()->getRect().getHeight() + + accordion_tab->getHeaderHeight() + 2*BORDER_MARGIN; + } + else + { + panel_height = accordion_tab->getRect().getHeight(); + } + } } + + // make sure at least header is shown + panel_height = llmax(panel_height, accordion_tab->getHeaderHeight()); + ctrlSetLeftTopAndSize(mAccordionTabs[i], panel_left, panel_top, panel_width, panel_height); panel_top-=mAccordionTabs[i]->getRect().getHeight(); } + + show_hide_scrollbar(getRect().getWidth(), getRect().getHeight()); + updateLayout(getRect().getWidth(), getRect().getHeight()); } void LLAccordionCtrl::arrangeMultiple() diff --git a/indra/llui/llaccordionctrltab.cpp b/indra/llui/llaccordionctrltab.cpp index 0959722aa695971f2654c3397e6b8681487ac463..dfb427f293a35ea275aa2589aeab2c76f1243488 100644 --- a/indra/llui/llaccordionctrltab.cpp +++ b/indra/llui/llaccordionctrltab.cpp @@ -860,5 +860,16 @@ void LLAccordionCtrlTab::ctrlSetLeftTopAndSize(LLView* panel, S32 left, S32 top, panel->reshape( width, height, 1); panel->setRect(panel_rect); } +BOOL LLAccordionCtrlTab::handleToolTip(S32 x, S32 y, MASK mask) +{ + //header may be not the first child but we need to process it first + if(y >= (getRect().getHeight() - HEADER_HEIGHT - HEADER_HEIGHT/2) ) + { + //inside tab header + //fix for EXT-6619 + return TRUE; + } + return LLUICtrl::handleToolTip(x, y, mask); +} diff --git a/indra/llui/llaccordionctrltab.h b/indra/llui/llaccordionctrltab.h index 4b8b22405ea2fc3e4e6326e6ee51508b162478a3..fb19d17e99a644a88a642e1349ed9bd6ceed1c63 100644 --- a/indra/llui/llaccordionctrltab.h +++ b/indra/llui/llaccordionctrltab.h @@ -148,6 +148,8 @@ class LLAccordionCtrlTab : public LLUICtrl virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); virtual BOOL handleKey(KEY key, MASK mask, BOOL called_from_parent); + virtual BOOL handleToolTip(S32 x, S32 y, MASK mask); + virtual bool addChild(LLView* child, S32 tab_group); bool isExpanded() { return mDisplayChildren; } diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp index 1d4dc35cee457becd5df32ef4f859bfcaedcbb58..33c6a8b6aca10ba1c9de9dec50857635bfc17906 100644 --- a/indra/llui/llbutton.cpp +++ b/indra/llui/llbutton.cpp @@ -824,7 +824,7 @@ void LLButton::draw() x = text_right; break; case LLFontGL::HCENTER: - x = getRect().getWidth() / 2; + x = text_left + (text_width / 2); break; case LLFontGL::LEFT: default: diff --git a/indra/llui/llcombobox.cpp b/indra/llui/llcombobox.cpp index 3a8efadaa48c002dde797827121f538f877003b5..cc107c972d8651ef2689f12dd306fabd53b3dcc9 100644 --- a/indra/llui/llcombobox.cpp +++ b/indra/llui/llcombobox.cpp @@ -495,7 +495,6 @@ void LLComboBox::createLineEditor(const LLComboBox::Params& p) params.max_length_bytes(mMaxChars); params.commit_callback.function(boost::bind(&LLComboBox::onTextCommit, this, _2)); params.keystroke_callback(boost::bind(&LLComboBox::onTextEntry, this, _1)); - params.handle_edit_keys_directly(true); params.commit_on_focus_lost(false); params.follows.flags(FOLLOWS_ALL); params.label(mLabel); diff --git a/indra/llui/lleditmenuhandler.cpp b/indra/llui/lleditmenuhandler.cpp index 821afae8fda971ba5bac30a9770da1853ae83ebd..245bce76f5e1df23fc62c18bfbb42b9f997d2397 100644 --- a/indra/llui/lleditmenuhandler.cpp +++ b/indra/llui/lleditmenuhandler.cpp @@ -37,3 +37,10 @@ /* static */ LLEditMenuHandler* LLEditMenuHandler::gEditMenuHandler = NULL; +LLEditMenuHandler::~LLEditMenuHandler() +{ + if (gEditMenuHandler == this) + { + gEditMenuHandler = NULL; + } +} diff --git a/indra/llui/lleditmenuhandler.h b/indra/llui/lleditmenuhandler.h index 1de9c56afb3c3ae634766782eb0da569d85282a8..d72283cd9946eb8cf058d839dc1579739d0a088c 100644 --- a/indra/llui/lleditmenuhandler.h +++ b/indra/llui/lleditmenuhandler.h @@ -38,7 +38,7 @@ class LLEditMenuHandler { public: // this is needed even though this is just an interface class. - virtual ~LLEditMenuHandler() {}; + virtual ~LLEditMenuHandler(); virtual void undo() {}; virtual BOOL canUndo() const { return FALSE; } diff --git a/indra/llui/llflatlistview.cpp b/indra/llui/llflatlistview.cpp index d8084fd9aa08fb79d9c151ee4afc3214b1a5981e..35f5a6bbb9364780f6a912fb1ac75b7a361cabed 100644 --- a/indra/llui/llflatlistview.cpp +++ b/indra/llui/llflatlistview.cpp @@ -558,14 +558,6 @@ BOOL LLFlatListView::handleKeyHere(KEY key, MASK mask) } break; } - case 'A': - { - if(MASK_CONTROL & mask) - { - handled = (BOOL)selectAll(); - } - break; - } default: break; } @@ -790,10 +782,15 @@ bool LLFlatListView::selectNextItemPair(bool is_up_direction, bool reset_selecti return false; } -bool LLFlatListView::selectAll() +BOOL LLFlatListView::canSelectAll() const +{ + return !mItemPairs.empty() && mAllowSelection && mMultipleSelection; +} + +void LLFlatListView::selectAll() { if (!mAllowSelection || !mMultipleSelection) - return false; + return; mSelectedItemPairs.clear(); @@ -813,8 +810,6 @@ bool LLFlatListView::selectAll() // Stretch selected item rect to ensure it won't be clipped mSelectedItemsBorder->setRect(getLastSelectedItemRect().stretch(-1)); - - return true; } bool LLFlatListView::isSelected(item_pair_t* item_pair) const @@ -952,11 +947,17 @@ void LLFlatListView::getValues(std::vector<LLSD>& values) const void LLFlatListView::onFocusReceived() { mSelectedItemsBorder->setVisible(TRUE); + gEditMenuHandler = this; } // virtual void LLFlatListView::onFocusLost() { mSelectedItemsBorder->setVisible(FALSE); + // Route menu back to the default + if( gEditMenuHandler == this ) + { + gEditMenuHandler = NULL; + } } //virtual diff --git a/indra/llui/llflatlistview.h b/indra/llui/llflatlistview.h index dc6400c92681587163c192f597a28eb490939ea6..e3c07e811faab6adbb94eac1c0e4de9f8661a745 100644 --- a/indra/llui/llflatlistview.h +++ b/indra/llui/llflatlistview.h @@ -58,7 +58,7 @@ * - Order of returned selected items are not guaranteed * - The control assumes that all items being added are unique. */ -class LLFlatListView : public LLScrollContainer +class LLFlatListView : public LLScrollContainer, public LLEditMenuHandler { public: @@ -114,8 +114,6 @@ class LLFlatListView : public LLScrollContainer Params(); }; - virtual ~LLFlatListView() { clear(); }; - /** * Connects callback to signal called when Return key is pressed. */ @@ -344,7 +342,8 @@ class LLFlatListView : public LLScrollContainer virtual bool selectNextItemPair(bool is_up_direction, bool reset_selection); - virtual bool selectAll(); + virtual BOOL canSelectAll() const; + virtual void selectAll(); virtual bool isSelected(item_pair_t* item_pair) const; diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index e672252a5071acdc05304fb1d7205fb8b1e9e4b4..a55e9c039551d8605f9aa8a9358ecac7eedc1620 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -563,6 +563,7 @@ void LLFloater::handleVisibilityChange ( BOOL new_visibility ) void LLFloater::openFloater(const LLSD& key) { + llinfos << "Opening floater " << getName() << llendl; mKey = key; // in case we need to open ourselves again if (getSoundFlags() != SILENT @@ -603,6 +604,7 @@ void LLFloater::openFloater(const LLSD& key) void LLFloater::closeFloater(bool app_quitting) { + llinfos << "Closing floater " << getName() << llendl; if (app_quitting) { LLFloater::sQuitting = true; diff --git a/indra/llui/lllineeditor.cpp b/indra/llui/lllineeditor.cpp index 483a394bbdbcbb55069dfdbbfe623340fe4ec1d4..843f72d8e40bc02fcada552ef536f13853463913 100644 --- a/indra/llui/lllineeditor.cpp +++ b/indra/llui/lllineeditor.cpp @@ -91,7 +91,6 @@ LLLineEditor::Params::Params() background_image_disabled("background_image_disabled"), background_image_focused("background_image_focused"), select_on_focus("select_on_focus", false), - handle_edit_keys_directly("handle_edit_keys_directly", false), revert_on_esc("revert_on_esc", true), commit_on_focus_lost("commit_on_focus_lost", true), ignore_tab("ignore_tab", true), @@ -136,7 +135,6 @@ LLLineEditor::LLLineEditor(const LLLineEditor::Params& p) mIgnoreArrowKeys( FALSE ), mIgnoreTab( p.ignore_tab ), mDrawAsterixes( FALSE ), - mHandleEditKeysDirectly(p.handle_edit_keys_directly), mSelectAllonFocusReceived( p.select_on_focus ), mPassDelete(FALSE), mReadOnly(FALSE), @@ -192,12 +190,8 @@ LLLineEditor::~LLLineEditor() { mCommitOnFocusLost = FALSE; + // calls onCommit() while LLLineEditor still valid gFocusMgr.releaseFocusIfNeeded( this ); - - if( gEditMenuHandler == this ) - { - gEditMenuHandler = NULL; - } } @@ -497,6 +491,7 @@ void LLLineEditor::selectAll() setCursor(mSelectionEnd); //mScrollHPos = 0; mIsSelecting = TRUE; + updatePrimary(); } @@ -788,7 +783,7 @@ void LLLineEditor::removeChar() } else { - reportBadKeystroke(); + LLUI::reportBadKeystroke(); } } @@ -827,7 +822,7 @@ void LLLineEditor::addChar(const llwchar uni_char) } else { - reportBadKeystroke(); + LLUI::reportBadKeystroke(); } getWindow()->hideCursorUntilMouseMove(); @@ -916,7 +911,7 @@ BOOL LLLineEditor::handleSelectionKey(KEY key, MASK mask) } else { - reportBadKeystroke(); + LLUI::reportBadKeystroke(); } break; @@ -932,7 +927,7 @@ BOOL LLLineEditor::handleSelectionKey(KEY key, MASK mask) } else { - reportBadKeystroke(); + LLUI::reportBadKeystroke(); } break; @@ -958,22 +953,6 @@ BOOL LLLineEditor::handleSelectionKey(KEY key, MASK mask) } } - if (!handled && mHandleEditKeysDirectly) - { - if( (MASK_CONTROL & mask) && ('A' == key) ) - { - if( canSelectAll() ) - { - selectAll(); - } - else - { - reportBadKeystroke(); - } - handled = TRUE; - } - } - if(handled) { // take selection to 'primary' clipboard @@ -1020,7 +999,7 @@ void LLLineEditor::cut() if( need_to_rollback ) { rollback.doRollback( this ); - reportBadKeystroke(); + LLUI::reportBadKeystroke(); } else if( mKeystrokeCallback ) @@ -1129,7 +1108,7 @@ void LLLineEditor::pasteHelper(bool is_primary) } // Truncate the clean string at the limit of what will fit clean_string = clean_string.substr(0, wchars_that_fit); - reportBadKeystroke(); + LLUI::reportBadKeystroke(); } mText.insert(getCursor(), clean_string); @@ -1141,7 +1120,7 @@ void LLLineEditor::pasteHelper(bool is_primary) if( need_to_rollback ) { rollback.doRollback( this ); - reportBadKeystroke(); + LLUI::reportBadKeystroke(); } else if( mKeystrokeCallback ) @@ -1206,7 +1185,7 @@ BOOL LLLineEditor::handleSpecialKey(KEY key, MASK mask) } else { - reportBadKeystroke(); + LLUI::reportBadKeystroke(); } } handled = TRUE; @@ -1255,7 +1234,7 @@ BOOL LLLineEditor::handleSpecialKey(KEY key, MASK mask) } else { - reportBadKeystroke(); + LLUI::reportBadKeystroke(); } handled = TRUE; } @@ -1282,7 +1261,7 @@ BOOL LLLineEditor::handleSpecialKey(KEY key, MASK mask) } else { - reportBadKeystroke(); + LLUI::reportBadKeystroke(); } handled = TRUE; } @@ -1299,7 +1278,7 @@ BOOL LLLineEditor::handleSpecialKey(KEY key, MASK mask) } else { - reportBadKeystroke(); + LLUI::reportBadKeystroke(); } handled = TRUE; } @@ -1316,7 +1295,7 @@ BOOL LLLineEditor::handleSpecialKey(KEY key, MASK mask) } else { - reportBadKeystroke(); + LLUI::reportBadKeystroke(); } handled = TRUE; } @@ -1339,64 +1318,6 @@ BOOL LLLineEditor::handleSpecialKey(KEY key, MASK mask) break; } - if( !handled && mHandleEditKeysDirectly ) - { - // Standard edit keys (Ctrl-X, Delete, etc,) are handled here instead of routed by the menu system. - if( KEY_DELETE == key ) - { - if( canDoDelete() ) - { - doDelete(); - } - else - { - reportBadKeystroke(); - } - handled = TRUE; - } - else - if( MASK_CONTROL & mask ) - { - if( 'C' == key ) - { - if( canCopy() ) - { - copy(); - } - else - { - reportBadKeystroke(); - } - handled = TRUE; - } - else - if( 'V' == key ) - { - if( canPaste() ) - { - paste(); - } - else - { - reportBadKeystroke(); - } - handled = TRUE; - } - else - if( 'X' == key ) - { - if( canCut() ) - { - cut(); - } - else - { - reportBadKeystroke(); - } - handled = TRUE; - } - } - } return handled; } @@ -1451,7 +1372,7 @@ BOOL LLLineEditor::handleKeyHere(KEY key, MASK mask ) { rollback.doRollback(this); - reportBadKeystroke(); + LLUI::reportBadKeystroke(); } // Notify owner if requested @@ -1499,7 +1420,7 @@ BOOL LLLineEditor::handleUnicodeCharHere(llwchar uni_char) { rollback.doRollback( this ); - reportBadKeystroke(); + LLUI::reportBadKeystroke(); } // Notify owner if requested @@ -1544,7 +1465,7 @@ void LLLineEditor::doDelete() if( need_to_rollback ) { rollback.doRollback( this ); - reportBadKeystroke(); + LLUI::reportBadKeystroke(); } else { @@ -1879,11 +1800,6 @@ S32 LLLineEditor::findPixelNearestPos(const S32 cursor_offset) const return result; } -void LLLineEditor::reportBadKeystroke() -{ - make_ui_sound("UISndBadKeystroke"); -} - //virtual void LLLineEditor::clear() { diff --git a/indra/llui/lllineeditor.h b/indra/llui/lllineeditor.h index b62138426b9428d7b100298ec2491a34610697ef..9489e723e320a9b225505dcf12ff7dcee06e9774 100644 --- a/indra/llui/lllineeditor.h +++ b/indra/llui/lllineeditor.h @@ -81,7 +81,6 @@ class LLLineEditor background_image_focused; Optional<bool> select_on_focus, - handle_edit_keys_directly, revert_on_esc, commit_on_focus_lost, ignore_tab; @@ -215,7 +214,6 @@ class LLLineEditor void extendSelection(S32 new_cursor_pos); void deleteSelection(); - void setHandleEditKeysDirectly( BOOL b ) { mHandleEditKeysDirectly = b; } void setSelectAllonFocusReceived(BOOL b); typedef boost::function<void (LLLineEditor* caller, void* user_data)> callback_t; @@ -247,7 +245,6 @@ class LLLineEditor void addChar(const llwchar c); void setCursorAtLocalPos(S32 local_mouse_x); S32 findPixelNearestPos(S32 cursor_offset = 0) const; - void reportBadKeystroke(); BOOL handleSpecialKey(KEY key, MASK mask); BOOL handleSelectionKey(KEY key, MASK mask); BOOL handleControlKey(KEY key, MASK mask); @@ -325,7 +322,6 @@ class LLLineEditor BOOL mIgnoreTab; BOOL mDrawAsterixes; - BOOL mHandleEditKeysDirectly; // If true, the standard edit keys (Ctrl-X, Delete, etc,) are handled here instead of routed by the menu system BOOL mSelectAllonFocusReceived; BOOL mPassDelete; diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp index fb4a9d032d6b1c5009ce6b35b1879cda0a04085a..e0e86ae228f90593dea75e65230549568b740ee9 100644 --- a/indra/llui/llmenugl.cpp +++ b/indra/llui/llmenugl.cpp @@ -3345,7 +3345,7 @@ void LLMenuHolderGL::draw() LLView::draw(); // now draw last selected item as overlay LLMenuItemGL* selecteditem = (LLMenuItemGL*)sItemLastSelectedHandle.get(); - if (selecteditem && sItemActivationTimer.getStarted() && sItemActivationTimer.getElapsedTimeF32() < ACTIVATE_HIGHLIGHT_TIME) + if (selecteditem && selecteditem->getVisible() && sItemActivationTimer.getStarted() && sItemActivationTimer.getElapsedTimeF32() < ACTIVATE_HIGHLIGHT_TIME) { // make sure toggle items, for example, show the proper state when fading out selecteditem->buildDrawLabel(); diff --git a/indra/llui/llmultifloater.cpp b/indra/llui/llmultifloater.cpp index 4af9108329ae6dbb131150a8764fc7d8d04942ea..3aea648562d5bb2126b0c85cdd19c8b490b6ae91 100644 --- a/indra/llui/llmultifloater.cpp +++ b/indra/llui/llmultifloater.cpp @@ -345,7 +345,7 @@ void LLMultiFloater::setVisible(BOOL visible) BOOL LLMultiFloater::handleKeyHere(KEY key, MASK mask) { - if (key == 'W' && mask == MASK_CONTROL) + if (key == 'W' && mask == (MASK_CONTROL|MASK_SHIFT)) { LLFloater* floater = getActiveFloater(); // is user closeable and is system closeable diff --git a/indra/llui/llnotifications.h b/indra/llui/llnotifications.h index 707a84bdfe7eb217cb4456487b2744c602a636ba..1799ca65b7ac4eb9f62d6103b60e996ab122402f 100644 --- a/indra/llui/llnotifications.h +++ b/indra/llui/llnotifications.h @@ -994,7 +994,7 @@ class LLPostponedNotification protected: LLPostponedNotification() {} - ~LLPostponedNotification() {} + virtual ~LLPostponedNotification() {} /** * Abstract method provides possibility to modify notification parameters and diff --git a/indra/llui/llscrollingpanellist.cpp b/indra/llui/llscrollingpanellist.cpp index 4f55c0507c5defd8666b8262c4299ee861a9d0c1..b7840d1b59f906aaac8d8128ef122c27d9fa547d 100644 --- a/indra/llui/llscrollingpanellist.cpp +++ b/indra/llui/llscrollingpanellist.cpp @@ -47,7 +47,12 @@ void LLScrollingPanelList::clearPanels() { deleteAllChildren(); mPanelList.clear(); - reshape( 1, 1, FALSE ); + + LLRect rc = getRect(); + rc.setLeftTopAndSize(rc.mLeft, rc.mTop, 1, 1); + setRect(rc); + + notifySizeChanged(rc.getHeight()); } S32 LLScrollingPanelList::addPanel( LLScrollingPanel* panel ) @@ -67,7 +72,11 @@ S32 LLScrollingPanelList::addPanel( LLScrollingPanel* panel ) max_width = llmax( max_width, childp->getRect().getWidth() ); cur_gap = GAP_BETWEEN_PANELS; } - reshape( max_width, total_height, FALSE ); + LLRect rc = getRect(); + rc.setLeftTopAndSize(rc.mLeft, rc.mTop, max_width, total_height); + setRect(rc); + + notifySizeChanged(rc.getHeight()); // Reposition each of the child views S32 cur_y = total_height; @@ -131,7 +140,11 @@ void LLScrollingPanelList::removePanel( U32 panel_index ) max_width = llmax( max_width, childp->getRect().getWidth() ); cur_gap = GAP_BETWEEN_PANELS; } - reshape( max_width, total_height, FALSE ); + LLRect rc = getRect(); + rc.setLeftTopAndSize(rc.mLeft, rc.mTop, max_width, total_height); + setRect(rc); + + notifySizeChanged(rc.getHeight()); // Reposition each of the child views S32 cur_y = total_height; @@ -200,3 +213,12 @@ void LLScrollingPanelList::draw() LLUICtrl::draw(); } +void LLScrollingPanelList::notifySizeChanged(S32 height) +{ + LLSD info; + info["action"] = "size_changes"; + info["height"] = height; + notifyParent(info); +} + +// EOF diff --git a/indra/llui/llscrollingpanellist.h b/indra/llui/llscrollingpanellist.h index 3abfbcbbe7800ffcb483f5e2485859508556c2df..5f1996159b3990d241cfc15a9f6066abafc4c326 100644 --- a/indra/llui/llscrollingpanellist.h +++ b/indra/llui/llscrollingpanellist.h @@ -61,7 +61,6 @@ class LLScrollingPanelList : public LLUICtrl Params() { name = "scrolling_panel_list"; - follows.flags = FOLLOWS_LEFT | FOLLOWS_BOTTOM; } }; LLScrollingPanelList(const Params& p) @@ -86,6 +85,11 @@ class LLScrollingPanelList : public LLUICtrl private: void updatePanelVisiblilty(); + /** + * Notify parent about size change, makes sense when used inside accordion + */ + void notifySizeChanged(S32 height); + panel_list_t mPanelList; }; diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp index bf0866a6550f127d44b3bb4a7d82005742ab56ca..db0f2bd6e2b3d0ed2582cb58a6ff2b6098b26183 100644 --- a/indra/llui/llscrolllistctrl.cpp +++ b/indra/llui/llscrolllistctrl.cpp @@ -324,11 +324,6 @@ LLScrollListCtrl::~LLScrollListCtrl() delete mSortCallback; std::for_each(mItemList.begin(), mItemList.end(), DeletePointer()); - - if( gEditMenuHandler == this ) - { - gEditMenuHandler = NULL; - } } diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index 56d7a63832c3fb495d22eb15d33e7652f513392a..e08026eaf4024766889896a7b96ec02dc91af77a 100644 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -1058,6 +1058,13 @@ void LLTextBase::setValue(const LLSD& value ) setText(value.asString()); } +//virtual +BOOL LLTextBase::canDeselect() const +{ + return hasSelection(); +} + + //virtual void LLTextBase::deselect() { diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h index 5b24c635577b643d5015251a8fc1977ec16ae4e4..8ed0680df9a16818c138051bf1b5be892a5908e2 100644 --- a/indra/llui/lltextbase.h +++ b/indra/llui/lltextbase.h @@ -132,6 +132,7 @@ class LLTextBase /*virtual*/ LLTextViewModel* getViewModel() const; // LLEditMenuHandler interface + /*virtual*/ BOOL canDeselect() const; /*virtual*/ void deselect(); // used by LLTextSegment layout code diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp index 7d230f7d42a7a6746aa034deeed32304c59602e0..a1cae4bb988fe24a57ec30c1d2c43fd2a6789ccc 100644 --- a/indra/llui/lltexteditor.cpp +++ b/indra/llui/lltexteditor.cpp @@ -240,7 +240,6 @@ LLTextEditor::Params::Params() prevalidate_callback("prevalidate_callback"), embedded_items("embedded_items", false), ignore_tab("ignore_tab", true), - handle_edit_keys_directly("handle_edit_keys_directly", false), show_line_numbers("show_line_numbers", false), default_color("default_color"), commit_on_focus_lost("commit_on_focus_lost", false), @@ -258,7 +257,6 @@ LLTextEditor::LLTextEditor(const LLTextEditor::Params& p) : mShowLineNumbers ( p.show_line_numbers ), mCommitOnFocusLost( p.commit_on_focus_lost), mAllowEmbeddedItems( p.embedded_items ), - mHandleEditKeysDirectly( p.handle_edit_keys_directly ), mMouseDownX(0), mMouseDownY(0), mTabsToNextField(p.ignore_tab), @@ -305,12 +303,6 @@ LLTextEditor::~LLTextEditor() { gFocusMgr.releaseFocusIfNeeded( this ); // calls onCommit() while LLTextEditor still valid - // Route menu back to the default - if( gEditMenuHandler == this ) - { - gEditMenuHandler = NULL; - } - // Scrollbar is deleted by LLView std::for_each(mUndoStack.begin(), mUndoStack.end(), DeletePointer()); @@ -507,21 +499,6 @@ void LLTextEditor::getSegmentsInRange(LLTextEditor::segment_vec_t& segments_out, } } -// virtual -BOOL LLTextEditor::canDeselect() const -{ - return hasSelection(); -} - - -void LLTextEditor::deselect() -{ - mSelectionStart = 0; - mSelectionEnd = 0; - mIsSelecting = FALSE; -} - - BOOL LLTextEditor::selectionContainsLineBreaks() { if (hasSelection()) @@ -668,6 +645,7 @@ void LLTextEditor::selectAll() mSelectionStart = getLength(); mSelectionEnd = 0; setCursorPos(mSelectionEnd); + updatePrimary(); } BOOL LLTextEditor::handleMouseDown(S32 x, S32 y, MASK mask) @@ -1025,7 +1003,7 @@ void LLTextEditor::removeCharOrTab() } else { - reportBadKeystroke(); + LLUI::reportBadKeystroke(); } } @@ -1048,7 +1026,7 @@ void LLTextEditor::removeChar() } else { - reportBadKeystroke(); + LLUI::reportBadKeystroke(); } } @@ -1198,22 +1176,6 @@ BOOL LLTextEditor::handleSelectionKey(const KEY key, const MASK mask) } } - if( !handled && mHandleEditKeysDirectly ) - { - if( (MASK_CONTROL & mask) && ('A' == key) ) - { - if( canSelectAll() ) - { - selectAll(); - } - else - { - reportBadKeystroke(); - } - handled = TRUE; - } - } - if( handled ) { // take selection to 'primary' clipboard @@ -1247,6 +1209,7 @@ BOOL LLTextEditor::handleNavigationKey(const KEY key, const MASK mask) case KEY_DOWN: changeLine( 1 ); + deselect(); break; case KEY_PAGE_DOWN: @@ -1260,7 +1223,7 @@ BOOL LLTextEditor::handleNavigationKey(const KEY key, const MASK mask) case KEY_LEFT: if( hasSelection() ) { - setCursorPos(llmin( mCursorPos - 1, mSelectionStart, mSelectionEnd )); + setCursorPos(llmin( mSelectionStart, mSelectionEnd )); } else { @@ -1270,7 +1233,7 @@ BOOL LLTextEditor::handleNavigationKey(const KEY key, const MASK mask) } else { - reportBadKeystroke(); + LLUI::reportBadKeystroke(); } } break; @@ -1278,7 +1241,7 @@ BOOL LLTextEditor::handleNavigationKey(const KEY key, const MASK mask) case KEY_RIGHT: if( hasSelection() ) { - setCursorPos(llmax( mCursorPos + 1, mSelectionStart, mSelectionEnd )); + setCursorPos(llmax( mSelectionStart, mSelectionEnd )); } else { @@ -1288,7 +1251,7 @@ BOOL LLTextEditor::handleNavigationKey(const KEY key, const MASK mask) } else { - reportBadKeystroke(); + LLUI::reportBadKeystroke(); } } break; @@ -1299,6 +1262,11 @@ BOOL LLTextEditor::handleNavigationKey(const KEY key, const MASK mask) } } + if (handled) + { + deselect(); + } + return handled; } @@ -1551,75 +1519,13 @@ BOOL LLTextEditor::handleControlKey(const KEY key, const MASK mask) return handled; } -BOOL LLTextEditor::handleEditKey(const KEY key, const MASK mask) -{ - BOOL handled = FALSE; - // Standard edit keys (Ctrl-X, Delete, etc,) are handled here instead of routed by the menu system. - if( KEY_DELETE == key ) - { - if( canDoDelete() ) - { - doDelete(); - } - else - { - reportBadKeystroke(); - } - handled = TRUE; - } - else - if( MASK_CONTROL & mask ) +BOOL LLTextEditor::handleSpecialKey(const KEY key, const MASK mask) { - if( 'C' == key ) - { - if( canCopy() ) - { - copy(); - } - else - { - reportBadKeystroke(); - } - handled = TRUE; - } - else - if( 'V' == key ) - { - if( canPaste() ) - { - paste(); - } - else - { - reportBadKeystroke(); - } - handled = TRUE; - } - else - if( 'X' == key ) - { - if( canCut() ) - { - cut(); - } - else - { - reportBadKeystroke(); - } - handled = TRUE; - } - } - - return handled; -} - - -BOOL LLTextEditor::handleSpecialKey(const KEY key, const MASK mask, BOOL* return_key_hit) -{ - *return_key_hit = FALSE; BOOL handled = TRUE; + if (mReadOnly) return FALSE; + switch( key ) { case KEY_INSERT: @@ -1641,7 +1547,7 @@ BOOL LLTextEditor::handleSpecialKey(const KEY key, const MASK mask, BOOL* return } else { - reportBadKeystroke(); + LLUI::reportBadKeystroke(); } break; @@ -1694,6 +1600,10 @@ BOOL LLTextEditor::handleSpecialKey(const KEY key, const MASK mask, BOOL* return break; } + if (handled) + { + onKeyStroke(); + } return handled; } @@ -1714,9 +1624,6 @@ void LLTextEditor::unindentLineBeforeCloseBrace() BOOL LLTextEditor::handleKeyHere(KEY key, MASK mask ) { BOOL handled = FALSE; - BOOL selection_modified = FALSE; - BOOL return_key_hit = FALSE; - BOOL text_may_have_changed = TRUE; // Special case for TAB. If want to move to next field, report // not handled and let the parent take care of field movement. @@ -1724,116 +1631,24 @@ BOOL LLTextEditor::handleKeyHere(KEY key, MASK mask ) { return FALSE; } - /* - if (KEY_F10 == key) - { - LLComboBox::Params cp; - cp.name = "combo box"; - cp.label = "my combo"; - cp.rect.width = 100; - cp.rect.height = 20; - cp.items.add().label = "item 1"; - cp.items.add().label = "item 2"; - cp.items.add().label = "item 3"; - appendWidget(LLUICtrlFactory::create<LLComboBox>(cp), "combo", true, false); - } - if (KEY_F11 == key) - { - LLButton::Params bp; - bp.name = "text button"; - bp.label = "Click me"; - bp.rect.width = 100; - bp.rect.height = 20; - - appendWidget(LLUICtrlFactory::create<LLButton>(bp), "button", true, false); - } - */ - if (mReadOnly) + if (mReadOnly && mScroller) { - if(mScroller) - { - handled = mScroller->handleKeyHere( key, mask ); + handled = (mScroller && mScroller->handleKeyHere( key, mask )) + || handleSelectionKey(key, mask) + || handleControlKey(key, mask); } else { - handled = handleNavigationKey( key, mask ); - } - - } - else - { - // handle navigation keys ourself - handled = handleNavigationKey( key, mask ); - } - - - if( handled ) - { - text_may_have_changed = FALSE; - } - - if( !handled ) - { - handled = handleSelectionKey( key, mask ); - if( handled ) - { - selection_modified = TRUE; - } - } - - if( !handled ) - { - handled = handleControlKey( key, mask ); - if( handled ) - { - selection_modified = TRUE; - } - } - - if( !handled && mHandleEditKeysDirectly ) - { - handled = handleEditKey( key, mask ); - if( handled ) - { - selection_modified = TRUE; - text_may_have_changed = TRUE; - } - } - - // Handle most keys only if the text editor is writeable. - if( !mReadOnly ) - { - if( !handled ) - { - handled = handleSpecialKey( key, mask, &return_key_hit ); - if( handled ) - { - selection_modified = TRUE; - text_may_have_changed = TRUE; - } - } - + handled = handleNavigationKey( key, mask ) + || handleSelectionKey(key, mask) + || handleControlKey(key, mask) + || handleSpecialKey(key, mask); } if( handled ) { resetCursorBlink(); - - // Most keystrokes will make the selection box go away, but not all will. - if( !selection_modified && - KEY_SHIFT != key && - KEY_CONTROL != key && - KEY_ALT != key && - KEY_CAPSLOCK ) - { - deselect(); - } - - if(text_may_have_changed) - { - onKeyStroke(); - } needsScroll(); } @@ -2334,7 +2149,7 @@ void LLTextEditor::getCurrentLineAndColumn( S32* line, S32* col, BOOL include_wo void LLTextEditor::autoIndent() { // Count the number of spaces in the current line - S32 line = getLineNumFromDocIndex(mCursorPos); + S32 line = getLineNumFromDocIndex(mCursorPos, false); S32 line_start = getLineStart(line); S32 space_count = 0; S32 i; diff --git a/indra/llui/lltexteditor.h b/indra/llui/lltexteditor.h index 71d937b2c451253a7bcd39aaf6492211fa2cecbe..9b3ab9414ce5a588f959cab897bc9e618ef1fed6 100644 --- a/indra/llui/lltexteditor.h +++ b/indra/llui/lltexteditor.h @@ -68,7 +68,6 @@ class LLTextEditor : Optional<bool> embedded_items, ignore_tab, - handle_edit_keys_directly, show_line_numbers, commit_on_focus_lost, show_context_menu; @@ -146,8 +145,6 @@ class LLTextEditor : virtual BOOL canDoDelete() const; virtual void selectAll(); virtual BOOL canSelectAll() const; - virtual void deselect(); - virtual BOOL canDeselect() const; void selectNext(const std::string& search_text_in, BOOL case_insensitive, BOOL wrap = TRUE); BOOL replaceText(const std::string& search_text, const std::string& replace_text, BOOL case_insensitive, BOOL wrap = TRUE); @@ -218,13 +215,10 @@ class LLTextEditor : S32 indentLine( S32 pos, S32 spaces ); void unindentLineBeforeCloseBrace(); - void reportBadKeystroke() { make_ui_sound("UISndBadKeystroke"); } - BOOL handleNavigationKey(const KEY key, const MASK mask); - BOOL handleSpecialKey(const KEY key, const MASK mask, BOOL* return_key_hit); + BOOL handleSpecialKey(const KEY key, const MASK mask); BOOL handleSelectionKey(const KEY key, const MASK mask); BOOL handleControlKey(const KEY key, const MASK mask); - BOOL handleEditKey(const KEY key, const MASK mask); BOOL selectionContainsLineBreaks(); void deleteSelection(BOOL transient_operation); @@ -329,10 +323,6 @@ class LLTextEditor : LLUUID mSourceID; - // If true, the standard edit keys (Ctrl-X, Delete, etc,) are handled here - //instead of routed by the menu system - BOOL mHandleEditKeysDirectly; - LLCoordGL mLastIMEPosition; // Last position of the IME editor keystroke_signal_t mKeystrokeSignal; diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp index b049895526393e6a04818a03b7f00bc41981381c..f9a4ed7285dd65336db550a02862d4578c9f7534 100644 --- a/indra/llui/llui.cpp +++ b/indra/llui/llui.cpp @@ -1914,7 +1914,12 @@ void LLUI::clearPopups() } } - +//static +void LLUI::reportBadKeystroke() +{ + make_ui_sound("UISndBadKeystroke"); +} + //static // spawn_x and spawn_y are top left corner of view in screen GL coordinates void LLUI::positionViewNearMouse(LLView* view, S32 spawn_x, S32 spawn_y) diff --git a/indra/llui/llui.h b/indra/llui/llui.h index 30f3623dedcd300c590fb088419cec06289f8a6a..c18262ef76b6c63dbf88105cb4abfad730c648d9 100644 --- a/indra/llui/llui.h +++ b/indra/llui/llui.h @@ -217,6 +217,8 @@ class LLUI static void removePopup(LLView*); static void clearPopups(); + static void reportBadKeystroke(); + // Ensures view does not overlap mouse cursor, but is inside // the view's parent rectangle. Used for tooltips, inspectors. // Optionally override the view's default X/Y, which are relative to the diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp index e8e345967309ac3f6ecceba36391a0899f70c846..736de651da3a5720ba81ea6bc3f259c5ce6ba5ff 100644 --- a/indra/llui/llurlentry.cpp +++ b/indra/llui/llurlentry.cpp @@ -493,6 +493,35 @@ std::string LLUrlEntryInventory::getLabel(const std::string &url, const LLUrlLab return LLURI::unescape(label.empty() ? url : label); } +// +// LLUrlEntryObjectIM Describes a Second Life inspector for the object Url, e.g., +// secondlife:///app/objectim/7bcd7864-da6b-e43f-4486-91d28a28d95b?name=Object&owner=3de548e1-57be-cfea-2b78-83ae3ad95998&slurl=Danger!%20Danger!/200/200/30/&groupowned=1 +// +LLUrlEntryObjectIM::LLUrlEntryObjectIM() +{ + mPattern = boost::regex("secondlife:///app/objectim/[\\da-f-]+\?.*", + boost::regex::perl|boost::regex::icase); + mMenuName = "menu_url_objectim.xml"; +} + +std::string LLUrlEntryObjectIM::getLabel(const std::string &url, const LLUrlLabelCallback &cb) +{ + LLURI uri(url); + LLSD query_map = uri.queryMap(); + if (query_map.has("name")) + return query_map["name"]; + return unescapeUrl(url); +} + +std::string LLUrlEntryObjectIM::getLocation(const std::string &url) const +{ + LLURI uri(url); + LLSD query_map = uri.queryMap(); + if (query_map.has("slurl")) + return query_map["slurl"]; + return LLUrlEntryBase::getLocation(url); +} + /// /// LLUrlEntryParcel Describes a Second Life parcel Url, e.g., /// secondlife:///app/parcel/0000060e-4b39-e00b-d0c3-d98b1934e3a8/about @@ -703,7 +732,7 @@ std::string LLUrlEntryWorldMap::getLabel(const std::string &url, const LLUrlLabe } const std::string label = LLTrans::getString("SLurlLabelShowOnMap"); - std::string location = path_array[2]; + std::string location = unescapeUrl(path_array[2]); std::string x = (path_parts > 3) ? path_array[3] : "128"; std::string y = (path_parts > 4) ? path_array[4] : "128"; std::string z = (path_parts > 5) ? path_array[5] : "0"; diff --git a/indra/llui/llurlentry.h b/indra/llui/llurlentry.h index 84d09687798ef8bed89e66092844d710d1662ea9..29575d752ced36fca7fa35713084028004b41d1d 100644 --- a/indra/llui/llurlentry.h +++ b/indra/llui/llurlentry.h @@ -201,6 +201,18 @@ class LLUrlEntryInventory : public LLUrlEntryBase private: }; +/// +/// LLUrlEntryObjectIM Describes a Second Life inspector for the object Url, e.g., +/// secondlife:///app/objectim/7bcd7864-da6b-e43f-4486-91d28a28d95b?name=Object&owner=3de548e1-57be-cfea-2b78-83ae3ad95998&slurl=Danger!%20Danger!/200/200/30/&groupowned=1 +/// +class LLUrlEntryObjectIM : public LLUrlEntryBase +{ +public: + LLUrlEntryObjectIM(); + /*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb); + /*virtual*/ std::string getLocation(const std::string &url) const; +private: +}; /// /// LLUrlEntryParcel Describes a Second Life parcel Url, e.g., diff --git a/indra/llui/llurlregistry.cpp b/indra/llui/llurlregistry.cpp index faa02e19040e203a4bb1fcd6ffcb417ccc827330..0a70aa586a2cc40135232a4d9e992f27c3829ffe 100644 --- a/indra/llui/llurlregistry.cpp +++ b/indra/llui/llurlregistry.cpp @@ -53,8 +53,10 @@ LLUrlRegistry::LLUrlRegistry() registerUrl(new LLUrlEntryParcel()); registerUrl(new LLUrlEntryTeleport()); registerUrl(new LLUrlEntryWorldMap()); + registerUrl(new LLUrlEntryObjectIM()); registerUrl(new LLUrlEntryPlace()); registerUrl(new LLUrlEntryInventory()); + registerUrl(new LLUrlEntryObjectIM()); //LLUrlEntrySL and LLUrlEntrySLLabel have more common pattern, //so it should be registered in the end of list registerUrl(new LLUrlEntrySL()); diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp index 781c111474fd94e1748d23020d7801b6956b4fc3..e67f0ec3fcc1d5ce29647313985de0bd85d1a6ad 100644 --- a/indra/llui/llview.cpp +++ b/indra/llui/llview.cpp @@ -1321,6 +1321,8 @@ void LLView::drawChildren() if (viewp->getVisible() && viewp->getRect().isValid()) { + // check for bad data + llassert_always(viewp->getVisible() == TRUE); // Only draw views that are within the root view localRectToScreen(viewp->getRect(),&screenRect); if ( rootRect.overlaps(screenRect) && LLUI::sDirtyRect.overlaps(screenRect)) diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp index d726c600182a1d0fd29539e548b6e5af6708836b..95c1980dd6902e127887eea2522fb354fa84791d 100644 --- a/indra/llwindow/llwindowwin32.cpp +++ b/indra/llwindow/llwindowwin32.cpp @@ -2999,79 +2999,6 @@ void LLWindowWin32::spawnWebBrowser(const std::string& escaped_url, bool async) sei.lpVerb = L"open"; sei.lpFile = url_utf16.c_str(); ShellExecuteEx( &sei ); - - //// TODO: LEAVING OLD CODE HERE SO I DON'T BONE OTHER MERGES - //// DELETE THIS ONCE THE MERGES ARE DONE - - // Figure out the user's default web browser - // HKEY_CLASSES_ROOT\http\shell\open\command - /* - std::string reg_path_str = gURLProtocolWhitelistHandler[i] + "\\shell\\open\\command"; - WCHAR reg_path_wstr[256]; - mbstowcs( reg_path_wstr, reg_path_str.c_str(), LL_ARRAY_SIZE(reg_path_wstr) ); - - HKEY key; - WCHAR browser_open_wstr[1024]; - DWORD buffer_length = 1024; - RegOpenKeyEx(HKEY_CLASSES_ROOT, reg_path_wstr, 0, KEY_QUERY_VALUE, &key); - RegQueryValueEx(key, NULL, NULL, NULL, (LPBYTE)browser_open_wstr, &buffer_length); - RegCloseKey(key); - - // Convert to STL string - LLWString browser_open_wstring = utf16str_to_wstring(browser_open_wstr); - - if (browser_open_wstring.length() < 2) - { - LL_WARNS("Window") << "Invalid browser executable in registry " << browser_open_wstring << LL_ENDL; - return; - } - - // Extract the process that's supposed to be launched - LLWString browser_executable; - if (browser_open_wstring[0] == '"') - { - // executable is quoted, find the matching quote - size_t quote_pos = browser_open_wstring.find('"', 1); - // copy out the string including both quotes - browser_executable = browser_open_wstring.substr(0, quote_pos+1); - } - else - { - // executable not quoted, find a space - size_t space_pos = browser_open_wstring.find(' ', 1); - browser_executable = browser_open_wstring.substr(0, space_pos); - } - - LL_DEBUGS("Window") << "Browser reg key: " << wstring_to_utf8str(browser_open_wstring) << LL_ENDL; - LL_INFOS("Window") << "Browser executable: " << wstring_to_utf8str(browser_executable) << LL_ENDL; - - // Convert URL to wide string for Windows API - // Assume URL is UTF8, as can come from scripts - LLWString url_wstring = utf8str_to_wstring(escaped_url); - llutf16string url_utf16 = wstring_to_utf16str(url_wstring); - - // Convert executable and path to wide string for Windows API - llutf16string browser_exec_utf16 = wstring_to_utf16str(browser_executable); - - // ShellExecute returns HINSTANCE for backwards compatiblity. - // MS docs say to cast to int and compare to 32. - HWND our_window = NULL; - LPCWSTR directory_wstr = NULL; - int retval = (int) ShellExecute(our_window, // Flawfinder: ignore - L"open", - browser_exec_utf16.c_str(), - url_utf16.c_str(), - directory_wstr, - SW_SHOWNORMAL); - if (retval > 32) - { - LL_DEBUGS("Window") << "load_url success with " << retval << LL_ENDL; - } - else - { - LL_INFOS("Window") << "load_url failure with " << retval << LL_ENDL; - } - */ } /* diff --git a/indra/media_plugins/webkit/CMakeLists.txt b/indra/media_plugins/webkit/CMakeLists.txt index 9f66a77c6426b7b555a58d65b85e798d4fab7e2e..c3a3f8e2b22ad96e579c26a59f24511058746c65 100644 --- a/indra/media_plugins/webkit/CMakeLists.txt +++ b/indra/media_plugins/webkit/CMakeLists.txt @@ -45,12 +45,16 @@ set(media_plugin_webkit_LINK_LIBRARIES ${PULSEAUDIO_LIBRARIES} ) -if (LINUX) +# Select which VolumeCatcher implementation to use +if (LINUX AND PULSEAUDIO) list(APPEND media_plugin_webkit_SOURCE_FILES linux_volume_catcher.cpp) list(APPEND media_plugin_webkit_LINK_LIBRARIES ${UI_LIBRARIES} # for glib/GTK ) -endif (LINUX) +else (LINUX AND PULSEAUDIO) + # All other platforms use the dummy volume catcher for now. + list(APPEND media_plugin_webkit_SOURCE_FILES dummy_volume_catcher.cpp) +endif (LINUX AND PULSEAUDIO) add_library(media_plugin_webkit SHARED diff --git a/indra/media_plugins/webkit/dummy_volume_catcher.cpp b/indra/media_plugins/webkit/dummy_volume_catcher.cpp new file mode 100644 index 0000000000000000000000000000000000000000..45b2c62eba6e226ea06d83a830df963fcf91c35c --- /dev/null +++ b/indra/media_plugins/webkit/dummy_volume_catcher.cpp @@ -0,0 +1,63 @@ +/** + * @file dummy_volume_catcher.cpp + * @brief A null implementation of the "VolumeCatcher" class for platforms where it's not implemented yet. + * + * @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 "volume_catcher.h" + + +class VolumeCatcherImpl +{ +}; + +///////////////////////////////////////////////////// + +VolumeCatcher::VolumeCatcher() +{ + pimpl = NULL; +} + +VolumeCatcher::~VolumeCatcher() +{ +} + +void VolumeCatcher::setVolume(F32 volume) +{ +} + +void VolumeCatcher::setPan(F32 pan) +{ +} + +void VolumeCatcher::pump() +{ +} + diff --git a/indra/media_plugins/webkit/linux_volume_catcher.cpp b/indra/media_plugins/webkit/linux_volume_catcher.cpp index 52ab766f7f1a2016c45773487fcd89469c731c57..2e7fda865e78f7d26e387b71dac309a9f33c37c5 100644 --- a/indra/media_plugins/webkit/linux_volume_catcher.cpp +++ b/indra/media_plugins/webkit/linux_volume_catcher.cpp @@ -42,11 +42,9 @@ #include "linden_common.h" -#include "linux_volume_catcher.h" +#include "volume_catcher.h" -#if LL_PULSEAUDIO_ENABLED - extern "C" { #include <glib.h> @@ -161,11 +159,11 @@ extern "C" { } -class LinuxVolumeCatcherImpl +class VolumeCatcherImpl { public: - LinuxVolumeCatcherImpl(); - ~LinuxVolumeCatcherImpl(); + VolumeCatcherImpl(); + ~VolumeCatcherImpl(); void setVolume(F32 volume); void pump(void); @@ -189,7 +187,7 @@ class LinuxVolumeCatcherImpl bool mGotSyms; }; -LinuxVolumeCatcherImpl::LinuxVolumeCatcherImpl() +VolumeCatcherImpl::VolumeCatcherImpl() : mDesiredVolume(0.0f), mMainloop(NULL), mPAContext(NULL), @@ -199,17 +197,17 @@ LinuxVolumeCatcherImpl::LinuxVolumeCatcherImpl() init(); } -LinuxVolumeCatcherImpl::~LinuxVolumeCatcherImpl() +VolumeCatcherImpl::~VolumeCatcherImpl() { cleanup(); } -bool LinuxVolumeCatcherImpl::loadsyms(std::string pulse_dso_name) +bool VolumeCatcherImpl::loadsyms(std::string pulse_dso_name) { return grab_pa_syms(pulse_dso_name); } -void LinuxVolumeCatcherImpl::init() +void VolumeCatcherImpl::init() { // try to be as defensive as possible because PA's interface is a // bit fragile and (for our purposes) we'd rather simply not function @@ -262,7 +260,7 @@ void LinuxVolumeCatcherImpl::init() } } -void LinuxVolumeCatcherImpl::cleanup() +void VolumeCatcherImpl::cleanup() { mConnected = false; @@ -280,7 +278,7 @@ void LinuxVolumeCatcherImpl::cleanup() mMainloop = NULL; } -void LinuxVolumeCatcherImpl::setVolume(F32 volume) +void VolumeCatcherImpl::setVolume(F32 volume) { mDesiredVolume = volume; @@ -294,13 +292,13 @@ void LinuxVolumeCatcherImpl::setVolume(F32 volume) pump(); } -void LinuxVolumeCatcherImpl::pump() +void VolumeCatcherImpl::pump() { gboolean may_block = FALSE; g_main_context_iteration(g_main_context_default(), may_block); } -void LinuxVolumeCatcherImpl::connected_okay() +void VolumeCatcherImpl::connected_okay() { pa_operation *op; @@ -324,7 +322,7 @@ void LinuxVolumeCatcherImpl::connected_okay() } } -void LinuxVolumeCatcherImpl::update_all_volumes(F32 volume) +void VolumeCatcherImpl::update_all_volumes(F32 volume) { for (std::set<U32>::iterator it = mSinkInputIndices.begin(); it != mSinkInputIndices.end(); ++it) @@ -333,7 +331,7 @@ void LinuxVolumeCatcherImpl::update_all_volumes(F32 volume) } } -void LinuxVolumeCatcherImpl::update_index_volume(U32 index, F32 volume) +void VolumeCatcherImpl::update_index_volume(U32 index, F32 volume) { static pa_cvolume cvol; llpa_cvolume_set(&cvol, mSinkInputNumChannels[index], @@ -355,7 +353,7 @@ void LinuxVolumeCatcherImpl::update_index_volume(U32 index, F32 volume) void callback_discovered_sinkinput(pa_context *context, const pa_sink_input_info *sii, int eol, void *userdata) { - LinuxVolumeCatcherImpl *impl = dynamic_cast<LinuxVolumeCatcherImpl*>((LinuxVolumeCatcherImpl*)userdata); + VolumeCatcherImpl *impl = dynamic_cast<VolumeCatcherImpl*>((VolumeCatcherImpl*)userdata); llassert(impl); if (0 == eol) @@ -386,7 +384,7 @@ void callback_discovered_sinkinput(pa_context *context, const pa_sink_input_info void callback_subscription_alert(pa_context *context, pa_subscription_event_type_t t, uint32_t index, void *userdata) { - LinuxVolumeCatcherImpl *impl = dynamic_cast<LinuxVolumeCatcherImpl*>((LinuxVolumeCatcherImpl*)userdata); + VolumeCatcherImpl *impl = dynamic_cast<VolumeCatcherImpl*>((VolumeCatcherImpl*)userdata); llassert(impl); switch (t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) { @@ -420,7 +418,7 @@ void callback_subscription_alert(pa_context *context, pa_subscription_event_type void callback_context_state(pa_context *context, void *userdata) { - LinuxVolumeCatcherImpl *impl = dynamic_cast<LinuxVolumeCatcherImpl*>((LinuxVolumeCatcherImpl*)userdata); + VolumeCatcherImpl *impl = dynamic_cast<VolumeCatcherImpl*>((VolumeCatcherImpl*)userdata); llassert(impl); switch (llpa_context_get_state(context)) @@ -441,48 +439,30 @@ void callback_context_state(pa_context *context, void *userdata) ///////////////////////////////////////////////////// -LinuxVolumeCatcher::LinuxVolumeCatcher() +VolumeCatcher::VolumeCatcher() { - pimpl = new LinuxVolumeCatcherImpl(); + pimpl = new VolumeCatcherImpl(); } -LinuxVolumeCatcher::~LinuxVolumeCatcher() +VolumeCatcher::~VolumeCatcher() { delete pimpl; pimpl = NULL; } -void LinuxVolumeCatcher::setVolume(F32 volume) +void VolumeCatcher::setVolume(F32 volume) { llassert(pimpl); pimpl->setVolume(volume); } -void LinuxVolumeCatcher::pump() -{ - llassert(pimpl); - pimpl->pump(); -} - -#else // !LL_PULSEAUDIO_ENABLED - -// stub. - -LinuxVolumeCatcher::LinuxVolumeCatcher() -{ - pimpl = NULL; -} - -LinuxVolumeCatcher::~LinuxVolumeCatcher() +void VolumeCatcher::setPan(F32 pan) { + // TODO: implement this (if possible) } -void LinuxVolumeCatcher::setVolume(F32 volume) -{ -} - -void LinuxVolumeCatcher::pump() +void VolumeCatcher::pump() { + llassert(pimpl); + pimpl->pump(); } - -#endif // LL_PULSEAUDIO_ENABLED diff --git a/indra/media_plugins/webkit/media_plugin_webkit.cpp b/indra/media_plugins/webkit/media_plugin_webkit.cpp index 436e077e9b65c695035a334bf3c104859485d8de..47766a24cbd0f97ae071de530309a53bed7561b7 100644 --- a/indra/media_plugins/webkit/media_plugin_webkit.cpp +++ b/indra/media_plugins/webkit/media_plugin_webkit.cpp @@ -50,9 +50,7 @@ # define LL_QTWEBKIT_USES_PIXMAPS 0 #endif // LL_LINUX -#if LL_LINUX -# include "linux_volume_catcher.h" -#endif // LL_LINUX +# include "volume_catcher.h" #if LL_WINDOWS # include <direct.h> @@ -119,9 +117,7 @@ class MediaPluginWebKit : F32 mBackgroundG; F32 mBackgroundB; -#if LL_LINUX - LinuxVolumeCatcher mLinuxVolumeCatcher; -#endif // LL_LINUX + VolumeCatcher mVolumeCatcher; void setInitState(int state) { @@ -135,9 +131,7 @@ class MediaPluginWebKit : { LLQtWebKit::getInstance()->pump( milliseconds ); -#if LL_LINUX - mLinuxVolumeCatcher.pump(); -#endif // LL_LINUX + mVolumeCatcher.pump(); checkEditState(); @@ -1139,9 +1133,7 @@ void MediaPluginWebKit::receiveMessage(const char *message_string) void MediaPluginWebKit::setVolume(F32 volume) { -#if LL_LINUX - mLinuxVolumeCatcher.setVolume(volume); -#endif // LL_LINUX + mVolumeCatcher.setVolume(volume); } int init_media_plugin(LLPluginInstance::sendMessageFunction host_send_func, void *host_user_data, LLPluginInstance::sendMessageFunction *plugin_send_func, void **plugin_user_data) diff --git a/indra/media_plugins/webkit/volume_catcher.h b/indra/media_plugins/webkit/volume_catcher.h new file mode 100644 index 0000000000000000000000000000000000000000..77b10cfed0a490bcfd3a08ddf279c0f13ab9721d --- /dev/null +++ b/indra/media_plugins/webkit/volume_catcher.h @@ -0,0 +1,59 @@ +/** + * @file volume_catcher.h + * @brief Interface to a class with platform-specific implementations that allows control of the audio volume of all sources in the current process. + * + * @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 VOLUME_CATCHER_H +#define VOLUME_CATCHER_H + +#include "linden_common.h" + +class VolumeCatcherImpl; + +class VolumeCatcher +{ + public: + VolumeCatcher(); + ~VolumeCatcher(); + + void setVolume(F32 volume); // 0.0 - 1.0 + + // Set the left-right pan of audio sources + // where -1.0 = left, 0 = center, and 1.0 = right + void setPan(F32 pan); + + void pump(); // call this at least a few times a second if you can - it affects how quickly we can 'catch' a new audio source and adjust its volume + + private: + VolumeCatcherImpl *pimpl; +}; + +#endif // VOLUME_CATCHER_H diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 14acf3eadaa04428287625942b34ce920de33dee..a53aba691dca0a1a9e8b1c6f816a15a7abac7ed7 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -2575,6 +2575,17 @@ <key>Value</key> <real>0.10000000149</real> </map> + <key>DragAndDropDistanceThreshold</key> + <map> + <key>Comment</key> + <string>Number of pixels that mouse should move before triggering drag and drop mode</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>S32</string> + <key>Value</key> + <integer>3</integer> + </map> <key>DropShadowButton</key> <map> <key>Comment</key> @@ -6481,6 +6492,52 @@ <real>0.01</real> </map> + <key>RenderShadowBiasError</key> + <map> + <key>Comment</key> + <string>Error scale for shadow bias (based on altitude).</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>0</real> + </map> + <key>RenderShadowOffsetError</key> + <map> + <key>Comment</key> + <string>Error scale for shadow offset (based on altitude).</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>0</real> + </map> + + <key>RenderSpotShadowBias</key> + <map> + <key>Comment</key> + <string>Bias value for shadows (prevent shadow acne).</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>-0.0005</real> + </map> + <key>RenderSpotShadowOffset</key> + <map> + <key>Comment</key> + <string>Offset value for shadows (prevent shadow acne).</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>0.01</real> + </map> + <key>RenderShadowResolutionScale</key> <map> <key>Comment</key> @@ -6493,8 +6550,6 @@ <real>1.0</real> </map> - - <key>RenderDeferredTreeShadowBias</key> <map> <key>Comment</key> @@ -8163,13 +8218,13 @@ <key>NearbyPeopleSortOrder</key> <map> <key>Comment</key> - <string>Specifies sort order for nearby people (0 = by name, 2 = by most recent)</string> + <string>Specifies sort order for nearby people (0 = by name, 3 = by distance, 4 = by most recent)</string> <key>Persist</key> <integer>1</integer> <key>Type</key> <string>U32</string> <key>Value</key> - <integer>2</integer> + <integer>4</integer> </map> <key>RecentPeopleSortOrder</key> <map> @@ -8699,17 +8754,6 @@ <key>Value</key> <integer>1</integer> </map> - <key>SmallAvatarNames</key> - <map> - <key>Comment</key> - <string>Display avatar name text in smaller font</string> - <key>Persist</key> - <integer>1</integer> - <key>Type</key> - <string>Boolean</string> - <key>Value</key> - <integer>1</integer> - </map> <key>SnapEnabled</key> <map> <key>Comment</key> @@ -10646,7 +10690,7 @@ <key>Type</key> <string>Boolean</string> <key>Value</key> - <integer>0</integer> + <integer>1</integer> </map> <key>WaterEditPresets</key> <map> diff --git a/indra/newview/app_settings/settings_per_account.xml b/indra/newview/app_settings/settings_per_account.xml index af5fa4f3889de03748bbba5536dfec1f9f291273..3ce32a05b0de4dd9e3094c516a679145b351968a 100644 --- a/indra/newview/app_settings/settings_per_account.xml +++ b/indra/newview/app_settings/settings_per_account.xml @@ -22,17 +22,6 @@ <key>Value</key> <string>|TOKEN COPY BusyModeResponse|</string> </map> - <key>InstantMessageLogFolder</key> - <map> - <key>Comment</key> - <string>Top level folder to your log files.</string> - <key>Persist</key> - <integer>1</integer> - <key>Type</key> - <string>String</string> - <key>Value</key> - <string /> - </map> <key>InstantMessageLogPath</key> <map> <key>Comment</key> @@ -55,10 +44,10 @@ <key>Value</key> <integer>0</integer> </map> - <key>LogChat</key> + <key>LogNearbyChat</key> <map> <key>Comment</key> - <string>Log Chat</string> + <string>Log Nearby Chat messages to a file. Is used instead of LogChat but with the "1" default value.</string> <key>Persist</key> <integer>1</integer> <key>Type</key> @@ -110,5 +99,46 @@ <key>Value</key> <integer>1</integer> </map> + + <!-- Settings below are for back compatibility only. + They are not used in current viewer anymore. But they can't be removed to avoid + influence on previous versions of the viewer in case of settings are not used or default value + should be changed. See EXT-6661. --> + + <!-- 1.23 settings --> + <key>LogChat</key> + <map> + <key>Comment</key> + <string>Log Chat</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>0</integer> + </map> + <key>LogChatIM</key> + <map> + <key>Comment</key> + <string>Log Incoming Instant Messages with Chat</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>0</integer> + </map> + <key>LogChatTimestamp</key> + <map> + <key>Comment</key> + <string>Log Timestamp of Chat</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>0</integer> + </map> + <!-- End of back compatibility settings --> </map> </llsd> diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl index 155f03fdcf908be102160ebca36509b3cc07be11..158eef9319eb003a99f9e08f0492732846d26172 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl @@ -282,12 +282,13 @@ void main() { // the old infinite-sky shiny reflection // - vec3 refnorm = normalize(reflect(pos.xyz, norm.xyz)); - float sa = dot(refnorm, vary_light.xyz); + vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz)); + float sa = dot(refnormpersp, vary_light.xyz); vec3 dumbshiny = vary_SunlitColor*scol_ambocc.r*texture2D(lightFunc, vec2(sa, spec.a)).a; // screen-space cheap fakey reflection map // + vec3 refnorm = normalize(reflect(vec3(0,0,-1), norm.xyz)); depth -= 0.5; // unbias depth // first figure out where we'll make our 2D guess from vec2 ref2d = (0.25 * screen_res.y) * (refnorm.xy) * abs(refnorm.z) / depth; @@ -298,22 +299,33 @@ void main() // The goal of the blur is to soften reflections in surfaces // with low shinyness, and also to disguise our lameness. float checkerboard = floor(mod(tc.x+tc.y, 2.0)); // 0.0, 1.0 - ref2d += normalize(ref2d)*14.0*(1.0-spec.a)*(checkerboard-0.5); + vec2 checkoffset = normalize(ref2d)*5.0*(1.0-spec.a)*(checkerboard-0.5); + ref2d += checkoffset; ref2d += tc.xy; // use as offset from destination - // get attributes from the 2D guess point + // Get attributes from the 2D guess point. + // We average two samples of diffuse (not of anything else) per + // pixel to try to reduce aliasing some more. + // --------------------- + // ^ ^ ^ ^ ^ + // a . b o c . d check=0:avg(a,b) check=1:avg(c,d) + vec3 refcol = 0.5 * (texture2DRect(diffuseRect, ref2d).rgb + + texture2DRect(diffuseRect, ref2d + checkoffset*2.0).rgb); float refdepth = texture2DRect(depthMap, ref2d).a; vec3 refpos = getPosition_d(ref2d, refdepth).xyz; - vec3 refcol = texture2DRect(diffuseRect, ref2d).rgb; vec3 refn = normalize(texture2DRect(normalMap, ref2d).rgb * 2.0 - 1.0); // figure out how appropriate our guess actually was float refapprop = max(0.0, dot(-refnorm, normalize(pos - refpos))); // darken reflections from points which face away from the reflected ray - our guess was a back-face //refapprop *= step(dot(refnorm, refn), 0.0); refapprop = min(refapprop, max(0.0, -dot(refnorm, refn))); // more conservative variant - // get appropriate light strength for guess-point - float reflit = max(dot(refn, lightnorm.xyz), 0.0); + // get appropriate light strength for guess-point. + // reflect light direction to increase the illusion that + // these are reflections. + vec3 reflight = reflect(lightnorm.xyz, norm.xyz); + float reflit = max(dot(refn, reflight.xyz), 0.0); // apply sun color to guess-point, dampen according to inappropriateness of guess - vec3 refprod = (vary_SunlitColor*reflit) * refcol.rgb * refapprop; + float refmod = min(refapprop, reflit); + vec3 refprod = vary_SunlitColor * refcol.rgb * refmod; vec3 ssshiny = (refprod * spec.a); // add the two types of shiny together diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl index 922a07c306694e9d8e446f383992b364b6c4a967..dbccb7fb8bc256fc64a069d583a7184bf71e091d 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl @@ -281,12 +281,13 @@ void main() { // the old infinite-sky shiny reflection // - vec3 refnorm = normalize(reflect(pos.xyz, norm.xyz)); - float sa = dot(refnorm, vary_light.xyz); + vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz)); + float sa = dot(refnormpersp, vary_light.xyz); vec3 dumbshiny = vary_SunlitColor*scol_ambocc.r*texture2D(lightFunc, vec2(sa, spec.a)).a; // screen-space cheap fakey reflection map // + vec3 refnorm = normalize(reflect(vec3(0,0,-1), norm.xyz)); depth -= 0.5; // unbias depth // first figure out where we'll make our 2D guess from vec2 ref2d = (0.25 * screen_res.y) * (refnorm.xy) * abs(refnorm.z) / depth; @@ -297,12 +298,19 @@ void main() // The goal of the blur is to soften reflections in surfaces // with low shinyness, and also to disguise our lameness. float checkerboard = floor(mod(tc.x+tc.y, 2.0)); // 0.0, 1.0 - ref2d += normalize(ref2d)*14.0*(1.0-spec.a)*(checkerboard-0.5); + vec2 checkoffset = normalize(ref2d)*5.0*(1.0-spec.a)*(checkerboard-0.5); + ref2d += checkoffset; ref2d += tc.xy; // use as offset from destination - // get attributes from the 2D guess point + // Get attributes from the 2D guess point. + // We average two samples of diffuse (not of anything else) per + // pixel to try to reduce aliasing some more. + // --------------------- + // ^ ^ ^ ^ ^ + // a . b o c . d check=0:avg(a,b) check=1:avg(c,d) + vec3 refcol = 0.5 * (texture2DRect(diffuseRect, ref2d).rgb + + texture2DRect(diffuseRect, ref2d + checkoffset*2.0).rgb); float refdepth = texture2DRect(depthMap, ref2d).a; vec3 refpos = getPosition_d(ref2d, refdepth).xyz; - vec3 refcol = texture2DRect(diffuseRect, ref2d).rgb; float refshad = texture2DRect(lightMap, ref2d).r; vec3 refn = normalize(texture2DRect(normalMap, ref2d).rgb * 2.0 - 1.0); // figure out how appropriate our guess actually was @@ -311,9 +319,13 @@ void main() //refapprop *= step(dot(refnorm, refn), 0.0); refapprop = min(refapprop, max(0.0, -dot(refnorm, refn))); // more conservative variant // get appropriate light strength for guess-point - float reflit = min(max(dot(refn, lightnorm.xyz), 0.0), refshad); + // reflect light direction to increase the illusion that + // these are reflections. + vec3 reflight = reflect(lightnorm.xyz, norm.xyz); + float reflit = min(max(dot(refn, reflight.xyz), 0.0), refshad); // apply sun color to guess-point, dampen according to inappropriateness of guess - vec3 refprod = (vary_SunlitColor*reflit) * refcol.rgb * refapprop; + float refmod = min(refapprop, reflit); + vec3 refprod = vary_SunlitColor * refcol.rgb * refmod; vec3 ssshiny = (refprod * spec.a); // add the two types of shiny together diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl index 04c9a4d19aac6e4f622824562756303365f0e059..46db3c990cf03c79bf8b081574ea58404f241649 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl @@ -41,6 +41,9 @@ uniform vec2 proj_shadow_res; uniform float shadow_bias; uniform float shadow_offset; +uniform float spot_shadow_bias; +uniform float spot_shadow_offset; + vec4 getPosition(vec2 pos_screen) { float depth = texture2DRect(depthMap, pos_screen.xy).a; @@ -75,7 +78,7 @@ float pcfShadow(sampler2DRectShadow shadowMap, vec4 stc, float scl) float pcfShadow(sampler2DShadow shadowMap, vec4 stc, float scl) { stc.xyz /= stc.w; - stc.z += shadow_bias*scl; + stc.z += spot_shadow_bias*scl; float cs = shadow2D(shadowMap, stc.xyz).x; float shadow = cs; @@ -86,8 +89,7 @@ float pcfShadow(sampler2DShadow shadowMap, vec4 stc, float scl) shadow += max(shadow2D(shadowMap, stc.xyz+vec3(off.x, -off.y, 0.0)).x, cs); shadow += max(shadow2D(shadowMap, stc.xyz+vec3(-off.x, off.y, 0.0)).x, cs); shadow += max(shadow2D(shadowMap, stc.xyz+vec3(-off.x, -off.y, 0.0)).x, cs); - - + return shadow/5.0; //return shadow; @@ -114,7 +116,10 @@ void main() float shadow = 1.0; float dp_directional_light = max(0.0, dot(norm, vary_light.xyz)); - vec4 spos = vec4(pos.xyz + displace*norm + vary_light.xyz * (1.0-dp_directional_light)*shadow_offset, 1.0); + vec3 shadow_pos = pos.xyz + displace*norm; + vec3 offset = vary_light.xyz * (1.0-dp_directional_light); + + vec4 spos = vec4(shadow_pos+offset*shadow_offset, 1.0); if (spos.z > -shadow_clip.w) { @@ -176,13 +181,15 @@ void main() gl_FragColor[0] = shadow; gl_FragColor[1] = 1.0; + spos.xyz = shadow_pos+offset*spot_shadow_offset; + //spotlight shadow 1 vec4 lpos = shadow_matrix[4]*spos; - gl_FragColor[2] = pcfShadow(shadowMap4, lpos, 0.8).x; + gl_FragColor[2] = pcfShadow(shadowMap4, lpos, 0.8); //spotlight shadow 2 lpos = shadow_matrix[5]*spos; - gl_FragColor[3] = pcfShadow(shadowMap5, lpos, 0.8).x; + gl_FragColor[3] = pcfShadow(shadowMap5, lpos, 0.8); //gl_FragColor.rgb = pos.xyz; //gl_FragColor.b = shadow; diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl index d77d17942a6ad2b4b4049d2f4d671ecd493de75c..a0dfc96f14e496b81a9a2057855605a86ddc91d9 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl @@ -40,6 +40,9 @@ uniform vec2 proj_shadow_res; uniform float shadow_bias; uniform float shadow_offset; +uniform float spot_shadow_bias; +uniform float spot_shadow_offset; + vec4 getPosition(vec2 pos_screen) { float depth = texture2DRect(depthMap, pos_screen.xy).a; @@ -134,7 +137,7 @@ float pcfShadow(sampler2DRectShadow shadowMap, vec4 stc, float scl) float pcfShadow(sampler2DShadow shadowMap, vec4 stc, float scl) { stc.xyz /= stc.w; - stc.z += shadow_bias*scl; + stc.z += spot_shadow_bias*scl; float cs = shadow2D(shadowMap, stc.xyz).x; float shadow = cs; @@ -173,7 +176,10 @@ void main() float shadow = 1.0; float dp_directional_light = max(0.0, dot(norm, vary_light.xyz)); - vec4 spos = vec4(pos.xyz + displace*norm + vary_light.xyz * (1.0-dp_directional_light)*shadow_offset, 1.0); + vec3 shadow_pos = pos.xyz + displace*norm; + vec3 offset = vary_light.xyz * (1.0-dp_directional_light); + + vec4 spos = vec4(shadow_pos+offset*shadow_offset, 1.0); if (spos.z > -shadow_clip.w) { @@ -235,13 +241,15 @@ void main() gl_FragColor[0] = shadow; gl_FragColor[1] = calcAmbientOcclusion(pos, norm); + spos.xyz = shadow_pos+offset*spot_shadow_offset; + //spotlight shadow 1 vec4 lpos = shadow_matrix[4]*spos; - gl_FragColor[2] = pcfShadow(shadowMap4, lpos, 0.8).x; + gl_FragColor[2] = pcfShadow(shadowMap4, lpos, 0.8); //spotlight shadow 2 lpos = shadow_matrix[5]*spos; - gl_FragColor[3] = pcfShadow(shadowMap5, lpos, 0.8).x; + gl_FragColor[3] = pcfShadow(shadowMap5, lpos, 0.8); //gl_FragColor.rgb = pos.xyz; //gl_FragColor.b = shadow; diff --git a/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl index ddd69befc365a72eb08f99d08a8c52bf2c93c9b6..ef81ed13089409fbbea526239696048b84fcc152 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl @@ -284,12 +284,13 @@ void main() { // the old infinite-sky shiny reflection // - vec3 refnorm = normalize(reflect(pos.xyz, norm.xyz)); - float sa = dot(refnorm, vary_light.xyz); + vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz)); + float sa = dot(refnormpersp, vary_light.xyz); vec3 dumbshiny = vary_SunlitColor*scol*texture2D(lightFunc, vec2(sa, spec.a)).a; // screen-space cheap fakey reflection map // + vec3 refnorm = normalize(reflect(vec3(0,0,-1), norm.xyz)); depth -= 0.5; // unbias depth // first figure out where we'll make our 2D guess from vec2 ref2d = (0.25 * screen_res.y) * (refnorm.xy) * abs(refnorm.z) / depth; @@ -300,12 +301,19 @@ void main() // The goal of the blur is to soften reflections in surfaces // with low shinyness, and also to disguise our lameness. float checkerboard = floor(mod(tc.x+tc.y, 2.0)); // 0.0, 1.0 - ref2d += normalize(ref2d)*14.0*(1.0-spec.a)*(checkerboard-0.5); + vec2 checkoffset = normalize(ref2d)*5.0*(1.0-spec.a)*(checkerboard-0.5); + ref2d += checkoffset; ref2d += tc.xy; // use as offset from destination - // get attributes from the 2D guess point + // Get attributes from the 2D guess point. + // We average two samples of diffuse (not of anything else) per + // pixel to try to reduce aliasing some more. + // --------------------- + // ^ ^ ^ ^ ^ + // a . b o c . d check=0:avg(a,b) check=1:avg(c,d) + vec3 refcol = 0.5 * (texture2DRect(diffuseRect, ref2d).rgb + + texture2DRect(diffuseRect, ref2d + checkoffset*2.0).rgb); float refdepth = texture2DRect(depthMap, ref2d).a; vec3 refpos = getPosition_d(ref2d, refdepth).xyz; - vec3 refcol = texture2DRect(diffuseRect, ref2d).rgb; float refshad = texture2DRect(lightMap, ref2d).r; vec3 refn = normalize(texture2DRect(normalMap, ref2d).rgb * 2.0 - 1.0); // figure out how appropriate our guess actually was @@ -313,10 +321,14 @@ void main() // darken reflections from points which face away from the reflected ray - our guess was a back-face //refapprop *= step(dot(refnorm, refn), 0.0); refapprop = min(refapprop, max(0.0, -dot(refnorm, refn))); // more conservative variant - // get appropriate light strength for guess-point - float reflit = min(max(dot(refn, lightnorm.xyz), 0.0), refshad); + // get appropriate light strength for guess-point. + // reflect light direction to increase the illusion that + // these are reflections. + vec3 reflight = reflect(lightnorm.xyz, norm.xyz); + float reflit = min(max(dot(refn, reflight.xyz), 0.0), refshad); // apply sun color to guess-point, dampen according to inappropriateness of guess - vec3 refprod = (vary_SunlitColor*reflit) * refcol.rgb * refapprop; + float refmod = min(refapprop, reflit); + vec3 refprod = vary_SunlitColor * refcol.rgb * refmod; vec3 ssshiny = (refprod * spec.a); // add the two types of shiny together diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index f434782977709ed6b93756d949b1191fbb49d9d4..ec465358faaeadfde36ca23f4deaf0439afb6704 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -1295,6 +1295,11 @@ void LLAgent::stopAutoPilot(BOOL user_cancel) { resetAxes(mAutoPilotTargetFacing); } + // If the user cancelled, don't change the fly state + if (!user_cancel) + { + setFlying(mAutoPilotFlyOnStop); + } //NB: auto pilot can terminate for a reason other than reaching the destination if (mAutoPilotFinishedCallback) { @@ -1302,11 +1307,6 @@ void LLAgent::stopAutoPilot(BOOL user_cancel) } mLeaderID = LLUUID::null; - // If the user cancelled, don't change the fly state - if (!user_cancel) - { - setFlying(mAutoPilotFlyOnStop); - } setControlFlags(AGENT_CONTROL_STOP); if (user_cancel && !mAutoPilotBehaviorName.empty()) diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index 908bcfab6a0725584eb537e8904cbb9076d10c22..9638d0e94f821482f7454dc1b92425699dfcce8c 100644 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -1124,9 +1124,9 @@ void LLAgentCamera::updateLookAt(const S32 mouse_x, const S32 mouse_y) { // range from -.5 to .5 F32 x_from_center = - ((F32) mouse_x / (F32) gViewerWindow->getWindowWidthScaled() ) - 0.5f; + ((F32) mouse_x / (F32) gViewerWindow->getWorldViewWidthScaled() ) - 0.5f; F32 y_from_center = - ((F32) mouse_y / (F32) gViewerWindow->getWindowHeightScaled() ) - 0.5f; + ((F32) mouse_y / (F32) gViewerWindow->getWorldViewHeightScaled() ) - 0.5f; frameCamera.yaw( - x_from_center * gSavedSettings.getF32("YawFromMousePosition") * DEG_TO_RAD); frameCamera.pitch( - y_from_center * gSavedSettings.getF32("PitchFromMousePosition") * DEG_TO_RAD); diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp index 0542e73bfdafb8651dd6f858c2d33485672152c2..9d3b5763e8841877d589efa38fa68d6b2480c0e4 100644 --- a/indra/newview/llagentwearables.cpp +++ b/indra/newview/llagentwearables.cpp @@ -954,7 +954,7 @@ void LLAgentWearables::processAgentInitialWearablesUpdate(LLMessageSystem* mesgs // that will trigger when the complete information is fetched. uuid_vec_t folders; folders.push_back(current_outfit_id); - outfit->fetchDescendents(folders); + outfit->fetch(folders); if(outfit->isEverythingComplete()) { // everything is already here - call done. @@ -2070,7 +2070,7 @@ void LLAgentWearables::populateMyOutfitsFolder(void) folders.push_back(outfits->mMyOutfitsID); gInventory.addObserver(outfits); - outfits->fetchDescendents(folders); + outfits->fetch(folders); if (outfits->isEverythingComplete()) { outfits->done(); diff --git a/indra/newview/llagentwearables.h b/indra/newview/llagentwearables.h index 9f8aadeae7b0ce8151d897eb31e17129b64ee7bf..b76367324ce24550536f70b5bdc12dcd436d319b 100644 --- a/indra/newview/llagentwearables.h +++ b/indra/newview/llagentwearables.h @@ -174,7 +174,7 @@ class LLAgentWearables // Should only be called if we *know* we've never done so before, since users may // not want the Library outfits to stay in their quick outfit selector and can delete them. - void populateMyOutfitsFolder(void); + void populateMyOutfitsFolder(); private: void makeNewOutfitDone(S32 type, U32 index); diff --git a/indra/newview/llagentwearablesfetch.cpp b/indra/newview/llagentwearablesfetch.cpp index 45274a8e2c0fd7b9c1b40e3f8bbc8cb94a5e2938..3d6740f5a1bf6fa5563ceaf600e0e72adb667b97 100644 --- a/indra/newview/llagentwearablesfetch.cpp +++ b/indra/newview/llagentwearablesfetch.cpp @@ -54,7 +54,7 @@ void LLInitialWearablesFetch::done() // gInventory.notifyObservers. The results will be handled in the next // idle tick instead. gInventory.removeObserver(this); - doOnIdle(boost::bind(&LLInitialWearablesFetch::processContents,this)); + doOnIdleOneTime(boost::bind(&LLInitialWearablesFetch::processContents,this)); } void LLInitialWearablesFetch::add(InitialWearableData &data) @@ -69,7 +69,7 @@ void LLInitialWearablesFetch::processContents() LLInventoryModel::cat_array_t cat_array; LLInventoryModel::item_array_t wearable_array; LLFindWearables is_wearable; - gInventory.collectDescendentsIf(mCompleteFolders.front(), cat_array, wearable_array, + gInventory.collectDescendentsIf(mComplete.front(), cat_array, wearable_array, LLInventoryModel::EXCLUDE_TRASH, is_wearable); LLAppearanceMgr::instance().setAttachmentInvLinkEnable(true); @@ -89,7 +89,7 @@ void LLInitialWearablesFetch::processContents() class LLFetchAndLinkObserver: public LLInventoryFetchObserver { public: - LLFetchAndLinkObserver(LLInventoryFetchObserver::item_ref_t& ids): + LLFetchAndLinkObserver(uuid_vec_t& ids): m_ids(ids), LLInventoryFetchObserver(true) // retry for missing items { @@ -103,7 +103,7 @@ class LLFetchAndLinkObserver: public LLInventoryFetchObserver // Link to all fetched items in COF. LLPointer<LLInventoryCallback> link_waiter = new LLUpdateAppearanceOnDestroy; - for (LLInventoryFetchObserver::item_ref_t::iterator it = m_ids.begin(); + for (uuid_vec_t::iterator it = m_ids.begin(); it != m_ids.end(); ++it) { @@ -124,7 +124,7 @@ class LLFetchAndLinkObserver: public LLInventoryFetchObserver } } private: - LLInventoryFetchObserver::item_ref_t m_ids; + uuid_vec_t m_ids; }; void LLInitialWearablesFetch::processWearablesMessage() @@ -132,7 +132,7 @@ 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; + uuid_vec_t ids; for (U8 i = 0; i < mAgentInitialWearables.size(); ++i) { // Populate the current outfit folder with links to the wearables passed in the message @@ -173,7 +173,7 @@ void LLInitialWearablesFetch::processWearablesMessage() // Need to fetch the inventory items for ids, then create links to them after they arrive. LLFetchAndLinkObserver *fetcher = new LLFetchAndLinkObserver(ids); - fetcher->fetchItems(ids); + fetcher->fetch(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()) @@ -210,8 +210,8 @@ 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. + doOnIdleOneTime(boost::bind(&LLLibraryOutfitsFetch::doneIdle,this)); + gInventory.removeObserver(this); // Prevent doOnIdleOneTime from being added twice. } void LLLibraryOutfitsFetch::doneIdle() @@ -254,7 +254,7 @@ void LLLibraryOutfitsFetch::doneIdle() } } -void LLLibraryOutfitsFetch::folderDone(void) +void LLLibraryOutfitsFetch::folderDone() { LLInventoryModel::cat_array_t cat_array; LLInventoryModel::item_array_t wearable_array; @@ -282,20 +282,20 @@ void LLLibraryOutfitsFetch::folderDone(void) mLibraryClothingID = cat->getUUID(); } - mCompleteFolders.clear(); + mComplete.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); + fetch(folders); if (isEverythingComplete()) { done(); } } -void LLLibraryOutfitsFetch::outfitsDone(void) +void LLLibraryOutfitsFetch::outfitsDone() { LLInventoryModel::cat_array_t cat_array; LLInventoryModel::item_array_t wearable_array; @@ -336,9 +336,9 @@ void LLLibraryOutfitsFetch::outfitsDone(void) mImportedClothingID = cat->getUUID(); } - mCompleteFolders.clear(); + mComplete.clear(); - fetchDescendents(folders); + fetch(folders); if (isEverythingComplete()) { done(); @@ -372,7 +372,7 @@ class LLLibraryOutfitsCopyDone: public LLInventoryCallback }; // Copy the clothing folders from the library into the imported clothing folder -void LLLibraryOutfitsFetch::libraryDone(void) +void LLLibraryOutfitsFetch::libraryDone() { if (mImportedClothingID != LLUUID::null) { @@ -427,22 +427,22 @@ void LLLibraryOutfitsFetch::libraryDone(void) } } -void LLLibraryOutfitsFetch::importedFolderFetch(void) +void LLLibraryOutfitsFetch::importedFolderFetch() { // Fetch the contents of the Imported Clothing Folder uuid_vec_t folders; folders.push_back(mImportedClothingID); - mCompleteFolders.clear(); + mComplete.clear(); - fetchDescendents(folders); + fetch(folders); if (isEverythingComplete()) { done(); } } -void LLLibraryOutfitsFetch::importedFolderDone(void) +void LLLibraryOutfitsFetch::importedFolderDone() { LLInventoryModel::cat_array_t cat_array; LLInventoryModel::item_array_t wearable_array; @@ -463,15 +463,15 @@ void LLLibraryOutfitsFetch::importedFolderDone(void) mImportedClothingFolders.push_back(cat->getUUID()); } - mCompleteFolders.clear(); - fetchDescendents(folders); + mComplete.clear(); + fetch(folders); if (isEverythingComplete()) { done(); } } -void LLLibraryOutfitsFetch::contentsDone(void) +void LLLibraryOutfitsFetch::contentsDone() { LLInventoryModel::cat_array_t cat_array; LLInventoryModel::item_array_t wearable_array; diff --git a/indra/newview/llagentwearablesfetch.h b/indra/newview/llagentwearablesfetch.h index 72063114b8dd4ef4c6c0fc52b519f25e64315591..1d0c6739bab1861312c37bd25d62f98c5e894485 100644 --- a/indra/newview/llagentwearablesfetch.h +++ b/indra/newview/llagentwearablesfetch.h @@ -100,11 +100,11 @@ class LLLibraryOutfitsFetch : public LLInventoryFetchDescendentsObserver LLUUID mMyOutfitsID; void importedFolderFetch(); protected: - void folderDone(void); - void outfitsDone(void); - void libraryDone(void); - void importedFolderDone(void); - void contentsDone(void); + void folderDone(); + void outfitsDone(); + void libraryDone(); + void importedFolderDone(); + void contentsDone(); enum ELibraryOutfitFetchStep mCurrFetchStep; uuid_vec_t mLibraryClothingFolders; uuid_vec_t mImportedClothingFolders; diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 8c5352ded71f71127e0e6d92d029211e3bd193f4..e0f1d5348dbf93e34dde52553a9d40d122e41ad4 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -74,23 +74,6 @@ LLUUID findDescendentCategoryIDByName(const LLUUID& parent_id,const std::string& } } -// support for secondlife:///app/appearance SLapps -class LLAppearanceHandler : public LLCommandHandler -{ -public: - // requests will be throttled from a non-trusted browser - LLAppearanceHandler() : LLCommandHandler("appearance", UNTRUSTED_THROTTLE) {} - - bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web) - { - // support secondlife:///app/appearance/show, but for now we just - // make all secondlife:///app/appearance SLapps behave this way - LLSideTray::getInstance()->showPanel("sidepanel_appearance", LLSD()); - return true; - } -}; -LLAppearanceHandler gAppearanceHandler; - class LLWearInventoryCategoryCallback : public LLInventoryCallback { public: @@ -133,175 +116,6 @@ class LLWearInventoryCategoryCallback : public LLInventoryCallback bool mAppend; }; -class LLOutfitObserver : public LLInventoryFetchObserver -{ -public: - LLOutfitObserver(const LLUUID& cat_id, bool copy_items, bool append) : - mCatID(cat_id), - mCopyItems(copy_items), - mAppend(append) - {} - ~LLOutfitObserver() {} - virtual void done(); - void doWearCategory(); - -protected: - LLUUID mCatID; - bool mCopyItems; - bool mAppend; -}; - -void LLOutfitObserver::done() -{ - llinfos << "done 2nd stage fetch" << llendl; - gInventory.removeObserver(this); - doOnIdle(boost::bind(&LLOutfitObserver::doWearCategory,this)); -} - -void LLOutfitObserver::doWearCategory() -{ - llinfos << "starting" << llendl; - - // We now have an outfit ready to be copied to agent inventory. Do - // it, and wear that outfit normally. - if(mCopyItems) - { - LLInventoryCategory* cat = gInventory.getCategory(mCatID); - std::string name; - if(!cat) - { - // should never happen. - name = "New Outfit"; - } - else - { - name = cat->getName(); - } - LLViewerInventoryItem* item = NULL; - item_ref_t::iterator it = mComplete.begin(); - item_ref_t::iterator end = mComplete.end(); - LLUUID pid; - for(; it < end; ++it) - { - item = (LLViewerInventoryItem*)gInventory.getItem(*it); - if(item) - { - if(LLInventoryType::IT_GESTURE == item->getInventoryType()) - { - pid = gInventory.findCategoryUUIDForType(LLFolderType::FT_GESTURE); - } - else - { - pid = gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING); - } - break; - } - } - if(pid.isNull()) - { - pid = gInventory.getRootFolderID(); - } - - LLUUID cat_id = gInventory.createNewCategory( - pid, - LLFolderType::FT_NONE, - name); - mCatID = cat_id; - LLPointer<LLInventoryCallback> cb = new LLWearInventoryCategoryCallback(mCatID, mAppend); - it = mComplete.begin(); - for(; it < end; ++it) - { - item = (LLViewerInventoryItem*)gInventory.getItem(*it); - if(item) - { - copy_inventory_item( - gAgent.getID(), - item->getPermissions().getOwner(), - item->getUUID(), - cat_id, - std::string(), - cb); - } - } - // BAP fixes a lag in display of created dir. - gInventory.notifyObservers(); - } - else - { - // Wear the inventory category. - LLAppearanceMgr::instance().wearInventoryCategoryOnAvatar(gInventory.getCategory(mCatID), mAppend); - } - delete this; -} - -class LLOutfitFetch : public LLInventoryFetchDescendentsObserver -{ -public: - LLOutfitFetch(bool copy_items, bool append) : mCopyItems(copy_items), mAppend(append) {} - ~LLOutfitFetch() {} - virtual void done(); -protected: - bool mCopyItems; - bool mAppend; -}; - -void LLOutfitFetch::done() -{ - // What we do here is get the complete information on the items in - // the library, and set up an observer that will wait for that to - // happen. - llinfos << "done first stage fetch" << llendl; - - LLInventoryModel::cat_array_t cat_array; - LLInventoryModel::item_array_t item_array; - gInventory.collectDescendents(mCompleteFolders.front(), - cat_array, - item_array, - LLInventoryModel::EXCLUDE_TRASH); - S32 count = item_array.count(); - if(!count) - { - llwarns << "Nothing fetched in category " << mCompleteFolders.front() - << llendl; - //dec_busy_count(); - gInventory.removeObserver(this); - delete this; - return; - } - - LLOutfitObserver* outfit_observer = new LLOutfitObserver(mCompleteFolders.front(), mCopyItems, mAppend); - LLInventoryFetchObserver::item_ref_t ids; - for(S32 i = 0; i < count; ++i) - { - ids.push_back(item_array.get(i)->getUUID()); - } - - // clean up, and remove this as an observer since the call to the - // outfit could notify observers and throw us into an infinite - // loop. - //dec_busy_count(); - gInventory.removeObserver(this); - - // increment busy count and either tell the inventory to check & - // call done, or add this object to the inventory for observation. - //inc_busy_count(); - - // do the fetch - outfit_observer->fetchItems(ids); - if(outfit_observer->isEverythingComplete()) - { - // everything is already here - call done. - outfit_observer->done(); - } - else - { - // it's all on it's way - add an observer, and the inventory - // will call done for us when everything is here. - gInventory.addObserver(outfit_observer); - } - delete this; -} - LLUpdateAppearanceOnDestroy::LLUpdateAppearanceOnDestroy(): mFireCount(0) { @@ -1309,24 +1123,85 @@ void LLAppearanceMgr::wearInventoryCategory(LLInventoryCategory* category, bool llinfos << "wearInventoryCategory( " << category->getName() << " )" << llendl; - // What we do here is get the complete information on the items in - // the inventory, and set up an observer that will wait for that to - // happen. - LLOutfitFetch* outfit_fetcher = new LLOutfitFetch(copy, append); - uuid_vec_t folders; - folders.push_back(category->getUUID()); - outfit_fetcher->fetchDescendents(folders); - //inc_busy_count(); - if(outfit_fetcher->isEverythingComplete()) + callAfterCategoryFetch(category->getUUID(),boost::bind(&LLAppearanceMgr::wearCategoryFinal, + &LLAppearanceMgr::instance(), + category->getUUID(), copy, append)); +} + +void LLAppearanceMgr::wearCategoryFinal(LLUUID& cat_id, bool copy_items, bool append) +{ + llinfos << "starting" << llendl; + + // We now have an outfit ready to be copied to agent inventory. Do + // it, and wear that outfit normally. + LLInventoryCategory* cat = gInventory.getCategory(cat_id); + if(copy_items) { - // everything is already here - call done. - outfit_fetcher->done(); + LLInventoryModel::cat_array_t* cats; + LLInventoryModel::item_array_t* items; + gInventory.getDirectDescendentsOf(cat_id, cats, items); + std::string name; + if(!cat) + { + // should never happen. + name = "New Outfit"; + } + else + { + name = cat->getName(); + } + LLViewerInventoryItem* item = NULL; + LLInventoryModel::item_array_t::const_iterator it = items->begin(); + LLInventoryModel::item_array_t::const_iterator end = items->end(); + LLUUID pid; + for(; it < end; ++it) + { + item = *it; + if(item) + { + if(LLInventoryType::IT_GESTURE == item->getInventoryType()) + { + pid = gInventory.findCategoryUUIDForType(LLFolderType::FT_GESTURE); + } + else + { + pid = gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING); + } + break; + } + } + if(pid.isNull()) + { + pid = gInventory.getRootFolderID(); + } + + LLUUID new_cat_id = gInventory.createNewCategory( + pid, + LLFolderType::FT_NONE, + name); + LLPointer<LLInventoryCallback> cb = new LLWearInventoryCategoryCallback(new_cat_id, append); + it = items->begin(); + for(; it < end; ++it) + { + item = *it; + if(item) + { + copy_inventory_item( + gAgent.getID(), + item->getPermissions().getOwner(), + item->getUUID(), + new_cat_id, + std::string(), + cb); + } + } + // BAP fixes a lag in display of created dir. + gInventory.notifyObservers(); } else { - // it's all on it's way - add an observer, and the inventory - // will call done for us when everything is here. - gInventory.addObserver(outfit_fetcher); + // Wear the inventory category. + LLAppearanceMgr::instance().wearInventoryCategoryOnAvatar(cat, append); } } @@ -1436,6 +1311,8 @@ class LLDeferredCOFLinkObserver: public LLInventoryObserver }; +// BAP - note that this runs asynchronously if the item is not already loaded from inventory. +// Dangerous if caller assumes link will exist after calling the function. void LLAppearanceMgr::addCOFItemLink(const LLUUID &item_id, bool do_update ) { const LLInventoryItem *item = gInventory.getItem(item_id); @@ -1616,7 +1493,7 @@ void LLAppearanceMgr::updateIsDirty() } } -void LLAppearanceMgr::onFirstFullyVisible() +void LLAppearanceMgr::autopopulateOutfits() { // 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,6 +1510,12 @@ void LLAppearanceMgr::onFirstFullyVisible() check_populate_my_outfits = false; } +// Handler for anything that's deferred until avatar de-clouds. +void LLAppearanceMgr::onFirstFullyVisible() +{ + autopopulateOutfits(); +} + //#define DUMP_CAT_VERBOSE void LLAppearanceMgr::dumpCat(const LLUUID& cat_id, const std::string& msg) @@ -1684,6 +1567,7 @@ void LLAppearanceMgr::setAttachmentInvLinkEnable(bool val) mAttachmentInvLinkEnabled = val; } +// BAP TODO - mRegisteredAttachments is currently maintained but not used for anything. Consider yanking. void dumpAttachmentSet(const std::set<LLUUID>& atts, const std::string& msg) { llinfos << msg << llendl; @@ -1705,7 +1589,6 @@ void LLAppearanceMgr::registerAttachment(const LLUUID& item_id) { mRegisteredAttachments.insert(item_id); gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id); - //dumpAttachmentSet(mRegisteredAttachments,"after register:"); if (mAttachmentInvLinkEnabled) { @@ -1722,11 +1605,8 @@ void LLAppearanceMgr::unregisterAttachment(const LLUUID& item_id) mRegisteredAttachments.erase(item_id); gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id); - //dumpAttachmentSet(mRegisteredAttachments,"after unregister:"); - if (mAttachmentInvLinkEnabled) { - //LLAppearanceMgr::dumpCat(LLAppearanceMgr::getCOF(),"Removing attachment link:"); LLAppearanceMgr::removeCOFItemLinks(item_id, false); } else diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h index 2d6a0a10edb389179185d5935288bc00e5d7713e..40b8844731c4276b87d15b2510cf90d71dd22dc4 100644 --- a/indra/newview/llappearancemgr.h +++ b/indra/newview/llappearancemgr.h @@ -53,6 +53,7 @@ class LLAppearanceMgr: public LLSingleton<LLAppearanceMgr> void updateCOF(const LLUUID& category, bool append = false); void wearInventoryCategory(LLInventoryCategory* category, bool copy, bool append); void wearInventoryCategoryOnAvatar(LLInventoryCategory* category, bool append); + void wearCategoryFinal(LLUUID& cat_id, bool copy_items, bool append); void wearOutfitByName(const std::string& name); void changeOutfit(bool proceed, const LLUUID& category, bool append); @@ -118,6 +119,9 @@ class LLAppearanceMgr: public LLSingleton<LLAppearanceMgr> // Called when self avatar is first fully visible. void onFirstFullyVisible(); + + // Create initial outfits from library. + void autopopulateOutfits(); protected: LLAppearanceMgr(); @@ -173,17 +177,17 @@ LLUUID findDescendentCategoryIDByName(const LLUUID& parent_id,const std::string& // Shim class and template function to allow arbitrary boost::bind // expressions to be run as one-time idle callbacks. template <typename T> -class OnIdleCallback +class OnIdleCallbackOneTime { public: - OnIdleCallback(T callable): + OnIdleCallbackOneTime(T callable): mCallable(callable) { } static void onIdle(void *data) { gIdleCallbacks.deleteFunction(onIdle, data); - OnIdleCallback<T>* self = reinterpret_cast<OnIdleCallback<T>*>(data); + OnIdleCallbackOneTime<T>* self = reinterpret_cast<OnIdleCallbackOneTime<T>*>(data); self->call(); delete self; } @@ -196,14 +200,15 @@ class OnIdleCallback }; template <typename T> -void doOnIdle(T callable) +void doOnIdleOneTime(T callable) { - OnIdleCallback<T>* cb_functor = new OnIdleCallback<T>(callable); - gIdleCallbacks.addFunction(&OnIdleCallback<T>::onIdle,cb_functor); + OnIdleCallbackOneTime<T>* cb_functor = new OnIdleCallbackOneTime<T>(callable); + gIdleCallbacks.addFunction(&OnIdleCallbackOneTime<T>::onIdle,cb_functor); } // Shim class and template function to allow arbitrary boost::bind // expressions to be run as recurring idle callbacks. +// Callable should return true when done, false to continue getting called. template <typename T> class OnIdleCallbackRepeating { @@ -212,7 +217,7 @@ class OnIdleCallbackRepeating mCallable(callable) { } - // Will keep getting called until the callable returns false. + // Will keep getting called until the callable returns true. static void onIdle(void *data) { OnIdleCallbackRepeating<T>* self = reinterpret_cast<OnIdleCallbackRepeating<T>*>(data); @@ -252,7 +257,7 @@ class CallAfterCategoryFetchStage2: public LLInventoryFetchObserver virtual void done() { gInventory.removeObserver(this); - doOnIdle(mCallable); + doOnIdleOneTime(mCallable); delete this; } protected: @@ -277,14 +282,14 @@ class CallAfterCategoryFetchStage1: public LLInventoryFetchDescendentsObserver // happen. LLInventoryModel::cat_array_t cat_array; LLInventoryModel::item_array_t item_array; - gInventory.collectDescendents(mCompleteFolders.front(), + gInventory.collectDescendents(mComplete.front(), cat_array, item_array, LLInventoryModel::EXCLUDE_TRASH); S32 count = item_array.count(); if(!count) { - llwarns << "Nothing fetched in category " << mCompleteFolders.front() + llwarns << "Nothing fetched in category " << mComplete.front() << llendl; //dec_busy_count(); gInventory.removeObserver(this); @@ -293,7 +298,7 @@ class CallAfterCategoryFetchStage1: public LLInventoryFetchDescendentsObserver } CallAfterCategoryFetchStage2<T> *stage2 = new CallAfterCategoryFetchStage2<T>(mCallable); - LLInventoryFetchObserver::item_ref_t ids; + uuid_vec_t ids; for(S32 i = 0; i < count; ++i) { ids.push_back(item_array.get(i)->getUUID()); @@ -302,7 +307,7 @@ class CallAfterCategoryFetchStage1: public LLInventoryFetchDescendentsObserver gInventory.removeObserver(this); // do the fetch - stage2->fetchItems(ids); + stage2->fetch(ids); if(stage2->isEverythingComplete()) { // everything is already here - call done. @@ -326,7 +331,7 @@ void callAfterCategoryFetch(const LLUUID& cat_id, T callable) CallAfterCategoryFetchStage1<T> *stage1 = new CallAfterCategoryFetchStage1<T>(callable); uuid_vec_t folders; folders.push_back(cat_id); - stage1->fetchDescendents(folders); + stage1->fetch(folders); if (stage1->isEverythingComplete()) { stage1->done(); diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 34e9497ed8fb37c2552d7ff2f93f014af837159d..7a381d05ad30ec4c19a161e4e4072da1ec5186b8 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -2607,6 +2607,8 @@ void LLAppViewer::handleViewerCrash() { llinfos << "Handle viewer crash entry." << llendl; + llinfos << "Last render pool type: " << LLPipeline::sCurRenderPoolType << llendl ; + //print out recorded call stacks if there are any. LLError::LLCallStacks::print(); @@ -3042,41 +3044,59 @@ void LLAppViewer::migrateCacheDirectory() #endif // LL_WINDOWS || LL_DARWIN } +//static +S32 LLAppViewer::getCacheVersion() +{ + static const S32 cache_version = 7; + + return cache_version ; +} + bool LLAppViewer::initCache() { mPurgeCache = false; - // Purge cache if user requested it - if (gSavedSettings.getBOOL("PurgeCacheOnStartup") || - gSavedSettings.getBOOL("PurgeCacheOnNextStartup")) - { - gSavedSettings.setBOOL("PurgeCacheOnNextStartup", false); - mPurgeCache = true; - } - // Purge cache if it belongs to an old version - else + BOOL disable_texture_cache = FALSE ; + BOOL read_only = mSecondInstance ? TRUE : FALSE; + LLAppViewer::getTextureCache()->setReadOnly(read_only) ; + + if (gSavedSettings.getS32("LocalCacheVersion") != LLAppViewer::getCacheVersion()) { - static const S32 cache_version = 6; - if (gSavedSettings.getS32("LocalCacheVersion") != cache_version) + if(read_only) { - mPurgeCache = true; - gSavedSettings.setS32("LocalCacheVersion", cache_version); + disable_texture_cache = TRUE ; //if the cache version of this viewer is different from the running one, this viewer can not use the texture cache. + } + else + { + mPurgeCache = true; // Purge cache if the version number is different. + gSavedSettings.setS32("LocalCacheVersion", LLAppViewer::getCacheVersion()); } } - - // We have moved the location of the cache directory over time. - migrateCacheDirectory(); - // Setup and verify the cache location - std::string cache_location = gSavedSettings.getString("CacheLocation"); - std::string new_cache_location = gSavedSettings.getString("NewCacheLocation"); - if (new_cache_location != cache_location) + if(!read_only) { - gDirUtilp->setCacheDir(gSavedSettings.getString("CacheLocation")); - purgeCache(); // purge old cache - gSavedSettings.setString("CacheLocation", new_cache_location); - gSavedSettings.setString("CacheLocationTopFolder", gDirUtilp->getBaseFileName(new_cache_location)); - } + // Purge cache if user requested it + if (gSavedSettings.getBOOL("PurgeCacheOnStartup") || + gSavedSettings.getBOOL("PurgeCacheOnNextStartup")) + { + gSavedSettings.setBOOL("PurgeCacheOnNextStartup", false); + mPurgeCache = true; + } + // We have moved the location of the cache directory over time. + migrateCacheDirectory(); + + // Setup and verify the cache location + std::string cache_location = gSavedSettings.getString("CacheLocation"); + std::string new_cache_location = gSavedSettings.getString("NewCacheLocation"); + if (new_cache_location != cache_location) + { + gDirUtilp->setCacheDir(gSavedSettings.getString("CacheLocation")); + purgeCache(); // purge old cache + gSavedSettings.setString("CacheLocation", new_cache_location); + gSavedSettings.setString("CacheLocationTopFolder", gDirUtilp->getBaseFileName(new_cache_location)); + } + } + if (!gDirUtilp->setCacheDir(gSavedSettings.getString("CacheLocation"))) { LL_WARNS("AppCache") << "Unable to set cache location" << LL_ENDL; @@ -3084,7 +3104,7 @@ bool LLAppViewer::initCache() gSavedSettings.setString("CacheLocationTopFolder", ""); } - if (mPurgeCache) + if (mPurgeCache && !read_only) { LLSplashScreen::update(LLTrans::getString("StartupClearingCache")); purgeCache(); @@ -3093,14 +3113,13 @@ bool LLAppViewer::initCache() LLSplashScreen::update(LLTrans::getString("StartupInitializingTextureCache")); // Init the texture cache - // Allocate 80% of the cache size for textures - BOOL read_only = mSecondInstance ? TRUE : FALSE; + // Allocate 80% of the cache size for textures const S32 MB = 1024*1024; S64 cache_size = (S64)(gSavedSettings.getU32("CacheSize")) * MB; const S64 MAX_CACHE_SIZE = 1024*MB; cache_size = llmin(cache_size, MAX_CACHE_SIZE); S64 texture_cache_size = ((cache_size * 8)/10); - S64 extra = LLAppViewer::getTextureCache()->initCache(LL_PATH_CACHE, texture_cache_size, read_only); + S64 extra = LLAppViewer::getTextureCache()->initCache(LL_PATH_CACHE, texture_cache_size, disable_texture_cache); texture_cache_size -= extra; LLSplashScreen::update(LLTrans::getString("StartupInitializingVFS")); diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h index a915b7fa50c8da0dc88223b4b9d4ed5fce9cc1a8..60645c46d4330c5d4dd89109e0d11be9ea44f12f 100644 --- a/indra/newview/llappviewer.h +++ b/indra/newview/llappviewer.h @@ -102,6 +102,8 @@ class LLAppViewer : public LLApp static LLImageDecodeThread* getImageDecodeThread() { return sImageDecodeThread; } static LLTextureFetch* getTextureFetch() { return sTextureFetch; } + static S32 getCacheVersion() ; + const std::string& getSerialNumber() { return mSerialNumber; } bool getPurgeCache() const { return mPurgeCache; } diff --git a/indra/newview/llassetuploadresponders.cpp b/indra/newview/llassetuploadresponders.cpp index c14d2348909283fc5ae4799fa231ccf60e34b5e6..f91921f8795e3b1b0b45734fbdf67cf70494fc71 100644 --- a/indra/newview/llassetuploadresponders.cpp +++ b/indra/newview/llassetuploadresponders.cpp @@ -39,6 +39,7 @@ #include "llcompilequeue.h" #include "llfloaterbuycurrency.h" #include "llfilepicker.h" +#include "llinventorydefines.h" #include "llinventoryobserver.h" #include "llinventorypanel.h" #include "llfloaterimportcollada.h" @@ -144,7 +145,7 @@ void on_new_single_inventory_upload_complete( item_name, item_description, LLSaleInfo::DEFAULT, - LLInventoryItem::II_FLAGS_NONE, + LLInventoryItemFlags::II_FLAGS_NONE, creation_date_now); gInventory.updateItem(item); diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp index 6ec62a61a0707d0066ce29a0cddbf6b7d091de24..407c5b6153eba2bea7ab4991d27a457b608c5ba3 100644 --- a/indra/newview/llavatarlist.cpp +++ b/indra/newview/llavatarlist.cpp @@ -39,6 +39,7 @@ #include "llcallingcard.h" // for LLAvatarTracker #include "llcachename.h" #include "llrecentpeople.h" +#include "lluuid.h" #include "llvoiceclient.h" #include "llviewercontrol.h" // for gSavedSettings @@ -53,7 +54,7 @@ static const unsigned ADD_LIMIT = 50; bool LLAvatarList::contains(const LLUUID& id) { - const uuid_vector_t& ids = getIDs(); + const uuid_vec_t& ids = getIDs(); return std::find(ids.begin(), ids.end(), id) != ids.end(); } @@ -303,9 +304,9 @@ void LLAvatarList::refresh() bool LLAvatarList::filterHasMatches() { - uuid_vector_t values = getIDs(); + uuid_vec_t values = getIDs(); - for (uuid_vector_t::const_iterator it=values.begin(); it != values.end(); it++) + for (uuid_vec_t::const_iterator it=values.begin(); it != values.end(); it++) { std::string name; const LLUUID& buddy_id = *it; diff --git a/indra/newview/llavatarlist.h b/indra/newview/llavatarlist.h index 5a55975413d13547f5ced530991935296dce151d..0203617867ffeccebbfbbea026ecbbc071f34ea7 100644 --- a/indra/newview/llavatarlist.h +++ b/indra/newview/llavatarlist.h @@ -53,8 +53,6 @@ class LLAvatarList : public LLFlatListView { LOG_CLASS(LLAvatarList); public: - typedef uuid_vec_t uuid_vector_t; - struct Params : public LLInitParam::Block<Params, LLFlatListView::Params> { Optional<bool> ignore_online_status, // show all items as online @@ -74,7 +72,7 @@ class LLAvatarList : public LLFlatListView void setNameFilter(const std::string& filter); void setDirty(bool val = true, bool force_refresh = false); - uuid_vector_t& getIDs() { return mIDs; } + uuid_vec_t& getIDs() { return mIDs; } bool contains(const LLUUID& id); void setContextMenu(LLAvatarListItem::ContextMenu* menu) { mContextMenu = menu; } @@ -122,7 +120,7 @@ class LLAvatarList : public LLFlatListView LLTimer* mLITUpdateTimer; // last interaction time update timer std::string mIconParamName; std::string mNameFilter; - uuid_vector_t mIDs; + uuid_vec_t mIDs; LLUUID mSessionID; LLAvatarListItem::ContextMenu* mContextMenu; diff --git a/indra/newview/llcallfloater.cpp b/indra/newview/llcallfloater.cpp index 4ea3c61ab2f10afd537074ca8f2286b1554487c2..bed5c01d7a21cf930439685167acc6cba62c82f2 100644 --- a/indra/newview/llcallfloater.cpp +++ b/indra/newview/llcallfloater.cpp @@ -131,11 +131,9 @@ LLCallFloater::~LLCallFloater() mAvatarListRefreshConnection.disconnect(); mVoiceChannelStateChangeConnection.disconnect(); - // Don't use LLVoiceClient::getInstance() here - // singleton MAY have already been destroyed. - if(gVoiceClient) + if(LLVoiceClient::instanceExists()) { - gVoiceClient->removeObserver(this); + LLVoiceClient::instance().removeObserver(this); } LLTransientFloaterMgr::getInstance()->removeControlView(this); } @@ -665,8 +663,8 @@ void LLCallFloater::setVoiceRemoveTimer(const LLUUID& voice_speaker_id) bool LLCallFloater::removeVoiceLeftParticipant(const LLUUID& voice_speaker_id) { - LLAvatarList::uuid_vector_t& speaker_uuids = mAvatarList->getIDs(); - LLAvatarList::uuid_vector_t::iterator pos = std::find(speaker_uuids.begin(), speaker_uuids.end(), voice_speaker_id); + uuid_vec_t& speaker_uuids = mAvatarList->getIDs(); + uuid_vec_t::iterator pos = std::find(speaker_uuids.begin(), speaker_uuids.end(), voice_speaker_id); if(pos != speaker_uuids.end()) { speaker_uuids.erase(pos); diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index 71e7ae70610c9f8014d355b132a007fdc45d2227..68c31d87facb6096b2dac7333843dc6c2f2d99f7 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -93,7 +93,7 @@ class LLObjectIMHandler : public LLCommandHandler payload["object_id"] = object_id; payload["owner_id"] = query_map["owner"]; payload["name"] = query_map["name"]; - payload["slurl"] = query_map["slurl"]; + payload["slurl"] = LLWeb::escapeURL(query_map["slurl"]); payload["group_owned"] = query_map["groupowned"]; LLFloaterReg::showInstance("inspect_remote_object", payload); return true; @@ -632,7 +632,14 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL if (use_plain_text_chat_history) { - mEditor->appendText("[" + chat.mTimeStr + "] ", mEditor->getText().size() != 0, style_params); + LLStyle::Params timestamp_style(style_params); + if (!message_from_log) + { + LLColor4 timestamp_color = LLUIColorTable::instance().getColor("ChatTimestampColor"); + timestamp_style.color(timestamp_color); + timestamp_style.readonly_color(timestamp_color); + } + mEditor->appendText("[" + chat.mTimeStr + "] ", mEditor->getText().size() != 0, timestamp_style); if (utf8str_trim(chat.mFromName).size() != 0) { diff --git a/indra/newview/llcompilequeue.cpp b/indra/newview/llcompilequeue.cpp index a96981a1083e3544ac9d2282c67b4116e4e45548..feb8c540ef9518d57c97032ed0bc5f3013da9e84 100644 --- a/indra/newview/llcompilequeue.cpp +++ b/indra/newview/llcompilequeue.cpp @@ -114,7 +114,7 @@ BOOL LLFloaterScriptQueue::postBuild() // worked on. // NOT static, virtual! void LLFloaterScriptQueue::inventoryChanged(LLViewerObject* viewer_object, - InventoryObjectList* inv, + LLInventoryObject::object_list_t* inv, S32, void* q_id) { @@ -305,7 +305,7 @@ LLFloaterCompileQueue::~LLFloaterCompileQueue() } void LLFloaterCompileQueue::handleInventory(LLViewerObject *viewer_object, - InventoryObjectList* inv) + LLInventoryObject::object_list_t* inv) { // find all of the lsl, leaving off duplicates. We'll remove // all matching asset uuids on compilation success. @@ -313,8 +313,8 @@ void LLFloaterCompileQueue::handleInventory(LLViewerObject *viewer_object, typedef std::multimap<LLUUID, LLPointer<LLInventoryItem> > uuid_item_map; uuid_item_map asset_item_map; - InventoryObjectList::const_iterator it = inv->begin(); - InventoryObjectList::const_iterator end = inv->end(); + LLInventoryObject::object_list_t::const_iterator it = inv->begin(); + LLInventoryObject::object_list_t::const_iterator end = inv->end(); for ( ; it != end; ++it) { if((*it)->getType() == LLAssetType::AT_LSL_TEXT) @@ -625,14 +625,14 @@ LLFloaterResetQueue::~LLFloaterResetQueue() } void LLFloaterResetQueue::handleInventory(LLViewerObject* viewer_obj, - InventoryObjectList* inv) + LLInventoryObject::object_list_t* inv) { // find all of the lsl, leaving off duplicates. We'll remove // all matching asset uuids on compilation success. LLDynamicArray<const char*> names; - InventoryObjectList::const_iterator it = inv->begin(); - InventoryObjectList::const_iterator end = inv->end(); + LLInventoryObject::object_list_t::const_iterator it = inv->begin(); + LLInventoryObject::object_list_t::const_iterator end = inv->end(); for ( ; it != end; ++it) { if((*it)->getType() == LLAssetType::AT_LSL_TEXT) @@ -677,14 +677,14 @@ LLFloaterRunQueue::~LLFloaterRunQueue() } void LLFloaterRunQueue::handleInventory(LLViewerObject* viewer_obj, - InventoryObjectList* inv) + LLInventoryObject::object_list_t* inv) { // find all of the lsl, leaving off duplicates. We'll remove // all matching asset uuids on compilation success. LLDynamicArray<const char*> names; - InventoryObjectList::const_iterator it = inv->begin(); - InventoryObjectList::const_iterator end = inv->end(); + LLInventoryObject::object_list_t::const_iterator it = inv->begin(); + LLInventoryObject::object_list_t::const_iterator end = inv->end(); for ( ; it != end; ++it) { if((*it)->getType() == LLAssetType::AT_LSL_TEXT) @@ -732,14 +732,14 @@ LLFloaterNotRunQueue::~LLFloaterNotRunQueue() } void LLFloaterNotRunQueue::handleInventory(LLViewerObject* viewer_obj, - InventoryObjectList* inv) + LLInventoryObject::object_list_t* inv) { // find all of the lsl, leaving off duplicates. We'll remove // all matching asset uuids on compilation success. LLDynamicArray<const char*> names; - InventoryObjectList::const_iterator it = inv->begin(); - InventoryObjectList::const_iterator end = inv->end(); + LLInventoryObject::object_list_t::const_iterator it = inv->begin(); + LLInventoryObject::object_list_t::const_iterator end = inv->end(); for ( ; it != end; ++it) { if((*it)->getType() == LLAssetType::AT_LSL_TEXT) diff --git a/indra/newview/llcompilequeue.h b/indra/newview/llcompilequeue.h index 2d061f5d8a2e96b66dbaf11beff65dd61d029464..4fde2572af4539efd9df892311bd9570cc933447 100644 --- a/indra/newview/llcompilequeue.h +++ b/indra/newview/llcompilequeue.h @@ -76,13 +76,13 @@ class LLFloaterScriptQueue : public LLFloater, public LLVOInventoryListener // This is the callback method for the viewer object currently // being worked on. /*virtual*/ void inventoryChanged(LLViewerObject* obj, - InventoryObjectList* inv, + LLInventoryObject::object_list_t* inv, S32 serial_num, void* queue); // This is called by inventoryChanged virtual void handleInventory(LLViewerObject* viewer_obj, - InventoryObjectList* inv) = 0; + LLInventoryObject::object_list_t* inv) = 0; static void onCloseBtn(void* user_data); @@ -145,7 +145,7 @@ class LLFloaterCompileQueue : public LLFloaterScriptQueue // This is called by inventoryChanged virtual void handleInventory(LLViewerObject* viewer_obj, - InventoryObjectList* inv); + LLInventoryObject::object_list_t* inv); // This is the callback for when each script arrives static void scriptArrived(LLVFS *vfs, const LLUUID& asset_id, @@ -192,7 +192,7 @@ class LLFloaterResetQueue : public LLFloaterScriptQueue // This is called by inventoryChanged virtual void handleInventory(LLViewerObject* viewer_obj, - InventoryObjectList* inv); + LLInventoryObject::object_list_t* inv); }; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -210,7 +210,7 @@ class LLFloaterRunQueue : public LLFloaterScriptQueue // This is called by inventoryChanged virtual void handleInventory(LLViewerObject* viewer_obj, - InventoryObjectList* inv); + LLInventoryObject::object_list_t* inv); }; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -228,7 +228,7 @@ class LLFloaterNotRunQueue : public LLFloaterScriptQueue // This is called by inventoryChanged virtual void handleInventory(LLViewerObject* viewer_obj, - InventoryObjectList* inv); + LLInventoryObject::object_list_t* inv); }; #endif // LL_LLCOMPILEQUEUE_H diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp index 012e41383fbb9ecef089dc879537f85f74c2ae77..de9b71a9b8bd381ad8d101196f2c553b6c3c95bf 100644 --- a/indra/newview/lldrawpoolavatar.cpp +++ b/indra/newview/lldrawpoolavatar.cpp @@ -314,6 +314,11 @@ void LLDrawPoolAvatar::renderShadow(S32 pass) return; } + if (sShaderLevel > 0) + { + gAvatarMatrixParam = sVertexProgram->mUniform[LLViewerShaderMgr::AVATAR_MATRIX]; + } + avatarp->renderSkinned(AVATAR_RENDER_PASS_SINGLE); } @@ -358,6 +363,9 @@ void LLDrawPoolAvatar::beginRenderPass(S32 pass) case 2: beginSkinned(); break; + case 3: + beginRigged(); + break; } } @@ -381,6 +389,10 @@ void LLDrawPoolAvatar::endRenderPass(S32 pass) break; case 2: endSkinned(); + break; + case 3: + endRigged(); + break; } } @@ -566,6 +578,20 @@ void LLDrawPoolAvatar::endSkinned() gGL.getTexUnit(0)->activate(); } +void LLDrawPoolAvatar::beginRigged() +{ + sVertexProgram = NULL; + gSkinnedObjectSimpleProgram.bind(); + LLVertexBuffer::sWeight4Loc = gSkinnedObjectSimpleProgram.getAttribLocation(LLViewerShaderMgr::OBJECT_WEIGHT); +} + +void LLDrawPoolAvatar::endRigged() +{ + sVertexProgram = NULL; + gSkinnedObjectSimpleProgram.unbind(); + LLVertexBuffer::sWeight4Loc = -1; +} + void LLDrawPoolAvatar::beginDeferredSkinned() { sShaderLevel = mVertexShaderLevel; @@ -711,6 +737,12 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass) avatarp->renderRigid(); return; } + + if (pass == 3) + { + avatarp->renderSkinnedAttachments(); + return; + } if (sShaderLevel > 0) { diff --git a/indra/newview/lldrawpoolavatar.h b/indra/newview/lldrawpoolavatar.h index b9479436199c3b5effb22261dc51a2e4e3f93197..c43aa9b1e30758ae40cabe27e55414d89a9c8e64 100644 --- a/indra/newview/lldrawpoolavatar.h +++ b/indra/newview/lldrawpoolavatar.h @@ -90,10 +90,12 @@ class LLDrawPoolAvatar : public LLFacePool void beginRigid(); void beginFootShadow(); void beginSkinned(); + void beginRigged(); void endRigid(); void endFootShadow(); void endSkinned(); + void endRigged(); void beginDeferredImpostor(); void beginDeferredRigid(); diff --git a/indra/newview/lldynamictexture.cpp b/indra/newview/lldynamictexture.cpp index c7c79401a0fa843a61588f6cf2f04d51fd7e7233..c423473740151850a13502f0907c2a97f24ddae5 100644 --- a/indra/newview/lldynamictexture.cpp +++ b/indra/newview/lldynamictexture.cpp @@ -167,6 +167,8 @@ void LLViewerDynamicTexture::postRender(BOOL success) { generateGLTexture() ; } + llcallstacks << "class type: " << (S32)getType() << llcallstacksendl ; + success = mGLTexturep->setSubImageFromFrameBuffer(0, 0, mOrigin.mX, mOrigin.mY, mFullWidth, mFullHeight); } } diff --git a/indra/newview/lldynamictexture.h b/indra/newview/lldynamictexture.h index 2a944eaada5c9c9f403a086341dca851a19aca09..caf260351922624c5242b788ed8e2b8b8bc5d0c9 100644 --- a/indra/newview/lldynamictexture.h +++ b/indra/newview/lldynamictexture.h @@ -41,6 +41,19 @@ class LLViewerDynamicTexture : public LLViewerTexture { +public: + enum + { + LL_VIEWER_DYNAMIC_TEXTURE = LLViewerTexture::DYNAMIC_TEXTURE, + LL_TEX_LAYER_SET_BUFFER = LLViewerTexture::INVALID_TEXTURE_TYPE + 1, + LL_VISUAL_PARAM_HINT, + LL_VISUAL_PARAM_RESET, + LL_PREVIEW_ANIMATION, + LL_IMAGE_PREVIEW_SCULPTED, + LL_IMAGE_PREVIEW_AVATAR, + INVALID_DYNAMIC_TEXTURE + }; + protected: /*virtual*/ ~LLViewerDynamicTexture(); diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index 53330e4d9857e7e43b6cd2d0268caf33e78d8222..bc3e04db1833ddbd87281a2f7b0ed23038abaa64 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -888,7 +888,8 @@ static LLFastTimer::DeclareTimer FTM_FACE_GET_GEOM("Face Geom"); BOOL LLFace::getGeometryVolume(const LLVolume& volume, const S32 &f, const LLMatrix4& mat_vert, const LLMatrix3& mat_normal, - const U16 &index_offset) + const U16 &index_offset, + bool force_rebuild) { LLFastTimer t(FTM_FACE_GET_GEOM); const LLVolumeFace &vf = volume.getVolumeFace(f); @@ -925,8 +926,9 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, LLStrider<LLColor4U> colors; LLStrider<LLVector3> binormals; LLStrider<U16> indicesp; + LLStrider<LLVector4> weights; - BOOL full_rebuild = mDrawablep->isState(LLDrawable::REBUILD_VOLUME); + BOOL full_rebuild = force_rebuild || mDrawablep->isState(LLDrawable::REBUILD_VOLUME); BOOL global_volume = mDrawablep->getVOVolume()->isVolumeGlobal(); LLVector3 scale; @@ -944,6 +946,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, BOOL rebuild_tcoord = full_rebuild || mDrawablep->isState(LLDrawable::REBUILD_TCOORD); BOOL rebuild_normal = rebuild_pos && mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_NORMAL); BOOL rebuild_binormal = rebuild_pos && mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_BINORMAL); + bool rebuild_weights = rebuild_pos && mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_WEIGHT4); const LLTextureEntry *tep = mVObjp->getTE(f); U8 bump_code = tep ? tep->getBumpmap() : 0; @@ -960,7 +963,11 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, { mVertexBuffer->getBinormalStrider(binormals, mGeomIndex); } - + if (rebuild_weights) + { + mVertexBuffer->getWeight4Strider(weights, mGeomIndex); + } + F32 tcoord_xoffset = 0.f ; F32 tcoord_yoffset = 0.f ; F32 tcoord_xscale = 1.f ; @@ -1338,6 +1345,11 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, *binormals++ = binormal; } + if (rebuild_weights) + { + *weights++ = vf.mWeights[i]; + } + if (rebuild_color) { *colors++ = color; diff --git a/indra/newview/llface.h b/indra/newview/llface.h index 67dd97e6f7ad0954a8a80e84aadbd2ea2f02fea4..06ec043c760fafaefca45dce83c4a5c182860df1 100644 --- a/indra/newview/llface.h +++ b/indra/newview/llface.h @@ -73,6 +73,7 @@ class LLFace HUD_RENDER = 0x0008, USE_FACE_COLOR = 0x0010, TEXTURE_ANIM = 0x0020, + RIGGED = 0x0040, }; static void initClass(); @@ -145,7 +146,8 @@ class LLFace BOOL getGeometryVolume(const LLVolume& volume, const S32 &f, const LLMatrix4& mat_vert, const LLMatrix3& mat_normal, - const U16 &index_offset); + const U16 &index_offset, + bool force_rebuild = false); // For avatar U16 getGeometryAvatar( diff --git a/indra/newview/llfloateranimpreview.cpp b/indra/newview/llfloateranimpreview.cpp index 7dcf4350aab1864c5b7482ed64070ea176efb53c..07551e029089828a5f05349384327ee96d089cf4 100644 --- a/indra/newview/llfloateranimpreview.cpp +++ b/indra/newview/llfloateranimpreview.cpp @@ -1070,6 +1070,12 @@ LLPreviewAnimation::~LLPreviewAnimation() mDummyAvatar->markDead(); } +//virtual +S8 LLPreviewAnimation::getType() const +{ + return LLViewerDynamicTexture::LL_PREVIEW_ANIMATION ; +} + //----------------------------------------------------------------------------- // update() //----------------------------------------------------------------------------- diff --git a/indra/newview/llfloateranimpreview.h b/indra/newview/llfloateranimpreview.h index 3ee1f419ab26d983bdcd84bb065b4a9c03450a22..84f131a32213f92562ee4bc6420a825f3962ef57 100644 --- a/indra/newview/llfloateranimpreview.h +++ b/indra/newview/llfloateranimpreview.h @@ -50,6 +50,8 @@ class LLPreviewAnimation : public LLViewerDynamicTexture public: LLPreviewAnimation(S32 width, S32 height); + /*virtual*/ S8 getType() const ; + BOOL render(); void requestUpdate(); void rotate(F32 yaw_radians, F32 pitch_radians); diff --git a/indra/newview/llfloaterbulkpermission.cpp b/indra/newview/llfloaterbulkpermission.cpp index b2f700069f915aa8825c442ea97e0404123f7c8a..766fc0723c314489a275758d2b63c7b3872671e0 100644 --- a/indra/newview/llfloaterbulkpermission.cpp +++ b/indra/newview/llfloaterbulkpermission.cpp @@ -37,6 +37,7 @@ #include "llfloaterperms.h" // for utilities #include "llagent.h" #include "llchat.h" +#include "llinventorydefines.h" #include "llviewerwindow.h" #include "llviewerobject.h" #include "llviewerobjectlist.h" @@ -116,7 +117,7 @@ void LLFloaterBulkPermission::doApply() // worked on. // NOT static, virtual! void LLFloaterBulkPermission::inventoryChanged(LLViewerObject* viewer_object, - InventoryObjectList* inv, + LLInventoryObject::object_list_t* inv, S32, void* q_id) { @@ -250,12 +251,12 @@ void LLFloaterBulkPermission::doCheckUncheckAll(BOOL check) } -void LLFloaterBulkPermission::handleInventory(LLViewerObject* viewer_obj, InventoryObjectList* inv) +void LLFloaterBulkPermission::handleInventory(LLViewerObject* viewer_obj, LLInventoryObject::object_list_t* inv) { LLScrollListCtrl* list = getChild<LLScrollListCtrl>("queue output"); - InventoryObjectList::const_iterator it = inv->begin(); - InventoryObjectList::const_iterator end = inv->end(); + LLInventoryObject::object_list_t::const_iterator it = inv->begin(); + LLInventoryObject::object_list_t::const_iterator end = inv->end(); for ( ; it != end; ++it) { LLAssetType::EType asstype = (*it)->getType(); diff --git a/indra/newview/llfloaterbulkpermission.h b/indra/newview/llfloaterbulkpermission.h index bffcff7059a96e85c46e7e11e43d92c1e4fa5f2f..80dc88fbb1bd413404830a1b4fbf3ce94ca365f7 100644 --- a/indra/newview/llfloaterbulkpermission.h +++ b/indra/newview/llfloaterbulkpermission.h @@ -63,13 +63,13 @@ class LLFloaterBulkPermission : public LLFloater, public LLVOInventoryListener // This is the callback method for the viewer object currently // being worked on. /*virtual*/ void inventoryChanged(LLViewerObject* obj, - InventoryObjectList* inv, + LLInventoryObject::object_list_t* inv, S32 serial_num, void* queue); // This is called by inventoryChanged void handleInventory(LLViewerObject* viewer_obj, - InventoryObjectList* inv); + LLInventoryObject::object_list_t* inv); void updateInventory(LLViewerObject* object, diff --git a/indra/newview/llfloaterbuy.cpp b/indra/newview/llfloaterbuy.cpp index 589f570d96f0416e3eefef3c812698701ade1099..44c82f1941eadf62f0a72249e97867cedf5d2192 100644 --- a/indra/newview/llfloaterbuy.cpp +++ b/indra/newview/llfloaterbuy.cpp @@ -44,6 +44,7 @@ #include "llinventorymodel.h" // for gInventory #include "llfloaterreg.h" #include "llfloaterinventory.h" // for get_item_icon +#include "llinventorydefines.h" #include "llinventoryfunctions.h" #include "llnotificationsutil.h" #include "llselectmgr.h" @@ -195,7 +196,7 @@ void LLFloaterBuy::show(const LLSaleInfo& sale_info) } void LLFloaterBuy::inventoryChanged(LLViewerObject* obj, - InventoryObjectList* inv, + LLInventoryObject::object_list_t* inv, S32 serial_num, void* data) { @@ -220,8 +221,8 @@ void LLFloaterBuy::inventoryChanged(LLViewerObject* obj, return; } - InventoryObjectList::const_iterator it = inv->begin(); - InventoryObjectList::const_iterator end = inv->end(); + LLInventoryObject::object_list_t::const_iterator it = inv->begin(); + LLInventoryObject::object_list_t::const_iterator end = inv->end(); for ( ; it != end; ++it ) { LLInventoryObject* obj = (LLInventoryObject*)(*it); @@ -246,8 +247,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 - || inv_item->getFlags() & LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS) + if ( inv_item->getFlags() & LLInventoryItemFlags::II_FLAGS_LANDMARK_VISITED + || inv_item->getFlags() & LLInventoryItemFlags::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS) { item_is_multi = TRUE; } diff --git a/indra/newview/llfloaterbuy.h b/indra/newview/llfloaterbuy.h index ab38e082dc8817242abcc29cd63230a9f0d952e4..411c8fb00e0a536515887930ffdc3577655d591c 100644 --- a/indra/newview/llfloaterbuy.h +++ b/indra/newview/llfloaterbuy.h @@ -65,7 +65,7 @@ class LLFloaterBuy void requestObjectInventories(); /*virtual*/ void inventoryChanged(LLViewerObject* obj, - InventoryObjectList* inv, + LLInventoryObject::object_list_t* inv, S32 serial_num, void* data); diff --git a/indra/newview/llfloaterbuycontents.cpp b/indra/newview/llfloaterbuycontents.cpp index 0daef27af297e4773006969a1b977aab06832437..1d989ad0fd5bb2ac2f41cc86040cd66a15c87eb7 100644 --- a/indra/newview/llfloaterbuycontents.cpp +++ b/indra/newview/llfloaterbuycontents.cpp @@ -44,6 +44,7 @@ #include "llagent.h" // for agent id #include "llcheckboxctrl.h" +#include "llinventorydefines.h" #include "llinventoryfunctions.h" #include "llinventorymodel.h" // for gInventory #include "llfloaterreg.h" @@ -142,7 +143,7 @@ void LLFloaterBuyContents::show(const LLSaleInfo& sale_info) void LLFloaterBuyContents::inventoryChanged(LLViewerObject* obj, - InventoryObjectList* inv, + LLInventoryObject::object_list_t* inv, S32 serial_num, void* data) { @@ -176,8 +177,8 @@ void LLFloaterBuyContents::inventoryChanged(LLViewerObject* obj, LLInventoryType::EType inv_type; S32 wearable_count = 0; - InventoryObjectList::const_iterator it = inv->begin(); - InventoryObjectList::const_iterator end = inv->end(); + LLInventoryObject::object_list_t::const_iterator it = inv->begin(); + LLInventoryObject::object_list_t::const_iterator end = inv->end(); for ( ; it != end; ++it ) { @@ -215,7 +216,7 @@ void LLFloaterBuyContents::inventoryChanged(LLViewerObject* obj, LLSD row; BOOL item_is_multi = FALSE; - if ( inv_item->getFlags() & LLInventoryItem::II_FLAGS_LANDMARK_VISITED ) + if ( inv_item->getFlags() & LLInventoryItemFlags::II_FLAGS_LANDMARK_VISITED ) { item_is_multi = TRUE; } diff --git a/indra/newview/llfloaterbuycontents.h b/indra/newview/llfloaterbuycontents.h index 8045a46c9f235f93cb0e3214c5dc524d62b00c19..ab161adfeaee504c38a0f1fb548adb6e5fce7fe0 100644 --- a/indra/newview/llfloaterbuycontents.h +++ b/indra/newview/llfloaterbuycontents.h @@ -59,7 +59,7 @@ class LLFloaterBuyContents protected: void requestObjectInventories(); /*virtual*/ void inventoryChanged(LLViewerObject* obj, - InventoryObjectList* inv, + LLInventoryObject::object_list_t* inv, S32 serial_num, void* data); diff --git a/indra/newview/llfloatergesture.cpp b/indra/newview/llfloatergesture.cpp index 0aca12bc5eb9327da9d79fb4ccaaacf62bfaa819..8ee8d13a9c09959246cb038fe856ef5808620c0e 100644 --- a/indra/newview/llfloatergesture.cpp +++ b/indra/newview/llfloatergesture.cpp @@ -148,7 +148,7 @@ void LLFloaterGesture::done() if (!unloaded_folders.empty()) { LL_DEBUGS("Gesture")<< "Fetching subdirectories....." << LL_ENDL; - fetchDescendents(unloaded_folders); + fetch(unloaded_folders); } else { @@ -202,7 +202,7 @@ BOOL LLFloaterGesture::postBuild() 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); - fetchDescendents(folders); + fetch(folders); if (mGestureList) { diff --git a/indra/newview/llfloatergodtools.cpp b/indra/newview/llfloatergodtools.cpp index e7b2da043f8c5f95d89568f583899a429c0dee3d..bd07cfdfbfe4fc48f03eb7e9fad69a1524e0fbaf 100644 --- a/indra/newview/llfloatergodtools.cpp +++ b/indra/newview/llfloatergodtools.cpp @@ -922,6 +922,7 @@ LLPanelObjectTools::~LLPanelObjectTools() BOOL LLPanelObjectTools::postBuild() { + refresh(); return TRUE; } diff --git a/indra/newview/llfloaterimagepreview.cpp b/indra/newview/llfloaterimagepreview.cpp index 6b754bd0653107d65508d986444dad3e29ac3cbb..ef9da30552ed1598babba5591b776a070fed7fd0 100644 --- a/indra/newview/llfloaterimagepreview.cpp +++ b/indra/newview/llfloaterimagepreview.cpp @@ -629,6 +629,11 @@ LLImagePreviewAvatar::~LLImagePreviewAvatar() mDummyAvatar->markDead(); } +//virtual +S8 LLImagePreviewAvatar::getType() const +{ + return LLViewerDynamicTexture::LL_IMAGE_PREVIEW_AVATAR ; +} void LLImagePreviewAvatar::setPreviewTarget(const std::string& joint_name, const std::string& mesh_name, LLImageRaw* imagep, F32 distance, BOOL male) { @@ -808,6 +813,11 @@ LLImagePreviewSculpted::~LLImagePreviewSculpted() { } +//virtual +S8 LLImagePreviewSculpted::getType() const +{ + return LLViewerDynamicTexture::LL_IMAGE_PREVIEW_SCULPTED ; +} void LLImagePreviewSculpted::setPreviewTarget(LLImageRaw* imagep, F32 distance) { diff --git a/indra/newview/llfloaterimagepreview.h b/indra/newview/llfloaterimagepreview.h index 4a12543650f27a58ccb0d5e8a93a4a7aa49755a0..466bd1d0ec34f2d1235aee63261400c403ac9d2b 100644 --- a/indra/newview/llfloaterimagepreview.h +++ b/indra/newview/llfloaterimagepreview.h @@ -54,6 +54,8 @@ class LLImagePreviewSculpted : public LLViewerDynamicTexture public: LLImagePreviewSculpted(S32 width, S32 height); + /*virtual*/ S8 getType() const ; + void setPreviewTarget(LLImageRaw *imagep, F32 distance); void setTexture(U32 name) { mTextureName = name; } @@ -85,6 +87,8 @@ class LLImagePreviewAvatar : public LLViewerDynamicTexture public: LLImagePreviewAvatar(S32 width, S32 height); + /*virtual*/ S8 getType() const ; + void setPreviewTarget(const std::string& joint_name, const std::string& mesh_name, LLImageRaw* imagep, F32 distance, BOOL male); void setTexture(U32 name) { mTextureName = name; } void clearPreviewTexture(const std::string& mesh_name); diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index 02c83dcd09e2abeed9f255f55450cd7dcfe9039a..2ff483cd34c805f600f84dc2117d2876a7343c92 100644 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -91,6 +91,7 @@ static std::string MATURITY = "[MATURITY]"; // constants used in callbacks below - syntactic sugar. static const BOOL BUY_GROUP_LAND = TRUE; static const BOOL BUY_PERSONAL_LAND = FALSE; +LLPointer<LLParcelSelection> LLPanelLandGeneral::sSelectionForBuyPass = NULL; // Statics LLParcelSelectionObserver* LLFloaterLand::sObserver = NULL; @@ -975,6 +976,8 @@ void LLPanelLandGeneral::onClickBuyPass(void* data) args["PARCEL_NAME"] = parcel_name; args["TIME"] = time; + // creating pointer on selection to avoid deselection of parcel until we are done with buying pass (EXT-6464) + sSelectionForBuyPass = LLViewerParcelMgr::getInstance()->getParcelSelection(); LLNotificationsUtil::add("LandBuyPass", args, LLSD(), cbBuyPass); } @@ -1006,6 +1009,8 @@ bool LLPanelLandGeneral::cbBuyPass(const LLSD& notification, const LLSD& respons // User clicked OK LLViewerParcelMgr::getInstance()->buyPass(); } + // we are done with buying pass, additional selection is no longer needed + sSelectionForBuyPass = NULL; return false; } diff --git a/indra/newview/llfloaterland.h b/indra/newview/llfloaterland.h index fe80766a746514c0522d62411f4658532352ee23..0a743e5215c39b81904b3ae4b2170b963d106871 100644 --- a/indra/newview/llfloaterland.h +++ b/indra/newview/llfloaterland.h @@ -234,6 +234,11 @@ class LLPanelLandGeneral LLSafeHandle<LLParcelSelection>& mParcel; + // This pointer is needed to avoid parcel deselection until buying pass is completed or canceled. + // Deselection happened because of zero references to parcel selection, which took place when + // "Buy Pass" was called from popup menu(EXT-6464) + static LLPointer<LLParcelSelection> sSelectionForBuyPass; + static LLHandle<LLFloater> sBuyPassDialogHandle; }; diff --git a/indra/newview/llfloateropenobject.cpp b/indra/newview/llfloateropenobject.cpp index ec50ed596c7be81bc15ed63254cafe529d4a1dab..71bfae316a53ca90c80cc3580ec69d64cce70154 100644 --- a/indra/newview/llfloateropenobject.cpp +++ b/indra/newview/llfloateropenobject.cpp @@ -121,12 +121,12 @@ void LLFloaterOpenObject::refresh() { // this folder is coming from an object, as there is only one folder in an object, the root, // we need to collect the entire contents and handle them as a group - InventoryObjectList inventory_objects; + LLInventoryObject::object_list_t inventory_objects; object->getInventoryContents(inventory_objects); if (!inventory_objects.empty()) { - for (InventoryObjectList::iterator it = inventory_objects.begin(); + for (LLInventoryObject::object_list_t::iterator it = inventory_objects.begin(); it != inventory_objects.end(); ++it) { diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index d15eedd9c09bf02f0b222c91f517df98303d63d9..00292eecb4aadeece9ff4e332a4c89c9921dca03 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -107,6 +107,8 @@ #include "llpluginclassmedia.h" #include "llteleporthistorystorage.h" +#include "lllogininstance.h" // to check if logged in yet + const F32 MAX_USER_FAR_CLIP = 512.f; const F32 MIN_USER_FAR_CLIP = 64.f; @@ -182,7 +184,6 @@ void LLVoiceSetKeyDialog::onCancel(void* user_data) // if creating/destroying these is too slow, we'll need to create // a static member and update all our static callbacks -void handleNameTagOptionChanged(const LLSD& newvalue); bool callback_clear_browser_cache(const LLSD& notification, const LLSD& response); //bool callback_skip_dialogs(const LLSD& notification, const LLSD& response, LLFloaterPreference* floater); @@ -218,15 +219,6 @@ bool callback_clear_browser_cache(const LLSD& notification, const LLSD& response return false; } -void handleNameTagOptionChanged(const LLSD& newvalue) -{ - S32 name_tag_option = S32(newvalue); - if(name_tag_option==2) - { - gSavedSettings.setBOOL("SmallAvatarNames", TRUE); - } -} - /*bool callback_skip_dialogs(const LLSD& notification, const LLSD& response, LLFloaterPreference* floater) { S32 option = LLNotificationsUtil::getSelectedOption(notification, response); @@ -319,8 +311,6 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key) mCommitCallbackRegistrar.add("Pref.MaturitySettings", boost::bind(&LLFloaterPreference::onChangeMaturity, this)); sSkin = gSavedSettings.getString("SkinCurrent"); - - gSavedSettings.getControl("AvatarNameTagMode")->getCommitSignal()->connect(boost::bind(&handleNameTagOptionChanged, _2)); } BOOL LLFloaterPreference::postBuild() @@ -336,8 +326,6 @@ BOOL LLFloaterPreference::postBuild() LLTabContainer* tabcontainer = getChild<LLTabContainer>("pref core"); if (!tabcontainer->selectTab(gSavedSettings.getS32("LastPrefTab"))) tabcontainer->selectFirstTab(); - S32 show_avatar_nametag_options = gSavedSettings.getS32("AvatarNameTagMode"); - handleNameTagOptionChanged(LLSD(show_avatar_nametag_options)); std::string cache_location = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, ""); childSetText("cache_location", cache_location); @@ -515,13 +503,15 @@ void LLFloaterPreference::onOpen(const LLSD& key) // if they're not adult or a god, they shouldn't see the adult selection, so delete it if (!gAgent.isAdult() && !gAgent.isGodlike()) { - // we're going to remove the adult entry from the combo. This obviously depends - // on the order of items in the XML file, but there doesn't seem to be a reasonable - // way to depend on the field in XML called 'name'. - maturity_combo->remove(0); + // we're going to remove the adult entry from the combo + LLScrollListCtrl* maturity_list = maturity_combo->findChild<LLScrollListCtrl>("ComboBox"); + if (maturity_list) + { + maturity_list->deleteItems(LLSD(SIM_ACCESS_ADULT)); + } } childSetVisible("maturity_desired_combobox", true); - childSetVisible("maturity_desired_textbox", false); + childSetVisible("maturity_desired_textbox", false); } else { @@ -890,6 +880,8 @@ void LLFloaterPreference::refreshEnabledState() // now turn off any features that are unavailable disableUnavailableSettings(); + + childSetEnabled ("block_list", LLLoginInstance::getInstance()->authSuccess()); } void LLFloaterPreference::disableUnavailableSettings() @@ -1145,10 +1137,8 @@ void LLFloaterPreference::onClickLogPath() { return; //Canceled! } - std::string chat_log_dir = picker.getDirName(); - std::string chat_log_top_folder= gDirUtilp->getBaseFileName(chat_log_dir); - gSavedPerAccountSettings.setString("InstantMessageLogPath",chat_log_dir); - gSavedPerAccountSettings.setString("InstantMessageLogFolder",chat_log_top_folder); + + gSavedPerAccountSettings.setString("InstantMessageLogPath", picker.getDirName()); } void LLFloaterPreference::setPersonalInfo(const std::string& visibility, bool im_via_email, const std::string& email) diff --git a/indra/newview/llfloaterproperties.cpp b/indra/newview/llfloaterproperties.cpp index 5c0593ad29c3e413624c1a953af7115711064f2c..bb9d151cd261b718bb00c08e651bcaaac19b4d65 100644 --- a/indra/newview/llfloaterproperties.cpp +++ b/indra/newview/llfloaterproperties.cpp @@ -38,12 +38,12 @@ #include "llcachename.h" #include "lldbstrings.h" #include "llfloaterreg.h" -#include "llinventory.h" #include "llagent.h" #include "llbutton.h" #include "llcheckboxctrl.h" #include "llavataractions.h" +#include "llinventorydefines.h" #include "llinventoryobserver.h" #include "llinventorymodel.h" #include "lllineeditor.h" @@ -380,9 +380,9 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item) if (item->getType() == LLAssetType::AT_OBJECT) { U32 flags = item->getFlags(); - slam_perm = flags & LLInventoryItem::II_FLAGS_OBJECT_SLAM_PERM; - overwrite_everyone = flags & LLInventoryItem::II_FLAGS_OBJECT_PERM_OVERWRITE_EVERYONE; - overwrite_group = flags & LLInventoryItem::II_FLAGS_OBJECT_PERM_OVERWRITE_GROUP; + slam_perm = flags & LLInventoryItemFlags::II_FLAGS_OBJECT_SLAM_PERM; + overwrite_everyone = flags & LLInventoryItemFlags::II_FLAGS_OBJECT_PERM_OVERWRITE_EVERYONE; + overwrite_group = flags & LLInventoryItemFlags::II_FLAGS_OBJECT_PERM_OVERWRITE_GROUP; } std::string perm_string; @@ -693,7 +693,7 @@ void LLFloaterProperties::onCommitPermissions() if((perm.getMaskNextOwner()!=item->getPermissions().getMaskNextOwner()) && (item->getType() == LLAssetType::AT_OBJECT)) { - flags |= LLInventoryItem::II_FLAGS_OBJECT_SLAM_PERM; + flags |= LLInventoryItemFlags::II_FLAGS_OBJECT_SLAM_PERM; } // If everyone permissions have changed (and this is an object) // then set the overwrite everyone permissions flag so they @@ -701,7 +701,7 @@ void LLFloaterProperties::onCommitPermissions() if ((perm.getMaskEveryone()!=item->getPermissions().getMaskEveryone()) && (item->getType() == LLAssetType::AT_OBJECT)) { - flags |= LLInventoryItem::II_FLAGS_OBJECT_PERM_OVERWRITE_EVERYONE; + flags |= LLInventoryItemFlags::II_FLAGS_OBJECT_PERM_OVERWRITE_EVERYONE; } // If group permissions have changed (and this is an object) // then set the overwrite group permissions flag so they @@ -709,7 +709,7 @@ void LLFloaterProperties::onCommitPermissions() if ((perm.getMaskGroup()!=item->getPermissions().getMaskGroup()) && (item->getType() == LLAssetType::AT_OBJECT)) { - flags |= LLInventoryItem::II_FLAGS_OBJECT_PERM_OVERWRITE_GROUP; + flags |= LLInventoryItemFlags::II_FLAGS_OBJECT_PERM_OVERWRITE_GROUP; } new_item->setFlags(flags); if(mObjectID.isNull()) @@ -821,7 +821,7 @@ void LLFloaterProperties::updateSaleInfo() if (item->getType() == LLAssetType::AT_OBJECT) { U32 flags = new_item->getFlags(); - flags |= LLInventoryItem::II_FLAGS_OBJECT_SLAM_SALE; + flags |= LLInventoryItemFlags::II_FLAGS_OBJECT_SLAM_SALE; new_item->setFlags(flags); } diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp index 357c10c6b64442206b5e487e773dde71225637da..cd4876834e28f517f321da1c5f4779701f97e1ef 100644 --- a/indra/newview/llfloatersnapshot.cpp +++ b/indra/newview/llfloatersnapshot.cpp @@ -1321,7 +1321,27 @@ void LLFloaterSnapshot::Impl::updateLayout(LLFloaterSnapshot* floaterp) // static void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater) { + LLSnapshotLivePreview* previewp = getPreviewView(floater); + if (NULL == previewp) + { + return; + } + + // Disable buttons until Snapshot is ready. EXT-6534 + BOOL got_snap = previewp->getSnapshotUpToDate(); + + // process Main buttons + floater->childSetEnabled("share", got_snap); + floater->childSetEnabled("save", got_snap); + floater->childSetEnabled("set_profile_pic", got_snap); + + // process Share actions buttons + floater->childSetEnabled("share_to_web", got_snap); + floater->childSetEnabled("share_to_email", got_snap); + // process Save actions buttons + floater->childSetEnabled("save_to_inventory", got_snap); + floater->childSetEnabled("save_to_computer", got_snap); } // static diff --git a/indra/newview/llfloatertos.cpp b/indra/newview/llfloatertos.cpp index 69ee8cd54754e848e5231a91f2ee66a2b1ba4d83..3db9587797d590b08bb23dbaa88111b9a005b0b1 100644 --- a/indra/newview/llfloatertos.cpp +++ b/indra/newview/llfloatertos.cpp @@ -57,7 +57,9 @@ LLFloaterTOS::LLFloaterTOS(const LLSD& data) : LLModalDialog( data["message"].asString() ), mMessage(data["message"].asString()), mWebBrowserWindowId( 0 ), - mLoadCompleteCount( 0 ), + mLoadingScreenLoaded(false), + mSiteAlive(false), + mRealNavigateBegun(false), mReplyPumpName(data["reply_pump"].asString()) { } @@ -138,6 +140,11 @@ BOOL LLFloaterTOS::postBuild() if ( web_browser ) { web_browser->addObserver(this); + + // Don't use the start_url parameter for this browser instance -- it may finish loading before we get to add our observer. + // Store the URL separately and navigate here instead. + web_browser->navigateTo( getString( "loading_url" ) ); + gResponsePtr = LLIamHere::build( this ); LLHTTPClient::get( getString( "real_url" ), gResponsePtr ); } @@ -147,15 +154,16 @@ BOOL LLFloaterTOS::postBuild() void LLFloaterTOS::setSiteIsAlive( bool alive ) { + mSiteAlive = alive; + // only do this for TOS pages if (hasChild("tos_html")) { - LLMediaCtrl* web_browser = getChild<LLMediaCtrl>("tos_html"); // if the contents of the site was retrieved if ( alive ) { // navigate to the "real" page - web_browser->navigateTo( getString( "real_url" ) ); + loadIfNeeded(); } else { @@ -167,6 +175,19 @@ void LLFloaterTOS::setSiteIsAlive( bool alive ) } } +void LLFloaterTOS::loadIfNeeded() +{ + if(!mRealNavigateBegun && mSiteAlive) + { + LLMediaCtrl* web_browser = getChild<LLMediaCtrl>("tos_html"); + if(web_browser) + { + mRealNavigateBegun = true; + web_browser->navigateTo( getString( "real_url" ) ); + } + } +} + LLFloaterTOS::~LLFloaterTOS() { @@ -216,8 +237,13 @@ void LLFloaterTOS::onCancel( void* userdata ) LLEventPumps::instance().obtain(self->mReplyPumpName).post(LLSD(false)); } - self->mLoadCompleteCount = 0; // reset counter for next time we come to TOS - self->closeFloater(); // destroys this object + // reset state for next time we come to TOS + self->mLoadingScreenLoaded = false; + self->mSiteAlive = false; + self->mRealNavigateBegun = false; + + // destroys this object + self->closeFloater(); } //virtual @@ -225,8 +251,12 @@ void LLFloaterTOS::handleMediaEvent(LLPluginClassMedia* /*self*/, EMediaEvent ev { if(event == MEDIA_EVENT_NAVIGATE_COMPLETE) { - // skip past the loading screen navigate complete - if ( ++mLoadCompleteCount == 2 ) + if(!mLoadingScreenLoaded) + { + mLoadingScreenLoaded = true; + loadIfNeeded(); + } + else if(mRealNavigateBegun) { llinfos << "NAVIGATE COMPLETE" << llendl; // enable Agree to TOS radio button now that page has loaded diff --git a/indra/newview/llfloatertos.h b/indra/newview/llfloatertos.h index 1d573e817051b5bb5d977aea5b365063a2d3750c..6ea56408eeaf1b0e39936a53e8587ebcd881b6cf 100644 --- a/indra/newview/llfloatertos.h +++ b/indra/newview/llfloatertos.h @@ -66,9 +66,14 @@ class LLFloaterTOS : /*virtual*/ void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event); private: + + void loadIfNeeded(); + std::string mMessage; int mWebBrowserWindowId; - int mLoadCompleteCount; + bool mLoadingScreenLoaded; + bool mSiteAlive; + bool mRealNavigateBegun; std::string mReplyPumpName; }; diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp index f17c9765b9f167e7db5bfb93a93674419fef0f3e..b3223ad4945fdc08e1ce8260860c1669e538834e 100644 --- a/indra/newview/llfloaterworldmap.cpp +++ b/indra/newview/llfloaterworldmap.cpp @@ -125,7 +125,7 @@ class LLWorldMapHandler : public LLCommandHandler } // support the secondlife:///app/worldmap/{LOCATION}/{COORDS} SLapp - const std::string region_name = params[0].asString(); + const std::string region_name = LLURI::unescape(params[0].asString()); S32 x = (params.size() > 1) ? params[1].asInteger() : 128; S32 y = (params.size() > 2) ? params[2].asInteger() : 128; S32 z = (params.size() > 3) ? params[3].asInteger() : 0; diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp index 43743ec37a7377392e9f6d152cd0d1a98e64d305..8d4d6a178a6ca24ae8ec4ced09de83e4f1e9be3f 100644 --- a/indra/newview/llfolderview.cpp +++ b/indra/newview/llfolderview.cpp @@ -276,11 +276,6 @@ LLFolderView::~LLFolderView( void ) mRenamer = NULL; mStatusTextBox = NULL; - if( gEditMenuHandler == this ) - { - gEditMenuHandler = NULL; - } - mAutoOpenItems.removeAllNodes(); gIdleCallbacks.deleteFunction(idle, this); @@ -2103,8 +2098,7 @@ bool LLFolderView::doToSelected(LLInventoryModel* model, const LLSD& userdata) if(!folder_item) continue; LLInvFVBridge* bridge = (LLInvFVBridge*)folder_item->getListener(); if(!bridge) continue; - - bridge->performAction(this, model, action); + bridge->performAction(model, action); } LLFloater::setFloaterHost(NULL); diff --git a/indra/newview/llfoldervieweventlistener.h b/indra/newview/llfoldervieweventlistener.h index 12e100caf4fe82cc1a48d5b95257b541787afa9d..a2ef8c1d12cf7c72d410e5b7558f913e295d2da9 100644 --- a/indra/newview/llfoldervieweventlistener.h +++ b/indra/newview/llfoldervieweventlistener.h @@ -88,7 +88,7 @@ class LLFolderViewEventListener virtual BOOL isUpToDate() const = 0; virtual BOOL hasChildren() const = 0; virtual LLInventoryType::EType getInventoryType() const = 0; - virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) = 0; + virtual void performAction(LLInventoryModel* model, std::string action) = 0; // This method should be called when a drag begins. returns TRUE // if the drag can begin, otherwise FALSE. diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp index c916e4b98c93f71cf48f4cce830c90aa8be8a676..3208218302c3b42d49cff4d158de839f9f739145 100644 --- a/indra/newview/llfolderviewitem.cpp +++ b/indra/newview/llfolderviewitem.cpp @@ -834,13 +834,17 @@ void LLFolderViewItem::draw() 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 sSuffixColor = LLUIColorTable::instance().getColor("InventoryItemColor", DEFAULT_WHITE); + static LLUIColor sLibraryColor = LLUIColorTable::instance().getColor("InventoryItemLibraryColor", 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); + const BOOL in_inventory = getListener() && gInventory.isObjectDescendentOf(getListener()->getUUID(), gInventory.getRootFolderID()); + const BOOL in_library = getListener() && gInventory.isObjectDescendentOf(getListener()->getUUID(), gInventory.getLibraryRootFolderID()); //--------------------------------------------------------------------------------// // Draw open folder arrow @@ -961,6 +965,8 @@ void LLFolderViewItem::draw() } LLColor4 color = (mIsSelected && filled) ? sHighlightFgColor : sFgColor; + if (in_library) color = sLibraryColor; + 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); @@ -982,8 +988,6 @@ void LLFolderViewItem::draw() S32_MAX, S32_MAX, &right_x, FALSE ); text_left = right_x; } - - //--------------------------------------------------------------------------------// // Draw the actual label text // @@ -995,13 +999,11 @@ void LLFolderViewItem::draw() // Draw "Loading..." text // bool root_is_loading = false; - if (getListener() && gInventory.isObjectDescendentOf(getListener()->getUUID(), - gInventory.getRootFolderID())) // Descendent of my inventory + if (in_inventory) { root_is_loading = LLInventoryModelBackgroundFetch::instance().inventoryFetchInProgress(); } - if (getListener() && gInventory.isObjectDescendentOf(getListener()->getUUID(), - gInventory.getLibraryRootFolderID())) // Descendent of library + if (in_library) { root_is_loading = LLInventoryModelBackgroundFetch::instance().libraryFetchInProgress(); } @@ -1057,20 +1059,21 @@ void LLFolderViewItem::draw() ///---------------------------------------------------------------------------- LLFolderViewFolder::LLFolderViewFolder( const LLFolderViewItem::Params& p ): -LLFolderViewItem( p ), // 0 = no create time -mIsOpen(FALSE), -mExpanderHighlighted(FALSE), -mCurHeight(0.f), -mTargetHeight(0.f), -mAutoOpenCountdown(0.f), -mSubtreeCreationDate(0), -mAmTrash(LLFolderViewFolder::UNKNOWN), -mLastArrangeGeneration( -1 ), -mLastCalculatedWidth(0), -mCompletedFilterGeneration(-1), -mMostFilteredDescendantGeneration(-1), -mNeedsSort(false) -{} + LLFolderViewItem( p ), // 0 = no create time + mIsOpen(FALSE), + mExpanderHighlighted(FALSE), + mCurHeight(0.f), + mTargetHeight(0.f), + mAutoOpenCountdown(0.f), + mSubtreeCreationDate(0), + mAmTrash(LLFolderViewFolder::UNKNOWN), + mLastArrangeGeneration( -1 ), + mLastCalculatedWidth(0), + mCompletedFilterGeneration(-1), + mMostFilteredDescendantGeneration(-1), + mNeedsSort(false) +{ +} // Destroys the object LLFolderViewFolder::~LLFolderViewFolder( void ) diff --git a/indra/newview/llfriendcard.cpp b/indra/newview/llfriendcard.cpp index a848128d67026ba7c1d16b83132ea727f76a4e37..6f069cca17b731bdd166750876857eb9a353d612 100644 --- a/indra/newview/llfriendcard.cpp +++ b/indra/newview/llfriendcard.cpp @@ -413,7 +413,7 @@ void LLFriendCardsManager::fetchAndCheckFolderDescendents(const LLUUID& folder_i uuid_vec_t folders; folders.push_back(folder_id); - fetch->fetchDescendents(folders); + fetch->fetch(folders); if(fetch->isEverythingComplete()) { // everything is already here - call done. diff --git a/indra/newview/llgesturemgr.cpp b/indra/newview/llgesturemgr.cpp index fbacbd704f401c3aefbea9f666a46f2a3260f1c5..a4342a4bc9a00ada5a3443cecea1abd606698d07 100644 --- a/indra/newview/llgesturemgr.cpp +++ b/indra/newview/llgesturemgr.cpp @@ -1031,9 +1031,9 @@ void LLGestureMgr::onLoadComplete(LLVFS *vfs, else { // Watch this item and set gesture name when item exists in inventory - item_ref_t ids; + uuid_vec_t ids; ids.push_back(item_id); - self.fetchItems(ids); + self.fetch(ids); } self.mActive[item_id] = gesture; diff --git a/indra/newview/llgroupactions.cpp b/indra/newview/llgroupactions.cpp index d4eecc8c48c2a61456e2095fb8e4c0e5c630e496..438159b2e68a0baeb5a211359778e89b694d5906 100644 --- a/indra/newview/llgroupactions.cpp +++ b/indra/newview/llgroupactions.cpp @@ -75,12 +75,13 @@ class LLGroupHandler : public LLCommandHandler return false; } - //*TODO by what to replace showing groups floater? if (tokens[0].asString() == "list") { if (tokens[1].asString() == "show") { - //LLFloaterReg::showInstance("contacts", "groups"); + LLSD params; + params["people_panel_tab_name"] = "groups_panel"; + LLSideTray::getInstance()->showPanel("panel_people", params); return true; } return false; diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index e394b4dfc125495f8780d4d8afa098f9457ceec1..ddd42492a0cb0d1d0edb2dabcc0e39b72f2cbb9d 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -36,8 +36,6 @@ // external projects #include "lltransfersourceasset.h" - - #include "llagent.h" #include "llagentcamera.h" #include "llagentwearables.h" @@ -52,6 +50,7 @@ #include "llimfloater.h" #include "llimview.h" #include "llinventoryclipboard.h" +#include "llinventorydefines.h" #include "llinventoryfunctions.h" #include "llinventorymodel.h" #include "llinventorymodelbackgroundfetch.h" @@ -72,6 +71,18 @@ #include "llwearablelist.h" #include "llpaneloutfitsinventory.h" +typedef std::pair<LLUUID, LLUUID> two_uuids_t; +typedef std::list<two_uuids_t> two_uuids_list_t; + +struct LLMoveInv +{ + LLUUID mObjectID; + LLUUID mCategoryID; + two_uuids_list_t mMoveList; + void (*mCallback)(S32, void*); + void* mUserData; +}; + using namespace LLOldEvents; // Helpers @@ -95,6 +106,7 @@ void remove_inventory_category_from_avatar(LLInventoryCategory* category); void remove_inventory_category_from_avatar_step2( BOOL proceed, LLUUID category_id); bool move_task_inventory_callback(const LLSD& notification, const LLSD& response, LLMoveInv*); bool confirm_replace_attachment_rez(const LLSD& notification, const LLSD& response); +void teleport_via_landmark(const LLUUID& asset_id); std::string ICON_NAME[ICON_NAME_COUNT] = { @@ -130,19 +142,22 @@ std::string ICON_NAME[ICON_NAME_COUNT] = "Inv_Animation", "Inv_Gesture", + "Inv_Mesh", "Inv_LinkItem", - "Inv_LinkFolder", - - "Inv_Mesh" + "Inv_LinkFolder" }; // +=================================================+ // | LLInvFVBridge | // +=================================================+ -LLInvFVBridge::LLInvFVBridge(LLInventoryPanel* inventory, const LLUUID& uuid) : -mUUID(uuid), mInvType(LLInventoryType::IT_NONE) +LLInvFVBridge::LLInvFVBridge(LLInventoryPanel* inventory, + LLFolderView* root, + const LLUUID& uuid) : + mUUID(uuid), + mRoot(root), + mInvType(LLInventoryType::IT_NONE) { mInventoryPanel = inventory->getHandle(); } @@ -241,7 +256,7 @@ void LLInvFVBridge::showProperties() // Disable old properties floater; this is replaced by the sidepanel. /* - LLFloaterReg::showInstance("properties", mUUID); + LLFloaterReg::showInstance("properties", mUUID); */ } @@ -489,8 +504,8 @@ BOOL LLInvFVBridge::isClipboardPasteableAsLink() const } void hide_context_entries(LLMenuGL& menu, - const menuentry_vec_t &entries_to_show, - const menuentry_vec_t &disabled_entries) + const menuentry_vec_t &entries_to_show, + const menuentry_vec_t &disabled_entries) { const LLView::child_list_t *list = menu.getChildList(); @@ -864,21 +879,11 @@ void LLInvFVBridge::changeCategoryParent(LLInventoryModel* model, model->notifyObservers(); } - -const std::string safe_inv_type_lookup(LLInventoryType::EType inv_type) -{ - const std::string rv= LLInventoryType::lookup(inv_type); - if(rv.empty()) - { - return std::string("<invalid>"); - } - return rv; -} - LLInvFVBridge* LLInvFVBridge::createBridge(LLAssetType::EType asset_type, LLAssetType::EType actual_asset_type, LLInventoryType::EType inv_type, LLInventoryPanel* inventory, + LLFolderView* root, const LLUUID& uuid, U32 flags) { @@ -888,111 +893,111 @@ LLInvFVBridge* LLInvFVBridge::createBridge(LLAssetType::EType asset_type, case LLAssetType::AT_TEXTURE: if(!(inv_type == LLInventoryType::IT_TEXTURE || inv_type == LLInventoryType::IT_SNAPSHOT)) { - llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; + llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << LLInventoryType::lookupHumanReadable(inv_type) << " on uuid " << uuid << llendl; } - new_listener = new LLTextureBridge(inventory, uuid, inv_type); + new_listener = new LLTextureBridge(inventory, root, uuid, inv_type); break; case LLAssetType::AT_SOUND: if(!(inv_type == LLInventoryType::IT_SOUND)) { - llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; + llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << LLInventoryType::lookupHumanReadable(inv_type) << " on uuid " << uuid << llendl; } - new_listener = new LLSoundBridge(inventory, uuid); + new_listener = new LLSoundBridge(inventory, root, uuid); break; case LLAssetType::AT_LANDMARK: if(!(inv_type == LLInventoryType::IT_LANDMARK)) { - llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; + llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << LLInventoryType::lookupHumanReadable(inv_type) << " on uuid " << uuid << llendl; } - new_listener = new LLLandmarkBridge(inventory, uuid, flags); + new_listener = new LLLandmarkBridge(inventory, root, uuid, flags); break; case LLAssetType::AT_CALLINGCARD: if(!(inv_type == LLInventoryType::IT_CALLINGCARD)) { - llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; + llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << LLInventoryType::lookupHumanReadable(inv_type) << " on uuid " << uuid << llendl; } - new_listener = new LLCallingCardBridge(inventory, uuid); + new_listener = new LLCallingCardBridge(inventory, root, uuid); break; case LLAssetType::AT_SCRIPT: if(!(inv_type == LLInventoryType::IT_LSL)) { - llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; + llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << LLInventoryType::lookupHumanReadable(inv_type) << " on uuid " << uuid << llendl; } - new_listener = new LLScriptBridge(inventory, uuid); + new_listener = new LLScriptBridge(inventory, root, uuid); break; case LLAssetType::AT_OBJECT: if(!(inv_type == LLInventoryType::IT_OBJECT || inv_type == LLInventoryType::IT_ATTACHMENT)) { - llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; + llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << LLInventoryType::lookupHumanReadable(inv_type) << " on uuid " << uuid << llendl; } - new_listener = new LLObjectBridge(inventory, uuid, inv_type, flags); + new_listener = new LLObjectBridge(inventory, root, uuid, inv_type, flags); break; case LLAssetType::AT_NOTECARD: if(!(inv_type == LLInventoryType::IT_NOTECARD)) { - llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; + llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << LLInventoryType::lookupHumanReadable(inv_type) << " on uuid " << uuid << llendl; } - new_listener = new LLNotecardBridge(inventory, uuid); + new_listener = new LLNotecardBridge(inventory, root, uuid); break; case LLAssetType::AT_ANIMATION: if(!(inv_type == LLInventoryType::IT_ANIMATION)) { - llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; + llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << LLInventoryType::lookupHumanReadable(inv_type) << " on uuid " << uuid << llendl; } - new_listener = new LLAnimationBridge(inventory, uuid); + new_listener = new LLAnimationBridge(inventory, root, uuid); break; case LLAssetType::AT_GESTURE: if(!(inv_type == LLInventoryType::IT_GESTURE)) { - llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; + llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << LLInventoryType::lookupHumanReadable(inv_type) << " on uuid " << uuid << llendl; } - new_listener = new LLGestureBridge(inventory, uuid); + new_listener = new LLGestureBridge(inventory, root, uuid); break; case LLAssetType::AT_LSL_TEXT: if(!(inv_type == LLInventoryType::IT_LSL)) { - llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; + llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << LLInventoryType::lookupHumanReadable(inv_type) << " on uuid " << uuid << llendl; } - new_listener = new LLLSLTextBridge(inventory, uuid); + new_listener = new LLLSLTextBridge(inventory, root, uuid); break; case LLAssetType::AT_CLOTHING: case LLAssetType::AT_BODYPART: if(!(inv_type == LLInventoryType::IT_WEARABLE)) { - llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; + llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << LLInventoryType::lookupHumanReadable(inv_type) << " on uuid " << uuid << llendl; } - new_listener = new LLWearableBridge(inventory, uuid, asset_type, inv_type, (EWearableType)flags); + new_listener = new LLWearableBridge(inventory, root, uuid, asset_type, inv_type, (EWearableType)flags); break; case LLAssetType::AT_CATEGORY: if (actual_asset_type == LLAssetType::AT_LINK_FOLDER) { // Create a link folder handler instead. - new_listener = new LLLinkFolderBridge(inventory, uuid); + new_listener = new LLLinkFolderBridge(inventory, root, uuid); break; } - new_listener = new LLFolderBridge(inventory, uuid); + new_listener = new LLFolderBridge(inventory, root, uuid); break; case LLAssetType::AT_LINK: case LLAssetType::AT_LINK_FOLDER: // Only should happen for broken links. - new_listener = new LLLinkItemBridge(inventory, uuid); + new_listener = new LLLinkItemBridge(inventory, root, uuid); break; case LLAssetType::AT_MESH: if(!(inv_type == LLInventoryType::IT_MESH)) { - llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; + llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << LLInventoryType::lookupHumanReadable(inv_type) << " on uuid " << uuid << llendl; } - new_listener = new LLMeshBridge(inventory, uuid); + new_listener = new LLMeshBridge(inventory, root, uuid); break; default: @@ -1042,26 +1047,28 @@ LLInvFVBridge* LLInventoryFVBridgeBuilder::createBridge(LLAssetType::EType asset LLAssetType::EType actual_asset_type, LLInventoryType::EType inv_type, LLInventoryPanel* inventory, + LLFolderView* root, const LLUUID& uuid, U32 flags /* = 0x00 */) const { return LLInvFVBridge::createBridge(asset_type, - actual_asset_type, - inv_type, - inventory, - uuid, - flags); + actual_asset_type, + inv_type, + inventory, + root, + uuid, + flags); } // +=================================================+ // | LLItemBridge | // +=================================================+ -void LLItemBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) +void LLItemBridge::performAction(LLInventoryModel* model, std::string action) { if ("goto" == action) { - gotoItem(folder); + gotoItem(); } if ("open" == action) @@ -1112,7 +1119,7 @@ void LLItemBridge::performAction(LLFolderView* folder, LLInventoryModel* model, LLInventoryItem* itemp = model->getItem(mUUID); if (!itemp) return; - LLFolderViewItem* folder_view_itemp = folder->getItemByID(itemp->getParentUUID()); + LLFolderViewItem* folder_view_itemp = mRoot->getItemByID(itemp->getParentUUID()); if (!folder_view_itemp) return; folder_view_itemp->getListener()->pasteFromClipboard(); @@ -1124,7 +1131,7 @@ void LLItemBridge::performAction(LLFolderView* folder, LLInventoryModel* model, LLInventoryItem* itemp = model->getItem(mUUID); if (!itemp) return; - LLFolderViewItem* folder_view_itemp = folder->getItemByID(itemp->getParentUUID()); + LLFolderViewItem* folder_view_itemp = mRoot->getItemByID(itemp->getParentUUID()); if (!folder_view_itemp) return; folder_view_itemp->getListener()->pasteLinkFromClipboard(); @@ -1193,7 +1200,7 @@ void LLItemBridge::restoreToWorld() } } -void LLItemBridge::gotoItem(LLFolderView *folder) +void LLItemBridge::gotoItem() { LLInventoryObject *obj = getInventoryObject(); if (obj && obj->getIsLinkType()) @@ -1694,7 +1701,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat, // Is the destination the trash? const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH); BOOL move_is_into_trash = (mUUID == trash_id) - || model->isObjectDescendentOf(mUUID, trash_id); + || model->isObjectDescendentOf(mUUID, trash_id); BOOL is_movable = (!LLFolderType::lookupIsProtectedType(inv_cat->getPreferredType())); const LLUUID current_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT); BOOL move_is_into_current_outfit = (mUUID == current_outfit_id); @@ -1742,12 +1749,11 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat, } } - - accept = is_movable - && (mUUID != cat_id) // Can't move a folder into itself - && (mUUID != inv_cat->getParentUUID()) // Avoid moves that would change nothing - && !(model->isObjectDescendentOf(mUUID, cat_id)); // Avoid circularity - if(accept && drop) + accept = is_movable + && (mUUID != cat_id) // Can't move a folder into itself + && (mUUID != inv_cat->getParentUUID()) // Avoid moves that would change nothing + && !(model->isObjectDescendentOf(mUUID, cat_id)); // Avoid circularity + if (accept && drop) { // Look for any gestures and deactivate them if (move_is_into_trash) @@ -1785,22 +1791,22 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat, else { #if SUPPORT_ENSEMBLES - // BAP - should skip if dup. - if (move_is_into_current_outfit) - { - LLAppearanceMgr::instance().addEnsembleLink(inv_cat); - } - else - { - LLPointer<LLInventoryCallback> cb = NULL; - link_inventory_item( - gAgent.getID(), - inv_cat->getUUID(), - mUUID, - inv_cat->getName(), - LLAssetType::AT_LINK_FOLDER, - cb); - } + // BAP - should skip if dup. + if (move_is_into_current_outfit) + { + LLAppearanceMgr::instance().addEnsembleLink(inv_cat); + } + else + { + LLPointer<LLInventoryCallback> cb = NULL; + link_inventory_item( + gAgent.getID(), + inv_cat->getUUID(), + mUUID, + inv_cat->getName(), + LLAssetType::AT_LINK_FOLDER, + cb); + } #endif } } @@ -1817,7 +1823,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat, } } } - else if(LLToolDragAndDrop::SOURCE_WORLD == source) + else if (LLToolDragAndDrop::SOURCE_WORLD == source) { // content category has same ID as object itself LLUUID object_id = inv_cat->getUUID(); @@ -1862,7 +1868,7 @@ BOOL move_inv_category_world_to_agent(const LLUUID& object_id, // this folder is coming from an object, as there is only one folder in an object, the root, // we need to collect the entire contents and handle them as a group - InventoryObjectList inventory_objects; + LLInventoryObject::object_list_t inventory_objects; object->getInventoryContents(inventory_objects); if (inventory_objects.empty()) @@ -1876,8 +1882,8 @@ BOOL move_inv_category_world_to_agent(const LLUUID& object_id, // coming from a task. Need to figure out if the person can // move/copy this item. - InventoryObjectList::iterator it = inventory_objects.begin(); - InventoryObjectList::iterator end = inventory_objects.end(); + LLInventoryObject::object_list_t::iterator it = inventory_objects.begin(); + LLInventoryObject::object_list_t::iterator end = inventory_objects.end(); for ( ; it != end; ++it) { // coming from a task. Need to figure out if the person can @@ -1907,7 +1913,7 @@ BOOL move_inv_category_world_to_agent(const LLUUID& object_id, if(drop && accept) { it = inventory_objects.begin(); - InventoryObjectList::iterator first_it = inventory_objects.begin(); + LLInventoryObject::object_list_t::iterator first_it = inventory_objects.begin(); LLMoveInv* move_inv = new LLMoveInv; move_inv->mObjectID = object_id; move_inv->mCategoryID = category_id; @@ -1945,7 +1951,7 @@ class LLRightClickInventoryFetchObserver : public LLInventoryFetchObserver LLRightClickInventoryFetchObserver(const LLUUID& cat_id, bool copy_items) : mCatID(cat_id), mCopyItems(copy_items) - { }; + { }; virtual void done() { // we've downloaded all the items, so repaint the dialog @@ -1977,7 +1983,7 @@ void LLRightClickInventoryFetchDescendentsObserver::done() { // Avoid passing a NULL-ref as mCompleteFolders.front() down to // gInventory.collectDescendents() - if( mCompleteFolders.empty() ) + if( mComplete.empty() ) { llwarns << "LLRightClickInventoryFetchDescendentsObserver::done with empty mCompleteFolders" << llendl; dec_busy_count(); @@ -1991,7 +1997,7 @@ void LLRightClickInventoryFetchDescendentsObserver::done() // happen. LLInventoryModel::cat_array_t cat_array; LLInventoryModel::item_array_t item_array; - gInventory.collectDescendents(mCompleteFolders.front(), + gInventory.collectDescendents(mComplete.front(), cat_array, item_array, LLInventoryModel::EXCLUDE_TRASH); @@ -2010,8 +2016,8 @@ void LLRightClickInventoryFetchDescendentsObserver::done() #endif LLRightClickInventoryFetchObserver* outfit; - outfit = new LLRightClickInventoryFetchObserver(mCompleteFolders.front(), mCopyItems); - LLInventoryFetchObserver::item_ref_t ids; + outfit = new LLRightClickInventoryFetchObserver(mComplete.front(), mCopyItems); + uuid_vec_t ids; for(S32 i = 0; i < count; ++i) { ids.push_back(item_array.get(i)->getUUID()); @@ -2029,19 +2035,19 @@ void LLRightClickInventoryFetchDescendentsObserver::done() inc_busy_count(); // do the fetch - outfit->fetchItems(ids); + outfit->fetch(ids); outfit->done(); //Not interested in waiting and this will be right 99% of the time. //Uncomment the following code for laggy Inventory UI. /* if(outfit->isEverythingComplete()) { - // everything is already here - call done. - outfit->done(); + // everything is already here - call done. + outfit->done(); } else { - // it's all on it's way - add an observer, and the inventory - // will call done for us when everything is here. - gInventory.addObserver(outfit); + // it's all on it's way - add an observer, and the inventory + // will call done for us when everything is here. + gInventory.addObserver(outfit); }*/ } @@ -2055,7 +2061,8 @@ void LLRightClickInventoryFetchDescendentsObserver::done() class LLInventoryCopyAndWearObserver : public LLInventoryObserver { public: - LLInventoryCopyAndWearObserver(const LLUUID& cat_id, int count) :mCatID(cat_id), mContentsCount(count), mFolderAdded(FALSE) {} + LLInventoryCopyAndWearObserver(const LLUUID& cat_id, int count) : + mCatID(cat_id), mContentsCount(count), mFolderAdded(FALSE) {} virtual ~LLInventoryCopyAndWearObserver() {} virtual void changed(U32 mask); @@ -2094,7 +2101,7 @@ void LLInventoryCopyAndWearObserver::changed(U32 mask) if (NULL == category) { llwarns << "gInventory.getCategory(" << mCatID - << ") was NULL" << llendl; + << ") was NULL" << llendl; } else { @@ -2113,11 +2120,11 @@ void LLInventoryCopyAndWearObserver::changed(U32 mask) -void LLFolderBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) +void LLFolderBridge::performAction(LLInventoryModel* model, std::string action) { if ("open" == action) { - LLFolderViewFolder *f = dynamic_cast<LLFolderViewFolder *>(folder->getItemByID(mUUID)); + LLFolderViewFolder *f = dynamic_cast<LLFolderViewFolder *>(mRoot->getItemByID(mUUID)); if (f) { f->setOpen(TRUE); @@ -2473,16 +2480,16 @@ void LLFolderBridge::pasteLinkFromClipboard() } else #endif - if (LLInventoryItem *item = model->getItem(object_id)) - { - link_inventory_item( - gAgent.getID(), - item->getLinkedUUID(), - parent_id, - item->getName(), - LLAssetType::AT_LINK, - LLPointer<LLInventoryCallback>(NULL)); - } + if (LLInventoryItem *item = model->getItem(object_id)) + { + link_inventory_item( + gAgent.getID(), + item->getLinkedUUID(), + parent_id, + item->getName(), + LLAssetType::AT_LINK, + LLPointer<LLInventoryCallback>(NULL)); + } } } } @@ -2507,7 +2514,7 @@ void LLFolderBridge::folderOptionsMenu() const bool is_system_folder = LLFolderType::lookupIsProtectedType(type); // BAP change once we're no longer treating regular categories as ensembles. const bool is_ensemble = (type == LLFolderType::FT_NONE || - LLFolderType::lookupIsEnsembleType(type)); + LLFolderType::lookupIsEnsembleType(type)); // calling card related functionality for folders. @@ -2637,10 +2644,10 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags) const LLUUID lost_and_found_id = model->findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND); if (lost_and_found_id == mUUID) - { + { // This is the lost+found folder. - mItems.push_back(std::string("Empty Lost And Found")); - } + mItems.push_back(std::string("Empty Lost And Found")); + } if(trash_id == mUUID) { @@ -2728,7 +2735,7 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags) { folders.push_back(category->getUUID()); } - fetch->fetchDescendents(folders); + fetch->fetch(folders); inc_busy_count(); if(fetch->isEverythingComplete()) { @@ -2926,10 +2933,10 @@ void LLFolderBridge::createWearable(const LLUUID &parent_id, EWearableType type) LLAssetType::EType asset_type = wearable->getAssetType(); LLInventoryType::EType inv_type = LLInventoryType::IT_WEARABLE; create_inventory_item(gAgent.getID(), gAgent.getSessionID(), - parent_id, wearable->getTransactionID(), wearable->getName(), - wearable->getDescription(), asset_type, inv_type, wearable->getType(), - wearable->getPermissions().getMaskNextOwner(), - LLPointer<LLInventoryCallback>(NULL)); + parent_id, wearable->getTransactionID(), wearable->getName(), + wearable->getDescription(), asset_type, inv_type, wearable->getType(), + wearable->getPermissions().getMaskNextOwner(), + LLPointer<LLInventoryCallback>(NULL)); } void LLFolderBridge::modifyOutfit(BOOL append) @@ -2953,7 +2960,7 @@ bool move_task_inventory_callback(const LLSD& notification, const LLSD& response { if (cat_and_wear && cat_and_wear->mWear) { - InventoryObjectList inventory_objects; + LLInventoryObject::object_list_t inventory_objects; object->getInventoryContents(inventory_objects); int contents_count = inventory_objects.size()-1; //subtract one for containing folder @@ -2963,8 +2970,8 @@ bool move_task_inventory_callback(const LLSD& notification, const LLSD& response two_uuids_list_t::iterator move_it; for (move_it = move_inv->mMoveList.begin(); - move_it != move_inv->mMoveList.end(); - ++move_it) + move_it != move_inv->mMoveList.end(); + ++move_it) { object->moveInventory(move_it->first, move_it->second); } @@ -3004,11 +3011,11 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item, BOOL is_movable = TRUE; switch( inv_item->getActualType() ) { - case LLAssetType::AT_CATEGORY: - is_movable = !LLFolderType::lookupIsProtectedType(((LLInventoryCategory*)inv_item)->getPreferredType()); - break; - default: - break; + case LLAssetType::AT_CATEGORY: + is_movable = !LLFolderType::lookupIsProtectedType(((LLInventoryCategory*)inv_item)->getPreferredType()); + break; + default: + break; } const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH); @@ -3186,7 +3193,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item, if(drop) { copy_inventory_from_notecard(LLToolDragAndDrop::getInstance()->getObjectID(), - LLToolDragAndDrop::getInstance()->getSourceID(), inv_item); + LLToolDragAndDrop::getInstance()->getSourceID(), inv_item); } } else if(LLToolDragAndDrop::SOURCE_LIBRARY == source) @@ -3285,7 +3292,7 @@ void LLTextureBridge::buildContextMenu(LLMenuGL& menu, U32 flags) } // virtual -void LLTextureBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) +void LLTextureBridge::performAction(LLInventoryModel* model, std::string action) { if ("save_as" == action) { @@ -3296,7 +3303,7 @@ void LLTextureBridge::performAction(LLFolderView* folder, LLInventoryModel* mode preview_texture->openToSave(); } } - else LLItemBridge::performAction(folder, model, action); + else LLItemBridge::performAction(model, action); } // +=================================================+ @@ -3321,14 +3328,14 @@ void LLSoundBridge::openItem() // only open the preview dialog through the contextual right-click menu // double-click just plays the sound - LLViewerInventoryItem* item = getItem(); - if(item) - { - openSoundPreview((void*)this); - //send_uuid_sound_trigger(item->getAssetUUID(), 1.0); - } -*/ +LLViewerInventoryItem* item = getItem(); +if(item) +{ +openSoundPreview((void*)this); +//send_uuid_sound_trigger(item->getAssetUUID(), 1.0); } +*/ + } void LLSoundBridge::previewItem() { @@ -3373,11 +3380,14 @@ void LLSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags) // | LLLandmarkBridge | // +=================================================+ -LLLandmarkBridge::LLLandmarkBridge(LLInventoryPanel* inventory, const LLUUID& uuid, U32 flags/* = 0x00*/) : -LLItemBridge(inventory, uuid) +LLLandmarkBridge::LLLandmarkBridge(LLInventoryPanel* inventory, + LLFolderView* root, + const LLUUID& uuid, + U32 flags/* = 0x00*/) : + LLItemBridge(inventory, root, uuid) { mVisited = FALSE; - if (flags & LLInventoryItem::II_FLAGS_LANDMARK_VISITED) + if (flags & LLInventoryItemFlags::II_FLAGS_LANDMARK_VISITED) { mVisited = TRUE; } @@ -3435,7 +3445,7 @@ void teleport_via_landmark(const LLUUID& asset_id) } // virtual -void LLLandmarkBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) +void LLLandmarkBridge::performAction(LLInventoryModel* model, std::string action) { if ("teleport" == action) { @@ -3459,7 +3469,7 @@ void LLLandmarkBridge::performAction(LLFolderView* folder, LLInventoryModel* mod } else { - LLItemBridge::performAction(folder, model, action); + LLItemBridge::performAction(model, action); } } @@ -3486,35 +3496,33 @@ void LLLandmarkBridge::openItem() { LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel()); } -/* - LLViewerInventoryItem* item = getItem(); - if( item ) - { - // Opening (double-clicking) a landmark immediately teleports, - // but warns you the first time. - // open_landmark(item); - LLSD payload; - payload["asset_id"] = item->getAssetUUID(); - LLNotificationsUtil::add("TeleportFromLandmark", LLSD(), payload); - } -*/ } // +=================================================+ // | LLCallingCardObserver | // +=================================================+ -void LLCallingCardObserver::changed(U32 mask) +class LLCallingCardObserver : public LLFriendObserver { - mBridgep->refreshFolderViewItem(); -} +public: + LLCallingCardObserver(LLCallingCardBridge* bridge) : mBridgep(bridge) {} + virtual ~LLCallingCardObserver() { mBridgep = NULL; } + virtual void changed(U32 mask) + { + mBridgep->refreshFolderViewItem(); + } +protected: + LLCallingCardBridge* mBridgep; +}; // +=================================================+ // | LLCallingCardBridge | // +=================================================+ -LLCallingCardBridge::LLCallingCardBridge( LLInventoryPanel* inventory, const LLUUID& uuid ) : - LLItemBridge(inventory, uuid) +LLCallingCardBridge::LLCallingCardBridge(LLInventoryPanel* inventory, + LLFolderView* root, + const LLUUID& uuid ) : + LLItemBridge(inventory, root, uuid) { mObserver = new LLCallingCardObserver(this); LLAvatarTracker::instance().addObserver(mObserver); @@ -3537,7 +3545,7 @@ void LLCallingCardBridge::refreshFolderViewItem() } // virtual -void LLCallingCardBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) +void LLCallingCardBridge::performAction(LLInventoryModel* model, std::string action) { if ("begin_im" == action) { @@ -3563,7 +3571,7 @@ void LLCallingCardBridge::performAction(LLFolderView* folder, LLInventoryModel* LLAvatarActions::offerTeleport(item->getCreatorUUID()); } } - else LLItemBridge::performAction(folder, model, action); + else LLItemBridge::performAction(model, action); } LLUIImagePtr LLCallingCardBridge::getIcon() const @@ -3599,11 +3607,11 @@ void LLCallingCardBridge::openItem() LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel()); } /* - LLViewerInventoryItem* item = getItem(); - if(item && !item->getCreatorUUID().isNull()) - { - LLAvatarActions::showProfile(item->getCreatorUUID()); - } + LLViewerInventoryItem* item = getItem(); + if(item && !item->getCreatorUUID().isNull()) + { + LLAvatarActions::showProfile(item->getCreatorUUID()); + } */ } @@ -3626,8 +3634,8 @@ void LLCallingCardBridge::buildContextMenu(LLMenuGL& menu, U32 flags) LLInventoryItem* item = getItem(); BOOL good_card = (item - && (LLUUID::null != item->getCreatorUUID()) - && (item->getCreatorUUID() != gAgent.getID())); + && (LLUUID::null != item->getCreatorUUID()) + && (item->getCreatorUUID() != gAgent.getID())); BOOL user_online = FALSE; if (item) { @@ -3662,16 +3670,16 @@ BOOL LLCallingCardBridge::dragOrDrop(MASK mask, BOOL drop, // check the type switch(cargo_type) { - case DAD_TEXTURE: - case DAD_SOUND: - case DAD_LANDMARK: - case DAD_SCRIPT: - case DAD_CLOTHING: - case DAD_OBJECT: - case DAD_NOTECARD: - case DAD_BODYPART: - case DAD_ANIMATION: - case DAD_GESTURE: + case DAD_TEXTURE: + case DAD_SOUND: + case DAD_LANDMARK: + case DAD_SCRIPT: + case DAD_CLOTHING: + case DAD_OBJECT: + case DAD_NOTECARD: + case DAD_BODYPART: + case DAD_ANIMATION: + case DAD_GESTURE: case DAD_MESH: { LLInventoryItem* inv_item = (LLInventoryItem*)cargo_data; @@ -3695,7 +3703,7 @@ BOOL LLCallingCardBridge::dragOrDrop(MASK mask, BOOL drop, } break; } - case DAD_CATEGORY: + case DAD_CATEGORY: { LLInventoryCategory* inv_cat = (LLInventoryCategory*)cargo_data; if( gInventory.getCategory( inv_cat->getUUID() ) ) @@ -3717,8 +3725,8 @@ BOOL LLCallingCardBridge::dragOrDrop(MASK mask, BOOL drop, } break; } - default: - break; + default: + break; } } return rv; @@ -3743,11 +3751,11 @@ void LLNotecardBridge::openItem() } /* - LLViewerInventoryItem* item = getItem(); - if (item) - { - LLFloaterReg::showInstance("preview_notecard", LLSD(item->getUUID()), TAKE_FOCUS_YES); - } + LLViewerInventoryItem* item = getItem(); + if (item) + { + LLFloaterReg::showInstance("preview_notecard", LLSD(item->getUUID()), TAKE_FOCUS_YES); + } */ } @@ -3788,7 +3796,7 @@ std::string LLGestureBridge::getLabelSuffix() const } // virtual -void LLGestureBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) +void LLGestureBridge::performAction(LLInventoryModel* model, std::string action) { if (isAddAction(action)) { @@ -3834,7 +3842,7 @@ void LLGestureBridge::performAction(LLFolderView* folder, LLInventoryModel* mode playGesture(mUUID); } } - else LLItemBridge::performAction(folder, model, action); + else LLItemBridge::performAction(model, action); } void LLGestureBridge::openItem() @@ -3846,12 +3854,12 @@ void LLGestureBridge::openItem() LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel()); } /* - LLViewerInventoryItem* item = getItem(); - if (item) - { - LLPreviewGesture* preview = LLPreviewGesture::show(mUUID, LLUUID::null); - preview->setFocus(TRUE); - } + LLViewerInventoryItem* item = getItem(); + if (item) + { + LLPreviewGesture* preview = LLPreviewGesture::show(mUUID, LLUUID::null); + preview->setFocus(TRUE); + } */ } @@ -3963,7 +3971,7 @@ void LLAnimationBridge::buildContextMenu(LLMenuGL& menu, U32 flags) } // virtual -void LLAnimationBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) +void LLAnimationBridge::performAction(LLInventoryModel* model, std::string action) { if ((action == "playworld") || (action == "playlocal")) { @@ -3982,7 +3990,7 @@ void LLAnimationBridge::performAction(LLFolderView* folder, LLInventoryModel* mo } else { - LLItemBridge::performAction(folder, model, action); + LLItemBridge::performAction(model, action); } } @@ -3995,11 +4003,11 @@ void LLAnimationBridge::openItem() LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel()); } /* - LLViewerInventoryItem* item = getItem(); - if (item) - { - LLFloaterReg::showInstance("preview_anim", LLSD(mUUID), TAKE_FOCUS_YES); - } + LLViewerInventoryItem* item = getItem(); + if (item) + { + LLFloaterReg::showInstance("preview_anim", LLSD(mUUID), TAKE_FOCUS_YES); + } */ } @@ -4010,12 +4018,17 @@ void LLAnimationBridge::openItem() // static LLUUID LLObjectBridge::sContextMenuItemID; -LLObjectBridge::LLObjectBridge(LLInventoryPanel* inventory, const LLUUID& uuid, LLInventoryType::EType type, U32 flags) : -LLItemBridge(inventory, uuid), mInvType(type) +LLObjectBridge::LLObjectBridge(LLInventoryPanel* inventory, + LLFolderView* root, + const LLUUID& uuid, + LLInventoryType::EType type, + U32 flags) : + LLItemBridge(inventory, root, uuid), + mInvType(type) { mAttachPt = (flags & 0xff); // low bye of inventory flags - mIsMultiObject = ( flags & LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS ) ? TRUE: FALSE; + mIsMultiObject = ( flags & LLInventoryItemFlags::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS ) ? TRUE: FALSE; } LLUIImagePtr LLObjectBridge::getIcon() const @@ -4035,7 +4048,7 @@ LLInventoryObject* LLObjectBridge::getObject() const } // virtual -void LLObjectBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) +void LLObjectBridge::performAction(LLInventoryModel* model, std::string action) { if (isAddAction(action)) { @@ -4079,7 +4092,7 @@ void LLObjectBridge::performAction(LLFolderView* folder, LLInventoryModel* model } } } - else LLItemBridge::performAction(folder, model, action); + else LLItemBridge::performAction(model, action); } void LLObjectBridge::openItem() @@ -4097,7 +4110,7 @@ void LLObjectBridge::openItem() // Disable old properties floater; this is replaced by the sidepanel. /* - LLFloaterReg::showInstance("properties", mUUID); + LLFloaterReg::showInstance("properties", mUUID); */ } @@ -4348,19 +4361,25 @@ void LLLSLTextBridge::openItem() { LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel()); } - /* - LLViewerInventoryItem* item = getItem(); - if (item) - { - LLFloaterReg::showInstance("preview_script", LLSD(mUUID), TAKE_FOCUS_YES); - } - */ } // +=================================================+ // | LLWearableBridge | // +=================================================+ +LLWearableBridge::LLWearableBridge(LLInventoryPanel* inventory, + LLFolderView* root, + const LLUUID& uuid, + LLAssetType::EType asset_type, + LLInventoryType::EType inv_type, + EWearableType wearable_type) : + LLItemBridge(inventory, root, uuid), + mAssetType( asset_type ), + mInvType(inv_type), + mWearableType(wearable_type) +{ +} + // *NOTE: hack to get from avatar inventory to avatar void wear_inventory_item_on_avatar( LLInventoryItem* item ) { @@ -4381,10 +4400,10 @@ void wear_add_inventory_item_on_avatar( LLInventoryItem* item ) << " )" << llendl; LLWearableList::instance().getAsset(item->getAssetUUID(), - item->getName(), - item->getType(), - LLWearableBridge::onWearAddOnAvatarArrived, - new LLUUID(item->getUUID())); + item->getName(), + item->getType(), + LLWearableBridge::onWearAddOnAvatarArrived, + new LLUUID(item->getUUID())); } } @@ -4544,7 +4563,7 @@ LLUIImagePtr LLWearableBridge::getIcon() const } // virtual -void LLWearableBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) +void LLWearableBridge::performAction(LLInventoryModel* model, std::string action) { if (isAddAction(action)) { @@ -4564,7 +4583,7 @@ void LLWearableBridge::performAction(LLFolderView* folder, LLInventoryModel* mod removeFromAvatar(); return; } - else LLItemBridge::performAction(folder, model, action); + else LLItemBridge::performAction(model, action); } void LLWearableBridge::openItem() @@ -4575,42 +4594,6 @@ void LLWearableBridge::openItem() { LLInvFVBridgeAction::doAction(item->getType(),mUUID,getInventoryModel()); } - /* - if( isItemInTrash() ) - { - LLNotificationsUtil::add("CannotWearTrash"); - } - else if(isAgentInventory()) - { - if( !get_is_item_worn( mUUID ) ) - { - wearOnAvatar(); - } - } - else - { - // must be in the inventory library. copy it to our inventory - // and put it on right away. - LLViewerInventoryItem* item = getItem(); - if(item && item->isComplete()) - { - LLPointer<LLInventoryCallback> cb = new WearOnAvatarCallback(); - copy_inventory_item( - gAgent.getID(), - item->getPermissions().getOwner(), - item->getUUID(), - LLUUID::null, - std::string(), - cb); - } - else if(item) - { - // *TODO: We should fetch the item details, and then do - // the operation above. - LLNotificationsUtil::add("CannotWearInfoNotComplete"); - } - } - */ } void LLWearableBridge::buildContextMenu(LLMenuGL& menu, U32 flags) @@ -4934,7 +4917,7 @@ void LLWearableBridge::onRemoveFromAvatarArrived(LLWearable* wearable, delete on_remove_struct; } -/* static */ +// static void LLWearableBridge::removeAllClothesFromAvatar() { // Remove COF links. @@ -4962,7 +4945,7 @@ void LLWearableBridge::removeAllClothesFromAvatar() LLAgentWearables::userRemoveAllClothes(); } -/* static */ +// static void LLWearableBridge::removeItemFromAvatar(LLViewerInventoryItem *item) { if (item) @@ -4985,6 +4968,44 @@ void LLWearableBridge::removeFromAvatar() } +// +=================================================+ +// | LLLinkItemBridge | +// +=================================================+ +// For broken item links +std::string LLLinkItemBridge::sPrefix("Link: "); +LLUIImagePtr LLLinkItemBridge::getIcon() const +{ + if (LLViewerInventoryItem *item = getItem()) + { + U32 attachment_point = (item->getFlags() & 0xff); // low byte of inventory flags + bool is_multi = LLInventoryItemFlags::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); +} +void LLLinkItemBridge::buildContextMenu(LLMenuGL& menu, U32 flags) +{ + // *TODO: Translate + lldebugs << "LLLink::buildContextMenu()" << llendl; + menuentry_vec_t items; + menuentry_vec_t disabled_items; + + items.push_back(std::string("Find Original")); + disabled_items.push_back(std::string("Find Original")); + + if(isItemInTrash()) + { + addTrashContextMenuOptions(items, disabled_items); + } + else + { + items.push_back(std::string("Properties")); + addDeleteContextMenuOptions(items, disabled_items); + } + hide_context_entries(menu, items, disabled_items); +} + // +=================================================+ // | LLMeshBridge | // +=================================================+ @@ -5042,222 +5063,344 @@ void LLMeshBridge::buildContextMenu(LLMenuGL& menu, U32 flags) } - -LLInvFVBridgeAction* LLInvFVBridgeAction::createAction(LLAssetType::EType asset_type, - const LLUUID& uuid,LLInventoryModel* model) +// +=================================================+ +// | LLLinkBridge | +// +=================================================+ +// For broken folder links. +std::string LLLinkFolderBridge::sPrefix("Link: "); +LLUIImagePtr LLLinkFolderBridge::getIcon() const { - LLInvFVBridgeAction* action = NULL; - switch(asset_type) + LLFolderType::EType preferred_type = LLFolderType::FT_NONE; + if (LLViewerInventoryItem *item = getItem()) { - case LLAssetType::AT_TEXTURE: - action = new LLTextureBridgeAction(uuid,model); - break; - - case LLAssetType::AT_SOUND: - action = new LLSoundBridgeAction(uuid,model); - break; - - case LLAssetType::AT_LANDMARK: - action = new LLLandmarkBridgeAction(uuid,model); - break; - - case LLAssetType::AT_CALLINGCARD: - action = new LLCallingCardBridgeAction(uuid,model); - break; - - case LLAssetType::AT_OBJECT: - action = new LLObjectBridgeAction(uuid,model); - break; - - case LLAssetType::AT_NOTECARD: - action = new LLNotecardBridgeAction(uuid,model); - break; - - case LLAssetType::AT_ANIMATION: - action = new LLAnimationBridgeAction(uuid,model); - break; - - case LLAssetType::AT_GESTURE: - action = new LLGestureBridgeAction(uuid,model); - break; - - case LLAssetType::AT_LSL_TEXT: - action = new LLLSLTextBridgeAction(uuid,model); - break; - - case LLAssetType::AT_CLOTHING: - case LLAssetType::AT_BODYPART: - action = new LLWearableBridgeAction(uuid,model); - - break; - - case LLAssetType::AT_MESH: - action = new LLMeshBridgeAction(uuid,model); - break; - - - - default: - break; + if (const LLViewerInventoryCategory* cat = item->getLinkedCategory()) + if(item) + { + preferred_type = cat->getPreferredType(); + } } - return action; + return LLFolderBridge::getIcon(preferred_type); } +void LLLinkFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags) +{ + // *TODO: Translate + lldebugs << "LLLink::buildContextMenu()" << llendl; + menuentry_vec_t items; + menuentry_vec_t disabled_items; -//static -void LLInvFVBridgeAction::doAction(LLAssetType::EType asset_type, - const LLUUID& uuid,LLInventoryModel* model) + if (isItemInTrash()) + { + addTrashContextMenuOptions(items, disabled_items); + } + else + { + items.push_back(std::string("Find Original")); + addDeleteContextMenuOptions(items, disabled_items); + } + hide_context_entries(menu, items, disabled_items); +} +void LLLinkFolderBridge::performAction(LLInventoryModel* model, std::string action) { - LLInvFVBridgeAction* action = createAction(asset_type,uuid,model); - if(action) + if ("goto" == action) { - action->doIt(); - delete action; + gotoItem(); + return; } + LLItemBridge::performAction(model,action); } - -//static -void LLInvFVBridgeAction::doAction(const LLUUID& uuid, LLInventoryModel* model) +void LLLinkFolderBridge::gotoItem() { - llassert(model); - LLViewerInventoryItem* item = model->getItem(uuid); - llassert(item); - if (item) + const LLUUID &cat_uuid = getFolderID(); + if (!cat_uuid.isNull()) { - LLAssetType::EType asset_type = item->getType(); - LLInvFVBridgeAction* action = createAction(asset_type,uuid,model); - if(action) + if (LLFolderViewItem *base_folder = mRoot->getItemByID(cat_uuid)) { - action->doIt(); - delete action; + if (LLInventoryModel* model = getInventoryModel()) + { + model->fetchDescendentsOf(cat_uuid); + } + base_folder->setOpen(TRUE); + mRoot->setSelectionFromRoot(base_folder,TRUE); + mRoot->scrollToShowSelection(); } } } - -LLViewerInventoryItem* LLInvFVBridgeAction::getItem() const +const LLUUID &LLLinkFolderBridge::getFolderID() const { - if(mModel) - return (LLViewerInventoryItem*)mModel->getItem(mUUID); - return NULL; + if (LLViewerInventoryItem *link_item = getItem()) + { + if (const LLViewerInventoryCategory *cat = link_item->getLinkedCategory()) + { + const LLUUID& cat_uuid = cat->getUUID(); + return cat_uuid; + } + } + return LLUUID::null; } -//virtual -void LLTextureBridgeAction::doIt() +/******************************************************************************** + ** + ** BRIDGE ACTIONS + **/ + +// static +void LLInvFVBridgeAction::doAction(LLAssetType::EType asset_type, + const LLUUID& uuid,LLInventoryModel* model) { - if (getItem()) + LLInvFVBridgeAction* action = createAction(asset_type,uuid,model); + if(action) { - LLFloaterReg::showInstance("preview_texture", LLSD(mUUID), TAKE_FOCUS_YES); + action->doIt(); + delete action; } - - LLInvFVBridgeAction::doIt(); } -//virtual -void LLSoundBridgeAction::doIt() +// static +void LLInvFVBridgeAction::doAction(const LLUUID& uuid, LLInventoryModel* model) { - LLViewerInventoryItem* item = getItem(); - if(item) + llassert(model); + LLViewerInventoryItem* item = model->getItem(uuid); + llassert(item); + if (item) { - LLFloaterReg::showInstance("preview_sound", LLSD(mUUID), TAKE_FOCUS_YES); + LLAssetType::EType asset_type = item->getType(); + LLInvFVBridgeAction* action = createAction(asset_type,uuid,model); + if(action) + { + action->doIt(); + delete action; + } } - - LLInvFVBridgeAction::doIt(); } +LLViewerInventoryItem* LLInvFVBridgeAction::getItem() const +{ + if (mModel) + return (LLViewerInventoryItem*)mModel->getItem(mUUID); + return NULL; +} -//virtual -void LLLandmarkBridgeAction::doIt() +class LLTextureBridgeAction: public LLInvFVBridgeAction { - LLViewerInventoryItem* item = getItem(); - if( item ) + friend class LLInvFVBridgeAction; +public: + virtual void doIt() { - // Opening (double-clicking) a landmark immediately teleports, - // but warns you the first time. - LLSD payload; - payload["asset_id"] = item->getAssetUUID(); - - LLSD args; - args["LOCATION"] = item->getName(); - - LLNotificationsUtil::add("TeleportFromLandmark", args, payload); + if (getItem()) + { + LLFloaterReg::showInstance("preview_texture", LLSD(mUUID), TAKE_FOCUS_YES); + } + LLInvFVBridgeAction::doIt(); } + virtual ~LLTextureBridgeAction(){} +protected: + LLTextureBridgeAction(const LLUUID& id,LLInventoryModel* model) : LLInvFVBridgeAction(id,model) {} +}; - LLInvFVBridgeAction::doIt(); -} - - -//virtual -void LLCallingCardBridgeAction::doIt() +class LLSoundBridgeAction: public LLInvFVBridgeAction { - LLViewerInventoryItem* item = getItem(); - if(item && item->getCreatorUUID().notNull()) + friend class LLInvFVBridgeAction; +public: + virtual void doIt() { - LLAvatarActions::showProfile(item->getCreatorUUID()); + LLViewerInventoryItem* item = getItem(); + if (item) + { + LLFloaterReg::showInstance("preview_sound", LLSD(mUUID), TAKE_FOCUS_YES); + } + LLInvFVBridgeAction::doIt(); } + virtual ~LLSoundBridgeAction(){} +protected: + LLSoundBridgeAction(const LLUUID& id,LLInventoryModel* model) : LLInvFVBridgeAction(id,model) {} +}; - LLInvFVBridgeAction::doIt(); -} - -//virtual -void -LLNotecardBridgeAction::doIt() +class LLLandmarkBridgeAction: public LLInvFVBridgeAction { - LLViewerInventoryItem* item = getItem(); - if (item) + friend class LLInvFVBridgeAction; +public: + virtual void doIt() { - LLFloaterReg::showInstance("preview_notecard", LLSD(item->getUUID()), TAKE_FOCUS_YES); + LLViewerInventoryItem* item = getItem(); + if (item) + { + // Opening (double-clicking) a landmark immediately teleports, + // but warns you the first time. + LLSD payload; + payload["asset_id"] = item->getAssetUUID(); + + LLSD args; + args["LOCATION"] = item->getName(); + + LLNotificationsUtil::add("TeleportFromLandmark", args, payload); + } + LLInvFVBridgeAction::doIt(); } + virtual ~LLLandmarkBridgeAction(){} +protected: + LLLandmarkBridgeAction(const LLUUID& id,LLInventoryModel* model) : LLInvFVBridgeAction(id,model) {} +}; - LLInvFVBridgeAction::doIt(); -} - -//virtual -void LLGestureBridgeAction::doIt() +class LLCallingCardBridgeAction: public LLInvFVBridgeAction { - LLViewerInventoryItem* item = getItem(); - if (item) + friend class LLInvFVBridgeAction; +public: + virtual void doIt() { - LLPreviewGesture* preview = LLPreviewGesture::show(mUUID, LLUUID::null); - preview->setFocus(TRUE); + LLViewerInventoryItem* item = getItem(); + if (item && item->getCreatorUUID().notNull()) + { + LLAvatarActions::showProfile(item->getCreatorUUID()); + } + LLInvFVBridgeAction::doIt(); } + virtual ~LLCallingCardBridgeAction(){} +protected: + LLCallingCardBridgeAction(const LLUUID& id,LLInventoryModel* model) : LLInvFVBridgeAction(id,model) {} - LLInvFVBridgeAction::doIt(); -} +}; -//virtual -void LLAnimationBridgeAction::doIt() +class LLNotecardBridgeAction: public LLInvFVBridgeAction { - LLViewerInventoryItem* item = getItem(); - if (item) + friend class LLInvFVBridgeAction; +public: + virtual void doIt() { - LLFloaterReg::showInstance("preview_anim", LLSD(mUUID), TAKE_FOCUS_YES); + LLViewerInventoryItem* item = getItem(); + if (item) + { + LLFloaterReg::showInstance("preview_notecard", LLSD(item->getUUID()), TAKE_FOCUS_YES); + } + LLInvFVBridgeAction::doIt(); } + virtual ~LLNotecardBridgeAction(){} +protected: + LLNotecardBridgeAction(const LLUUID& id,LLInventoryModel* model) : LLInvFVBridgeAction(id,model) {} +}; - LLInvFVBridgeAction::doIt(); -} - +class LLGestureBridgeAction: public LLInvFVBridgeAction +{ + friend class LLInvFVBridgeAction; +public: + virtual void doIt() + { + LLViewerInventoryItem* item = getItem(); + if (item) + { + LLPreviewGesture* preview = LLPreviewGesture::show(mUUID, LLUUID::null); + preview->setFocus(TRUE); + } + LLInvFVBridgeAction::doIt(); + } + virtual ~LLGestureBridgeAction(){} +protected: + LLGestureBridgeAction(const LLUUID& id,LLInventoryModel* model) : LLInvFVBridgeAction(id,model) {} +}; -//virtual -void LLObjectBridgeAction::doIt() +class LLAnimationBridgeAction: public LLInvFVBridgeAction { - /* - LLFloaterReg::showInstance("properties", mUUID); - */ - LLInvFVBridgeAction::doIt(); -} + friend class LLInvFVBridgeAction; +public: + virtual void doIt() + { + LLViewerInventoryItem* item = getItem(); + if (item) + { + LLFloaterReg::showInstance("preview_anim", LLSD(mUUID), TAKE_FOCUS_YES); + } + LLInvFVBridgeAction::doIt(); + } + virtual ~LLAnimationBridgeAction(){} +protected: + LLAnimationBridgeAction(const LLUUID& id,LLInventoryModel* model) : LLInvFVBridgeAction(id,model) {} +}; +class LLObjectBridgeAction: public LLInvFVBridgeAction +{ + friend class LLInvFVBridgeAction; +public: + virtual void doIt() + { + /* + LLFloaterReg::showInstance("properties", mUUID); + */ + LLInvFVBridgeAction::doIt(); + } + virtual ~LLObjectBridgeAction(){} +protected: + LLObjectBridgeAction(const LLUUID& id,LLInventoryModel* model) : LLInvFVBridgeAction(id,model) {} +}; -//virtual -void LLLSLTextBridgeAction::doIt() +class LLLSLTextBridgeAction: public LLInvFVBridgeAction { - LLViewerInventoryItem* item = getItem(); - if (item) + friend class LLInvFVBridgeAction; +public: + virtual void doIt() { - LLFloaterReg::showInstance("preview_script", LLSD(mUUID), TAKE_FOCUS_YES); + LLViewerInventoryItem* item = getItem(); + if (item) + { + LLFloaterReg::showInstance("preview_script", LLSD(mUUID), TAKE_FOCUS_YES); + } + LLInvFVBridgeAction::doIt(); } + virtual ~LLLSLTextBridgeAction(){} +protected: + LLLSLTextBridgeAction(const LLUUID& id,LLInventoryModel* model) : LLInvFVBridgeAction(id,model) {} +}; - LLInvFVBridgeAction::doIt(); -} +class LLWearableBridgeAction: public LLInvFVBridgeAction +{ + friend class LLInvFVBridgeAction; +public: + virtual void doIt() + { + if(isItemInTrash()) + { + LLNotificationsUtil::add("CannotWearTrash"); + } + else if(isAgentInventory()) + { + if(!get_is_item_worn(mUUID)) + { + wearOnAvatar(); + } + } + else + { + // must be in the inventory library. copy it to our inventory + // and put it on right away. + LLViewerInventoryItem* item = getItem(); + if(item && item->isComplete()) + { + LLPointer<LLInventoryCallback> cb = new WearOnAvatarCallback(); + copy_inventory_item( + gAgent.getID(), + item->getPermissions().getOwner(), + item->getUUID(), + LLUUID::null, + std::string(), + cb); + } + else if(item) + { + // *TODO: We should fetch the item details, and then do + // the operation above. + LLNotificationsUtil::add("CannotWearInfoNotComplete"); + } + } + LLInvFVBridgeAction::doIt(); + } + virtual ~LLWearableBridgeAction(){} +protected: + LLWearableBridgeAction(const LLUUID& id,LLInventoryModel* model) : LLInvFVBridgeAction(id,model) {} + BOOL isItemInTrash() const; + // return true if the item is in agent inventory. if false, it + // must be lost or in the inventory library. + BOOL isAgentInventory() const; + void wearOnAvatar(); +}; BOOL LLWearableBridgeAction::isItemInTrash() const { @@ -5304,179 +5447,50 @@ void LLWearableBridgeAction::wearOnAvatar() } } -//virtual -void LLWearableBridgeAction::doIt() -{ - if(isItemInTrash()) - { - LLNotificationsUtil::add("CannotWearTrash"); - } - else if(isAgentInventory()) - { - if(!get_is_item_worn(mUUID)) - { - wearOnAvatar(); - } - } - else - { - // must be in the inventory library. copy it to our inventory - // and put it on right away. - LLViewerInventoryItem* item = getItem(); - if(item && item->isComplete()) - { - LLPointer<LLInventoryCallback> cb = new WearOnAvatarCallback(); - copy_inventory_item( - gAgent.getID(), - item->getPermissions().getOwner(), - item->getUUID(), - LLUUID::null, - std::string(), - cb); - } - else if(item) - { - // *TODO: We should fetch the item details, and then do - // the operation above. - LLNotificationsUtil::add("CannotWearInfoNotComplete"); - } - } - - LLInvFVBridgeAction::doIt(); -} - -//virtual -void LLMeshBridgeAction::doIt() -{ - LLViewerInventoryItem* item = getItem(); - if(item) - { - // do it - } - - LLInvFVBridgeAction::doIt(); -} - -// +=================================================+ -// | LLLinkItemBridge | -// +=================================================+ -// For broken links - -std::string LLLinkItemBridge::sPrefix("Link: "); - - -LLUIImagePtr LLLinkItemBridge::getIcon() const -{ - if (LLViewerInventoryItem *item = getItem()) - { - 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); -} - -void LLLinkItemBridge::buildContextMenu(LLMenuGL& menu, U32 flags) -{ - // *TODO: Translate - lldebugs << "LLLink::buildContextMenu()" << llendl; - menuentry_vec_t items; - menuentry_vec_t disabled_items; - - items.push_back(std::string("Find Original")); - disabled_items.push_back(std::string("Find Original")); - - if(isItemInTrash()) - { - addTrashContextMenuOptions(items, disabled_items); - } - else - { - items.push_back(std::string("Properties")); - addDeleteContextMenuOptions(items, disabled_items); - } - hide_context_entries(menu, items, disabled_items); -} - - -// +=================================================+ -// | LLLinkBridge | -// +=================================================+ -// For broken links. - -std::string LLLinkFolderBridge::sPrefix("Link: "); - - -LLUIImagePtr LLLinkFolderBridge::getIcon() const -{ - LLFolderType::EType preferred_type = LLFolderType::FT_NONE; - if (LLViewerInventoryItem *item = getItem()) - { - if (const LLViewerInventoryCategory* cat = item->getLinkedCategory()) - { - preferred_type = cat->getPreferredType(); - } - } - return LLFolderBridge::getIcon(preferred_type); -} - -void LLLinkFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags) -{ - // *TODO: Translate - lldebugs << "LLLink::buildContextMenu()" << llendl; - menuentry_vec_t items; - menuentry_vec_t disabled_items; - - if (isItemInTrash()) - { - addTrashContextMenuOptions(items, disabled_items); - } - else - { - items.push_back(std::string("Find Original")); - addDeleteContextMenuOptions(items, disabled_items); - } - hide_context_entries(menu, items, disabled_items); -} - -void LLLinkFolderBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) -{ - if ("goto" == action) - { - gotoItem(folder); - return; - } - LLItemBridge::performAction(folder,model,action); -} - -void LLLinkFolderBridge::gotoItem(LLFolderView *folder) +LLInvFVBridgeAction* LLInvFVBridgeAction::createAction(LLAssetType::EType asset_type, + const LLUUID& uuid, + LLInventoryModel* model) { - const LLUUID &cat_uuid = getFolderID(); - if (!cat_uuid.isNull()) + LLInvFVBridgeAction* action = NULL; + switch(asset_type) { - if (LLFolderViewItem *base_folder = folder->getItemByID(cat_uuid)) - { - if (LLInventoryModel* model = getInventoryModel()) - { - model->fetchDescendentsOf(cat_uuid); - } - base_folder->setOpen(TRUE); - folder->setSelectionFromRoot(base_folder,TRUE); - folder->scrollToShowSelection(); - } + case LLAssetType::AT_TEXTURE: + action = new LLTextureBridgeAction(uuid,model); + break; + case LLAssetType::AT_SOUND: + action = new LLSoundBridgeAction(uuid,model); + break; + case LLAssetType::AT_LANDMARK: + action = new LLLandmarkBridgeAction(uuid,model); + break; + case LLAssetType::AT_CALLINGCARD: + action = new LLCallingCardBridgeAction(uuid,model); + break; + case LLAssetType::AT_OBJECT: + action = new LLObjectBridgeAction(uuid,model); + break; + case LLAssetType::AT_NOTECARD: + action = new LLNotecardBridgeAction(uuid,model); + break; + case LLAssetType::AT_ANIMATION: + action = new LLAnimationBridgeAction(uuid,model); + break; + case LLAssetType::AT_GESTURE: + action = new LLGestureBridgeAction(uuid,model); + break; + case LLAssetType::AT_LSL_TEXT: + action = new LLLSLTextBridgeAction(uuid,model); + break; + case LLAssetType::AT_CLOTHING: + case LLAssetType::AT_BODYPART: + action = new LLWearableBridgeAction(uuid,model); + break; + default: + break; } + return action; } -const LLUUID &LLLinkFolderBridge::getFolderID() const -{ - if (LLViewerInventoryItem *link_item = getItem()) - { - if (const LLViewerInventoryCategory *cat = link_item->getLinkedCategory()) - { - const LLUUID& cat_uuid = cat->getUUID(); - return cat_uuid; - } - } - return LLUUID::null; -} +/** Bridge Actions + ** + ********************************************************************************/ diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h index 318e37f7a1f8712384663c39af9cb3fb8ead3d14..75b206f3b75d41cf680d396470c61b19a0a06213 100644 --- a/indra/newview/llinventorybridge.h +++ b/indra/newview/llinventorybridge.h @@ -44,80 +44,14 @@ class LLInventoryPanel; class LLInventoryModel; class LLMenuGL; +class LLCallingCardObserver; +class LLViewerJointAttachment; -enum EInventoryIcon -{ - TEXTURE_ICON_NAME, - SOUND_ICON_NAME, - CALLINGCARD_ONLINE_ICON_NAME, - CALLINGCARD_OFFLINE_ICON_NAME, - LANDMARK_ICON_NAME, - LANDMARK_VISITED_ICON_NAME, - SCRIPT_ICON_NAME, - CLOTHING_ICON_NAME, - OBJECT_ICON_NAME, - OBJECT_MULTI_ICON_NAME, - NOTECARD_ICON_NAME, - BODYPART_ICON_NAME, - SNAPSHOT_ICON_NAME, - - BODYPART_SHAPE_ICON_NAME, - BODYPART_SKIN_ICON_NAME, - BODYPART_HAIR_ICON_NAME, - BODYPART_EYES_ICON_NAME, - CLOTHING_SHIRT_ICON_NAME, - CLOTHING_PANTS_ICON_NAME, - CLOTHING_SHOES_ICON_NAME, - CLOTHING_SOCKS_ICON_NAME, - CLOTHING_JACKET_ICON_NAME, - CLOTHING_GLOVES_ICON_NAME, - CLOTHING_UNDERSHIRT_ICON_NAME, - CLOTHING_UNDERPANTS_ICON_NAME, - CLOTHING_SKIRT_ICON_NAME, - CLOTHING_ALPHA_ICON_NAME, - CLOTHING_TATTOO_ICON_NAME, - - ANIMATION_ICON_NAME, - GESTURE_ICON_NAME, - - LINKITEM_ICON_NAME, - LINKFOLDER_ICON_NAME, - - MESH_ICON_NAME, - - ICON_NAME_COUNT -}; - -extern std::string ICON_NAME[ICON_NAME_COUNT]; - -typedef std::pair<LLUUID, LLUUID> two_uuids_t; -typedef std::list<two_uuids_t> two_uuids_list_t; -typedef std::pair<LLUUID, two_uuids_list_t> uuid_move_list_t; - -struct LLMoveInv -{ - LLUUID mObjectID; - LLUUID mCategoryID; - two_uuids_list_t mMoveList; - void (*mCallback)(S32, void*); - void* mUserData; -}; - -struct LLAttachmentRezAction -{ - LLUUID mItemID; - S32 mAttachPt; -}; typedef std::vector<std::string> menuentry_vec_t; -const std::string safe_inv_type_lookup(LLInventoryType::EType inv_type); -void hide_context_entries(LLMenuGL& menu, - const menuentry_vec_t &entries_to_show, - const menuentry_vec_t &disabled_entries); - //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// Class LLInvFVBridge (& its derived classes) +// Class LLInvFVBridge // // Short for Inventory-Folder-View-Bridge. This is an // implementation class to be able to view inventory items. @@ -136,6 +70,7 @@ class LLInvFVBridge : public LLFolderViewEventListener LLAssetType::EType actual_asset_type, LLInventoryType::EType inv_type, LLInventoryPanel* inventory, + LLFolderView* root, const LLUUID& uuid, U32 flags = 0x00); virtual ~LLInvFVBridge() {} @@ -177,7 +112,7 @@ class LLInvFVBridge : public LLFolderViewEventListener virtual void pasteFromClipboard() {} virtual void pasteLinkFromClipboard() {} void getClipboardEntries(bool show_asset_id, menuentry_vec_t &items, - menuentry_vec_t &disabled_items, U32 flags); + menuentry_vec_t &disabled_items, U32 flags); virtual void buildContextMenu(LLMenuGL& menu, U32 flags); virtual BOOL startDrag(EDragAndDropType* type, LLUUID* id) const; virtual BOOL dragOrDrop(MASK mask, BOOL drop, @@ -201,7 +136,7 @@ class LLInvFVBridge : public LLFolderViewEventListener menuentry_vec_t &disabled_items); protected: - LLInvFVBridge(LLInventoryPanel* inventory, const LLUUID& uuid); + LLInvFVBridge(LLInventoryPanel* inventory, LLFolderView* root, const LLUUID& uuid); LLInventoryObject* getInventoryObject() const; LLInventoryModel* getInventoryModel() const; @@ -223,40 +158,89 @@ class LLInvFVBridge : public LLFolderViewEventListener void removeBatchNoCheck(LLDynamicArray<LLFolderViewEventListener*>& batch); protected: LLHandle<LLPanel> mInventoryPanel; + LLFolderView* mRoot; const LLUUID mUUID; // item id LLInventoryType::EType mInvType; void purgeItem(LLInventoryModel *model, const LLUUID &uuid); }; -/** - * This class intended to build Folder View Bridge via LLInvFVBridge::createBridge. - * It can be overridden with another way of creation necessary Inventory-Folder-View-Bridge. - */ +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Class LLInvFVBridge +// +// This class intended to build Folder View Bridge via LLInvFVBridge::createBridge. +// It can be overridden with another way of creation necessary Inventory-Folder-View-Bridge. +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ class LLInventoryFVBridgeBuilder { public: - virtual ~LLInventoryFVBridgeBuilder(){} + virtual ~LLInventoryFVBridgeBuilder() {} virtual LLInvFVBridge* createBridge(LLAssetType::EType asset_type, LLAssetType::EType actual_asset_type, LLInventoryType::EType inv_type, LLInventoryPanel* inventory, + LLFolderView* root, const LLUUID& uuid, U32 flags = 0x00) const; }; +// Used by LLItemBridge::getIcon +enum EInventoryIcon +{ + TEXTURE_ICON_NAME, + SOUND_ICON_NAME, + CALLINGCARD_ONLINE_ICON_NAME, + CALLINGCARD_OFFLINE_ICON_NAME, + LANDMARK_ICON_NAME, + LANDMARK_VISITED_ICON_NAME, + SCRIPT_ICON_NAME, + CLOTHING_ICON_NAME, + OBJECT_ICON_NAME, + OBJECT_MULTI_ICON_NAME, + NOTECARD_ICON_NAME, + BODYPART_ICON_NAME, + SNAPSHOT_ICON_NAME, + + BODYPART_SHAPE_ICON_NAME, + BODYPART_SKIN_ICON_NAME, + BODYPART_HAIR_ICON_NAME, + BODYPART_EYES_ICON_NAME, + CLOTHING_SHIRT_ICON_NAME, + CLOTHING_PANTS_ICON_NAME, + CLOTHING_SHOES_ICON_NAME, + CLOTHING_SOCKS_ICON_NAME, + CLOTHING_JACKET_ICON_NAME, + CLOTHING_GLOVES_ICON_NAME, + CLOTHING_UNDERSHIRT_ICON_NAME, + CLOTHING_UNDERPANTS_ICON_NAME, + CLOTHING_SKIRT_ICON_NAME, + CLOTHING_ALPHA_ICON_NAME, + CLOTHING_TATTOO_ICON_NAME, + + ANIMATION_ICON_NAME, + GESTURE_ICON_NAME, + MESH_ICON_NAME, + + LINKITEM_ICON_NAME, + LINKFOLDER_ICON_NAME, + + ICON_NAME_COUNT +}; +extern std::string ICON_NAME[ICON_NAME_COUNT]; class LLItemBridge : public LLInvFVBridge { public: - LLItemBridge(LLInventoryPanel* inventory, const LLUUID& uuid) : - LLInvFVBridge(inventory, uuid) {} + LLItemBridge(LLInventoryPanel* inventory, + LLFolderView* root, + const LLUUID& uuid) : + LLInvFVBridge(inventory, root, uuid) {} - virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action); + virtual void performAction(LLInventoryModel* model, std::string action); virtual void selectItem(); virtual void restoreItem(); virtual void restoreToWorld(); - virtual void gotoItem(LLFolderView *folder); + virtual void gotoItem(); virtual LLUIImagePtr getIcon() const; virtual const std::string& getDisplayName() const; virtual std::string getLabelSuffix() const; @@ -285,7 +269,6 @@ class LLItemBridge : public LLInvFVBridge mutable std::string mDisplayName; }; - class LLFolderBridge : public LLInvFVBridge { friend class LLInvFVBridge; @@ -294,7 +277,7 @@ class LLFolderBridge : public LLInvFVBridge BOOL drop); BOOL dragCategoryIntoFolder(LLInventoryCategory* inv_category, BOOL drop); - virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action); + virtual void performAction(LLInventoryModel* model, std::string action); virtual void openItem(); virtual void closeItem(); virtual BOOL isItemRenameable() const; @@ -334,9 +317,10 @@ class LLFolderBridge : public LLInvFVBridge LLViewerInventoryCategory* getCategory() const; protected: - LLFolderBridge(LLInventoryPanel* inventory, const LLUUID& uuid) - : LLInvFVBridge(inventory, uuid), - + LLFolderBridge(LLInventoryPanel* inventory, + LLFolderView* root, + const LLUUID& uuid) : + LLInvFVBridge(inventory, root, uuid), mCallingCards(FALSE), mWearables(FALSE), mMenu(NULL) {} @@ -385,11 +369,12 @@ class LLScriptBridge : public LLItemBridge LLUIImagePtr getIcon() const; protected: - LLScriptBridge( LLInventoryPanel* inventory, const LLUUID& uuid ) : - LLItemBridge(inventory, uuid) {} + LLScriptBridge(LLInventoryPanel* inventory, + LLFolderView* root, + const LLUUID& uuid ) : + LLItemBridge(inventory, root, uuid) {} }; - class LLTextureBridge : public LLItemBridge { friend class LLInvFVBridge; @@ -397,11 +382,16 @@ class LLTextureBridge : public LLItemBridge virtual LLUIImagePtr getIcon() const; virtual void openItem(); virtual void buildContextMenu(LLMenuGL& menu, U32 flags); - virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action); + virtual void performAction(LLInventoryModel* model, std::string action); protected: - LLTextureBridge(LLInventoryPanel* inventory, const LLUUID& uuid, LLInventoryType::EType type) : - LLItemBridge(inventory, uuid), mInvType(type) {} + LLTextureBridge(LLInventoryPanel* inventory, + LLFolderView* root, + const LLUUID& uuid, + LLInventoryType::EType type) : + LLItemBridge(inventory, root, uuid), + mInvType(type) + {} bool canSaveTexture(void); LLInventoryType::EType mInvType; }; @@ -417,39 +407,30 @@ class LLSoundBridge : public LLItemBridge static void openSoundPreview(void*); protected: - LLSoundBridge(LLInventoryPanel* inventory, const LLUUID& uuid) : - LLItemBridge(inventory, uuid) {} + LLSoundBridge(LLInventoryPanel* inventory, + LLFolderView* root, + const LLUUID& uuid) : + LLItemBridge(inventory, root, uuid) {} }; class LLLandmarkBridge : public LLItemBridge { friend class LLInvFVBridge; public: - virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action); + virtual void performAction(LLInventoryModel* model, std::string action); virtual void buildContextMenu(LLMenuGL& menu, U32 flags); virtual LLUIImagePtr getIcon() const; virtual void openItem(); protected: - LLLandmarkBridge(LLInventoryPanel* inventory, const LLUUID& uuid, U32 flags = 0x00); - + LLLandmarkBridge(LLInventoryPanel* inventory, + LLFolderView* root, + const LLUUID& uuid, + U32 flags = 0x00); protected: BOOL mVisited; }; -class LLCallingCardBridge; - -class LLCallingCardObserver : public LLFriendObserver -{ -public: - LLCallingCardObserver(LLCallingCardBridge* bridge) : mBridgep(bridge) {} - virtual ~LLCallingCardObserver() { mBridgep = NULL; } - virtual void changed(U32 mask); - -protected: - LLCallingCardBridge* mBridgep; -}; - class LLCallingCardBridge : public LLItemBridge { friend class LLInvFVBridge; @@ -457,20 +438,18 @@ class LLCallingCardBridge : public LLItemBridge virtual std::string getLabelSuffix() const; //virtual const std::string& getDisplayName() const; virtual LLUIImagePtr getIcon() const; - virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action); + virtual void performAction(LLInventoryModel* model, std::string action); virtual void openItem(); virtual void buildContextMenu(LLMenuGL& menu, U32 flags); - //virtual void renameItem(const std::string& new_name); - //virtual BOOL removeItem(); virtual BOOL dragOrDrop(MASK mask, BOOL drop, EDragAndDropType cargo_type, void* cargo_data); void refreshFolderViewItem(); - protected: - LLCallingCardBridge( LLInventoryPanel* inventory, const LLUUID& uuid ); + LLCallingCardBridge(LLInventoryPanel* inventory, + LLFolderView* folder, + const LLUUID& uuid ); ~LLCallingCardBridge(); - protected: LLCallingCardObserver* mObserver; }; @@ -482,10 +461,11 @@ class LLNotecardBridge : public LLItemBridge public: virtual LLUIImagePtr getIcon() const; virtual void openItem(); - protected: - LLNotecardBridge(LLInventoryPanel* inventory, const LLUUID& uuid) : - LLItemBridge(inventory, uuid) {} + LLNotecardBridge(LLInventoryPanel* inventory, + LLFolderView* root, + const LLUUID& uuid) : + LLItemBridge(inventory, root, uuid) {} }; class LLGestureBridge : public LLItemBridge @@ -499,7 +479,7 @@ class LLGestureBridge : public LLItemBridge virtual LLFontGL::StyleFlags getLabelStyle() const; virtual std::string getLabelSuffix() const; - virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action); + virtual void performAction(LLInventoryModel* model, std::string action); virtual void openItem(); virtual BOOL removeItem(); @@ -508,33 +488,35 @@ class LLGestureBridge : public LLItemBridge static void playGesture(const LLUUID& item_id); protected: - LLGestureBridge(LLInventoryPanel* inventory, const LLUUID& uuid) - : LLItemBridge(inventory, uuid) {} + LLGestureBridge(LLInventoryPanel* inventory, + LLFolderView* root, + const LLUUID& uuid) + : LLItemBridge(inventory, root, uuid) {} }; - class LLAnimationBridge : public LLItemBridge { friend class LLInvFVBridge; public: - virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action); + virtual void performAction(LLInventoryModel* model, std::string action); virtual void buildContextMenu(LLMenuGL& menu, U32 flags); virtual LLUIImagePtr getIcon() const; virtual void openItem(); protected: - LLAnimationBridge(LLInventoryPanel* inventory, const LLUUID& uuid) : - LLItemBridge(inventory, uuid) {} + LLAnimationBridge(LLInventoryPanel* inventory, + LLFolderView* root, + const LLUUID& uuid) : + LLItemBridge(inventory, root, uuid) {} }; - class LLObjectBridge : public LLItemBridge { friend class LLInvFVBridge; public: virtual LLUIImagePtr getIcon() const; - virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action); + virtual void performAction(LLInventoryModel* model, std::string action); virtual void openItem(); virtual LLFontGL::StyleFlags getLabelStyle() const; virtual std::string getLabelSuffix() const; @@ -542,10 +524,12 @@ class LLObjectBridge : public LLItemBridge virtual BOOL renameItem(const std::string& new_name); LLInventoryObject* getObject() const; - protected: - LLObjectBridge(LLInventoryPanel* inventory, const LLUUID& uuid, LLInventoryType::EType type, U32 flags); - + LLObjectBridge(LLInventoryPanel* inventory, + LLFolderView* root, + const LLUUID& uuid, + LLInventoryType::EType type, + U32 flags); protected: static LLUUID sContextMenuItemID; // Only valid while the context menu is open. LLInventoryType::EType mInvType; @@ -553,26 +537,25 @@ class LLObjectBridge : public LLItemBridge BOOL mIsMultiObject; }; - class LLLSLTextBridge : public LLItemBridge { friend class LLInvFVBridge; public: virtual LLUIImagePtr getIcon() const; virtual void openItem(); - protected: - LLLSLTextBridge( LLInventoryPanel* inventory, const LLUUID& uuid ) : - LLItemBridge(inventory, uuid) {} + LLLSLTextBridge(LLInventoryPanel* inventory, + LLFolderView* root, + const LLUUID& uuid ) : + LLItemBridge(inventory, root, uuid) {} }; - class LLWearableBridge : public LLItemBridge { friend class LLInvFVBridge; public: virtual LLUIImagePtr getIcon() const; - virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action); + virtual void performAction(LLInventoryModel* model, std::string action); virtual void openItem(); virtual void buildContextMenu(LLMenuGL& menu, U32 flags); virtual std::string getLabelSuffix() const; @@ -598,13 +581,12 @@ class LLWearableBridge : public LLItemBridge void removeFromAvatar(); protected: - LLWearableBridge(LLInventoryPanel* inventory, const LLUUID& uuid, LLAssetType::EType asset_type, LLInventoryType::EType inv_type, EWearableType wearable_type) : - LLItemBridge(inventory, uuid), - mAssetType( asset_type ), - mInvType(inv_type), - mWearableType(wearable_type) - {} - + LLWearableBridge(LLInventoryPanel* inventory, + LLFolderView* root, + const LLUUID& uuid, + LLAssetType::EType asset_type, + LLInventoryType::EType inv_type, + EWearableType wearable_type); protected: LLAssetType::EType mAssetType; LLInventoryType::EType mInvType; @@ -616,14 +598,13 @@ class LLLinkItemBridge : public LLItemBridge friend class LLInvFVBridge; public: virtual const std::string& getPrefix() { return sPrefix; } - virtual LLUIImagePtr getIcon() const; virtual void buildContextMenu(LLMenuGL& menu, U32 flags); - protected: - LLLinkItemBridge(LLInventoryPanel* inventory, const LLUUID& uuid) : - LLItemBridge(inventory, uuid) {} - + LLLinkItemBridge(LLInventoryPanel* inventory, + LLFolderView* root, + const LLUUID& uuid) : + LLItemBridge(inventory, root, uuid) {} protected: static std::string sPrefix; }; @@ -633,17 +614,16 @@ class LLLinkFolderBridge : public LLItemBridge friend class LLInvFVBridge; public: virtual const std::string& getPrefix() { return sPrefix; } - virtual LLUIImagePtr getIcon() const; virtual void buildContextMenu(LLMenuGL& menu, U32 flags); - virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action); - virtual void gotoItem(LLFolderView *folder); - + virtual void performAction(LLInventoryModel* model, std::string action); + virtual void gotoItem(); protected: - LLLinkFolderBridge(LLInventoryPanel* inventory, const LLUUID& uuid) : - LLItemBridge(inventory, uuid) {} + LLLinkFolderBridge(LLInventoryPanel* inventory, + LLFolderView* root, + const LLUUID& uuid) : + LLItemBridge(inventory, root, uuid) {} const LLUUID &getFolderID() const; - protected: static std::string sPrefix; }; @@ -660,15 +640,17 @@ class LLMeshBridge : public LLItemBridge virtual void buildContextMenu(LLMenuGL& menu, U32 flags); protected: - LLMeshBridge(LLInventoryPanel* inventory, const LLUUID& uuid) : - LLItemBridge(inventory, uuid) {} + LLMeshBridge(LLInventoryPanel* inventory, + LLFolderView* root, + const LLUUID& uuid) : + LLItemBridge(inventory, root, uuid) {} }; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// Class LLInvFVBridgeAction (& its derived classes) +// Class LLInvFVBridgeAction // // This is an implementation class to be able to // perform action to view inventory items. @@ -678,154 +660,26 @@ class LLInvFVBridgeAction { public: // This method is a convenience function which creates the correct - // type of bridge action based on some basic information + // type of bridge action based on some basic information. static LLInvFVBridgeAction* createAction(LLAssetType::EType asset_type, - const LLUUID& uuid,LLInventoryModel* model); - + const LLUUID& uuid, + LLInventoryModel* model); static void doAction(LLAssetType::EType asset_type, const LLUUID& uuid, LLInventoryModel* model); static void doAction(const LLUUID& uuid, LLInventoryModel* model); - virtual void doIt() { }; - virtual ~LLInvFVBridgeAction(){}//need this because of warning on OSX + virtual void doIt() {}; + virtual ~LLInvFVBridgeAction() {} // need this because of warning on OSX protected: - LLInvFVBridgeAction(const LLUUID& id,LLInventoryModel* model):mUUID(id),mModel(model){} - + LLInvFVBridgeAction(const LLUUID& id, LLInventoryModel* model) : + mUUID(id), mModel(model) {} LLViewerInventoryItem* getItem() const; protected: - const LLUUID& mUUID; // item id + const LLUUID& mUUID; // item id LLInventoryModel* mModel; - -}; - - - -class LLTextureBridgeAction: public LLInvFVBridgeAction -{ - friend class LLInvFVBridgeAction; -public: - virtual void doIt() ; - virtual ~LLTextureBridgeAction(){} -protected: - LLTextureBridgeAction(const LLUUID& id,LLInventoryModel* model):LLInvFVBridgeAction(id,model){} - -}; - - -class LLSoundBridgeAction: public LLInvFVBridgeAction -{ - friend class LLInvFVBridgeAction; -public: - virtual void doIt() ; - virtual ~LLSoundBridgeAction(){} -protected: - LLSoundBridgeAction(const LLUUID& id,LLInventoryModel* model):LLInvFVBridgeAction(id,model){} - -}; - - -class LLLandmarkBridgeAction: public LLInvFVBridgeAction -{ - friend class LLInvFVBridgeAction; -public: - virtual void doIt() ; - virtual ~LLLandmarkBridgeAction(){} -protected: - LLLandmarkBridgeAction(const LLUUID& id,LLInventoryModel* model):LLInvFVBridgeAction(id,model){} - -}; - - -class LLCallingCardBridgeAction: public LLInvFVBridgeAction -{ - friend class LLInvFVBridgeAction; -public: - virtual void doIt() ; - virtual ~LLCallingCardBridgeAction(){} -protected: - LLCallingCardBridgeAction(const LLUUID& id,LLInventoryModel* model):LLInvFVBridgeAction(id,model){} - -}; - - -class LLNotecardBridgeAction: public LLInvFVBridgeAction -{ - friend class LLInvFVBridgeAction; -public: - virtual void doIt() ; - virtual ~LLNotecardBridgeAction(){} -protected: - LLNotecardBridgeAction(const LLUUID& id,LLInventoryModel* model):LLInvFVBridgeAction(id,model){} - -}; - - -class LLGestureBridgeAction: public LLInvFVBridgeAction -{ - friend class LLInvFVBridgeAction; -public: - virtual void doIt() ; - virtual ~LLGestureBridgeAction(){} -protected: - LLGestureBridgeAction(const LLUUID& id,LLInventoryModel* model):LLInvFVBridgeAction(id,model){} - }; -class LLAnimationBridgeAction: public LLInvFVBridgeAction -{ - friend class LLInvFVBridgeAction; -public: - virtual void doIt() ; - virtual ~LLAnimationBridgeAction(){} -protected: - LLAnimationBridgeAction(const LLUUID& id,LLInventoryModel* model):LLInvFVBridgeAction(id,model){} - -}; - - -class LLObjectBridgeAction: public LLInvFVBridgeAction -{ - friend class LLInvFVBridgeAction; -public: - virtual void doIt() ; - virtual ~LLObjectBridgeAction(){} -protected: - LLObjectBridgeAction(const LLUUID& id,LLInventoryModel* model):LLInvFVBridgeAction(id,model){} - -}; - - -class LLLSLTextBridgeAction: public LLInvFVBridgeAction -{ - friend class LLInvFVBridgeAction; -public: - virtual void doIt() ; - virtual ~LLLSLTextBridgeAction(){} -protected: - LLLSLTextBridgeAction(const LLUUID& id,LLInventoryModel* model):LLInvFVBridgeAction(id,model){} - -}; - - -class LLWearableBridgeAction: public LLInvFVBridgeAction -{ - friend class LLInvFVBridgeAction; -public: - virtual void doIt(); - virtual ~LLWearableBridgeAction(){} -protected: - LLWearableBridgeAction(const LLUUID& id,LLInventoryModel* model):LLInvFVBridgeAction(id,model){} - - - BOOL isItemInTrash() const; - // return true if the item is in agent inventory. if false, it - // must be lost or in the inventory library. - BOOL isAgentInventory() const; - - void wearOnAvatar(); - -}; class LLMeshBridgeAction: public LLInvFVBridgeAction { @@ -839,11 +693,10 @@ class LLMeshBridgeAction: public LLInvFVBridgeAction }; - void wear_inventory_item_on_avatar(LLInventoryItem* item); -class LLViewerJointAttachment; -void rez_attachment(LLViewerInventoryItem* item, LLViewerJointAttachment* attachment); +void rez_attachment(LLViewerInventoryItem* item, + LLViewerJointAttachment* attachment); // Move items from an in-world object's "Contents" folder to a specified // folder in agent inventory. @@ -853,13 +706,9 @@ BOOL move_inv_category_world_to_agent(const LLUUID& object_id, void (*callback)(S32, void*) = NULL, void* user_data = NULL); - - -void teleport_via_landmark(const LLUUID& asset_id); - // Utility function to hide all entries except those in the list void hide_context_entries(LLMenuGL& menu, - const menuentry_vec_t &entries_to_show, - const menuentry_vec_t &disabled_entries); + const menuentry_vec_t &entries_to_show, + const menuentry_vec_t &disabled_entries); #endif // LL_LLINVENTORYBRIDGE_H diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp index 56de7cc771734810ed8648d7f59035c0b5ffacc3..449b1b5b4d1c21ce2f92b7acc7fe6d4317b82e2e 100644 --- a/indra/newview/llinventoryfunctions.cpp +++ b/indra/newview/llinventoryfunctions.cpp @@ -41,6 +41,7 @@ #include "llagentwearables.h" #include "llcallingcard.h" #include "llfloaterreg.h" +#include "llinventorydefines.h" #include "llsdserialize.h" #include "llfiltereditor.h" #include "llspinctrl.h" @@ -101,30 +102,29 @@ bool LLInventoryCollectFunctor::itemTransferCommonlyAllowed(LLInventoryItem* ite 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())) - { + 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; - - default: - allowed = true; - break; + break; } - + return allowed; } @@ -409,7 +409,7 @@ void LLOpenFoldersWithSelection::doFolder(LLFolderViewFolder* folder) static void assign_clothing_bodypart_icon(EInventoryIcon &idx, U32 attachment_point) { - const EWearableType wearable_type = EWearableType(LLInventoryItem::II_FLAGS_WEARABLES_MASK & attachment_point); + const EWearableType wearable_type = EWearableType(LLInventoryItemFlags::II_FLAGS_WEARABLES_MASK & attachment_point); switch(wearable_type) { case WT_SHAPE: diff --git a/indra/newview/llinventoryfunctions.h b/indra/newview/llinventoryfunctions.h index eb337636704f1ece52b75194438e8d530e4d1e35..e3cd988e39c07ff35723f8d538830d499a8880b6 100644 --- a/indra/newview/llinventoryfunctions.h +++ b/indra/newview/llinventoryfunctions.h @@ -52,7 +52,6 @@ // and override the () operator to return TRUE if you want to collect // the category or item passed in. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - class LLInventoryCollectFunctor { public: @@ -62,7 +61,6 @@ class LLInventoryCollectFunctor static bool itemTransferCommonlyAllowed(LLInventoryItem* item); }; - //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Class LLAssetIDMatches // @@ -116,14 +114,12 @@ class LLIsType : public LLInventoryCollectFunctor 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: @@ -156,7 +152,6 @@ class LLIsTypeWithPermissions : public LLInventoryCollectFunctor // Simple class that collects calling cards that are not null, and not // the agent. Duplicates are possible. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - class LLBuddyCollector : public LLInventoryCollectFunctor { public: @@ -172,7 +167,6 @@ class LLBuddyCollector : public LLInventoryCollectFunctor // Simple class that collects calling cards that are not null, and not // the agent. Duplicates are discarded. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - class LLUniqueBuddyCollector : public LLInventoryCollectFunctor { public: @@ -202,13 +196,11 @@ class LLParticularBuddyCollector : public LLInventoryCollectFunctor LLUUID mBuddyID; }; - //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Class LLNameCategoryCollector // // Collects categories based on case-insensitive match of prefix //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - class LLNameCategoryCollector : public LLInventoryCollectFunctor { public: @@ -270,7 +262,7 @@ class LLSelectFirstFilteredItem : public LLFolderViewFunctor virtual void doItem(LLFolderViewItem* item); BOOL wasItemSelected() { return mItemSelected; } protected: - BOOL mItemSelected; + BOOL mItemSelected; }; class LLOpenFilteredFolders : public LLFolderViewFunctor diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index d1cc0ae936d7032bee8168a3a2b0b6ea0e02ff63..6452ae82f8d4ef18bedba1298d837d58e56575dd 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -1326,7 +1326,7 @@ bool LLInventoryModel::fetchDescendentsOf(const LLUUID& folder_id) //{ // known_descendents += items->count(); //} - return cat->fetchDescendents(); + return cat->fetch(); } diff --git a/indra/newview/llinventorymodelbackgroundfetch.cpp b/indra/newview/llinventorymodelbackgroundfetch.cpp index 72e5c0dd757547b72603eedd3b0f8989ca796f86..cfbc2c3e058a5e6affbf576125f85985b47f7cd1 100644 --- a/indra/newview/llinventorymodelbackgroundfetch.cpp +++ b/indra/newview/llinventorymodelbackgroundfetch.cpp @@ -257,7 +257,7 @@ void LLInventoryModelBackgroundFetch::backgroundFetch() { // 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()) + if (cat->fetch()) { mFetchTimer.reset(); mTimelyFetchPending = TRUE; diff --git a/indra/newview/llinventoryobserver.cpp b/indra/newview/llinventoryobserver.cpp index 9913be2e88b500b4543eeb167c99e96339fe46c1..83e1bbd5a09b1cd2949e6834018def5b3091dee6 100644 --- a/indra/newview/llinventoryobserver.cpp +++ b/indra/newview/llinventoryobserver.cpp @@ -108,6 +108,10 @@ void LLInventoryCompletionObserver::watchItem(const LLUUID& id) } } +LLInventoryFetchObserver::LLInventoryFetchObserver(bool retry_if_missing) : + mRetryIfMissing(retry_if_missing) +{ +} void LLInventoryFetchObserver::changed(U32 mask) { @@ -115,7 +119,7 @@ void LLInventoryFetchObserver::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) @@ -219,12 +223,11 @@ void fetch_items_from_llsd(const LLSD& items_llsd) } } -void LLInventoryFetchObserver::fetchItems( - const LLInventoryFetchObserver::item_ref_t& ids) +void LLInventoryFetchObserver::fetch(const uuid_vec_t& ids) { LLUUID owner_id; LLSD items_llsd; - for(item_ref_t::const_iterator it = ids.begin(); it < ids.end(); ++it) + for(uuid_vec_t::const_iterator it = ids.begin(); it < ids.end(); ++it) { LLViewerInventoryItem* item = gInventory.getItem(*it); if(item) @@ -262,30 +265,29 @@ void LLInventoryFetchObserver::fetchItems( // virtual void LLInventoryFetchDescendentsObserver::changed(U32 mask) { - for(uuid_vec_t::iterator it = mIncompleteFolders.begin(); it < mIncompleteFolders.end();) + for(uuid_vec_t::iterator it = mIncomplete.begin(); it < mIncomplete.end();) { LLViewerInventoryCategory* cat = gInventory.getCategory(*it); if(!cat) { - it = mIncompleteFolders.erase(it); + it = mIncomplete.erase(it); continue; } if(isComplete(cat)) { - mCompleteFolders.push_back(*it); - it = mIncompleteFolders.erase(it); + mComplete.push_back(*it); + it = mIncomplete.erase(it); continue; } ++it; } - if(mIncompleteFolders.empty()) + if(mIncomplete.empty()) { done(); } } -void LLInventoryFetchDescendentsObserver::fetchDescendents( - const uuid_vec_t& ids) +void LLInventoryFetchDescendentsObserver::fetch(const uuid_vec_t& ids) { for(uuid_vec_t::const_iterator it = ids.begin(); it != ids.end(); ++it) { @@ -293,19 +295,19 @@ void LLInventoryFetchDescendentsObserver::fetchDescendents( if(!cat) continue; if(!isComplete(cat)) { - cat->fetchDescendents(); //blindly fetch it without seeing if anything else is fetching it. - mIncompleteFolders.push_back(*it); //Add to list of things being downloaded for this observer. + cat->fetch(); //blindly fetch it without seeing if anything else is fetching it. + mIncomplete.push_back(*it); //Add to list of things being downloaded for this observer. } else { - mCompleteFolders.push_back(*it); + mComplete.push_back(*it); } } } bool LLInventoryFetchDescendentsObserver::isEverythingComplete() const { - return mIncompleteFolders.empty(); + return mIncomplete.empty(); } bool LLInventoryFetchDescendentsObserver::isComplete(LLViewerInventoryCategory* cat) @@ -409,7 +411,7 @@ void LLInventoryFetchComboObserver::fetch( if(!cat) continue; if(!gInventory.isCategoryComplete(*fit)) { - cat->fetchDescendents(); + cat->fetch(); lldebugs << "fetching folder " << *fit <<llendl; mIncompleteFolders.push_back(*fit); } @@ -475,7 +477,7 @@ void LLInventoryExistenceObserver::changed(U32 mask) // appropriate. if(!mMIA.empty()) { - for(item_ref_t::iterator it = mMIA.begin(); it < mMIA.end(); ) + for(uuid_vec_t::iterator it = mMIA.begin(); it < mMIA.end(); ) { LLViewerInventoryItem* item = gInventory.getItem(*it); if(!item) diff --git a/indra/newview/llinventoryobserver.h b/indra/newview/llinventoryobserver.h index e1c8bd3faff50022321fbf36c703c28d191380f2..ba70552ebcf307bd19842601a99f328e226cf2a0 100644 --- a/indra/newview/llinventoryobserver.h +++ b/indra/newview/llinventoryobserver.h @@ -42,8 +42,8 @@ class LLViewerInventoryCategory; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Class LLInventoryObserver // -// This class is designed to be a simple abstract base class which can -// relay messages when the inventory changes. +// A simple abstract base class that can relay messages when the inventory +// changes. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ class LLInventoryObserver @@ -54,17 +54,17 @@ class LLInventoryObserver // chaged() to see if the observer is interested in the change. enum { - NONE = 0, - LABEL = 1, // name changed - INTERNAL = 2, // internal change (e.g. asset uuid different) - ADD = 4, // something added - REMOVE = 8, // something deleted - STRUCTURE = 16, // structural change (eg item or folder moved) - CALLING_CARD = 32, // (eg online, grant status, cancel) - GESTURE = 64, - REBUILD = 128, // item UI changed (eg item type different) - SORT = 256, // folder needs to be resorted. - ALL = 0xffffffff + NONE = 0, + LABEL = 1, // Name changed + INTERNAL = 2, // Internal change (e.g. asset uuid different) + ADD = 4, // Something added + REMOVE = 8, // Something deleted + STRUCTURE = 16, // Structural change (e.g. item or folder moved) + CALLING_CARD = 32, // Calling card change (e.g. online, grant status, cancel) + GESTURE = 64, + REBUILD = 128, // Item UI changed (e.g. item type different) + SORT = 256, // Folder needs to be resorted. + ALL = 0xffffffff }; LLInventoryObserver(); virtual ~LLInventoryObserver(); @@ -75,11 +75,10 @@ class LLInventoryObserver //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Class LLInventoryCompletionObserver // -// Class which can be used as a base class for doing something when -// when all observed items are locally complete. This class implements -// the changed() method of LLInventoryObserver and declares a new -// method named done() which is called when all watched items have -// complete information in the inventory model. +// Base class for doing something when when all observed items are locally +// complete. Implements the changed() method of LLInventoryObserver +// and declares a new method named done() which is called when all watched items +// have complete information in the inventory model. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ class LLInventoryCompletionObserver : public LLInventoryObserver @@ -109,19 +108,17 @@ class LLInventoryCompletionObserver : public LLInventoryObserver class LLInventoryFetchObserver : public LLInventoryObserver { public: - LLInventoryFetchObserver(bool retry_if_missing = false): mRetryIfMissing(retry_if_missing) {} + LLInventoryFetchObserver(bool retry_if_missing = false); virtual void changed(U32 mask); - typedef uuid_vec_t item_ref_t; - bool isEverythingComplete() const; - void fetchItems(const item_ref_t& ids); + void fetch(const uuid_vec_t& ids); virtual void done() {}; protected: bool mRetryIfMissing; - item_ref_t mComplete; - item_ref_t mIncomplete; + uuid_vec_t mComplete; + uuid_vec_t mIncomplete; }; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -137,14 +134,14 @@ class LLInventoryFetchDescendentsObserver : public LLInventoryObserver LLInventoryFetchDescendentsObserver() {} virtual void changed(U32 mask); - void fetchDescendents(const uuid_vec_t& ids); + void fetch(const uuid_vec_t& ids); bool isEverythingComplete() const; virtual void done() = 0; protected: bool isComplete(LLViewerInventoryCategory* cat); - uuid_vec_t mIncompleteFolders; - uuid_vec_t mCompleteFolders; + uuid_vec_t mIncomplete; + uuid_vec_t mComplete; }; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -192,10 +189,8 @@ class LLInventoryExistenceObserver : public LLInventoryObserver protected: virtual void done() = 0; - - typedef uuid_vec_t item_ref_t; - item_ref_t mExist; - item_ref_t mMIA; + uuid_vec_t mExist; + uuid_vec_t mMIA; }; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index 83c2d62ee8b9a10302f835d351efa73a4c62528f..c6c2d23a4b499b8e596ab22770d8ab58f342593b 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -80,7 +80,7 @@ class LLInventoryPanelObserver : public LLInventoryObserver LLInventoryPanel::LLInventoryPanel(const LLInventoryPanel::Params& p) : LLPanel(p), mInventoryObserver(NULL), - mFolders(NULL), + mFolderRoot(NULL), mScroller(NULL), mSortOrderSetting(p.sort_order_setting), mInventory(p.inventory), @@ -124,13 +124,13 @@ BOOL LLInventoryPanel::postBuild() p.rect = folder_rect; p.parent_panel = this; p.tool_tip = p.name; - mFolders = LLUICtrlFactory::create<LLFolderView>(p); - mFolders->setAllowMultiSelect(mAllowMultiSelect); + mFolderRoot = LLUICtrlFactory::create<LLFolderView>(p); + mFolderRoot->setAllowMultiSelect(mAllowMultiSelect); } mCommitCallbackRegistrar.popScope(); - mFolders->setCallbackRegistrar(&mCommitCallbackRegistrar); + mFolderRoot->setCallbackRegistrar(&mCommitCallbackRegistrar); // Scroller { @@ -144,9 +144,9 @@ BOOL LLInventoryPanel::postBuild() p.tab_stop(true); mScroller = LLUICtrlFactory::create<LLScrollContainer>(p); addChild(mScroller); - mScroller->addChild(mFolders); - mFolders->setScrollContainer(mScroller); - mFolders->addChild(mFolders->mStatusTextBox); + mScroller->addChild(mFolderRoot); + mFolderRoot->setScrollContainer(mScroller); + mFolderRoot->addChild(mFolderRoot->mStatusTextBox); } // Set up the callbacks from the inventory we're viewing, and then build everything. @@ -169,16 +169,16 @@ BOOL LLInventoryPanel::postBuild() { setSortOrder(gSavedSettings.getU32(DEFAULT_SORT_ORDER)); } - mFolders->setSortOrder(getFilter()->getSortOrder()); + mFolderRoot->setSortOrder(getFilter()->getSortOrder()); return TRUE; } LLInventoryPanel::~LLInventoryPanel() { - if (mFolders) + if (mFolderRoot) { - U32 sort_order = mFolders->getSortOrder(); + U32 sort_order = mFolderRoot->getSortOrder(); if (mSortOrderSetting != INHERIT_SORT_ORDER) { gSavedSettings.setU32(mSortOrderSetting, sort_order); @@ -194,15 +194,15 @@ LLInventoryPanel::~LLInventoryPanel() void LLInventoryPanel::draw() { // Select the desired item (in case it wasn't loaded when the selection was requested) - mFolders->updateSelection(); + mFolderRoot->updateSelection(); LLPanel::draw(); } LLInventoryFilter* LLInventoryPanel::getFilter() { - if (mFolders) + if (mFolderRoot) { - return mFolders->getFilter(); + return mFolderRoot->getFilter(); } return NULL; } @@ -230,9 +230,9 @@ void LLInventoryPanel::setSortOrder(U32 order) getFilter()->setSortOrder(order); if (getFilter()->isModified()) { - mFolders->setSortOrder(order); + mFolderRoot->setSortOrder(order); // try to keep selection onscreen, even if it wasn't to start with - mFolders->scrollToShowSelection(); + mFolderRoot->scrollToShowSelection(); } } @@ -277,8 +277,8 @@ void LLInventoryPanel::modelChanged(U32 mask) { const LLUUID& item_id = (*items_iter); const LLInventoryObject* model_item = model->getObject(item_id); - LLFolderViewItem* view_item = mFolders->getItemByID(item_id); - LLFolderViewFolder* view_folder = mFolders->getFolderByID(item_id); + LLFolderViewItem* view_item = mFolderRoot->getItemByID(item_id); + LLFolderViewFolder* view_folder = mFolderRoot->getFolderByID(item_id); ////////////////////////////// // LABEL Operation @@ -353,7 +353,7 @@ void LLInventoryPanel::modelChanged(U32 mask) // Add the UI element for this item. buildNewViews(item_id); // Select any newly created object that has the auto rename at top of folder root set. - if(mFolders->getRoot()->needsAutoRename()) + if(mFolderRoot->getRoot()->needsAutoRename()) { setSelection(item_id, FALSE); } @@ -368,7 +368,7 @@ void LLInventoryPanel::modelChanged(U32 mask) // model_item's parent will be NULL. if (view_item->getRoot() != view_item->getParent()) { - LLFolderViewFolder* new_parent = (LLFolderViewFolder*)mFolders->getItemByID(model_item->getParentUUID()); + LLFolderViewFolder* new_parent = (LLFolderViewFolder*)mFolderRoot->getItemByID(model_item->getParentUUID()); // Item has been moved. if (view_item->getParentFolder() != new_parent) { @@ -376,7 +376,7 @@ void LLInventoryPanel::modelChanged(U32 mask) { // Item is to be moved and we found its new parent in the panel's directory, so move the item's UI. view_item->getParentFolder()->extractItem(view_item); - view_item->addToFolder(new_parent, mFolders); + view_item->addToFolder(new_parent, mFolderRoot); } else { @@ -444,14 +444,14 @@ void LLInventoryPanel::initializeViews() if (gAgent.isFirstLogin()) { // Auto open the user's library - LLFolderViewFolder* lib_folder = mFolders->getFolderByID(gInventory.getLibraryRootFolderID()); + LLFolderViewFolder* lib_folder = mFolderRoot->getFolderByID(gInventory.getLibraryRootFolderID()); if (lib_folder) { lib_folder->setOpen(TRUE); } // Auto close the user's my inventory folder - LLFolderViewFolder* my_inv_folder = mFolders->getFolderByID(gInventory.getRootFolderID()); + LLFolderViewFolder* my_inv_folder = mFolderRoot->getFolderByID(gInventory.getRootFolderID()); if (my_inv_folder) { my_inv_folder->setOpenArrangeRecursively(FALSE, LLFolderViewFolder::RECURSE_DOWN); @@ -462,7 +462,7 @@ void LLInventoryPanel::initializeViews() void LLInventoryPanel::rebuildViewsFor(const LLUUID& id) { // Destroy the old view for this ID so we can rebuild it. - LLFolderViewItem* old_view = mFolders->getItemByID(id); + LLFolderViewItem* old_view = mFolderRoot->getItemByID(id); if (old_view && id.notNull()) { old_view->destroyView(); @@ -479,10 +479,10 @@ void LLInventoryPanel::buildNewViews(const LLUUID& id) if (objectp) { const LLUUID &parent_id = objectp->getParentUUID(); - LLFolderViewFolder* parent_folder = (LLFolderViewFolder*)mFolders->getItemByID(parent_id); + LLFolderViewFolder* parent_folder = (LLFolderViewFolder*)mFolderRoot->getItemByID(parent_id); if (id == mStartFolderID) { - parent_folder = mFolders; + parent_folder = mFolderRoot; } else if ((mStartFolderID != LLUUID::null) && (!gInventory.isObjectDescendentOf(id, mStartFolderID))) { @@ -506,19 +506,19 @@ void LLInventoryPanel::buildNewViews(const LLUUID& id) objectp->getType(), LLInventoryType::IT_CATEGORY, this, + mFolderRoot, objectp->getUUID()); - if (new_listener) { LLFolderViewFolder::Params params; params.name = new_listener->getDisplayName(); params.icon = new_listener->getIcon(); params.icon_open = new_listener->getOpenIcon(); - params.root = mFolders; + params.root = mFolderRoot; params.listener = new_listener; params.tool_tip = params.name; LLFolderViewFolder* folderp = LLUICtrlFactory::create<LLFolderViewFolder>(params); - folderp->setItemSortOrder(mFolders->getSortOrder()); + folderp->setItemSortOrder(mFolderRoot->getSortOrder()); itemp = folderp; // Hide the root folder, so we can show the contents of a folder flat @@ -542,6 +542,7 @@ void LLInventoryPanel::buildNewViews(const LLUUID& id) item->getActualType(), item->getInventoryType(), this, + mFolderRoot, item->getUUID(), item->getFlags()); @@ -552,7 +553,7 @@ void LLInventoryPanel::buildNewViews(const LLUUID& id) params.icon = new_listener->getIcon(); params.icon_open = new_listener->getOpenIcon(); params.creation_date = new_listener->getCreationDate(); - params.root = mFolders; + params.root = mFolderRoot; params.listener = new_listener; params.rect = LLRect (0, 0, 0, 0); params.tool_tip = params.name; @@ -562,7 +563,7 @@ void LLInventoryPanel::buildNewViews(const LLUUID& id) if (itemp) { - itemp->addToFolder(parent_folder, mFolders); + itemp->addToFolder(parent_folder, mFolderRoot); // Don't add children of hidden folders unless this is the panel's root folder. if (itemp->getHidden() && (id != mStartFolderID)) @@ -611,19 +612,19 @@ void LLInventoryPanel::openStartFolderOrMyInventory() { if (mStartFolderString != "") { - mFolders->openFolder(mStartFolderString); + mFolderRoot->openFolder(mStartFolderString); } else { // Find My Inventory folder and open it up by name - for (LLView *child = mFolders->getFirstChild(); child; child = mFolders->findNextSibling(child)) + for (LLView *child = mFolderRoot->getFirstChild(); child; child = mFolderRoot->findNextSibling(child)) { LLFolderViewFolder *fchild = dynamic_cast<LLFolderViewFolder*>(child); if (fchild && fchild->getListener() && (fchild->getListener()->getUUID() == gInventory.getRootFolderID())) { const std::string& child_name = child->getName(); - mFolders->openFolder(child_name); + mFolderRoot->openFolder(child_name); break; } } @@ -632,7 +633,7 @@ void LLInventoryPanel::openStartFolderOrMyInventory() void LLInventoryPanel::openSelected() { - LLFolderViewItem* folder_item = mFolders->getCurSelectedItem(); + LLFolderViewItem* folder_item = mFolderRoot->getCurSelectedItem(); if(!folder_item) return; LLInvFVBridge* bridge = (LLInvFVBridge*)folder_item->getListener(); if(!bridge) return; @@ -668,14 +669,14 @@ BOOL LLInventoryPanel::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, // If folder view is empty the (x, y) point won't be in its rect // so the handler must be called explicitly. - if (!mFolders->hasVisibleChildren()) + if (!mFolderRoot->hasVisibleChildren()) { - handled = mFolders->handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg); + handled = mFolderRoot->handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg); } if (handled) { - mFolders->setDragAndDropThisFrame(); + mFolderRoot->setDragAndDropThisFrame(); } return handled; @@ -686,20 +687,20 @@ void LLInventoryPanel::onMouseEnter(S32 x, S32 y, MASK mask) { LLPanel::onMouseEnter(x, y, mask); // don't auto-scroll a list when cursor is over Inventory. See EXT-3981. - mFolders->setEnableScroll(false); + mFolderRoot->setEnableScroll(false); } // virtual void LLInventoryPanel::onMouseLeave(S32 x, S32 y, MASK mask) { LLPanel::onMouseLeave(x, y, mask); - mFolders->setEnableScroll(true); + mFolderRoot->setEnableScroll(true); } void LLInventoryPanel::onFocusLost() { // inventory no longer handles cut/copy/paste/delete - if (LLEditMenuHandler::gEditMenuHandler == mFolders) + if (LLEditMenuHandler::gEditMenuHandler == mFolderRoot) { LLEditMenuHandler::gEditMenuHandler = NULL; } @@ -710,15 +711,15 @@ void LLInventoryPanel::onFocusLost() void LLInventoryPanel::onFocusReceived() { // inventory now handles cut/copy/paste/delete - LLEditMenuHandler::gEditMenuHandler = mFolders; + LLEditMenuHandler::gEditMenuHandler = mFolderRoot; LLPanel::onFocusReceived(); } void LLInventoryPanel::openAllFolders() { - mFolders->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_DOWN); - mFolders->arrangeAll(); + mFolderRoot->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_DOWN); + mFolderRoot->arrangeAll(); } void LLInventoryPanel::setSelection(const LLUUID& obj_id, BOOL take_keyboard_focus) @@ -729,20 +730,20 @@ void LLInventoryPanel::setSelection(const LLUUID& obj_id, BOOL take_keyboard_foc { return; } - mFolders->setSelectionByID(obj_id, take_keyboard_focus); + mFolderRoot->setSelectionByID(obj_id, take_keyboard_focus); } void LLInventoryPanel::setSelectCallback(const LLFolderView::signal_t::slot_type& cb) { - if (mFolders) + if (mFolderRoot) { - mFolders->setSelectCallback(cb); + mFolderRoot->setSelectCallback(cb); } } void LLInventoryPanel::clearSelection() { - mFolders->clearSelection(); + mFolderRoot->clearSelection(); } void LLInventoryPanel::onSelectionChange(const std::deque<LLFolderViewItem*>& items, BOOL user_action) @@ -761,18 +762,18 @@ void LLInventoryPanel::onSelectionChange(const std::deque<LLFolderViewItem*>& it void LLInventoryPanel::doToSelected(const LLSD& userdata) { - mFolders->doToSelected(&gInventory, userdata); + mFolderRoot->doToSelected(&gInventory, userdata); } void LLInventoryPanel::doCreate(const LLSD& userdata) { - menu_create_inventory_item(mFolders, LLFolderBridge::sSelf, userdata); + menu_create_inventory_item(mFolderRoot, LLFolderBridge::sSelf, userdata); } bool LLInventoryPanel::beginIMSession() { std::set<LLUUID> selected_items; - mFolders->getSelectionList(selected_items); + mFolderRoot->getSelectionList(selected_items); std::string name; static int session_num = 1; @@ -785,7 +786,7 @@ bool LLInventoryPanel::beginIMSession() { LLUUID item = *iter; - LLFolderViewItem* folder_item = mFolders->getItemByID(item); + LLFolderViewItem* folder_item = mFolderRoot->getItemByID(item); if(folder_item) { @@ -827,7 +828,7 @@ bool LLInventoryPanel::beginIMSession() } else { - LLFolderViewItem* folder_item = mFolders->getItemByID(item); + LLFolderViewItem* folder_item = mFolderRoot->getItemByID(item); if(!folder_item) return true; LLInvFVBridge* listenerp = (LLInvFVBridge*)folder_item->getListener(); @@ -870,7 +871,7 @@ bool LLInventoryPanel::beginIMSession() bool LLInventoryPanel::attachObject(const LLSD& userdata) { std::set<LLUUID> selected_items; - mFolders->getSelectionList(selected_items); + mFolderRoot->getSelectionList(selected_items); std::string joint_name = userdata.asString(); LLViewerJointAttachment* attachmentp = NULL; @@ -927,7 +928,7 @@ BOOL LLInventoryPanel::getSinceLogoff() void LLInventoryPanel::dumpSelectionInformation(void* user_data) { LLInventoryPanel* iv = (LLInventoryPanel*)user_data; - iv->mFolders->dumpSelectionInformation(); + iv->mFolderRoot->dumpSelectionInformation(); } BOOL is_inventorysp_active() diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h index 928a458b84296281fa1e5619616398651084fe3b..160a3d6f23b9e676dd007d50cd0f6043da35f76d 100644 --- a/indra/newview/llinventorypanel.h +++ b/indra/newview/llinventorypanel.h @@ -133,21 +133,21 @@ class LLInventoryPanel : public LLPanel void clearSelection(); LLInventoryFilter* getFilter(); void setFilterTypes(U64 filter, LLInventoryFilter::EFilterType = LLInventoryFilter::FILTERTYPE_OBJECT); - U32 getFilterObjectTypes() const { return mFolders->getFilterObjectTypes(); } + U32 getFilterObjectTypes() const { return mFolderRoot->getFilterObjectTypes(); } void setFilterPermMask(PermissionMask filter_perm_mask); - U32 getFilterPermMask() const { return mFolders->getFilterPermissions(); } + U32 getFilterPermMask() const { return mFolderRoot->getFilterPermissions(); } void setFilterSubString(const std::string& string); - const std::string getFilterSubString() { return mFolders->getFilterSubString(); } + const std::string getFilterSubString() { return mFolderRoot->getFilterSubString(); } void setSinceLogoff(BOOL sl); void setHoursAgo(U32 hours); BOOL getSinceLogoff(); void setShowFolderState(LLInventoryFilter::EFolderShow show); LLInventoryFilter::EFolderShow getShowFolderState(); - void setAllowMultiSelect(BOOL allow) { mFolders->setAllowMultiSelect(allow); } + void setAllowMultiSelect(BOOL allow) { mFolderRoot->setAllowMultiSelect(allow); } // This method is called when something has changed about the inventory. void modelChanged(U32 mask); - LLFolderView* getRootFolder() { return mFolders; } + LLFolderView* getRootFolder() { return mFolderRoot; } LLScrollContainer* getScrollableContainer() { return mScroller; } void onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action); @@ -162,7 +162,7 @@ class LLInventoryPanel : public LLPanel static void dumpSelectionInformation(void* user_data); void openSelected(); - void unSelectAll() { mFolders->setSelection(NULL, FALSE, FALSE); } + void unSelectAll() { mFolderRoot->setSelection(NULL, FALSE, FALSE); } static void onIdle(void* user_data); @@ -177,7 +177,7 @@ class LLInventoryPanel : public LLPanel LLInventoryObserver* mInventoryObserver; BOOL mAllowMultiSelect; - LLFolderView* mFolders; + LLFolderView* mFolderRoot; LLScrollContainer* mScroller; /** @@ -199,7 +199,7 @@ class LLInventoryPanel : public LLPanel static const std::string INHERIT_SORT_ORDER; void setSortOrder(U32 order); - U32 getSortOrder() const { return mFolders->getSortOrder(); } + U32 getSortOrder() const { return mFolderRoot->getSortOrder(); } private: std::string mSortOrderSetting; diff --git a/indra/newview/lllocationinputctrl.cpp b/indra/newview/lllocationinputctrl.cpp index ba50287ebd8312e76a6016afe6bcd7f16bcfe3c9..4e0be81f622bc445d8cc429e9151dd6572bbf724 100644 --- a/indra/newview/lllocationinputctrl.cpp +++ b/indra/newview/lllocationinputctrl.cpp @@ -227,7 +227,6 @@ LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p) params.default_text(LLStringUtil::null); params.max_length_bytes(p.max_chars); params.keystroke_callback(boost::bind(&LLComboBox::onTextEntry, this, _1)); - params.handle_edit_keys_directly(true); params.commit_on_focus_lost(false); params.follows.flags(FOLLOWS_ALL); mTextEntry = LLUICtrlFactory::create<LLURLLineEditor>(params); @@ -391,8 +390,8 @@ LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p) mAddLandmarkTooltip = LLTrans::getString("LocationCtrlAddLandmarkTooltip"); mEditLandmarkTooltip = LLTrans::getString("LocationCtrlEditLandmarkTooltip"); - getChild<LLView>("Location History")->setToolTip(LLTrans::getString("LocationCtrlComboBtnTooltip")); - getChild<LLView>("Place Information")->setToolTip(LLTrans::getString("LocationCtrlInfoBtnTooltip")); + mButton->setToolTip(LLTrans::getString("LocationCtrlComboBtnTooltip")); + mInfoBtn->setToolTip(LLTrans::getString("LocationCtrlInfoBtnTooltip")); } LLLocationInputCtrl::~LLLocationInputCtrl() diff --git a/indra/newview/lllogininstance.cpp b/indra/newview/lllogininstance.cpp index 24c72c65cede0f674b90b49dcd93a42354d0532e..454fd29fdc5084f1943925bc49eaefab060c4b49 100644 --- a/indra/newview/lllogininstance.cpp +++ b/indra/newview/lllogininstance.cpp @@ -352,20 +352,18 @@ void LLLoginInstance::updateApp(bool mandatory, const std::string& auth_msg) payload["mandatory"] = mandatory; /* - We're constructing one of the following 6 strings here: + We're constructing one of the following 9 strings here: "DownloadWindowsMandatory" "DownloadWindowsReleaseForDownload" "DownloadWindows" "DownloadMacMandatory" "DownloadMacReleaseForDownload" "DownloadMac" + "DownloadLinuxMandatory" + "DownloadLinuxReleaseForDownload" + "DownloadLinux" I've called them out explicitly in this comment so that they can be grepped for. - - Also, we assume that if we're not Windows we're Mac. If we ever intend to support - Linux with autoupdate, this should be an explicit #elif LL_DARWIN, but - we'd rather deliver the wrong message than no message, so until Linux is supported - we'll leave it alone. */ std::string notification_name = "Download"; diff --git a/indra/newview/llnearbychat.cpp b/indra/newview/llnearbychat.cpp index c8d5d782b7436d35d5edc481eb93c88aa7ad3328..5d72827a7acecd152daa8c66418d319c2b9bdfc5 100644 --- a/indra/newview/llnearbychat.cpp +++ b/indra/newview/llnearbychat.cpp @@ -207,7 +207,7 @@ void LLNearbyChat::addMessage(const LLChat& chat,bool archive,const LLSD &args) return; } - if (gSavedPerAccountSettings.getBOOL("LogChat")) + if (gSavedPerAccountSettings.getBOOL("LogNearbyChat")) { LLLogChat::saveHistory("chat", chat.mFromName, chat.mFromID, chat.mText); } diff --git a/indra/newview/llnotificationtiphandler.cpp b/indra/newview/llnotificationtiphandler.cpp index 1f1afe293aa45d0d32c5c78db9f5288795764427..afc00bf7ef3176cb89f04da015e2d9d5c65a31f1 100644 --- a/indra/newview/llnotificationtiphandler.cpp +++ b/indra/newview/llnotificationtiphandler.cpp @@ -71,8 +71,8 @@ class LLOnlineStatusToast : public LLToastPanel p.notification->getResponseTemplate())); } - // set line max count to 2 in case of a very long name - snapToMessageHeight(getChild<LLTextBox>("message"), 2); + // set line max count to 3 in case of a very long name + snapToMessageHeight(getChild<LLTextBox>("message"), 3); } }; diff --git a/indra/newview/llpanelcontents.cpp b/indra/newview/llpanelcontents.cpp index 2a7d097f9429328b0f2bb77f024bfaf763a27d88..f4c0a842e7968eeff8313ead2e4d42e911ac8412 100644 --- a/indra/newview/llpanelcontents.cpp +++ b/indra/newview/llpanelcontents.cpp @@ -40,6 +40,7 @@ #include "llerror.h" #include "llfloaterreg.h" #include "llfontgl.h" +#include "llinventorydefines.h" #include "llmaterialtable.h" #include "llpermissionsflags.h" #include "llrect.h" @@ -180,7 +181,7 @@ void LLPanelContents::onClickNewScript(void *userdata) LLTrans::getString("PanelContentsNewScript"), desc, LLSaleInfo::DEFAULT, - LLViewerInventoryItem::II_FLAGS_NONE, + LLInventoryItemFlags::II_FLAGS_NONE, time_corrected()); object->saveScript(new_item, TRUE, true); diff --git a/indra/newview/llpaneleditwearable.cpp b/indra/newview/llpaneleditwearable.cpp index 805016f08934bda159e45b7411d4dca590b77f33..da74295f9e6371770e3f152d47b2a7af38d95fee 100644 --- a/indra/newview/llpaneleditwearable.cpp +++ b/indra/newview/llpaneleditwearable.cpp @@ -270,6 +270,8 @@ LLEditWearableDictionary::SubpartEntry::SubpartEntry(ESubpart part, LLPanelEditWearable::LLPanelEditWearable() : LLPanel() + , mWearablePtr(NULL) + , mWearableItem(NULL) { } @@ -338,8 +340,7 @@ BOOL LLPanelEditWearable::isDirty() const //virtual void LLPanelEditWearable::draw() { - BOOL is_dirty = isDirty(); - mBtnRevert->setEnabled(is_dirty); + updateVerbs(); LLPanel::draw(); } @@ -401,6 +402,9 @@ void LLPanelEditWearable::showWearable(LLWearable* wearable, BOOL show) return; } + mWearableItem = gInventory.getItem(mWearablePtr->getItemID()); + llassert(mWearableItem); + EWearableType type = wearable->getType(); LLPanel *targetPanel = NULL; std::string title; @@ -489,7 +493,7 @@ void LLPanelEditWearable::initializePanel() updateScrollingPanelUI(); } - + updateVerbs(); } void LLPanelEditWearable::updateScrollingPanelUI() @@ -640,18 +644,25 @@ void LLPanelEditWearable::buildParamList(LLScrollingPanelList *panel_list, value { LLPanel::Params p; p.name("LLScrollingPanelParam"); - p.rect(LLRect(0, LLScrollingPanelParam::PARAM_PANEL_HEIGHT, LLScrollingPanelParam::PARAM_PANEL_WIDTH, 0 )); LLScrollingPanelParam* panel_param = new LLScrollingPanelParam( p, NULL, (*it).second, TRUE, this->getWearable()); height = panel_list->addPanel( panel_param ); } - - S32 width = tab->getRect().getWidth(); - - tab->reshape(width,height + tab->getHeaderHeight()+10,FALSE); } } +void LLPanelEditWearable::updateVerbs() +{ + bool can_copy = false; + if(mWearableItem) + { + can_copy = mWearableItem->getPermissions().allowCopyBy(gAgentID); + } + BOOL is_dirty = isDirty(); + mBtnRevert->setEnabled(is_dirty); + childSetEnabled("save_as_button", is_dirty && can_copy); +} +// EOF diff --git a/indra/newview/llpaneleditwearable.h b/indra/newview/llpaneleditwearable.h index 417865961767534783b3d6b0a73fd7972f364623..8b63685177bd8e2d050b5154fb4b2477b220b259 100644 --- a/indra/newview/llpaneleditwearable.h +++ b/indra/newview/llpaneleditwearable.h @@ -41,6 +41,7 @@ class LLWearable; class LLTextEditor; class LLTextBox; +class LLViewerInventoryItem; class LLViewerVisualParam; class LLVisualParamHint; class LLViewerJointMesh; @@ -73,9 +74,12 @@ class LLPanelEditWearable : public LLPanel LLPanel* getPanel(EWearableType type); void getSortedParams(value_map_t &sorted_params, const std::string &edit_group); void buildParamList(LLScrollingPanelList *panel_list, value_map_t &sorted_params, LLAccordionCtrlTab *tab); + // update bottom bar buttons ("Save", "Revert", etc) + void updateVerbs(); // the pointer to the wearable we're editing. NULL means we're not editing a wearable. LLWearable *mWearablePtr; + LLViewerInventoryItem* mWearableItem; // these are constant no matter what wearable we're editing LLButton *mBtnRevert; diff --git a/indra/newview/llpanelgrouplandmoney.cpp b/indra/newview/llpanelgrouplandmoney.cpp index f276df857317d4258ba469481cd57084d249cabe..9ac3a0704175819642b95ad49d3b730333386c19 100644 --- a/indra/newview/llpanelgrouplandmoney.cpp +++ b/indra/newview/llpanelgrouplandmoney.cpp @@ -1600,7 +1600,7 @@ void LLPanelGroupLandMoney::setGroupID(const LLUUID& id) mImplementationp->mMoneySalesTabEHp->setGroupID(mGroupID); } - mImplementationp->mBeenActivated = true; + mImplementationp->mBeenActivated = false; activate(); } diff --git a/indra/newview/llpanelgroupnotices.cpp b/indra/newview/llpanelgroupnotices.cpp index c2a68288371aac399c4999f377978940e62658d6..e9cde599856e923c870db30c85064bbc96546e76 100644 --- a/indra/newview/llpanelgroupnotices.cpp +++ b/indra/newview/llpanelgroupnotices.cpp @@ -38,6 +38,7 @@ #include "llinventory.h" #include "llviewerinventory.h" +#include "llinventorydefines.h" #include "llinventoryfunctions.h" #include "llinventorymodel.h" #include "llfloaterinventory.h" @@ -330,7 +331,7 @@ void LLPanelGroupNotices::setItem(LLPointer<LLInventoryItem> inv_item) mInventoryItem = inv_item; BOOL item_is_multi = FALSE; - if ( inv_item->getFlags() & LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS ) + if ( inv_item->getFlags() & LLInventoryItemFlags::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS ) { item_is_multi = TRUE; }; diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp index c7793bbc435d1bfe30bac009b178397816008b57..a1cdbdad59a46ac4c32b8ec2a0c200f0f2f7193b 100644 --- a/indra/newview/llpanellandmarks.cpp +++ b/indra/newview/llpanellandmarks.cpp @@ -280,6 +280,17 @@ void LLLandmarksPanel::onShowOnMap() doActionOnCurSelectedLandmark(boost::bind(&LLLandmarksPanel::doShowOnMap, this, _1)); } +//virtual +void LLLandmarksPanel::onShowProfile() +{ + LLFolderViewItem* cur_item = getCurSelectedItem(); + + if(!cur_item) + return; + + cur_item->getListener()->performAction(mCurrentSelectedList->getModel(),"about"); +} + // virtual void LLLandmarksPanel::onTeleport() { @@ -306,6 +317,7 @@ void LLLandmarksPanel::updateVerbs() bool landmark_selected = isLandmarkSelected(); mTeleportBtn->setEnabled(landmark_selected && isActionEnabled("teleport")); mShowOnMapBtn->setEnabled(landmark_selected && isActionEnabled("show_on_map")); + mShowProfile->setEnabled(landmark_selected && isActionEnabled("more_info")); // TODO: mantipov: Uncomment when mShareBtn is supported // Share button should be enabled when neither a folder nor a landmark is selected @@ -435,9 +447,9 @@ LLFolderViewItem* LLLandmarksPanel::selectItemInAccordionTab(LLPlacesInventoryPa if (!inventory_list) return NULL; - LLFolderView* folder_view = inventory_list->getRootFolder(); + LLFolderView* root = inventory_list->getRootFolder(); - LLFolderViewItem* item = folder_view->getItemByID(obj_id); + LLFolderViewItem* item = root->getItemByID(obj_id); if (!item) return NULL; @@ -447,7 +459,7 @@ LLFolderViewItem* LLLandmarksPanel::selectItemInAccordionTab(LLPlacesInventoryPa tab->changeOpenClose(false); } - folder_view->setSelection(item, FALSE, take_keyboard_focus); + root->setSelection(item, FALSE, take_keyboard_focus); LLAccordionCtrl* accordion = getChild<LLAccordionCtrl>("landmarks_accordion"); LLRect screen_rc; @@ -977,13 +989,10 @@ bool LLLandmarksPanel::isActionEnabled(const LLSD& userdata) const void LLLandmarksPanel::onCustomAction(const LLSD& userdata) { - LLFolderViewItem* cur_item = getCurSelectedItem(); - if(!cur_item) - return; std::string command_name = userdata.asString(); if("more_info" == command_name) { - cur_item->getListener()->performAction(mCurrentSelectedList->getRootFolder(),mCurrentSelectedList->getModel(),"about"); + onShowProfile(); } else if ("teleport" == command_name) { diff --git a/indra/newview/llpanellandmarks.h b/indra/newview/llpanellandmarks.h index c9217a4b2f99fbf64c50ede1e832dae9027b9866..da5d683cfc35ffbae6f9615283788c547b97a984 100644 --- a/indra/newview/llpanellandmarks.h +++ b/indra/newview/llpanellandmarks.h @@ -57,6 +57,7 @@ class LLLandmarksPanel : public LLPanelPlacesTab, LLRemoteParcelInfoObserver /*virtual*/ BOOL postBuild(); /*virtual*/ void onSearchEdit(const std::string& string); /*virtual*/ void onShowOnMap(); + /*virtual*/ void onShowProfile(); /*virtual*/ void onTeleport(); /*virtual*/ void updateVerbs(); diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index dbc40959d703e9e1d3d34fbd29d0ededfadaa2b3..8be4c8402c632b3f9e9f8c618aa0a060117751c0 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -1044,7 +1044,7 @@ void LLPanelMainInventory::onCustomAction(const LLSD& userdata) { return; } - current_item->getListener()->performAction(getActivePanel()->getRootFolder(), getActivePanel()->getModel(), "goto"); + current_item->getListener()->performAction(getActivePanel()->getModel(), "goto"); } if (command_name == "find_links") @@ -1089,19 +1089,19 @@ BOOL LLPanelMainInventory::isActionEnabled(const LLSD& userdata) if (command_name == "delete") { BOOL can_delete = FALSE; - LLFolderView *folder = getActivePanel()->getRootFolder(); - if (folder) + LLFolderView* root = getActivePanel()->getRootFolder(); + if (root) { can_delete = TRUE; std::set<LLUUID> selection_set; - folder->getSelectionList(selection_set); + root->getSelectionList(selection_set); if (selection_set.empty()) return FALSE; for (std::set<LLUUID>::iterator iter = selection_set.begin(); iter != selection_set.end(); ++iter) { const LLUUID &item_id = (*iter); - LLFolderViewItem *item = folder->getItemByID(item_id); + LLFolderViewItem *item = root->getItemByID(item_id); const LLFolderViewEventListener *listener = item->getListener(); llassert(listener); if (!listener) return FALSE; diff --git a/indra/newview/llpanelnearbymedia.cpp b/indra/newview/llpanelnearbymedia.cpp index 4f2d6374cadcb305934886a81ba45086ad99a95f..93ebae334fae399ccf42012ce2e99c43df7dec42 100644 --- a/indra/newview/llpanelnearbymedia.cpp +++ b/indra/newview/llpanelnearbymedia.cpp @@ -74,6 +74,7 @@ static const LLUUID PARCEL_AUDIO_LIST_ITEM_UUID = LLUUID("DF4B020D-8A24-4B95-AB5 // LLPanelNearByMedia // + LLPanelNearByMedia::LLPanelNearByMedia() : mMediaList(NULL), mEnableAllCtrl(NULL), @@ -87,6 +88,8 @@ LLPanelNearByMedia::LLPanelNearByMedia() mParcelAudioAutoStart = gSavedSettings.getBOOL(LLViewerMedia::AUTO_PLAY_MEDIA_SETTING) && gSavedSettings.getBOOL("MediaTentativeAutoPlay"); + gSavedSettings.getControl(LLViewerMedia::AUTO_PLAY_MEDIA_SETTING)->getSignal()->connect(boost::bind(&LLPanelNearByMedia::handleMediaAutoPlayChanged, this, _2)); + mCommitCallbackRegistrar.add("MediaListCtrl.EnableAll", boost::bind(&LLPanelNearByMedia::onClickEnableAll, this)); mCommitCallbackRegistrar.add("MediaListCtrl.DisableAll", boost::bind(&LLPanelNearByMedia::onClickDisableAll, this)); mCommitCallbackRegistrar.add("MediaListCtrl.GoMediaPrefs", boost::bind(&LLPanelNearByMedia::onAdvancedButtonClick, this)); @@ -168,12 +171,19 @@ BOOL LLPanelNearByMedia::postBuild() mLessRect = getRect(); mLessRect.mBottom = minimized_controls->getRect().mBottom; - getChild<LLUICtrl>("more_less_btn")->setValue(false); + getChild<LLUICtrl>("more_btn")->setVisible(false); onMoreLess(); return TRUE; } +void LLPanelNearByMedia::handleMediaAutoPlayChanged(const LLSD& newvalue) +{ + // update mParcelAudioAutoStart if AUTO_PLAY_MEDIA_SETTING changes + mParcelAudioAutoStart = gSavedSettings.getBOOL(LLViewerMedia::AUTO_PLAY_MEDIA_SETTING) && + gSavedSettings.getBOOL("MediaTentativeAutoPlay"); +} + /*virtual*/ void LLPanelNearByMedia::onMouseEnter(S32 x, S32 y, MASK mask) { @@ -954,7 +964,7 @@ void LLPanelNearByMedia::onAdvancedButtonClick() void LLPanelNearByMedia::onMoreLess() { - bool is_more = getChild<LLUICtrl>("more_less_btn")->getValue(); + bool is_more = getChild<LLUICtrl>("more_btn")->getVisible(); mNearbyMediaPanel->setVisible(is_more); // enable resizing when expanded @@ -964,6 +974,9 @@ void LLPanelNearByMedia::onMoreLess() new_rect.translate(getRect().mRight - new_rect.mRight, getRect().mTop - new_rect.mTop); setShape(new_rect); + + getChild<LLUICtrl>("more_btn")->setVisible(!is_more); + getChild<LLUICtrl>("less_btn")->setVisible(is_more); } void LLPanelNearByMedia::updateControls() diff --git a/indra/newview/llpanelnearbymedia.h b/indra/newview/llpanelnearbymedia.h index af4659365f29828a9e6ed80ef1a62a83c262f2df..7c07867df3024f5d94d383c0ec27a8d037ed77a8 100644 --- a/indra/newview/llpanelnearbymedia.h +++ b/indra/newview/llpanelnearbymedia.h @@ -63,6 +63,10 @@ class LLPanelNearByMedia : public LLPanel // interaction with our buttons. bool getParcelAudioAutoStart(); + // callback for when the auto play media preference changes + // to update mParcelAudioAutoStart + void handleMediaAutoPlayChanged(const LLSD& newvalue); + LLPanelNearByMedia(); virtual ~LLPanelNearByMedia(); diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp index 95716e0046acd41c00448cdccfb40b0484b61213..47a27c8a85b221ffa52bb3747f18f7b7b1212c79 100644 --- a/indra/newview/llpanelobjectinventory.cpp +++ b/indra/newview/llpanelobjectinventory.cpp @@ -50,6 +50,7 @@ #include "llfloaterbuycurrency.h" #include "llfloaterreg.h" #include "llinventorybridge.h" +#include "llinventorydefines.h" #include "llinventoryfilter.h" #include "llinventoryfunctions.h" #include "llpreviewanim.h" @@ -128,7 +129,7 @@ class LLTaskInvFVBridge : public LLFolderViewEventListener virtual void pasteFromClipboard(); virtual void pasteLinkFromClipboard(); virtual void buildContextMenu(LLMenuGL& menu, U32 flags); - virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action); + virtual void performAction(LLInventoryModel* model, std::string action); virtual BOOL isUpToDate() const { return TRUE; } virtual BOOL hasChildren() const { return FALSE; } virtual LLInventoryType::EType getInventoryType() const { return LLInventoryType::IT_NONE; } @@ -344,7 +345,7 @@ time_t LLTaskInvFVBridge::getCreationDate() const LLUIImagePtr LLTaskInvFVBridge::getIcon() const { BOOL item_is_multi = FALSE; - if ( mFlags & LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS ) + if ( mFlags & LLInventoryItemFlags::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS ) { item_is_multi = TRUE; } @@ -595,7 +596,7 @@ BOOL LLTaskInvFVBridge::dragOrDrop(MASK mask, BOOL drop, } // virtual -void LLTaskInvFVBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) +void LLTaskInvFVBridge::performAction(LLInventoryModel* model, std::string action) { if (action == "task_buy") { @@ -918,7 +919,7 @@ class LLTaskSoundBridge : public LLTaskInvFVBridge virtual LLUIImagePtr getIcon() const; virtual void openItem(); - virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action); + virtual void performAction(LLInventoryModel* model, std::string action); virtual void buildContextMenu(LLMenuGL& menu, U32 flags); static void openSoundPreview(void* data); }; @@ -955,7 +956,7 @@ void LLTaskSoundBridge::openSoundPreview(void* data) } // virtual -void LLTaskSoundBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) +void LLTaskSoundBridge::performAction(LLInventoryModel* model, std::string action) { if (action == "task_play") { @@ -965,7 +966,7 @@ void LLTaskSoundBridge::performAction(LLFolderView* folder, LLInventoryModel* mo send_sound_trigger(item->getAssetUUID(), 1.0); } } - LLTaskInvFVBridge::performAction(folder, model, action); + LLTaskInvFVBridge::performAction(model, action); } void LLTaskSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags) @@ -1209,7 +1210,7 @@ LLTaskObjectBridge::LLTaskObjectBridge( LLUIImagePtr LLTaskObjectBridge::getIcon() const { BOOL item_is_multi = FALSE; - if ( mFlags & LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS ) + if ( mFlags & LLInventoryItemFlags::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS ) { item_is_multi = TRUE; } @@ -1418,7 +1419,7 @@ class LLTaskMeshBridge : public LLTaskInvFVBridge virtual LLUIImagePtr getIcon() const; virtual void openItem(); - virtual void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action); + virtual void performAction(LLInventoryModel* model, std::string action); virtual void buildContextMenu(LLMenuGL& menu, U32 flags); }; @@ -1442,7 +1443,7 @@ void LLTaskMeshBridge::openItem() // virtual -void LLTaskMeshBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) +void LLTaskMeshBridge::performAction(LLInventoryModel* model, std::string action) { if (action == "mesh action") { @@ -1452,7 +1453,7 @@ void LLTaskMeshBridge::performAction(LLFolderView* folder, LLInventoryModel* mod // do action } } - LLTaskInvFVBridge::performAction(folder, model, action); + LLTaskInvFVBridge::performAction(model, action); } void LLTaskMeshBridge::buildContextMenu(LLMenuGL& menu, U32 flags) @@ -1732,7 +1733,7 @@ void LLPanelObjectInventory::reset() } void LLPanelObjectInventory::inventoryChanged(LLViewerObject* object, - InventoryObjectList* inventory, + LLInventoryObject::object_list_t* inventory, S32 serial_num, void* data) { @@ -1749,7 +1750,7 @@ void LLPanelObjectInventory::inventoryChanged(LLViewerObject* object, // refresh any properties floaters that are hanging around. if(inventory) { - for (InventoryObjectList::const_iterator iter = inventory->begin(); + for (LLInventoryObject::object_list_t::const_iterator iter = inventory->begin(); iter != inventory->end(); ) { LLInventoryObject* item = *iter++; @@ -1782,7 +1783,7 @@ void LLPanelObjectInventory::updateInventory() if (objectp) { LLInventoryObject* inventory_root = objectp->getInventoryRoot(); - InventoryObjectList contents; + LLInventoryObject::object_list_t contents; objectp->getInventoryContents(contents); if (inventory_root) { @@ -1836,7 +1837,7 @@ void LLPanelObjectInventory::updateInventory() // leads to an N^2 based on the category count. This could be greatly // speeded with an efficient multimap implementation, but we don't // have that in our current arsenal. -void LLPanelObjectInventory::createFolderViews(LLInventoryObject* inventory_root, InventoryObjectList& contents) +void LLPanelObjectInventory::createFolderViews(LLInventoryObject* inventory_root, LLInventoryObject::object_list_t& contents) { if (!inventory_root) { @@ -1865,7 +1866,7 @@ void LLPanelObjectInventory::createFolderViews(LLInventoryObject* inventory_root typedef std::pair<LLInventoryObject*, LLFolderViewFolder*> obj_folder_pair; -void LLPanelObjectInventory::createViewsForCategory(InventoryObjectList* inventory, +void LLPanelObjectInventory::createViewsForCategory(LLInventoryObject::object_list_t* inventory, LLInventoryObject* parent, LLFolderViewFolder* folder) { @@ -1874,8 +1875,8 @@ void LLPanelObjectInventory::createViewsForCategory(InventoryObjectList* invento LLTaskInvFVBridge* bridge; LLFolderViewItem* view; - InventoryObjectList::iterator it = inventory->begin(); - InventoryObjectList::iterator end = inventory->end(); + LLInventoryObject::object_list_t::iterator it = inventory->begin(); + LLInventoryObject::object_list_t::iterator end = inventory->end(); for( ; it != end; ++it) { LLInventoryObject* obj = *it; diff --git a/indra/newview/llpanelobjectinventory.h b/indra/newview/llpanelobjectinventory.h index bc339ece3593424d907d21d456ad29ce0896bea6..d015929841ac2baf9fa047457e50930e1b9f7fcd 100644 --- a/indra/newview/llpanelobjectinventory.h +++ b/indra/newview/llpanelobjectinventory.h @@ -82,12 +82,12 @@ class LLPanelObjectInventory : public LLPanel, public LLVOInventoryListener protected: void reset(); /*virtual*/ void inventoryChanged(LLViewerObject* object, - InventoryObjectList* inventory, + LLInventoryObject::object_list_t* inventory, S32 serial_num, void* user_data); void updateInventory(); - void createFolderViews(LLInventoryObject* inventory_root, InventoryObjectList& contents); - void createViewsForCategory(InventoryObjectList* inventory, + void createFolderViews(LLInventoryObject* inventory_root, LLInventoryObject::object_list_t& contents); + void createViewsForCategory(LLInventoryObject::object_list_t* inventory, LLInventoryObject* parent, LLFolderViewFolder* folder); void clearContents(); diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp index ba22adc01c128fdbc1f0b61534028ee6cfe9c781..cf04ab378fadacb97fc85a7b8d1979e6214311ab 100644 --- a/indra/newview/llpaneloutfitedit.cpp +++ b/indra/newview/llpaneloutfitedit.cpp @@ -113,9 +113,9 @@ class LLLookFetchObserver : public LLInventoryFetchDescendentsObserver LLPanelOutfitEdit::LLPanelOutfitEdit() -: LLPanel(), mLookID(), mFetchLook(NULL), mSearchFilter(NULL), +: LLPanel(), mCurrentOutfitID(), mFetchLook(NULL), mSearchFilter(NULL), mLookContents(NULL), mInventoryItemsPanel(NULL), mAddToLookBtn(NULL), -mRemoveFromLookBtn(NULL), mLookObserver(NULL), mNumItemsInLook(0) +mRemoveFromLookBtn(NULL), mLookObserver(NULL) { mSavedFolderState = new LLSaveFolderState(); mSavedFolderState->setApply(FALSE); @@ -157,7 +157,7 @@ BOOL LLPanelOutfitEdit::postBuild() { // gInventory.isInventoryUsable() no longer needs to be tested per Richard's fix for race conditions between inventory and panels - mLookName = getChild<LLTextBox>("curr_look_name"); + mCurrentOutfitName = getChild<LLTextBox>("curr_outfit_name"); childSetCommitCallback("add_btn", boost::bind(&LLPanelOutfitEdit::showAddWearablesPanel, this), NULL); @@ -206,7 +206,7 @@ BOOL LLPanelOutfitEdit::postBuild() mLookContents = getChild<LLScrollListCtrl>("look_items_list"); mLookContents->sortByColumn("look_item_sort", TRUE); mLookContents->setCommitCallback(boost::bind(&LLPanelOutfitEdit::onLookItemSelectionChange, this)); - + /* LLButton::Params remove_params; remove_params.name("remove_from_look"); @@ -220,12 +220,12 @@ BOOL LLPanelOutfitEdit::postBuild() //childSetAction("remove_from_look_btn", boost::bind(&LLPanelOutfitEdit::onRemoveFromLookClicked, this), this); mRemoveFromLookBtn->setCommitCallback(boost::bind(&LLPanelOutfitEdit::onRemoveFromLookClicked, this)); //getChild<LLPanel>("look_info_group_bar")->addChild(mRemoveFromLookBtn); remove_item_btn - + mEditWearableBtn = getChild<LLButton>("edit_wearable_btn"); mEditWearableBtn->setEnabled(FALSE); mEditWearableBtn->setVisible(FALSE); mEditWearableBtn->setCommitCallback(boost::bind(&LLPanelOutfitEdit::onEditWearableClicked, this)); - + childSetAction("remove_item_btn", boost::bind(&LLPanelOutfitEdit::onRemoveFromLookClicked, this), this); return TRUE; @@ -302,7 +302,7 @@ void LLPanelOutfitEdit::onAddToLookClicked(void) { LLFolderViewItem* curr_item = mInventoryItemsPanel->getRootFolder()->getCurSelectedItem(); LLFolderViewEventListener* listenerp = curr_item->getListener(); - link_inventory_item(gAgent.getID(), listenerp->getUUID(), mLookID, listenerp->getName(), + link_inventory_item(gAgent.getID(), listenerp->getUUID(), mCurrentOutfitID, listenerp->getName(), LLAssetType::AT_LINK, LLPointer<LLInventoryCallback>(NULL)); updateLookInfo(); } @@ -367,19 +367,32 @@ void LLPanelOutfitEdit::onUpClicked(void) void LLPanelOutfitEdit::onEditWearableClicked(void) { LLUUID id_to_edit = mLookContents->getSelectionInterface()->getCurrentID(); - LLViewerInventoryItem * item_to_edit = gInventory.getItem(id_to_edit); if (item_to_edit) { // returns null if not a wearable (attachment, etc). LLWearable* wearable_to_edit = gAgentWearables.getWearableFromAssetID(item_to_edit->getAssetUUID()); - if (!wearable_to_edit || !wearable_to_edit->getPermissions().allowModifyBy(gAgent.getID()) ) - { - LLSidepanelAppearance::editWearable(wearable_to_edit, getParent()); - if (mEditWearableBtn->getVisible()) + if(wearable_to_edit) + { + bool can_modify = false; + bool is_complete = item_to_edit->isComplete(); + // if item_to_edit is a link, its properties are not appropriate, + // lets get original item with actual properties + LLViewerInventoryItem* original_item = gInventory.getItem(wearable_to_edit->getItemID()); + if(original_item) { - mEditWearableBtn->setVisible(FALSE); + can_modify = original_item->getPermissions().allowModifyBy(gAgentID); + is_complete = original_item->isComplete(); + } + + if (can_modify && is_complete) + { + LLSidepanelAppearance::editWearable(wearable_to_edit, getParent()); + if (mEditWearableBtn->getVisible()) + { + mEditWearableBtn->setVisible(FALSE); + } } } } @@ -413,7 +426,11 @@ void LLPanelOutfitEdit::onLookItemSelectionChange(void) { S32 left_offset = -4; S32 top_offset = -10; - LLRect rect = mLookContents->getLastSelectedItem()->getRect(); + LLScrollListItem* item = mLookContents->getLastSelectedItem(); + if (!item) + return; + + LLRect rect = item->getRect(); LLRect btn_rect( left_offset + rect.mRight - 50, top_offset + rect.mTop, @@ -441,7 +458,7 @@ void LLPanelOutfitEdit::lookFetched(void) // collectDescendentsIf takes non-const reference: LLFindCOFValidItems is_cof_valid; - gInventory.collectDescendentsIf(mLookID, + gInventory.collectDescendentsIf(mCurrentOutfitID, cat_array, item_array, LLInventoryModel::EXCLUDE_TRASH, @@ -464,12 +481,6 @@ void LLPanelOutfitEdit::lookFetched(void) mLookContents->addElement(row); } - - if (mLookContents->getItemCount() != mNumItemsInLook) - { - mNumItemsInLook = mLookContents->getItemCount(); - LLAppearanceMgr::instance().updateCOF(mLookID); - } } void LLPanelOutfitEdit::updateLookInfo() @@ -479,8 +490,8 @@ void LLPanelOutfitEdit::updateLookInfo() mLookContents->clearRows(); uuid_vec_t folders; - folders.push_back(mLookID); - mFetchLook->fetchDescendents(folders); + folders.push_back(mCurrentOutfitID); + mFetchLook->fetch(folders); if (mFetchLook->isEverythingComplete()) { mFetchLook->done(); @@ -492,28 +503,26 @@ void LLPanelOutfitEdit::updateLookInfo() } } -void LLPanelOutfitEdit::displayLookInfo(const LLInventoryCategory* pLook) +void LLPanelOutfitEdit::displayCurrentOutfit() { - if (!pLook) - { - return; - } - if (!getVisible()) { setVisible(TRUE); } - if (mLookID != pLook->getUUID()) + mCurrentOutfitID = LLAppearanceMgr::getInstance()->getCOF(); + + std::string current_outfit_name; + if (LLAppearanceMgr::getInstance()->getBaseOutfitName(current_outfit_name)) { - mLookID = pLook->getUUID(); - mLookName->setText(pLook->getName()); - updateLookInfo(); + mCurrentOutfitName->setText(current_outfit_name); + } + else + { + mCurrentOutfitName->setText(getString("No Outfit")); } -} -void LLPanelOutfitEdit::reset() -{ - mLookID.setNull(); + updateLookInfo(); } + diff --git a/indra/newview/llpaneloutfitedit.h b/indra/newview/llpaneloutfitedit.h index 5c00f84e0e008ec6273af92c2b108d3c079d7bac..ba382d73200abd3a080235d168dc67657314ccc0 100644 --- a/indra/newview/llpaneloutfitedit.h +++ b/indra/newview/llpaneloutfitedit.h @@ -81,10 +81,6 @@ class LLPanelOutfitEdit : public LLPanel /*virtual*/ BOOL postBuild(); /*virtual*/ void changed(U32 mask); - void reset(); - // Ignore all old information, useful if you are - // recycling an existing dialog and need to clear it. - /*virtual*/ void setParcelID(const LLUUID& parcel_id); // Sends a request for data about the given parcel, which will // only update the location if there is none already available. @@ -100,7 +96,7 @@ class LLPanelOutfitEdit : public LLPanel void onEditWearableClicked(void); void onUpClicked(void); - void displayLookInfo(const LLInventoryCategory* pLook); + void displayCurrentOutfit(); void lookFetched(void); @@ -108,8 +104,10 @@ class LLPanelOutfitEdit : public LLPanel private: - LLUUID mLookID; - LLTextBox* mLookName; + //*TODO got rid of mCurrentOutfitID + LLUUID mCurrentOutfitID; + + LLTextBox* mCurrentOutfitName; LLScrollListCtrl* mLookContents; LLInventoryPanel* mInventoryItemsPanel; LLFilterEditor* mSearchFilter; @@ -119,7 +117,6 @@ class LLPanelOutfitEdit : public LLPanel LLButton* mRemoveFromLookBtn; LLButton* mUpBtn; LLButton* mEditWearableBtn; - S32 mNumItemsInLook; LLLookFetchObserver* mFetchLook; LLInventoryLookObserver* mLookObserver; diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp index dd320f8328a64283ac81cc2f032c85b3f7a714fc..7d8b1dea0e2d1c1cb91b78e6ce0bb9d31627cafe 100644 --- a/indra/newview/llpaneloutfitsinventory.cpp +++ b/indra/newview/llpaneloutfitsinventory.cpp @@ -48,6 +48,7 @@ #include "lllandmark.h" #include "lllineeditor.h" #include "llmodaldialog.h" +#include "llnotificationsutil.h" #include "llsidepanelappearance.h" #include "llsidetray.h" #include "lltabcontainer.h" @@ -68,75 +69,13 @@ static const std::string COF_TAB_NAME = "cof_tab"; static LLRegisterPanelClassWrapper<LLPanelOutfitsInventory> t_inventory("panel_outfits_inventory"); bool LLPanelOutfitsInventory::sShowDebugEditor = false; -class LLOutfitSaveAsDialog : public LLModalDialog -{ -private: - std::string mItemName; - std::string mTempItemName; - - boost::signals2::signal<void (const std::string&)> mSaveAsSignal; - -public: - LLOutfitSaveAsDialog( const LLSD& key ) - : LLModalDialog( key ), - mTempItemName(key.asString()) - { - } - - BOOL postBuild() - { - getChild<LLUICtrl>("Save")->setCommitCallback(boost::bind(&LLOutfitSaveAsDialog::onSave, this )); - getChild<LLUICtrl>("Cancel")->setCommitCallback(boost::bind(&LLOutfitSaveAsDialog::onCancel, this )); - - childSetTextArg("name ed", "[DESC]", mTempItemName); - return TRUE; - } - - void setSaveAsCommit( const boost::signals2::signal<void (const std::string&)>::slot_type& cb ) - { - mSaveAsSignal.connect(cb); - } - - virtual void onOpen(const LLSD& key) - { - LLLineEditor* edit = getChild<LLLineEditor>("name ed"); - if (edit) - { - edit->setFocus(TRUE); - edit->selectAll(); - } - } - - void onSave() - { - mItemName = childGetValue("name ed").asString(); - LLStringUtil::trim(mItemName); - if( !mItemName.empty() ) - { - mSaveAsSignal(mItemName); - closeFloater(); // destroys this object - } - } - void onCancel() - { - closeFloater(); // destroys this object - } -}; - LLPanelOutfitsInventory::LLPanelOutfitsInventory() : mActivePanel(NULL), mParent(NULL) { mSavedFolderState = new LLSaveFolderState(); mSavedFolderState->setApply(FALSE); - - static bool registered_dialog = false; - if (!registered_dialog) - { - LLFloaterReg::add("outfit_save_as", "floater_outfit_save_as.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLOutfitSaveAsDialog>); - registered_dialog = true; - } } LLPanelOutfitsInventory::~LLPanelOutfitsInventory() @@ -192,7 +131,7 @@ void LLPanelOutfitsInventory::updateVerbs() if (mListCommands) { - mListCommands->childSetVisible("look_edit_btn",sShowDebugEditor); + mListCommands->childSetVisible("edit_current_outfit_btn",sShowDebugEditor); updateListCommands(); } } @@ -242,7 +181,7 @@ void LLPanelOutfitsInventory::onWearButtonClick() LLFolderViewEventListener* listenerp = getCorrectListenerForAction(); if (listenerp) { - listenerp->performAction(NULL, NULL,"replaceoutfit"); + listenerp->performAction(NULL, "replaceoutfit"); } } @@ -251,7 +190,7 @@ void LLPanelOutfitsInventory::onAdd() LLFolderViewEventListener* listenerp = getCorrectListenerForAction(); if (listenerp) { - listenerp->performAction(NULL, NULL,"addtooutfit"); + listenerp->performAction(NULL, "addtooutfit"); } } @@ -260,7 +199,7 @@ void LLPanelOutfitsInventory::onRemove() LLFolderViewEventListener* listenerp = getCorrectListenerForAction(); if (listenerp) { - listenerp->performAction(NULL, NULL,"removefromoutfit"); + listenerp->performAction(NULL, "removefromoutfit"); } } @@ -268,6 +207,31 @@ void LLPanelOutfitsInventory::onEdit() { } +bool LLPanelOutfitsInventory::onSaveCommit(const LLSD& notification, const LLSD& response) +{ + S32 option = LLNotificationsUtil::getSelectedOption(notification, response); + if (0 == option) + { + std::string outfit_name = response["message"].asString(); + LLStringUtil::trim(outfit_name); + if( !outfit_name.empty() ) + { + LLUUID outfit_folder = gAgentWearables.makeNewOutfitLinks(outfit_name); + LLSD key; + LLSideTray::getInstance()->showPanel("panel_outfits_inventory", key); + + if (mAppearanceTabs) + { + mAppearanceTabs->selectTabByName(OUTFITS_TAB_NAME); + } + } + } + + return false; +} + + + void LLPanelOutfitsInventory::onSave() { std::string outfit_name; @@ -277,23 +241,22 @@ void LLPanelOutfitsInventory::onSave() outfit_name = LLViewerFolderType::lookupNewCategoryName(LLFolderType::FT_OUTFIT); } + LLSD args; + args["DESC"] = outfit_name; + + LLSD payload; + //payload["ids"].append(*it); + + LLNotificationsUtil::add("SaveOutfitAs", args, payload, boost::bind(&LLPanelOutfitsInventory::onSaveCommit, this, _1, _2)); + + //) + +/* LLOutfitSaveAsDialog* save_as_dialog = LLFloaterReg::showTypedInstance<LLOutfitSaveAsDialog>("outfit_save_as", LLSD(outfit_name), TRUE); if (save_as_dialog) { save_as_dialog->setSaveAsCommit(boost::bind(&LLPanelOutfitsInventory::onSaveCommit, this, _1 )); - } -} - -void LLPanelOutfitsInventory::onSaveCommit(const std::string& outfit_name) -{ - LLUUID outfit_folder = gAgentWearables.makeNewOutfitLinks(outfit_name); - LLSD key; - LLSideTray::getInstance()->showPanel("panel_outfits_inventory", key); - - if (mAppearanceTabs) - { - mAppearanceTabs->selectTabByName(OUTFITS_TAB_NAME); - } + }*/ } void LLPanelOutfitsInventory::onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action) @@ -306,19 +269,12 @@ void LLPanelOutfitsInventory::onSelectionChange(const std::deque<LLFolderViewIte } } -void LLPanelOutfitsInventory::onSelectorButtonClicked() +void LLPanelOutfitsInventory::showEditOutfitPanel() { - LLFolderViewItem* cur_item = getRootFolder()->getCurSelectedItem(); - - LLFolderViewEventListener* listenerp = cur_item->getListener(); - if (getIsCorrectType(listenerp)) - { - LLSD key; - key["type"] = "look"; - key["id"] = listenerp->getUUID(); - - LLSideTray::getInstance()->showPanel("sidepanel_appearance", key); - } + LLSD key; + key["type"] = "edit_outfit"; + + LLSideTray::getInstance()->showPanel("sidepanel_appearance", key); } LLFolderViewEventListener *LLPanelOutfitsInventory::getCorrectListenerForAction() @@ -365,7 +321,7 @@ void LLPanelOutfitsInventory::initListCommandsHandlers() mListCommands->childSetAction("make_outfit_btn", boost::bind(&LLPanelOutfitsInventory::onAddButtonClick, this)); mListCommands->childSetAction("wear_btn", boost::bind(&LLPanelOutfitsInventory::onWearButtonClick, this)); - mListCommands->childSetAction("look_edit_btn", boost::bind(&LLPanelOutfitsInventory::onSelectorButtonClicked, this)); + mListCommands->childSetAction("edit_current_outfit_btn", boost::bind(&LLPanelOutfitsInventory::showEditOutfitPanel, this)); LLDragAndDropButton* trash_btn = mListCommands->getChild<LLDragAndDropButton>("trash_btn"); trash_btn->setDragAndDropHandler(boost::bind(&LLPanelOutfitsInventory::handleDragAndDropToTrash, this @@ -480,18 +436,18 @@ BOOL LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata) if (command_name == "delete" || command_name == "remove") { BOOL can_delete = FALSE; - LLFolderView *folder = getActivePanel()->getRootFolder(); - if (folder) + LLFolderView* root = getActivePanel()->getRootFolder(); + if (root) { std::set<LLUUID> selection_set; - folder->getSelectionList(selection_set); + root->getSelectionList(selection_set); can_delete = (selection_set.size() > 0); for (std::set<LLUUID>::iterator iter = selection_set.begin(); iter != selection_set.end(); ++iter) { const LLUUID &item_id = (*iter); - LLFolderViewItem *item = folder->getItemByID(item_id); + LLFolderViewItem *item = root->getItemByID(item_id); can_delete &= item->getListener()->isItemRemovable(); } return can_delete; @@ -501,11 +457,11 @@ BOOL LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata) if (command_name == "remove_link") { BOOL can_delete = FALSE; - LLFolderView *folder = getActivePanel()->getRootFolder(); - if (folder) + LLFolderView* root = getActivePanel()->getRootFolder(); + if (root) { std::set<LLUUID> selection_set; - folder->getSelectionList(selection_set); + root->getSelectionList(selection_set); can_delete = (selection_set.size() > 0); for (std::set<LLUUID>::iterator iter = selection_set.begin(); iter != selection_set.end(); @@ -550,11 +506,11 @@ BOOL LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata) bool LLPanelOutfitsInventory::hasItemsSelected() { bool has_items_selected = false; - LLFolderView *folder = getActivePanel()->getRootFolder(); - if (folder) + LLFolderView* root = getActivePanel()->getRootFolder(); + if (root) { std::set<LLUUID> selection_set; - folder->getSelectionList(selection_set); + root->getSelectionList(selection_set); has_items_selected = (selection_set.size() > 0); } return has_items_selected; diff --git a/indra/newview/llpaneloutfitsinventory.h b/indra/newview/llpaneloutfitsinventory.h index ab25ef0a49254cc83971123d68d89dc01a0fedf7..41afc2f37260d4f356bd0de61e47f5b6ba3c14c9 100644 --- a/indra/newview/llpaneloutfitsinventory.h +++ b/indra/newview/llpaneloutfitsinventory.h @@ -61,10 +61,10 @@ class LLPanelOutfitsInventory : public LLPanel void onEdit(); void onSave(); - void onSaveCommit(const std::string& item_name); + bool onSaveCommit(const LLSD& notification, const LLSD& response); void onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action); - void onSelectorButtonClicked(); + void showEditOutfitPanel(); // If a compatible listener type is selected, then return a pointer to that. // Otherwise, return NULL. diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 288edeb03109427b2c5181f337f10a4c32977240..5802d53cd181d9e5ee04432646733b7857149ad0 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -652,8 +652,8 @@ void LLPanelPeople::updateFriendList() av_tracker.copyBuddyList(all_buddies); // save them to the online and all friends vectors - LLAvatarList::uuid_vector_t& online_friendsp = mOnlineFriendList->getIDs(); - LLAvatarList::uuid_vector_t& all_friendsp = mAllFriendList->getIDs(); + uuid_vec_t& online_friendsp = mOnlineFriendList->getIDs(); + uuid_vec_t& all_friendsp = mAllFriendList->getIDs(); all_friendsp.clear(); online_friendsp.clear(); @@ -746,7 +746,7 @@ void LLPanelPeople::buttonSetAction(const std::string& btn_name, const commit_si bool LLPanelPeople::isFriendOnline(const LLUUID& id) { - LLAvatarList::uuid_vector_t ids = mOnlineFriendList->getIDs(); + uuid_vec_t ids = mOnlineFriendList->getIDs(); return std::find(ids.begin(), ids.end(), id) != ids.end(); } diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp index 54455afa4f3a45aa78fa472500dbc88467540bc4..17784c31e3020c06adf704d9a3212904a865dc1a 100644 --- a/indra/newview/llpanelplaces.cpp +++ b/indra/newview/llpanelplaces.cpp @@ -252,6 +252,9 @@ BOOL LLPanelPlaces::postBuild() mOverflowBtn = getChild<LLButton>("overflow_btn"); mOverflowBtn->setClickedCallback(boost::bind(&LLPanelPlaces::onOverflowButtonClicked, this)); + mPlaceInfoBtn = getChild<LLButton>("profile_btn"); + mPlaceInfoBtn->setClickedCallback(boost::bind(&LLPanelPlaces::onProfileButtonClicked, this)); + LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar; registrar.add("Places.OverflowMenu.Action", boost::bind(&LLPanelPlaces::onOverflowMenuItemClicked, this, _2)); LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable_registrar; @@ -745,6 +748,14 @@ void LLPanelPlaces::onOverflowButtonClicked() LLMenuGL::showPopup(this, menu, rect.mRight, rect.mTop); } +void LLPanelPlaces::onProfileButtonClicked() +{ + if (!mActivePanel) + return; + + mActivePanel->onShowProfile(); +} + bool LLPanelPlaces::onOverflowMenuItemEnable(const LLSD& param) { std::string value = param.asString(); @@ -1060,8 +1071,11 @@ void LLPanelPlaces::updateVerbs() mSaveBtn->setVisible(isLandmarkEditModeOn); mCancelBtn->setVisible(isLandmarkEditModeOn); mCloseBtn->setVisible(is_create_landmark_visible && !isLandmarkEditModeOn); + mPlaceInfoBtn->setVisible(mPlaceInfoType != LANDMARK_INFO_TYPE && mPlaceInfoType != TELEPORT_HISTORY_INFO_TYPE + && !is_create_landmark_visible && !isLandmarkEditModeOn); mShowOnMapBtn->setEnabled(!is_create_landmark_visible && !isLandmarkEditModeOn && have_3d_pos); + mPlaceInfoBtn->setEnabled(!is_create_landmark_visible && !isLandmarkEditModeOn && have_3d_pos); if (is_place_info_visible) { diff --git a/indra/newview/llpanelplaces.h b/indra/newview/llpanelplaces.h index 97cf43d222dd3b9b0dbce11edb83a4e655fd788e..7a77fc9300ffc36ab72e656cc6eaae7562d15c2f 100644 --- a/indra/newview/llpanelplaces.h +++ b/indra/newview/llpanelplaces.h @@ -98,6 +98,7 @@ class LLPanelPlaces : public LLPanel bool onOverflowMenuItemEnable(const LLSD& param); void onCreateLandmarkButtonClicked(const LLUUID& folder_id); void onBackButtonClicked(); + void onProfileButtonClicked(); void toggleMediaPanel(); void togglePickPanel(BOOL visible); @@ -128,6 +129,7 @@ class LLPanelPlaces : public LLPanel LLButton* mCancelBtn; LLButton* mCloseBtn; LLButton* mOverflowBtn; + LLButton* mPlaceInfoBtn; LLPlacesInventoryObserver* mInventoryObserver; LLPlacesParcelObserver* mParcelObserver; diff --git a/indra/newview/llpanelplacestab.cpp b/indra/newview/llpanelplacestab.cpp index 9806b8c64d55380873494b1f5863fc1e16c1bf4d..42cf3b03a311cc5d729107397b4bb0934ab943a3 100644 --- a/indra/newview/llpanelplacestab.cpp +++ b/indra/newview/llpanelplacestab.cpp @@ -56,6 +56,7 @@ void LLPanelPlacesTab::setPanelPlacesButtons(LLPanelPlaces* panel) { mTeleportBtn = panel->getChild<LLButton>("teleport_btn"); mShowOnMapBtn = panel->getChild<LLButton>("map_btn"); + mShowProfile = panel->getChild<LLButton>("profile_btn"); } void LLPanelPlacesTab::onRegionResponse(const LLVector3d& landmark_global_pos, diff --git a/indra/newview/llpanelplacestab.h b/indra/newview/llpanelplacestab.h index ce77a422596e2c4fbc0ec47fa365088926829273..f4e93a765854d834de35bf44581c0e01ddd61de4 100644 --- a/indra/newview/llpanelplacestab.h +++ b/indra/newview/llpanelplacestab.h @@ -45,6 +45,7 @@ class LLPanelPlacesTab : public LLPanel virtual void onSearchEdit(const std::string& string) = 0; virtual void updateVerbs() = 0; // Updates buttons at the bottom of Places panel virtual void onShowOnMap() = 0; + virtual void onShowProfile() = 0; virtual void onTeleport() = 0; bool isTabVisible(); // Check if parent TabContainer is visible. @@ -62,6 +63,7 @@ class LLPanelPlacesTab : public LLPanel protected: LLButton* mTeleportBtn; LLButton* mShowOnMapBtn; + LLButton* mShowProfile; // Search string for filtering landmarks and teleport history locations static std::string sFilterSubString; diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp index 0a34531eeecb8814286113ea27b9d8d4e20ed52f..c0b2244038268bf0708763bde91ab990ec32bb90 100644 --- a/indra/newview/llpanelteleporthistory.cpp +++ b/indra/newview/llpanelteleporthistory.cpp @@ -496,6 +496,20 @@ void LLTeleportHistoryPanel::onShowOnMap() } } +//virtual +void LLTeleportHistoryPanel::onShowProfile() +{ + if (!mLastSelectedFlatlList) + return; + + LLTeleportHistoryFlatItem* itemp = dynamic_cast<LLTeleportHistoryFlatItem *> (mLastSelectedFlatlList->getSelectedItem()); + + if(!itemp) + return; + + LLTeleportHistoryFlatItem::showPlaceInfoPanel(itemp->getIndex()); +} + // virtual void LLTeleportHistoryPanel::onTeleport() { @@ -544,6 +558,7 @@ void LLTeleportHistoryPanel::updateVerbs() { mTeleportBtn->setEnabled(false); mShowOnMapBtn->setEnabled(false); + mShowProfile->setEnabled(false); return; } @@ -551,6 +566,7 @@ void LLTeleportHistoryPanel::updateVerbs() mTeleportBtn->setEnabled(NULL != itemp); mShowOnMapBtn->setEnabled(NULL != itemp); + mShowProfile->setEnabled(NULL != itemp); } void LLTeleportHistoryPanel::getNextTab(const LLDate& item_date, S32& tab_idx, LLDate& tab_date) diff --git a/indra/newview/llpanelteleporthistory.h b/indra/newview/llpanelteleporthistory.h index 5e2ccc0c934c5c3c64197845015a6d8547a7a3d0..a456ca506f008d40ab82a0e1cfd2f72d0b2475b3 100644 --- a/indra/newview/llpanelteleporthistory.h +++ b/indra/newview/llpanelteleporthistory.h @@ -73,6 +73,7 @@ class LLTeleportHistoryPanel : public LLPanelPlacesTab /*virtual*/ void onSearchEdit(const std::string& string); /*virtual*/ void onShowOnMap(); + /*virtual*/ void onShowProfile(); /*virtual*/ void onTeleport(); ///*virtual*/ void onCopySLURL(); /*virtual*/ void updateVerbs(); diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp index 0a20ff6226a6077911ce2f2d8939c6ec4b932a80..eb245453db62068d6cfcf9dded03b6e0121b57ea 100644 --- a/indra/newview/llparticipantlist.cpp +++ b/indra/newview/llparticipantlist.cpp @@ -248,8 +248,8 @@ bool LLParticipantList::onAddItemEvent(LLPointer<LLOldEvents::LLEvent> event, co bool LLParticipantList::onRemoveItemEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata) { - LLAvatarList::uuid_vector_t& group_members = mAvatarList->getIDs(); - LLAvatarList::uuid_vector_t::iterator pos = std::find(group_members.begin(), group_members.end(), event->getValue().asUUID()); + uuid_vec_t& group_members = mAvatarList->getIDs(); + uuid_vec_t::iterator pos = std::find(group_members.begin(), group_members.end(), event->getValue().asUUID()); if(pos != group_members.end()) { group_members.erase(pos); @@ -260,7 +260,7 @@ bool LLParticipantList::onRemoveItemEvent(LLPointer<LLOldEvents::LLEvent> event, bool LLParticipantList::onClearListEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata) { - LLAvatarList::uuid_vector_t& group_members = mAvatarList->getIDs(); + uuid_vec_t& group_members = mAvatarList->getIDs(); group_members.clear(); mAvatarList->setDirty(); return true; diff --git a/indra/newview/llplacesinventorybridge.cpp b/indra/newview/llplacesinventorybridge.cpp index 4fe69f295c172c8a3f8b1a523974a736acd8f8f7..f59a55cb8b74325a3d1696fa84a32d5753ba78eb 100644 --- a/indra/newview/llplacesinventorybridge.cpp +++ b/indra/newview/llplacesinventorybridge.cpp @@ -122,7 +122,7 @@ void LLPlacesFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags) } //virtual -void LLPlacesFolderBridge::performAction(LLFolderView* folder, LLInventoryModel* model, std::string action) +void LLPlacesFolderBridge::performAction(LLInventoryModel* model, std::string action) { if ("expand" == action) { @@ -136,7 +136,7 @@ void LLPlacesFolderBridge::performAction(LLFolderView* folder, LLInventoryModel* } else { - LLFolderBridge::performAction(folder, model, action); + LLFolderBridge::performAction(model, action); } } @@ -158,6 +158,7 @@ LLInvFVBridge* LLPlacesInventoryBridgeBuilder::createBridge( LLAssetType::EType actual_asset_type, LLInventoryType::EType inv_type, LLInventoryPanel* inventory, + LLFolderView* root, const LLUUID& uuid, U32 flags/* = 0x00*/) const { @@ -167,9 +168,9 @@ LLInvFVBridge* LLPlacesInventoryBridgeBuilder::createBridge( case LLAssetType::AT_LANDMARK: if(!(inv_type == LLInventoryType::IT_LANDMARK)) { - llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << safe_inv_type_lookup(inv_type) << " on uuid " << uuid << llendl; + llwarns << LLAssetType::lookup(asset_type) << " asset has inventory type " << LLInventoryType::lookupHumanReadable(inv_type) << " on uuid " << uuid << llendl; } - new_listener = new LLPlacesLandmarkBridge(inv_type, inventory, uuid, flags); + new_listener = new LLPlacesLandmarkBridge(inv_type, inventory, root, uuid, flags); break; case LLAssetType::AT_CATEGORY: if (actual_asset_type == LLAssetType::AT_LINK_FOLDER) @@ -180,11 +181,12 @@ LLInvFVBridge* LLPlacesInventoryBridgeBuilder::createBridge( actual_asset_type, inv_type, inventory, + root, uuid, flags); break; } - new_listener = new LLPlacesFolderBridge(inv_type, inventory, uuid); + new_listener = new LLPlacesFolderBridge(inv_type, inventory, root, uuid); break; default: new_listener = LLInventoryFVBridgeBuilder::createBridge( @@ -192,6 +194,7 @@ LLInvFVBridge* LLPlacesInventoryBridgeBuilder::createBridge( actual_asset_type, inv_type, inventory, + root, uuid, flags); } diff --git a/indra/newview/llplacesinventorybridge.h b/indra/newview/llplacesinventorybridge.h index 66a8e8e54d824550162dc8686d11a6283dbcc232..7e5170cc33180b96c7fd97a7092883c5e3f2fa36 100644 --- a/indra/newview/llplacesinventorybridge.h +++ b/indra/newview/llplacesinventorybridge.h @@ -48,8 +48,15 @@ class LLPlacesLandmarkBridge : public LLLandmarkBridge /*virtual*/ void buildContextMenu(LLMenuGL& menu, U32 flags); protected: - LLPlacesLandmarkBridge(LLInventoryType::EType type, LLInventoryPanel* inventory, const LLUUID& uuid, U32 flags = 0x00) - : LLLandmarkBridge(inventory, uuid, flags) {mInvType = type;} + LLPlacesLandmarkBridge(LLInventoryType::EType type, + LLInventoryPanel* inventory, + LLFolderView* root, + const LLUUID& uuid, + U32 flags = 0x00) : + LLLandmarkBridge(inventory, root, uuid, flags) + { + mInvType = type; + } }; /** @@ -61,12 +68,17 @@ class LLPlacesFolderBridge : public LLFolderBridge public: /*virtual*/ void buildContextMenu(LLMenuGL& menu, U32 flags); - /*virtual*/ void performAction(LLFolderView* folder, LLInventoryModel* model, std::string action); + /*virtual*/ void performAction(LLInventoryModel* model, std::string action); protected: - LLPlacesFolderBridge(LLInventoryType::EType type, LLInventoryPanel* inventory, const LLUUID& uuid) - : LLFolderBridge(inventory, uuid) {mInvType = type;} - + LLPlacesFolderBridge(LLInventoryType::EType type, + LLInventoryPanel* inventory, + LLFolderView* root, + const LLUUID& uuid) : + LLFolderBridge(inventory, root, uuid) + { + mInvType = type; + } LLFolderViewFolder* getFolder(); }; @@ -79,13 +91,13 @@ class LLPlacesFolderBridge : public LLFolderBridge class LLPlacesInventoryBridgeBuilder : public LLInventoryFVBridgeBuilder { public: - /*virtual*/ LLInvFVBridge* createBridge( - LLAssetType::EType asset_type, - LLAssetType::EType actual_asset_type, - LLInventoryType::EType inv_type, - LLInventoryPanel* inventory, - const LLUUID& uuid, - U32 flags = 0x00) const; + /*virtual*/ LLInvFVBridge* createBridge(LLAssetType::EType asset_type, + LLAssetType::EType actual_asset_type, + LLInventoryType::EType inv_type, + LLInventoryPanel* inventory, + LLFolderView* root, + const LLUUID& uuid, + U32 flags = 0x00) const; }; #endif // LL_LLPLACESINVENTORYBRIDGE_H diff --git a/indra/newview/llplacesinventorypanel.cpp b/indra/newview/llplacesinventorypanel.cpp index ed0fb54051f12d2266d2218a95a3dba094523732..0930a7be7f6aaa387472511ad256bad89c1ce995 100644 --- a/indra/newview/llplacesinventorypanel.cpp +++ b/indra/newview/llplacesinventorypanel.cpp @@ -68,9 +68,9 @@ BOOL LLPlacesInventoryPanel::postBuild() // clear Contents(); { - mFolders->destroyView(); - mFolders->getParent()->removeChild(mFolders); - mFolders->die(); + mFolderRoot->destroyView(); + mFolderRoot->getParent()->removeChild(mFolderRoot); + mFolderRoot->die(); if( mScroller ) { @@ -78,7 +78,7 @@ BOOL LLPlacesInventoryPanel::postBuild() mScroller->die(); mScroller = NULL; } - mFolders = NULL; + mFolderRoot = NULL; } @@ -95,13 +95,13 @@ BOOL LLPlacesInventoryPanel::postBuild() p.title = getLabel(); p.rect = folder_rect; p.parent_panel = this; - mFolders = (LLFolderView*)LLUICtrlFactory::create<LLPlacesFolderView>(p); - mFolders->setAllowMultiSelect(mAllowMultiSelect); + mFolderRoot = (LLFolderView*)LLUICtrlFactory::create<LLPlacesFolderView>(p); + mFolderRoot->setAllowMultiSelect(mAllowMultiSelect); } mCommitCallbackRegistrar.popScope(); - mFolders->setCallbackRegistrar(&mCommitCallbackRegistrar); + mFolderRoot->setCallbackRegistrar(&mCommitCallbackRegistrar); // scroller { @@ -116,14 +116,14 @@ BOOL LLPlacesInventoryPanel::postBuild() mScroller = LLUICtrlFactory::create<LLScrollContainer>(p); } addChild(mScroller); - mScroller->addChild(mFolders); + mScroller->addChild(mFolderRoot); - mFolders->setScrollContainer(mScroller); - mFolders->addChild(mFolders->mStatusTextBox); + mFolderRoot->setScrollContainer(mScroller); + mFolderRoot->addChild(mFolderRoot->mStatusTextBox); // cut subitems - mFolders->setUseEllipses(true); + mFolderRoot->setUseEllipses(true); return TRUE; } @@ -132,17 +132,17 @@ BOOL LLPlacesInventoryPanel::postBuild() void LLPlacesInventoryPanel::saveFolderState() { mSavedFolderState->setApply(FALSE); - getRootFolder()->applyFunctorRecursively(*mSavedFolderState); + mFolderRoot->applyFunctorRecursively(*mSavedFolderState); } // re-open folders which state was saved void LLPlacesInventoryPanel::restoreFolderState() { mSavedFolderState->setApply(TRUE); - getRootFolder()->applyFunctorRecursively(*mSavedFolderState); + mFolderRoot->applyFunctorRecursively(*mSavedFolderState); LLOpenFoldersWithSelection opener; - getRootFolder()->applyFunctorRecursively(opener); - getRootFolder()->scrollToShowSelection(); + mFolderRoot->applyFunctorRecursively(opener); + mFolderRoot->scrollToShowSelection(); } S32 LLPlacesInventoryPanel::notify(const LLSD& info) @@ -152,11 +152,11 @@ S32 LLPlacesInventoryPanel::notify(const LLSD& info) std::string str_action = info["action"]; if(str_action == "select_first") { - return getRootFolder()->notify(info); + return mFolderRoot->notify(info); } else if(str_action == "select_last") { - return getRootFolder()->notify(info); + return mFolderRoot->notify(info); } } return 0; diff --git a/indra/newview/llpopupview.cpp b/indra/newview/llpopupview.cpp index b010f4d72f927522eb268135d700c1ef88c6f5de..4523bf2ba4da32661d270ea9e5205d570851c304 100644 --- a/indra/newview/llpopupview.cpp +++ b/indra/newview/llpopupview.cpp @@ -104,14 +104,18 @@ BOOL LLPopupView::handleMouseEvent(boost::function<BOOL(LLView*, S32, S32)> func S32 x, S32 y, bool close_popups) { - for (popup_list_t::iterator popup_it = mPopups.begin(); - popup_it != mPopups.end();) + BOOL handled = FALSE; + + // make a copy of list of popups, in case list is modified during mouse event handling + popup_list_t popups(mPopups); + for (popup_list_t::iterator popup_it = popups.begin(), popup_end = popups.end(); + popup_it != popup_end; + ++popup_it) { LLView* popup = popup_it->get(); if (!popup || !predicate(popup)) { - ++popup_it; continue; } @@ -121,23 +125,19 @@ BOOL LLPopupView::handleMouseEvent(boost::function<BOOL(LLView*, S32, S32)> func { if (func(popup, popup_x, popup_y)) { - return TRUE; + handled = TRUE; + break; } } if (close_popups) { - popup_list_t::iterator cur_popup_it = popup_it++; - mPopups.erase(cur_popup_it); + mPopups.remove(*popup_it); popup->onTopLost(); } - else - { - ++popup_it; - } } - return FALSE; + return handled; } diff --git a/indra/newview/llpreview.cpp b/indra/newview/llpreview.cpp index d5ec3a36c3c8e8b73702e52a84f57cabe6d31073..d0db77dcbe43100b810fa3f094bf7520e20fcee4 100644 --- a/indra/newview/llpreview.cpp +++ b/indra/newview/llpreview.cpp @@ -36,7 +36,7 @@ #include "llpreview.h" #include "lllineeditor.h" -#include "llinventory.h" +#include "llinventorydefines.h" #include "llinventorymodel.h" #include "llresmgr.h" #include "lltextbox.h" diff --git a/indra/newview/llpreviewgesture.cpp b/indra/newview/llpreviewgesture.cpp index 11cde477445d635ceb923e3f9acf14b7b2766fcf..fce90e4c44cf54b181e599fc27840b4b64fb799f 100644 --- a/indra/newview/llpreviewgesture.cpp +++ b/indra/newview/llpreviewgesture.cpp @@ -42,7 +42,9 @@ #include "llstring.h" #include "lldir.h" #include "llfloaterreg.h" +#include "llinventorydefines.h" #include "llinventoryfunctions.h" +#include "llinventorymodel.h" #include "llinventorymodelbackgroundfetch.h" #include "llmultigesture.h" #include "llnotificationsutil.h" @@ -58,7 +60,6 @@ #include "lldelayedgestureerror.h" #include "llfloatergesture.h" // for some label constants #include "llgesturemgr.h" -#include "llinventorymodel.h" #include "llkeyboard.h" #include "lllineeditor.h" #include "llradiogroup.h" diff --git a/indra/newview/llpreviewnotecard.cpp b/indra/newview/llpreviewnotecard.cpp index bfd9a840f25fa0427bd89055eb13f019ef7ed1a2..75702dc8e52c1bf454e41729739316b55d8d41d5 100644 --- a/indra/newview/llpreviewnotecard.cpp +++ b/indra/newview/llpreviewnotecard.cpp @@ -42,6 +42,7 @@ #include "llviewerwindow.h" #include "llbutton.h" #include "llfloaterreg.h" +#include "llinventorydefines.h" #include "llinventorymodel.h" #include "lllineeditor.h" #include "llnotificationsutil.h" diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index 4167408fc35c24b89634db78ec584bb8c9905801..6b0e524f8cbf05223a224be4971a88d2eef7cc0f 100644 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -41,6 +41,7 @@ #include "llcombobox.h" #include "lldir.h" #include "llfloaterreg.h" +#include "llinventorydefines.h" #include "llinventorymodel.h" #include "llkeyboard.h" #include "lllineeditor.h" @@ -1578,7 +1579,7 @@ void LLLiveLSLEditor::loadAsset() DEFAULT_SCRIPT_NAME, DEFAULT_SCRIPT_DESC, LLSaleInfo::DEFAULT, - LLInventoryItem::II_FLAGS_NONE, + LLInventoryItemFlags::II_FLAGS_NONE, time_corrected()); mAssetStatus = PREVIEW_ASSET_LOADED; } diff --git a/indra/newview/llscreenchannel.cpp b/indra/newview/llscreenchannel.cpp index dffb5e5e123ad97eb721319b3fd266042670eaef..af440a36891800ec427227a44c140c0937cb7cff 100644 --- a/indra/newview/llscreenchannel.cpp +++ b/indra/newview/llscreenchannel.cpp @@ -47,7 +47,6 @@ #include "llsyswellwindow.h" #include "llimfloater.h" #include "llscriptfloater.h" -#include "llfontgl.h" #include <algorithm> @@ -480,7 +479,9 @@ void LLScreenChannel::showToastsBottom() } toast_rect = (*it).toast->getRect(); - toast_rect.setOriginAndSize(getRect().mLeft, bottom + toast_margin, toast_rect.getWidth() ,toast_rect.getHeight()); + toast_rect.setOriginAndSize(getRect().mRight - toast_rect.getWidth(), + bottom + toast_margin, toast_rect.getWidth(), + toast_rect.getHeight()); (*it).toast->setRect(toast_rect); if(floater && floater->overlapsScreenChannel()) @@ -580,7 +581,6 @@ void LLScreenChannel::showToastsTop() void LLScreenChannel::createStartUpToast(S32 notif_num, F32 timer) { LLRect toast_rect; - LLRect tbox_rect; LLToast::Params p; p.lifetime_secs = timer; p.enable_hide_btn = false; @@ -591,34 +591,26 @@ void LLScreenChannel::createStartUpToast(S32 notif_num, F32 timer) mStartUpToastPanel->setOnFadeCallback(boost::bind(&LLScreenChannel::onStartUpToastHide, this)); + LLPanel* wrapper_panel = mStartUpToastPanel->getChild<LLPanel>("wrapper_panel"); LLTextBox* text_box = mStartUpToastPanel->getChild<LLTextBox>("toast_text"); std::string text = LLTrans::getString("StartUpNotifications"); - tbox_rect = text_box->getRect(); - S32 tbox_width = tbox_rect.getWidth(); - S32 tbox_vpad = text_box->getVPad(); - S32 text_width = text_box->getDefaultFont()->getWidth(text); - S32 text_height = text_box->getTextPixelHeight(); - - // EXT - 3703 (Startup toast message doesn't fit toast width) - // Calculating TextBox HEIGHT needed to include the whole string according to the given WIDTH of the TextBox. - S32 new_tbox_height = (text_width/tbox_width + 1) * text_height; - // Calculating TOP position of TextBox - S32 new_tbox_top = new_tbox_height + tbox_vpad + gSavedSettings.getS32("ToastGap"); - // Calculating toast HEIGHT according to the new TextBox size - S32 toast_height = new_tbox_height + tbox_vpad * 2; - - tbox_rect.setLeftTopAndSize(tbox_rect.mLeft, new_tbox_top, tbox_rect.getWidth(), new_tbox_height); - text_box->setRect(tbox_rect); - toast_rect = mStartUpToastPanel->getRect(); mStartUpToastPanel->reshape(getRect().getWidth(), toast_rect.getHeight(), true); - toast_rect.setLeftTopAndSize(0, toast_height + gSavedSettings.getS32("ToastGap"), getRect().getWidth(), toast_height); - mStartUpToastPanel->setRect(toast_rect); text_box->setValue(text); text_box->setVisible(TRUE); + + S32 old_height = text_box->getRect().getHeight(); + text_box->reshapeToFitText(); + text_box->setOrigin(text_box->getRect().mLeft, (wrapper_panel->getRect().getHeight() - text_box->getRect().getHeight())/2); + S32 new_height = text_box->getRect().getHeight(); + S32 height_delta = new_height - old_height; + + toast_rect.setLeftTopAndSize(0, toast_rect.getHeight() + height_delta +gSavedSettings.getS32("ToastGap"), getRect().getWidth(), toast_rect.getHeight()); + mStartUpToastPanel->setRect(toast_rect); + addChild(mStartUpToastPanel); mStartUpToastPanel->setVisible(TRUE); diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp index b9514340108a98be23c4d99ff5a1a39955a94c88..a084c93786336b27aa03f235172a5579f6b8259c 100644 --- a/indra/newview/llsidepanelappearance.cpp +++ b/indra/newview/llsidepanelappearance.cpp @@ -182,11 +182,9 @@ void LLSidepanelAppearance::onOpen(const LLSD& key) mLookInfoType = key["type"].asString(); - if (mLookInfoType == "look") + if (mLookInfoType == "edit_outfit") { - LLInventoryCategory *pLook = gInventory.getCategory(key["id"].asUUID()); - if (pLook) - mOutfitEdit->displayLookInfo(pLook); + mOutfitEdit->displayCurrentOutfit(); } } @@ -219,13 +217,13 @@ void LLSidepanelAppearance::onOpenOutfitButtonClicked() LLInventoryPanel *inventory_panel = tab_outfits->findChild<LLInventoryPanel>("outfitslist_tab"); if (inventory_panel) { - LLFolderView *folder = inventory_panel->getRootFolder(); - LLFolderViewItem *outfit_folder = folder->getItemByID(outfit_link->getLinkedUUID()); + LLFolderView* root = inventory_panel->getRootFolder(); + LLFolderViewItem *outfit_folder = root->getItemByID(outfit_link->getLinkedUUID()); if (outfit_folder) { outfit_folder->setOpen(!outfit_folder->isOpen()); - folder->setSelectionFromRoot(outfit_folder,TRUE); - folder->scrollToShowSelection(); + root->setSelectionFromRoot(outfit_folder,TRUE); + root->scrollToShowSelection(); } } } @@ -297,6 +295,8 @@ void LLSidepanelAppearance::toggleWearableEditPanel(BOOL visible, LLWearable *we return; } + mCurrOutfitPanel->setVisible(!visible); + mEditWearable->setVisible(visible); mEditWearable->setWearable(wearable); mFilterEditor->setVisible(!visible); @@ -354,7 +354,7 @@ void LLSidepanelAppearance::fetchInventory() { mNewOutfitBtn->setEnabled(false); - LLInventoryFetchObserver::item_ref_t ids; + uuid_vec_t ids; LLUUID item_id; for(S32 type = (S32)WT_SHAPE; type < (S32)WT_COUNT; ++type) { @@ -389,7 +389,7 @@ void LLSidepanelAppearance::fetchInventory() } LLCurrentlyWornFetchObserver *fetch_worn = new LLCurrentlyWornFetchObserver(this); - fetch_worn->fetchItems(ids); + fetch_worn->fetch(ids); // If no items to be fetched, done will never be triggered. // TODO: Change LLInventoryFetchObserver::fetchItems to trigger done() on this condition. if (fetch_worn->isEverythingComplete()) diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp index 73880563d7d286e5e8e8595da6bca18965bac0b9..18e56a9c017b7ae5071d5427a3de155cc35010b2 100644 --- a/indra/newview/llsidepanelinventory.cpp +++ b/indra/newview/llsidepanelinventory.cpp @@ -161,7 +161,7 @@ void LLSidepanelInventory::performActionOnSelection(const std::string &action) { return; } - current_item->getListener()->performAction(panel_main_inventory->getActivePanel()->getRootFolder(), panel_main_inventory->getActivePanel()->getModel(), action); + current_item->getListener()->performAction(panel_main_inventory->getActivePanel()->getModel(), action); } void LLSidepanelInventory::onWearButtonClicked() diff --git a/indra/newview/llsidepaneliteminfo.cpp b/indra/newview/llsidepaneliteminfo.cpp index 0275736f6dc9ca1150e53abf1493e271279b302f..9b073943b434fc83cb1a4a1ac2c1c5e887daf843 100644 --- a/indra/newview/llsidepaneliteminfo.cpp +++ b/indra/newview/llsidepaneliteminfo.cpp @@ -40,6 +40,7 @@ #include "llbutton.h" #include "llfloaterreg.h" #include "llgroupactions.h" +#include "llinventorydefines.h" #include "llinventorymodel.h" #include "llinventoryobserver.h" #include "lllineeditor.h" @@ -439,9 +440,9 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item) if (item->getType() == LLAssetType::AT_OBJECT) { U32 flags = item->getFlags(); - slam_perm = flags & LLInventoryItem::II_FLAGS_OBJECT_SLAM_PERM; - overwrite_everyone = flags & LLInventoryItem::II_FLAGS_OBJECT_PERM_OVERWRITE_EVERYONE; - overwrite_group = flags & LLInventoryItem::II_FLAGS_OBJECT_PERM_OVERWRITE_GROUP; + slam_perm = flags & LLInventoryItemFlags::II_FLAGS_OBJECT_SLAM_PERM; + overwrite_everyone = flags & LLInventoryItemFlags::II_FLAGS_OBJECT_PERM_OVERWRITE_EVERYONE; + overwrite_group = flags & LLInventoryItemFlags::II_FLAGS_OBJECT_PERM_OVERWRITE_GROUP; } std::string perm_string; @@ -752,7 +753,7 @@ void LLSidepanelItemInfo::onCommitPermissions() if((perm.getMaskNextOwner()!=item->getPermissions().getMaskNextOwner()) && (item->getType() == LLAssetType::AT_OBJECT)) { - flags |= LLInventoryItem::II_FLAGS_OBJECT_SLAM_PERM; + flags |= LLInventoryItemFlags::II_FLAGS_OBJECT_SLAM_PERM; } // If everyone permissions have changed (and this is an object) // then set the overwrite everyone permissions flag so they @@ -760,7 +761,7 @@ void LLSidepanelItemInfo::onCommitPermissions() if ((perm.getMaskEveryone()!=item->getPermissions().getMaskEveryone()) && (item->getType() == LLAssetType::AT_OBJECT)) { - flags |= LLInventoryItem::II_FLAGS_OBJECT_PERM_OVERWRITE_EVERYONE; + flags |= LLInventoryItemFlags::II_FLAGS_OBJECT_PERM_OVERWRITE_EVERYONE; } // If group permissions have changed (and this is an object) // then set the overwrite group permissions flag so they @@ -768,7 +769,7 @@ void LLSidepanelItemInfo::onCommitPermissions() if ((perm.getMaskGroup()!=item->getPermissions().getMaskGroup()) && (item->getType() == LLAssetType::AT_OBJECT)) { - flags |= LLInventoryItem::II_FLAGS_OBJECT_PERM_OVERWRITE_GROUP; + flags |= LLInventoryItemFlags::II_FLAGS_OBJECT_PERM_OVERWRITE_GROUP; } new_item->setFlags(flags); if(mObjectID.isNull()) @@ -880,7 +881,7 @@ void LLSidepanelItemInfo::updateSaleInfo() if (item->getType() == LLAssetType::AT_OBJECT) { U32 flags = new_item->getFlags(); - flags |= LLInventoryItem::II_FLAGS_OBJECT_SLAM_SALE; + flags |= LLInventoryItemFlags::II_FLAGS_OBJECT_SLAM_SALE; new_item->setFlags(flags); } diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index 3742f70df5223fdc7e5b9279194c8a52f2a785a7..77c38798d129f86a2f0dc1e4d7118fcdb0d61997 100644 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -1924,11 +1924,8 @@ class LLOctreeCullVisExtents: public LLOctreeCullShadow return; } - if (mRes == 2) - { - //fully in, don't traverse further (won't effect extents - } - else if (mRes && group->isState(LLSpatialGroup::SKIP_FRUSTUM_CHECK)) + if ((mRes && group->isState(LLSpatialGroup::SKIP_FRUSTUM_CHECK)) || + mRes == 2) { //don't need to do frustum check LLSpatialGroup::OctreeTraveler::traverse(n); } diff --git a/indra/newview/llspatialpartition.h b/indra/newview/llspatialpartition.h index d74216de2d19b7521c3c4c2a048dd53591967144..b5e59673749773a0bdb3c8a5f644d7fbf6334e3e 100644 --- a/indra/newview/llspatialpartition.h +++ b/indra/newview/llspatialpartition.h @@ -615,6 +615,13 @@ class LLCloudPartition : public LLParticlePartition class LLVolumeGeometryManager: public LLGeometryManager { public: + typedef enum + { + NONE = 0, + BATCH_SORT, + DISTANCE_SORT + } eSortType; + virtual ~LLVolumeGeometryManager() { } virtual void rebuildGeom(LLSpatialGroup* group); virtual void rebuildMesh(LLSpatialGroup* group); diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index b5a73a3143fab6d8d1c380fcf2a329c8fab131a8..c7eb9320e42ccca11425fbabcf4ba4c1be412090 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -889,13 +889,12 @@ bool idle_startup() } //Default the path if one isn't set. - if (gSavedPerAccountSettings.getString("InstantMessageLogFolder").empty()) + // *NOTE: unable to check variable differ from "InstantMessageLogPath" because it was + // provided in pre 2.0 viewer. See EXT-6661 + if (gSavedPerAccountSettings.getString("InstantMessageLogPath").empty()) { gDirUtilp->setChatLogsDir(gDirUtilp->getOSUserAppDir()); - std::string chat_log_dir = gDirUtilp->getChatLogsDir(); - std::string chat_log_top_folder=gDirUtilp->getBaseFileName(chat_log_dir); - gSavedPerAccountSettings.setString("InstantMessageLogPath",chat_log_dir); - gSavedPerAccountSettings.setString("InstantMessageLogFolder",chat_log_top_folder); + gSavedPerAccountSettings.setString("InstantMessageLogPath", gDirUtilp->getChatLogsDir()); } else { @@ -1771,7 +1770,7 @@ bool idle_startup() } } // no need to add gesture to inventory observer, it's already made in constructor - LLGestureMgr::instance().fetchItems(item_ids); + LLGestureMgr::instance().fetch(item_ids); } } gDisplaySwapBuffers = TRUE; diff --git a/indra/newview/lltexlayer.cpp b/indra/newview/lltexlayer.cpp index 3f4dab4feac46f93a98025f7d2c261f95cb01484..492fb2ad526b5bcfa3ba2264bfae58020dacf701 100644 --- a/indra/newview/lltexlayer.cpp +++ b/indra/newview/lltexlayer.cpp @@ -98,6 +98,12 @@ LLTexLayerSetBuffer::~LLTexLayerSetBuffer() } } +//virtual +S8 LLTexLayerSetBuffer::getType() const +{ + return LLViewerDynamicTexture::LL_TEX_LAYER_SET_BUFFER ; +} + //virtual void LLTexLayerSetBuffer::restoreGLTexture() { diff --git a/indra/newview/lltexlayer.h b/indra/newview/lltexlayer.h index 5be58f64a9d194898485fafea4f90bf12704f3ec..ae280dd0633d6f4348c1f58ada7f82c19a4733c8 100644 --- a/indra/newview/lltexlayer.h +++ b/indra/newview/lltexlayer.h @@ -325,6 +325,7 @@ class LLTexLayerSetBuffer : public LLViewerDynamicTexture LLTexLayerSetBuffer(LLTexLayerSet* const owner, S32 width, S32 height); virtual ~LLTexLayerSetBuffer(); + /*virtual*/ S8 getType() const ; virtual void preRender(BOOL clear_depth); virtual void postRender(BOOL success); virtual BOOL render(); diff --git a/indra/newview/lltexturecache.cpp b/indra/newview/lltexturecache.cpp index 08bc8220d9f26649728a965d32f41112664c762d..df79725474babf648849f57145dd493f7976ed3b 100644 --- a/indra/newview/lltexturecache.cpp +++ b/indra/newview/lltexturecache.cpp @@ -742,7 +742,7 @@ LLTextureCache::LLTextureCache(bool threaded) mHeaderMutex(NULL), mListMutex(NULL), mHeaderAPRFile(NULL), - mReadOnly(FALSE), + mReadOnly(TRUE), //do not allow to change the texture cache until setReadOnly() is called. mTexturesSizeTotal(0), mDoPurge(FALSE) { @@ -929,13 +929,16 @@ U32 LLTextureCache::sCacheMaxEntries = MAX_REASONABLE_FILE_SIZE / TEXTURE_CACHE_ S64 LLTextureCache::sCacheMaxTexturesSize = 0; // no limit const char* entries_filename = "texture.entries"; const char* cache_filename = "texture.cache"; -const char* textures_dirname = "textures"; +const char* old_textures_dirname = "textures"; +//change the location of the texture cache to prevent from being deleted by old version viewers. +const char* textures_dirname = "texturecache"; void LLTextureCache::setDirNames(ELLPath location) { std::string delem = gDirUtilp->getDirDelimiter(); - mHeaderEntriesFileName = gDirUtilp->getExpandedFilename(location, entries_filename); - mHeaderDataFileName = gDirUtilp->getExpandedFilename(location, cache_filename); + + mHeaderEntriesFileName = gDirUtilp->getExpandedFilename(location, textures_dirname, entries_filename); + mHeaderDataFileName = gDirUtilp->getExpandedFilename(location, textures_dirname, cache_filename); mTexturesDirName = gDirUtilp->getExpandedFilename(location, textures_dirname); } @@ -947,16 +950,38 @@ void LLTextureCache::purgeCache(ELLPath location) { setDirNames(location); llassert_always(mHeaderAPRFile == NULL); - LLAPRFile::remove(mHeaderEntriesFileName, getLocalAPRFilePool()); - LLAPRFile::remove(mHeaderDataFileName, getLocalAPRFilePool()); + + //remove the legacy cache if exists + std::string texture_dir = mTexturesDirName ; + mTexturesDirName = gDirUtilp->getExpandedFilename(location, old_textures_dirname); + if(LLFile::isdir(mTexturesDirName)) + { + std::string file_name = gDirUtilp->getExpandedFilename(location, entries_filename); + LLAPRFile::remove(file_name, getLocalAPRFilePool()); + + file_name = gDirUtilp->getExpandedFilename(location, cache_filename); + LLAPRFile::remove(file_name, getLocalAPRFilePool()); + + purgeAllTextures(true); + } + mTexturesDirName = texture_dir ; } + + //remove the current texture cache. purgeAllTextures(true); } -S64 LLTextureCache::initCache(ELLPath location, S64 max_size, BOOL read_only) +//is called in the main thread before initCache(...) is called. +void LLTextureCache::setReadOnly(BOOL read_only) { - mReadOnly = read_only; - + mReadOnly = read_only ; +} + +//called in the main thread. +S64 LLTextureCache::initCache(ELLPath location, S64 max_size, BOOL disable_texture_cache) +{ + llassert_always(getPending() == 0) ; //should not start accessing the texture cache before initialized. + S64 header_size = (max_size * 2) / 10; S64 max_entries = header_size / TEXTURE_CACHE_ENTRY_SIZE; sCacheMaxEntries = (S32)(llmin((S64)sCacheMaxEntries, max_entries)); @@ -968,6 +993,15 @@ S64 LLTextureCache::initCache(ELLPath location, S64 max_size, BOOL read_only) sCacheMaxTexturesSize = max_size; max_size -= sCacheMaxTexturesSize; + if(disable_texture_cache) //the texture cache is disabled + { + llinfos << "The texture cache is disabled!" << llendl ; + setReadOnly(TRUE) ; + purgeAllTextures(true); + + return max_size ; + } + LL_INFOS("TextureCache") << "Headers: " << sCacheMaxEntries << " Textures size: " << sCacheMaxTexturesSize/(1024*1024) << " MB" << LL_ENDL; @@ -976,6 +1010,7 @@ S64 LLTextureCache::initCache(ELLPath location, S64 max_size, BOOL read_only) if (!mReadOnly) { LLFile::mkdir(mTexturesDirName); + const char* subdirs = "0123456789abcdef"; for (S32 i=0; i<16; i++) { @@ -986,6 +1021,8 @@ S64 LLTextureCache::initCache(ELLPath location, S64 max_size, BOOL read_only) readHeaderCache(); purgeTextures(true); // calc mTexturesSize and make some room in the texture cache if we need it + llassert_always(getPending() == 0) ; //should not start accessing the texture cache before initialized. + return max_size; // unused cache space } @@ -1108,7 +1145,16 @@ S32 LLTextureCache::openAndReadEntry(const LLUUID& id, Entry& entry, bool create { readEntryFromHeaderImmediately(idx, entry) ; } - llassert_always(entry.mImageSize > entry.mBodySize); + if(entry.mImageSize <= entry.mBodySize)//it happens on 64-bit systems, do not know why + { + llwarns << "corrupted entry: " << id << " entry image size: " << entry.mImageSize << " entry body size: " << entry.mBodySize << llendl ; + + //erase this entry and the cached texture from the cache. + std::string tex_filename = getTextureFileName(id); + removeEntry(idx, entry, tex_filename) ; + mUpdatedEntryMap.erase(idx) ; + idx = -1 ; + } } return idx; } @@ -1453,9 +1499,9 @@ void LLTextureCache::purgeAllTextures(bool purge_directories) } if (purge_directories) { - gDirUtilp->deleteFilesInDir(mTexturesDirName,mask); + gDirUtilp->deleteFilesInDir(mTexturesDirName, mask); LLFile::rmdir(mTexturesDirName); - } + } } mHeaderIDMap.clear(); mTexturesSizeMap.clear(); diff --git a/indra/newview/lltexturecache.h b/indra/newview/lltexturecache.h index ca8815ee7e35aaa48e9036b33de9eb110877ac45..5dc06ff401342ef0e2c0f650eb5803f4d1638aa4 100644 --- a/indra/newview/lltexturecache.h +++ b/indra/newview/lltexturecache.h @@ -110,7 +110,8 @@ class LLTextureCache : public LLWorkerThread /*virtual*/ S32 update(U32 max_time_ms); void purgeCache(ELLPath location); - S64 initCache(ELLPath location, S64 maxsize, BOOL read_only); + void setReadOnly(BOOL read_only) ; + S64 initCache(ELLPath location, S64 maxsize, BOOL disable_texture_cache); handle_t readFromCache(const std::string& local_filename, const LLUUID& id, U32 priority, S32 offset, S32 size, ReadResponder* responder); diff --git a/indra/newview/lltoast.cpp b/indra/newview/lltoast.cpp index 60a89c02e4c71c97f5b7e3e8c84cfa0d8148c294..60657d3fa7ee1eed2716da2882db8841594dcc52 100644 --- a/indra/newview/lltoast.cpp +++ b/indra/newview/lltoast.cpp @@ -41,6 +41,16 @@ using namespace LLNotificationsUI; +/*virtual*/ +BOOL LLToastLifeTimer::tick() +{ + if (mEventTimer.hasExpired()) + { + mToast->expire(); + } + return FALSE; +} + //-------------------------------------------------------------------------- LLToast::Params::Params() : can_fade("can_fade", true), @@ -57,7 +67,6 @@ LLToast::Params::Params() LLToast::LLToast(const LLToast::Params& p) : LLModalDialog(LLSD(), p.is_modal), mPanel(p.panel), - mToastLifetime(p.lifetime_secs), mToastFadingTime(p.fading_time_secs), mNotificationID(p.notif_id), mSessionID(p.session_id), @@ -71,6 +80,8 @@ LLToast::LLToast(const LLToast::Params& p) mIsTip(p.is_tip), mWrapperPanel(NULL) { + mTimer.reset(new LLToastLifeTimer(this, p.lifetime_secs)); + LLUICtrlFactory::getInstance()->buildFloater(this, "panel_toast.xml", NULL); setCanDrag(FALSE); @@ -105,7 +116,7 @@ BOOL LLToast::postBuild() { if(!mCanFade) { - mTimer.stop(); + mTimer->stop(); } if (mIsTip) @@ -144,39 +155,11 @@ LLToast::~LLToast() mOnToastDestroyedSignal(this); } -//-------------------------------------------------------------------------- -void LLToast::setAndStartTimer(F32 period) -{ - if(mCanFade) - { - mToastLifetime = period; - mTimer.start(); - } -} - -//-------------------------------------------------------------------------- -bool LLToast::lifetimeHasExpired() -{ - if (mTimer.getStarted()) - { - F32 elapsed_time = mTimer.getElapsedTimeF32(); - if ((mToastLifetime - elapsed_time) <= mToastFadingTime) - { - setBackgroundOpaque(FALSE); - } - if (elapsed_time > mToastLifetime) - { - return true; - } - } - return false; -} - //-------------------------------------------------------------------------- void LLToast::hide() { setVisible(FALSE); - mTimer.stop(); + mTimer->stop(); mIsHidden = true; mOnFadeSignal(this); } @@ -222,12 +205,13 @@ void LLToast::setCanFade(bool can_fade) { mCanFade = can_fade; if(!mCanFade) - mTimer.stop(); + mTimer->stop(); } //-------------------------------------------------------------------------- -void LLToast::tick() +void LLToast::expire() { + // if toast has fade property - hide it if(mCanFade) { hide(); @@ -263,11 +247,6 @@ void LLToast::insertPanel(LLPanel* panel) //-------------------------------------------------------------------------- void LLToast::draw() { - if(lifetimeHasExpired()) - { - tick(); - } - LLFloater::draw(); if(!isBackgroundVisible()) @@ -300,9 +279,9 @@ void LLToast::setVisible(BOOL show) if(show) { setBackgroundOpaque(TRUE); - if(!mTimer.getStarted() && mCanFade) + if(!mTimer->getStarted() && mCanFade) { - mTimer.start(); + mTimer->start(); } LLModalDialog::setFrontmost(FALSE); } diff --git a/indra/newview/lltoast.h b/indra/newview/lltoast.h index 64855020a98143cdd18874e2c29652fd42003526..20198a9398461a69ae41e2a68dedcb60cbb018f4 100644 --- a/indra/newview/lltoast.h +++ b/indra/newview/lltoast.h @@ -36,7 +36,7 @@ #include "llpanel.h" #include "llmodaldialog.h" -#include "lltimer.h" +#include "lleventtimer.h" #include "llnotificationptr.h" #include "llviewercontrol.h" @@ -48,12 +48,32 @@ namespace LLNotificationsUI { +class LLToast; +/** + * Timer for toasts. + */ +class LLToastLifeTimer: public LLEventTimer +{ +public: + LLToastLifeTimer(LLToast* toast, F32 period) : mToast(toast), LLEventTimer(period){} + + /*virtual*/ + BOOL tick(); + void stop() { mEventTimer.stop(); } + void start() { mEventTimer.start(); } + void restart() {mEventTimer.reset(); } + BOOL getStarted() { return mEventTimer.getStarted(); } +private : + LLToast* mToast; +}; + /** * Represents toast pop-up. * This is a parent view for all toast panels. */ class LLToast : public LLModalDialog { + friend class LLToastLifeTimer; public: typedef boost::function<void (LLToast* toast)> toast_callback_t; typedef boost::signals2::signal<void (LLToast* toast)> toast_signal_t; @@ -107,12 +127,10 @@ class LLToast : public LLModalDialog LLPanel* getPanel() { return mPanel; } // enable/disable Toast's Hide button void setHideButtonEnabled(bool enabled); - // initialize and start Toast's timer - void setAndStartTimer(F32 period); // - void resetTimer() { mTimer.start(); } + void resetTimer() { mTimer->start(); } // - void stopTimer() { mTimer.stop(); } + void stopTimer() { mTimer->stop(); } // virtual void draw(); // @@ -176,10 +194,7 @@ class LLToast : public LLModalDialog void handleTipToastClick(S32 x, S32 y, MASK mask); - // check timer - bool lifetimeHasExpired(); - // on timer finished function - void tick(); + void expire(); LLUUID mNotificationID; LLUUID mSessionID; @@ -188,8 +203,8 @@ class LLToast : public LLModalDialog LLPanel* mWrapperPanel; // timer counts a lifetime of a toast - LLTimer mTimer; - F32 mToastLifetime; // in seconds + std::auto_ptr<LLToastLifeTimer> mTimer; + F32 mToastFadingTime; // in seconds LLPanel* mPanel; diff --git a/indra/newview/lltoastalertpanel.cpp b/indra/newview/lltoastalertpanel.cpp index c3ccb9380b0b9b9af158313f699bf147e87209a6..986ccdf19bd113815e96b590dbba100c430639d1 100644 --- a/indra/newview/lltoastalertpanel.cpp +++ b/indra/newview/lltoastalertpanel.cpp @@ -281,9 +281,6 @@ LLToastAlertPanel::LLToastAlertPanel( LLNotificationPtr notification, bool modal mLineEditor->setText(edit_text_contents); mLineEditor->setMaxTextLength(STD_STRING_STR_LEN - 1); - // make sure all edit keys get handled properly (DEV-22396) - mLineEditor->setHandleEditKeysDirectly(TRUE); - LLToastPanel::addChild(mLineEditor); mLineEditor->setDrawAsterixes(is_password); diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp index 84b2caeddd18df5feb2a31d3e824db03ad38df2d..798de3ab8cf26f64efbbac8c26bf32a53482f454 100644 --- a/indra/newview/lltooldraganddrop.cpp +++ b/indra/newview/lltooldraganddrop.cpp @@ -50,6 +50,7 @@ #include "llhudeffecttrail.h" #include "llimview.h" #include "llinventorybridge.h" +#include "llinventorydefines.h" #include "llinventoryfunctions.h" #include "llmutelist.h" #include "llpreviewnotecard.h" @@ -267,8 +268,8 @@ void LLCategoryDropObserver::done() { // *FIX: coalesce these... LLInventoryItem* item = NULL; - item_ref_t::iterator it = mComplete.begin(); - item_ref_t::iterator end = mComplete.end(); + uuid_vec_t::iterator it = mComplete.begin(); + uuid_vec_t::iterator end = mComplete.end(); for(; it < end; ++it) { item = gInventory.getItem(*it); @@ -305,8 +306,8 @@ void LLCategoryDropDescendentsObserver::done() { gInventory.removeObserver(this); - uuid_vec_t::iterator it = mCompleteFolders.begin(); - uuid_vec_t::iterator end = mCompleteFolders.end(); + uuid_vec_t::iterator it = mComplete.begin(); + uuid_vec_t::iterator end = mComplete.end(); LLViewerInventoryCategory::cat_array_t cats; LLViewerInventoryItem::item_array_t items; for(; it != end; ++it) @@ -326,12 +327,12 @@ void LLCategoryDropDescendentsObserver::done() { unique_ids.insert(items.get(i)->getUUID()); } - LLInventoryFetchObserver::item_ref_t ids; - std::back_insert_iterator<LLInventoryFetchObserver::item_ref_t> copier(ids); + uuid_vec_t ids; + std::back_insert_iterator<uuid_vec_t> copier(ids); std::copy(unique_ids.begin(), unique_ids.end(), copier); LLCategoryDropObserver* dropper; dropper = new LLCategoryDropObserver(mObjectID, mSource); - dropper->fetchItems(ids); + dropper->fetch(ids); if (dropper->isEverythingComplete()) { dropper->done(); @@ -413,9 +414,12 @@ void LLToolDragAndDrop::setDragStart(S32 x, S32 y) BOOL LLToolDragAndDrop::isOverThreshold(S32 x,S32 y) { - const S32 MIN_MANHATTAN_DIST = 3; - S32 manhattan_dist = llabs( x - mDragStartX ) + llabs( y - mDragStartY ); - return manhattan_dist >= MIN_MANHATTAN_DIST; + static LLCachedControl<S32> drag_and_drop_threshold(gSavedSettings,"DragAndDropDistanceThreshold"); + + S32 mouse_delta_x = x - mDragStartX; + S32 mouse_delta_y = y - mDragStartY; + + return (mouse_delta_x * mouse_delta_x) + (mouse_delta_y * mouse_delta_y) > drag_and_drop_threshold * drag_and_drop_threshold; } void LLToolDragAndDrop::beginDrag(EDragAndDropType type, @@ -2636,7 +2640,7 @@ EAcceptance LLToolDragAndDrop::dad3dUpdateInventoryCategory( // If every item is accepted, send it on if (drop && (ACCEPT_YES_COPY_SINGLE <= rv)) { - LLInventoryFetchObserver::item_ref_t ids; + uuid_vec_t ids; for (LLInventoryModel::item_array_t::const_iterator item_iter = items.begin(); item_iter != items.end(); ++item_iter) @@ -2645,7 +2649,7 @@ EAcceptance LLToolDragAndDrop::dad3dUpdateInventoryCategory( ids.push_back(item->getUUID()); } LLCategoryDropObserver* dropper = new LLCategoryDropObserver(obj->getID(), mSource); - dropper->fetchItems(ids); + dropper->fetch(ids); if(dropper->isEverythingComplete()) { dropper->done(); diff --git a/indra/newview/lltoolmorph.cpp b/indra/newview/lltoolmorph.cpp index 969049ee657c3403e72afa2d66109a02c9733669..22176c037f4c709b8094ef274dcca02928c6a25d 100644 --- a/indra/newview/lltoolmorph.cpp +++ b/indra/newview/lltoolmorph.cpp @@ -108,6 +108,12 @@ LLVisualParamHint::~LLVisualParamHint() LLVisualParamHint::sInstances.erase( this ); } +//virtual +S8 LLVisualParamHint::getType() const +{ + return LLViewerDynamicTexture::LL_VISUAL_PARAM_HINT ; +} + //----------------------------------------------------------------------------- // static // requestHintUpdates() @@ -287,6 +293,12 @@ LLVisualParamReset::LLVisualParamReset() : LLViewerDynamicTexture(1, 1, 1, ORDER { } +//virtual +S8 LLVisualParamReset::getType() const +{ + return LLViewerDynamicTexture::LL_VISUAL_PARAM_RESET ; +} + //----------------------------------------------------------------------------- // render() //----------------------------------------------------------------------------- diff --git a/indra/newview/lltoolmorph.h b/indra/newview/lltoolmorph.h index b7df718ba2a57477e63ee865d38abb7cd87f4c2a..c332c296bd487f9b398c2ba208beda16265fd7e0 100644 --- a/indra/newview/lltoolmorph.h +++ b/indra/newview/lltoolmorph.h @@ -64,6 +64,8 @@ class LLVisualParamHint : public LLViewerDynamicTexture LLViewerVisualParam *param, F32 param_weight); + /*virtual*/ S8 getType() const ; + BOOL needsRender(); void preRender(BOOL clear_depth); BOOL render(); @@ -107,6 +109,7 @@ class LLVisualParamReset : public LLViewerDynamicTexture public: LLVisualParamReset(); /*virtual */ BOOL render(); + /*virtual*/ S8 getType() const ; static BOOL sDirty; }; diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index 84c463495bddf31d557a36e97ca627502099d00f..a9bbee784da84a473d0c6f0f54d0f935822f03d3 100644 --- a/indra/newview/lltoolpie.cpp +++ b/indra/newview/lltoolpie.cpp @@ -181,10 +181,10 @@ BOOL LLToolPie::pickLeftMouseDownCallback() parent = object->getRootEdit(); } - - BOOL touchable = (object && object->flagHandleTouch()) - || (parent && parent->flagHandleTouch()); - + if (handleMediaClick(mPick)) + { + return TRUE; + } // If it's a left-click, and we have a special action, do it. if (useClickAction(mask, object, parent)) @@ -286,14 +286,12 @@ BOOL LLToolPie::pickLeftMouseDownCallback() } } - if (handleMediaClick(mPick)) - { - return TRUE; - } - // put focus back "in world" gFocusMgr.setKeyboardFocus(NULL); + BOOL touchable = (object && object->flagHandleTouch()) + || (parent && parent->flagHandleTouch()); + // Switch to grab tool if physical or triggerable if (object && !object->isAvatar() && @@ -513,21 +511,22 @@ BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask) } LLViewerObject* click_action_object = click_action_pick.getObject(); - if (click_action_object && useClickAction(mask, click_action_object, click_action_object->getRootEdit())) + if (handleMediaHover(mHoverPick)) { + // *NOTE: If you think the hover glow conflicts with the media outline, you + // could disable it here. show_highlight = true; - ECursorType cursor = cursor_from_object(click_action_object); - gViewerWindow->setCursor(cursor); + // cursor set by media object lldebugst(LLERR_USER_INPUT) << "hover handled by LLToolPie (inactive)" << llendl; } - else if (handleMediaHover(mHoverPick)) + else if (click_action_object && useClickAction(mask, click_action_object, click_action_object->getRootEdit())) { - // *NOTE: If you think the hover glow conflicts with the media outline, you - // could disable it here. show_highlight = true; - // cursor set by media object + ECursorType cursor = cursor_from_object(click_action_object); + gViewerWindow->setCursor(cursor); lldebugst(LLERR_USER_INPUT) << "hover handled by LLToolPie (inactive)" << llendl; } + else if ((object && !object->isAvatar() && object->usePhysics()) || (parent && !parent->isAvatar() && parent->usePhysics())) { diff --git a/indra/newview/lltracker.cpp b/indra/newview/lltracker.cpp index 9a69adae31da9600cad040330d1f1e001b2a86d3..cc074287c43aea129abc72e4077bee9ec62a9ff5 100644 --- a/indra/newview/lltracker.cpp +++ b/indra/newview/lltracker.cpp @@ -39,6 +39,7 @@ #include "llgl.h" #include "llrender.h" #include "llinventory.h" +#include "llinventorydefines.h" #include "llpointer.h" #include "llstring.h" #include "lluuid.h" @@ -742,10 +743,10 @@ void LLTracker::setLandmarkVisited() LLInventoryItem* i = gInventory.getItem( mTrackedLandmarkItemID ); LLViewerInventoryItem* item = (LLViewerInventoryItem*)i; if ( item - && !(item->getFlags()&LLInventoryItem::II_FLAGS_LANDMARK_VISITED)) + && !(item->getFlags()&LLInventoryItemFlags::II_FLAGS_LANDMARK_VISITED)) { U32 flags = item->getFlags(); - flags |= LLInventoryItem::II_FLAGS_LANDMARK_VISITED; + flags |= LLInventoryItemFlags::II_FLAGS_LANDMARK_VISITED; item->setFlags(flags); LLMessageSystem* msg = gMessageSystem; msg->newMessage("ChangeInventoryItemFlags"); @@ -798,7 +799,7 @@ void LLTracker::cacheLandmarkPosition() mLandmarkHasBeenVisited = FALSE; LLInventoryItem* item = gInventory.getItem(mTrackedLandmarkItemID); if ( item - && item->getFlags()&LLInventoryItem::II_FLAGS_LANDMARK_VISITED) + && item->getFlags()&LLInventoryItemFlags::II_FLAGS_LANDMARK_VISITED) { mLandmarkHasBeenVisited = TRUE; } diff --git a/indra/newview/llurllineeditorctrl.cpp b/indra/newview/llurllineeditorctrl.cpp index 258c3ddd758b16c9f981635fff78028d2b00c94c..1d2687a8c269073c9893b2777ea99f3ea6922605 100644 --- a/indra/newview/llurllineeditorctrl.cpp +++ b/indra/newview/llurllineeditorctrl.cpp @@ -72,7 +72,7 @@ void LLURLLineEditor::cut() if( need_to_rollback ) { rollback.doRollback( this ); - reportBadKeystroke(); + LLUI::reportBadKeystroke(); } else if( mKeystrokeCallback ) @@ -96,8 +96,3 @@ void LLURLLineEditor::copyEscapedURLToClipboard() gClipboard.copyFromString( text_to_copy ); } -// Makes UISndBadKeystroke sound -void LLURLLineEditor::reportBadKeystroke() -{ - make_ui_sound("UISndBadKeystroke"); -} diff --git a/indra/newview/llurllineeditorctrl.h b/indra/newview/llurllineeditorctrl.h index 618f29dfbf2896af57dcf200ff216e751fd99f9f..ebe417e85549e916cb6307ff251a3e9bcb828c5f 100644 --- a/indra/newview/llurllineeditorctrl.h +++ b/indra/newview/llurllineeditorctrl.h @@ -55,8 +55,6 @@ class LLURLLineEditor: public LLLineEditor { private: // util function to escape selected text and copy it to clipboard void copyEscapedURLToClipboard(); - // send a beep signal if keystroke is bad. As it is private at LLLineEditor we need own function - void reportBadKeystroke(); // Helper class to do rollback if needed class LLURLLineEditorRollback diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp index 87a29e530153d52a0af630159d30c340a604507d..3fa6b0c8c2c850e39b1aca624430599804b2858e 100644 --- a/indra/newview/llviewercontrol.cpp +++ b/indra/newview/llviewercontrol.cpp @@ -74,6 +74,7 @@ #include "llnavigationbar.h" #include "llfloatertools.h" #include "llpaneloutfitsinventory.h" +#include "llpanellogin.h" #ifdef TOGGLE_HACKED_GODLIKE_VIEWER BOOL gHackGodmode = FALSE; @@ -403,10 +404,7 @@ bool handleHighResSnapshotChanged(const LLSD& newvalue) bool handleVoiceClientPrefsChanged(const LLSD& newvalue) { - if(gVoiceClient) - { - gVoiceClient->updateSettings(); - } + LLVoiceClient::getInstance()->updateSettings(); return true; } @@ -434,6 +432,12 @@ bool handleVelocityInterpolate(const LLSD& newvalue) return true; } +bool handleForceShowGrid(const LLSD& newvalue) +{ + LLPanelLogin::refreshLocation( false ); + return true; +} + bool toggle_agent_pause(const LLSD& newvalue) { if ( newvalue.asBoolean() ) @@ -641,6 +645,7 @@ void settings_setup_listeners() gSavedSettings.getControl("ShowNavbarFavoritesPanel")->getSignal()->connect(boost::bind(&toggle_show_favorites_panel, _2)); gSavedSettings.getControl("ShowDebugAppearanceEditor")->getSignal()->connect(boost::bind(&toggle_show_appearance_editor, _2)); gSavedSettings.getControl("ShowObjectRenderingCost")->getSignal()->connect(boost::bind(&toggle_show_object_render_cost, _2)); + gSavedSettings.getControl("ForceShowGrid")->getSignal()->connect(boost::bind(&handleForceShowGrid, _2)); } #if TEST_CACHED_CONTROL diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp index b42d25c1d88638a3e6c635d26a975319bb83eb5e..8a891b1462906165ae41e95d121c70bbc2b7ffcc 100644 --- a/indra/newview/llviewerinventory.cpp +++ b/indra/newview/llviewerinventory.cpp @@ -44,6 +44,7 @@ #include "llfolderview.h" #include "llviewercontrol.h" #include "llconsole.h" +#include "llinventorydefines.h" #include "llinventoryfunctions.h" #include "llinventorymodel.h" #include "llinventorymodelbackgroundfetch.h" @@ -515,7 +516,7 @@ void LLViewerInventoryCategory::removeFromServer( void ) gAgent.sendReliableMessage(); } -bool LLViewerInventoryCategory::fetchDescendents() +bool LLViewerInventoryCategory::fetch() { if((VERSION_UNKNOWN == mVersion) && mDescendentsRequested.hasExpired()) //Expired check prevents multiple downloads. @@ -1074,7 +1075,7 @@ const std::string NEW_NOTECARD_NAME = "New Note"; // *TODO:Translate? (probably const std::string NEW_GESTURE_NAME = "New Gesture"; // *TODO:Translate? (probably not) // ! REFACTOR ! Really need to refactor this so that it's not a bunch of if-then statements... -void menu_create_inventory_item(LLFolderView* folder, LLFolderBridge *bridge, const LLSD& userdata, const LLUUID& default_parent_uuid) +void menu_create_inventory_item(LLFolderView* root, LLFolderBridge *bridge, const LLSD& userdata, const LLUUID& default_parent_uuid) { std::string type_name = userdata.asString(); @@ -1098,7 +1099,7 @@ void menu_create_inventory_item(LLFolderView* folder, LLFolderBridge *bridge, co LLUUID category = gInventory.createNewCategory(parent_id, preferred_type, LLStringUtil::null); gInventory.notifyObservers(); - folder->setSelectionByID(category, TRUE); + root->setSelectionByID(category, TRUE); } else if ("lsl" == type_name) { @@ -1143,7 +1144,7 @@ void menu_create_inventory_item(LLFolderView* folder, LLFolderBridge *bridge, co llwarns << "Can't create unrecognized type " << type_name << llendl; } } - folder->setNeedsAutoRename(TRUE); + root->setNeedsAutoRename(TRUE); } LLAssetType::EType LLViewerInventoryItem::getType() const @@ -1478,7 +1479,7 @@ EWearableType LLViewerInventoryItem::getWearableType() const llwarns << "item is not a wearable" << llendl; return WT_INVALID; } - return EWearableType(getFlags() & LLInventoryItem::II_FLAGS_WEARABLES_MASK); + return EWearableType(getFlags() & LLInventoryItemFlags::II_FLAGS_WEARABLES_MASK); } diff --git a/indra/newview/llviewerinventory.h b/indra/newview/llviewerinventory.h index 3d3f80b9b5752fe3d2ecf9cf3eca0b9c5acdef1c..2db88c2ff88f6b996300ea196ba2b629cc7e63f6 100644 --- a/indra/newview/llviewerinventory.h +++ b/indra/newview/llviewerinventory.h @@ -212,7 +212,7 @@ class LLViewerInventoryCategory : public LLInventoryCategory void setVersion(S32 version) { mVersion = version; } // Returns true if a fetch was issued. - bool fetchDescendents(); + bool fetch(); // used to help make cacheing more robust - for example, if // someone is getting 4 packets but logs out after 3. the viewer @@ -356,7 +356,7 @@ void copy_inventory_from_notecard(const LLUUID& object_id, U32 callback_id = 0); -void menu_create_inventory_item(LLFolderView* folder, +void menu_create_inventory_item(LLFolderView* root, LLFolderBridge* bridge, const LLSD& userdata, const LLUUID& default_parent_uuid = LLUUID::null); diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index d3eed40f25ce40b10e3ab7fd62ed17534c15890b..170eb7ae860b95b7abd81bc0643220e221125b29 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -1473,11 +1473,6 @@ LLViewerMediaImpl::LLViewerMediaImpl( const LLUUID& texture_id, ////////////////////////////////////////////////////////////////////////////////////////// LLViewerMediaImpl::~LLViewerMediaImpl() { - if( gEditMenuHandler == this ) - { - gEditMenuHandler = NULL; - } - destroyMediaSource(); LLViewerMediaTexture::removeMediaImplFromTexture(mTextureId) ; @@ -2973,7 +2968,13 @@ void LLViewerMediaImpl::calculateInterest() if(!mObjectList.empty()) { // Just use the first object in the list. We could go through the list and find the closest object, but this should work well enough. - LLVector3d global_delta = gAgent.getPositionGlobal() - (*mObjectList.begin())->getPositionGlobal(); + std::list< LLVOVolume* >::iterator iter = mObjectList.begin() ; + LLVOVolume* objp = *iter ; + llassert_always(objp != NULL) ; + + LLVector3d obj_global = objp->getPositionGlobal() ; + LLVector3d agent_global = gAgent.getPositionGlobal() ; + LLVector3d global_delta = agent_global - obj_global ; mProximityDistance = global_delta.magVecSquared(); // use distance-squared because it's cheaper and sorts the same. } diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 6a83f9cb355d844037f12ab9aa164e6459a0e158..add71c88cc39ac8dccf6a3983f0ec8ee7eefefc6 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -73,6 +73,7 @@ #include "llhudmanager.h" #include "llimview.h" #include "llinventorybridge.h" +#include "llinventorydefines.h" #include "llinventoryfunctions.h" #include "llpanellogin.h" #include "llpanelblockedlist.h" @@ -136,6 +137,7 @@ extern BOOL gDebugWindowProc; LLMenuBarGL *gMenuBarView = NULL; LLViewerMenuHolderGL *gMenuHolder = NULL; LLMenuGL *gPopupMenuView = NULL; +LLMenuGL *gEditMenu = NULL; LLMenuBarGL *gLoginMenuBarView = NULL; // Pie menus @@ -382,8 +384,10 @@ void init_menus() /// /// Context menus /// + const widget_registry_t& registry = LLViewerMenuHolderGL::child_registry_t::instance(); + gEditMenu = LLUICtrlFactory::createFromFile<LLMenuGL>("menu_edit.xml", gMenuHolder, registry); gMenuAvatarSelf = LLUICtrlFactory::createFromFile<LLContextMenu>( "menu_avatar_self.xml", gMenuHolder, registry); gMenuAvatarOther = LLUICtrlFactory::createFromFile<LLContextMenu>( @@ -3859,15 +3863,15 @@ BOOL enable_deed_object_to_group(void*) * No longer able to support viewer side manipulations in this way * void god_force_inv_owner_permissive(LLViewerObject* object, - InventoryObjectList* inventory, + LLInventoryObject::object_list_t* inventory, S32 serial_num, void*) { typedef std::vector<LLPointer<LLViewerInventoryItem> > item_array_t; item_array_t items; - InventoryObjectList::const_iterator inv_it = inventory->begin(); - InventoryObjectList::const_iterator inv_end = inventory->end(); + LLInventoryObject::object_list_t::const_iterator inv_it = inventory->begin(); + LLInventoryObject::object_list_t::const_iterator inv_end = inventory->end(); for ( ; inv_it != inv_end; ++inv_it) { if(((*inv_it)->getType() != LLAssetType::AT_CATEGORY)) @@ -5182,10 +5186,6 @@ void toggle_debug_menus(void*) { BOOL visible = ! gSavedSettings.getBOOL("UseDebugMenus"); gSavedSettings.setBOOL("UseDebugMenus", visible); - if(visible) - { - //LLFirstUse::useDebugMenus(); - } show_debug_menus(); } @@ -5330,6 +5330,16 @@ class LLWorldCreateLandmark : public view_listener_t } }; +class LLWorldPlaceProfile : public view_listener_t +{ + bool handleEvent(const LLSD& userdata) + { + LLSideTray::getInstance()->showPanel("panel_places", LLSD().with("type", "agent")); + + return true; + } +}; + void handle_look_at_selection(const LLSD& param) { const F32 PADDING_FACTOR = 1.75f; @@ -6153,11 +6163,11 @@ class LLAttachmentEnableDrop : public view_listener_t // if a fetch is already out there (being sent from a slow sim) // we refetch and there are 2 fetches LLWornItemFetchedObserver* wornItemFetched = new LLWornItemFetchedObserver(); - LLInventoryFetchObserver::item_ref_t items; //add item to the inventory item to be fetched + uuid_vec_t items; //add item to the inventory item to be fetched items.push_back((*attachment_iter)->getItemID()); - wornItemFetched->fetchItems(items); + wornItemFetched->fetch(items); gInventory.addObserver(wornItemFetched); } } @@ -6971,7 +6981,7 @@ void handle_grab_texture(void* data) name, LLStringUtil::null, LLSaleInfo::DEFAULT, - LLInventoryItem::II_FLAGS_NONE, + LLInventoryItemFlags::II_FLAGS_NONE, creation_date_now); item->updateServer(TRUE); @@ -7739,6 +7749,7 @@ void initialize_menus() commit.add("World.Chat", boost::bind(&handle_chat, (void*)NULL)); view_listener_t::addMenu(new LLWorldAlwaysRun(), "World.AlwaysRun"); view_listener_t::addMenu(new LLWorldCreateLandmark(), "World.CreateLandmark"); + view_listener_t::addMenu(new LLWorldPlaceProfile(), "World.PlaceProfile"); view_listener_t::addMenu(new LLWorldSetHomeLocation(), "World.SetHomeLocation"); view_listener_t::addMenu(new LLWorldTeleportHome(), "World.TeleportHome"); view_listener_t::addMenu(new LLWorldSetAway(), "World.SetAway"); diff --git a/indra/newview/llviewermenu.h b/indra/newview/llviewermenu.h index d3c34f0de426943b29912b490814d543e4057906..d72ea00077ad743de0fcb29d22eac4fdb37b1958 100644 --- a/indra/newview/llviewermenu.h +++ b/indra/newview/llviewermenu.h @@ -157,6 +157,7 @@ extern const std::string SAVE_INTO_INVENTORY; extern LLMenuBarGL* gMenuBarView; //extern LLView* gMenuBarHolder; +extern LLMenuGL* gEditMenu; extern LLMenuGL* gPopupMenuView; extern LLViewerMenuHolderGL* gMenuHolder; extern LLMenuBarGL* gLoginMenuBarView; diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp index e436341b41c1b37abe7ea749098186857c7861ce..fb51344269bb9d3572a8c6d63fd4bc3cb8077453 100644 --- a/indra/newview/llviewermenufile.cpp +++ b/indra/newview/llviewermenufile.cpp @@ -531,7 +531,6 @@ class LLFileTakeSnapshotToDisk : public view_listener_t { gViewerWindow->playSnapshotAnimAndSound(); - LLImageBase::setSizeOverride(TRUE); LLPointer<LLImageFormatted> formatted; switch(LLFloaterSnapshot::ESnapshotFormat(gSavedSettings.getS32("SnapshotFormat"))) { @@ -546,12 +545,12 @@ class LLFileTakeSnapshotToDisk : public view_listener_t break; default: llwarns << "Unknown Local Snapshot format" << llendl; - LLImageBase::setSizeOverride(FALSE); return true; } + formatted->enableOverSize() ; formatted->encode(raw, 0); - LLImageBase::setSizeOverride(FALSE); + formatted->disableOverSize() ; gViewerWindow->saveImageNumbered(formatted); } return true; diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index cde78e1cc866cdaa59523064e3eae0b55d3754d7..cb3f3c8edd992b1ca1595859d31a1016bc289592 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -41,6 +41,7 @@ #include "lleventtimer.h" #include "llfloaterreg.h" #include "llfollowcamparams.h" +#include "llinventorydefines.h" #include "llregionhandle.h" #include "llsdserialize.h" #include "llteleportflags.h" @@ -1203,10 +1204,10 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD& // This is an offer from an agent. In this case, the back // end has already copied the items into your inventory, // so we can fetch it out of our inventory. - LLInventoryFetchObserver::item_ref_t items; + uuid_vec_t items; items.push_back(mObjectID); LLOpenAgentOffer* open_agent_offer = new LLOpenAgentOffer(from_string); - open_agent_offer->fetchItems(items); + open_agent_offer->fetch(items); if(catp || (itemp && itemp->isComplete())) { open_agent_offer->done(); @@ -1601,10 +1602,10 @@ void inventory_offer_handler(LLOfferInfo* info) p.name = "UserGiveItem"; // Prefetch the item into your local inventory. - LLInventoryFetchObserver::item_ref_t items; + uuid_vec_t items; items.push_back(info->mObjectID); LLInventoryFetchObserver* fetch_item = new LLInventoryFetchObserver(); - fetch_item->fetchItems(items); + fetch_item->fetch(items); if(fetch_item->isEverythingComplete()) { fetch_item->done(); @@ -2120,10 +2121,10 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) if (is_muted) { // Prefetch the offered item so that it can be discarded by the appropriate observer. (EXT-4331) - LLInventoryFetchObserver::item_ref_t items; + uuid_vec_t items; items.push_back(info->mObjectID); LLInventoryFetchObserver* fetch_item = new LLInventoryFetchObserver(); - fetch_item->fetchItems(items); + fetch_item->fetch(items); delete fetch_item; // Same as closing window @@ -2857,8 +2858,8 @@ class LLFetchInWelcomeArea : public LLInventoryFetchDescendentsObserver LLInventoryModel::cat_array_t land_cats; LLInventoryModel::item_array_t land_items; - uuid_vec_t::iterator it = mCompleteFolders.begin(); - uuid_vec_t::iterator end = mCompleteFolders.end(); + uuid_vec_t::iterator it = mComplete.begin(); + uuid_vec_t::iterator end = mComplete.end(); for(; it != end; ++it) { gInventory.collectDescendentsIf( @@ -2929,7 +2930,7 @@ BOOL LLPostTeleportNotifiers::tick() if(!folders.empty()) { LLFetchInWelcomeArea* fetcher = new LLFetchInWelcomeArea; - fetcher->fetchDescendents(folders); + fetcher->fetch(folders); if(fetcher->isEverythingComplete()) { fetcher->done(); @@ -5230,7 +5231,7 @@ void process_derez_container(LLMessageSystem *msg, void**) } void container_inventory_arrived(LLViewerObject* object, - InventoryObjectList* inventory, + LLInventoryObject::object_list_t* inventory, S32 serial_num, void* data) { @@ -5250,8 +5251,8 @@ void container_inventory_arrived(LLViewerObject* object, LLFolderType::FT_NONE, LLTrans::getString("AcquiredItems")); - InventoryObjectList::const_iterator it = inventory->begin(); - InventoryObjectList::const_iterator end = inventory->end(); + LLInventoryObject::object_list_t::const_iterator it = inventory->begin(); + LLInventoryObject::object_list_t::const_iterator end = inventory->end(); for ( ; it != end; ++it) { if ((*it)->getType() != LLAssetType::AT_CATEGORY) @@ -5287,7 +5288,7 @@ void container_inventory_arrived(LLViewerObject* object, { // we're going to get one fake root category as well as the // one actual object - InventoryObjectList::iterator it = inventory->begin(); + LLInventoryObject::object_list_t::iterator it = inventory->begin(); if ((*it)->getType() == LLAssetType::AT_CATEGORY) { diff --git a/indra/newview/llviewermessage.h b/indra/newview/llviewermessage.h index 0ba4ac0c8d40b260ff2147eb924298dbd01eb97b..4015cca77b664cb059b796ead7ad7036ff293f3c 100644 --- a/indra/newview/llviewermessage.h +++ b/indra/newview/llviewermessage.h @@ -129,7 +129,7 @@ void process_frozen_message(LLMessageSystem* msg, void**); void process_derez_container(LLMessageSystem *msg, void**); void container_inventory_arrived(LLViewerObject* object, - std::list<LLPointer<LLInventoryObject> >* inventory, //InventoryObjectList + std::list<LLPointer<LLInventoryObject> >* inventory, //LLInventoryObject::object_list_t S32 serial_num, void* data); diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 7532102378a45faf41469849fa0bdb53020681c3..6bd3ceb8a85bcc9e5677808e61de19cbf8e3e896 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -46,6 +46,7 @@ #include "llfontgl.h" #include "llframetimer.h" #include "llinventory.h" +#include "llinventorydefines.h" #include "llmaterialtable.h" #include "llmutelist.h" #include "llnamevalue.h" @@ -2179,8 +2180,8 @@ void LLViewerObject::deleteInventoryItem(const LLUUID& item_id) { if(mInventory) { - InventoryObjectList::iterator it = mInventory->begin(); - InventoryObjectList::iterator end = mInventory->end(); + LLInventoryObject::object_list_t::iterator it = mInventory->begin(); + LLInventoryObject::object_list_t::iterator end = mInventory->end(); for( ; it != end; ++it ) { if((*it)->getUUID() == item_id) @@ -2490,7 +2491,7 @@ void LLViewerObject::processTaskInv(LLMessageSystem* msg, void** user_data) } else { - object->mInventory = new InventoryObjectList(); + object->mInventory = new LLInventoryObject::object_list_t(); } LLPointer<LLInventoryObject> obj; obj = new LLInventoryObject(object->mID, LLUUID::null, @@ -2546,7 +2547,7 @@ void LLViewerObject::loadTaskInvFile(const std::string& filename) } else { - mInventory = new InventoryObjectList; + mInventory = new LLInventoryObject::object_list_t; } while(ifs.good()) { @@ -2679,8 +2680,8 @@ LLInventoryObject* LLViewerObject::getInventoryObject(const LLUUID& item_id) LLInventoryObject* rv = NULL; if(mInventory) { - InventoryObjectList::iterator it = mInventory->begin(); - InventoryObjectList::iterator end = mInventory->end(); + LLInventoryObject::object_list_t::iterator it = mInventory->begin(); + LLInventoryObject::object_list_t::iterator end = mInventory->end(); for ( ; it != end; ++it) { if((*it)->getUUID() == item_id) @@ -2693,12 +2694,12 @@ LLInventoryObject* LLViewerObject::getInventoryObject(const LLUUID& item_id) return rv; } -void LLViewerObject::getInventoryContents(InventoryObjectList& objects) +void LLViewerObject::getInventoryContents(LLInventoryObject::object_list_t& objects) { if(mInventory) { - InventoryObjectList::iterator it = mInventory->begin(); - InventoryObjectList::iterator end = mInventory->end(); + LLInventoryObject::object_list_t::iterator it = mInventory->begin(); + LLInventoryObject::object_list_t::iterator end = mInventory->end(); for( ; it != end; ++it) { if ((*it)->getType() != LLAssetType::AT_CATEGORY) @@ -2728,8 +2729,8 @@ LLViewerInventoryItem* LLViewerObject::getInventoryItemByAsset(const LLUUID& ass { LLViewerInventoryItem* item = NULL; - InventoryObjectList::iterator it = mInventory->begin(); - InventoryObjectList::iterator end = mInventory->end(); + LLInventoryObject::object_list_t::iterator it = mInventory->begin(); + LLInventoryObject::object_list_t::iterator end = mInventory->end(); for( ; it != end; ++it) { LLInventoryObject* obj = *it; @@ -4091,8 +4092,8 @@ S32 LLViewerObject::countInventoryContents(LLAssetType::EType type) S32 count = 0; if( mInventory ) { - InventoryObjectList::const_iterator it = mInventory->begin(); - InventoryObjectList::const_iterator end = mInventory->end(); + LLInventoryObject::object_list_t::const_iterator it = mInventory->begin(); + LLInventoryObject::object_list_t::const_iterator end = mInventory->end(); for( ; it != end ; ++it ) { if( (*it)->getType() == type ) diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h index 8b542af773818c1ec1a4c531db7735e002553bf4..594d7a0827882a4f81e2c9c817fbdd54611426af 100644 --- a/indra/newview/llviewerobject.h +++ b/indra/newview/llviewerobject.h @@ -88,7 +88,7 @@ typedef enum e_object_update_type // callback typedef for inventory typedef void (*inventory_callback)(LLViewerObject*, - InventoryObjectList*, + LLInventoryObject::object_list_t*, S32 serial_num, void*); @@ -410,7 +410,7 @@ class LLViewerObject : public LLPrimitive, public LLRefCount, public LLGLUpdate void updateInventory(LLViewerInventoryItem* item, U8 key, bool is_new); void updateInventoryLocal(LLInventoryItem* item, U8 key); // Update without messaging. LLInventoryObject* getInventoryObject(const LLUUID& item_id); - void getInventoryContents(InventoryObjectList& objects); + void getInventoryContents(LLInventoryObject::object_list_t& objects); LLInventoryObject* getInventoryRoot(); LLViewerInventoryItem* getInventoryItemByAsset(const LLUUID& asset_id); S16 getInventorySerial() const { return mInventorySerialNum; } @@ -636,7 +636,7 @@ class LLViewerObject : public LLPrimitive, public LLRefCount, public LLGLUpdate F32 mPixelArea; // Apparent area in pixels // This is the object's inventory from the viewer's perspective. - InventoryObjectList* mInventory; + LLInventoryObject::object_list_t* mInventory; class LLInventoryCallbackInfo { public: diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp index a0d0b9d4904051637f17ced6b5dda4340c6e6824..8a68dd6ea701dc2643b8b8475403504cc64c36ed 100644 --- a/indra/newview/llviewershadermgr.cpp +++ b/indra/newview/llviewershadermgr.cpp @@ -77,6 +77,9 @@ LLGLSLShader gObjectFullbrightShinyProgram; LLGLSLShader gObjectShinyProgram; LLGLSLShader gObjectShinyWaterProgram; +//object hardware skinning shaders +LLGLSLShader gSkinnedObjectSimpleProgram; + //environment shaders LLGLSLShader gTerrainProgram; LLGLSLShader gTerrainWaterProgram; @@ -148,6 +151,7 @@ LLViewerShaderMgr::LLViewerShaderMgr() : mShaderList.push_back(&gObjectSimpleProgram); mShaderList.push_back(&gObjectFullbrightProgram); mShaderList.push_back(&gObjectFullbrightShinyProgram); + mShaderList.push_back(&gSkinnedObjectSimpleProgram); mShaderList.push_back(&gTerrainProgram); mShaderList.push_back(&gTerrainWaterProgram); mShaderList.push_back(&gObjectSimpleWaterProgram); @@ -195,6 +199,7 @@ void LLViewerShaderMgr::initAttribsAndUniforms(void) mReservedAttribs.push_back("materialColor"); mReservedAttribs.push_back("specularColor"); mReservedAttribs.push_back("binormal"); + mReservedAttribs.push_back("object_weight"); mAvatarAttribs.reserve(5); mAvatarAttribs.push_back("weight"); @@ -548,6 +553,9 @@ void LLViewerShaderMgr::unloadShaders() gObjectShinyProgram.unload(); gObjectFullbrightShinyProgram.unload(); gObjectShinyWaterProgram.unload(); + + gSkinnedObjectSimpleProgram.unload(); + gWaterProgram.unload(); gUnderWaterProgram.unload(); gTerrainProgram.unload(); @@ -625,6 +633,7 @@ BOOL LLViewerShaderMgr::loadBasicShaders() shaders.push_back( make_pair( "lighting/lightSpecularV.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) ); shaders.push_back( make_pair( "windlight/atmosphericsV.glsl", mVertexShaderLevel[SHADER_WINDLIGHT] ) ); shaders.push_back( make_pair( "avatar/avatarSkinV.glsl", 1 ) ); + shaders.push_back( make_pair( "avatar/objectSkinV.glsl", 1 ) ); // We no longer have to bind the shaders to global glhandles, they are automatically added to a map now. for (U32 i = 0; i < shaders.size(); i++) @@ -1214,6 +1223,7 @@ BOOL LLViewerShaderMgr::loadShadersObject() gObjectSimpleWaterProgram.unload(); gObjectFullbrightProgram.unload(); gObjectFullbrightWaterProgram.unload(); + gSkinnedObjectSimpleProgram.unload(); return FALSE; } @@ -1323,6 +1333,21 @@ BOOL LLViewerShaderMgr::loadShadersObject() success = gObjectFullbrightShinyProgram.createShader(NULL, &mShinyUniforms); } + if (success) + { + gSkinnedObjectSimpleProgram.mName = "Skinned Simple Shader"; + gSkinnedObjectSimpleProgram.mFeatures.calculatesLighting = true; + gSkinnedObjectSimpleProgram.mFeatures.calculatesAtmospherics = true; + gSkinnedObjectSimpleProgram.mFeatures.hasGamma = true; + gSkinnedObjectSimpleProgram.mFeatures.hasAtmospherics = true; + gSkinnedObjectSimpleProgram.mFeatures.hasLighting = true; + gSkinnedObjectSimpleProgram.mFeatures.hasObjectSkinning = true; + gSkinnedObjectSimpleProgram.mShaderFiles.clear(); + gSkinnedObjectSimpleProgram.mShaderFiles.push_back(make_pair("objects/simpleSkinnedV.glsl", GL_VERTEX_SHADER_ARB)); + gSkinnedObjectSimpleProgram.mShaderFiles.push_back(make_pair("objects/simpleF.glsl", GL_FRAGMENT_SHADER_ARB)); + gSkinnedObjectSimpleProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT]; + success = gSkinnedObjectSimpleProgram.createShader(NULL, NULL); + } if( !success ) { diff --git a/indra/newview/llviewershadermgr.h b/indra/newview/llviewershadermgr.h index ac2b4624e02ac019e70b959f35cbd5a7a91fee1d..83a650cdbc71a2d848e3f27a88804ec4a52e9874 100644 --- a/indra/newview/llviewershadermgr.h +++ b/indra/newview/llviewershadermgr.h @@ -82,6 +82,7 @@ class LLViewerShaderMgr: public LLShaderMgr MATERIAL_COLOR = 0, SPECULAR_COLOR, BINORMAL, + OBJECT_WEIGHT, END_RESERVED_ATTRIBS } eGLSLReservedAttribs; @@ -313,6 +314,8 @@ extern LLGLSLShader gObjectFullbrightShinyProgram; extern LLGLSLShader gObjectShinyProgram; extern LLGLSLShader gObjectShinyWaterProgram; +extern LLGLSLShader gSkinnedObjectSimpleProgram; + //environment shaders extern LLGLSLShader gTerrainProgram; extern LLGLSLShader gTerrainWaterProgram; diff --git a/indra/newview/llviewertexteditor.cpp b/indra/newview/llviewertexteditor.cpp index e3bc664473a8ba24bd29c2cc89544ba56b2f60ee..d35be8e1bf8bbce67fede87c5f425a4b32953b83 100644 --- a/indra/newview/llviewertexteditor.cpp +++ b/indra/newview/llviewertexteditor.cpp @@ -40,8 +40,8 @@ #include "llfloaterreg.h" #include "llfloaterworldmap.h" #include "llfocusmgr.h" -#include "llinventory.h" #include "llinventorybridge.h" +#include "llinventorydefines.h" #include "llinventorymodel.h" #include "lllandmark.h" #include "lllandmarkactions.h" @@ -525,7 +525,7 @@ LLUIImagePtr LLEmbeddedItems::getItemImage(llwchar ext_char) const case LLAssetType::AT_SOUND: img_name = "Inv_Sound"; break; case LLAssetType::AT_CLOTHING: img_name = "Inv_Clothing"; break; case LLAssetType::AT_OBJECT: - img_name = LLInventoryItem::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS & item->getFlags() ? + img_name = LLInventoryItemFlags::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS & item->getFlags() ? "Inv_Object_Multi" : "Inv_Object"; break; case LLAssetType::AT_CALLINGCARD: img_name = "Inv_CallingCard"; break; diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index 7d75d7a18361179fe9fb33937759231d1829f9db..886db08928fb79cf66b0d64eaf7638f174a29ff3 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -1433,15 +1433,15 @@ BOOL LLViewerFetchedTexture::createTexture(S32 usename/*= 0*/) //virtual void LLViewerFetchedTexture::setKnownDrawSize(S32 width, S32 height) { - if(mKnownDrawWidth != width || mKnownDrawHeight != height) + if(mKnownDrawWidth < width || mKnownDrawHeight < height) { - mKnownDrawWidth = width; - mKnownDrawHeight = height; + mKnownDrawWidth = llmax(mKnownDrawWidth, width) ; + mKnownDrawHeight = llmax(mKnownDrawHeight, height) ; mKnownDrawSizeChanged = TRUE ; mFullyLoaded = FALSE ; } - addTextureStats((F32)(width * height)); + addTextureStats((F32)(mKnownDrawWidth * mKnownDrawHeight)); } //virtual diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 3508f92a2fb1db5d3012d02920c13f2a96257603..2422995288b8fdce1a86f36a291cd3fd4129dd14 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -882,7 +882,7 @@ LLWindowCallbacks::DragNDropResult LLViewerWindow::handleDragNDrop( LLWindow *wi LLPanelLogin::refreshLocation( true ); LLPanelLogin::updateLocationUI(); } - return LLWindowCallbacks::DND_MOVE; + return LLWindowCallbacks::DND_COPY; }; } @@ -901,7 +901,11 @@ LLWindowCallbacks::DragNDropResult LLViewerWindow::handleDragNDrop( LLWindow *wi if (obj && !obj->getRegion()->getCapability("ObjectMedia").empty()) { LLTextureEntry *te = obj->getTE(object_face); - if (te) + + // can modify URL if we can modify the object or we have navigate permissions + bool allow_modify_url = obj->permModify() || obj->hasMediaPermission( te->getMediaData(), LLVOVolume::MEDIA_PERM_INTERACT ); + + if (te && allow_modify_url ) { if (drop) { @@ -932,29 +936,24 @@ LLWindowCallbacks::DragNDropResult LLViewerWindow::handleDragNDrop( LLWindow *wi // URL passes the whitelist if (te->getMediaData()->checkCandidateUrl( url ) ) { - // we are allowed to modify the object or we have navigate permissions - // NOTE: Design states you you can change the URL if you have media - // navigate permissions even if you do not have prim modify rights - if ( obj->permModify() || obj->hasMediaPermission( te->getMediaData(), LLVOVolume::MEDIA_PERM_INTERACT ) ) + // just navigate to the URL + if (obj->getMediaImpl(object_face)) + { + obj->getMediaImpl(object_face)->navigateTo(url); + } + else { - // just navigate to the URL - if (obj->getMediaImpl(object_face)) - { - obj->getMediaImpl(object_face)->navigateTo(url); - } - else - { - // This is very strange. Navigation should - // happen via the Impl, but we don't have one. - // This sends it to the server, which /should/ - // trigger us getting it. Hopefully. - LLSD media_data; - media_data[LLMediaEntry::CURRENT_URL_KEY] = url; - obj->syncMediaData(object_face, media_data, true, true); - obj->sendMediaDataUpdate(); - } - result = LLWindowCallbacks::DND_LINK; + // This is very strange. Navigation should + // happen via the Impl, but we don't have one. + // This sends it to the server, which /should/ + // trigger us getting it. Hopefully. + LLSD media_data; + media_data[LLMediaEntry::CURRENT_URL_KEY] = url; + obj->syncMediaData(object_face, media_data, true, true); + obj->sendMediaDataUpdate(); } + result = LLWindowCallbacks::DND_LINK; + } } LLSelectMgr::getInstance()->unhighlightObjectOnly(mDragHoveredObject); @@ -974,6 +973,7 @@ LLWindowCallbacks::DragNDropResult LLViewerWindow::handleDragNDrop( LLWindow *wi LLSelectMgr::getInstance()->highlightObjectOnly(mDragHoveredObject); } result = (! te->hasMedia()) ? LLWindowCallbacks::DND_COPY : LLWindowCallbacks::DND_LINK; + } } } @@ -2189,12 +2189,14 @@ void LLViewerWindow::draw() // Takes a single keydown event, usually when UI is visible BOOL LLViewerWindow::handleKey(KEY key, MASK mask) { + // hide tooltips on keypress + LLToolTipMgr::instance().blockToolTips(); + if (gFocusMgr.getKeyboardFocus() && !(mask & (MASK_CONTROL | MASK_ALT)) && !gFocusMgr.getKeystrokesOnly()) { // We have keyboard focus, and it's not an accelerator - if (key < 0x80) { // Not a special key, so likely (we hope) to generate a character. Let it fall through to character handler first. @@ -2202,68 +2204,49 @@ BOOL LLViewerWindow::handleKey(KEY key, MASK mask) } } - // hide tooltips on keypress - LLToolTipMgr::instance().blockToolTips(); - - // Explicit hack for debug menu. - if ((MASK_ALT & mask) && - (MASK_CONTROL & mask) && - ('D' == key || 'd' == key)) + // let menus handle navigation keys for navigation + if ((gMenuBarView && gMenuBarView->handleKey(key, mask, TRUE)) + ||(gLoginMenuBarView && gLoginMenuBarView->handleKey(key, mask, TRUE)) + ||(gMenuHolder && gMenuHolder->handleKey(key, mask, TRUE))) { - toggle_debug_menus(NULL); + return TRUE; } - // Explicit hack for debug menu. - if ((mask == (MASK_SHIFT | MASK_CONTROL)) && - ('G' == key || 'g' == key)) + // give menus a chance to handle modified (Ctrl, Alt) shortcut keys before current focus + // as long as focus isn't locked + if (mask & (MASK_CONTROL | MASK_ALT) && !gFocusMgr.focusLocked()) { - if (LLStartUp::getStartupState() < STATE_LOGIN_CLEANUP) //on splash page + if ((gMenuBarView && gMenuBarView->handleAcceleratorKey(key, mask)) + ||(gLoginMenuBarView && gLoginMenuBarView->handleAcceleratorKey(key, mask))) { - BOOL visible = ! gSavedSettings.getBOOL("ForceShowGrid"); - gSavedSettings.setBOOL("ForceShowGrid", visible); - - // Initialize visibility (and don't force visibility - use prefs) - LLPanelLogin::refreshLocation( false ); + return TRUE; } } - // Debugging view for unified notifications: CTRL-SHIFT-5 - // *FIXME: Having this special-cased right here (just so this can be invoked from the login screen) sucks. - if ((MASK_SHIFT & mask) - && (!(MASK_ALT & mask)) - && (MASK_CONTROL & mask) - && ('5' == key)) + // give floaters first chance to handle TAB key + // so frontmost floater gets focus + // if nothing has focus, go to first or last UI element as appropriate + if (key == KEY_TAB && (mask & MASK_CONTROL || gFocusMgr.getKeyboardFocus() == NULL)) { - //LLFloaterNotificationConsole::showInstance(); - LLFloaterReg::showInstance("notifications_console"); - return TRUE; - } + if (gMenuHolder) gMenuHolder->hideMenus(); - // handle escape key - //if (key == KEY_ESCAPE && mask == MASK_NONE) - //{ + // if CTRL-tabbing (and not just TAB with no focus), go into window cycle mode + gFloaterView->setCycleMode((mask & MASK_CONTROL) != 0); - // *TODO: get this to play well with mouselook and hidden - // cursor modes, etc, and re-enable. - //if (gFocusMgr.getMouseCapture()) - //{ - // gFocusMgr.setMouseCapture(NULL); - // return TRUE; - //} - //} - - // let menus handle navigation keys - if (gMenuBarView && gMenuBarView->handleKey(key, mask, TRUE)) - { - return TRUE; - } - // let menus handle navigation keys - if (gLoginMenuBarView && gLoginMenuBarView->handleKey(key, mask, TRUE)) - { + // do CTRL-TAB and CTRL-SHIFT-TAB logic + if (mask & MASK_SHIFT) + { + mRootView->focusPrevRoot(); + } + else + { + mRootView->focusNextRoot(); + } return TRUE; } - //some of context menus use this container, let context menu handle navigation keys - if(gMenuHolder && gMenuHolder->handleKey(key, mask, TRUE)) + + // hidden edit menu for cut/copy/paste + if (gEditMenu && gEditMenu->handleAcceleratorKey(key, mask)) { return TRUE; } @@ -2328,50 +2311,10 @@ BOOL LLViewerWindow::handleKey(KEY key, MASK mask) return TRUE; } - // Topmost view gets a chance before the hierarchy - // *FIX: get rid of this? - //LLUICtrl* top_ctrl = gFocusMgr.getTopCtrl(); - //if (top_ctrl) - //{ - // if( top_ctrl->handleKey( key, mask, TRUE ) ) - // { - // return TRUE; - // } - //} - - // give floaters first chance to handle TAB key - // so frontmost floater gets focus - if (key == KEY_TAB) - { - // if nothing has focus, go to first or last UI element as appropriate - if (mask & MASK_CONTROL || gFocusMgr.getKeyboardFocus() == NULL) - { - if (gMenuHolder) gMenuHolder->hideMenus(); - - // if CTRL-tabbing (and not just TAB with no focus), go into window cycle mode - gFloaterView->setCycleMode((mask & MASK_CONTROL) != 0); - // do CTRL-TAB and CTRL-SHIFT-TAB logic - if (mask & MASK_SHIFT) - { - mRootView->focusPrevRoot(); - } - else - { - mRootView->focusNextRoot(); - } - return TRUE; - } - } - - // give menus a chance to handle keys - if (gMenuBarView && gMenuBarView->handleAcceleratorKey(key, mask)) - { - return TRUE; - } - - // give menus a chance to handle keys - if (gLoginMenuBarView && gLoginMenuBarView->handleAcceleratorKey(key, mask)) + // give menus a chance to handle unmodified accelerator keys + if ((gMenuBarView && gMenuBarView->handleAcceleratorKey(key, mask)) + ||(gLoginMenuBarView && gLoginMenuBarView->handleAcceleratorKey(key, mask))) { return TRUE; } diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index c400e8510e673b25e172f5b6186aae5f9cf062ff..201c4ce1d5286237004a4175b78b9ad8d800b8f3 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -64,6 +64,7 @@ #include "llkeyframefallmotion.h" #include "llkeyframestandmotion.h" #include "llkeyframewalkmotion.h" +#include "llmeshrepository.h" #include "llmutelist.h" #include "llmoveview.h" #include "llquantize.h" @@ -79,6 +80,7 @@ #include "llviewermenu.h" #include "llviewerobjectlist.h" #include "llviewerparcelmgr.h" +#include "llviewershadermgr.h" #include "llviewerstats.h" #include "llvoavatarself.h" #include "llvovolume.h" @@ -2929,14 +2931,7 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last) } else { - if (gSavedSettings.getBOOL("SmallAvatarNames")) - { - mNameText->setFont(LLFontGL::getFontSansSerif()); - } - else - { - mNameText->setFont(LLFontGL::getFontSansSerifBig()); - } + mNameText->setFont(LLFontGL::getFontSansSerif()); mNameText->setTextAlignment(LLHUDText::ALIGN_TEXT_CENTER); mNameText->setFadeDistance(CHAT_NORMAL_RADIUS, 5.f); mNameText->setVisibleOffScreen(FALSE); @@ -3644,6 +3639,125 @@ bool LLVOAvatar::shouldAlphaMask() } +U32 LLVOAvatar::renderSkinnedAttachments() +{ + U32 num_indices = 0; + + const U32 data_mask = LLVertexBuffer::MAP_VERTEX | + LLVertexBuffer::MAP_NORMAL | + LLVertexBuffer::MAP_TEXCOORD0 | + LLVertexBuffer::MAP_COLOR | + LLVertexBuffer::MAP_WEIGHT4; + + for (attachment_map_t::const_iterator iter = mAttachmentPoints.begin(); + iter != mAttachmentPoints.end(); + ++iter) + { + LLViewerJointAttachment* attachment = iter->second; + for (LLViewerJointAttachment::attachedobjs_vec_t::iterator attachment_iter = attachment->mAttachedObjects.begin(); + attachment_iter != attachment->mAttachedObjects.end(); + ++attachment_iter) + { + const LLViewerObject* attached_object = (*attachment_iter); + if (attached_object && !attached_object->isHUDAttachment()) + { + const LLDrawable* drawable = attached_object->mDrawable; + if (drawable) + { + for (S32 i = 0; i < drawable->getNumFaces(); ++i) + { + LLFace* face = drawable->getFace(i); + if (face->isState(LLFace::RIGGED)) + { + LLVolume* volume = attached_object->getVolume(); + if (!volume || volume->getNumVolumeFaces() <= i) + { + continue; + } + + const LLVolumeFace& vol_face = volume->getVolumeFace(i); + + const LLMeshSkinInfo* skin = NULL; + LLVertexBuffer* buff = face->mVertexBuffer; + LLUUID mesh_id = volume->getParams().getSculptID();; + + if (!buff || + !buff->hasDataType(LLVertexBuffer::TYPE_WEIGHT4) || + buff->getRequestedVerts() != vol_face.mVertices.size()) + { + face->mVertexBuffer = NULL; + face->mLastVertexBuffer = NULL; + buff = NULL; + + if (mesh_id.notNull()) + { + skin = gMeshRepo.getSkinInfo(mesh_id); + if (skin) + { + face->mVertexBuffer = new LLVertexBuffer(data_mask, 0); + face->mVertexBuffer->allocateBuffer(vol_face.mVertices.size(), vol_face.mIndices.size(), true); + + face->setGeomIndex(0); + face->setIndicesIndex(0); + face->setSize(vol_face.mVertices.size(), vol_face.mIndices.size()); + + U16 offset = 0; + + LLMatrix4 mat_vert = skin->mBindShapeMatrix; + LLMatrix3 mat_normal; + + face->getGeometryVolume(*volume, i, mat_vert, mat_normal, offset, true); + buff = face->mVertexBuffer; + } + } + } + + if (buff && mesh_id.notNull()) + { + if (!skin) + { + skin = gMeshRepo.getSkinInfo(mesh_id); + } + + if (skin) + { + LLMatrix4 mat[64]; + + for (U32 i = 0; i < skin->mJointNames.size(); ++i) + { + LLJoint* joint = getJoint(skin->mJointNames[i]); + if (joint) + { + mat[i] = skin->mInvBindMatrix[i]; + mat[i] *= joint->getWorldMatrix(); + } + } + + gSkinnedObjectSimpleProgram.uniformMatrix4fv("matrixPalette", + skin->mJointNames.size(), + FALSE, + (GLfloat*) mat[0].mMatrix); + + buff->setBuffer(data_mask); + + U16 start = face->getGeomStart(); + U16 end = start + face->getGeomCount()-1; + S32 offset = face->getIndicesStart(); + U32 count = face->getIndicesCount(); + + buff->drawRange(LLRender::TRIANGLES, start, end, count, offset); + } + } + } + } + } + } + } + } + + return num_indices; +} + //----------------------------------------------------------------------------- // renderSkinned() //----------------------------------------------------------------------------- @@ -5614,6 +5728,8 @@ void LLVOAvatar::sitDown(BOOL bSitting) //----------------------------------------------------------------------------- void LLVOAvatar::sitOnObject(LLViewerObject *sit_object) { + sitDown(TRUE); + if (isSelf()) { // Might be first sit @@ -5646,7 +5762,6 @@ void LLVOAvatar::sitOnObject(LLViewerObject *sit_object) mDrawable->mXform.setRotation(mDrawable->getWorldRotation() * inv_obj_rot); gPipeline.markMoved(mDrawable, TRUE); - sitDown(TRUE); mRoot.getXform()->setParent(&sit_object->mDrawable->mXform); // LLVOAvatar::sitOnObject mRoot.setPosition(getPosition()); mRoot.updateWorldMatrixChildren(); diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index d5485413f405fceda60ad999e8afd6827ef7aa8c..b0535a4a265d68b44eb604906ae4b4fdbccb1f3d 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -339,6 +339,7 @@ class LLVOAvatar : U32 renderImpostor(LLColor4U color = LLColor4U(255,255,255,255), S32 diffuse_channel = 0); U32 renderRigid(); U32 renderSkinned(EAvatarRenderPass pass); + U32 renderSkinnedAttachments(); U32 renderTransparent(BOOL first_pass); void renderCollisionVolumes(); static void deleteCachedImages(bool clearAll=true); diff --git a/indra/newview/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp index fac7fa6a18564923ce11f2f4907f88ffed1e38a2..7bb1006e93504c726a1d8415d2a52303ca4e8383 100644 --- a/indra/newview/llvoicechannel.cpp +++ b/indra/newview/llvoicechannel.cpp @@ -139,13 +139,10 @@ LLVoiceChannel::LLVoiceChannel(const LLUUID& session_id, const std::string& sess LLVoiceChannel::~LLVoiceChannel() { - // Don't use LLVoiceClient::getInstance() here -- this can get called during atexit() time and that singleton MAY have already been destroyed. - // Using call of instanceExists() instead of gVoiceClient in check to avoid crash in LLVoiceClient::removeObserver() - // when quitting viewer by closing console window before login (though in case of such quit crash will occur - // later in other destructors anyway). EXT-5524 + // Must check instance exists here, the singleton MAY have already been destroyed. if(LLVoiceClient::instanceExists()) { - gVoiceClient->removeObserver(this); + LLVoiceClient::instance().removeObserver(this); } sVoiceChannelMap.erase(mSessionID); diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp index 2e5d4f1776a3b381d39236526d4667c4018cf31a..2238acd64376a1402c602640bf21a71f3ed11d1a 100644 --- a/indra/newview/llvoiceclient.cpp +++ b/indra/newview/llvoiceclient.cpp @@ -1176,7 +1176,7 @@ void LLSpeakerVolumeStorage::storeSpeakerVolume(const LLUUID& speaker_id, F32 vo { mSpeakersData[speaker_id] = volume; - // Enable this when debugging voice slider issues. It's way too spammy even for debug-level logging. + // 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 diff --git a/indra/newview/llvoinventorylistener.h b/indra/newview/llvoinventorylistener.h index 335e867fcadd5ec5f0c6134adc28e72ffe8db1b9..1531e6e33964776828d8d0b5cbe3b96a5d903d65 100644 --- a/indra/newview/llvoinventorylistener.h +++ b/indra/newview/llvoinventorylistener.h @@ -42,7 +42,7 @@ class LLVOInventoryListener { public: virtual void inventoryChanged(LLViewerObject* object, - InventoryObjectList* inventory, + LLInventoryObject::object_list_t* inventory, S32 serial_num, void* user_data) = 0; diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index bc83e11fd27c8bdaa55d8a4ce7976777ce3bc797..56fb42bb890fa2286678a7e496b1213c0fd80452 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -3496,6 +3496,10 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group) drawablep->clearState(LLDrawable::HAS_ALPHA); + bool rigged = vobj->isAttachment() && + vobj->isMesh() && + gMeshRepo.getSkinInfo(vobj->getVolume()->getParams().getSculptID()); + //for each face for (S32 i = 0; i < drawablep->getNumFaces(); i++) { @@ -3503,6 +3507,22 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group) drawablep->updateFaceSize(i); LLFace* facep = drawablep->getFace(i); + if (rigged) + { + if (!facep->isState(LLFace::RIGGED)) + { + facep->mVertexBuffer = NULL; + facep->mLastVertexBuffer = NULL; + facep->setState(LLFace::RIGGED); + } + + continue; + } + else + { + facep->clearState(LLFace::RIGGED); + } + if (cur_total > max_total || facep->getIndicesCount() <= 0 || facep->getGeomCount() <= 0) { facep->mVertexBuffer = NULL; diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp index 7afe81b436c1d9381bae0419cef746ec42ef8f0f..0c37bb6eb1b7a63fef50c799247d17e0bae6d6e9 100644 --- a/indra/newview/llworldmapview.cpp +++ b/indra/newview/llworldmapview.cpp @@ -886,28 +886,36 @@ void LLWorldMapView::drawFrustum() F32 half_width_meters = far_clip_meters * tan( horiz_fov / 2 ); F32 half_width_pixels = half_width_meters * meters_to_pixels; - F32 ctr_x = getRect().getWidth() * 0.5f + sPanX; - F32 ctr_y = getRect().getHeight() * 0.5f + sPanY; + F32 ctr_x = getLocalRect().getWidth() * 0.5f + sPanX; + F32 ctr_y = getLocalRect().getHeight() * 0.5f + sPanY; gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); // Since we don't rotate the map, we have to rotate the frustum. gGL.pushMatrix(); + { gGL.translatef( ctr_x, ctr_y, 0 ); - glRotatef( atan2( LLViewerCamera::getInstance()->getAtAxis().mV[VX], LLViewerCamera::getInstance()->getAtAxis().mV[VY] ) * RAD_TO_DEG, 0.f, 0.f, -1.f); // Draw triangle with more alpha in far pixels to make it // fade out in distance. gGL.begin( LLRender::TRIANGLES ); + { + LLVector2 cam_lookat(LLViewerCamera::instance().getAtAxis().mV[VX], LLViewerCamera::instance().getAtAxis().mV[VY]); + LLVector2 cam_left(LLViewerCamera::instance().getLeftAxis().mV[VX], LLViewerCamera::instance().getLeftAxis().mV[VY]); + gGL.color4f(1.f, 1.f, 1.f, 0.25f); gGL.vertex2f( 0, 0 ); gGL.color4f(1.f, 1.f, 1.f, 0.02f); - gGL.vertex2f( -half_width_pixels, far_clip_pixels ); + + LLVector2 vert = cam_lookat * far_clip_pixels + cam_left * half_width_pixels; + gGL.vertex2f(vert.mV[VX], vert.mV[VY]); - gGL.color4f(1.f, 1.f, 1.f, 0.02f); - gGL.vertex2f( half_width_pixels, far_clip_pixels ); + vert = cam_lookat * far_clip_pixels - cam_left * half_width_pixels; + gGL.vertex2f(vert.mV[VX], vert.mV[VY]); + } gGL.end(); + } gGL.popMatrix(); } diff --git a/indra/newview/llxmlrpctransaction.cpp b/indra/newview/llxmlrpctransaction.cpp index c19be37e75ce4deadb6eb70f2063617d2199ae50..5884cdd1c39bad95514a96487aaf22322526060c 100644 --- a/indra/newview/llxmlrpctransaction.cpp +++ b/indra/newview/llxmlrpctransaction.cpp @@ -252,8 +252,10 @@ void LLXMLRPCTransaction::Impl::init(XMLRPC_REQUEST request, bool useGzip) // mCurlRequest->setopt(CURLOPT_VERBOSE, 1); // usefull for debugging mCurlRequest->setopt(CURLOPT_NOSIGNAL, 1); mCurlRequest->setWriteCallback(&curlDownloadCallback, (void*)this); - mCurlRequest->setopt(CURLOPT_SSL_VERIFYPEER, LLCurl::getSSLVerify()); + BOOL verifySSLCert = !gSavedSettings.getBOOL("NoVerifySSLCert"); mCurlRequest->setopt(CURLOPT_SSL_VERIFYHOST, LLCurl::getSSLVerify() ? 2 : 0); + mCurlRequest->setopt(CURLOPT_SSL_VERIFYPEER, verifySSLCert); + mCurlRequest->setopt(CURLOPT_SSL_VERIFYHOST, verifySSLCert ? 2 : 0); // Be a little impatient about establishing connections. mCurlRequest->setopt(CURLOPT_CONNECTTIMEOUT, 40L); diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 3778cae201c816abdcdfdff757ed0a4014d647b1..bd210b337614e52176e43334e5d4c2a425a1ec4c 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -193,6 +193,7 @@ std::string gPoolNames[] = }; void drawBox(const LLVector3& c, const LLVector3& r); +void drawBoxOutline(const LLVector3& pos, const LLVector3& size); U32 nhpo2(U32 v) { @@ -1531,8 +1532,10 @@ BOOL LLPipeline::visibleObjectsInFrustum(LLCamera& camera) BOOL LLPipeline::getVisibleExtents(LLCamera& camera, LLVector3& min, LLVector3& max) { - min = LLVector3(F32_MAX, F32_MAX, F32_MAX); - max = LLVector3(-F32_MAX, -F32_MAX, -F32_MAX); + const F32 X = 65536.f; + + min = LLVector3(X,X,X); + max = LLVector3(-X,-X,-X); U32 saved_camera_id = LLViewerCamera::sCurCameraID; LLViewerCamera::sCurCameraID = LLViewerCamera::CAMERA_WORLD; @@ -2980,8 +2983,12 @@ void LLPipeline::renderHighlights() } } +//debug use +U32 LLPipeline::sCurRenderPoolType = 0 ; + void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate) { + llpushcallstacks ; LLMemType mt(LLMemType::MTYPE_PIPELINE_RENDER_GEOM); LLFastTimer t(FTM_RENDER_GEOMETRY); @@ -3089,6 +3096,9 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate) cur_type = poolp->getType(); + //debug use + sCurRenderPoolType = cur_type ; + if (occlude && cur_type >= LLDrawPool::POOL_GRASS) { occlude = FALSE; @@ -3667,12 +3677,17 @@ void LLPipeline::renderDebug() for (U32 i = 0; i < 8; i++) { + LLVector3* frust = mShadowCamera[i].mAgentFrustum; + if (i > 3) - { + { //render shadow frusta as volumes + if (mShadowFrustPoints[i-4].empty()) + { + continue; + } + gGL.color4fv(col+(i-4)*4); - LLVector3* frust = mShadowCamera[i].mAgentFrustum; - gGL.begin(LLRender::TRIANGLE_STRIP); gGL.vertex3fv(frust[0].mV); gGL.vertex3fv(frust[4].mV); gGL.vertex3fv(frust[1].mV); gGL.vertex3fv(frust[5].mV); @@ -3700,31 +3715,49 @@ void LLPipeline::renderDebug() if (i < 4) { - gGL.begin(LLRender::LINES); - - F32* c = col+i*4; - for (U32 j = 0; j < mShadowFrustPoints[i].size(); ++j) + + if (i == 0 || !mShadowFrustPoints[i].empty()) { - - gGL.color3fv(c); + //render visible point cloud + gGL.flush(); + glPointSize(8.f); + gGL.begin(LLRender::POINTS); - for (U32 k = 0; k < mShadowFrustPoints[i].size(); ++k) - { - if (j != k) - { - gGL.vertex3fv(mShadowFrustPoints[i][j].mV); - gGL.vertex3fv(mShadowFrustPoints[i][k].mV); - } - } + F32* c = col+i*4; + gGL.color3fv(c); - if (!mShadowFrustOrigin[i].isExactlyZero()) - { + for (U32 j = 0; j < mShadowFrustPoints[i].size(); ++j) + { gGL.vertex3fv(mShadowFrustPoints[i][j].mV); - gGL.color4f(1,1,1,1); - gGL.vertex3fv(mShadowFrustOrigin[i].mV); + } + gGL.end(); + + gGL.flush(); + glPointSize(1.f); + + LLVector3* ext = mShadowExtents[i]; + LLVector3 pos = (ext[0]+ext[1])*0.5f; + LLVector3 size = (ext[1]-ext[0])*0.5f; + drawBoxOutline(pos, size); + + //render camera frustum splits as outlines + gGL.begin(LLRender::LINES); + gGL.vertex3fv(frust[0].mV); gGL.vertex3fv(frust[1].mV); + gGL.vertex3fv(frust[1].mV); gGL.vertex3fv(frust[2].mV); + gGL.vertex3fv(frust[2].mV); gGL.vertex3fv(frust[3].mV); + gGL.vertex3fv(frust[3].mV); gGL.vertex3fv(frust[0].mV); + gGL.vertex3fv(frust[4].mV); gGL.vertex3fv(frust[5].mV); + gGL.vertex3fv(frust[5].mV); gGL.vertex3fv(frust[6].mV); + gGL.vertex3fv(frust[6].mV); gGL.vertex3fv(frust[7].mV); + gGL.vertex3fv(frust[7].mV); gGL.vertex3fv(frust[4].mV); + gGL.vertex3fv(frust[0].mV); gGL.vertex3fv(frust[4].mV); + gGL.vertex3fv(frust[1].mV); gGL.vertex3fv(frust[5].mV); + gGL.vertex3fv(frust[2].mV); gGL.vertex3fv(frust[6].mV); + gGL.vertex3fv(frust[3].mV); gGL.vertex3fv(frust[7].mV); + gGL.end(); } - gGL.end(); + } /*for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin(); @@ -5922,8 +5955,12 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield) } +static LLFastTimer::DeclareTimer FTM_BIND_DEFERRED("Bind Deferred"); + void LLPipeline::bindDeferredShader(LLGLSLShader& shader, U32 light_index, LLRenderTarget* gi_source, LLRenderTarget* last_gi_post, U32 noise_map) { + LLFastTimer t(FTM_BIND_DEFERRED); + if (noise_map == 0xFFFFFFFF) { noise_map = mNoiseMap; @@ -6261,10 +6298,16 @@ void LLPipeline::bindDeferredShader(LLGLSLShader& shader, U32 light_index, LLRen matrix_nondiag, matrix_nondiag, matrix_diag}; shader.uniformMatrix3fv("ssao_effect_mat", 1, GL_FALSE, ssao_effect_mat); + F32 shadow_offset_error = 1.f + gSavedSettings.getF32("RenderShadowOffsetError") * fabsf(LLViewerCamera::getInstance()->getOrigin().mV[2]); + F32 shadow_bias_error = 1.f + gSavedSettings.getF32("RenderShadowBiasError") * fabsf(LLViewerCamera::getInstance()->getOrigin().mV[2]); + shader.uniform2f("screen_res", mDeferredScreen.getWidth(), mDeferredScreen.getHeight()); shader.uniform1f("near_clip", LLViewerCamera::getInstance()->getNear()*2.f); - shader.uniform1f ("shadow_offset", gSavedSettings.getF32("RenderShadowOffset")); - shader.uniform1f("shadow_bias", gSavedSettings.getF32("RenderShadowBias")); + shader.uniform1f ("shadow_offset", gSavedSettings.getF32("RenderShadowOffset")*shadow_offset_error); + shader.uniform1f("shadow_bias", gSavedSettings.getF32("RenderShadowBias")*shadow_bias_error); + shader.uniform1f ("spot_shadow_offset", gSavedSettings.getF32("RenderSpotShadowOffset")); + shader.uniform1f("spot_shadow_bias", gSavedSettings.getF32("RenderSpotShadowBias")); + shader.uniform1f("lum_scale", gSavedSettings.getF32("RenderLuminanceScale")); shader.uniform1f("sun_lum_scale", gSavedSettings.getF32("RenderSunLuminanceScale")); shader.uniform1f("sun_lum_offset", gSavedSettings.getF32("RenderSunLuminanceOffset")); @@ -7210,6 +7253,7 @@ inline float sgn(float a) void LLPipeline::generateWaterReflection(LLCamera& camera_in) { + llpushcallstacks ; if (LLPipeline::sWaterReflections && assertInitialized() && LLDrawPoolWater::sNeedsReflectionUpdate) { BOOL skip_avatar_update = FALSE; @@ -7711,14 +7755,14 @@ BOOL LLPipeline::getVisiblePointCloud(LLCamera& camera, LLVector3& min, LLVector //get point of intersection of 3 planes "p" LLVector3 p = (-d1*(n2%n3)-d2*(n3%n1)-d3*(n1%n2))/(n1*(n2%n3)); - if (llround(p*n1+d1, 0.0001f) == 0.f && - llround(p*n2+d2, 0.0001f) == 0.f && - llround(p*n3+d3, 0.0001f) == 0.f) + if (llround(p*n1+d1, 0.1f) == 0.f && + llround(p*n2+d2, 0.1f) == 0.f && + llround(p*n3+d3, 0.1f) == 0.f) { //point is on all three planes BOOL found = TRUE; for (U32 l = 0; l < ps.size() && found; ++l) { - if (llround(ps[l].dist(p), 0.0001f) > 0.0f) + if (llround(ps[l].dist(p), 0.1f) > 0.0f) { //point is above some plane, not contained found = FALSE; } @@ -7944,7 +7988,7 @@ void LLPipeline::renderHighlight(const LLViewerObject* obj, F32 fade) void LLPipeline::generateHighlight(LLCamera& camera) { //render highlighted object as white into offscreen render target - + llpushcallstacks ; if (mHighlightObject.notNull()) { mHighlightSet.insert(HighlightItem(mHighlightObject)); @@ -8079,16 +8123,31 @@ void LLPipeline::generateSunShadow(LLCamera& camera) at.normVec(); + LLCamera main_camera = camera; + F32 near_clip = 0.f; { //get visible point cloud std::vector<LLVector3> fp; + main_camera.calcAgentFrustumPlanes(main_camera.mAgentFrustum); + LLVector3 min,max; - getVisiblePointCloud(camera,min,max,fp); + getVisiblePointCloud(main_camera,min,max,fp); if (fp.empty()) { + if (!hasRenderDebugMask(RENDER_DEBUG_SHADOW_FRUSTA)) + { + mShadowCamera[0] = main_camera; + mShadowExtents[0][0] = min; + mShadowExtents[0][1] = max; + + mShadowFrustPoints[0].clear(); + mShadowFrustPoints[1].clear(); + mShadowFrustPoints[2].clear(); + mShadowFrustPoints[3].clear(); + } mRenderTypeMask = type_mask; return; } @@ -8163,7 +8222,7 @@ void LLPipeline::generateSunShadow(LLCamera& camera) shadow_cam = camera; shadow_cam.setFar(16.f); - LLViewerCamera::updateFrustumPlanes(shadow_cam); + LLViewerCamera::updateFrustumPlanes(shadow_cam, FALSE, FALSE, TRUE); LLVector3* frust = shadow_cam.mAgentFrustum; diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h index 814c54326a7135cd86831108d4af5ac3bab92edf..8bdc635d05605e676f669e0d71367195c8d5414e 100644 --- a/indra/newview/pipeline.h +++ b/indra/newview/pipeline.h @@ -699,6 +699,9 @@ class LLPipeline public: static BOOL sRenderBeacons; static BOOL sRenderHighlight; + + //debug use + static U32 sCurRenderPoolType ; }; void render_bbox(const LLVector3 &min, const LLVector3 &max); diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml index 777d671e817bc697e8f3446976c62c3d02b7134e..99603530d8f1f1ceb698fa6c865a1575e75bc0c9 100644 --- a/indra/newview/skins/default/colors.xml +++ b/indra/newview/skins/default/colors.xml @@ -61,7 +61,7 @@ value="0.26 0.345 0.263 1" /> <color name="Red" - value="0.729 0 0.121 1" /> + value="1 0 0 1" /> <color name="Blue" value="0 0 1 1" /> @@ -197,7 +197,7 @@ value="0.5 0.5 0.5 1" /> <color name="ColorPaletteEntry03" - value="0.3344 0.5456 0.5159 1" /> + value="0.5 0 0 1" /> <color name="ColorPaletteEntry04" value="0.5 0.5 0 1" /> @@ -239,7 +239,7 @@ reference="LtYellow" /> <color name="ColorPaletteEntry17" - reference="LtGreen" /> + reference="White" /> <color name="ColorPaletteEntry18" reference="LtGray" /> @@ -248,7 +248,7 @@ reference="Red" /> <color name="ColorPaletteEntry20" - reference=".5 .5 1 0" /> + reference="Yellow" /> <color name="ColorPaletteEntry21" reference="Green" /> @@ -420,6 +420,9 @@ <color name="InventoryItemSuffixColor" reference="White_25" /> + <color + name="InventoryItemLibraryColor" + reference="EmphasisColor" /> <color name="InventorySearchStatusColor" reference="EmphasisColor" /> @@ -731,7 +734,10 @@ <color name="ChatToastAgentNameColor" reference="EmphasisColor" /> - <color + <color name="ColorSwatchBorderColor" value="0.45098 0.517647 0.607843 1"/> + <color + name="ChatTimestampColor" + reference="White" /> </colors> diff --git a/indra/newview/skins/default/textures/arrow_down.tga b/indra/newview/skins/default/textures/arrow_down.tga new file mode 100644 index 0000000000000000000000000000000000000000..81dc9d3b6c28e4d476dfdb0bdc60e12b6a3f98e5 Binary files /dev/null and b/indra/newview/skins/default/textures/arrow_down.tga differ diff --git a/indra/newview/skins/default/textures/icons/Generic_Group_Large.png b/indra/newview/skins/default/textures/icons/Generic_Group_Large.png deleted file mode 100644 index 4d4f1e1beea3f2b410805a9860c965b3a3489d0b..0000000000000000000000000000000000000000 Binary files a/indra/newview/skins/default/textures/icons/Generic_Group_Large.png and /dev/null differ diff --git a/indra/newview/skins/default/textures/icons/Progress_1.png b/indra/newview/skins/default/textures/icons/Progress_1.png deleted file mode 100644 index 58b56003c40a1c50fb38a02ad749862278fee619..0000000000000000000000000000000000000000 Binary files a/indra/newview/skins/default/textures/icons/Progress_1.png and /dev/null differ diff --git a/indra/newview/skins/default/textures/icons/Progress_10.png b/indra/newview/skins/default/textures/icons/Progress_10.png deleted file mode 100644 index 07fe0be8a3999b4713a0fa26ffaf9263a831b15e..0000000000000000000000000000000000000000 Binary files a/indra/newview/skins/default/textures/icons/Progress_10.png and /dev/null differ diff --git a/indra/newview/skins/default/textures/icons/Progress_11.png b/indra/newview/skins/default/textures/icons/Progress_11.png deleted file mode 100644 index 215d68cc465fa2c7597c650b0bb5251b08f46f83..0000000000000000000000000000000000000000 Binary files a/indra/newview/skins/default/textures/icons/Progress_11.png and /dev/null differ diff --git a/indra/newview/skins/default/textures/icons/Progress_12.png b/indra/newview/skins/default/textures/icons/Progress_12.png deleted file mode 100644 index d75558862140ee581dcf463bd903829c987155b1..0000000000000000000000000000000000000000 Binary files a/indra/newview/skins/default/textures/icons/Progress_12.png and /dev/null differ diff --git a/indra/newview/skins/default/textures/icons/Progress_2.png b/indra/newview/skins/default/textures/icons/Progress_2.png deleted file mode 100644 index 6640ee227ba754700c2d29014eb47dc06f765d84..0000000000000000000000000000000000000000 Binary files a/indra/newview/skins/default/textures/icons/Progress_2.png and /dev/null differ diff --git a/indra/newview/skins/default/textures/icons/Progress_3.png b/indra/newview/skins/default/textures/icons/Progress_3.png deleted file mode 100644 index 5decbe977e25de8cd5ed19dd1cc844df0a04e715..0000000000000000000000000000000000000000 Binary files a/indra/newview/skins/default/textures/icons/Progress_3.png and /dev/null differ diff --git a/indra/newview/skins/default/textures/icons/Progress_4.png b/indra/newview/skins/default/textures/icons/Progress_4.png deleted file mode 100644 index 56e81c17aa0258e691da8cd3db02a377b4f044d4..0000000000000000000000000000000000000000 Binary files a/indra/newview/skins/default/textures/icons/Progress_4.png and /dev/null differ diff --git a/indra/newview/skins/default/textures/icons/Progress_5.png b/indra/newview/skins/default/textures/icons/Progress_5.png deleted file mode 100644 index a89bf2ac62d0c3175ccb5cbcd2fbbed8a28e9047..0000000000000000000000000000000000000000 Binary files a/indra/newview/skins/default/textures/icons/Progress_5.png and /dev/null differ diff --git a/indra/newview/skins/default/textures/icons/Progress_6.png b/indra/newview/skins/default/textures/icons/Progress_6.png deleted file mode 100644 index 233c4795407ddf79ca93d1895da1baa4ad011f82..0000000000000000000000000000000000000000 Binary files a/indra/newview/skins/default/textures/icons/Progress_6.png and /dev/null differ diff --git a/indra/newview/skins/default/textures/icons/Progress_7.png b/indra/newview/skins/default/textures/icons/Progress_7.png deleted file mode 100644 index 631d7a6819ddd0763c90fc1834ce4eb9c51292a5..0000000000000000000000000000000000000000 Binary files a/indra/newview/skins/default/textures/icons/Progress_7.png and /dev/null differ diff --git a/indra/newview/skins/default/textures/icons/Progress_8.png b/indra/newview/skins/default/textures/icons/Progress_8.png deleted file mode 100644 index ac0e3f13f7b214eeb491a33fd3a057cc2f81e368..0000000000000000000000000000000000000000 Binary files a/indra/newview/skins/default/textures/icons/Progress_8.png and /dev/null differ diff --git a/indra/newview/skins/default/textures/icons/Progress_9.png b/indra/newview/skins/default/textures/icons/Progress_9.png deleted file mode 100644 index 17fb4a0335da68fb3f50fdc50cbe1cec529cf75e..0000000000000000000000000000000000000000 Binary files a/indra/newview/skins/default/textures/icons/Progress_9.png and /dev/null differ diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index 2bbb7b2b85cff04f3ea45079f1e9c31adcf415a2..d76932f76d017157f7707d1cf1ff80a2178af911 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -1,4 +1,4 @@ -<!-- +<!-- This file contains metadata about how to load, display, and scale textures for rendering in the UI. Images do *NOT* have to appear in this file in order to use them as textures in the UI...simply refer to them by filename (relative to textures directory). @@ -46,13 +46,9 @@ with the same filename but different name <texture name="AddItem_Press" file_name="icons/AddItem_Press.png" preload="false" /> <texture name="Arrow_Left_Off" file_name="navbar/Arrow_Left_Off.png" preload="true" /> - <texture name="Arrow_Left_Press" file_name="navbar/Arrow_Left_Press.png" preload="true" /> <texture name="Arrow_Right_Off" file_name="navbar/Arrow_Right_Off.png" preload="true" /> - <texture name="Arrow_Right_Press" file_name="navbar/Arrow_Right_Press.png" preload="true" /> <!-- - <texture name="Arrow_Left" file_name="widgets/Arrow_Left.png" preload="true" /> - <texture name="Arrow_Right" file_name="widgets/Arrow_Right.png" preload="true" /> --> <texture name="Arrow_Small_Up" file_name="widgets/Arrow_Small_Up.png" preload="true" /> @@ -64,49 +60,28 @@ with the same filename but different name <texture name="AudioMute_Off" file_name="icons/AudioMute_Off.png" preload="false" /> <texture name="AudioMute_Over" file_name="icons/AudioMute_Over.png" preload="false" /> - <texture name="AudioMute_Press" file_name="icons/AudioMute_Press.png" preload="false" /> <texture name="Audio_Off" file_name="icons/Audio_Off.png" preload="false" /> - <texture name="Audio_Over" file_name="icons/Audio_Over.png" preload="false" /> <texture name="Audio_Press" file_name="icons/Audio_Press.png" preload="false" /> <texture name="Avaline_Icon" file_name="icons/avaline_default_icon.jpg" preload="true" /> - <texture name="BackArrow_Disabled" file_name="icons/BackArrow_Disabled.png" preload="false" /> <texture name="BackArrow_Off" file_name="icons/BackArrow_Off.png" preload="false" /> - <texture name="BackArrow_Press" file_name="icons/BackArrow_Press.png" preload="false" /> <texture name="Blank" file_name="Blank.png" preload="false" /> - <texture name="BottomTray_BG" file_name="bottomtray/BottomTray_BG.png" preload="false" /> - <texture name="BottomTray_Scroll_Right" file_name="navbar/Arrow_Right_Off.png" preload="false" /> - <texture name="BottomTray_Scroll_Left" file_name="navbar/Arrow_Left_Off.png" preload="false" /> - <texture name="BuyArrow_Off" file_name="navbar/BuyArrow_Off.png" preload="true" scale.left="1" scale.top="1" scale.right="0" scale.bottom="0" /> <texture name="BuyArrow_Over" file_name="navbar/BuyArrow_Over.png" preload="true" scale.left="0" scale.top="1" scale.right="0" scale.bottom="0" /> <texture name="BuyArrow_Press" file_name="navbar/BuyArrow_Press.png" preload="true" scale.left="1" scale.top="1" scale.right="0" scale.bottom="0" /> - <texture name="Cam_Avatar_Disabled" file_name="bottomtray/Cam_Avatar_Disabled.png" preload="false" /> - <texture name="Cam_Avatar_Over" file_name="bottomtray/Cam_Avatar_Over.png" preload="false" /> <texture name="Cam_Avatar_Off" file_name="bottomtray/Cam_Avatar_Off.png" preload="false" /> - <texture name="Cam_Avatar_Press" file_name="bottomtray/Cam_Avatar_Press.png" preload="false" /> - <texture name="Cam_FreeCam_Disabled" file_name="bottomtray/Cam_FreeCam_Disabled.png" preload="false" /> <texture name="Cam_FreeCam_Off" file_name="bottomtray/Cam_FreeCam_Off.png" preload="false" /> - <texture name="Cam_FreeCam_Over" file_name="bottomtray/Cam_FreeCam_Over.png" preload="false" /> - <texture name="Cam_FreeCam_Press" file_name="bottomtray/Cam_FreeCam_Press.png" preload="false" /> - <texture name="Cam_Orbit_Disabled" file_name="bottomtray/Cam_Orbit_Disabled.png" preload="false" /> <texture name="Cam_Orbit_Off" file_name="bottomtray/Cam_Orbit_Off.png" preload="false" /> - <texture name="Cam_Orbit_Over" file_name="bottomtray/Cam_Orbit_Over.png" preload="false" /> - <texture name="Cam_Orbit_Press" file_name="bottomtray/Cam_Orbit_Press.png" preload="false" /> - <texture name="Cam_Pan_Disabled" file_name="bottomtray/Cam_Pan_Disabled.png" preload="false" /> <texture name="Cam_Pan_Off" file_name="bottomtray/Cam_Pan_Off.png" preload="false" /> - <texture name="Cam_Pan_Over" file_name="bottomtray/CCam_Pan_Over.png" preload="false" /> - <texture name="Cam_Pan_Press" file_name="bottomtray/Cam_Pan_Press.png" preload="false" /> <texture name="Cam_Preset_Back_Off" file_name="bottomtray/Cam_Preset_Back_Off.png" preload="false" /> <texture name="Cam_Preset_Back_On" file_name="bottomtray/Cam_Preset_Back_On.png" preload="false" /> <texture name="Cam_Preset_Eye_Off" file_name="bottomtray/Cam_Preset_Eye_Off.png" preload="false" /> - <texture name="Cam_Preset_Eye_On" file_name="bottomtray/Cam_Preset_Eye_On.png" preload="false" /> <texture name="Cam_Preset_Front_Off" file_name="bottomtray/Cam_Preset_Front_Off.png" preload="false" /> <texture name="Cam_Preset_Front_On" file_name="bottomtray/Cam_Preset_Front_On.png" preload="false" /> <texture name="Cam_Preset_Side_Off" file_name="bottomtray/Cam_Preset_Side_Off.png" preload="false" /> @@ -116,8 +91,6 @@ with the same filename but different name <texture name="Cam_Rotate_Out" file_name="bottomtray/Cam_Rotate_Out.png" preload="false" /> <texture name="Cam_Tracking_In" file_name="bottomtray/Cam_Tracking_In.png" preload="false" /> <texture name="Cam_Tracking_Out" file_name="bottomtray/Cam_Tracking_Out.png" preload="false" /> - <texture name="CameraView_Off" file_name="bottomtray/CameraView_Off.png" preload="false" /> - <texture name="CameraView_Over" file_name="bottomtray/CameraView_Over.png" preload="false" /> <texture name="Checkbox_Off_Disabled" file_name="widgets/Checkbox_Disabled.png" preload="true" /> <texture name="Checkbox_On_Disabled" file_name="widgets/Checkbox_On_Disabled.png" preload="true" /> @@ -127,8 +100,6 @@ with the same filename but different name <texture name="Checkbox_Press" file_name="widgets/Checkbox_Press.png" preload="true" /> <texture name="ComboButton_Disabled" file_name="widgets/ComboButton_Disabled.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" /> - <texture name="ComboButton_Over" file_name="widgets/ComboButton_Over.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" /> - <texture name="ComboButton_Press" file_name="widgets/ComboButton_Press.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" /> <texture name="ComboButton_Selected" file_name="widgets/ComboButton_Selected.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" /> <texture name="ComboButton_UpSelected" file_name="widgets/ComboButton_UpSelected.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" /> <texture name="ComboButton_Up_On_Selected" file_name="widgets/ComboButton_Up_On_Selected.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" /> @@ -136,25 +107,18 @@ with the same filename but different name <texture name="ComboButton_UpOff" file_name="widgets/ComboButton_UpOff.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" /> <texture name="Container" file_name="containers/Container.png" preload="false" /> - <texture name="DisclosureArrow_Closed_Off" file_name="widgets/DisclosureArrow_Closed_Off.png" preload="true" /> - <texture name="DisclosureArrow_Closed_Press" file_name="widgets/DisclosureArrow_Closed_Press.png" preload="true" /> <texture name="DisclosureArrow_Opened_Off" file_name="widgets/DisclosureArrow_Opened_Off.png" preload="true" /> - <texture name="DisclosureArrow_Opened_Press" file_name="widgets/DisclosureArrow_Opened_Press.png" preload="true" /> <texture name="DownArrow" file_name="bottomtray/DownArrow.png" preload="false" /> <texture name="DropDown_Disabled" file_name="widgets/DropDown_Disabled.png" preload="true" scale.left="4" scale.top="19" scale.right="99" scale.bottom="4" /> - <texture name="DropDown_Over" file_name="widgets/DropDown_Over.png" preload="true" scale.left="4" scale.top="19" scale.right="99" scale.bottom="4" /> <texture name="DropDown_Press" file_name="widgets/DropDown_Press.png" preload="true" scale.left="4" scale.top="19" scale.right="99" scale.bottom="4" /> - <texture name="DropDown_Selected" file_name="widgets/DropDown_Selected.png" preload="true" scale.left="4" scale.top="19" scale.right="99" scale.bottom="4" /> <texture name="DropDown_On" file_name="widgets/DropDown_On.png" preload="true" scale.left="4" scale.top="19" scale.right="99" scale.bottom="4" /> <texture name="DropDown_Off" file_name="widgets/DropDown_Off.png" preload="true" scale.left="4" scale.top="19" scale.right="99" scale.bottom="4" /> <texture name="DropTarget" file_name="widgets/DropTarget.png" preload="false" /> <texture name="ExternalBrowser_Off" file_name="icons/ExternalBrowser_Off.png" preload="false" /> - <texture name="ExternalBrowser_Over" file_name="icons/ExternalBrowser_Over.png" preload="false" /> - <texture name="ExternalBrowser_Press" file_name="icons/ExternalBrowser_Press.png" preload="false" /> <texture name="Favorite_Star_Active" file_name="navbar/Favorite_Star_Active.png" preload="false" /> <texture name="Favorite_Star_Off" file_name="navbar/Favorite_Star_Off.png" preload="false" /> @@ -162,8 +126,6 @@ with the same filename but different name <texture name="Favorite_Star_Over" file_name="navbar/Favorite_Star_Over.png" preload="false" /> <texture name="Favorite_Link_Over" file_name="navbar/Favorite_Link_Over.png" preload="false" /> - <texture name="FileMenu_BarSelect" file_name="navbar/FileMenu_BarSelect.png" preload="false" scale.left="2" scale.top="0" scale.right="2" scale.bottom="0" /> - <texture name="FileMenu_BG" file_name="navbar/FileMenu_BG.png" preload="false" /> <texture name="Flag" file_name="navbar/Flag.png" preload="false" /> @@ -174,22 +136,16 @@ with the same filename but different name <texture name="Generic_Group" file_name="icons/Generic_Group.png" preload="false" /> <texture name="icon_group.tga" file_name="icons/Generic_Group.png" preload="false" /> - <texture name="Generic_Group_Large" file_name="icons/Generic_Group_Large.png" preload="false" /> - <texture name="Generic_Object_Medium" file_name="icons/Generic_Object_Medium.png" preload="false" /> <texture name="Generic_Object_Small" file_name="icons/Generic_Object_Small.png" preload="false" /> - <texture name="Generic_Object_Large" file_name="icons/Generic_Object_Large.png" preload="false" /> <texture name="Generic_Person" file_name="icons/Generic_Person.png" preload="false" /> <texture name="Generic_Person_Large" file_name="icons/Generic_Person_Large.png" preload="false" /> <texture name="Health" file_name="icons/Health.png" preload="false" /> - <texture name="Help_Off" file_name="navbar/Help_Off.png" preload="false" /> <texture name="Help_Press" file_name="navbar/Help_Press.png" preload="false" /> - <texture name="History_Arrow" file_name="navbar/History_Arrow.png" preload="true" /> <texture name="Home_Off" file_name="navbar/Home_Off.png" preload="false" /> - <texture name="Home_Press" file_name="navbar/Home_Press.png" preload="false" /> <texture name="Icon_Close_Foreground" file_name="windows/Icon_Close_Foreground.png" preload="true" /> <texture name="Icon_Close_Press" file_name="windows/Icon_Close_Press.png" preload="true" /> @@ -206,7 +162,6 @@ with the same filename but different name <texture name="Icon_Help_Foreground" file_name="windows/Icon_Help_Foreground.png" preload="true" /> <texture name="Icon_Help_Press" file_name="windows/Icon_Help_Press.png" preload="true" /> - <texture name="Icon_Info" file_name="windows/Icon_Info.png" preload="false" /> <texture name="Icon_Minimize_Foreground" file_name="windows/Icon_Minimize_Foreground.png" preload="true" /> <texture name="Icon_Minimize_Press" file_name="windows/Icon_Minimize_Press.png" preload="true" /> @@ -225,13 +180,11 @@ with the same filename but different name <texture name="Inspector_Hover" file_name="windows/Inspector_Hover.png" preload="false" /> <texture name="Inspector_I" file_name="windows/Inspector_I.png" preload="false" /> - <texture name="Inv_Acessories" file_name="icons/Inv_Accessories.png" preload="false" /> <texture name="Inv_Alpha" file_name="icons/Inv_Alpha.png" preload="false" /> <texture name="Inv_Animation" file_name="icons/Inv_Animation.png" preload="false" /> <texture name="Inv_BodyShape" file_name="icons/Inv_BodyShape.png" preload="false" /> <texture name="Inv_CallingCard" file_name="icons/Inv_CallingCard.png" preload="false" /> <texture name="Inv_Clothing" file_name="icons/Inv_Clothing.png" preload="false" /> - <texture name="Inv_DangerousScript" file_name="icons/Inv_DangerousScript.png" preload="false" /> <texture name="Inv_Eye" file_name="icons/Inv_Eye.png" preload="false" /> <texture name="Inv_FolderClosed" file_name="icons/Inv_FolderClosed.png" preload="false" /> <texture name="Inv_FolderOpen" file_name="icons/Inv_FolderOpen.png" preload="false" /> @@ -239,7 +192,6 @@ with the same filename but different name <texture name="Inv_Gloves" file_name="icons/Inv_Gloves.png" preload="false" /> <texture name="Inv_Hair" file_name="icons/Inv_Hair.png" preload="false" /> <texture name="Inv_LinkItem" file_name="icons/Inv_LinkItem.png" preload="false" /> - <texture name="Inv_LinkItem_Broken" file_name="icons/Inv_LinkItem_Broken.png" preload="false" /> <texture name="Inv_LinkFolder" file_name="icons/Inv_LinkFolder.png" preload="false" /> <texture name="Inv_Jacket" file_name="icons/Inv_Jacket.png" preload="false" /> <texture name="Inv_LookFolderOpen" file_name="icons/Inv_LookFolderOpen.png" preload="false" /> @@ -260,7 +212,6 @@ with the same filename but different name <texture name="Inv_Sound" file_name="icons/Inv_Sound.png" preload="false" /> <texture name="Inv_Tattoo" file_name="icons/Inv_Tattoo.png" preload="false" /> <texture name="Inv_Texture" file_name="icons/Inv_Texture.png" preload="false" /> - <texture name="Inv_Trash" file_name="icons/Inv_Trash.png" preload="false" /> <texture name="Inv_Underpants" file_name="icons/Inv_Underpants.png" preload="false" /> <texture name="Inv_Undershirt" file_name="icons/Inv_Undershirt.png" preload="false" /> @@ -273,9 +224,7 @@ with the same filename but different name <texture name="Lock" file_name="icons/Lock.png" preload="false" /> <texture name="Lock2" file_name="navbar/Lock.png" preload="false" /> - <texture name="Login_Pod" file_name="windows/Login_Pod.png" preload="true" /> - <texture name="Microphone_Mute" file_name="icons/Microphone_Mute.png" preload="false" /> <texture name="Microphone_On" file_name="icons/Microphone_On.png" preload="false" /> <texture name="MinusItem_Disabled" file_name="icons/MinusItem_Disabled.png" preload="false" /> @@ -284,18 +233,9 @@ with the same filename but different name <texture name="menu_separator" file_name="navbar/FileMenu_Divider.png" scale.left="4" scale.top="166" scale.right="0" scale.bottom="0" /> - <texture name="Move_Fly_Disabled" file_name="bottomtray/Move_Fly_Disabled.png" preload="false" /> <texture name="Move_Fly_Off" file_name="bottomtray/Move_Fly_Off.png" preload="false" /> - <texture name="Move_Fly_Over" file_name="bottomtray/Move_Fly_Over.png" preload="false" /> - <texture name="Move_Fly_Press" file_name="bottomtray/Move_Fly_Press.png" preload="false" /> - <texture name="Move_Run_Disabled" file_name="bottomtray/Move_Run_Disabled.png" preload="false" /> <texture name="Move_Run_Off" file_name="bottomtray/Move_Run_Off.png" preload="false" /> - <texture name="Move_Run_Over" file_name="bottomtray/Move_Run_Over.png" preload="false" /> - <texture name="Move_Run_Press" file_name="bottomtray/Move_Run_Press.png" preload="false" /> - <texture name="Move_Walk_Disabled" file_name="bottomtray/Move_Walk_Disabled.png" preload="false" /> <texture name="Move_Walk_Off" file_name="bottomtray/Move_Walk_Off.png" preload="false" /> - <texture name="Move_Walk_Over" file_name="bottomtray/Move_Walk_Over.png" preload="false" /> - <texture name="Move_Walk_Press" file_name="bottomtray/Move_Walk_Press.png" preload="false" /> <texture name="Movement_Backward_Off" file_name="bottomtray/Movement_Backward_Off.png" preload="false" /> <texture name="Movement_Backward_On" file_name="bottomtray/Movement_Backward_On.png" preload="false" /> <texture name="Movement_Down_Off" file_name="bottomtray/Movement_Down_Off.png" preload="false" /> @@ -312,10 +252,6 @@ with the same filename but different name <texture name="NavBar_BG_NoFav" file_name="navbar/NavBar_BG_NoFav.png" preload="true" scale.left="1" scale.top="1" scale.right="0" scale.bottom="0" /> <texture name="NavBar_BG" file_name="navbar/NavBar_BG.png" preload="true" scale.left="1" scale.top="1" scale.right="0" scale.bottom="0" /> - <texture name="NearbyVoice_Lvl1" file_name="bottomtray/NearbyVoice_Lvl1.png" preload="false" /> - <texture name="NearbyVoice_Lvl2" file_name="bottomtray/NearbyVoice_Lvl2.png" preload="false" /> - <texture name="NearbyVoice_Lvl3" file_name="bottomtray/NearbyVoice_Lvl3.png" preload="false" /> - <texture name="NearbyVoice_On" file_name="bottomtray/NearbyVoice_On.png" preload="false" /> <texture name="Notices_Unread" file_name="bottomtray/Notices_Unread.png" preload="true" /> @@ -357,27 +293,15 @@ with the same filename but different name <texture name="OptionsMenu_Off" file_name="icons/OptionsMenu_Off.png" preload="false" /> <texture name="OptionsMenu_Press" file_name="icons/OptionsMenu_Press.png" preload="false" /> - <texture name="Overhead_Arrow_L" file_name="world/Overhead_Arrow_L.png" preload="false" /> - <texture name="Overhead_Arrow_M" file_name="world/Overhead_Arrow_M.png" preload="false" /> - <texture name="Overhead_Arrow_S" file_name="world/Overhead_Arrow_S.png" preload="false" /> - <texture name="Overhead_L" file_name="world/Overhead_L.png" preload="false" /> - <texture name="Overhead_M" file_name="world/Overhead_M.png" preload="false" /> - <texture name="Overhead_S" file_name="world/Overhead_S.png" preload="false" /> - <texture name="Parcel_Evry_Color" file_name="icons/Parcel_Evry_Color.png" preload="false" /> <texture name="Parcel_Exp_Color" file_name="icons/Parcel_Exp_Color.png" preload="false" /> - <texture name="Parcel_M_Color" file_name="icons/Parcel_M_Color.png" preload="false" /> <texture name="Parcel_Build_Dark" file_name="icons/Parcel_Build_Dark.png" preload="false" /> <texture name="Parcel_BuildNo_Dark" file_name="icons/Parcel_BuildNo_Dark.png" preload="false" /> <texture name="Parcel_Damage_Dark" file_name="icons/Parcel_Damage_Dark.png" preload="false" /> <texture name="Parcel_DamageNo_Dark" file_name="icons/Parcel_DamageNo_Dark.png" preload="false" /> - <texture name="Parcel_Evry_Dark" file_name="icons/Parcel_Evry_Dark.png" preload="false" /> - <texture name="Parcel_Exp_Dark" file_name="icons/Parcel_Exp_Dark.png" preload="false" /> <texture name="Parcel_Fly_Dark" file_name="icons/Parcel_Fly_Dark.png" preload="false" /> <texture name="Parcel_FlyNo_Dark" file_name="icons/Parcel_FlyNo_Dark.png" preload="false" /> - <texture name="Parcel_ForSale_Dark" file_name="icons/Parcel_ForSale_Dark.png" preload="false" /> - <texture name="Parcel_ForSaleNo_Dark" file_name="icons/Parcel_ForSaleNo_Dark.png" preload="false" /> <texture name="Parcel_Health_Dark" file_name="icons/Parcel_Health_Dark.png" preload="false" /> <texture name="Parcel_M_Dark" file_name="icons/Parcel_M_Dark.png" preload="false" /> <texture name="Parcel_PG_Dark" file_name="icons/Parcel_PG_Dark.png" preload="false" /> @@ -389,22 +313,13 @@ with the same filename but different name <texture name="Parcel_Voice_Dark" file_name="icons/Parcel_Voice_Dark.png" preload="false" /> <texture name="Parcel_VoiceNo_Dark" file_name="icons/Parcel_VoiceNo_Dark.png" preload="false" /> - <texture name="Parcel_Build_Light" file_name="icons/Parcel_Build_Light.png" preload="false" /> <texture name="Parcel_BuildNo_Light" file_name="icons/Parcel_BuildNo_Light.png" preload="false" /> - <texture name="Parcel_Damage_Light" file_name="icons/Parcel_Damage_Light.png" preload="false" /> - <texture name="Parcel_DamageNo_Light" file_name="icons/Parcel_DamageNo_Light.png" preload="false" /> - <texture name="Parcel_Evry_Light" file_name="icons/Parcel_Evry_Light.png" preload="false" /> - <texture name="Parcel_Exp_Light" file_name="icons/Parcel_Exp_Light.png" preload="false" /> - <texture name="Parcel_Fly_Light" file_name="icons/Parcel_Fly_Light.png" preload="false" /> <texture name="Parcel_FlyNo_Light" file_name="icons/Parcel_FlyNo_Light.png" preload="false" /> <texture name="Parcel_ForSale_Light" file_name="icons/Parcel_ForSale_Light.png" preload="false" /> - <texture name="Parcel_ForSaleNo_Light" file_name="icons/Parcel_ForSaleNo_Light.png" preload="false" /> <texture name="Parcel_M_Light" file_name="icons/Parcel_M_Light.png" preload="false" /> <texture name="Parcel_PG_Light" file_name="icons/Parcel_PG_Light.png" preload="false" /> - <texture name="Parcel_Push_Light" file_name="icons/Parcel_Push_Light.png" preload="false" /> <texture name="Parcel_PushNo_Light" file_name="icons/Parcel_PushNo_Light.png" preload="false" /> <texture name="Parcel_R_Light" file_name="icons/Parcel_R_Light.png" preload="false" /> - <texture name="Parcel_Scripts_Light" file_name="icons/Parcel_Scripts_Light.png" preload="false" /> <texture name="Parcel_ScriptsNo_Light" file_name="icons/Parcel_ScriptsNo_Dark.png" preload="false" /> <texture name="Parcel_Voice_Light" file_name="icons/Parcel_Voice_Light.png" preload="false" /> <texture name="Parcel_VoiceNo_Light" file_name="icons/Parcel_VoiceNo_Light.png" preload="false" /> @@ -416,18 +331,6 @@ with the same filename but different name <texture name="Play_Over" file_name="icons/Play_Over.png" preload="false" /> <texture name="Play_Press" file_name="icons/Play_Press.png" preload="false" /> - <texture name="Progress_1" file_name="icons/Progress_1.png" preload="false" /> - <texture name="Progress_2" file_name="icons/Progress_2.png" preload="false" /> - <texture name="Progress_3" file_name="icons/Progress_3.png" preload="false" /> - <texture name="Progress_4" file_name="icons/Progress_4.png" preload="false" /> - <texture name="Progress_5" file_name="icons/Progress_5.png" preload="false" /> - <texture name="Progress_6" file_name="icons/Progress_6.png" preload="false" /> - <texture name="Progress_7" file_name="icons/Progress_7.png" preload="false" /> - <texture name="Progress_8" file_name="icons/Progress_8.png" preload="false" /> - <texture name="Progress_9" file_name="icons/Progress_9.png" preload="false" /> - <texture name="Progress_10" file_name="icons/Progress_10.png" preload="false" /> - <texture name="Progress_11" file_name="icons/Progress_11.png" preload="false" /> - <texture name="Progress_12" file_name="icons/Progress_12.png" preload="false" /> <texture name="ProgressBar" file_name="widgets/ProgressBar.png" preload="true" scale.left="4" scale.top="10" scale.right="48" scale.bottom="2" /> <texture name="ProgressTrack" file_name="widgets/ProgressTrack.png" preload="true" scale.left="4" scale.top="13" scale.right="148" scale.bottom="2" /> @@ -436,7 +339,6 @@ with the same filename but different name <texture name="PushButton_Off" file_name="widgets/PushButton_Off.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" /> <texture name="PushButton_On" file_name="widgets/PushButton_On.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" /> <texture name="PushButton_On_Selected" file_name="widgets/PushButton_On_Selected.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" /> - <texture name="PushButton_On_Disabled" file_name="widgets/PushButton_On_Disabled.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" /> <texture name="PushButton_Press" file_name="widgets/PushButton_Press.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" /> <texture name="PushButton_Selected" file_name="widgets/PushButton_Selected.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" /> <texture name="PushButton_Selected_Press" file_name="widgets/PushButton_Selected_Press.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" /> @@ -449,12 +351,8 @@ with the same filename but different name <texture name="RadioButton_Disabled" file_name="widgets/RadioButton_Disabled.png" preload="true" /> <texture name="RadioButton_On_Disabled" file_name="widgets/RadioButton_On_Disabled.png" preload="true" /> - <texture name="Rec_Off" file_name="icons/Rec_Off.png" preload="false" /> - <texture name="Rec_On" file_name="icons/Rec_On.png" preload="false" /> - <texture name="Refresh_Disabled" file_name="icons/Refresh_Disabled.png" preload="false" /> <texture name="Refresh_Off" file_name="icons/Refresh_Off.png" preload="false" /> - <texture name="Refresh_Press" file_name="icons/Refresh_Press.png" preload="false" /> <texture name="Resize_Corner" file_name="windows/Resize_Corner.png" preload="true" /> @@ -471,11 +369,6 @@ with the same filename but different name <texture name="ScrollTrack_Vert" file_name="widgets/ScrollTrack_Vert.png" preload="true" scale.left="2" scale.top="40" scale.bottom="13" scale.right="0" /> <texture name="ScrollTrack_Horiz" file_name="widgets/ScrollTrack_Horiz.png" preload="true" scale.left="4" scale.top="0" scale.bottom="0" scale.right="2" /> - <texture name="ScrubberThumb_Disabled" file_name="widgets/ScrubberThumb_Disabled.png" preload="false" /> - <texture name="ScrubberThumb_Focus" file_name="widgets/ScrubberThumb_Focus.png" preload="false" /> - <texture name="ScrubberThumb_Off" file_name="widgets/ScrubberThumb_Off.png" preload="false" /> - <texture name="ScrubberThumb_Over" file_name="widgets/ScrubberThumb_Over.png" preload="false" /> - <texture name="ScrubberThumb_Press" file_name="widgets/ScrubberThumb_Press.png" preload="false" /> <texture name="Search" file_name="navbar/Search.png" preload="false" /> @@ -488,8 +381,6 @@ with the same filename but different name <texture name="SegmentedBtn_Left_Selected_Press" file_name="widgets/SegmentedBtn_Left_Selected_Press.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" /> <texture name="SegmentedBtn_Left_Selected_Disabled" file_name="widgets/SegmentedBtn_Left_Selected_Disabled.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" /> - <texture name="SegmentedBtn_Middle_Off" file_name="widgets/SegmentedBtn_Middle_Off.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" /> - <texture name="SegmentedBtn_Middle_Press" file_name="widgets/SegmentedBtn_Middle_Press.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" /> <texture name="SegmentedBtn_Middle_Disabled" file_name="widgets/SegmentedBtn_Middle_Disabled.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" /> <texture name="SegmentedBtn_Middle_Selected" file_name="widgets/SegmentedBtn_Middle_Selected.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" /> <texture name="SegmentedBtn_Middle_Selected_Press" file_name="widgets/SegmentedBtn_Middle_Selected_Press.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" /> @@ -504,11 +395,7 @@ with the same filename but different name <texture name="SegmentedBtn_Right_Selected_Disabled" file_name="widgets/SegmentedBtn_Right_Selected_Disabled.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" /> <texture name="SkipBackward_Off" file_name="icons/SkipBackward_Off.png" preload="false" /> - <texture name="SkipBackward_Over" file_name="icons/SkipBackward_Over.png" preload="false" /> - <texture name="SkipBackward_Press" file_name="icons/SkipBackward_Press.png" preload="false" /> <texture name="SkipForward_Off" file_name="icons/SkipForward_Off.png" preload="false" /> - <texture name="SkipForward_Over" file_name="icons/SkipForward_Over.png" preload="false" /> - <texture name="SkipForward_Press" file_name="icons/SkipForward_Press.png" preload="false" /> <texture name="SliderTrack_Horiz" file_name="widgets/SliderTrack_Horiz.png" scale.left="4" scale.top="4" scale.right="100" scale.bottom="2" /> <texture name="SliderTrack_Vert" file_name="widgets/SliderTrack_Vert.png" scale.left="2" scale.top="100" scale.right="4" scale.bottom="4" /> @@ -521,63 +408,35 @@ with the same filename but different name <texture name="Unknown_Icon" file_name="icons/unknown_icon.png" preload="true" /> <texture name="Snapshot_Off" file_name="bottomtray/Snapshot_Off.png" preload="true" scale.left="4" scale.top="19" scale.right="22" scale.bottom="4" /> - <texture name="Snapshot_Over" file_name="bottomtray/Snapshot_Over.png" preload="false" /> - <texture name="Snapshot_Press" file_name="bottomtray/Snapshot_Press.png" preload="false" /> <texture name="startup_logo" file_name="windows/startup_logo.png" preload="true" /> - <texture name="Stepper_Down_Disabled" file_name="widgets/Stepper_Down_Disabled.png" preload="false" /> <texture name="Stepper_Down_Off" file_name="widgets/Stepper_Down_Off.png" preload="false" /> <texture name="Stepper_Down_Press" file_name="widgets/Stepper_Down_Press.png" preload="false" /> - <texture name="Stepper_Up_Disabled" file_name="widgets/Stepper_Up_Disabled.png" preload="false" /> <texture name="Stepper_Up_Off" file_name="widgets/Stepper_Up_Off.png" preload="false" /> <texture name="Stepper_Up_Press" file_name="widgets/Stepper_Up_Press.png" preload="false" /> <texture name="Stop_Off" file_name="icons/Stop_Off.png" preload="false" /> - <texture name="Stop_Over" file_name="icons/Stop_Over.png" preload="false" /> - <texture name="Stop_Press" file_name="icons/Stop_Press.png" preload="false" /> <texture name="StopReload_Off" file_name="icons/StopReload_Off.png" preload="false" /> <texture name="StopReload_Over" file_name="icons/StopReload_Over.png" preload="false" /> - <texture name="StopReload_Press" file_name="icons/StopReload_Press.png" preload="false" /> - <texture name="TabIcon_Appearance_Large" file_name="taskpanel/TabIcon_Appearance_Large.png" preload="false" /> <texture name="TabIcon_Appearance_Off" file_name="taskpanel/TabIcon_Appearance_Off.png" preload="false" /> - <texture name="TabIcon_Appearance_Over" file_name="taskpanel/TabIcon_Appearance_Over.png" preload="false" /> <texture name="TabIcon_Appearance_Selected" file_name="taskpanel/TabIcon_Appearance_Selected.png" preload="false" /> <texture name="TabIcon_Close_Off" file_name="taskpanel/TabIcon_Close_Off.png" preload="false" /> - <texture name="TabIcon_Close_Over" file_name="taskpanel/TabIcon_Close_Over.png" preload="false" /> - <texture name="TabIcon_Inventory_Large" file_name="taskpanel/TabIcon_Inventory_Large.png" preload="false" /> - <texture name="TabIcon_Inventory_Off" file_name="taskpanel/TabIcon_Inventory_Off.png" preload="false" /> - <texture name="TabIcon_Inventory_Over" file_name="taskpanel/TabIcon_Inventory_Over.png" preload="false" /> - <texture name="TabIcon_Inventory_Selected" file_name="taskpanel/TabIcon_Inventory_Selected.png" preload="false" /> - <texture name="TabIcon_Home_Large" file_name="taskpanel/TabIcon_Home_Large.png" preload="false" /> <texture name="TabIcon_Home_Off" file_name="taskpanel/TabIcon_Home_Off.png" preload="false" /> - <texture name="TabIcon_Home_Over" file_name="taskpanel/TabIcon_Home_Over.png" preload="false" /> <texture name="TabIcon_Home_Selected" file_name="taskpanel/TabIcon_Home_Selected.png" preload="false" /> - <texture name="TabIcon_Me_Large" file_name="taskpanel/TabIcon_Me_Large.png" preload="false" /> <texture name="TabIcon_Me_Off" file_name="taskpanel/TabIcon_Me_Off.png" preload="false" /> - <texture name="TabIcon_Me_Over" file_name="taskpanel/TabIcon_Me_Over.png" preload="false" /> <texture name="TabIcon_Me_Selected" file_name="taskpanel/TabIcon_Me_Selected.png" preload="false" /> <texture name="TabIcon_Open_Off" file_name="taskpanel/TabIcon_Open_Off.png" preload="false" /> - <texture name="TabIcon_Open_Over" file_name="taskpanel/TabIcon_Open_Over.png" preload="false" /> - <texture name="TabIcon_People_Large" file_name="taskpanel/TabIcon_People_Large.png" preload="false" /> <texture name="TabIcon_People_Off" file_name="taskpanel/TabIcon_People_Off.png" preload="false" /> - <texture name="TabIcon_People_Over" file_name="taskpanel/TabIcon_People_Over.png" preload="false" /> <texture name="TabIcon_People_Selected" file_name="taskpanel/TabIcon_People_Selected.png" preload="false" /> <texture name="TabIcon_Places_Large" file_name="taskpanel/TabIcon_Places_Large.png" preload="false" /> <texture name="TabIcon_Places_Off" file_name="taskpanel/TabIcon_Places_Off.png" preload="false" /> - <texture name="TabIcon_Places_Over" file_name="taskpanel/TabIcon_Places_Over.png" preload="false" /> <texture name="TabIcon_Places_Selected" file_name="taskpanel/TabIcon_Places_Selected.png" preload="false" /> - <texture name="TabIcon_Things_Large" file_name="taskpanel/TabIcon_Things_Large.png" preload="false" /> <texture name="TabIcon_Things_Off" file_name="taskpanel/TabIcon_Things_Off.png" preload="false" /> - <texture name="TabIcon_Things_Over" file_name="taskpanel/TabIcon_Things_Over.png" preload="false" /> <texture name="TabIcon_Things_Selected" file_name="taskpanel/TabIcon_Things_Selected.png" preload="false" /> - <texture name="TabTop_Divider" file_name="containers/TabTop_Divider.png" preload="false" /> - <texture name="TabTop_Left_Press" file_name="containers/TabTop_Left_Press.png" preload="false" /> - <texture name="TabTop_Middle_Press" file_name="containers/TabTop_Middle_Press.png" preload="false" /> <texture name="TabTop_Right_Off" file_name="containers/TabTop_Right_Off.png" preload="false" scale.left="8" scale.top="8" scale.right="62" scale.bottom="9" /> - <texture name="TabTop_Right_Press" file_name="containers/TabTop_Right_Press.png" preload="false" /> <texture name="TabTop_Right_Selected" file_name="containers/TabTop_Right_Selected.png" preload="false" scale.left="8" scale.top="8" scale.right="62" scale.bottom="9" /> <texture name="TabTop_Middle_Off" file_name="containers/TabTop_Middle_Off.png" preload="false" scale.left="8" scale.top="8" scale.right="120" scale.bottom="9" /> <texture name="TabTop_Middle_Selected" file_name="containers/TabTop_Middle_Selected.png" preload="false" scale.left="8" scale.top="8" scale.right="96" scale.bottom="9" /> @@ -586,8 +445,6 @@ with the same filename but different name <texture name="TaskPanel_Tab_Off" file_name="taskpanel/TaskPanel_Tab_Off.png" preload="false" scale.left="4" scale.top="29" scale.right="36" scale.bottom="4" /> <texture name="TaskPanel_Tab_Selected" file_name="taskpanel/TaskPanel_Tab_Selected.png" preload="false" scale.left="5" scale.top="30" scale.right="36" scale.bottom="5" /> - <texture name="TaskPanel_BG" file_name="taskpanel/TaskPanel_BG.png" preload="false" scale.left="4" scale.top="146" scale.right="146" scale.bottom="4" /> - <texture name="TaskPanel_Tab_Unselected" file_name="taskpanel/TaskPanel_Tab_Over.png" preload="false" scale.left="5" scale.top="30" scale.right="36" scale.bottom="5" /> <texture name="TextField_Search_Disabled" file_name="widgets/TextField_Search_Disabled.png" preload="true" scale.left="9" scale.top="12" scale.right="248" scale.bottom="12" /> <texture name="TextField_Off" file_name="widgets/TextField_Off.png" preload="true" scale.left="9" scale.top="12" scale.right="248" scale.bottom="12" /> @@ -596,7 +453,6 @@ with the same filename but different name <texture name="TextField_Disabled" file_name="widgets/TextField_Disabled.png" preload="true" scale.left="9" scale.top="12" scale.right="248" scale.bottom="12" /> <texture name="TextField_Active" file_name="widgets/TextField_Active.png" preload="true" scale.left="9" scale.top="12" scale.right="248" scale.bottom="12" /> - <texture name="TimeBasedMediaBackground" file_name="windows/TimeBasedMediaBackground.png" preload="false" /> <texture name="Toast_CloseBtn" file_name="windows/Toast_CloseBtn.png" preload="true" /> <texture name="Toast_Background" file_name="windows/Toast_Background.png" preload="true" @@ -605,28 +461,19 @@ with the same filename but different name scale.left="4" scale.top="28" scale.right="60" scale.bottom="4" /> <texture name="Tool_Create" file_name="build/Tool_Create.png" preload="false" /> - <texture name="Tool_Create_Selected" file_name="build/Tool_Create_Selected.png" preload="false" /> <texture name="Tool_Dozer" file_name="build/Tool_Dozer.png" preload="false" /> - <texture name="Tool_Dozer_Selected" file_name="build/Tool_Dozer_Selected.png" preload="false" /> <texture name="Tool_Face" file_name="build/Tool_Face.png" preload="false" /> - <texture name="Tool_Face_Selected" file_name="build/Tool_Face_Selected.png" preload="false" /> <texture name="Tool_Grab" file_name="build/Tool_Grab.png" preload="false" /> - <texture name="Tool_Grab_Selected" file_name="build/Tool_Grab_Selected.png" preload="false" /> <texture name="Tool_Zoom" file_name="build/Tool_Zoom.png" preload="false" /> - <texture name="Tool_Zoom_Selected" file_name="build/Tool_Zoom_Selected.png" preload="false" /> - <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" /> <texture name="Tooltip" file_name="widgets/Tooltip.png" preload="true" scale.left="2" scale.top="16" scale.right="100" scale.bottom="3" /> @@ -636,7 +483,6 @@ with the same filename but different name <texture name="TrashItem_Press" file_name="icons/TrashItem_Press.png" preload="false" /> <texture name="Unread_Chiclet" file_name="bottomtray/Unread_Chiclet.png" preload="false" /> - <texture name="Unread_Msg" file_name="bottomtray/Unread_Msg.png" preload="false" /> <texture name="Unread_IM" file_name="bottomtray/Unread_IM.png" preload="false" /> <texture name="Volume_Background" file_name="windows/Volume_Background.png" preload="false" @@ -651,10 +497,7 @@ with the same filename but different name <texture name="WellButton_Lit" file_name="bottomtray/WellButton_Lit.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" /> <texture name="WellButton_Lit_Selected" file_name="bottomtray/WellButton_Lit_Selected.png" preload="true" scale.left="4" scale.top="19" scale.right="28" scale.bottom="4" /> - <texture name="WebBasedMediaBackground" file_name="windows/WebBasedMediaBackground.png" preload="false" /> - <texture name="Widget_DownArrow" file_name="icons/Widget_DownArrow.png" preload="true" /> - <texture name="Widget_UpArrow" file_name="icons/Widget_UpArrow.png" preload="true" /> <texture name="Window_Background" file_name="windows/Window_Background.png" preload="true" scale.left="4" scale.top="24" scale.right="26" scale.bottom="4" /> @@ -668,17 +511,7 @@ with the same filename but different name <texture name="YouAreHere_Badge" file_name="icons/YouAreHere_Badge.png" preload="false" /> <texture name="Zoom_Off" file_name="icons/Zoom_Off.png" preload="false" /> - <texture name="Zoom_Over" file_name="icons/Zoom_Over.png" preload="false" /> - <texture name="Zoom_Press" file_name="icons/Zoom_Press.png" preload="false" /> <texture name="UnZoom_Off" file_name="icons/UnZoom_Off.png" preload="false" /> - <texture name="UnZoom_Over" file_name="icons/UnZoom_Over.png" preload="false" /> - <texture name="UnZoom_Press" file_name="icons/UnZoom_Press.png" preload="false" /> - <texture name="PowerOn_Off" file_name="icons/PowerOn_Off.png" preload="false" /> - <texture name="PowerOn_Over" file_name="icons/PowerOn_Over.png" preload="false" /> - <texture name="PowerOn_Press" file_name="icons/PowerOn_Press.png" preload="false" /> - <texture name="PowerOff_Off" file_name="icons/PowerOff_Off.png" preload="false" /> - <texture name="PowerOff_Over" file_name="icons/PowerOff_Over.png" preload="false" /> - <texture name="PowerOff_Press" file_name="icons/PowerOff_Press.png" preload="false" /> <texture name="pixiesmall.j2c" use_mips="true" /> <texture name="script_error.j2c" use_mips="true" /> @@ -688,7 +521,6 @@ with the same filename but different name <texture name="transparent.j2c" use_mips="true" /> <!--WARNING OLD ART BELOW *do not use*--> - <texture name="icn_chatbar.tga" /> <texture name="icn_media_web.tga" preload="true" /> <texture name="icn_media_movie.tga" preload="true" /> <texture name="icn_speaker-muted_dark.tga" /> @@ -718,8 +550,6 @@ with the same filename but different name <texture name="icn_label_media.tga" /> <texture name="icn_rounded-text-field.tga" scale.left="14" scale.bottom="16" scale.top="16" scale.right="114" /> - <texture name="toggle_button_off" file_name="toggle_button_off.png" preload="true" /> - <texture name="toggle_button_selected" file_name="toggle_button_selected.png" preload="true" /> <texture name="color_swatch_alpha.tga" preload="true" /> <texture name="button_anim_pause.tga" /> @@ -729,15 +559,11 @@ with the same filename but different name <texture name="crosshairs.tga" /> <texture name="direction_arrow.tga" file_name="world/BeaconArrow.png" /> - <texture name="icon_auction.tga" /> <texture name="icon_avatar_offline.tga" /> <texture name="icon_avatar_online.tga" /> <texture name="icon_day_cycle.tga" /> <texture name="icon_diurnal.tga" /> - <texture name="icon_event.tga" /> - <texture name="icon_event_mature.tga" /> <texture name="icon_for_sale.tga" /> - <texture name="icon_place_for_sale.tga" /> <texture name="icon_top_pick.tga" /> <texture name="inv_folder_mesh.tga"/> @@ -750,7 +576,6 @@ with the same filename but different name <texture name="map_avatar_16.tga" /> <texture name="map_avatar_8.tga" /> - <texture name="map_avatar_you_8.tga" /> <texture name="map_event.tga" /> <texture name="map_event_mature.tga" /> <texture name="map_home.tga" /> @@ -759,15 +584,10 @@ with the same filename but different name <texture name="map_track_16.tga" /> <texture name="notify_caution_icon.tga" /> - <texture name="notify_next.png" preload="true" /> - <texture name="notify_box_icon.tga" /> <texture name="icn_active-speakers-dot-lvl0.tga" /> <texture name="icn_active-speakers-dot-lvl1.tga" /> <texture name="icn_active-speakers-dot-lvl2.tga" /> - <texture name="icn_active-speakers-typing1.tga" /> - <texture name="icn_active-speakers-typing2.tga" /> - <texture name="icn_active-speakers-typing3.tga" /> <texture name="icn_voice_ptt-off.tga" /> <texture name="icn_voice_ptt-on.tga" /> @@ -783,5 +603,4 @@ with the same filename but different name <texture name="default_profile_picture.j2c" /> <texture name="locked_image.j2c" /> - <texture name="media_floater_border_16.png" scale_top="12" scale_left="4" scale_bottom="4" scale_right="12" /> </textures> diff --git a/indra/newview/skins/default/xui/en/alert_line_editor.xml b/indra/newview/skins/default/xui/en/alert_line_editor.xml index 97991153d88fda1b3a4ab7589e3c20c8fba7953c..82bf5fc8dad1463c5487051a29d0a955114eabf3 100644 --- a/indra/newview/skins/default/xui/en/alert_line_editor.xml +++ b/indra/newview/skins/default/xui/en/alert_line_editor.xml @@ -1,7 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <line_editor select_on_focus="false" - handle_edit_keys_directly="false" revert_on_esc="true" commit_on_focus_lost="true" ignore_tab="true" diff --git a/indra/newview/skins/default/xui/en/floater_about.xml b/indra/newview/skins/default/xui/en/floater_about.xml index 46208d311df6d3115e9fcb235cfcd3aa7fd91dcc..76970919e77a15de5bcdc0cb8c68433a4fb62bf6 100644 --- a/indra/newview/skins/default/xui/en/floater_about.xml +++ b/indra/newview/skins/default/xui/en/floater_about.xml @@ -110,19 +110,14 @@ Packets Lost: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number top="5" width="435" word_wrap="true"> -Second Life is brought to you by 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. +Second Life is brought to you by Philip, Tessa, Andrew, Cory, Ian, James, Phoenix, Ryan, Haney, Dan, Char, Ben, John, Tanya, Eddie, Richard, Mitch, Doug, Eric, Frank, Bruce, Aaron, Peter, Alice, Charlie, Debra, Eileen, Helen, Janet, Steffan, Steve, Tom, Mark, Hunter, Xenon, Burgess, Bill, Jim, Lee, Hamlet, Daniel, Jeff, Todd, Sarah, Tim, Stephanie, Colin, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Jack, Vektor, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Jesse, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Yuko, Makiko, Thomas, Harry, Seth, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Brad, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, Beez, Milo, Hermia, Red, Thrax, Gulliver, Joe, Sally, Paul, Jose, Rejean, Dore, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, Dustin, George, Del, Matthew, Cat, Jacqui, Adrian, Viola, Alfred, Noel, Irfan, Yool, Rika, Jane, Frontier, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Jeremy, JP, Jake, Anthony, Maurice, Madhavi, Leopard, Kyle, Joon, Bert, Belinda, Jon, Kristi, Bridie, Pramod, Socrates, Maria, Aric, Adreanne, Jay, Kari, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Colossus, Zen, BigPapi, Pastrami, Kurz, Mani, Neuro, Mel, Sardonyx, MJ, Rowan, Sgt, Elvis, Samuel, Leo, Bryan, Niko, Austin, Soft, Poppy, Rachel, Aki, Banzai, Alexa, Sue, Bender, CG, Angelo, 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, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Rothman, Niall, Marin, Allison, Katie, Dawn, Dusty, Katt, Judy, Andrea, Ambroff, Infinity, Rico, Gail, Kalpana, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, 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, Maestro, Simone, Yang, T, Shannon, Nelson, Khanh, Scott, Courtney, Charlene, Quixote, Susan, Zed, Amanda, Katelin, Enkidu, Roxie, Esbee, JoRoan, Scarlet, Tay, Kevin, Wolfgang, Johnny, Ray, Andren, Merov, Bob, Rand, Howard, Callen, Heff, Galen, Newell, 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, Ashley, JessieAnn, Huseby, Karina, Paris, Kurt, Rick, Lis, Kotler, Theeba, Lynx, Murphy, Doten, Taka, Norm, Jillian, Marcus, Mae, Novack, Esther, Perry, Dana, Ducot, Javier, Porter, Madison, Gecko, Dough, JR, Gisele, Crimp, Norie, Arch, Kimi, Fisher, Barbara, Jason, Peggy, Bernard, Jules, Leroy, Eva, Khederian, Campbell, Vogt, Masido, Karel, Torres, Lo, Breezer, Delby, Rountree, Anna, Servus, Rue, Itiaes, Chuck, Luna, Novella, Zaza, Wen, Gino, Lex, Cassandra, Limey, Nancy, Anukul, Silver, Brodesky, Jinsai, Squid, Gez, Rakesh, Ladan, Edelman, Marcet, Squire, Tatem, Tony, Jerm, Tia, Falcon, BK, Tiggs, Driscoll, Bacon, Timothee, Cru, Carmilla, Coyot, Webb, Kazu, Rudas, LJ, Sea, Ali Wallace, Bewest, Pup, Drub, Dragon, Inoshiro, Byron, Rhett, Xandix, Aimee, Fredrik, Thor, Teddy, Baron, Nelly, Ghengis, Epic, Eli, Stone, Grapes, Irie, Prep, Scobu, Valerie, Alain, and many others. -Thank you to the following Residents for helping to ensure that this is the best version yet: (in progress) +Thank you to the following Residents for helping to ensure that this is the best version yet: Drew Dwi, Zai Lynch, Latif Khalifa, Ellla McMahon, Harleen Gretzky, Squirrel Wood, Malarthi Behemoth, Dante Tucker, Buckaroo Mu, Eddi Decosta, Dirk, Talamasca, Torben Trautman, Irene Muni, Lilly Zenovka, Vick Forcella, Sasy Scarborough, Gentle Welinder, Elric Anatine, Techwolf Lupindo, Dusan Writer, WolfPup Lowenhar, Marianne McCann, Fiachra Lach, Sitearm Madonna, Sudane Erato, Sahkolihaa Contepomi, Sachi Vixen, Questar Utu, Dimitrio Lewis, Matto Destiny, Scrim Pinion, Radio Signals, Psi Merlin, Pixel Gausman, Mel Vanbeeck, Laurent Bechir, Lamorna Proctor, Lares Carter, Gwyneth Llewelyn, Hydra Shaftoe, Holger Gilruth, Gentle Heron, Carla Broek, Boroondas Gupte, Fury Rosewood, Flower Ducatillon, Colpo Wexler, gwampa Lomu, Borg Capalini, Beansy Twine, Ardy Lay, , 45ms Zhong, Adeon Writer, Aeonix Aeon, Ai Austin, Aiko Ying, Alexandrea Fride, Alliez Mysterio, Annie Milestone, Annika Genezzia, Ansariel Hiller, ArminasX Saiman, Arya Braveheart, Asaeda Meltingdots, Asturkon Jua, Avallyn Oakleaf, Avatar Quinzet, BabyA Littlething, Bacchus Ireto, Bazaar, Riva, Benjamin Bigdipper, Beth Walcher, Bezilon Kasei, Biancaluce Robbiani, Bill Walach, blakopal Galicia, Blitzckreed Levenque, Bryn Oh, Callipygian Christensen, Cap Carver, Carr Arbenlow, Chantal Harvey, Charles Courtois, Charlie Sazaland, Cherry Cheevers, ChickyBabes Zuzu, Christopher Organiser, Ciaran Laval, Clara Young, Celierra Darling, Corinne Helendale, Corro Moseley, Coughdrop Littlething, Darien Caldwell, Dartagan Shepherd, Debs Regent, Decro Schmooz, Denim Kamachi, DiJodi Dubratt, Dil Spitz, Edgware Marker, Egehan Dryke, Emma Portilo, Emmie Fairymeadow, Evangelista Emerald, Faelon Swordthain, Frenchimmo Sabra, Gaberoonie Zanzibar, Ganymedes Costagravas, Gene Frostbite, GeneJ Composer, Giggles Littlebird, Grady Echegaray, Guni Greenstein, Gypsy Tripsa, Hackshaven Harford, Ham Rambler, Han Shuffle, Hanglow Short, Hatzfeld Runo, herina Bode, Horatio Freund, Hypatia Callisto, Hypatia Pickens, Identity Euler, Imnotgoing Sideways, Innula Zenovka, Iyoba Tarantal, Jack Abraham, Jagga Meredith, Jennifer Boyle, Jeremy Marquez, Jessica Qin, Jinx Nordberg, Jo Bernandes, Jocial Sonnenkern, Joel Savard, Jondan Lundquist, Josef Munster, Josette Windlow, Juilan Tripsa, Juro Kothari, Justin RiversRunRed, Kagehi Kohn, Kaimen Takahe, Keklily Longfall, Ken Lavender, Kestral Karas, Khisme Nitely, Kimar Coba, Kithrak Kirkorian, Kitty Barnett, Kolor Fall, Komiko Okamoto, Korvel Noh, Larry Pixel, Leal Choche, len Starship, Lenae Munz, Lexi Frua, Lillie Cordeaux, Lizzy Macarthur, LSL Scientist, Luban Yiyuan, Luc Starsider, Maccus McCullough, Madison Blanc, Maggie Darwin, Mallory Destiny, Manx Wharton, Marc Claridge, Marc2 Sands, Matthew Anthony, Maxim RiversRunRed, Medhue Simoni, Melinda Latynina, Mencius Watts, Michi Lumin, Midian Farspire, Miles Glaz, Mindy Mathy, Mitch Wagner, Mo Hax, Mourna Biziou, Nao Noe, naofan Teardrop, Naomah Beaumont, Nathiel Siamendes, Nber Medici, Neko Link, Netpat Igaly, Neutron Chesnokov, Newfie Pendragon, Nicholai Laviscu, Nick Rhodes, Nicoladie Gymnast, Ollie Kubrick, Orenj Marat, Orion Delphis, Oryx Tempel, Parvati Silverweb, PeterPunk Mooney, Pixel Scientist, Pounce Teazle, Professor Noarlunga, Quantum Destiny, Quicksilver Hermes, Ralf Setsuko, RAT Quan, RedMokum Bravin, Revolution Perenti, Rezit Sideways, Rich Grainger, Rosco Teardrop, Rose Evans, Rudee Voom, RufusTT Horsefly, Saii Hallard, SaintLEOlions Zimer, Samm Larkham, Satanello Miami, SexySteven Morrisey, Sheet Spotter, Shnurui Troughton, sicarius Thorne, Sicarius Toxx, Sini Nubalo, SLB Wirefly, snowy Sidran, Soupa Segura, ST Mensing, Starshine Halasy, Stickman Ingmann, Synystyr Texan, Takeda Terrawyng, Tali Rosca, Templar Merlin, Tezcatlipoca Bisiani, Tiel Stonecutter, Tony Kembia, TouchaHoney Perhaps, Trey Reanimator, TriloByte Zanzibar, Trinity Dechou, Trinity Dejavu, Unlikely Quintessa, UsikuFarasi Kanarik, Veritas Raymaker, Vex Streeter, Viaticus Speculaas, Villain Baroque, Vixie Durant, Void Singer, Watty Berkson, Westley Schridde, Westley Streeter, Whimsy Winx, Winter Ventura, Wundur Primbee, xstorm Radek, YongYong Francois, Zak Westminster, Zana Kohime, Zaren Alexander, Zeja Pyle, ZenMondo Wormser, Zoex Flanagan, and many others. - - - - -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 +"The work goes on, the cause endures, the hope still lives, and the dreams shall never die" - Edward Kennedy </text_editor> </panel> <panel 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 51bd7a0a167fab39b2dd9619a7fe92bf0a02a258..59f188980810e56947883e27dda0aa5b822c6640 100644 --- a/indra/newview/skins/default/xui/en/floater_about_land.xml +++ b/indra/newview/skins/default/xui/en/floater_about_land.xml @@ -636,7 +636,6 @@ Leyla Linden </text> length="1" enabled="false" follows="all" - handle_edit_keys_directly="true" height="200" layout="topleft" left="10" 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 9dff4abe2cb290732f36c99a1b880858721172cf..cb6b2f6ebcd73fb546cdc275f1784d2cb4578f33 100644 --- a/indra/newview/skins/default/xui/en/floater_animation_preview.xml +++ b/indra/newview/skins/default/xui/en/floater_animation_preview.xml @@ -333,66 +333,86 @@ Maximum animation length is [MAX_LENGTH] seconds. left_pad="20" name="emote_combo" tool_tip="Controls what face does during animation"> - <combo_box.item - label="(None)" - name="[None]" /> - <combo_box.item - label="Aaaaah" - name="Aaaaah" /> - <combo_box.item - label="Afraid" - name="Afraid" /> - <combo_box.item - label="Angry" - name="Angry" /> - <combo_box.item - label="Big Smile" - name="BigSmile" /> - <combo_box.item - label="Bored" - name="Bored" /> - <combo_box.item - label="Cry" - name="Cry" /> - <combo_box.item - label="Disdain" - name="Disdain" /> - <combo_box.item - label="Embarrassed" - name="Embarrassed" /> - <combo_box.item - label="Frown" - name="Frown" /> - <combo_box.item - label="Kiss" - name="Kiss" /> - <combo_box.item - label="Laugh" - name="Laugh" /> - <combo_box.item - label="Plllppt" - name="Plllppt" /> - <combo_box.item - label="Repulsed" - name="Repulsed" /> - <combo_box.item - label="Sad" - name="Sad" /> - <combo_box.item - label="Shrug" - name="Shrug" /> - <combo_box.item - label="Smile" - name="Smile" /> - <combo_box.item - label="Surprise" - name="Surprise" /> - <combo_box.item - label="Wink" - name="Wink" /> - <combo_box.item - label="Worry" - name="Worry" /> + <item + label="(None)" + value="" + name="[None]" /> + <item + label="Aaaaah" + value="Aaaaah" + name="Aaaaah" /> + <item + label="Afraid" + value="Afraid" + name="Afraid" /> + <item + label="Angry" + value="Angry" + name="Angry" /> + <item + label="Big Smile" + value="Big Smile" + name="BigSmile" /> + <item + label="Bored" + value="Bored" + name="Bored" /> + <item + label="Cry" + value="Cry" + name="Cry" /> + <item + label="Disdain" + value="Disdain" + name="Disdain" /> + <item + label="Embarrassed" + value="Embarrassed" + name="Embarrassed" /> + <item + label="Frown" + value="Frown" + name="Frown" /> + <item + label="Kiss" + value="Kiss" + name="Kiss" /> + <item + label="Laugh" + value="Laugh" + name="Laugh" /> + <item + label="Plllppt" + value="Plllppt" + name="Plllppt" /> + <item + label="Repulsed" + value="Repulsed" + name="Repulsed" /> + <item + label="Sad" + value="Sad" + name="Sad" /> + <item + label="Shrug" + value="Shrug" + name="Shrug" /> + <item + label="Smile" + value="Smile" + name="Smile" /> + <item + label="Surprise" + value="Surprise" + name="Surprise" /> + <item + label="Wink" + value="Wink" + name="Wink" /> + <item + label="Worry" + value="Worry" + name="Worry" /> </combo_box> <text type="string" @@ -414,17 +434,21 @@ Maximum animation length is [MAX_LENGTH] seconds. 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 + <item label="Standing" + value="Standing" name="Standing" /> - <combo_box.item + <item label="Walking" + value="Walking" name="Walking" /> - <combo_box.item + <item label="Sitting" + value="Sitting" name="Sitting" /> - <combo_box.item + <item label="Flying" + value="Flying" name="Flying" /> </combo_box> <spinner diff --git a/indra/newview/skins/default/xui/en/floater_buy_land.xml b/indra/newview/skins/default/xui/en/floater_buy_land.xml index 125b080519646c3c0702133f89763969d5d693ad..df44b616327571c6f6da42ce5b443a0706602a07 100644 --- a/indra/newview/skins/default/xui/en/floater_buy_land.xml +++ b/indra/newview/skins/default/xui/en/floater_buy_land.xml @@ -356,7 +356,6 @@ supports [AMOUNT2] objects length="1" enabled="false" follows="top|right" - handle_edit_keys_directly="false" height="237" layout="topleft" left="444" diff --git a/indra/newview/skins/default/xui/en/floater_god_tools.xml b/indra/newview/skins/default/xui/en/floater_god_tools.xml index 240871ec251d4cca536bad4b2b23b3b1a133eaba..dfe3cf44858abd578e494c8f5843325de7a59e44 100644 --- a/indra/newview/skins/default/xui/en/floater_god_tools.xml +++ b/indra/newview/skins/default/xui/en/floater_god_tools.xml @@ -61,10 +61,10 @@ height="10" layout="topleft" left="10" - name="Sim Name:" + name="Region Name:" top="12" width="80"> - Sim Name: + Region Name: </text> <line_editor border_style="line" @@ -481,10 +481,10 @@ height="10" layout="topleft" left="10" - name="Sim Name:" + name="Region Name:" top="10" width="80"> - Sim Name: + Region Name: </text> <text type="string" diff --git a/indra/newview/skins/default/xui/en/floater_hardware_settings.xml b/indra/newview/skins/default/xui/en/floater_hardware_settings.xml index 1e2440580e1bc02327d48beebe8d8ea11337286c..27f8b4bb397503b701395d84c5a7c772947c8e90 100644 --- a/indra/newview/skins/default/xui/en/floater_hardware_settings.xml +++ b/indra/newview/skins/default/xui/en/floater_hardware_settings.xml @@ -6,7 +6,7 @@ name="Hardware Settings Floater" help_topic="hardware_settings_floater" title="HARDWARE SETTINGS" - width="500"> + width="615"> <text type="string" length="1" @@ -16,7 +16,7 @@ left="10" name="Filtering:" top="20" - width="128"> + width="188"> Filtering: </text> <check_box @@ -37,7 +37,7 @@ left="10" name="Antialiasing:" top_pad="7" - width="128"> + width="188"> Antialiasing: </text> <combo_box @@ -79,13 +79,13 @@ increment="0.01" initial_value="1" label="Gamma:" - label_width="138" + label_width="198" layout="topleft" left="10" max_val="2" name="gamma" top_pad="7" - width="202" /> + width="262" /> <text type="string" length="1" @@ -95,7 +95,7 @@ left_pad="10" name="(brightness, lower is brighter)" top_delta="2" - width="315"> + width="385"> (0 = default brightness, lower = brighter) </text> <text @@ -107,7 +107,7 @@ left="10" name="Enable VBO:" top_pad="10" - width="128"> + width="188"> Enable VBO: </text> <check_box @@ -128,14 +128,14 @@ increment="16" initial_value="32" label="Texture Memory (MB):" - label_width="135" + label_width="195" layout="topleft" left="10" max_val="4096" name="GraphicsCardTextureMemory" tool_tip="Amount of memory to allocate for textures. Defaults to video card memory. Reducing this may improve performance but may also make textures blurry." top_pad="10" - width="300" /> + width="360" /> <spinner control_name="RenderFogRatio" decimal_digits="1" @@ -143,14 +143,14 @@ height="22" initial_value="4" label="Fog Distance Ratio:" - label_width="138" + label_width="198" layout="topleft" left_delta="0" max_val="10" min_val="0.5" name="fog" top_pad="7" - width="202" /> + width="262" /> <button follows="right|bottom" height="22" diff --git a/indra/newview/skins/default/xui/en/floater_image_preview.xml b/indra/newview/skins/default/xui/en/floater_image_preview.xml index 6f8f2721281f41845a44307a9fdc15686621cc04..86232de1a4711d88783cf07120802a1139e97ee2 100644 --- a/indra/newview/skins/default/xui/en/floater_image_preview.xml +++ b/indra/newview/skins/default/xui/en/floater_image_preview.xml @@ -64,35 +64,45 @@ name="clothing_type_combo" top_delta="3" width="160"> - <combo_box.item + <item label="Image" + value="Image" name="Image" /> - <combo_box.item + <item label="Hair" + value="Hair" name="Hair" /> - <combo_box.item + <item label="Female Head" + value="Female Head" name="FemaleHead" /> - <combo_box.item + <item label="Female Upper Body" + value="Female Upper Body" name="FemaleUpperBody" /> - <combo_box.item + <item label="Female Lower Body" + value="Female Lower Body" name="FemaleLowerBody" /> - <combo_box.item + <item label="Male Head" + value="Male Head" name="MaleHead" /> - <combo_box.item + <item label="Male Upper Body" + value="Male Upper Body" name="MaleUpperBody" /> - <combo_box.item + <item label="Male Lower Body" + value="Male Lower Body" name="MaleLowerBody" /> - <combo_box.item + <item label="Skirt" + value="Skirt" name="Skirt" /> - <combo_box.item + <item label="Sculpted Prim" + value="Sculpted Prim" name="SculptedPrim" /> </combo_box> <text diff --git a/indra/newview/skins/default/xui/en/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/en/floater_outfit_save_as.xml index a2938e85744ef2ecd61bf2fa63c5f69e38961c08..1d73d516d0bc6508597f397216462d61e5d67249 100644 --- a/indra/newview/skins/default/xui/en/floater_outfit_save_as.xml +++ b/indra/newview/skins/default/xui/en/floater_outfit_save_as.xml @@ -45,7 +45,6 @@ as a new Outfit: border_style="line" border_thickness="1" follows="left|top" - handle_edit_keys_directly="true" height="23" layout="topleft" left_delta="0" diff --git a/indra/newview/skins/default/xui/en/floater_preview_notecard.xml b/indra/newview/skins/default/xui/en/floater_preview_notecard.xml index e9099211a33c89b7a5c63bb626b48453d3c85edd..14c0081c0df57675b6064f5f9af6ffd9db37fdf0 100644 --- a/indra/newview/skins/default/xui/en/floater_preview_notecard.xml +++ b/indra/newview/skins/default/xui/en/floater_preview_notecard.xml @@ -72,7 +72,6 @@ max_length="65536" name="Notecard Editor" allow_html="false" - handle_edit_keys_directly="true" tab_group="1" top="46" width="392" diff --git a/indra/newview/skins/default/xui/en/floater_report_abuse.xml b/indra/newview/skins/default/xui/en/floater_report_abuse.xml index ac0fca9cce98478bdfd7046d3f28cbe8576735d6..21c0bfef48b6114d71830f45ee8d8a61c54ca5d0 100644 --- a/indra/newview/skins/default/xui/en/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/en/floater_report_abuse.xml @@ -456,7 +456,7 @@ layout="topleft" left_delta="0" name="dscr_title" - top_pad="5" + top_pad="6" width="50"> Details: </text> @@ -464,11 +464,12 @@ type="string" length="1" follows="left|top" - height="16" + height="22" layout="topleft" name="bug_aviso" left_pad="10" - width="200"> + word_wrap="true" + width="270"> Please be as specific as possible </text> <text_editor diff --git a/indra/newview/skins/default/xui/en/floater_test_text_editor.xml b/indra/newview/skins/default/xui/en/floater_test_text_editor.xml index b730f0e511f9da97cb2e7b5943f1ca7002580d8c..548e24efba3d9cdd817377a4e6ca8cceafb949f6 100644 --- a/indra/newview/skins/default/xui/en/floater_test_text_editor.xml +++ b/indra/newview/skins/default/xui/en/floater_test_text_editor.xml @@ -14,6 +14,7 @@ name="test_text_editor" tool_tip="text editor" top="25" + word_wrap="true" width="200"> Text Editor </text_editor> diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml index 37dbd8a6700d50a511631506e03338631fe45a8c..ce6fc48a3bf7ab74915aa9922c7b73ec2e7aedcf 100644 --- a/indra/newview/skins/default/xui/en/floater_tools.xml +++ b/indra/newview/skins/default/xui/en/floater_tools.xml @@ -2576,18 +2576,18 @@ even though the user gets a free copy. height="19" initial_value="0" label="Horizontal (U)" - label_width="90" + label_width="125" layout="topleft" left="20" max_val="100" name="TexScaleU" top_pad="6" - width="160" /> + width="185" /> <check_box height="19" label="Flip" layout="topleft" - left_pad="10" + left_pad="5" name="checkbox flip s" top_delta="0" width="70" /> @@ -2596,17 +2596,17 @@ even though the user gets a free copy. height="19" initial_value="0" label="Vertical (V)" - label_width="90" + label_width="125" layout="topleft" left="20" max_val="100" name="TexScaleV" - width="160" /> + width="185" /> <check_box height="19" label="Flip" layout="topleft" - left_pad="10" + left_pad="5" name="checkbox flip t" top_delta="0" width="70" /> @@ -2618,12 +2618,12 @@ even though the user gets a free copy. initial_value="0" label="RotationËš" layout="topleft" - label_width="100" + label_width="135" left="10" max_val="9999" min_val="-9999" name="TexRot" - width="170" /> + width="195" /> <spinner decimal_digits="1" @@ -2632,19 +2632,19 @@ even though the user gets a free copy. initial_value="1" label="Repeats / Meter" layout="topleft" - label_width="100" + label_width="135" left="10" max_val="10" min_val="0.1" name="rptctrl" - width="170" /> + width="195" /> <button follows="left|top" height="23" label="Apply" label_selected="Apply" layout="topleft" - left_pad="10" + left_pad="5" name="button apply" width="75" /> <text @@ -2663,24 +2663,24 @@ even though the user gets a free copy. height="19" initial_value="0" label="Horizontal (U)" - label_width="90" + label_width="125" layout="topleft" left="20" min_val="-1" name="TexOffsetU" - width="160" /> + width="185" /> <spinner follows="left|top" height="19" initial_value="0" label="Vertical (V)" - label_width="90" + label_width="125" layout="topleft" left_delta="0" min_val="-1" name="TexOffsetV" top_pad="1" - width="160" /> + width="185" /> <panel border="false" follows="left|top" diff --git a/indra/newview/skins/default/xui/en/floater_tos.xml b/indra/newview/skins/default/xui/en/floater_tos.xml index f3665e87eddfbf23eca5a3dc7b0632e3d022a821..cbfaac958bdfc4a63dd74785200a0231781ed4c5 100644 --- a/indra/newview/skins/default/xui/en/floater_tos.xml +++ b/indra/newview/skins/default/xui/en/floater_tos.xml @@ -11,6 +11,10 @@ name="real_url"> http://secondlife.com/app/tos/ </floater.string> + <floater.string + name="loading_url"> + data:text/html,%3Chtml%3E%3Chead%3E%3C/head%3E%3Cbody text=%22000000%22%3E%3Ch2%3E Loading %3Ca%20target%3D%22_external%22%20href%3D%22http%3A//secondlife.com/app/tos/%22%3ETerms%20of%20Service%3C/a%3E...%3C/h2%3E %3C/body%3E %3C/html%3E + </floater.string> <button enabled="false" height="20" @@ -59,7 +63,6 @@ layout="topleft" left_delta="0" name="tos_html" - start_url="data:text/html,%3Chtml%3E%3Chead%3E%3C/head%3E%3Cbody text=%22000000%22%3E%3Ch2%3E Loading %3Ca%20target%3D%22_external%22%20href%3D%22http%3A//secondlife.com/app/tos/%22%3ETerms%20of%20Service%3C/a%3E...%3C/h2%3E %3C/body%3E %3C/html%3E" top_delta="40" width="568" /> </floater> diff --git a/indra/newview/skins/default/xui/en/floater_ui_preview.xml b/indra/newview/skins/default/xui/en/floater_ui_preview.xml index 3a981adfdf7e89d1555985b30141afc0c2112907..3b10a57c500268e0a487a273451d90a1030d853e 100644 --- a/indra/newview/skins/default/xui/en/floater_ui_preview.xml +++ b/indra/newview/skins/default/xui/en/floater_ui_preview.xml @@ -238,7 +238,6 @@ border_thickness="1" follows="left|bottom" font="SansSerif" - handle_edit_keys_directly="true" height="20" layout="topleft" left_delta="100" @@ -278,7 +277,6 @@ border_thickness="1" follows="left|bottom" font="SansSerif" - handle_edit_keys_directly="true" height="20" layout="topleft" left_delta="100" @@ -320,7 +318,6 @@ border_thickness="1" follows="left|bottom" font="SansSerif" - handle_edit_keys_directly="true" height="20" layout="topleft" left_delta="65" diff --git a/indra/newview/skins/default/xui/en/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/en/floater_wearable_save_as.xml index b4b57f2dbc63d15adb997bbc03da479356dee7f8..71812bd1a67a8b7f28b7ff951c2cf2151cdd29fc 100644 --- a/indra/newview/skins/default/xui/en/floater_wearable_save_as.xml +++ b/indra/newview/skins/default/xui/en/floater_wearable_save_as.xml @@ -44,7 +44,6 @@ border_style="line" border_thickness="1" follows="left|top" - handle_edit_keys_directly="true" height="23" layout="topleft" left_delta="0" diff --git a/indra/newview/skins/default/xui/en/inspector_info_ctrl.xml b/indra/newview/skins/default/xui/en/inspector_info_ctrl.xml index 39fb54d513441c641dedc545907567d191eeadaa..a7ecc39ed85d84d77c43e6835960afdaf96e6a65 100644 --- a/indra/newview/skins/default/xui/en/inspector_info_ctrl.xml +++ b/indra/newview/skins/default/xui/en/inspector_info_ctrl.xml @@ -1,8 +1,8 @@ <button chrome="true" - image_selected="Info_Small" - image_unselected="Info_Small" - image_pressed="Info_Small" + image_selected="Info_Over" + image_unselected="Info_Over" + image_pressed="Info_Over" height="12" name="inspector_info_ctrl" width="12" /> diff --git a/indra/newview/skins/default/xui/en/menu_edit.xml b/indra/newview/skins/default/xui/en/menu_edit.xml new file mode 100644 index 0000000000000000000000000000000000000000..68f3cb532cadfbf63de5efa181ff57ad54ac50a9 --- /dev/null +++ b/indra/newview/skins/default/xui/en/menu_edit.xml @@ -0,0 +1,89 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<menu create_jump_keys="true" + label="Edit" + name="Edit" + visible="false"> + <menu_item_call + label="Undo" + name="Undo" + shortcut="control|Z"> + <menu_item_call.on_click + function="Edit.Undo" /> + <menu_item_call.on_enable + function="Edit.EnableUndo" /> + </menu_item_call> + <menu_item_call + label="Redo" + name="Redo" + shortcut="control|Y"> + <menu_item_call.on_click + function="Edit.Redo" /> + <menu_item_call.on_enable + function="Edit.EnableRedo" /> + </menu_item_call> + <menu_item_separator/> + <menu_item_call + label="Cut" + name="Cut" + shortcut="control|X"> + <menu_item_call.on_click + function="Edit.Cut" /> + <menu_item_call.on_enable + function="Edit.EnableCut" /> + </menu_item_call> + <menu_item_call + label="Copy" + name="Copy" + shortcut="control|C"> + <menu_item_call.on_click + function="Edit.Copy" /> + <menu_item_call.on_enable + function="Edit.EnableCopy" /> + </menu_item_call> + <menu_item_call + label="Paste" + name="Paste" + shortcut="control|V"> + <menu_item_call.on_click + function="Edit.Paste" /> + <menu_item_call.on_enable + function="Edit.EnablePaste" /> + </menu_item_call> + <menu_item_call + label="Delete" + name="Delete" + shortcut="Del"> + <menu_item_call.on_click + function="Edit.Delete" /> + <menu_item_call.on_enable + function="Edit.EnableDelete" /> + </menu_item_call> + <menu_item_call + label="Duplicate" + name="Duplicate" + shortcut="control|D"> + <menu_item_call.on_click + function="Edit.Duplicate" /> + <menu_item_call.on_enable + function="Edit.EnableDuplicate" /> + </menu_item_call> + <menu_item_separator/> + <menu_item_call + label="Select All" + name="Select All" + shortcut="control|A"> + <menu_item_call.on_click + function="Edit.SelectAll" /> + <menu_item_call.on_enable + function="Edit.EnableSelectAll" /> + </menu_item_call> + <menu_item_call + label="Deselect" + name="Deselect" + shortcut="control|E"> + <menu_item_call.on_click + function="Edit.Deselect" /> + <menu_item_call.on_enable + function="Edit.EnableDeselect" /> + </menu_item_call> +</menu> \ No newline at end of file diff --git a/indra/newview/skins/default/xui/en/menu_login.xml b/indra/newview/skins/default/xui/en/menu_login.xml index ba7410459446e3eed7c17df0f9ac6b991d3ac3af..e95300a4b356cad70c0fa17f86241c37e948727c 100644 --- a/indra/newview/skins/default/xui/en/menu_login.xml +++ b/indra/newview/skins/default/xui/en/menu_login.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <menu_bar - follows="left|top|right" + follows="left|top" height="18" layout="topleft" left_delta="0" @@ -29,14 +29,6 @@ function="File.Quit" /> </menu_item_call> </menu> -<!-- Edit menu merged into the Me menu above - <menu - create_jump_keys="true" - label="Edit" - name="Edit" - width="153"> - </menu> ---> <menu create_jump_keys="true" label="Help" @@ -59,105 +51,24 @@ parameter="sl_about" /> </menu_item_call> </menu> + <menu_item_check + label="Show Debug Menu" + name="Show Debug Menu" + visible="false" + shortcut="control|alt|D"> + <on_check + function="CheckControl" + parameter="UseDebugMenus" /> + <on_click + function="ToggleControl" + parameter="UseDebugMenus" /> + </menu_item_check> <menu visible="false" create_jump_keys="true" label="Debug" name="Debug" tear_off="true"> - <!-- Need a copy of the edit menu here so keyboard shortcuts like - control-C work to copy text at login screen and About dialog (for QA) - --> - <menu - create_jump_keys="true" - label="Edit" - name="Edit" - tear_off="true"> - <menu_item_call - label="Undo" - name="Undo" - shortcut="control|Z"> - <menu_item_call.on_click - function="Edit.Undo" /> - <menu_item_call.on_enable - function="Edit.EnableUndo" /> - </menu_item_call> - <menu_item_call - label="Redo" - name="Redo" - shortcut="control|Y"> - <menu_item_call.on_click - function="Edit.Redo" /> - <menu_item_call.on_enable - function="Edit.EnableRedo" /> - </menu_item_call> - <menu_item_separator /> - <menu_item_call - label="Cut" - name="Cut" - shortcut="control|X"> - <menu_item_call.on_click - function="Edit.Cut" /> - <menu_item_call.on_enable - function="Edit.EnableCut" /> - </menu_item_call> - <menu_item_call - label="Copy" - name="Copy" - shortcut="control|C"> - <menu_item_call.on_click - function="Edit.Copy" /> - <menu_item_call.on_enable - function="Edit.EnableCopy" /> - </menu_item_call> - <menu_item_call - label="Paste" - name="Paste" - shortcut="control|V"> - <menu_item_call.on_click - function="Edit.Paste" /> - <menu_item_call.on_enable - function="Edit.EnablePaste" /> - </menu_item_call> - <menu_item_call - label="Delete" - name="Delete" - shortcut="Del"> - <menu_item_call.on_click - function="Edit.Delete" /> - <menu_item_call.on_enable - function="Edit.EnableDelete" /> - </menu_item_call> - <menu_item_call - label="Duplicate" - name="Duplicate" - shortcut="control|D"> - <menu_item_call.on_click - function="Edit.Duplicate" /> - <menu_item_call.on_enable - function="Edit.EnableDuplicate" /> - </menu_item_call> - <menu_item_separator /> - <menu_item_call - label="Select All" - name="Select All" - shortcut="control|A"> - <menu_item_call.on_click - function="Edit.SelectAll" /> - <menu_item_call.on_enable - function="Edit.EnableSelectAll" /> - </menu_item_call> - <menu_item_call - label="Deselect" - name="Deselect" - shortcut="control|E"> - <menu_item_call.on_click - function="Edit.Deselect" /> - <menu_item_call.on_enable - function="Edit.EnableDeselect" /> - </menu_item_call> - </menu> - <menu_item_separator /> <menu_item_call label="Show Debug Settings" name="Debug Settings"> @@ -270,5 +181,27 @@ function="Advanced.WebBrowserTest" parameter="http://join.secondlife.com/"/> </menu_item_call> + <menu_item_separator/> + <menu_item_check + label="Show Grid Picker" + name="Show Grid Picker" + visible="false" + shortcut="control|shift|G"> + <on_check + function="CheckControl" + parameter="ForceShowGrid" /> + <on_click + function="ToggleControl" + parameter="ForceShowGrid" /> + </menu_item_check> + <menu_item_call + label="Show Notifications Console" + name="Show Notifications Console" + visible="false" + shortcut="control|shift|5"> + <on_click + function="Floater.Toggle" + parameter="notifications_console" /> + </menu_item_call> </menu> </menu_bar> diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 77029e6f6a15b859eebaa5ac2af57c7edb63ef5d..bb57464741cb30eb311615446cead9c0e9191b6b 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -2,16 +2,13 @@ <menu_bar bg_visible="false" follows="left|top|right" - layout="topleft" name="Main Menu"> <menu label="Me" - layout="topleft" name="Me" tear_off="true"> <menu_item_call label="Preferences" - layout="topleft" name="Preferences" shortcut="control|P"> <menu_item_call.on_click @@ -20,7 +17,6 @@ </menu_item_call> <menu_item_call label="My Dashboard" - layout="topleft" name="Manage My Account"> <menu_item_call.on_click function="PromptShowURL" @@ -29,16 +25,13 @@ </menu_item_call> <menu_item_call label="Buy L$" - layout="topleft" name="Buy and Sell L$"> <menu_item_call.on_click function="BuyCurrency" /> </menu_item_call> - <menu_item_separator - layout="topleft" /> + <menu_item_separator/> <menu_item_call label="My Profile" - layout="topleft" name="Profile"> <menu_item_call.on_click function="ShowAgentProfile" @@ -46,7 +39,6 @@ </menu_item_call> <menu_item_call label="My Appearance" - layout="topleft" name="Appearance"> <menu_item_call.on_click function="CustomizeAvatar" /> @@ -56,7 +48,6 @@ <menu_item_check label="My Inventory" name="Inventory" - layout="topleft" shortcut="control|shift|I" visible="false"> <menu_item_check.on_check @@ -69,7 +60,6 @@ <menu_item_check label="My Inventory" name="ShowSidetrayInventory" - layout="topleft" shortcut="control|I" visible="true"> <menu_item_check.on_check @@ -81,7 +71,6 @@ </menu_item_check> <menu_item_check label="My Gestures" - layout="topleft" name="Gestures" shortcut="control|G"> <menu_item_check.on_check @@ -93,21 +82,17 @@ </menu_item_check> <menu label="My Status" - layout="topleft" name="Status" tear_off="true"> <menu_item_call label="Away" - layout="topleft" name="Set Away"> <menu_item_call.on_click function="World.SetAway" /> </menu_item_call> - <menu_item_separator - layout="topleft"/> + <menu_item_separator/> <menu_item_call label="Busy" - layout="topleft" name="Set Busy"> <menu_item_call.on_click function="World.SetBusy"/> @@ -115,7 +100,6 @@ </menu> <menu_item_call label="Request Admin Status" - layout="topleft" name="Request Admin Options" shortcut="control|alt|G" visible="false"> @@ -124,18 +108,15 @@ </menu_item_call> <menu_item_call label="Leave Admin Status" - layout="topleft" name="Leave Admin Options" shortcut="control|alt|shift|G" visible="false"> <menu_item_call.on_click function="Advanced.LeaveAdminStatus" /> </menu_item_call> - <menu_item_separator - layout="topleft" /> + <menu_item_separator/> <menu_item_call label="Quit [APP_NAME]" - layout="topleft" name="Quit" shortcut="control|Q"> <menu_item_call.on_click @@ -144,12 +125,10 @@ </menu> <menu label="Communicate" - layout="topleft" name="Communicate" tear_off="true"> <menu_item_call label="My Friends" - layout="topleft" name="My Friends" shortcut="control|shift|F"> <menu_item_call.on_click @@ -158,25 +137,21 @@ </menu_item_call> <menu_item_call label="My Groups" - layout="topleft" name="My Groups" shortcut="control|shift|G"> <menu_item_call.on_click function="SideTray.PanelPeopleTab" parameter="groups_panel" /> </menu_item_call> - <menu_item_separator - layout="topleft" /> + <menu_item_separator/> <!--menu_item_call label="Chat" - layout="topleft" name="Chat"> <menu_item_call.on_click function="World.Chat" /> </menu_item_call--> <menu_item_check label="Nearby Chat" - layout="topleft" name="Nearby Chat" shortcut="control|H" use_mac_ctrl="true"> @@ -189,7 +164,6 @@ </menu_item_check> <menu_item_call label="Nearby People" - layout="topleft" name="Active Speakers" shortcut="control|shift|A"> <menu_item_call.on_click @@ -199,12 +173,10 @@ </menu> <menu label="World" - layout="topleft" name="World" tear_off="true"> <menu_item_check label="Mini-Map" - layout="topleft" name="Mini-Map" shortcut="control|shift|M"> <menu_item_check.on_check @@ -216,7 +188,6 @@ </menu_item_check> <menu_item_check label="World Map" - layout="topleft" name="World Map" shortcut="control|M" use_mac_ctrl="true"> @@ -229,7 +200,6 @@ </menu_item_check> <menu_item_call label="Snapshot" - layout="topleft" name="Take Snapshot" shortcut="control|shift|S"> <menu_item_call.on_click @@ -238,7 +208,6 @@ </menu_item_call> <menu_item_call label="Landmark This Place" - layout="topleft" name="Create Landmark Here"> <menu_item_call.on_click function="World.CreateLandmark" /> @@ -248,12 +217,17 @@ <menu create_jump_keys="true" label="Place Profile" - layout="topleft" name="Land" tear_off="true"> <menu_item_call - label="About Land" + label="Place Profile" layout="topleft" + name="Place Profile"> + <menu_item_call.on_click + function="World.PlaceProfile" /> + </menu_item_call> + <menu_item_call + label="About Land" name="About Land"> <menu_item_call.on_click function="Floater.Show" @@ -261,18 +235,15 @@ </menu_item_call> <menu_item_call label="Region/Estate" - layout="topleft" name="Region/Estate"> <menu_item_call.on_click function="Floater.Show" parameter="region_info" /> </menu_item_call> </menu> - <menu_item_separator - layout="topleft" /> + <menu_item_separator/> <menu_item_call label="Buy This Land" - layout="topleft" name="Buy Land"> <menu_item_call.on_click function="Land.Buy" /> @@ -281,7 +252,6 @@ </menu_item_call> <menu_item_call label="My Land" - layout="topleft" name="My Land"> <menu_item_call.on_click function="Floater.Show" @@ -290,12 +260,10 @@ <menu create_jump_keys="true" label="Show" - layout="topleft" name="LandShow" tear_off="true"> <menu_item_check label="Move Controls" - layout="topleft" name="Movement Controls"> <menu_item_check.on_check function="Floater.Visible" @@ -305,7 +273,6 @@ </menu_item_check> <menu_item_check label="View Controls" - layout="topleft" name="Camera Controls"> <menu_item_check.on_check function="Floater.Visible" @@ -315,7 +282,6 @@ </menu_item_check> <menu_item_check label="Ban Lines" - layout="topleft" name="Ban Lines"> <menu_item_check.on_check control="ShowBanLines" /> @@ -325,7 +291,6 @@ </menu_item_check> <menu_item_check label="Beacons" - layout="topleft" name="beacons" shortcut="control|alt|shift|N"> <menu_item_check.on_check @@ -337,7 +302,6 @@ </menu_item_check> <menu_item_check label="Property Lines" - layout="topleft" name="Property Lines" shortcut="control|alt|shift|P"> <menu_item_check.on_check @@ -348,7 +312,6 @@ </menu_item_check> <menu_item_check label="Land Owners" - layout="topleft" name="Land Owners"> <menu_item_check.on_check control="ShowParcelOwners" /> @@ -375,11 +338,9 @@ control="NavBarShowParcelProperties" /> </menu_item_check> </menu> - <menu_item_separator - layout="topleft" /> + <menu_item_separator/> <menu_item_call label="Teleport Home" - layout="topleft" name="Teleport Home" shortcut="control|shift|H"> <menu_item_call.on_click @@ -389,7 +350,6 @@ </menu_item_call> <menu_item_call label="Set Home to Here" - layout="topleft" name="Set Home to Here"> <menu_item_call.on_click function="World.SetHomeLocation" /> @@ -398,7 +358,6 @@ </menu_item_call> <!-- <menu_item_check label="Show Navigation Bar" - layout="topleft" name="ShowNavbarNavigationPanel"> <menu_item_check.on_click function="ToggleControl" @@ -409,7 +368,6 @@ </menu_item_check> <menu_item_check label="Show Favorites Bar" - layout="topleft" name="ShowNavbarFavoritesPanel"> <menu_item_check.on_click function="ToggleControl" @@ -418,19 +376,15 @@ function="CheckControl" parameter="ShowNavbarFavoritesPanel" /> </menu_item_check> - <menu_item_separator - layout="topleft" />--> - <menu_item_separator - layout="topleft" /> + <menu_item_separator/>--> + <menu_item_separator/> <menu create_jump_keys="true" label="Sun" - layout="topleft" name="Environment Settings" tear_off="true"> <menu_item_call label="Sunrise" - layout="topleft" name="Sunrise"> <menu_item_call.on_click function="World.EnvSettings" @@ -438,7 +392,6 @@ </menu_item_call> <menu_item_call label="Midday" - layout="topleft" name="Noon" shortcut="control|shift|Y"> <menu_item_call.on_click @@ -447,7 +400,6 @@ </menu_item_call> <menu_item_call label="Sunset" - layout="topleft" name="Sunset" shortcut="control|shift|N"> <menu_item_call.on_click @@ -456,7 +408,6 @@ </menu_item_call> <menu_item_call label="Midnight" - layout="topleft" name="Midnight"> <menu_item_call.on_click function="World.EnvSettings" @@ -464,17 +415,14 @@ </menu_item_call> <menu_item_call label="Estate Time" - layout="topleft" name="Revert to Region Default"> <menu_item_call.on_click function="World.EnvSettings" parameter="default" /> </menu_item_call> - <menu_item_separator - layout="topleft" /> + <menu_item_separator/> <menu_item_call label="Environment Editor" - layout="topleft" name="Environment Editor"> <menu_item_call.on_click function="World.EnvSettings" @@ -485,13 +433,11 @@ <menu create_jump_keys="true" label="Build" - layout="topleft" name="BuildTools" tear_off="true" visible="true"> <menu_item_check label="Build" - layout="topleft" name="Show Build Tools" shortcut="control|B"> <menu_item_check.on_check @@ -504,12 +450,10 @@ <menu create_jump_keys="true" label="Select Build Tool" - layout="topleft" name="Select Tool" tear_off="true"> <menu_item_call label="Focus Tool" - layout="topleft" name="Focus" shortcut="control|1"> <menu_item_call.on_click @@ -518,7 +462,6 @@ </menu_item_call> <menu_item_call label="Move Tool" - layout="topleft" name="Move" shortcut="control|2"> <menu_item_call.on_click @@ -527,7 +470,6 @@ </menu_item_call> <menu_item_call label="Edit Tool" - layout="topleft" name="Edit" shortcut="control|3"> <menu_item_call.on_click @@ -536,7 +478,6 @@ </menu_item_call> <menu_item_call label="Create Tool" - layout="topleft" name="Create" shortcut="control|4"> <menu_item_call.on_click @@ -545,7 +486,6 @@ </menu_item_call> <menu_item_call label="Land Tool" - layout="topleft" name="Land" shortcut="control|5"> <menu_item_call.on_click @@ -553,112 +493,8 @@ parameter="land" /> </menu_item_call> </menu> - <menu - create_jump_keys="true" - label="Edit" - layout="topleft" - name="Edit" - tear_off="true"> - <menu_item_call - label="Undo" - layout="topleft" - name="Undo" - shortcut="control|Z"> - <menu_item_call.on_click - function="Edit.Undo" /> - <menu_item_call.on_enable - function="Edit.EnableUndo" /> - </menu_item_call> - <menu_item_call - label="Redo" - layout="topleft" - name="Redo" - shortcut="control|Y"> - <menu_item_call.on_click - function="Edit.Redo" /> - <menu_item_call.on_enable - function="Edit.EnableRedo" /> - </menu_item_call> - <menu_item_separator - layout="topleft" /> - <menu_item_call - label="Cut" - layout="topleft" - name="Cut" - shortcut="control|X"> - <menu_item_call.on_click - function="Edit.Cut" /> - <menu_item_call.on_enable - function="Edit.EnableCut" /> - </menu_item_call> - <menu_item_call - label="Copy" - layout="topleft" - name="Copy" - shortcut="control|C"> - <menu_item_call.on_click - function="Edit.Copy" /> - <menu_item_call.on_enable - function="Edit.EnableCopy" /> - </menu_item_call> - <menu_item_call - label="Paste" - layout="topleft" - name="Paste" - shortcut="control|V"> - <menu_item_call.on_click - function="Edit.Paste" /> - <menu_item_call.on_enable - function="Edit.EnablePaste" /> - </menu_item_call> - <menu_item_call - label="Delete" - layout="topleft" - name="Delete" - shortcut="Del"> - <menu_item_call.on_click - function="Edit.Delete" /> - <menu_item_call.on_enable - function="Edit.EnableDelete" /> - </menu_item_call> - <menu_item_call - label="Duplicate" - layout="topleft" - name="Duplicate" - shortcut="control|D"> - <menu_item_call.on_click - function="Edit.Duplicate" /> - <menu_item_call.on_enable - function="Edit.EnableDuplicate" /> - </menu_item_call> - <menu_item_separator - layout="topleft" /> - <menu_item_call - label="Select All" - layout="topleft" - name="Select All" - shortcut="control|A"> - <menu_item_call.on_click - function="Edit.SelectAll" /> - <menu_item_call.on_enable - function="Edit.EnableSelectAll" /> - </menu_item_call> - <menu_item_call - label="Deselect" - layout="topleft" - name="Deselect" - shortcut="control|E"> - <menu_item_call.on_click - function="Edit.Deselect" /> - <menu_item_call.on_enable - function="Edit.EnableDeselect" /> - </menu_item_call> - </menu> - <menu_item_separator - layout="topleft" /> <menu_item_call label="Link" - layout="topleft" name="Link" shortcut="control|L"> <menu_item_call.on_click @@ -668,7 +504,6 @@ </menu_item_call> <menu_item_call label="Unlink" - layout="topleft" name="Unlink" shortcut="control|shift|L"> <menu_item_call.on_click @@ -678,7 +513,6 @@ </menu_item_call> <menu_item_check label="Edit Linked Parts" - layout="topleft" name="Edit Linked Parts"> <menu_item_check.on_check control="EditLinkedParts" /> @@ -688,11 +522,9 @@ <menu_item_check.on_enable function="Tools.EnableToolNotPie" /> </menu_item_check> - <menu_item_separator - layout="topleft" /> + <menu_item_separator/> <menu_item_call label="Focus on Selection" - layout="topleft" name="Focus on Selection" shortcut="H"> <menu_item_call.on_click @@ -703,7 +535,6 @@ </menu_item_call> <menu_item_call label="Zoom to Selection" - layout="topleft" name="Zoom to Selection" shortcut="shift|H"> <menu_item_call.on_click @@ -712,17 +543,14 @@ <menu_item_call.on_enable function="Tools.SomethingSelectedNoHUD" /> </menu_item_call> - <menu_item_separator - layout="topleft" /> + <menu_item_separator/> <menu create_jump_keys="true" label="Object" - layout="topleft" name="Object" tear_off="true"> <menu_item_call label="Buy" - layout="topleft" name="Menu Object Buy"> <menu_item_call.on_click function="Tools.BuyOrTake"/> @@ -733,7 +561,6 @@ </menu_item_call> <menu_item_call label="Take" - layout="topleft" name="Menu Object Take"> <menu_item_call.on_click function="Tools.BuyOrTake"/> @@ -744,7 +571,6 @@ </menu_item_call> <menu_item_call label="Take Copy" - layout="topleft" name="Take Copy"> <menu_item_call.on_click function="Tools.TakeCopy" /> @@ -753,7 +579,6 @@ </menu_item_call> <menu_item_call label="Save Back to My Inventory" - layout="topleft" name="Save Object Back to My Inventory"> <menu_item_call.on_click function="Tools.SaveToInventory" /> @@ -762,7 +587,6 @@ </menu_item_call> <menu_item_call label="Save Back to Object Contents" - layout="topleft" name="Save Object Back to Object Contents"> <menu_item_call.on_click function="Tools.SaveToObjectInventory" /> @@ -773,12 +597,10 @@ <menu create_jump_keys="true" label="Scripts" - layout="topleft" name="Scripts" tear_off="true"> <menu_item_call label="Recompile Scripts (Mono)" - layout="topleft" name="Mono"> <menu_item_call.on_click function="Tools.SelectedScriptAction" @@ -788,7 +610,6 @@ </menu_item_call> <menu_item_call label="Recompile Scripts (LSL)" - layout="topleft" name="LSL"> <menu_item_call.on_click function="Tools.SelectedScriptAction" @@ -798,7 +619,6 @@ </menu_item_call> <menu_item_call label="Reset Scripts" - layout="topleft" name="Reset Scripts"> <menu_item_call.on_click function="Tools.SelectedScriptAction" @@ -808,7 +628,6 @@ </menu_item_call> <menu_item_call label="Set Scripts to Running" - layout="topleft" name="Set Scripts to Running"> <menu_item_call.on_click function="Tools.SelectedScriptAction" @@ -818,7 +637,6 @@ </menu_item_call> <menu_item_call label="Set Scripts to Not Running" - layout="topleft" name="Set Scripts to Not Running"> <menu_item_call.on_click function="Tools.SelectedScriptAction" @@ -827,17 +645,14 @@ function="EditableSelected" /> </menu_item_call> </menu> - <menu_item_separator - layout="topleft" /> + <menu_item_separator/> <menu create_jump_keys="true" label="Options" - layout="topleft" name="Options" tear_off="true"> <menu_item_call label="Set Default Upload Permissions" - layout="topleft" name="perm prefs"> <menu_item_call.on_click function="Floater.Toggle" @@ -845,7 +660,6 @@ </menu_item_call> <menu_item_check label="Show Advanced Permissions" - layout="topleft" name="DebugPermissions"> <menu_item_check.on_check function="CheckControl" @@ -854,11 +668,9 @@ function="ToggleControl" parameter="DebugPermissions" /> </menu_item_check> - <menu_item_separator - layout="topleft" /> + <menu_item_separator/> <menu_item_check label="Select Only My Objects" - layout="topleft" name="Select Only My Objects"> <menu_item_check.on_check control="SelectOwnedOnly" /> @@ -868,7 +680,6 @@ </menu_item_check> <menu_item_check label="Select Only Movable Objects" - layout="topleft" name="Select Only Movable Objects"> <menu_item_check.on_check control="SelectMovableOnly" /> @@ -878,18 +689,15 @@ </menu_item_check> <menu_item_check label="Select By Surrounding" - layout="topleft" name="Select By Surrounding"> <menu_item_check.on_check control="RectangleSelectInclusive" /> <menu_item_check.on_click function="Tools.SelectBySurrounding" /> </menu_item_check> - <menu_item_separator - layout="topleft" /> + <menu_item_separator/> <menu_item_check label="Show Hidden Selection" - layout="topleft" name="Show Hidden Selection"> <menu_item_check.on_check control="RenderHiddenSelections" /> @@ -898,7 +706,6 @@ </menu_item_check> <menu_item_check label="Show Light Radius for Selection" - layout="topleft" name="Show Light Radius for Selection"> <menu_item_check.on_check control="RenderLightRadius" /> @@ -907,7 +714,6 @@ </menu_item_check> <menu_item_check label="Show Selection Beam" - layout="topleft" name="Show Selection Beam"> <menu_item_check.on_check control="ShowSelectionBeam" /> @@ -915,11 +721,9 @@ function="ToggleControl" parameter="ShowSelectionBeam" /> </menu_item_check> - <menu_item_separator - layout="topleft" /> + <menu_item_separator/> <menu_item_check label="Snap to Grid" - layout="topleft" name="Snap to Grid" shortcut="G"> <menu_item_check.on_check @@ -932,7 +736,6 @@ </menu_item_check> <menu_item_call label="Snap Object XY to Grid" - layout="topleft" name="Snap Object XY to Grid" shortcut="shift|X"> <menu_item_call.on_click @@ -942,7 +745,6 @@ </menu_item_call> <menu_item_call label="Use Selection for Grid" - layout="topleft" name="Use Selection for Grid" shortcut="shift|G"> <menu_item_call.on_click @@ -952,7 +754,6 @@ </menu_item_call> <menu_item_call label="Grid Options" - layout="topleft" name="Grid Options" shortcut="control|shift|B"> <menu_item_call.on_click @@ -965,12 +766,10 @@ <menu create_jump_keys="true" label="Select Linked Parts" - layout="topleft" name="Select Linked Parts" tear_off="true"> <menu_item_call label="Select Next Part" - layout="topleft" name="Select Next Part" shortcut="control|."> <menu_item_call.on_click @@ -981,7 +780,6 @@ </menu_item_call> <menu_item_call label="Select Previous Part" - layout="topleft" name="Select Previous Part" shortcut="control|,"> <menu_item_call.on_click @@ -992,7 +790,6 @@ </menu_item_call> <menu_item_call label="Include Next Part" - layout="topleft" name="Include Next Part" shortcut="control|shift|."> <menu_item_call.on_click @@ -1003,7 +800,6 @@ </menu_item_call> <menu_item_call label="Include Previous Part" - layout="topleft" name="Include Previous Part" shortcut="control|shift|,"> <menu_item_call.on_click @@ -1016,48 +812,40 @@ </menu> <menu label="Help" - layout="topleft" name="Help" tear_off="true"> <menu_item_call label="[SECOND_LIFE] Help" - layout="topleft" name="Second Life Help" shortcut="F1"> <menu_item_call.on_click function="ShowHelp" parameter="f1_help" /> </menu_item_call> - <!-- <menu_item_call +<!-- <menu_item_call label="Tutorial" - layout="topleft" name="Tutorial"> <menu_item_call.on_click function="Floater.Show" parameter="hud" /> </menu_item_call>--> - <menu_item_separator - layout="topleft" /> + <menu_item_separator/> <menu_item_call label="Report Abuse" - layout="topleft" name="Report Abuse"> <menu_item_call.on_click function="ReportAbuse" /> </menu_item_call> <menu_item_call label="Report Bug" - layout="topleft" name="Report Bug"> <menu_item_call.on_click function="ShowHelp" parameter="report_bug" /> </menu_item_call> - <menu_item_separator - layout="topleft" /> + <menu_item_separator/> <menu_item_call label="About [APP_NAME]" - layout="topleft" name="About Second Life"> <menu_item_call.on_click function="Floater.Show" @@ -1066,20 +854,28 @@ </menu> <menu label="Advanced" - layout="topleft" name="Advanced" tear_off="true" visible="false"> + <menu_item_check + label="Show Advanced Menu" + name="Show Advanced Menu" + shortcut="control|alt|D"> + <on_check + function="CheckControl" + parameter="UseDebugMenus" /> + <on_click + function="ToggleControl" + parameter="UseDebugMenus" /> + </menu_item_check> <menu_item_call label="Stop Animating Me" - layout="topleft" name="Stop Animating My Avatar"> <menu_item_call.on_click function="Tools.StopAllAnimations" /> </menu_item_call> <menu_item_call label="Rebake Textures" - layout="topleft" name="Rebake Texture" shortcut="control|alt|R"> <menu_item_call.on_click @@ -1087,7 +883,6 @@ </menu_item_call> <menu_item_call label="Set UI Size to Default" - layout="topleft" name="Set UI Size to Default"> <menu_item_call.on_click function="View.DefaultUISize" /> @@ -1102,7 +897,6 @@ <menu_item_separator/> <menu_item_check label="Limit Select Distance" - layout="topleft" name="Limit Select Distance"> <menu_item_check.on_check function="CheckControl" @@ -1113,7 +907,6 @@ </menu_item_check> <menu_item_check label="Disable Camera Constraints" - layout="topleft" name="Disable Camera Distance"> <menu_item_check.on_check function="CheckControl" @@ -1122,11 +915,9 @@ function="ToggleControl" parameter="DisableCameraConstraints" /> </menu_item_check> - <menu_item_separator - layout="topleft" /> + <menu_item_separator/> <menu_item_check label="High-res Snapshot" - layout="topleft" name="HighResSnapshot"> <menu_item_check.on_check function="CheckControl" @@ -1137,7 +928,6 @@ </menu_item_check> <menu_item_check label="Quiet Snapshots to Disk" - layout="topleft" name="QuietSnapshotsToDisk"> <menu_item_check.on_check function="CheckControl" @@ -1148,7 +938,6 @@ </menu_item_check> <menu_item_check label="Compress Snapshots to Disk" - layout="topleft" name="CompressSnapshotsToDisk"> <menu_item_check.on_check function="CheckControl" @@ -1157,17 +946,14 @@ function="ToggleControl" parameter="CompressSnapshotsToDisk" /> </menu_item_check> - <menu_item_separator - layout="topleft" /> + <menu_item_separator/> <menu create_jump_keys="true" label="Performance Tools" - layout="topleft" name="Performance Tools" tear_off="true"> <menu_item_call label="Lag Meter" - layout="topleft" name="Lag Meter"> <menu_item_call.on_click function="Floater.Show" @@ -1175,7 +961,6 @@ </menu_item_call> <menu_item_check label="Statistics Bar" - layout="topleft" name="Statistics Bar" shortcut="control|shift|1"> <menu_item_check.on_check @@ -1187,7 +972,6 @@ </menu_item_check> <menu_item_check label="Show Avatar Rendering Cost" - layout="topleft" name="Avatar Rendering Cost"> <menu_item_check.on_check function="Advanced.CheckInfoDisplay" @@ -1200,12 +984,10 @@ <menu create_jump_keys="true" label="Highlighting and Visibility" - layout="topleft" name="Highlighting and Visibility" tear_off="true"> <menu_item_check label="Cheesy Beacon" - layout="topleft" name="Cheesy Beacon"> <menu_item_check.on_check function="CheckControl" @@ -1216,7 +998,6 @@ </menu_item_check> <menu_item_check label="Hide Particles" - layout="topleft" name="Hide Particles" shortcut="control|alt|shift|="> <menu_item_check.on_check @@ -1228,7 +1009,6 @@ </menu_item_check> <menu_item_check label="Hide Selected" - layout="topleft" name="Hide Selected"> <menu_item_check.on_check function="CheckControl" @@ -1239,7 +1019,6 @@ </menu_item_check> <menu_item_check label="Highlight Transparent" - layout="topleft" name="Highlight Transparent" shortcut="control|alt|T"> <menu_item_check.on_check @@ -1249,7 +1028,6 @@ </menu_item_check> <menu_item_check label="Show HUD Attachments" - layout="topleft" name="Show HUD Attachments" shortcut="alt|shift|H"> <menu_item_check.on_check @@ -1259,7 +1037,6 @@ </menu_item_check> <menu_item_check label="Show Mouselook Crosshairs" - layout="topleft" name="ShowCrosshairs"> <menu_item_check.on_check function="CheckControl" @@ -1271,12 +1048,10 @@ <!-- <menu create_jump_keys="true" label="Hover Tips" - layout="topleft" name="Hover Tips" tear_off="true"> <menu_item_check label="Show Tips" - layout="topleft" name="Show Tips" shortcut="control|shift|T"> <menu_item_check.on_check @@ -1284,11 +1059,9 @@ <menu_item_check.on_click function="View.ShowHoverTips" /> </menu_item_check> - <menu_item_separator - layout="topleft" />--> + <menu_item_separator/> <menu_item_check label="Show Land Tooltips" - layout="topleft" name="Land Tips"> <menu_item_check.on_check control="ShowLandHoverTip" /> @@ -1298,9 +1071,8 @@ <menu_item_check.on_enable function="View.CheckShowHoverTips" /> </menu_item_check> - <!-- <menu_item_check + <menu_item_check label="Show Tips On All Objects" - layout="topleft" name="Tips On All Objects"> <menu_item_check.on_check control="ShowAllObjectHoverTip" /> @@ -1317,12 +1089,10 @@ <menu create_jump_keys="true" label="Rendering Types" - layout="topleft" name="Rendering Types" tear_off="true"> <menu_item_check label="Simple" - layout="topleft" name="Simple" shortcut="control|alt|shift|1"> <menu_item_check.on_check @@ -1334,7 +1104,6 @@ </menu_item_check> <menu_item_check label="Alpha" - layout="topleft" name="Alpha" shortcut="control|alt|shift|2"> <menu_item_check.on_check @@ -1346,7 +1115,6 @@ </menu_item_check> <menu_item_check label="Tree" - layout="topleft" name="Tree" shortcut="control|alt|shift|3"> <menu_item_check.on_check @@ -1358,7 +1126,6 @@ </menu_item_check> <menu_item_check label="Avatars" - layout="topleft" name="Character" shortcut="control|alt|shift|4"> <menu_item_check.on_check @@ -1370,7 +1137,6 @@ </menu_item_check> <menu_item_check label="SurfacePath" - layout="topleft" name="SurfacePath" shortcut="control|alt|shift|5"> <menu_item_check.on_check @@ -1382,7 +1148,6 @@ </menu_item_check> <menu_item_check label="Sky" - layout="topleft" name="Sky" shortcut="control|alt|shift|6"> <menu_item_check.on_check @@ -1394,7 +1159,6 @@ </menu_item_check> <menu_item_check label="Water" - layout="topleft" name="Water" shortcut="control|alt|shift|7"> <menu_item_check.on_check @@ -1406,7 +1170,6 @@ </menu_item_check> <menu_item_check label="Ground" - layout="topleft" name="Ground" shortcut="control|alt|shift|8"> <menu_item_check.on_check @@ -1418,7 +1181,6 @@ </menu_item_check> <menu_item_check label="Volume" - layout="topleft" name="Volume" shortcut="control|alt|shift|9"> <menu_item_check.on_check @@ -1430,7 +1192,6 @@ </menu_item_check> <menu_item_check label="Grass" - layout="topleft" name="Grass" shortcut="control|alt|shift|0"> <menu_item_check.on_check @@ -1442,7 +1203,6 @@ </menu_item_check> <menu_item_check label="Clouds" - layout="topleft" name="Clouds" shortcut="control|alt|shift|-"> <menu_item_check.on_check @@ -1454,7 +1214,6 @@ </menu_item_check> <menu_item_check label="Particles" - layout="topleft" name="Particles" shortcut="control|alt|shift|="> <menu_item_check.on_check @@ -1466,7 +1225,6 @@ </menu_item_check> <menu_item_check label="Bump" - layout="topleft" name="Bump" shortcut="control|alt|shift|\"> <menu_item_check.on_check @@ -1480,12 +1238,10 @@ <menu create_jump_keys="true" label="Rendering Features" - layout="topleft" name="Rendering Features" tear_off="true"> <menu_item_check label="UI" - layout="topleft" name="UI" shortcut="control|alt|F1"> <menu_item_check.on_check @@ -1497,7 +1253,6 @@ </menu_item_check> <menu_item_check label="Selected" - layout="topleft" name="Selected" shortcut="control|alt|F2"> <menu_item_check.on_check @@ -1509,7 +1264,6 @@ </menu_item_check> <menu_item_check label="Highlighted" - layout="topleft" name="Highlighted" shortcut="control|alt|F3"> <menu_item_check.on_check @@ -1521,7 +1275,6 @@ </menu_item_check> <menu_item_check label="Dynamic Textures" - layout="topleft" name="Dynamic Textures" shortcut="control|alt|F4"> <menu_item_check.on_check @@ -1533,7 +1286,6 @@ </menu_item_check> <menu_item_check label="Foot Shadows" - layout="topleft" name="Foot Shadows" shortcut="control|alt|F5"> <menu_item_check.on_check @@ -1545,7 +1297,6 @@ </menu_item_check> <menu_item_check label="Fog" - layout="topleft" name="Fog" shortcut="control|alt|F6"> <menu_item_check.on_check @@ -1557,7 +1308,6 @@ </menu_item_check> <menu_item_check label="Test FRInfo" - layout="topleft" name="Test FRInfo" shortcut="control|alt|F8"> <menu_item_check.on_check @@ -1569,7 +1319,6 @@ </menu_item_check> <menu_item_check label="Flexible Objects" - layout="topleft" name="Flexible Objects" shortcut="control|alt|F9"> <menu_item_check.on_check @@ -1582,7 +1331,6 @@ </menu> <menu_item_check label="Run Multiple Threads" - layout="topleft" name="Run Multiple Threads"> <menu_item_check.on_check function="CheckControl" @@ -1593,7 +1341,6 @@ </menu_item_check> <menu_item_call label="Clear Group Cache" - layout="topleft" name="ClearGroupCache"> <menu_item_call.on_click function="Advanced.ClearGroupCache" @@ -1601,7 +1348,6 @@ </menu_item_call> <menu_item_check label="Mouse Smoothing" - layout="topleft" name="Mouse Smoothing"> <menu_item_check.on_check function="CheckControl" @@ -1610,17 +1356,14 @@ function="ToggleControl" parameter="MouseSmooth" /> </menu_item_check> - <menu_item_separator - layout="topleft" /> + <menu_item_separator/> <menu label="Shortcuts" - layout="topleft" name="Shortcuts" tear_off="true" visible="false"> <menu_item_call label="Image (L$[COST])..." - layout="topleft" name="Upload Image" shortcut="control|U"> <menu_item_call.on_click @@ -1631,7 +1374,6 @@ </menu_item_call> <menu_item_check label="Search" - layout="topleft" name="Search" shortcut="control|F"> <menu_item_check.on_check @@ -1644,7 +1386,6 @@ <menu_item_call enabled="false" label="Release Keys" - layout="topleft" name="Release Keys"> <menu_item_call.on_click function="Tools.ReleaseKeys" @@ -1655,16 +1396,13 @@ </menu_item_call> <menu_item_call label="Set UI Size to Default" - layout="topleft" name="Set UI Size to Default"> <menu_item_call.on_click function="View.DefaultUISize" /> </menu_item_call> - <menu_item_separator - layout="topleft" /> + <menu_item_separator/> <menu_item_check label="Always Run" - layout="topleft" name="Always Run" shortcut="control|R"> <menu_item_check.on_check @@ -1674,7 +1412,6 @@ </menu_item_check> <menu_item_check label="Fly" - layout="topleft" name="Fly" shortcut="Home"> <menu_item_check.on_check @@ -1684,11 +1421,9 @@ <menu_item_check.on_enable function="Agent.enableFlying" /> </menu_item_check> - <menu_item_separator - layout="topleft" /> + <menu_item_separator/> <menu_item_call label="Close Window" - layout="topleft" name="Close Window" shortcut="control|W"> <menu_item_call.on_click @@ -1698,7 +1433,6 @@ </menu_item_call> <menu_item_call label="Close All Windows" - layout="topleft" name="Close All Windows" shortcut="control|shift|W"> <menu_item_call.on_click @@ -1706,22 +1440,18 @@ <menu_item_call.on_enable function="File.EnableCloseAllWindows" /> </menu_item_call> - <menu_item_separator - layout="topleft" /> + <menu_item_separator/> <menu_item_call label="Snapshot to Disk" - layout="topleft" name="Snapshot to Disk" shortcut="control|`" use_mac_ctrl="true"> <menu_item_call.on_click function="File.TakeSnapshotToDisk" /> </menu_item_call> - <menu_item_separator - layout="topleft" /> + <menu_item_separator/> <menu_item_call label="Mouselook" - layout="topleft" name="Mouselook" shortcut="M"> <menu_item_call.on_click @@ -1731,7 +1461,6 @@ </menu_item_call> <menu_item_check label="Joystick Flycam" - layout="topleft" name="Joystick Flycam" shortcut="alt|shift|F"> <menu_item_check.on_check @@ -1743,7 +1472,6 @@ </menu_item_check> <menu_item_call label="Reset View" - layout="topleft" name="Reset View" shortcut="Esc"> <menu_item_call.on_click @@ -1751,7 +1479,6 @@ </menu_item_call> <menu_item_call label="Look at Last Chatter" - layout="topleft" name="Look at Last Chatter" shortcut="control|\"> <menu_item_call.on_click @@ -1759,17 +1486,14 @@ <menu_item_call.on_enable function="View.EnableLastChatter" /> </menu_item_call> - <menu_item_separator - layout="topleft" /> + <menu_item_separator/> <menu create_jump_keys="true" label="Select Build Tool" - layout="topleft" name="Select Tool" tear_off="true"> <menu_item_call label="Focus Tool" - layout="topleft" name="Focus" shortcut="control|1"> <menu_item_call.on_click @@ -1778,7 +1502,6 @@ </menu_item_call> <menu_item_call label="Move Tool" - layout="topleft" name="Move" shortcut="control|2"> <menu_item_call.on_click @@ -1787,7 +1510,6 @@ </menu_item_call> <menu_item_call label="Edit Tool" - layout="topleft" name="Edit" shortcut="control|3"> <menu_item_call.on_click @@ -1796,7 +1518,6 @@ </menu_item_call> <menu_item_call label="Create Tool" - layout="topleft" name="Create" shortcut="control|4"> <menu_item_call.on_click @@ -1805,7 +1526,6 @@ </menu_item_call> <menu_item_call label="Land Tool" - layout="topleft" name="Land" shortcut="control|5"> <menu_item_call.on_click @@ -1813,11 +1533,9 @@ parameter="land" /> </menu_item_call> </menu> - <menu_item_separator - layout="topleft" /> + <menu_item_separator/> <menu_item_call label="Zoom In" - layout="topleft" name="Zoom In" shortcut="control|0"> <menu_item_call.on_click @@ -1825,7 +1543,6 @@ </menu_item_call> <menu_item_call label="Zoom Default" - layout="topleft" name="Zoom Default" shortcut="control|9"> <menu_item_call.on_click @@ -1833,17 +1550,14 @@ </menu_item_call> <menu_item_call label="Zoom Out" - layout="topleft" name="Zoom Out" shortcut="control|8"> <menu_item_call.on_click function="View.ZoomOut" /> </menu_item_call> - <menu_item_separator - layout="topleft" /> + <menu_item_separator/> <menu_item_call label="Toggle Fullscreen" - layout="topleft" name="Toggle Fullscreen" > <!-- Note: shortcut="alt|Enter" was deleted from the preceding node--> @@ -1851,11 +1565,9 @@ function="View.Fullscreen" /> </menu_item_call> </menu> - <menu_item_separator - layout="topleft" /> + <menu_item_separator/> <menu_item_call label="Show Debug Settings" - layout="topleft" name="Debug Settings"> <menu_item_call.on_click function="Advanced.ShowDebugSettings" @@ -1863,7 +1575,6 @@ </menu_item_call> <menu_item_check label="Show Develop Menu" - layout="topleft" name="Debug Mode" shortcut="control|alt|Q"> <menu_item_check.on_check @@ -1873,23 +1584,21 @@ function="ToggleControl" parameter="QAMode" /> </menu_item_check> + </menu> <menu create_jump_keys="true" label="Develop" - layout="topleft" name="Develop" tear_off="true" visible="false"> <menu create_jump_keys="true" label="Consoles" - layout="topleft" name="Consoles" tear_off="true"> <menu_item_check label="Texture Console" - layout="topleft" name="Texture Console" shortcut="control|shift|3" use_mac_ctrl="true"> @@ -1902,7 +1611,6 @@ </menu_item_check> <menu_item_check label="Debug Console" - layout="topleft" name="Debug Console" shortcut="control|shift|4" use_mac_ctrl="true"> @@ -1915,7 +1623,6 @@ </menu_item_check> <menu_item_call label="Notifications Console" - layout="topleft" name="Notifications" shortcut="control|shift|5"> <menu_item_call.on_click @@ -1924,7 +1631,6 @@ </menu_item_call> <menu_item_check label="Texture Size Console" - layout="topleft" name="Texture Size" shortcut="control|shift|6"> <menu_item_check.on_check @@ -1936,7 +1642,6 @@ </menu_item_check> <menu_item_check label="Texture Category Console" - layout="topleft" name="Texture Category" shortcut="control|shift|7"> <menu_item_check.on_check @@ -1948,7 +1653,6 @@ </menu_item_check> <menu_item_check label="Fast Timers" - layout="topleft" name="Fast Timers" shortcut="control|shift|9" use_mac_ctrl="true"> @@ -1961,7 +1665,6 @@ </menu_item_check> <menu_item_check label="Memory" - layout="topleft" name="Memory" shortcut="control|shift|0" use_mac_ctrl="true"> @@ -1972,11 +1675,9 @@ function="Advanced.ToggleConsole" parameter="memory view" /> </menu_item_check> - <menu_item_separator - layout="topleft" /> + <menu_item_separator/> <menu_item_call label="Region Info to Debug Console" - layout="topleft" name="Region Info to Debug Console"> <menu_item_call.on_click function="Advanced.DumpInfoToConsole" @@ -1984,7 +1685,6 @@ </menu_item_call> <menu_item_call label="Group Info to Debug Console" - layout="topleft" name="Group Info to Debug Console"> <menu_item_call.on_click function="Advanced.DumpInfoToConsole" @@ -1992,17 +1692,14 @@ </menu_item_call> <menu_item_call label="Capabilities Info to Debug Console" - layout="topleft" name="Capabilities Info to Debug Console"> <menu_item_call.on_click function="Advanced.DumpInfoToConsole" parameter="capabilities" /> </menu_item_call> - <menu_item_separator - layout="topleft" /> + <menu_item_separator/> <menu_item_check label="Camera" - layout="topleft" name="Camera"> <menu_item_check.on_check function="Advanced.CheckHUDInfo" @@ -2013,7 +1710,6 @@ </menu_item_check> <menu_item_check label="Wind" - layout="topleft" name="Wind"> <menu_item_check.on_check function="Advanced.CheckHUDInfo" @@ -2024,7 +1720,6 @@ </menu_item_check> <menu_item_check label="FOV" - layout="topleft" name="FOV"> <menu_item_check.on_check function="Advanced.CheckHUDInfo" @@ -2035,7 +1730,6 @@ </menu_item_check> <menu_item_check label="Badge" - layout="topleft" name="Badge" shortcut="alt|control|shift|h"> <menu_item_check.on_check @@ -2049,12 +1743,10 @@ <menu create_jump_keys="true" label="Show Info" - layout="topleft" name="Display Info" tear_off="true"> <menu_item_check label="Show Time" - layout="topleft" name="Show Time"> <menu_item_check.on_check function="CheckControl" @@ -2076,7 +1768,6 @@ </menu_item_check> <menu_item_check label="Show Render Info" - layout="topleft" name="Show Render Info"> <menu_item_check.on_check function="CheckControl" @@ -2087,7 +1778,6 @@ </menu_item_check> <menu_item_check label="Show Matrices" - layout="topleft" name="Show Matrices"> <menu_item_check.on_check function="CheckControl" @@ -2098,7 +1788,6 @@ </menu_item_check> <menu_item_check label="Show Color Under Cursor" - layout="topleft" name="Show Color Under Cursor"> <menu_item_check.on_check function="CheckControl" @@ -2107,11 +1796,9 @@ function="ToggleControl" parameter="DebugShowColor" /> </menu_item_check> - <menu_item_separator - layout="topleft" /> + <menu_item_separator/> <menu_item_check label="Show Updates to Objects" - layout="topleft" name="Show Updates" shortcut="control|alt|shift|U"> <menu_item_check.on_check @@ -2121,17 +1808,14 @@ function="Advanced.ToggleShowObjectUpdates" /> </menu_item_check> </menu> - <menu_item_separator - layout="topleft" /> + <menu_item_separator/> <menu create_jump_keys="true" label="Force an Error" - layout="topleft" name="Force Errors" tear_off="true"> <menu_item_call label="Force Breakpoint" - layout="topleft" name="Force Breakpoint" shortcut="control|alt|shift|B"> <menu_item_call.on_click @@ -2139,49 +1823,42 @@ </menu_item_call> <menu_item_call label="Force LLError And Crash" - layout="topleft" name="Force LLError And Crash"> <menu_item_call.on_click function="Advanced.ForceErrorLlerror" /> </menu_item_call> <menu_item_call label="Force Bad Memory Access" - layout="topleft" name="Force Bad Memory Access"> <menu_item_call.on_click function="Advanced.ForceErrorBadMemoryAccess" /> </menu_item_call> <menu_item_call label="Force Infinite Loop" - layout="topleft" name="Force Infinite Loop"> <menu_item_call.on_click function="Advanced.ForceErrorInfiniteLoop" /> </menu_item_call> <menu_item_call label="Force Driver Crash" - layout="topleft" name="Force Driver Carsh"> <menu_item_call.on_click function="Advanced.ForceErrorDriverCrash" /> </menu_item_call> <menu_item_call label="Force Software Exception" - layout="topleft" name="Force Software Exception"> <menu_item_call.on_click function="Advanced.ForceErrorSoftwareException" /> </menu_item_call> <menu_item_call label="Force Disconnect Viewer" - layout="topleft" name="Force Disconnect Viewer"> <menu_item_call.on_click function="Advanced.ForceErrorDisconnectViewer" /> </menu_item_call> <menu_item_call label="Simulate a Memory Leak" - layout="topleft" name="Memory Leaking Simulation"> <menu_item_call.on_click function="Floater.Show" @@ -2191,12 +1868,10 @@ <menu create_jump_keys="true" label="Render Tests" - layout="topleft" name="Render Tests" tear_off="true"> <menu_item_check label="Camera Offset" - layout="topleft" name="Camera Offset"> <menu_item_check.on_check function="CheckControl" @@ -2207,7 +1882,6 @@ </menu_item_check> <menu_item_check label="Randomize Framerate" - layout="topleft" name="Randomize Framerate"> <menu_item_check.on_check function="Advanced.CheckRandomizeFramerate" @@ -2217,7 +1891,6 @@ </menu_item_check> <menu_item_check label="Periodic Slow Frame" - layout="topleft" name="Periodic Slow Frame"> <menu_item_check.on_check function="Advanced.CheckPeriodicSlowFrame" @@ -2228,7 +1901,6 @@ </menu_item_check> <menu_item_check label="Frame Test" - layout="topleft" name="Frame Test"> <menu_item_check.on_check function="Advanced.CheckFrameTest" @@ -2240,12 +1912,10 @@ <menu create_jump_keys="true" label="Render Metadata" - layout="topleft" name="Render Metadata" tear_off="true"> <menu_item_check label="Bounding Boxes" - layout="topleft" name="Bounding Boxes"> <menu_item_check.on_check function="Advanced.CheckInfoDisplay" @@ -2256,7 +1926,6 @@ </menu_item_check> <menu_item_check label="Octree" - layout="topleft" name="Octree"> <menu_item_check.on_check function="Advanced.CheckInfoDisplay" @@ -2267,7 +1936,6 @@ </menu_item_check> <menu_item_check label="Shadow Frusta" - layout="topleft" name="Shadow Frusta"> <menu_item_check.on_check function="Advanced.CheckInfoDisplay" @@ -2278,7 +1946,6 @@ </menu_item_check> <menu_item_check label="Occlusion" - layout="topleft" name="Occlusion"> <menu_item_check.on_check function="Advanced.CheckInfoDisplay" @@ -2289,7 +1956,6 @@ </menu_item_check> <menu_item_check label="Render Batches" - layout="topleft" name="Render Batches"> <menu_item_check.on_check function="Advanced.CheckInfoDisplay" @@ -2300,7 +1966,6 @@ </menu_item_check> <menu_item_check label="Texture Anim" - layout="topleft" name="Texture Anim"> <menu_item_check.on_check function="Advanced.CheckInfoDisplay" @@ -2311,7 +1976,6 @@ </menu_item_check> <menu_item_check label="Texture Priority" - layout="topleft" name="Texture Priority"> <menu_item_check.on_check function="Advanced.CheckInfoDisplay" @@ -2322,7 +1986,6 @@ </menu_item_check> <menu_item_check label="Texture Area" - layout="topleft" name="Texture Area"> <menu_item_check.on_check function="Advanced.CheckInfoDisplay" @@ -2333,7 +1996,6 @@ </menu_item_check> <menu_item_check label="Face Area" - layout="topleft" name="Face Area"> <menu_item_check.on_check function="Advanced.CheckInfoDisplay" @@ -2344,7 +2006,6 @@ </menu_item_check> <menu_item_check label="Lights" - layout="topleft" name="Lights"> <menu_item_check.on_check function="Advanced.CheckInfoDisplay" @@ -2355,7 +2016,6 @@ </menu_item_check> <menu_item_check label="Collision Skeleton" - layout="topleft" name="Collision Skeleton"> <menu_item_check.on_check function="Advanced.CheckInfoDisplay" @@ -2366,7 +2026,6 @@ </menu_item_check> <menu_item_check label="Raycast" - layout="topleft" name="Raycast"> <menu_item_check.on_check function="Advanced.CheckInfoDisplay" @@ -2379,7 +2038,6 @@ <menu create_jump_keys="true" label="Rendering" - layout="topleft" name="Rendering" tear_off="true"> <menu_item_check @@ -2521,7 +2179,6 @@ </menu_item_check> <menu_item_check label="Full Res Textures" - layout="topleft" name="Rull Res Textures"> <menu_item_check.on_check function="CheckControl" @@ -2532,7 +2189,6 @@ </menu_item_check> <menu_item_check label="Audit Textures" - layout="topleft" name="Audit Textures"> <menu_item_check.on_check function="CheckControl" @@ -2586,12 +2242,10 @@ <menu create_jump_keys="true" label="Network" - layout="topleft" name="Network" tear_off="true"> <menu_item_check label="Pause Agent" - layout="topleft" name="AgentPause"> <menu_item_check.on_check function="CheckControl" @@ -2600,27 +2254,22 @@ function="ToggleControl" parameter="AgentPause" /> </menu_item_check> - <menu_item_separator - layout="topleft" /> + <menu_item_separator/> <menu_item_call label="Enable Message Log" - layout="topleft" name="Enable Message Log"> <menu_item_call.on_click function="Advanced.EnableMessageLog" /> </menu_item_call> <menu_item_call label="Disable Message Log" - layout="topleft" name="Disable Message Log"> <menu_item_call.on_click function="Advanced.DisableMessageLog" /> </menu_item_call> - <menu_item_separator - layout="topleft" /> + <menu_item_separator/> <menu_item_check label="Velocity Interpolate Objects" - layout="topleft" name="Velocity Interpolate Objects"> <menu_item_check.on_check function="CheckControl" @@ -2631,7 +2280,6 @@ </menu_item_check> <menu_item_check label="Ping Interpolate Object Positions" - layout="topleft" name="Ping Interpolate Object Positions"> <menu_item_check.on_check function="CheckControl" @@ -2640,11 +2288,9 @@ function="ToggleControl" parameter="PingInterpolate" /> </menu_item_check> - <menu_item_separator - layout="topleft" /> + <menu_item_separator/> <menu_item_call label="Drop a Packet" - layout="topleft" name="Drop a Packet" shortcut="control|alt|L"> <menu_item_call.on_click @@ -2653,14 +2299,12 @@ </menu> <menu_item_call label="Dump Scripted Camera" - layout="topleft" name="Dump Scripted Camera"> <menu_item_call.on_click function="Advanced.DumpScriptedCamera" /> </menu_item_call> <menu_item_call label="Bumps, Pushes & Hits" - layout="topleft" name="Bumps, Pushes &amp; Hits"> <menu_item_call.on_click function="Floater.Show" @@ -2670,12 +2314,10 @@ <menu create_jump_keys="true" label="Recorder" - layout="topleft" name="Recorder" tear_off="true"> <menu_item_call label="Start Playback" - layout="topleft" name="Start Playback"> <menu_item_call.on_click function="Advanced.AgentPilot" @@ -2683,7 +2325,6 @@ </menu_item_call> <menu_item_call label="Stop Playback" - layout="topleft" name="Stop Playback"> <menu_item_call.on_click function="Advanced.AgentPilot" @@ -2691,7 +2332,6 @@ </menu_item_call> <menu_item_check label="Loop Playback" - layout="topleft" name="Loop Playback"> <menu_item_check.on_check function="Advanced.CheckAgentPilotLoop" @@ -2701,7 +2341,6 @@ </menu_item_check> <menu_item_call label="Start Record" - layout="topleft" name="Start Record"> <menu_item_call.on_click function="Advanced.AgentPilot" @@ -2709,7 +2348,6 @@ </menu_item_call> <menu_item_call label="Stop Record" - layout="topleft" name="Stop Record"> <menu_item_call.on_click function="Advanced.AgentPilot" @@ -2720,12 +2358,10 @@ <menu create_jump_keys="true" label="World" - layout="topleft" name="World" tear_off="true"> <menu_item_check label="Sim Sun Override" - layout="topleft" name="Sim Sun Override"> <menu_item_check.on_check function="CheckControl" @@ -2736,7 +2372,6 @@ </menu_item_check> <menu_item_check label="Cheesy Beacon" - layout="topleft" name="Cheesy Beacon"> <menu_item_check.on_check function="CheckControl" @@ -2747,7 +2382,6 @@ </menu_item_check> <menu_item_check label="Fixed Weather" - layout="topleft" name="Fixed Weather"> <menu_item_check.on_check function="CheckControl" @@ -2758,7 +2392,6 @@ </menu_item_check> <menu_item_call label="Dump Region Object Cache" - layout="topleft" name="Dump Region Object Cache"> <menu_item_call.on_click function="Advanced.DumpRegionObjectCache" /> @@ -2767,12 +2400,10 @@ <menu create_jump_keys="true" label="UI" - layout="topleft" name="UI" tear_off="true"> <!-- <menu_item_check label="New Bottom Bar" - layout="topleft" name="New Bottom Bar"> <menu_item_check.on_check function="CheckControl" @@ -2783,7 +2414,6 @@ </menu_item_check>--> <menu_item_call label="Web Browser Test" - layout="topleft" name="Web Browser Test"> <menu_item_call.on_click function="Advanced.WebBrowserTest" @@ -2791,14 +2421,12 @@ </menu_item_call> <menu_item_call label="Dump SelectMgr" - layout="topleft" name="Dump SelectMgr"> <menu_item_call.on_click function="Advanced.DumpSelectMgr" /> </menu_item_call> <menu_item_call label="Dump Inventory" - layout="topleft" name="Dump Inventory"> <menu_item_call.on_click function="Advanced.DumpInventory" /> @@ -2811,14 +2439,12 @@ </menu_item_call> <menu_item_call label="Dump Focus Holder" - layout="topleft" name="Dump Focus Holder"> <menu_item_call.on_click function="Advanced.DumpFocusHolder" /> </menu_item_call> <menu_item_call label="Print Selected Object Info" - layout="topleft" name="Print Selected Object Info" shortcut="control|shift|P"> <menu_item_call.on_click @@ -2826,7 +2452,6 @@ </menu_item_call> <menu_item_call label="Print Agent Info" - layout="topleft" name="Print Agent Info" shortcut="shift|P"> <menu_item_call.on_click @@ -2834,7 +2459,6 @@ </menu_item_call> <menu_item_call label="Memory Stats" - layout="topleft" name="Memory Stats" shortcut="control|alt|shift|M"> <menu_item_call.on_click @@ -2842,7 +2466,6 @@ </menu_item_call> <menu_item_check label="Double-ClickAuto-Pilot" - layout="topleft" name="Double-ClickAuto-Pilot"> <menu_item_check.on_check function="CheckControl" @@ -2855,7 +2478,6 @@ <menu_item_separator /> <menu_item_check label="Debug SelectMgr" - layout="topleft" name="Debug SelectMgr"> <menu_item_check.on_check function="CheckControl" @@ -2866,7 +2488,6 @@ </menu_item_check> <menu_item_check label="Debug Clicks" - layout="topleft" name="Debug Clicks"> <menu_item_check.on_check function="Advanced.CheckDebugClicks" @@ -2877,7 +2498,6 @@ </menu_item_check> <menu_item_check label="Debug Views" - layout="topleft" name="Debug Views"> <menu_item_check.on_check function="Advanced.CheckDebugViews" /> @@ -2886,7 +2506,6 @@ </menu_item_check> <menu_item_check label="Debug Name Tooltips" - layout="topleft" name="Debug Name Tooltips"> <menu_item_check.on_check function="Advanced.CheckXUINameTooltips" @@ -2896,7 +2515,6 @@ </menu_item_check> <menu_item_check label="Debug Mouse Events" - layout="topleft" name="Debug Mouse Events"> <menu_item_check.on_check function="Advanced.CheckDebugMouseEvents" @@ -2906,7 +2524,6 @@ </menu_item_check> <menu_item_check label="Debug Keys" - layout="topleft" name="Debug Keys"> <menu_item_check.on_check function="Advanced.CheckDebugKeys" @@ -2916,7 +2533,6 @@ </menu_item_check> <menu_item_check label="Debug WindowProc" - layout="topleft" name="Debug WindowProc"> <menu_item_check.on_check function="Advanced.CheckDebugWindowProc" @@ -2933,14 +2549,12 @@ tear_off="true"> <menu_item_call label="Reload Color Settings" - layout="topleft" name="Reload Color Settings"> <menu_item_call.on_click function="Advanced.ReloadColorSettings" /> </menu_item_call> <menu_item_call label="Show Font Test" - layout="topleft" name="Show Font Test"> <menu_item_call.on_click function="Floater.Show" @@ -2948,21 +2562,18 @@ </menu_item_call> <menu_item_call label="Load from XML" - layout="topleft" name="Load from XML"> <menu_item_call.on_click function="Advanced.LoadUIFromXML" /> </menu_item_call> <menu_item_call label="Save to XML" - layout="topleft" name="Save to XML"> <menu_item_call.on_click function="Advanced.SaveUIToXML" /> </menu_item_call> <menu_item_check label="Show XUI Names" - layout="topleft" name="Show XUI Names"> <menu_item_check.on_check function="Advanced.CheckXUINames" @@ -2972,7 +2583,6 @@ </menu_item_check> <menu_item_call label="Send Test IMs" - layout="topleft" name="Send Test IMs"> <menu_item_call.on_click function="Advanced.SendTestIMs" /> @@ -2981,18 +2591,15 @@ <menu create_jump_keys="true" label="Avatar" - layout="topleft" name="Character" tear_off="true"> <menu create_jump_keys="true" label="Grab Baked Texture" - layout="topleft" name="Grab Baked Texture" tear_off="true"> <menu_item_call label="Iris" - layout="topleft" name="Iris"> <menu_item_call.on_click function="Advanced.GrabBakedTexture" @@ -3003,7 +2610,6 @@ </menu_item_call> <menu_item_call label="Head" - layout="topleft" name="Head"> <menu_item_call.on_click function="Advanced.GrabBakedTexture" @@ -3014,7 +2620,6 @@ </menu_item_call> <menu_item_call label="Upper Body" - layout="topleft" name="Upper Body"> <menu_item_call.on_click function="Advanced.GrabBakedTexture" @@ -3025,7 +2630,6 @@ </menu_item_call> <menu_item_call label="Lower Body" - layout="topleft" name="Lower Body"> <menu_item_call.on_click function="Advanced.GrabBakedTexture" @@ -3036,7 +2640,6 @@ </menu_item_call> <menu_item_call label="Skirt" - layout="topleft" name="Skirt"> <menu_item_call.on_click function="Advanced.GrabBakedTexture" @@ -3049,19 +2652,16 @@ <menu create_jump_keys="true" label="Character Tests" - layout="topleft" name="Character Tests" tear_off="true"> <menu_item_call label="Appearance To XML" - layout="topleft" name="Appearance To XML"> <menu_item_call.on_click function="Advanced.AppearanceToXML" /> </menu_item_call> <menu_item_call label="Toggle Character Geometry" - layout="topleft" name="Toggle Character Geometry"> <menu_item_call.on_click function="Advanced.ToggleCharacterGeometry" /> @@ -3070,28 +2670,24 @@ </menu_item_call> <menu_item_call label="Test Male" - layout="topleft" name="Test Male"> <menu_item_call.on_click function="Advanced.TestMale" /> </menu_item_call> <menu_item_call label="Test Female" - layout="topleft" name="Test Female"> <menu_item_call.on_click function="Advanced.TestFemale" /> </menu_item_call> <menu_item_call label="Toggle PG" - layout="topleft" name="Toggle PG"> <menu_item_call.on_click function="Advanced.TogglePG" /> </menu_item_call> <menu_item_check label="Allow Select Avatar" - layout="topleft" name="Allow Select Avatar"> <menu_item_check.on_check function="CheckControl" @@ -3103,14 +2699,12 @@ </menu> <menu_item_call label="Force Params to Default" - layout="topleft" name="Force Params to Default"> <menu_item_call.on_click function="Advanced.ForceParamsToDefault" /> </menu_item_call> <menu_item_check label="Animation Info" - layout="topleft" name="Animation Info"> <menu_item_check.on_check function="Advanced.CheckAnimationInfo" @@ -3121,7 +2715,6 @@ </menu_item_check> <menu_item_check label="Slow Motion Animations" - layout="topleft" name="Slow Motion Animations"> <menu_item_check.on_check function="CheckControl" @@ -3132,7 +2725,6 @@ </menu_item_check> <menu_item_check label="Show Look At" - layout="topleft" name="Show Look At"> <menu_item_check.on_check function="Advanced.CheckShowLookAt" @@ -3142,7 +2734,6 @@ </menu_item_check> <menu_item_check label="Show Point At" - layout="topleft" name="Show Point At"> <menu_item_check.on_check function="Advanced.CheckShowPointAt" @@ -3152,7 +2743,6 @@ </menu_item_check> <menu_item_check label="Debug Joint Updates" - layout="topleft" name="Debug Joint Updates"> <menu_item_check.on_check function="Advanced.CheckDebugJointUpdates" @@ -3162,7 +2752,6 @@ </menu_item_check> <menu_item_check label="Disable LOD" - layout="topleft" name="Disable LOD"> <menu_item_check.on_check function="Advanced.CheckDisableLOD" @@ -3172,7 +2761,6 @@ </menu_item_check> <menu_item_check label="Debug Character Vis" - layout="topleft" name="Debug Character Vis"> <menu_item_check.on_check function="Advanced.CheckDebugCharacterVis" @@ -3182,7 +2770,6 @@ </menu_item_check> <menu_item_check label="Show Collision Skeleton" - layout="topleft" name="Show Collision Skeleton"> <menu_item_check.on_check function="Advanced.CheckInfoDisplay" @@ -3193,7 +2780,6 @@ </menu_item_check> <menu_item_check label="Display Agent Target" - layout="topleft" name="Display Agent Target"> <menu_item_check.on_check function="Advanced.CheckInfoDisplay" @@ -3205,7 +2791,6 @@ <!-- Appears not to exist anymore <menu_item_check label="Debug Rotation" - layout="topleft" name="Debug Rotation"> <menu_item_check.on_check function="CheckControl" @@ -3217,14 +2802,12 @@ --> <menu_item_call label="Dump Attachments" - layout="topleft" name="Dump Attachments"> <menu_item_call.on_click function="Advanced.DumpAttachments" /> </menu_item_call> <menu_item_call label="Debug Avatar Textures" - layout="topleft" name="Debug Avatar Textures" shortcut="control|alt|shift|A"> <menu_item_call.on_click @@ -3232,18 +2815,15 @@ </menu_item_call> <menu_item_call label="Dump Local Textures" - layout="topleft" name="Dump Local Textures" shortcut="alt|shift|M"> <menu_item_call.on_click function="Advanced.DumpAvatarLocalTextures" /> </menu_item_call> </menu> - <menu_item_separator - layout="topleft" /> + <menu_item_separator/> <menu_item_check label="HTTP Textures" - layout="topleft" name="HTTP Textures"> <menu_item_check.on_check function="CheckControl" @@ -3254,14 +2834,12 @@ </menu_item_check> <menu_item_call label="Compress Images" - layout="topleft" name="Compress Images"> <menu_item_call.on_click function="Advanced.CompressImage" /> </menu_item_call> <menu_item_check label="Output Debug Minidump" - layout="topleft" name="Output Debug Minidump"> <menu_item_check.on_check function="CheckControl" @@ -3272,7 +2850,6 @@ </menu_item_check> <menu_item_check label="Console Window on next Run" - layout="topleft" name="Console Window"> <menu_item_check.on_check function="CheckControl" @@ -3281,11 +2858,9 @@ function="ToggleControl" parameter="ShowConsoleWindow" /> </menu_item_check> - <menu_item_separator - layout="topleft" /> + <menu_item_separator/> <menu_item_check label="Show Admin Menu" - layout="topleft" name="View Admin Options"> <menu_item_check.on_check function="Advanced.CheckViewAdminOptions" @@ -3295,7 +2870,6 @@ </menu_item_check> <menu_item_call label="Request Admin Status" - layout="topleft" name="Request Admin Options" shortcut="control|alt|G"> <menu_item_call.on_click @@ -3303,28 +2877,34 @@ </menu_item_call> <menu_item_call label="Leave Admin Status" - layout="topleft" name="Leave Admin Options" shortcut="control|alt|shift|G"> <menu_item_call.on_click function="Advanced.LeaveAdminStatus" /> + </menu_item_call> + <menu_item_call + label="HACK Upload Model..." + layout="topleft" + name="Upload Model"> + <menu_item_call.on_click + function="File.UploadModel" + parameter="" /> + <menu_item_call.on_enable + function="File.EnableUploadModel" /> </menu_item_call> </menu> <menu create_jump_keys="true" label="Admin" - layout="topleft" name="Admin" tear_off="true" visible="false"> <menu create_jump_keys="true" label="Object" - layout="topleft" tear_off="true"> <menu_item_call label="Take Copy" - layout="topleft" name="Take Copy" shortcut="control|alt|shift|O"> <menu_item_call.on_click @@ -3334,7 +2914,6 @@ </menu_item_call> <menu_item_call label="Force Owner To Me" - layout="topleft" name="Force Owner To Me"> <menu_item_call.on_click function="Admin.HandleObjectOwnerSelf" /> @@ -3343,7 +2922,6 @@ </menu_item_call> <menu_item_call label="Force Owner Permissive" - layout="topleft" name="Force Owner Permissive"> <menu_item_call.on_click function="Admin.HandleObjectOwnerPermissive" /> @@ -3352,7 +2930,6 @@ </menu_item_call> <menu_item_call label="Delete" - layout="topleft" name="Delete" shortcut="control|alt|shift|Del"> <menu_item_call.on_click @@ -3362,7 +2939,6 @@ </menu_item_call> <menu_item_call label="Lock" - layout="topleft" name="Lock" shortcut="control|alt|shift|L"> <menu_item_call.on_click @@ -3372,7 +2948,6 @@ </menu_item_call> <menu_item_call label="Get Assets IDs" - layout="topleft" name="Get Assets IDs" shortcut="control|alt|shift|I"> <menu_item_call.on_click @@ -3384,12 +2959,10 @@ <menu create_jump_keys="true" label="Parcel" - layout="topleft" name="Parcel" tear_off="true"> <menu_item_call label="Force Owner To Me" - layout="topleft" name="Owner To Me"> <menu_item_call.on_click function="Admin.HandleForceParcelOwnerToMe" /> @@ -3398,7 +2971,6 @@ </menu_item_call> <menu_item_call label="Set to Linden Content" - layout="topleft" name="Set to Linden Content" shortcut="control|alt|shift|C"> <menu_item_call.on_click @@ -3408,7 +2980,6 @@ </menu_item_call> <menu_item_call label="Claim Public Land" - layout="topleft" name="Claim Public Land"> <menu_item_call.on_click function="Admin.HandleClaimPublicLand" /> @@ -3419,12 +2990,10 @@ <menu create_jump_keys="true" label="Region" - layout="topleft" name="Region" tear_off="true"> <menu_item_call label="Dump Temp Asset Data" - layout="topleft" name="Dump Temp Asset Data"> <menu_item_call.on_click function="Admin.HandleRegionDumpTempAssetData" /> @@ -3433,7 +3002,6 @@ </menu_item_call> <menu_item_call label="Save Region State" - layout="topleft" name="Save Region State"> <menu_item_call.on_click function="Admin.OnSaveState" /> @@ -3443,7 +3011,6 @@ </menu> <menu_item_call label="God Tools" - layout="topleft" name="God Tools"> <menu_item_call.on_click function="Floater.Show" @@ -3455,34 +3022,29 @@ <menu create_jump_keys="true" label="Admin" - layout="topleft" name="Deprecated" tear_off="true" visible="false"> <menu create_jump_keys="true" label="Attach Object" - layout="topleft" mouse_opaque="false" name="Attach Object" tear_off="true" /> <menu create_jump_keys="true" label="Detach Object" - layout="topleft" mouse_opaque="false" name="Detach Object" tear_off="true" /> <menu create_jump_keys="true" label="Take Off Clothing" - layout="topleft" mouse_opaque="false" name="Take Off Clothing" tear_off="true"> <menu_item_call label="Shirt" - layout="topleft" name="Shirt"> <menu_item_call.on_click function="Edit.TakeOff" @@ -3493,7 +3055,6 @@ </menu_item_call> <menu_item_call label="Pants" - layout="topleft" name="Pants"> <menu_item_call.on_click function="Edit.TakeOff" @@ -3504,7 +3065,6 @@ </menu_item_call> <menu_item_call label="Shoes" - layout="topleft" name="Shoes"> <menu_item_call.on_click function="Edit.TakeOff" @@ -3515,7 +3075,6 @@ </menu_item_call> <menu_item_call label="Socks" - layout="topleft" name="Socks"> <menu_item_call.on_click function="Edit.TakeOff" @@ -3526,7 +3085,6 @@ </menu_item_call> <menu_item_call label="Jacket" - layout="topleft" name="Jacket"> <menu_item_call.on_click function="Edit.TakeOff" @@ -3537,7 +3095,6 @@ </menu_item_call> <menu_item_call label="Gloves" - layout="topleft" name="Gloves"> <menu_item_call.on_click function="Edit.TakeOff" @@ -3548,7 +3105,6 @@ </menu_item_call> <menu_item_call label="Undershirt" - layout="topleft" name="Menu Undershirt"> <menu_item_call.on_click function="Edit.TakeOff" @@ -3559,7 +3115,6 @@ </menu_item_call> <menu_item_call label="Underpants" - layout="topleft" name="Menu Underpants"> <menu_item_call.on_click function="Edit.TakeOff" @@ -3570,7 +3125,6 @@ </menu_item_call> <menu_item_call label="Skirt" - layout="topleft" name="Skirt"> <menu_item_call.on_click function="Edit.TakeOff" @@ -3581,7 +3135,6 @@ </menu_item_call> <menu_item_call label="Alpha" - layout="topleft" name="Alpha"> <menu_item_call.on_click function="Edit.TakeOff" @@ -3592,7 +3145,6 @@ </menu_item_call> <menu_item_call label="Tattoo" - layout="topleft" name="Tattoo"> <menu_item_call.on_click function="Edit.TakeOff" @@ -3603,7 +3155,6 @@ </menu_item_call> <menu_item_call label="All Clothes" - layout="topleft" name="All Clothes"> <menu_item_call.on_click function="Edit.TakeOff" @@ -3613,12 +3164,10 @@ <menu create_jump_keys="true" label="Help" - layout="topleft" name="Help" tear_off="true"> <menu_item_call label="Official Linden Blog" - layout="topleft" name="Official Linden Blog"> <menu_item_call.on_click function="PromptShowURL" @@ -3627,7 +3176,6 @@ </menu_item_call> <menu_item_call label="Scripting Portal" - layout="topleft" name="Scripting Portal"> <menu_item_call.on_click function="PromptShowURL" @@ -3637,12 +3185,10 @@ <menu create_jump_keys="true" label="Bug Reporting" - layout="topleft" name="Bug Reporting" tear_off="true"> <menu_item_call label="Public Issue Tracker" - layout="topleft" name="Public Issue Tracker"> <menu_item_call.on_click function="PromptShowURL" @@ -3651,18 +3197,15 @@ </menu_item_call> <menu_item_call label="Public Issue Tracker Help" - layout="topleft" name="Publc Issue Tracker Help"> <menu_item_call.on_click function="PromptShowURL" name="PublicIssueTrackerHelp_url" parameter="WebLaunchPublicIssueHelp,http://wiki.secondlife.com/wiki/Issue_tracker" /> </menu_item_call> - <menu_item_separator - layout="topleft" /> + <menu_item_separator/> <menu_item_call label="Bug Reporting 101" - layout="topleft" name="Bug Reporing 101"> <menu_item_call.on_click function="PromptShowURL" @@ -3671,7 +3214,6 @@ </menu_item_call> <menu_item_call label="Security Issues" - layout="topleft" name="Security Issues"> <menu_item_call.on_click function="PromptShowURL" @@ -3680,7 +3222,6 @@ </menu_item_call> <menu_item_call label="QA Wiki" - layout="topleft" name="QA Wiki"> <menu_item_call.on_click function="PromptShowURL" diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 0e1a77a2f15c23983e9d617536b6b71d30d7d4b7..a35e1a6eb4b0faa8035b296685eb59688eb286a9 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -2023,6 +2023,28 @@ Would you be my friend? </form> </notification> + <notification + icon="alertmodal.tga" + label="Save Outfit" + name="SaveOutfitAs" + type="alertmodal"> + Save what I'm wearing as a new Outfit: + <form name="form"> + <input name="message" type="text"> + [DESC] (new) + </input> + <button + default="true" + index="0" + name="Offer" + text="OK"/> + <button + index="1" + name="Cancel" + text="Cancel"/> + </form> + </notification> + <notification icon="alertmodal.tga" name="RemoveFromFriends" diff --git a/indra/newview/skins/default/xui/en/panel_edit_alpha.xml b/indra/newview/skins/default/xui/en/panel_edit_alpha.xml index 40647e1b81cffa942c34d4549bcf2406b4d2b10e..1d0c0a02b0ebc1afa4ae0c934fa4493a2d6dd97b 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_alpha.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_alpha.xml @@ -1,33 +1,38 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel + background_visible="true" follows="all" height="400" layout="topleft" - left="10" + left="0" name="edit_alpha_panel" top_pad="10" - width="313" > + width="333" > <panel - border="true" - follows="left|top|right" - height="180" + border="false" + bg_alpha_color="DkGray2" + bg_opaque_color="DkGray2" + background_visible="true" + background_opaque="true" + follows="top|left|right" + height="400" left="10" layout="topleft" name="avatar_alpha_color_panel" top="0" - width="293" > + width="313" > <texture_picker can_apply_immediately="true" default_image_name="Default" follows="left|top" - height="80" + height="100" label="Lower Alpha" layout="topleft" - left="10" + left="30" name="Lower Alpha" tool_tip="Click to choose a picture" top="10" - width="64" /> + width="94" /> <check_box control_name="LowerAlphaTextureInvisible" follows="left" @@ -41,14 +46,14 @@ can_apply_immediately="true" default_image_name="Default" follows="left|top" - height="80" + height="100" label="Upper Alpha" layout="topleft" - left_pad="10" + left_pad="20" name="Upper Alpha" tool_tip="Click to choose a picture" top="10" - width="64" /> + width="94" /> <check_box control_name="UpperAlphaTextureInvisible" follows="left" @@ -62,14 +67,14 @@ can_apply_immediately="true" default_image_name="Default" follows="left|top" - height="80" + height="100" label="Head Alpha" layout="topleft" - left_pad="10" + left="30" name="Head Alpha" tool_tip="Click to choose a picture" - top="10" - width="64" /> + top="120" + width="94" /> <check_box control_name="HeadAlphaTextureInvisible" follows="left" @@ -83,14 +88,14 @@ can_apply_immediately="true" default_image_name="Default" follows="left|top" - height="80" + height="100" label="Eye Alpha" layout="topleft" - left="10" + left_pad="20" name="Eye Alpha" tool_tip="Click to choose a picture" - top="100" - width="64" /> + top="120" + width="94" /> <check_box control_name="Eye AlphaTextureInvisible" follows="left" @@ -104,14 +109,14 @@ can_apply_immediately="true" default_image_name="Default" follows="left|top" - height="80" + height="100" label="Hair Alpha" layout="topleft" - left_pad="10" + left="30" name="Hair Alpha" tool_tip="Click to choose a picture" - top_delta="-4" - width="64" /> + top="230" + width="94" /> <check_box control_name="HairAlphaTextureInvisible" follows="left" diff --git a/indra/newview/skins/default/xui/en/panel_edit_eyes.xml b/indra/newview/skins/default/xui/en/panel_edit_eyes.xml index c514054c41c08458d9d7f1ef50a7fd81f18f80ad..f11ef43c76f4d289d3b5dd3e508a4964f0e85e41 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_eyes.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_eyes.xml @@ -1,21 +1,26 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel + background_visible="true" follows="all" height="400" layout="topleft" - left="10" + left="0" name="edit_eyes_panel" top_pad="10" - width="313" > + width="333" > <panel - border="true" - follows="left|top|right" - height="100" + border="false" + bg_alpha_color="DkGray2" + bg_opaque_color="DkGray2" + background_visible="true" + background_opaque="true" + follows="top|left|right" + height="90" left="10" layout="topleft" name="avatar_eye_color_panel" top="0" - width="293" > + width="313" > <texture_picker can_apply_immediately="true" default_image_name="Default" @@ -23,31 +28,49 @@ height="80" label="Iris" layout="topleft" - left="8" + left="10" name="Iris" tool_tip="Click to choose a picture" - top_pad="10" + top="10" width="64" /> </panel> - <accordion - follows="left|top|right|bottom" - height ="340" - left="10" - name="wearable_accordion" - top_pad="10" - width="303"> - <accordion_tab + <panel + border="false" + bg_alpha_color="DkGray2" + bg_opaque_color="DkGray2" + background_visible="true" + background_opaque="true" + follows="all" + height="300" + layout="topleft" + left="10" + name="accordion_panel" + top_pad="10" + width="313"> + <accordion + follows="all" + height ="300" + layout="topleft" + left="0" + name="wearable_accordion" + single_expansion="true" + top="0" + width="313"> + <accordion_tab layout="topleft" + fit_panel="false" min_height="150" name="eyes_main_tab" title="Eyes"> <scrolling_panel_list follows="all" + layout="topleft" left="0" name="eyes_main_param_list" top="0" width="303" /> </accordion_tab> </accordion> + </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_edit_gloves.xml b/indra/newview/skins/default/xui/en/panel_edit_gloves.xml index 7aca40e8d9deb3ae0344ba5dd3cc6d79e94c073b..7d8eed50854ac4846da928247abda8fa6afeca4d 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_gloves.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_gloves.xml @@ -1,21 +1,26 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel + background_visible="true" follows="all" height="400" layout="topleft" - left="10" + left="0" name="edit_gloves_panel" top_pad="10" - width="313" > + width="333" > <panel - border="true" - follows="left|top|right" - height="100" + border="false" + bg_alpha_color="DkGray2" + bg_opaque_color="DkGray2" + background_visible="true" + background_opaque="true" + follows="top|left|right" + height="90" left="10" layout="topleft" name="avatar_gloves_color_panel" top="0" - width="293" > + width="313" > <texture_picker can_apply_immediately="true" default_image_name="Default" @@ -34,31 +39,49 @@ height="80" label="Color/Tint" layout="topleft" - left_pad="10" + left_pad="20" name="Color/Tint" tool_tip="Click to open color picker" top="10" width="64" /> </panel> - <accordion - follows="left|top|right|bottom" - height ="340" - left="10" - name="wearable_accordion" - top_pad="10" - width="303"> + <panel + border="false" + bg_alpha_color="DkGray2" + bg_opaque_color="DkGray2" + background_visible="true" + background_opaque="true" + follows="all" + height="300" + layout="topleft" + left="10" + name="accordion_panel" + top_pad="10" + width="313"> + <accordion + follows="all" + height ="300" + layout="topleft" + left="0" + name="wearable_accordion" + single_expansion="true" + top="0" + width="313"> <accordion_tab layout="topleft" + fit_panel="false" min_height="150" name="gloves_main_tab" title="Gloves"> <scrolling_panel_list follows="all" + layout="topleft" left="0" name="gloves_main_param_list" top="0" width="303" /> </accordion_tab> </accordion> + </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_edit_hair.xml b/indra/newview/skins/default/xui/en/panel_edit_hair.xml index e7d1c0530168539d0f68d5e2eb18f1d28c7a6bbb..cd81aa2c4fdc2bd520bb00adc375d605dd77d952 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_hair.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_hair.xml @@ -1,21 +1,26 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel + background_visible="true" follows="all" height="400" layout="topleft" - left="10" + left="0" name="edit_hair_panel" top_pad="10" - width="313" > + width="333" > <panel - border="true" - follows="left|top|right" - height="100" + border="false" + bg_alpha_color="DkGray2" + bg_opaque_color="DkGray2" + background_visible="true" + background_opaque="true" + follows="top|left|right" + height="90" left="10" layout="topleft" name="avatar_hair_color_panel" top="0" - width="293" > + width="313" > <texture_picker can_apply_immediately="true" default_image_name="Default" @@ -23,26 +28,43 @@ height="80" label="Texture" layout="topleft" - left="8" + left="10" name="Texture" tool_tip="Click to choose a picture" top="10" width="64" /> </panel> + <panel + border="false" + bg_alpha_color="DkGray2" + bg_opaque_color="DkGray2" + background_visible="true" + background_opaque="true" + follows="all" + height="300" + layout="topleft" + left="10" + name="accordion_panel" + top_pad="10" + width="313"> <accordion - follows="left|top|right|bottom" - height ="340" - left="10" - name="wearable_accordion" - top_pad="10" - width="303"> + follows="all" + height ="300" + layout="topleft" + left="0" + name="wearable_accordion" + single_expansion="true" + top="0" + width="313"> <accordion_tab layout="topleft" + fit_panel="false" min_height="150" name="hair_color_tab" title="Color"> <scrolling_panel_list follows="all" + layout="topleft" left="0" name="hair_color_param_list" top="0" @@ -50,11 +72,13 @@ </accordion_tab> <accordion_tab layout="topleft" + fit_panel="false" min_height="150" name="hair_style_tab" title="Style"> <scrolling_panel_list follows="all" + layout="topleft" left="0" name="hair_style_param_list" top="0" @@ -62,11 +86,13 @@ </accordion_tab> <accordion_tab layout="topleft" + fit_panel="false" min_height="150" name="hair_eyebrows_tab" title="Eyebrows"> <scrolling_panel_list follows="all" + layout="topleft" left="0" name="hair_eyebrows_param_list" top="0" @@ -74,16 +100,19 @@ </accordion_tab> <accordion_tab layout="topleft" + fit_panel="false" min_height="150" name="hair_facial_tab" title="Facial"> <scrolling_panel_list follows="all" + layout="topleft" left="0" name="hair_facial_param_list" top="0" width="303" /> </accordion_tab> </accordion> + </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_edit_jacket.xml b/indra/newview/skins/default/xui/en/panel_edit_jacket.xml index ed92b1e0f85018863e8f42cc8fece31331374aec..ba038659376d2a5e97e1a6d5a30eb73bce71c5d0 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_jacket.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_jacket.xml @@ -1,21 +1,26 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel + background_visible="true" follows="all" height="400" layout="topleft" - left="10" + left="0" name="edit_jacket_panel" top_pad="10" - width="313" > + width="333" > <panel - border="true" - follows="left|top|right" - height="100" + border="false" + bg_alpha_color="DkGray2" + bg_opaque_color="DkGray2" + background_visible="true" + background_opaque="true" + follows="top|left|right" + height="90" left="10" layout="topleft" name="avatar_jacket_color_panel" top="0" - width="293" > + width="313" > <texture_picker can_apply_immediately="true" default_image_name="Default" @@ -23,11 +28,11 @@ height="80" label="Upper Fabric" layout="topleft" - left="10" + left="25" name="Upper Fabric" tool_tip="Click to choose a picture" top="10" - width="64" /> + width="74" /> <texture_picker can_apply_immediately="true" default_image_name="Default" @@ -35,42 +40,60 @@ height="80" label="Lower Fabric" layout="topleft" - left_pad="10" + left_pad="20" name="Lower Fabric" tool_tip="Click to choose a picture" top="10" - width="64" /> + width="74" /> <color_swatch can_apply_immediately="true" follows="left|top" height="80" label="Color/Tint" layout="topleft" - left_pad="10" + left_pad="20" name="Color/Tint" tool_tip="Click to open color picker" top="10" - width="64" /> + width="74" /> </panel> - <accordion - follows="left|top|right|bottom" - height ="340" - left="10" - name="wearable_accordion" - top_pad="10" - width="303"> + <panel + border="false" + bg_alpha_color="DkGray2" + bg_opaque_color="DkGray2" + background_visible="true" + background_opaque="true" + follows="all" + height="300" + layout="topleft" + left="10" + name="accordion_panel" + top_pad="10" + width="313"> + <accordion + follows="all" + height ="300" + layout="topleft" + left="0" + name="wearable_accordion" + single_expansion="true" + top="0" + width="313"> <accordion_tab layout="topleft" + fit_panel="false" min_height="150" name="jacket_main_tab" title="Jacket"> <scrolling_panel_list follows="all" + layout="topleft" left="0" name="jacket_main_param_list" top="0" width="303" /> </accordion_tab> </accordion> + </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_edit_pants.xml b/indra/newview/skins/default/xui/en/panel_edit_pants.xml index b764188e04dae3ef4bebfe18ea7233c442b8077b..5b02d1f96866d580e85ba5b88b4e00846a9548c2 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_pants.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_pants.xml @@ -1,21 +1,26 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel + background_visible="true" follows="all" height="400" layout="topleft" - left="10" + left="0" name="edit_pants_panel" top_pad="10" - width="313" > + width="333" > <panel - border="true" - follows="left|top|right" - height="100" + border="false" + bg_alpha_color="DkGray2" + bg_opaque_color="DkGray2" + background_visible="true" + background_opaque="true" + follows="top|left|right" + height="90" left="10" layout="topleft" name="avatar_pants_color_panel" top="0" - width="293" > + width="313" > <texture_picker can_apply_immediately="true" default_image_name="Default" @@ -34,31 +39,49 @@ height="80" label="Color/Tint" layout="topleft" - left_pad="10" + left_pad="20" name="Color/Tint" tool_tip="Click to open color picker" top="10" width="64" /> </panel> - <accordion - follows="left|top|right|bottom" - height ="340" - left="10" - name="wearable_accordion" - top_pad="10" - width="303"> + <panel + border="false" + bg_alpha_color="DkGray2" + bg_opaque_color="DkGray2" + background_visible="true" + background_opaque="true" + follows="all" + height="300" + layout="topleft" + left="10" + name="accordion_panel" + top_pad="10" + width="313"> + <accordion + follows="all" + height ="300" + layout="topleft" + left="0" + name="wearable_accordion" + single_expansion="true" + top="0" + width="313"> <accordion_tab layout="topleft" + fit_panel="false" min_height="150" name="pants_main_tab" title="Pants"> <scrolling_panel_list follows="all" + layout="topleft" left="0" name="pants_main_param_list" top="0" width="303" /> </accordion_tab> </accordion> + </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_edit_shape.xml b/indra/newview/skins/default/xui/en/panel_edit_shape.xml index 45c4b92338252e39826b08afee770f11cb5a822a..e1c574001a79344a10065872d2217cbec27dfdc7 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_shape.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_shape.xml @@ -1,38 +1,43 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel + background_visible="true" follows="all" height="400" layout="topleft" - left="10" + left="0" name="edit_shape_panel" top_pad="10" - width="313" > + width="333" > <panel - border="true" - follows="top|left" + border="false" + bg_alpha_color="DkGray2" + bg_opaque_color="DkGray2" + background_visible="true" + background_opaque="true" + follows="top|left|right" height="50" left="10" layout="topleft" name="avatar_sex_panel" - top="10" - width="293" > + top="0" + width="313" > <text follows="top|left" height="16" layout="topleft" left="10" name="gender_text" - width="303"> + width="313"> Gender: </text> <radio_group - follows="all" + follows="left|top|right" left="10" - height="34" + height="28" layout="topleft" name="sex_radio" top_pad="3" - width="200" > + width="303" > <radio_item follows="all" height="16" @@ -51,21 +56,41 @@ width="82" /> </radio_group> </panel> + <panel + border="false" + bg_alpha_color="DkGray2" + bg_opaque_color="DkGray2" + background_visible="true" + background_opaque="true" + follows="all" + height="345" + label="Shirt" + layout="topleft" + left="10" + name="accordion_panel" + top_pad="10" + width="313"> <accordion - follows="left|top|right|bottom" - height ="330" - left="10" + layout="topleft" + follows="all" + height ="345" + left="0" name="wearable_accordion" - top_pad="10" - width="303"> + top="0" + single_expansion="true" + fit_parent="false" + width="313"> <accordion_tab layout="topleft" min_height="150" name="shape_body_tab" + fit_panel="false" title="Body"> <scrolling_panel_list + layout="topleft" follows="all" left="0" + height="300" name="shape_body_param_list" top="0" width="303" /> @@ -73,11 +98,13 @@ <accordion_tab layout="topleft" min_height="150" + fit_panel="false" name="shape_head_tab" title="Head"> - <scrolling_panel_list + <scrolling_panel_list + layout="topleft" follows="all" - left="0" + left="10" name="shape_head_param_list" top="0" width="303" /> @@ -85,9 +112,11 @@ <accordion_tab layout="topleft" min_height="150" + fit_panel="false" name="shape_eyes_tab" title="Eyes"> - <scrolling_panel_list + <scrolling_panel_list + layout="topleft" follows="all" left="0" name="shape_eyes_param_list" @@ -97,9 +126,11 @@ <accordion_tab layout="topleft" min_height="150" + fit_panel="false" name="shape_ears_tab" title="Ears"> - <scrolling_panel_list + <scrolling_panel_list + layout="topleft" follows="all" left="0" name="shape_ears_param_list" @@ -110,8 +141,10 @@ layout="topleft" min_height="150" name="shape_nose_tab" + fit_panel="false" title="Nose"> - <scrolling_panel_list + <scrolling_panel_list + layout="topleft" follows="all" left="0" name="shape_nose_param_list" @@ -122,8 +155,10 @@ layout="topleft" min_height="150" name="shape_mouth_tab" + fit_panel="false" title="Mouth"> - <scrolling_panel_list + <scrolling_panel_list + layout="topleft" follows="all" left="0" name="shape_mouth_param_list" @@ -134,8 +169,10 @@ layout="topleft" min_height="150" name="shape_chin_tab" + fit_panel="false" title="Chin"> - <scrolling_panel_list + <scrolling_panel_list + layout="topleft" follows="all" left="0" name="shape_chin_param_list" @@ -146,8 +183,10 @@ layout="topleft" min_height="150" name="shape_torso_tab" + fit_panel="false" title="Torso"> - <scrolling_panel_list + <scrolling_panel_list + layout="topleft" follows="all" left="0" name="shape_torso_param_list" @@ -158,8 +197,10 @@ layout="topleft" min_height="150" name="shape_legs_tab" + fit_panel="false" title="Legs"> - <scrolling_panel_list + <scrolling_panel_list + layout="topleft" follows="all" left="0" name="shape_legs_param_list" @@ -167,5 +208,6 @@ width="303" /> </accordion_tab> </accordion> + </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_edit_shirt.xml b/indra/newview/skins/default/xui/en/panel_edit_shirt.xml index 4b7235545f2451bef897485ba9a9ba314a31d5c3..7da8de4c0bfd110df9b13d1b84748e80d1443084 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_shirt.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_shirt.xml @@ -1,21 +1,26 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel + background_visible="true" follows="all" height="400" layout="topleft" - left="10" + left="0" name="edit_shirt_panel" top_pad="10" - width="313" > + width="333" > <panel - border="true" - follows="left|top|right" - height="100" + border="false" + bg_alpha_color="DkGray2" + bg_opaque_color="DkGray2" + background_visible="true" + background_opaque="true" + follows="top|left|right" + height="90" left="10" layout="topleft" name="avatar_shirt_color_panel" top="0" - width="293" > + width="313" > <texture_picker can_apply_immediately="true" default_image_name="Default" @@ -34,31 +39,49 @@ height="80" label="Color/Tint" layout="topleft" - left_pad="10" + left_pad="20" name="Color/Tint" tool_tip="Click to open color picker" top="10" width="64" /> </panel> + <panel + border="false" + bg_alpha_color="DkGray2" + bg_opaque_color="DkGray2" + background_visible="true" + background_opaque="true" + follows="all" + height="300" + layout="topleft" + left="10" + name="accordion_panel" + top_pad="10" + width="313"> <accordion - follows="left|top|right|bottom" - height ="340" - left="10" + follows="all" + height ="300" + layout="topleft" + left="0" name="wearable_accordion" - top_pad="10" - width="303"> + single_expansion="true" + top="0" + width="313"> <accordion_tab layout="topleft" + fit_panel="false" min_height="150" name="shirt_main_tab" title="Shirt"> <scrolling_panel_list follows="all" + layout="topleft" left="0" name="shirt_main_param_list" top="0" width="303" /> </accordion_tab> </accordion> + </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_edit_shoes.xml b/indra/newview/skins/default/xui/en/panel_edit_shoes.xml index e886afa0102946f12cc86717e3eab2185c3d8771..84fe26f7f6366589c79ae62e936ab1774b92eecf 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_shoes.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_shoes.xml @@ -1,21 +1,26 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel + background_visible="true" follows="all" height="400" layout="topleft" - left="10" + left="0" name="edit_shoes_panel" top_pad="10" - width="313" > + width="333" > <panel - border="true" - follows="left|top|right" - height="100" + border="false" + bg_alpha_color="DkGray2" + bg_opaque_color="DkGray2" + background_visible="true" + background_opaque="true" + follows="top|left|right" + height="90" left="10" layout="topleft" name="avatar_shoes_color_panel" top="0" - width="293" > + width="313" > <texture_picker can_apply_immediately="true" default_image_name="Default" @@ -34,31 +39,49 @@ height="80" label="Color/Tint" layout="topleft" - left_pad="10" + left_pad="20" name="Color/Tint" tool_tip="Click to open color picker" top="10" width="64" /> </panel> - <accordion - follows="left|top|right|bottom" - height ="340" - left="10" - name="wearable_accordion" - top_pad="10" - width="303"> + <panel + border="false" + bg_alpha_color="DkGray2" + bg_opaque_color="DkGray2" + background_visible="true" + background_opaque="true" + follows="all" + height="300" + layout="topleft" + left="10" + name="accordion_panel" + top_pad="10" + width="313"> + <accordion + follows="all" + height ="300" + layout="topleft" + left="0" + name="wearable_accordion" + single_expansion="true" + top="0" + width="313"> <accordion_tab layout="topleft" + fit_panel="false" min_height="150" name="shoes_main_tab" title="Shoes"> <scrolling_panel_list follows="all" + layout="topleft" left="0" name="shoes_main_param_list" top="0" width="303" /> </accordion_tab> </accordion> + </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_edit_skin.xml b/indra/newview/skins/default/xui/en/panel_edit_skin.xml index 918606b54cad0e982518d529be113975c6fce8f7..b5c8c954730fe56562d340f15139fd01768fc0e0 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_skin.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_skin.xml @@ -1,21 +1,26 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel + background_visible="true" follows="all" height="400" layout="topleft" - left="10" + left="0" name="edit_skin_panel" top_pad="10" - width="313" > + width="333" > <panel - border="true" - follows="left|top|right" - height="100" + border="false" + bg_alpha_color="DkGray2" + bg_opaque_color="DkGray2" + background_visible="true" + background_opaque="true" + follows="top|left|right" + height="90" left="10" layout="topleft" name="avatar_skin_color_panel" top="0" - width="293" > + width="313" > <texture_picker allow_no_texture="true" can_apply_immediately="true" @@ -24,7 +29,7 @@ height="80" label="Head Tattoos" layout="topleft" - left="10" + left="25" name="Head Tattoos" tool_tip="Click to choose a picture" top="10" @@ -37,7 +42,7 @@ height="80" label="Upper Tattoos" layout="topleft" - left_pad="10" + left_pad="20" name="Upper Tattoos" tool_tip="Click to choose a picture" top="10" @@ -50,26 +55,43 @@ height="80" label="Lower Tattoos" layout="topleft" - left_pad="10" + left_pad="20" name="Lower Tattoos" tool_tip="Click to choose a picture" top="10" width="74" /> </panel> + <panel + border="false" + bg_alpha_color="DkGray2" + bg_opaque_color="DkGray2" + background_visible="true" + background_opaque="true" + follows="all" + height="300" + layout="topleft" + left="10" + name="accordion_panel" + top_pad="10" + width="313"> <accordion - follows="left|top|right|bottom" - height ="340" - left="10" + layout="topleft" + follows="all" + height ="300" + left="0" name="wearable_accordion" - top_pad="10" - width="303"> + top="0" + single_expansion="true" + width="313"> <accordion_tab layout="topleft" + fit_panel="false" min_height="150" name="skin_color_tab" title="Skin Color"> <scrolling_panel_list follows="all" + layout="topleft" left="0" name="skin_color_param_list" top="0" @@ -77,11 +99,13 @@ </accordion_tab> <accordion_tab layout="topleft" + fit_panel="false" min_height="150" name="skin_face_tab" title="Face Detail"> <scrolling_panel_list follows="all" + layout="topleft" left="0" name="skin_face_param_list" top="0" @@ -89,11 +113,13 @@ </accordion_tab> <accordion_tab layout="topleft" + fit_panel="false" min_height="150" name="skin_makeup_tab" title="Makeup"> <scrolling_panel_list follows="all" + layout="topleft" left="0" name="skin_makeup_param_list" top="0" @@ -101,16 +127,19 @@ </accordion_tab> <accordion_tab layout="topleft" + fit_panel="false" min_height="150" name="skin_body_tab" title="Body Detail"> <scrolling_panel_list follows="all" + layout="topleft" left="0" name="skin_body_param_list" top="0" width="303" /> </accordion_tab> </accordion> + </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_edit_skirt.xml b/indra/newview/skins/default/xui/en/panel_edit_skirt.xml index 6cccab18430b5e0c979ffbbd2683c528dfcf413a..16f6950bd522ad294801be1f5e8a5cec85ac5163 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_skirt.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_skirt.xml @@ -1,21 +1,26 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel + background_visible="true" follows="all" height="400" layout="topleft" - left="10" + left="0" name="edit_skirt_panel" top_pad="10" - width="313" > + width="333" > <panel - border="true" - follows="left|top|right" - height="100" + border="false" + bg_alpha_color="DkGray2" + bg_opaque_color="DkGray2" + background_visible="true" + background_opaque="true" + follows="top|left|right" + height="90" left="10" layout="topleft" name="avatar_skirt_color_panel" top="0" - width="293" > + width="313" > <texture_picker can_apply_immediately="true" default_image_name="Default" @@ -34,31 +39,49 @@ height="80" label="Color/Tint" layout="topleft" - left_pad="10" + left_pad="20" name="Color/Tint" tool_tip="Click to open color picker" top="10" width="64" /> </panel> - <accordion - follows="left|top|right|bottom" - height ="340" - left="10" - name="wearable_accordion" - top_pad="10" - width="303"> + <panel + border="false" + bg_alpha_color="DkGray2" + bg_opaque_color="DkGray2" + background_visible="true" + background_opaque="true" + follows="all" + height="300" + layout="topleft" + left="10" + name="accordion_panel" + top_pad="10" + width="313"> + <accordion + follows="all" + height ="300" + layout="topleft" + left="0" + name="wearable_accordion" + single_expansion="true" + top="0" + width="313"> <accordion_tab layout="topleft" + fit_panel="false" min_height="150" name="skirt_main_tab" title="Skirt"> <scrolling_panel_list follows="all" + layout="topleft" left="0" name="skirt_main_param_list" top="0" width="303" /> </accordion_tab> </accordion> + </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_edit_socks.xml b/indra/newview/skins/default/xui/en/panel_edit_socks.xml index fc7de007146dc81109bc5659bd8a090a8a76209a..e4f916703b0c81f7cddd31e0cbad7d6aaba304c2 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_socks.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_socks.xml @@ -1,21 +1,26 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel + background_visible="true" follows="all" height="400" layout="topleft" - left="10" + left="0" name="edit_socks_panel" top_pad="10" - width="313" > + width="333" > <panel - border="true" - follows="left|top|right" - height="100" + border="false" + bg_alpha_color="DkGray2" + bg_opaque_color="DkGray2" + background_visible="true" + background_opaque="true" + follows="top|left|right" + height="90" left="10" layout="topleft" name="avatar_socks_color_panel" top="0" - width="293" > + width="313" > <texture_picker can_apply_immediately="true" default_image_name="Default" @@ -34,31 +39,49 @@ height="80" label="Color/Tint" layout="topleft" - left_pad="10" + left_pad="20" name="Color/Tint" tool_tip="Click to open color picker" top="10" width="64" /> </panel> - <accordion - follows="left|top|right|bottom" - height ="340" - left="10" - name="wearable_accordion" - top_pad="10" - width="303"> + <panel + border="false" + bg_alpha_color="DkGray2" + bg_opaque_color="DkGray2" + background_visible="true" + background_opaque="true" + follows="all" + height="300" + layout="topleft" + left="10" + name="accordion_panel" + top_pad="10" + width="313"> + <accordion + follows="all" + height ="300" + layout="topleft" + left="0" + name="wearable_accordion" + single_expansion="true" + top="0" + width="313"> <accordion_tab layout="topleft" + fit_panel="false" min_height="150" name="socks_main_tab" title="Socks"> <scrolling_panel_list follows="all" + layout="topleft" left="0" name="socks_main_param_list" top="0" width="303" /> </accordion_tab> </accordion> + </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/en/panel_edit_tattoo.xml index b214cd3de07cd8420415263d305e4b0d00f3b986..ed990eb0956468d35d1a9b91b809a032b401802d 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_tattoo.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_tattoo.xml @@ -1,57 +1,62 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel + background_visible="true" follows="all" height="400" layout="topleft" - left="10" + left="0" name="edit_tattoo_panel" top_pad="10" - width="313" > + width="333" > <panel - border="true" - follows="left|top|right" - height="100" + border="false" + bg_alpha_color="DkGray2" + bg_opaque_color="DkGray2" + background_visible="true" + background_opaque="true" + follows="top|left|right" + height="400" left="10" layout="topleft" name="avatar_tattoo_color_panel" top="0" - width="293" > + width="313" > <texture_picker can_apply_immediately="true" default_image_name="Default" follows="left|top" - height="80" + height="100" label="Head Tattoo" layout="topleft" - left="10" + left="30" name="Head Tattoo" tool_tip="Click to choose a picture" top="10" - width="64" /> + width="94" /> <texture_picker can_apply_immediately="true" default_image_name="Default" follows="left|top" - height="80" + height="100" label="Upper Tattoo" layout="topleft" - left_pad="10" + left_pad="30" name="Upper Tattoo" tool_tip="Click to choose a picture" top="10" - width="64" /> + width="94" /> <texture_picker can_apply_immediately="true" default_image_name="Default" follows="left|top" - height="80" + height="100" label="Lower Tattoo" layout="topleft" - left_pad="10" + left="30" name="Lower Tattoo" tool_tip="Click to choose a picture" - top="10" - width="64" /> + top_pad="10" + width="94" /> </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_edit_underpants.xml b/indra/newview/skins/default/xui/en/panel_edit_underpants.xml index 03e0bb70ef93d10a42c360885104d910e565be4e..d43497c943d6825abc1dd3202422c0c1c6f0af4f 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_underpants.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_underpants.xml @@ -1,21 +1,26 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel + background_visible="true" follows="all" height="400" layout="topleft" - left="10" + left="0" name="edit_underpants_panel" top_pad="10" - width="313" > + width="333" > <panel - border="true" - follows="left|top|right" - height="100" + border="false" + bg_alpha_color="DkGray2" + bg_opaque_color="DkGray2" + background_visible="true" + background_opaque="true" + follows="top|left|right" + height="90" left="10" layout="topleft" name="avatar_underpants_color_panel" top="0" - width="293" > + width="313" > <texture_picker can_apply_immediately="true" default_image_name="Default" @@ -34,31 +39,49 @@ height="80" label="Color/Tint" layout="topleft" - left_pad="10" + left_pad="20" name="Color/Tint" tool_tip="Click to open color picker" top="10" width="64" /> </panel> - <accordion - follows="left|top|right|bottom" - height ="340" - left="10" - name="wearable_accordion" - top_pad="10" - width="303"> + <panel + border="false" + bg_alpha_color="DkGray2" + bg_opaque_color="DkGray2" + background_visible="true" + background_opaque="true" + follows="all" + height="300" + layout="topleft" + left="10" + name="accordion_panel" + top_pad="10" + width="313"> + <accordion + follows="all" + height ="300" + layout="topleft" + left="0" + name="wearable_accordion" + single_expansion="true" + top="0" + width="313"> <accordion_tab layout="topleft" + fit_panel="false" min_height="150" name="underpants_main_tab" title="Underpants"> <scrolling_panel_list follows="all" + layout="topleft" left="0" name="underpants_main_param_list" top="0" width="303" /> </accordion_tab> </accordion> + </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_edit_undershirt.xml b/indra/newview/skins/default/xui/en/panel_edit_undershirt.xml index 20c56142fbb20d300960808a836e53e35b7482d8..45c6ef4526dafd4fc61cdd17b091242c5f353a26 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_undershirt.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_undershirt.xml @@ -1,21 +1,26 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel + background_visible="true" follows="all" height="400" layout="topleft" - left="10" + left="0" name="edit_undershirt_panel" top_pad="10" - width="313" > + width="333" > <panel - border="true" - follows="left|top|right" - height="100" + border="false" + bg_alpha_color="DkGray2" + bg_opaque_color="DkGray2" + background_visible="true" + background_opaque="true" + follows="top|left|right" + height="90" left="10" layout="topleft" name="avatar_undershirt_color_panel" top="0" - width="293" > + width="313" > <texture_picker can_apply_immediately="true" default_image_name="Default" @@ -34,31 +39,49 @@ height="80" label="Color/Tint" layout="topleft" - left_pad="10" + left_pad="20" name="Color/Tint" tool_tip="Click to open Color Picker" top="10" width="64" /> </panel> - <accordion - follows="left|top|right|bottom" - height ="340" - left="10" - name="wearable_accordion" - top_pad="10" - width="303"> + <panel + border="false" + bg_alpha_color="DkGray2" + bg_opaque_color="DkGray2" + background_visible="true" + background_opaque="true" + follows="all" + height="300" + layout="topleft" + left="10" + name="accordion_panel" + top_pad="10" + width="313"> + <accordion + follows="all" + height ="300" + layout="topleft" + left="0" + name="wearable_accordion" + single_expansion="true" + top="0" + width="313"> <accordion_tab layout="topleft" + fit_panel="false" min_height="150" name="undershirt_main_tab" title="Undershirt"> <scrolling_panel_list follows="all" + layout="topleft" left="0" name="undershirt_main_param_list" top="0" width="303" /> </accordion_tab> </accordion> + </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml index f76a56bda49e369534b1901a329ec5477b77c62c..dc2f085356d36ecbfbee841c93261e152a179389 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml @@ -150,8 +150,12 @@ left="0" value="Editing Shape" width="270" /> <panel - border="true" - follows="top|left" + border="false" + bg_alpha_color="DkGray2" + bg_opaque_color="DkGray2" + background_visible="true" + background_opaque="true" + follows="top|left|right" height="60" label="Shirt" layout="topleft" @@ -160,7 +164,7 @@ left="0" top_pad="10" width="313"> <text - follows="top|left" + follows="top|left|right" height="16" layout="topleft" left="10" @@ -335,30 +339,76 @@ left="0" visible="false" width="333" /> </panel> + <panel + follows="left|right|bottom" + height="38" + label="gear_buttom_panel" + layout="bottom|left|right" + left="0" + bottom="25" + name="gear_buttom_panel" + width="333"> + <button + follows="bottom|left" + tool_tip="Options" + height="18" + image_disabled="OptionsMenu_Disabled" + image_selected="OptionsMenu_Press" + image_unselected="OptionsMenu_Off" + layout="topleft" + left="10" + name="friends_viewsort_btn" + top="10" + width="18" /> + <button + follows="bottom|left" + height="18" + image_selected="AddItem_Press" + image_unselected="AddItem_Off" + image_disabled="AddItem_Disabled" + layout="topleft" + left_pad="10" + name="add_btn" + tool_tip="TODO" + width="18" /> + <button + follows="bottom|left" + height="18" + image_selected="TrashItem_Press" + image_unselected="TrashItem_Off" + image_disabled="TrashItem_Disabled" + layout="topleft" + left_pad="10" + right="-10" + name="del_btn" + tool_tip="TODO" + top_delta="0" + width="18" /> + </panel> <panel - follows="all" + follows="bottom|left|right" height="25" layout="bottom|left|right" left="0" name="button_panel" - top_pad="10" + bottom="5" width="333" > <button follows="bottomleft" layout="topleft" height="23" label="Save As" - left="10" + left="8" name="save_as_button" top="0" - width="100" /> + width="153" /> <button follows="bottomleft" layout="topleft" height="23" label="Revert" - left_pad="10" + left_pad="7" name="revert_button" - width="100" /> + width="153" /> </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml index 701a14e1c52260e9248c8d50bfc03f3cca5da688..789d69bc687f0ef6233cc075dd974126bdb499ed 100644 --- a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml +++ b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml @@ -98,6 +98,7 @@ background_visible="true" left="0" top="0" single_expansion="true" + fit_parent="true" follows="all" layout="topleft" name="groups_accordion"> diff --git a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml index 7d7e21d4b021a513c6de41a07693d6c4661dfe22..29c6a17c31de13a0580f2e3ffb62b05c1c8f603f 100644 --- a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml +++ b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml @@ -150,7 +150,7 @@ <button follows="left|top|right" height="23" - label="Leave Call" + label="End Call" name="end_call_btn" width="100" /> </layout_panel> diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml index cc68ec2bdc51d19e1848c22091158e64181de2f5..01adc00e1a16f3a42d1fdc48737597afe8d51333 100644 --- a/indra/newview/skins/default/xui/en/panel_login.xml +++ b/indra/newview/skins/default/xui/en/panel_login.xml @@ -64,7 +64,6 @@ First name: </text> <line_editor follows="left|bottom" -handle_edit_keys_directly="true" height="22" label="First" left_delta="0" @@ -85,7 +84,6 @@ top_pad="0" Last name: </text> <line_editor follows="left|bottom" -handle_edit_keys_directly="true" height="22" label="Last" max_length="31" @@ -106,7 +104,6 @@ top="20" </text> <line_editor follows="left|bottom" -handle_edit_keys_directly="true" height="22" max_length="16" name="password_edit" 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 869bbd234107d8a51891d711816d64ac5d492558..27d66945d99f7d98c0b3722ed8e1b5d5755d61b8 100644 --- a/indra/newview/skins/default/xui/en/panel_main_inventory.xml +++ b/indra/newview/skins/default/xui/en/panel_main_inventory.xml @@ -1,6 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel background_visible="true" + default_tab_group="1" follows="all" height="408" label="Things" @@ -9,22 +10,22 @@ min_width="240" name="main inventory panel" width="330"> - <panel.string - 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 + 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 + </panel.string> + <text type="string" length="1" follows="left|top" @@ -36,497 +37,125 @@ text_color="EmphasisColor" top_pad="0" width="300"> - Items: - </text> - <menu_bar - bg_visible="false" - follows="left|top|right" - height="20" + Items: + </text> + <filter_editor + text_pad_left="10" + follows="left|top|right" + height="23" + label="Filter Inventory" + layout="topleft" + left="10" + max_length="300" + name="inventory search editor" + top="3" + width="303" /> + <tab_container + bg_alpha_color="DkGray" + bg_opaque_color="DkGray" + background_visible="true" + background_opaque="true" + follows="all" + halign="center" + height="339" layout="topleft" - left="10" - mouse_opaque="false" - name="Inventory Menu" - top="+10" - visible="true" - width="290"> - <menu - height="101" - label="File" - layout="topleft" - left="0" - mouse_opaque="false" - name="File" - tear_off="true" - top="-117" - width="128"> - <menu_item_call - label="Open" - layout="topleft" - name="Open"> - <menu_item_call.on_click - function="Inventory.DoToSelected" - parameter="open" /> - </menu_item_call> - <menu - create_jump_keys="true" - label="Upload" - layout="topleft" - name="upload" - tear_off="true"> - <menu_item_call - label="Image (L$[COST])..." - layout="topleft" - name="Upload Image" - shortcut="control|U"> - <menu_item_call.on_click - function="File.UploadImage" - parameter="" /> - <menu_item_call.on_enable - function="File.EnableUpload" /> - </menu_item_call> - <menu_item_call - label="Sound (L$[COST])..." - layout="topleft" - name="Upload Sound"> - <menu_item_call.on_click - function="File.UploadSound" - parameter="" /> - <menu_item_call.on_enable - function="File.EnableUpload" /> - </menu_item_call> - <menu_item_call - label="Animation (L$[COST])..." - layout="topleft" - name="Upload Animation"> - <menu_item_call.on_click - function="File.UploadAnim" - parameter="" /> - <menu_item_call.on_enable - function="File.EnableUpload" /> - </menu_item_call> - <menu_item_call - label="Model..." - layout="topleft" - name="Upload Model"> - <menu_item_call.on_click - function="File.UploadModel" - parameter="" /> - <menu_item_call.on_enable - function="File.EnableUploadModel" /> - </menu_item_call> - <menu_item_call - label="Bulk (L$[COST] per file)..." - layout="topleft" - name="Bulk Upload"> - <menu_item_call.on_click - function="File.UploadBulk" - parameter="" /> - </menu_item_call> - <menu_item_separator - layout="topleft" /> - </menu> - <menu_item_separator - layout="topleft" /> - <menu_item_call - label="New Window" - layout="topleft" - name="New Window"> - <menu_item_call.on_click - function="Inventory.NewWindow" /> - </menu_item_call> - <menu_item_separator - layout="topleft" - name="separator2" /> - <menu_item_call - label="Show Filters" - layout="topleft" - name="Show Filters"> - <menu_item_call.on_click - function="Inventory.ShowFilters" /> - </menu_item_call> - <menu_item_call - label="Reset Filters" - layout="topleft" - name="Reset Current"> - <menu_item_call.on_click - function="Inventory.ResetFilters" /> - </menu_item_call> - <menu_item_call - label="Close All Folders" - layout="topleft" - name="Close All Folders"> - <menu_item_call.on_click - function="Inventory.CloseAllFolders" /> - </menu_item_call> - <menu_item_separator - layout="topleft" - name="separator3" /> - <menu_item_call - label="Empty Trash" - layout="topleft" - name="Empty Trash"> - <menu_item_call.on_click - function="Inventory.EmptyTrash" /> - </menu_item_call> - <menu_item_call - label="Empty Lost And Found" - layout="topleft" - name="Empty Lost And Found"> - <menu_item_call.on_click - function="Inventory.EmptyLostAndFound" /> - </menu_item_call> - </menu> - <menu - height="121" - label="Create" - layout="topleft" - left="0" - mouse_opaque="false" - name="Create" - tear_off="true" - top="-201" - width="121"> - <menu_item_call - label="New Folder" - layout="topleft" - name="New Folder"> - <menu_item_call.on_click - function="Inventory.DoCreate" - parameter="category" /> - </menu_item_call> - <menu_item_call - label="New Script" - layout="topleft" - name="New Script"> - <menu_item_call.on_click - function="Inventory.DoCreate" - parameter="lsl" /> - </menu_item_call> - <menu_item_call - label="New Notecard" - layout="topleft" - name="New Note"> - <menu_item_call.on_click - function="Inventory.DoCreate" - parameter="notecard" /> - </menu_item_call> - <menu_item_call - label="New Gesture" - layout="topleft" - name="New Gesture"> - <menu_item_call.on_click - function="Inventory.DoCreate" - parameter="gesture" /> - </menu_item_call> - <menu - height="175" - label="New Clothes" - layout="topleft" - left_delta="0" - mouse_opaque="false" - name="New Clothes" - top_pad="514" - width="125"> - <menu_item_call - label="New Shirt" - layout="topleft" - name="New Shirt"> - <menu_item_call.on_click - function="Inventory.DoCreate" - parameter="shirt" /> - </menu_item_call> - <menu_item_call - label="New Pants" - layout="topleft" - name="New Pants"> - <menu_item_call.on_click - function="Inventory.DoCreate" - parameter="pants" /> - </menu_item_call> - <menu_item_call - label="New Shoes" - layout="topleft" - name="New Shoes"> - <menu_item_call.on_click - function="Inventory.DoCreate" - parameter="shoes" /> - </menu_item_call> - <menu_item_call - label="New Socks" - layout="topleft" - name="New Socks"> - <menu_item_call.on_click - function="Inventory.DoCreate" - parameter="socks" /> - </menu_item_call> - <menu_item_call - label="New Jacket" - layout="topleft" - name="New Jacket"> - <menu_item_call.on_click - function="Inventory.DoCreate" - parameter="jacket" /> - </menu_item_call> - <menu_item_call - label="New Skirt" - layout="topleft" - name="New Skirt"> - <menu_item_call.on_click - function="Inventory.DoCreate" - parameter="skirt" /> - </menu_item_call> - <menu_item_call - label="New Gloves" - layout="topleft" - name="New Gloves"> - <menu_item_call.on_click - function="Inventory.DoCreate" - parameter="gloves" /> - </menu_item_call> - <menu_item_call - label="New Undershirt" - layout="topleft" - name="New Undershirt"> - <menu_item_call.on_click - function="Inventory.DoCreate" - parameter="undershirt" /> - </menu_item_call> - <menu_item_call - label="New Underpants" - layout="topleft" - name="New Underpants"> - <menu_item_call.on_click - function="Inventory.DoCreate" - parameter="underpants" /> - </menu_item_call> - <menu_item_call - label="New Alpha" - layout="topleft" - name="New Alpha"> - <menu_item_call.on_click - function="Inventory.DoCreate" - parameter="alpha" /> - </menu_item_call> - <menu_item_call - label="New Tattoo" - layout="topleft" - name="New Tattoo"> - <menu_item_call.on_click - function="Inventory.DoCreate" - parameter="tattoo" /> - </menu_item_call> - </menu> - <menu - height="85" - label="New Body Parts" - layout="topleft" - left_delta="0" - mouse_opaque="false" - name="New Body Parts" - top_pad="514" - width="118"> - <menu_item_call - label="New Shape" - layout="topleft" - name="New Shape"> - <menu_item_call.on_click - function="Inventory.DoCreate" - parameter="shape" /> - </menu_item_call> - <menu_item_call - label="New Skin" - layout="topleft" - name="New Skin"> - <menu_item_call.on_click - function="Inventory.DoCreate" - parameter="skin" /> - </menu_item_call> - <menu_item_call - label="New Hair" - layout="topleft" - name="New Hair"> - <menu_item_call.on_click - function="Inventory.DoCreate" - parameter="hair" /> - </menu_item_call> - <menu_item_call - label="New Eyes" - layout="topleft" - name="New Eyes"> - <menu_item_call.on_click - function="Inventory.DoCreate" - parameter="eyes" /> - </menu_item_call> - </menu> - </menu> - <menu - height="49" - label="Sort" - layout="topleft" - left="0" - mouse_opaque="false" - name="Sort" - tear_off="true" - top="-113" - width="118"> - <menu_item_check - control_name="Inventory.SortByName" - label="By Name" - layout="topleft" - name="By Name"> - <menu_item_check.on_click - function="Inventory.SetSortBy" - parameter="name" /> - </menu_item_check> - <menu_item_check - control_name="Inventory.SortByDate" - label="By Date" - layout="topleft" - name="By Date"> - <menu_item_check.on_click - function="Inventory.SetSortBy" - parameter="date" /> - </menu_item_check> - <menu_item_separator - layout="topleft" /> - <menu_item_check - control_name="Inventory.FoldersAlwaysByName" - label="Folders Always By Name" - layout="topleft" - name="Folders Always By Name"> - <menu_item_check.on_click - function="Inventory.SetSortBy" - parameter="foldersalwaysbyname" /> - </menu_item_check> - <menu_item_check - control_name="Inventory.SystemFoldersToTop" - label="System Folders To Top" - layout="topleft" - name="System Folders To Top"> - <menu_item_check.on_click - function="Inventory.SetSortBy" - parameter="systemfolderstotop" /> - </menu_item_check> - </menu> - </menu_bar> - <filter_editor - text_pad_left="10" - follows="left|top|right" - height="23" - label="Filter Inventory" + left="7" + name="inventory filter tabs" + tab_height="30" + tab_group="1" + tab_position="top" + tab_min_width="100" + top_pad="10" + width="312"> + <inventory_panel + bg_opaque_color="DkGray2" + bg_alpha_color="DkGray2" + background_visible="true" + background_opaque="true" + border="false" + bevel_style="none" + follows="all" + height="338" + label="MY INVENTORY" + help_topic="my_inventory_tab" layout="topleft" - left="10" - max_length="300" - name="inventory search editor" - top="+31" - width="303" /> - <tab_container - bg_alpha_color="DkGray" - bg_opaque_color="DkGray" - background_visible="true" - background_opaque="true" - follows="all" - halign="center" - height="311" - 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" - background_visible="true" - background_opaque="true" - border="false" - bevel_style="none" - follows="all" - height="310" - label="MY INVENTORY" - help_topic="my_inventory_tab" - layout="topleft" - left="0" - name="All Items" - sort_order_setting="InventorySortOrder" - top="16" - width="288" /> - <inventory_panel - bg_opaque_color="DkGray2" - bg_alpha_color="DkGray2" - background_visible="true" - background_opaque="true" - border="false" - bevel_style="none" - follows="all" - height="310" - label="RECENT" - help_topic="recent_inventory_tab" - layout="topleft" - left_delta="0" - name="Recent Items" - width="290" /> - </tab_container> - - <panel - background_visible="true" + left="0" + name="All Items" + sort_order_setting="InventorySortOrder" + top="16" + width="288" /> + <inventory_panel + bg_opaque_color="DkGray2" + bg_alpha_color="DkGray2" + background_visible="true" + background_opaque="true" + border="false" bevel_style="none" - follows="left|right|bottom" - height="27" + follows="all" + height="338" + label="RECENT" + help_topic="recent_inventory_tab" layout="topleft" - top_pad="-1" - left="10" - name="bottom_panel" - width="310"> - <button - follows="bottom|left" - tool_tip="Show additional options" - 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="0" - name="options_gear_btn" - top="1" - width="31" /> - <button - follows="bottom|left" - 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="1" - name="add_btn" - tool_tip="Add new item" - 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|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" - name="trash_btn" - tool_tip="Remove selected item" - width="31"/> - </panel> + left_delta="0" + name="Recent Items" + width="290" /> + </tab_container> - + <panel + background_visible="true" + bevel_style="none" + follows="left|right|bottom" + height="27" + layout="topleft" + top_pad="-1" + left="10" + name="bottom_panel" + width="310"> + <button + follows="bottom|left" + tool_tip="Show additional options" + 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="0" + name="options_gear_btn" + top="1" + width="31" /> + <button + follows="bottom|left" + 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="1" + name="add_btn" + tool_tip="Add new item" + 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|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" + name="trash_btn" + tool_tip="Remove selected item" + width="31"/> + </panel> </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 53dda1927a7c649271b29fa181beed2ca18a62a3..ff2aae645ba2e52e67059c4ab4242ee74b78366c 100644 --- a/indra/newview/skins/default/xui/en/panel_nearby_media.xml +++ b/indra/newview/skins/default/xui/en/panel_nearby_media.xml @@ -64,19 +64,31 @@ function="MediaListCtrl.GoMediaPrefs" /> </button> <button - name="more_less_btn" + name="more_btn" follows="right" tool_tip="Advanced Controls" top_delta="0" right="-8" width="66" height="22" - toggle="true" label="More >>" label_selected="Less <<"> <button.commit_callback function="MediaListCtrl.MoreLess" /> </button> + <button + name="less_btn" + follows="right" + tool_tip="Advanced Controls" + top_delta="0" + right="-8" + width="66" + height="22" + label="More >>" + label_selected="Less <<"> + <button.commit_callback + function="MediaListCtrl.MoreLess" /> + </button> </panel> <panel name="nearby_media_panel" diff --git a/indra/newview/skins/default/xui/en/panel_online_status_toast.xml b/indra/newview/skins/default/xui/en/panel_online_status_toast.xml index 14cb5fffee2fb43ed9dae9353227b70148427a85..b1a7697e8338b94543432fd71c1e167d93b9da0e 100644 --- a/indra/newview/skins/default/xui/en/panel_online_status_toast.xml +++ b/indra/newview/skins/default/xui/en/panel_online_status_toast.xml @@ -1,13 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel background_visible="false" - height="152" + height="40" label="friend_online_status" layout="topleft" left="0" name="friend_online_status" top="0" - width="305"> + width="220"> <avatar_icon follows="top|left" height="18" @@ -21,7 +21,7 @@ <text font="SansSerifSmall" follows="all" - height="137" + height="13" layout="topleft" left_pad="5" name="message" @@ -29,7 +29,7 @@ top="15" use_ellipses="true" value="" - width="285" + width="189" word_wrap="true" max_length="350" /> </panel> \ No newline at end of file diff --git a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml index 4d3ee07195c7f69d31a3614f64073d20866e1fb0..c1800384a38a6e53b402aed89b24a7dc34291718 100644 --- a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml +++ b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml @@ -12,6 +12,9 @@ name="outfit_edit" top="0" width="320"> + <string + name="No Outfit" + value="No Outfit"/> <panel.string name="not_available"> @@ -94,7 +97,7 @@ font="SansSerifHugeBold" height="26" layout="topleft" - name="curr_look_name" + name="curr_outfit_name" text_color="LtGray" top_pad="0" value="[Current Outfit]" 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 f9ad525642a19d97853374f7dd4bc04fd0dcc069..66ed43efecc6cd5c7c3dd3501b4644e611d2fc35 100644 --- a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml +++ b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml @@ -122,7 +122,7 @@ label="Edit Outfit" layout="topleft" right="-140" - name="look_edit_btn" + name="edit_current_outfit_btn" top="26" visible="false" width="50" /> diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml index 6152dd1587f31dd736930f2d7cad03d3129151e8..8131b75b70454067221eb13597ba7c7169c087b1 100644 --- a/indra/newview/skins/default/xui/en/panel_people.xml +++ b/indra/newview/skins/default/xui/en/panel_people.xml @@ -1,6 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <!-- Side tray panel --> <panel + default_tab_group="1" follows="all" height="449" label="People" @@ -56,6 +57,7 @@ layout="topleft" left="5" name="tabs" + tab_group="1" tab_min_width="70" tab_height="30" tab_position="top" diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml index c1c1e54b47720e91ca8242dc73c507c60a51ce4c..a43b244fa0970c6530f21fe2911f10c694865626 100644 --- a/indra/newview/skins/default/xui/en/panel_place_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_place_profile.xml @@ -743,7 +743,6 @@ bg_focus_color="DkGray2" bg_readonly_color="DkGray2" follows="left|top|right" - handle_edit_keys_directly="true" height="90" layout="topleft" left="10" diff --git a/indra/newview/skins/default/xui/en/panel_places.xml b/indra/newview/skins/default/xui/en/panel_places.xml index c61007a9e1a3fa2a150044074f6f12c5b56c0443..a7a0efcdb3bc1a3a9d467e3106334643915dd257 100644 --- a/indra/newview/skins/default/xui/en/panel_places.xml +++ b/indra/newview/skins/default/xui/en/panel_places.xml @@ -1,6 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel background_visible="true" + default_tab_group="1" follows="all" height="570" label="Places" @@ -37,6 +38,7 @@ background_visible="true" name="Places Tabs" tab_min_width="80" tab_height="30" + tab_group="1" tab_position="top" top_pad="10" width="315" /> @@ -132,5 +134,14 @@ background_visible="true" right="-10" top="1" width="60" /> + <button + follows="bottom|left" + height="23" + label="Profile" + layout="topleft" + name="profile_btn" + right="-1" + top="1" + width="111" /> </panel> </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 e604e401f6c3ddb2be07a3cc66eb3fcfd9402a24..69e8e6fdcc9f21db7f3bb17b53dcf3821a5de085 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml @@ -186,6 +186,32 @@ Automatic position for: function="Pref.applyUIColor" parameter="BackgroundChatColor" /> </color_swatch> + <text + type="string" + length="1" + follows="left|top" + height="12" + layout="topleft" + left="30" + name="UI Size:" + top_pad="5" + width="300"> + UI size + </text> + <slider + control_name="UIScaleFactor" + decimal_digits="2" + follows="left|top" + height="17" + increment="0.025" + initial_value="1" + layout="topleft" + left_delta="52" + max_val="1.4" + min_val="0.75" + name="ui_scale_slider" + top_pad="-14" + width="180" /> <check_box control_name="ShowScriptErrors" follows="left|top" @@ -193,6 +219,7 @@ Automatic position for: label="Show script errors in:" layout="topleft" left="30" + top_pad="10" name="show_script_errors" width="256" /> <radio_group @@ -247,6 +274,7 @@ Automatic position for: top_pad="5" width="200" /> <button + layout="topleft" follows="top|left" enabled_control="EnableVoiceChat" height="23" @@ -257,8 +285,8 @@ Automatic position for: <button.commit_callback function="Pref.VoiceSetKey" /> </button> - <button - enabled_control="EnableVoiceChat" + <button + enabled_control="EnableVoiceChat" follows="top|left" halign="center" height="23" @@ -271,4 +299,15 @@ Automatic position for: <button.commit_callback function="Pref.VoiceSetMiddleMouse" /> </button> + <button + height="23" + label="Other Devices" + left="30" + name="joystick_setup_button" + top_pad="12" + width="155"> + <button.commit_callback + function="Floater.Show" + parameter="pref_joystick" /> + </button> </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 e667fa9a2b0a0dde0724e23055219847b520c3e1..9eaabbe77b0b519799cb0ccd649dd18eda74e351 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_general.xml @@ -177,7 +177,7 @@ layout="topleft" left="30" name="start_location_textbox" - top_pad="10" + top_pad="15" width="394"> Start location: </text> @@ -256,26 +256,15 @@ left="50" name="show_my_name_checkbox1" width="300" /> - <check_box - enabled_control="AvatarNameTagMode" - control_name="SmallAvatarNames" - height="16" - initial_value="true" - label="Small name tags" - layout="topleft" - left_delta="175" - name="small_avatar_names_checkbox" - width="200" /> <check_box enabled_control="AvatarNameTagMode" control_name="RenderShowGroupTitleAll" height="16" label="Show group titles" layout="topleft" - left_delta="-175" + left_delta="175" name="show_all_title_checkbox1" - top_pad="5" - width="300" /> + width="200" /> <text type="string" length="1" @@ -354,7 +343,7 @@ left="30" mouse_opaque="false" name="text_box3" - top_pad="10" + top_pad="15" width="240"> Busy mode response: </text> diff --git a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml index 66eae5f51633314020bdbcb87bb398623e3db53e..9e48f11de5537297fd7f4f98b8a2728f614c754d 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml @@ -9,33 +9,6 @@ name="Display panel" top="1" width="517"> - <text - type="string" - length="1" - follows="left|top" - height="12" - layout="topleft" - left="30" - name="UI Size:" - top="10" - width="300"> - UI size: - </text> - <slider - can_edit_text="true" - control_name="UIScaleFactor" - decimal_digits="2" - follows="left|top" - height="15" - increment="0.025" - initial_value="1" - layout="topleft" - left_delta="52" - max_val="1.4" - min_val="0.75" - name="ui_scale_slider" - top_pad="2" - width="180" /> <text type="string" length="1" @@ -44,7 +17,7 @@ layout="topleft" left="30" name="QualitySpeed" - top_pad="4" + top="10" width="400"> Quality and speed: </text> 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 3d7f3924046808f3c23e7ead09c5dfed52068924..fca9b4bca157861e6e54f55b1ab3d8ed3d034f23 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml @@ -84,7 +84,7 @@ </text> <check_box enabled="false" - control_name="LogChat" + control_name="LogNearbyChat" height="16" label="Save nearby chat logs on my computer" layout="topleft" 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 2123e62daa08e99b4b79ecf0b3aedf3dc7a7f5ba..500e65b916c63400894585fca84267091945657b 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml @@ -9,18 +9,6 @@ name="Input panel" top="1" width="517"> - <button - height="23" - label="Other Devices" - layout="topleft" - left="30" - name="joystick_setup_button" - top="10" - width="155"> - <button.commit_callback - function="Floater.Show" - parameter="pref_joystick" /> - </button> <text type="string" length="1" @@ -29,7 +17,7 @@ layout="topleft" left="30" name="Mouselook:" - top_pad="10" + top="10" width="300"> Mouselook: </text> @@ -210,7 +198,6 @@ enabled="false" follows="left|top" font="SansSerif" - handle_edit_keys_directly="true" height="23" layout="topleft" left="80" diff --git a/indra/newview/skins/default/xui/en/panel_region_covenant.xml b/indra/newview/skins/default/xui/en/panel_region_covenant.xml index dc8f71c868af937620d9248710ef5ff102eb0f58..2b2ea78fac4bb7d48a4ed509fabb07decc8131cf 100644 --- a/indra/newview/skins/default/xui/en/panel_region_covenant.xml +++ b/indra/newview/skins/default/xui/en/panel_region_covenant.xml @@ -113,7 +113,6 @@ max_length="65535" name="covenant_editor" top_delta="30" - handle_edit_keys_directly="true" width="340" word_wrap="true"> There is no Covenant provided for this Estate. diff --git a/indra/newview/skins/default/xui/en/panel_script_ed.xml b/indra/newview/skins/default/xui/en/panel_script_ed.xml index d4444205503d6d021f33597e9fc3547e96b47329..c5c66c04d500a1b1f92972d10a9ede123f131ca0 100644 --- a/indra/newview/skins/default/xui/en/panel_script_ed.xml +++ b/indra/newview/skins/default/xui/en/panel_script_ed.xml @@ -143,7 +143,6 @@ name="Script Editor" width="487" show_line_numbers="true" - handle_edit_keys_directly="true" word_wrap="true"> Loading... </text_editor> diff --git a/indra/newview/skins/default/xui/en/panel_scrolling_param.xml b/indra/newview/skins/default/xui/en/panel_scrolling_param.xml index 44afadf65a6df9a077e0d0c06121d6e39780b1c7..f9c86fc75b739de40a411e9a70ccc1f32fd35523 100644 --- a/indra/newview/skins/default/xui/en/panel_scrolling_param.xml +++ b/indra/newview/skins/default/xui/en/panel_scrolling_param.xml @@ -5,7 +5,7 @@ left="0" name="LLScrollingPanelParam" top="152" - width="270"> + width="290"> <text follows="left|top" height="16" @@ -46,6 +46,36 @@ width="128"> Loading... </text> + <view_border + layout="topleft" + follows="left|top" + left="2" + top="0" + width="132" + height="132" + thickness="2" + shadow_light_color="LtGray_50" + highlight_light_color="LtGray_50" + highlight_dark_color="LtGray_50" + shadow_dark_color="LtGray_50" + bevel_style="in" + name="left_border" + /> + <view_border + layout="topleft" + follows="left|top" + left_pad="2" + top_delta="0" + width="132" + height="132" + thickness="2" + shadow_light_color="LtGray_50" + highlight_light_color="LtGray_50" + highlight_dark_color="LtGray_50" + shadow_dark_color="LtGray_50" + bevel_style="in" + name="right_border" + /> <button enabled="false" height="132" 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 8c7de22cf8d940e02fdeeb209d793ab86fe56bd3..c2624ce0d05338473046f3bcfc7081c978a81179 100644 --- a/indra/newview/skins/default/xui/en/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_status_bar.xml @@ -62,11 +62,11 @@ halign="right" font="SansSerifSmall" follows="right|top" - image_selected="BuyArrow_Over" - image_unselected="BuyArrow_Over" - image_pressed="BuyArrow_Press" + image_selected="spacer35.tga" + image_unselected="spacer35.tga" + image_pressed="spacer35.tga" height="16" - label="Buy" + label="Buy L$" label_color="EmphasisColor" left_pad="0" label_shadow="false" diff --git a/indra/newview/skins/default/xui/en/panel_toast.xml b/indra/newview/skins/default/xui/en/panel_toast.xml index 11069b3ac337edd88b3ab242b99a0f413ce70895..e7384fa77f236876658087d8184e4facdb13c3a0 100644 --- a/indra/newview/skins/default/xui/en/panel_toast.xml +++ b/indra/newview/skins/default/xui/en/panel_toast.xml @@ -64,7 +64,6 @@ text_color="white" top="5" translate="false" - v_pad="5" use_ellipses="true" width="260"> Toast text; diff --git a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml index 20a1de59fcd6f88a7af213d4ff19c5cfb3207f3c..73650a19dc370133ea9acaec49462426868a89ad 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml @@ -1,6 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel background_visible="true" +default_tab_group="1" follows="all" height="570" label="Outfits" @@ -90,6 +91,7 @@ width="333"> min_height="410" width="320" left="0" + tab_group="1" top_pad="6" follows="all" /> <!-- <button @@ -120,6 +122,6 @@ width="333"> layout="topleft" left="0" name="panel_edit_wearable" - top="35" + top="0" visible="false" /> </panel> diff --git a/indra/newview/skins/default/xui/en/widgets/line_editor.xml b/indra/newview/skins/default/xui/en/widgets/line_editor.xml index a21e3f2645087f765f55111a03eda2ab0c504fa9..a054960bf8cc40cbeed3dfdcba5e69ff7f0f1238 100644 --- a/indra/newview/skins/default/xui/en/widgets/line_editor.xml +++ b/indra/newview/skins/default/xui/en/widgets/line_editor.xml @@ -3,7 +3,6 @@ background_image_disabled="TextField_Disabled" background_image_focused="TextField_Active" select_on_focus="false" - handle_edit_keys_directly="false" commit_on_focus_lost="true" ignore_tab="true" cursor_color="TextCursorColor" 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 c453d415b49919131d3fd0f2e24961a1b6db357c..49bf2a744249effc20096ed3d61c2ec0ca7d9aca 100644 --- a/indra/newview/skins/default/xui/es/floater_about_land.xml +++ b/indra/newview/skins/default/xui/es/floater_about_land.xml @@ -264,7 +264,7 @@ Vaya al menú Mundo > Acerca del terreno o seleccione otra parcela para ver s [COUNT] </text> <text left="4" name="Autoreturn" width="412"> - Devolución automática de objetos de otros Residentes (minutos, 0 para desactivarla): + Devolución automática de objetos de otros (en min., 0 para desactivarla): </text> <line_editor name="clean other time" right="-20"/> <text name="Object Owners:" width="150"> 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 9a0a566a55b5bc802474c819f0c31028aff33eed..a40f65d5d0f710eb92b4a3fe746c3acf4408be12 100644 --- a/indra/newview/skins/default/xui/es/floater_buy_land.xml +++ b/indra/newview/skins/default/xui/es/floater_buy_land.xml @@ -13,17 +13,17 @@ No puede unirse ni dividirse. </floater.string> <floater.string name="cant_buy_for_group"> - No tiene permiso de comprar terreno para el grupo que tiene activado. + No tienes permiso de comprar terreno para el grupo que tienes activado. </floater.string> <floater.string name="no_land_selected"> No se ha seleccionado terreno. </floater.string> <floater.string name="multiple_parcels_selected"> Se han seleccionado varias parcelas diferentes. -Inténtelo seleccionando un área más pequeña. +Inténtalo seleccionando un área más pequeña. </floater.string> <floater.string name="no_permission"> - No tiene permiso de comprar terreno para el grupo que tiene activado. + No tienes permiso de comprar terreno para el grupo que tienes activado. </floater.string> <floater.string name="parcel_not_for_sale"> La parcela seleccionada no está en venta. @@ -32,20 +32,20 @@ Inténtelo seleccionando un área más pequeña. El grupo ya es propietario de la parcela. </floater.string> <floater.string name="you_already_own"> - Usted ya es propietario de la parcela. + Ya eres propietario de la parcela. </floater.string> <floater.string name="set_to_sell_to_other"> - La parcela seleccionada está marcada para ser vendida a otro + La parcela seleccionada está marcada para ser vendida a otro. </floater.string> <floater.string name="no_public_land"> El área seleccionada no tiene terreno público. </floater.string> <floater.string name="not_owned_by_you"> - Está seleccionado un terreno propiedad de otro Residente. + Estás 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... + Procesando tu compra... (Llevará uno o dos minutos). </floater.string> @@ -68,10 +68,10 @@ Prueba a seleccionar un área más pequeña. no necesita </floater.string> <floater.string name="must_upgrade"> - Para poseer terreno, su cuenta debe ascender de categorÃa. + Para poseer terreno, tu cuenta debe ascender de categorÃa. </floater.string> <floater.string name="cant_own_land"> - Su cuenta puede poseer terreno. + Tu cuenta puede poseer terreno. </floater.string> <floater.string name="land_holdings"> Tienes [BUYER] m² de terreno. @@ -112,16 +112,16 @@ los suficientes créditos de uso en contribución de terreno para cubrir esta parcela. </floater.string> <floater.string name="have_enough_lindens"> - Tiene [AMOUNT] L$, cantidad suficiente para comprar este terreno. + Tienes [AMOUNT] L$, cantidad suficiente para comprar este terreno. </floater.string> <floater.string name="not_enough_lindens"> - Sólo tiene [AMOUNT] L$. NecesitarÃa [AMOUNT2] L$ más. + Sólo tienes [AMOUNT] L$. NecesitarÃas [AMOUNT2] L$ más. </floater.string> <floater.string name="balance_left"> - Tras la compra, aún tendrá [AMOUNT] L$. + Tras la compra, aún tendrás [AMOUNT] L$. </floater.string> <floater.string name="balance_needed"> - Para costearse este terreno, deberá comprar, al menos, [AMOUNT] L$. + Para costearte este terreno, deberás comprar, al menos, [AMOUNT] L$. </floater.string> <floater.string name="no_parcel_selected"> (No se ha seleccionado una parcela) @@ -163,7 +163,7 @@ para cubrir esta parcela. Podrá o no unirse o dividirse. </text> <text name="covenant_text"> - Deve aceptar el Contrato del Estado: + Debes aceptar el Contrato del Estado: </text> <text left="470" name="covenant_timestamp_text"/> <text_editor name="covenant_editor"> @@ -198,7 +198,7 @@ se vende con los objetos </text> <button label="Ir al sitio web" name="error_web"/> <text name="account_action"> - Ascienda a la categorÃa de miembro premium. + Asciende a la categorÃa de miembro premium. </text> <text name="account_reason"> Sólo pueden ser propietarios de terreno los miembros premium. @@ -209,7 +209,7 @@ se vende con los objetos <combo_box.item label="6.00 US$/mes, facturados anualmente" name="US$6.00/month,billedannually"/> </combo_box> <text name="land_use_action"> - Aumenta su cuota mensual por uso de terreno a 40 US$/mes. + Aumenta tu cuota mensual por uso de terreno a 40 US$/mes. </text> <text name="land_use_reason"> Tienes 1309 m² de terreno. @@ -219,7 +219,7 @@ Esta parcela es de 512 m². Pagar al residente Joe 4.000 L$ por el terreno </text> <text name="currency_reason"> - Tiene 2.100 L$. + Tienes 2.100 L$. </text> <text name="currency_action"> Comprar más L$ @@ -231,7 +231,7 @@ Esta parcela es de 512 m². por, aprox., [LOCAL_AMOUNT] </text> <text name="currency_balance"> - Tiene 2.100 L$. + Tienes 2.100 L$. </text> <check_box label="Quitar [AMOUNT] m² de las contribuciones de grupo." name="remove_contribution"/> <button label="Comprar" name="buy_btn"/> diff --git a/indra/newview/skins/default/xui/es/floater_customize.xml b/indra/newview/skins/default/xui/es/floater_customize.xml index 8daf2bed156132180f8104254624b7256ba7e846..b7058d431434aefdd03d1dd759eea45a5068d52a 100644 --- a/indra/newview/skins/default/xui/es/floater_customize.xml +++ b/indra/newview/skins/default/xui/es/floater_customize.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater customize" title="APARIENCIA" width="527"> - <tab_container name="customize tab container" width="525"> +<floater name="floater customize" title="APARIENCIA"> + <tab_container name="customize tab container"> <text label="Partes del cuerpo" name="body_parts_placeholder"> Partes del cuerpo </text> - <panel label="Forma" name="Shape" width="389"> + <panel label="Forma" name="Shape"> <button label="Restablecer" label_selected="Restablecer" name="Revert"/> <button label="Cuerpo" label_selected="Cuerpo" name="Body"/> <button label="Cabeza" label_selected="Cabeza" name="Head"/> @@ -40,12 +40,12 @@ <text name="no modify instructions"> No tiene permiso para modificar este Ãtem. </text> - <text name="Item Action Label" right="107"> + <text name="Item Action Label"> Forma: </text> <button label="Crear una forma nueva" label_selected="Crear una forma nueva" name="Create New"/> - <button label="Guardar" label_selected="Guardar" left="113" name="Save"/> - <button label="Guardar como..." label_selected="Guardar como..." left="199" name="Save As" width="102"/> + <button label="Guardar" label_selected="Guardar" name="Save"/> + <button label="Guardar como..." label_selected="Guardar como..." name="Save As"/> </panel> <panel label="Piel" name="Skin"> <button label="Color de piel" label_selected="Color de piel" name="Skin Color" width="115"/> @@ -522,7 +522,7 @@ <button label="Revertir" label_selected="Revertir" name="Revert"/> </panel> </tab_container> - <scroll_container left="230" name="panel_container"/> + <scroll_container name="panel_container"/> <button label="Información del script" label_selected="Información del script" name="script_info" tool_tip="Mostrar los scripts anexados a tu avatar"/> <button label="Hacer un vestuario" label_selected="Hacer un vestuario" name="make_outfit_btn"/> <button label="Cancelar" label_selected="Cancelar" name="Cancel"/> diff --git a/indra/newview/skins/default/xui/es/floater_incoming_call.xml b/indra/newview/skins/default/xui/es/floater_incoming_call.xml index 2b5fc7f1935d91b9cdccad79fce5f332aaca353d..021e5fb6b72ae623fb53e5228cde368d44a3d0b7 100644 --- a/indra/newview/skins/default/xui/es/floater_incoming_call.xml +++ b/indra/newview/skins/default/xui/es/floater_incoming_call.xml @@ -22,6 +22,6 @@ ¿Quieres dejar [CURRENT_CHAT] y entrar a este chat de voz? </text> <button label="Aceptar" label_selected="Aceptar" name="Accept"/> - <button label="Expulsar" label_selected="Expulsar" name="Reject"/> + <button label="Rechazar" label_selected="Rechazar" name="Reject"/> <button label="Comenzar un MI" name="Start IM"/> </floater> diff --git a/indra/newview/skins/default/xui/es/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/es/floater_inventory_view_finder.xml index 0cbee11bfb8e73f2b444e64993cb8049efb490c3..c9d639d8cf630fa33124b26049afa94097aefbd7 100644 --- a/indra/newview/skins/default/xui/es/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/es/floater_inventory_view_finder.xml @@ -11,12 +11,12 @@ <check_box label="Sonidos" name="check_sound"/> <check_box label="Texturas" name="check_texture"/> <check_box label="Fotos" name="check_snapshot"/> - <button label="Todo" label_selected="Todo" name="All" width="70"/> - <button label="Nada" label_selected="Nada" name="None" width="70" bottom_delta="0" left="83"/> - <check_box label="Mostrar siempre las carpetas" name="check_show_empty"/> + <button label="Todos" label_selected="Todo" name="All"/> + <button label="Ninguno" label_selected="Nada" name="None"/> + <check_box label="Mostrar siempre las carpetas" name="check_show_empty"/> <check_box label="Desde el fin de sesión" name="check_since_logoff" bottom_delta="-36"/> <text name="- OR -"> - - O - + - o - </text> <spinner label="horas atrás" name="spin_hours_ago"/> <spinner label="dÃas atrás" name="spin_days_ago"/> diff --git a/indra/newview/skins/default/xui/es/floater_land_holdings.xml b/indra/newview/skins/default/xui/es/floater_land_holdings.xml index 36a02b73004547c19b5c8fd5ecee29815dc4db12..ed7055b3a1f2a0fb63bab59cb9c9a1a2b2220556 100644 --- a/indra/newview/skins/default/xui/es/floater_land_holdings.xml +++ b/indra/newview/skins/default/xui/es/floater_land_holdings.xml @@ -17,7 +17,7 @@ <column label="Superficie" name="area"/> </scroll_list> <text name="allowed_label"> - Propiedades de terreno permitidas en el plan de pago actual: + Propiedad de terreno permitida en el plan de pago: </text> <text name="allowed_text"> [AREA] m² diff --git a/indra/newview/skins/default/xui/es/floater_preferences.xml b/indra/newview/skins/default/xui/es/floater_preferences.xml index 37d56ea8395a2e5344a6597962f5c211abf6cf4d..61f12fc0d75e9095dc5b5dc31e49ecd2d365e893 100644 --- a/indra/newview/skins/default/xui/es/floater_preferences.xml +++ b/indra/newview/skins/default/xui/es/floater_preferences.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater min_width="350" name="Preferences" title="PREFERENCIAS" width="646"> +<floater name="Preferences" title="PREFERENCIAS"> <button label="OK" label_selected="OK" name="OK"/> <button label="Cancelar" label_selected="Cancelar" name="Cancel"/> - <tab_container name="pref core" tab_width="146" width="646"> + <tab_container name="pref core"> <panel label="General" name="general"/> <panel label="Gráficos" name="display"/> <panel label="Privacidad" name="im"/> diff --git a/indra/newview/skins/default/xui/es/floater_tools.xml b/indra/newview/skins/default/xui/es/floater_tools.xml index 9c5fea92677fdc76959e4bff60ed0025800be218..59f953c23997bad0e9e4e67250c4c87efb22a86c 100644 --- a/indra/newview/skins/default/xui/es/floater_tools.xml +++ b/indra/newview/skins/default/xui/es/floater_tools.xml @@ -182,7 +182,7 @@ <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="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."/> + <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."/> <text name="label click action" width="180"> Al tocarlo: </text> @@ -475,7 +475,7 @@ máximo" name="checkbox fullbright"/> <text name="label_area"> Ãrea: [AREA] m² </text> - <button label="Acerca del terreno" label_selected="Acerca del terreno" name="button about land" width="140"/> + <button label="Acerca del terreno" label_selected="Acerca del terreno" name="button about land"/> <check_box label="Mostrar los propietarios" name="checkbox show owners" tool_tip="El color de las parcelas es según su propietario: Verde = Su terreno @@ -492,7 +492,7 @@ Gris = Público"/> <text name="label_parcel_trans"> Transacciones de terreno </text> - <button label="Comprar terreno" label_selected="Comprar terreno" name="button buy land" width="140"/> - <button label="Abandonar el terreno" label_selected="Abandonar el terreno" name="button abandon land" width="140"/> + <button label="Comprar terreno" label_selected="Comprar terreno" name="button buy land"/> + <button label="Abandonar el terreno" label_selected="Abandonar el terreno" name="button abandon land"/> </panel> </floater> diff --git a/indra/newview/skins/default/xui/es/menu_attachment_self.xml b/indra/newview/skins/default/xui/es/menu_attachment_self.xml index c5afb99d49098d36d663764caa96419ed468f2a3..8cbe4299a88be29f7a912b8ae37953d06eafae1a 100644 --- a/indra/newview/skins/default/xui/es/menu_attachment_self.xml +++ b/indra/newview/skins/default/xui/es/menu_attachment_self.xml @@ -4,7 +4,7 @@ <menu_item_call label="Editar" name="Edit..."/> <menu_item_call label="Quitar" name="Detach"/> <menu_item_call label="Soltar" name="Drop"/> - <menu_item_call label="Levantarse" name="Stand Up"/> + <menu_item_call label="Levantarme" name="Stand Up"/> <menu_item_call label="Mi apariencia" name="Appearance..."/> <menu_item_call label="Mis amigos" name="Friends..."/> <menu_item_call label="Mis grupos" name="Groups..."/> diff --git a/indra/newview/skins/default/xui/es/menu_avatar_self.xml b/indra/newview/skins/default/xui/es/menu_avatar_self.xml index 46b6d3ece60e60448531d4d78254a13b6013b8c9..67e56844b1fee55b31c94d4e755fe0ccda5651d0 100644 --- a/indra/newview/skins/default/xui/es/menu_avatar_self.xml +++ b/indra/newview/skins/default/xui/es/menu_avatar_self.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Self Pie"> - <menu_item_call label="Levantarse" name="Stand Up"/> + <menu_item_call label="Levantarme" name="Stand Up"/> <context_menu label="Quitarme â–¶" name="Take Off >"> <context_menu label="Ropas â–¶" name="Clothes >"> <menu_item_call label="Camisa" name="Shirt"/> diff --git a/indra/newview/skins/default/xui/es/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/es/menu_inspect_self_gear.xml index cb8fb82f0d447df74fa14c986c7ed83064511a18..f21866e54f63f3e8108302fe03fa62424cd4fbcc 100644 --- a/indra/newview/skins/default/xui/es/menu_inspect_self_gear.xml +++ b/indra/newview/skins/default/xui/es/menu_inspect_self_gear.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <menu name="Gear Menu"> - <menu_item_call label="Levantarse" name="stand_up"/> + <menu_item_call label="Levantarme" name="stand_up"/> <menu_item_call label="Mi apariencia" name="my_appearance"/> <menu_item_call label="Mi perfil" name="my_profile"/> <menu_item_call label="Mis amigos" name="my_friends"/> diff --git a/indra/newview/skins/default/xui/es/menu_land.xml b/indra/newview/skins/default/xui/es/menu_land.xml index c315cb2f2cd0fec8980b576f0af5cf60a0d28b31..b0f15be1b637316dee2000c098dbb13739ff0da0 100644 --- a/indra/newview/skins/default/xui/es/menu_land.xml +++ b/indra/newview/skins/default/xui/es/menu_land.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Land Pie"> <menu_item_call label="Acerca del terreno" name="Place Information..."/> - <menu_item_call label="Sentarse aquÃ" name="Sit Here"/> + <menu_item_call label="Sentarme aquÃ" name="Sit Here"/> <menu_item_call label="Comprar este terreno" name="Land Buy"/> <menu_item_call label="Comprar un pase" name="Land Buy Pass"/> <menu_item_call label="Construir" name="Create"/> diff --git a/indra/newview/skins/default/xui/es/menu_object.xml b/indra/newview/skins/default/xui/es/menu_object.xml index 1677b9461ee1b4ac69de082c12ac1e8383242efa..d2743cd4fcffa0f6352c5ca84a55a6d14bc83eff 100644 --- a/indra/newview/skins/default/xui/es/menu_object.xml +++ b/indra/newview/skins/default/xui/es/menu_object.xml @@ -4,12 +4,12 @@ <menu_item_call label="Editar" name="Edit..."/> <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="Sentarme 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"> - <menu_item_call label="Ponerse" name="Wear"/> + <menu_item_call label="Ponerme" name="Wear"/> <context_menu label="Anexar â–¶" name="Object Attach"/> <context_menu label="Anexar como HUD â–¶" name="Object Attach HUD"/> </context_menu> diff --git a/indra/newview/skins/default/xui/es/menu_participant_list.xml b/indra/newview/skins/default/xui/es/menu_participant_list.xml index 60c92eec75221187d27ecfe5d706ffb15bcea644..ed69683de9fa6e87f1c74819672307ce7b293e5e 100644 --- a/indra/newview/skins/default/xui/es/menu_participant_list.xml +++ b/indra/newview/skins/default/xui/es/menu_participant_list.xml @@ -5,7 +5,7 @@ <menu_item_call label="Ver el perfil" name="View Profile"/> <menu_item_call label="Añadir como amigo" name="Add Friend"/> <menu_item_call label="MI" name="IM"/> - <menu_item_call label="Llamada" name="Call"/> + <menu_item_call label="Llamar" name="Call"/> <menu_item_call label="Compartir" name="Share"/> <menu_item_call label="Pagar" name="Pay"/> <menu_item_check label="Ignorar la voz" name="Block/Unblock"/> diff --git a/indra/newview/skins/default/xui/es/menu_people_nearby.xml b/indra/newview/skins/default/xui/es/menu_people_nearby.xml index 88df9838382af325375ab0503bd3165b0bec77b0..dc1486d87960a2bf990ef1e60ac2ef6f64abf0ee 100644 --- a/indra/newview/skins/default/xui/es/menu_people_nearby.xml +++ b/indra/newview/skins/default/xui/es/menu_people_nearby.xml @@ -4,7 +4,7 @@ <menu_item_call label="Añadir como amigo" name="Add Friend"/> <menu_item_call label="Quitarle como amigo" name="Remove Friend"/> <menu_item_call label="MI" name="IM"/> - <menu_item_call label="Llamada" name="Call"/> + <menu_item_call label="Llamar" name="Call"/> <menu_item_call label="Mapa" name="Map"/> <menu_item_call label="Compartir" name="Share"/> <menu_item_call label="Pagar" name="Pay"/> diff --git a/indra/newview/skins/default/xui/es/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/es/menu_people_nearby_multiselect.xml index b87d6c6deb8c6af5163231edb52ef16aa4047c5e..4ab600099406768839e68180f21a2905035569e1 100644 --- a/indra/newview/skins/default/xui/es/menu_people_nearby_multiselect.xml +++ b/indra/newview/skins/default/xui/es/menu_people_nearby_multiselect.xml @@ -3,7 +3,7 @@ <menu_item_call label="Añadir como amigos" name="Add Friends"/> <menu_item_call label="Quitar amigos" name="Remove Friend"/> <menu_item_call label="MI" name="IM"/> - <menu_item_call label="Llamada" name="Call"/> + <menu_item_call label="Llamar" name="Call"/> <menu_item_call label="Compartir" name="Share"/> <menu_item_call label="Pagar" name="Pay"/> </context_menu> diff --git a/indra/newview/skins/default/xui/es/menu_viewer.xml b/indra/newview/skins/default/xui/es/menu_viewer.xml index 93964a2f4fa0bdc3d15dd00b72b82cbefd9edf6c..bef803b45c2903e85534b1636e4e647041e63d50 100644 --- a/indra/newview/skins/default/xui/es/menu_viewer.xml +++ b/indra/newview/skins/default/xui/es/menu_viewer.xml @@ -19,7 +19,7 @@ <menu_item_call label="Dejar el estatus de Administrador" name="Leave Admin Options"/> <menu_item_call label="Salir de [APP_NAME]" name="Quit"/> </menu> - <menu label="Comunicarse" name="Communicate"> + <menu label="Comunicarme" name="Communicate"> <menu_item_call label="Mis amigos" name="My Friends"/> <menu_item_call label="Mis grupos" name="My Groups"/> <menu_item_check label="Chat" name="Nearby Chat"/> diff --git a/indra/newview/skins/default/xui/es/notifications.xml b/indra/newview/skins/default/xui/es/notifications.xml index df18b8883266c4d67ddbe269efee47897671fdfd..082841af311b342a23ef9cd0fc1d3eab01af16ae 100644 --- a/indra/newview/skins/default/xui/es/notifications.xml +++ b/indra/newview/skins/default/xui/es/notifications.xml @@ -74,7 +74,7 @@ Detalles del error: la notificación de nombre '[_NAME]' no se ha enco <notification name="LoginFailedNoNetwork"> No se puede conectar con [SECOND_LIFE_GRID]. '[DIAGNOSTIC]' -Asegúrate de que tu conexión a internet está funcionando adecuadamente. +Asegúrate de que tu conexión a Internet está funcionando adecuadamente. <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="MessageTemplateNotFound"> @@ -86,19 +86,19 @@ Asegúrate de que tu conexión a internet está funcionando adecuadamente. <usetemplate canceltext="Cancelar" name="yesnocancelbuttons" notext="No guardarlos" yestext="Guardarlos"/> </notification> <notification name="CompileQueueSaveText"> - Hubo un problema al subir el texto de un script por la siguiente razón: [REASON]. Por favor, inténtelo más tarde. + Hubo un problema al subir el texto de un script por la siguiente razón: [REASON]. Por favor, inténtalo más tarde. </notification> <notification name="CompileQueueSaveBytecode"> - Hubo un problema al subir el script compilado por la siguiente razón: [REASON]. Por favor, inténtelo más tarde. + Hubo un problema al subir el script compilado por la siguiente razón: [REASON]. Por favor, inténtalo más tarde. </notification> <notification name="WriteAnimationFail"> - Hubo un problema al escribir los datos de la animación. Por favor, inténtelo más tarde. + Hubo un problema al escribir los datos de la animación. Por favor, inténtalo más tarde. </notification> <notification name="UploadAuctionSnapshotFail"> Hubo un problema al subir la foto de la subasta por la siguiente razón: [REASON] </notification> <notification name="UnableToViewContentsMoreThanOne"> - No se puede ver a la vez los contenidos de más de un Ãtem. Por favor, elija un solo objeto y vuelva a intentarlo. + No se puede ver a la vez los contenidos de más de un Ãtem. Por favor, elige un solo objeto y vuelve a intentarlo. </notification> <notification name="SaveClothingBodyChanges"> ¿Guardar todos los cambios en la ropa y partes del cuerpo? @@ -119,11 +119,11 @@ Asegúrate de que tu conexión a internet está funcionando adecuadamente. <usetemplate name="okcancelbuttons" notext="No" yestext="SÃ"/> </notification> <notification name="RevokeModifyRights"> - ¿Quiere revocar los derechos de modificación a [FIRST_NAME] [LAST_NAME]? + ¿Quieres revocar los derechos de modificación a [FIRST_NAME] [LAST_NAME]? <usetemplate name="okcancelbuttons" notext="No" yestext="SÃ"/> </notification> <notification name="RevokeModifyRightsMultiple"> - ¿Quiere revocar los derechos de modificación a los residentes seleccionados? + ¿Quieres revocar los derechos de modificación a los residentes seleccionados? <usetemplate name="okcancelbuttons" notext="No" yestext="SÃ"/> </notification> <notification name="UnableToCreateGroup"> @@ -188,7 +188,7 @@ Por favor, invita a miembros en las próximas 48 horas. <usetemplate canceltext="Cancelar" name="okcancelbuttons" notext="Cancelar" yestext="Crear un grupo por 100 L$"/> </notification> <notification name="LandBuyPass"> - Por [COST] L$ puede entrar a este terreno ('[PARCEL_NAME]') durante [TIME] horas. ¿Comprar un pase? + Por [COST] L$ puedes entrar a este terreno ('[PARCEL_NAME]') durante [TIME] horas. ¿Comprar un pase? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> <notification name="SalePriceRestriction"> @@ -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á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? + ¿Estás seguro 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! @@ -304,7 +304,7 @@ debes estar dentro de ella. La carpeta del vestuario contiene partes del cuerpo, u objetos a anexar o que no son ropa. </notification> <notification name="CannotWearTrash"> - No puede vestirte ropas o partes del cuerpo que estén en la Papelera + No puedes vestirte ropas o partes del cuerpo que estén en la Papelera </notification> <notification name="MaxAttachmentsOnOutfit"> No se puede anexar el objeto. @@ -426,7 +426,7 @@ El objeto debe de haber sido borrado o estar fuera de rango ('out of range& 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. + Perdón, no está definida tu Posición inicial. Por favor, escribe el nombre de la región en el cajetÃn de Posición inicial, o elige para esa posición Mi Base o Mi última posición. <usetemplate name="okbutton" yestext="OK"/> </notification> @@ -639,22 +639,22 @@ Por favor, inténtalo más tarde. </notification> <notification name="CannotRecompileSelectObjectsNoScripts"> No se pudo 'recompilar'. -Seleccione un objeto con script. +Selecciona un objeto con script. </notification> <notification name="CannotRecompileSelectObjectsNoPermission"> No se pudo 'recompilar'. -Seleccione objetos con scripts en los que usted tenga permiso para modificarlos. +Selecciona objetos con scripts en los que tengas permiso para modificarlos. </notification> <notification name="CannotResetSelectObjectsNoScripts"> No se pudo 'reiniciar'. -Seleccione objetos con scripts. +Selecciona objetos con scripts. </notification> <notification name="CannotResetSelectObjectsNoPermission"> No se pudo 'reiniciar'. -Seleccione objetos con scripts en los que usted tenga permiso para modificarlos. +Selecciona objetos con scripts en los que tengas permiso para modificarlos. </notification> <notification name="CannotOpenScriptObjectNoMod"> Imposible abrir el script del objeto sin modificar los permisos. @@ -662,7 +662,7 @@ Seleccione objetos con scripts en los que usted tenga permiso para modificarlos. <notification name="CannotSetRunningSelectObjectsNoScripts"> No se puede configurar ningún script como 'ejecutándose'. -Seleccione objetos con scripts. +Selecciona objetos con scripts. </notification> <notification name="CannotSetRunningNotSelectObjectsNoScripts"> No se puede configurar ningún script como 'no ejecutándose'. @@ -770,7 +770,7 @@ no se ha seleccionado una parcela. </notification> <notification name="CannotDeedLandNoGroup"> No se ha podido transferir el terreno: -no ha seleccionado un grupo. +no has seleccionado un grupo. </notification> <notification name="CannotDeedLandNoRegion"> No se ha podido transferir el terreno: @@ -800,7 +800,7 @@ 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. +no eres propietario de todas las parcelas seleccionadas. Por favor, selecciona una sola parcela. </notification> @@ -903,7 +903,7 @@ Deberás reconfigurar el nombre y las opciones de la nueva parcela. Generalmente, esto es un fallo pasajero. Por favor, personaliza y guarda el Ãtem de aquà a unos minutos. </notification> <notification name="YouHaveBeenLoggedOut"> - Vaya, se ha cerrado tu 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> @@ -1093,9 +1093,9 @@ Si es la primera vez que usas [SECOND_LIFE], debes crear una cuenta antes de pod <usetemplate name="okcancelbuttons" notext="Continuar" yestext="Cuenta nueva..."/> </notification> <notification name="LoginPacketNeverReceived"> - Tenemos problemas de conexión. Puede deberse a un problema de tu conexión a internet o de [SECOND_LIFE_GRID]. + Tenemos problemas de conexión. Puede deberse a un problema de tu conexión a Internet o de [SECOND_LIFE_GRID]. -Puedes revisar tu conexión a internet y volver a intentarlo en unos minutos, pulsar Ayuda para conectarte a [SUPPORT_SITE], o pulsar Teleporte para intentar teleportarte a tu Base. +Puedes revisar tu conexión a Internet y volver a intentarlo en unos minutos, pulsar Ayuda para conectarte a [SUPPORT_SITE], o pulsar Teleporte para intentar teleportarte a tu Base. <url name="url"> http://es.secondlife.com/support/ </url> 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 7afa50c0a246333e8220dad258f207323de9306e..6d53b401c0eadfd081bb441749080b9557942a07 100644 --- a/indra/newview/skins/default/xui/es/panel_edit_classified.xml +++ b/indra/newview/skins/default/xui/es/panel_edit_classified.xml @@ -29,7 +29,7 @@ <text name="classified_location"> cargando... </text> - <button label="Configurarlo en esta localización" name="set_to_curr_location_btn"/> + <button label="Configurar en esta posició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"> 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 bde29f1665f3d9cc93a434e80a1b0fbfcb1356f0..f8a03d230239a180bdfdeb534998edb9de822f4d 100644 --- a/indra/newview/skins/default/xui/es/panel_edit_pick.xml +++ b/indra/newview/skins/default/xui/es/panel_edit_pick.xml @@ -21,11 +21,11 @@ <text name="pick_location"> cargando... </text> - <button label="Configurar en la posición actual" name="set_to_curr_location_btn"/> + <button label="Configurar en mi posición" name="set_to_curr_location_btn"/> </panel> </scroll_container> <panel label="bottom_panel" name="bottom_panel"> - <button label="Guardar el destacado" name="save_changes_btn"/> + <button label="Guardar" name="save_changes_btn"/> <button label="Cancelar" name="cancel_btn"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/es/panel_notes.xml b/indra/newview/skins/default/xui/es/panel_notes.xml index bf8da4cf73f4b6674a63335fd4030cdd2fefec3a..8de2afa767f42ede857ac92c6590a51bd7159550 100644 --- a/indra/newview/skins/default/xui/es/panel_notes.xml +++ b/indra/newview/skins/default/xui/es/panel_notes.xml @@ -15,7 +15,7 @@ <panel name="notes_buttons_panel"> <button label="Añadir como amigo" name="add_friend" tool_tip="Ofrecer amistad a este Residente"/> <button label="MI" name="im" tool_tip="Abrir un mensaje instantáneo"/> - <button label="Llamada" name="call" tool_tip="Llamar a este Residente"/> + <button label="Llamar" name="call" tool_tip="Llamar a este Residente"/> <button label="Mapa" name="show_on_map_btn" tool_tip="Mostrar al Residente en el mapa"/> <button label="Teleportar" name="teleport" tool_tip="Ofrecer teleporte"/> </panel> diff --git a/indra/newview/skins/default/xui/es/panel_people.xml b/indra/newview/skins/default/xui/es/panel_people.xml index 6008c6a9345c73aa4f45174995049fdcba86b35b..376aea527835f015c42270eb82cdc0d1b3420f3f 100644 --- a/indra/newview/skins/default/xui/es/panel_people.xml +++ b/indra/newview/skins/default/xui/es/panel_people.xml @@ -49,9 +49,9 @@ Si estás buscando gente para pasar el rato, [secondlife:///app/worldmap usa el <panel name="button_bar"> <button label="Perfil" name="view_profile_btn" tool_tip="Mostrar imágenes, grupos y otra información del Residente"/> <button label="MI" name="im_btn" tool_tip="Abrir un mensaje instantáneo"/> - <button label="Llamada" name="call_btn" tool_tip="Llamar a este Residente"/> + <button label="Llamar" name="call_btn" tool_tip="Llamar a este Residente"/> <button label="Compartir" name="share_btn"/> - <button label="Teleportarse" name="teleport_btn" tool_tip="Ofrecer teleporte"/> + <button label="Teleportar" name="teleport_btn" tool_tip="Ofrecer teleporte"/> <button label="Perfil del grupo" name="group_info_btn" tool_tip="Ver la información del grupo"/> <button label="Chat de grupo" name="chat_btn" tool_tip="Abrir el chat"/> <button label="Multiconferencia" name="group_call_btn" tool_tip="Llamar a este grupo"/> 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 46d8984889e7aa55deb6dff9ab1aaa97abfb118c..7a65eb32bc2c2482847ee47f65ce05619109457c 100644 --- a/indra/newview/skins/default/xui/es/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/es/panel_preferences_chat.xml @@ -49,7 +49,7 @@ Mostrar los MI en: </text> <text name="requires_restart_label"> - (requiere reiniciar) + (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"/> diff --git a/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml index 87e7dc1e8abc8773848fc44331481d93b9dcd606..56d473e87222e99f20a5d46806ed25154f628e87 100644 --- a/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml @@ -52,7 +52,7 @@ m </text> <slider label="Núm. máx. de partÃculas:" name="MaxParticleCount"/> - <slider label="Calidad de procesamiento:" label_width="142" name="RenderPostProcess"/> + <slider label="Calidad de procesamiento:" name="RenderPostProcess"/> <text name="MeshDetailText"> Detalle de la malla: </text> 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 54b60b276c06253ff20dc7725f6426e15ef54509..9ee7bef493591c8a170c7d7c01c5ef1756052d54 100644 --- a/indra/newview/skins/default/xui/es/panel_region_general.xml +++ b/indra/newview/skins/default/xui/es/panel_region_general.xml @@ -24,8 +24,7 @@ <check_box label="Impedir los 'empujones'" name="restrict_pushobject"/> <check_box label="Permitir la reventa del terreno" name="allow_land_resell_check"/> <check_box label="Permitir unir/dividir el terreno" name="allow_parcel_changes_check"/> - <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."/> + <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"> diff --git a/indra/newview/skins/default/xui/es/panel_side_tray.xml b/indra/newview/skins/default/xui/es/panel_side_tray.xml index 4e9834063bf8677ddf4147d6786dd994d95d3a44..cf5afb3cd19f4f12769947fa38dc1d2b8cf5458f 100644 --- a/indra/newview/skins/default/xui/es/panel_side_tray.xml +++ b/indra/newview/skins/default/xui/es/panel_side_tray.xml @@ -3,27 +3,27 @@ partially on screen to hold tab buttons. --> <side_tray name="sidebar"> <sidetray_tab description="Manejar la barra lateral." name="sidebar_openclose" tab_title="Barra lateral"/> - <sidetray_tab description="Base." name="sidebar_home" tab_title="Home"> - <panel label="base" name="panel_home"/> + <sidetray_tab description="Inicio." name="sidebar_home" tab_title="Inicio"> + <panel label="Inicio" name="panel_home"/> </sidetray_tab> - <sidetray_tab description="Edita tu perfil público y tus destacados." name="sidebar_me" tab_title="My Profile"> + <sidetray_tab description="Edita tu perfil público y tus destacados." name="sidebar_me" tab_title="Mi perfil"> <panel_container name="panel_container"> <panel label="Yo" name="panel_me"/> </panel_container> </sidetray_tab> - <sidetray_tab description="Encuentra a tus amigos, contactos y gente que esté cerca." name="sidebar_people" tab_title="People"> + <sidetray_tab description="Encuentra a tus amigos, contactos y gente que esté cerca." name="sidebar_people" tab_title="Gente"> <panel_container name="panel_container"> <panel label="Perfil del grupo" name="panel_group_info_sidetray"/> <panel label="Residentes y objetos ignorados" name="panel_block_list_sidetray"/> </panel_container> </sidetray_tab> - <sidetray_tab description="Encontrar lugares donde ir o que ya visitaste." label="Lugares" name="sidebar_places" tab_title="Places"> + <sidetray_tab description="Encontrar lugares donde ir o que ya visitaste." label="Lugares" name="sidebar_places" tab_title="Lugares"> <panel label="Lugares" name="panel_places"/> </sidetray_tab> - <sidetray_tab description="Mira tu inventario." name="sidebar_inventory" tab_title="My Inventory"> + <sidetray_tab description="Mira tu inventario." name="sidebar_inventory" tab_title="Mi inventario"> <panel label="Modificar el inventario" name="sidepanel_inventory"/> </sidetray_tab> - <sidetray_tab description="Cambia tu apariencia y tu 'look' actual." name="sidebar_appearance" tab_title="My Appearance"> + <sidetray_tab description="Cambia tu apariencia y tu 'look' actual." name="sidebar_appearance" tab_title="Mi apariencia"> <panel label="Modificar la apariencia" name="sidepanel_appearance"/> </sidetray_tab> </side_tray> diff --git a/indra/newview/skins/default/xui/es/strings.xml b/indra/newview/skins/default/xui/es/strings.xml index a8fc7f6b586fe0d50b29dbce327a46a09622ede8..4cee677420d6af5f26f86a77f1eaa5a1bb83a002 100644 --- a/indra/newview/skins/default/xui/es/strings.xml +++ b/indra/newview/skins/default/xui/es/strings.xml @@ -89,7 +89,7 @@ Descargando la ropa... </string> <string name="LoginFailedNoNetwork"> - Error de red: no se ha podido conectar; por favor, revisa tu conexión a internet. + 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. @@ -101,7 +101,7 @@ http://join.secondlife.com/index.php?lang=es-ES </string> <string name="AgentLostConnection"> - Esta región puede estar teniendo problemas. Por favor, comprueba tu 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... @@ -1543,10 +1543,10 @@ No se ha aportado un contrato para este estado. El terreno de este estado lo vende el propietario del estado, no Linden Lab. Por favor, contacta con ese propietario para informarte sobre la venta. </string> <string name="covenant_last_modified"> - Última modificación: + Última modificación: </string> <string name="none_text" value="(no hay)"/> - <string name="never_text" value="(nunca)"/> + <string name="never_text" value=" (nunca)"/> <string name="GroupOwned"> Propiedad del grupo </string> @@ -2013,7 +2013,7 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE]. Puente: ancho </string> <string name="Broad"> - Ancho + Aumentar </string> <string name="Brow Size"> Arco ciliar diff --git a/indra/newview/skins/default/xui/es/teleport_strings.xml b/indra/newview/skins/default/xui/es/teleport_strings.xml index 7e7ed6202fda04c7da198af99d12401e16c4dc08..e0e0061729297401af718d7c4a82a4425b100dee 100644 --- a/indra/newview/skins/default/xui/es/teleport_strings.xml +++ b/indra/newview/skins/default/xui/es/teleport_strings.xml @@ -10,7 +10,7 @@ Si sigues recibiendo este mensaje, por favor, acude al [SUPPORT_SITE]. Si sigues recibiendo este mensaje, por favor, acude al [SUPPORT_SITE]. </message> <message 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. </message> <message name="nolandmark_tport"> Lo sentimos, pero el sistema no ha podido localizar el destino de este hito. @@ -20,22 +20,22 @@ Si sigues recibiendo este mensaje, por favor, acude al [SUPPORT_SITE]. Vuelva a intentarlo en un momento. </message> <message 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. </message> <message 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. </message> <message 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. </message> <message 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 minutos. </message> <message 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 minutos. </message> <message 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 minutos. </message> <message name="no_inventory_host"> En estos momentos no está disponible el sistema del inventario. diff --git a/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml index 6cd886d4b9d4e8f3c2c3c10067dea43daba48264..1ee85a77ce686d50782c5b24adaae0d2f982753c 100644 --- a/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml @@ -11,14 +11,14 @@ <check_box label="Sons" name="check_sound"/> <check_box label="Textures" name="check_texture"/> <check_box label="Photos" name="check_snapshot"/> - <button label="Tout" label_selected="Tout" name="All" width="70"/> - <button bottom_delta="0" label="Aucun" label_selected="Aucun" left="83" name="None" width="70"/> - <check_box bottom_delta="-20" label="Toujours montrer les dossiers" name="check_show_empty"/> - <check_box bottom_delta="-36" label="Depuis la déconnexion" name="check_since_logoff"/> + <button label="Tout" label_selected="Tout" name="All"/> + <button bottom_delta="0" label="Aucun" label_selected="Aucun" name="None"/> + <check_box label="Toujours montrer les dossiers" name="check_show_empty"/> + <check_box label="Depuis la déconnexion" name="check_since_logoff"/> <text name="- OR -"> Ou il y a... </text> <spinner label="Heures" name="spin_hours_ago"/> <spinner label="Jours" name="spin_days_ago"/> - <button bottom_delta="-30" label="Fermer" label_selected="Fermer" name="Close"/> + <button label="Fermer" label_selected="Fermer" name="Close"/> </floater> diff --git a/indra/newview/skins/default/xui/fr/floater_preferences.xml b/indra/newview/skins/default/xui/fr/floater_preferences.xml index 406e91a18a8da19927fe06dd5c5deb3b1f9f2798..052e43388b03c26b21d62e0faad207df6b37d757 100644 --- a/indra/newview/skins/default/xui/fr/floater_preferences.xml +++ b/indra/newview/skins/default/xui/fr/floater_preferences.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater min_width="330" name="Preferences" title="PRÉFÉRENCES" width="626"> +<floater name="Preferences" title="PRÉFÉRENCES"> <button label="OK" label_selected="OK" name="OK"/> <button label="Annuler" label_selected="Annuler" name="Cancel"/> - <tab_container name="pref core" tab_width="126" width="626"> + <tab_container name="pref core"> <panel label="Général" name="general"/> <panel label="Graphiques" name="display"/> <panel label="Confidentialité" name="im"/> diff --git a/indra/newview/skins/default/xui/fr/floater_tools.xml b/indra/newview/skins/default/xui/fr/floater_tools.xml index 1d9d39596078e682c484a517e5f794392daf633e..16d276f8c2cdec36aab9dc9b326915e11dfae8a4 100644 --- a/indra/newview/skins/default/xui/fr/floater_tools.xml +++ b/indra/newview/skins/default/xui/fr/floater_tools.xml @@ -441,9 +441,9 @@ <check_box label="Inverser" name="checkbox flip s"/> <spinner label="Vertical (V)" name="TexScaleV"/> <check_box label="Inverser" name="checkbox flip t"/> - <spinner label="RotationËš" left="122" name="TexRot" width="58"/> - <spinner label="Répétitions / Mètre" left="122" name="rptctrl" width="58"/> - <button label="Appliquer" label_selected="Appliquer" left_delta="68" name="button apply" width="75"/> + <spinner label="RotationËš" name="TexRot" /> + <spinner label="Répétitions / Mètre" name="rptctrl"/> + <button label="Appliquer" label_selected="Appliquer" name="button apply"/> <text name="tex offset"> Décalage de la texture </text> 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 a61b0584d3f39aa4afb3e325f4086d493c50d96c..bc23c2e8ff8cb912baf860ef42d189a66b7f0cb2 100644 --- a/indra/newview/skins/default/xui/it/floater_about_land.xml +++ b/indra/newview/skins/default/xui/it/floater_about_land.xml @@ -335,7 +335,7 @@ Solamente terreni più grandi possono essere abilitati nella ricerca. <check_box label="Tutti i residenti" name="check other scripts"/> <check_box label="Gruppo" name="check group scripts"/> <text name="land_options_label"> - Opzioni della terra: + Opzioni per il terreno: </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."/> 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 f4e7a6c2c5929fc49c69802d7d42b53386645975..2e78168209f5888383ac44403ea1886908413f65 100644 --- a/indra/newview/skins/default/xui/it/floater_buy_land.xml +++ b/indra/newview/skins/default/xui/it/floater_buy_land.xml @@ -1,29 +1,29 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="buy land" title="ACQUISTA TERRENO"> <floater.string name="can_resell"> - Può essere rivenduta. + Può essere rivenduto. </floater.string> <floater.string name="can_not_resell"> - Può non essere rivenduta. + Può non essere rivenduto. </floater.string> <floater.string name="can_change"> - Può essere unita o suddivisa. + Può essere unito o suddiviso. </floater.string> <floater.string name="can_not_change"> - Non può essere unita o suddivisa. + Non può essere unito o suddiviso. </floater.string> <floater.string name="cant_buy_for_group"> - Non hai il permesso di comprare terra per il tuo gruppo attivo. + Non sei autorizzato ad acquistare terreno per il tuo gruppo attivo. </floater.string> <floater.string name="no_land_selected"> - Nessuna terra selezionata. + Nessun terreno selezionato. </floater.string> <floater.string name="multiple_parcels_selected"> - Hai selezionato appezzamenti diversi. + Hai selezionato lotti 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. + Non sei autorizzato ad acquistare terreno per il tuo gruppo attivo. </floater.string> <floater.string name="parcel_not_for_sale"> Il terreno selezionato non è in vendita. @@ -32,7 +32,7 @@ Prova a selezionare un'area più piccola. Il gruppo possiede già il terreno. </floater.string> <floater.string name="you_already_own"> - Possiedi già il terreno. + Sei già proprietario del terreno. </floater.string> <floater.string name="set_to_sell_to_other"> Il terreno selezionato è già impostato per la vendita ad un altro gruppo. @@ -41,7 +41,7 @@ Prova a selezionare un'area più piccola. L'area selezionata non è pubblica. </floater.string> <floater.string name="not_owned_by_you"> - È selezionato terreno di proprietà di un altro residente. + Hai selezionato terreno di proprietà di un altro residente. Prova a scegliere una superficie più piccola. </floater.string> <floater.string name="processing"> @@ -50,13 +50,13 @@ Prova a scegliere una superficie più piccola. (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. + Si 'e verificato un errore mentre si stavano ottenendo le informazioni sull'acquisto del terreno. </floater.string> <floater.string name="buying_will"> - Comprando questa terra: + Acuistando il terreno: </floater.string> <floater.string name="buying_for_group"> - Comprare la terra per il gruppo farà : + Acuistando il terreno per il gruppo: </floater.string> <floater.string name="cannot_buy_now"> Non puoi comprare ora: @@ -68,10 +68,10 @@ Prova a scegliere una superficie più piccola. nessuno necessario </floater.string> <floater.string name="must_upgrade"> - Il tuo tipo di account ha bisogno di un upgrade per possedere terra. + Per acquistare terreno devi passare a un livello di abbonamento superiore. </floater.string> <floater.string name="cant_own_land"> - Il tuo account può possedere terra. + Con questo account puoi essere proprietario di terreno. </floater.string> <floater.string name="land_holdings"> Sei proprietario di [BUYER] m² di terreno. @@ -107,12 +107,10 @@ consente [AMOUNT2] oggetti [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. + Il gruppo [GROUP] avrà bisogno di contributi di crediti di utilizzo terreno sufficienti a coprire il 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. + Hai [AMOUNT] L$, che sono sufficienti per comprare questo terreno. </floater.string> <floater.string name="not_enough_lindens"> Hai solo [AMOUNT] L$, ed hai bisogno di altri [AMOUNT2] L$. @@ -209,7 +207,7 @@ venduto con oggetti <combo_box.item label="US$ 6.00 al mese, addebitato annualmente" name="US$6.00/month,billedannually"/> </combo_box> <text name="land_use_action"> - Aumenta il tasso di pagamento mensile delle tasse d'uso della terra a 40 US$/mese. + Aumenta le tariffe mensili di utilizzo del terreno a 40 US$/mese. </text> <text name="land_use_reason"> Tu occupi 1309 m² di terreno. diff --git a/indra/newview/skins/default/xui/it/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/it/floater_inventory_view_finder.xml index b5a17b2fc1793a12b16044b4e43aa04b0341bd75..49130285f2adc5340e09c59ef95e9659fcb5e4dd 100644 --- a/indra/newview/skins/default/xui/it/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/it/floater_inventory_view_finder.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Inventory Finder" title="INVENTARIO_COSE_RECENTI" width="165"> +<floater name="Inventory Finder" title="INVENTARIO_COSE_RECENTI"> <check_box label="Animazioni" name="check_animation"/> <check_box label="Biglietti da visita" name="check_calling_card"/> <check_box label="Abiti" name="check_clothing"/> diff --git a/indra/newview/skins/default/xui/it/floater_preferences.xml b/indra/newview/skins/default/xui/it/floater_preferences.xml index 5ffe7f480254ae83c3d818a7fc5c8ebb344ee161..c5b6654a6926297a6dd9b9cba1c2b7789409e148 100644 --- a/indra/newview/skins/default/xui/it/floater_preferences.xml +++ b/indra/newview/skins/default/xui/it/floater_preferences.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater min_width="350" name="Preferences" title="PREFERENZE" width="646"> +<floater name="Preferences" title="PREFERENZE"> <button label="OK" label_selected="OK" name="OK"/> <button label="Annulla" label_selected="Annulla" name="Cancel"/> - <tab_container name="pref core" tab_width="146" width="646"> + <tab_container name="pref core" tab_width="100"> <panel label="Generale" name="general"/> <panel label="Grafica" name="display"/> <panel label="Riservatezza" name="im"/> diff --git a/indra/newview/skins/default/xui/it/floater_tools.xml b/indra/newview/skins/default/xui/it/floater_tools.xml index 16ee797ce410d675aa2ad81f18b062071fc75c1b..6ad8d68df27db32729e2491958b3f502979a05a9 100644 --- a/indra/newview/skins/default/xui/it/floater_tools.xml +++ b/indra/newview/skins/default/xui/it/floater_tools.xml @@ -443,9 +443,9 @@ della texture <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="Ripetizioni / Metro" left="120" name="rptctrl" width="60"/> - <button label="Applica" label_selected="Applica" left_delta="72" name="button apply"/> + <spinner label="RotazioneËš" name="TexRot" /> + <spinner label="Ripetizioni / Metro" name="rptctrl" /> + <button label="Applica" label_selected="Applica" name="button apply"/> <text name="tex offset"> Bilanciamento della texture </text> @@ -484,7 +484,7 @@ della texture <button label="Suddividi" label_selected="Suddividi" name="button subdivide land" width="156"/> <button label="Iscriviti" label_selected="Iscriviti" name="button join land" width="156"/> <text name="label_parcel_trans"> - Transazioni del territorio + Transazioni terreno </text> <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"/> 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 7874f588a5b64ac80918d66b5d2e114bdc09b2e3..e3cb3c1092ef4467ee08185ba08236d3c386de31 100644 --- a/indra/newview/skins/default/xui/it/panel_group_invite.xml +++ b/indra/newview/skins/default/xui/it/panel_group_invite.xml @@ -13,7 +13,7 @@ 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 Ctrl e fai clic sui nomi dei residenti per una selezionare più nomi"/> + <name_list name="invitee_list" tool_tip="Tieni premuto Ctrl e fai clic sui nomi dei residenti per 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: diff --git a/indra/newview/skins/default/xui/it/panel_login.xml b/indra/newview/skins/default/xui/it/panel_login.xml index bbf93ceb8744e0d4f6a1368d3cceea407aaca3bc..287e938d57aa71c87d526b57aaf5fcbbdf5ef02f 100644 --- a/indra/newview/skins/default/xui/it/panel_login.xml +++ b/indra/newview/skins/default/xui/it/panel_login.xml @@ -12,13 +12,21 @@ Nome: </text> <line_editor label="Nome" name="first_name_edit" tool_tip="[SECOND_LIFE] First Name"/> + <text name="last_name_text"> + Cognome: + </text> <line_editor label="Cognome" name="last_name_edit" tool_tip="[SECOND_LIFE] Last Name"/> + <text name="password_text"> + Password: + </text> <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="La mia ultima ubicazione" name="MyLastLocation"/> <combo_box.item label="Casa mia" name="MyHome"/> + <combo_box.item label="<Scrivi nome regione>" name="Typeregionname"/> </combo_box> <button label="Accedi" name="connect_btn"/> </layout_panel> @@ -26,6 +34,9 @@ <text name="create_new_account_text"> Iscriviti </text> + <text name="forgot_password_text"> + Hai dimenticato il nome o la password? + </text> <text name="login_help"> Ti serve aiuto con la fase di accesso? </text> 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 2842b6a8aa06b88a623cd5528f1d2ecfc726d26b..6936f24a8a237fda034141ca6e03bb82f9df2d2e 100644 --- a/indra/newview/skins/default/xui/it/panel_preferences_sound.xml +++ b/indra/newview/skins/default/xui/it/panel_preferences_sound.xml @@ -1,7 +1,7 @@ <?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="Disattiva audio quando minimizzato" name="mute_when_minimized"/> + <slider label="Vol. principale" name="System Volume"/> + <check_box initial_value="true" label="Disatt. se a icona" name="mute_when_minimized"/> <slider label="Pulsanti" name="UI Volume"/> <slider label="Ambiente" name="Wind Volume"/> <slider label="Effetti sonori" name="SFX Volume"/> diff --git a/indra/newview/skins/default/xui/it/role_actions.xml b/indra/newview/skins/default/xui/it/role_actions.xml index 95f1f662f9c1bdee70ed9ea446c2d5a354244e0a..e3f95f7f868228d06dec0ba6819a65220cc409f8 100644 --- a/indra/newview/skins/default/xui/it/role_actions.xml +++ b/indra/newview/skins/default/xui/it/role_actions.xml @@ -20,7 +20,7 @@ <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="Informazioni su come impostare il terreno come in vendita" longdescription="Imposta le informazioni per la vendita del terreno. *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 del lotto, le impostazioni di pubblicazione, la visibilità negli elenchi e il punto di arrivo, nonché opzioni di indirizzamento del Teleport." name="Parcel Identity"> diff --git a/indra/newview/skins/default/xui/it/strings.xml b/indra/newview/skins/default/xui/it/strings.xml index 93239983a86f1777764b6b8c3c6b0783ebb46801..a1b570d7160ec64fe2c990c41f663b807ee68fdc 100644 --- a/indra/newview/skins/default/xui/it/strings.xml +++ b/indra/newview/skins/default/xui/it/strings.xml @@ -853,7 +853,7 @@ Offerta di Teleport </string> <string name="StartUpNotifications"> - Nuove notifice sono arrivate mentre eri assente... + Mentre eri assente sono arrivate nuove notifiche... </string> <string name="OverflowInfoChannelString"> Hai ancora [%d] notifiche diff --git a/indra/newview/skins/default/xui/ja/floater_report_abuse.xml b/indra/newview/skins/default/xui/ja/floater_report_abuse.xml index 105e903840adb32a0a2596f1e43b4252e64576cd..dc34441535dab172dbe6f97ff4cd6d86ade5da4a 100644 --- a/indra/newview/skins/default/xui/ja/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/ja/floater_report_abuse.xml @@ -92,7 +92,7 @@ <text name="dscr_title"> 詳細: </text> - <text name="bug_aviso" width="210"> + <text name="bug_aviso"> ã§ãã‚‹ã ã‘具体的ã«è©³ã—ã記入ã—ã¦ãã ã•ã„。 </text> <text name="incomplete_title"> diff --git a/indra/newview/skins/default/xui/nl/floater_about.xml b/indra/newview/skins/default/xui/nl/floater_about.xml index 10c30eb361f0704dbe4a4e777f458a1630bfaedc..f71f935c24856b24fd94ece6f8ac2097a23c89b9 100644 --- a/indra/newview/skins/default/xui/nl/floater_about.xml +++ b/indra/newview/skins/default/xui/nl/floater_about.xml @@ -1,20 +1,60 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater_about" title="OVER [CAPITALIZED_APP_NAME]"> -<tab_container name="about_tab"> - <panel name="credits_panel"> - <text_editor name="credits_editor"> - Second Life wordt u aangeboden door 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. + <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]] + </floater.string> + <floater.string name="AboutCompiler"> + Gemaakt met [COMPILER] versie [COMPILER_VERSION] + </floater.string> + <floater.string name="AboutPosition"> + U bent op [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1] in [REGION] gelegen op [HOSTNAME] ([HOSTIP]) +[SERVER_VERSION] +[[SERVER_RELEASE_NOTES_URL] [ReleaseNotes]] + </floater.string> + <floater.string name="AboutSystem"> + CPU: [CPU] +Geheugen: [MEMORY_MB] MB +OS Versie: [OS_VERSION] +Grafische Kaard Vendor: [GRAPHICS_CARD_VENDOR] +Grafische Kaard: [GRAPHICS_CARD] + </floater.string> + <floater.string name="AboutDriver"> + Windows Grafische Driver Versie: [GRAPHICS_DRIVER_VERSION] + </floater.string> + <floater.string name="AboutLibs"> + OpenGL Versie: [OPENGL_VERSION] + +libcurl Versie: [LIBCURL_VERSION] +J2C Decoder Versie: [J2C_VERSION] +Audio Driver Versie: [AUDIO_DRIVER_VERSION] +Qt Webkit Versie: [QT_WEBKIT_VERSION] +Vivox Versie: [VIVOX_VERSION] + </floater.string> + <floater.string name="none"> + (none) + </floater.string> + <floater.string name="AboutTraffic"> + Pakketten Verloren: [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="Kopiëren naar Klembord" name="copy_btn"/> + </panel> + <panel label="Credits" name="credits_panel"> + <text_editor name="credits_editor"> + Second Life wordt u aangeboden door 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. Een 'Dank u' voor de volgende bewoners voor het helpen zorgdragen dat dit de beste versie tot nu toe is: 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 To be a success in business, be daring, be first, be different. --Henry Marchant - </text_editor> - </panel> - <panel name="licenses_panel"> - <text_editor name="credits_editor"> -3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion + </text_editor> + </panel> + <panel label="Licenties" name="licenses_panel"> + <text_editor name="credits_editor"> + 3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion APR Copyright (C) 2000-2004 The Apache Software Foundation cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se) DBus/dbus-glib Copyright (C) 2002, 2003 CodeFactory AB / Copyright (C) 2003, 2004 @@ -35,10 +75,7 @@ google-perftools Copyright (c) 2005, Google Inc. All rights reserved. See licenses.txt for details. Voice chat Audio coding: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C) - </text_editor> - </panel> -</tab_container> - <string name="you_are_at"> - U bent op [POSITION] - </string> + </text_editor> + </panel> + </tab_container> </floater> diff --git a/indra/newview/skins/default/xui/nl/floater_mute_object.xml b/indra/newview/skins/default/xui/nl/floater_mute_object.xml index 7a34be1bd7c71370b36e4496302ef775f0ab677b..edea63b42c6584e29f0a0e34ff4d896eb996da7a 100644 --- a/indra/newview/skins/default/xui/nl/floater_mute_object.xml +++ b/indra/newview/skins/default/xui/nl/floater_mute_object.xml @@ -1,13 +1,14 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="mute by name" title="NEGEER OBJECT OP NAAM"> - <text name="message" bottom_delta="-40"> - Negeer op naam heeft alleen invloed op object chat -en IM, niet op geluiden. U dient de naam van het object -exact te typen. +<floater name="mute by name" title="BLOKKEER VOORWERP BIJ NAAM"> + <text bottom_delta="-40" name="message"> + Blokkeer een Voorwerp: </text> - <line_editor name="object_name" bottom_delta="-58"> + <line_editor bottom_delta="-58" name="object_name"> Object naam </line_editor> + <text name="note"> + * Blokkeerd alleen object tekst, niet de geluiden + </text> <button label="Ok" name="OK"/> <button label="Annuleren" name="Cancel"/> </floater> diff --git a/indra/newview/skins/default/xui/nl/floater_report_abuse.xml b/indra/newview/skins/default/xui/nl/floater_report_abuse.xml index 19b11ede0a963a5fd4fc2b948029347852a90067..a50773c2b3ad141cbef095663c59e1a8b58ed4b7 100644 --- a/indra/newview/skins/default/xui/nl/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/nl/floater_report_abuse.xml @@ -1,30 +1,33 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater_report_abuse" title="MISBRUIK RAPPORTEREN"> - <check_box label="Voeg schermafbeelding toe" name="screen_check"/> + <floater.string name="Screenshot"> + Schermafbeelding + </floater.string> + <check_box label="Gebruik deze schermafbeelding" name="screen_check"/> <text name="reporter_title" width="110"> Rapporteur: </text> - <text name="reporter_field" left_delta="70"> - Loremipsum Dolorsitamut + <text left_delta="70" name="reporter_field"> + Loremipsum Dolorsitamut Longnamez </text> <text name="sim_title"> Regio: </text> - <text name="sim_field" left_delta="70"> + <text left_delta="70" name="sim_field"> Regionaam </text> <text name="pos_title"> Positie: </text> - <text name="pos_field" left_delta="70"> + <text left_delta="70" name="pos_field"> {128.1, 128.1, 15.4} </text> <text name="select_object_label"> - Klik de knop, daarna het object: + Klik de knop, vervolgens het misbruik voorwerp: </text> <button label="" label_selected="" name="pick_btn" tool_tip="Objectkiezer - Identificeer een object als het onderwerp van dit rapport"/> <text name="object_name_label"> - Naam: + voorwerp: </text> <text name="object_name" width="120"> Consetetur Sadipscing @@ -33,54 +36,53 @@ Eigenaar: </text> <text name="owner_name"> - Hendrerit Vulputate + Hendrerit Vulputate Kamawashi Longname </text> <combo_box name="category_combo" tool_tip="Categorie -- selecteer de categorie die dit rapport het best beschrijft"> - <combo_box.item name="Select_category" label="Selecteer categorie"/> - <combo_box.item name="Age__Age_play" label="Leeftijd > Leeftijd spelen"/> - <combo_box.item name="Age__Adult_resident_on_Teen_Second_Life" label="Leeftijd > Volwassen inwoner in Teen Second Life"/> - <combo_box.item name="Age__Underage_resident_outside_of_Teen_Second_Life" label="Leeftijd > Minderjarige inwoner buiten Teen Second Life"/> - <combo_box.item name="Assault__Combat_sandbox___unsafe_area" label="Aanval > Gevechtszandbak / onveilig gebied"/> - <combo_box.item name="Assault__Safe_area" label="Aanval > Veilig gebied"/> - <combo_box.item name="Assault__Weapons_testing_sandbox" label="Aanval > Zandbak voor het testen van wapens"/> - <combo_box.item name="Commerce__Failure_to_deliver_product_or_service" label="Handel > Product of dienst is niet geleverd"/> - <combo_box.item name="Disclosure__Real_world_information" label="Openbaring > Echte wereld informatie"/> - <combo_box.item name="Disclosure__Remotely_monitoring chat" label="Openbaring > Op afstand chat afluisteren"/> - <combo_box.item name="Disclosure__Second_Life_information_chat_IMs" label="Openbaring > Second Life informatie/chat/IMs"/> - <combo_box.item name="Disturbing_the_peace__Unfair_use_of_region_resources" label="Vredebreuk > Oneerlijk gebruik van regiomiddelen"/> - <combo_box.item name="Disturbing_the_peace__Excessive_scripted_objects" label="Vredebreuk > Excessieve gescripte objecten"/> - <combo_box.item name="Disturbing_the_peace__Object_littering" label="Vredebreuk > Objecten laten rondslingeren"/> - <combo_box.item name="Disturbing_the_peace__Repetitive_spam" label="Vredebreuk > Herhaalde spam"/> - <combo_box.item name="Disturbing_the_peace__Unwanted_advert_spam" label="Vredebreuk > Ongewenste reclame-spam"/> - <combo_box.item name="Fraud__L$" label="Fraude > L$"/> - <combo_box.item name="Fraud__Land" label="Fraude > Land"/> - <combo_box.item name="Fraud__Pyramid_scheme_or_chain_letter" label="Fraude > Piramideschema of kettingbrief"/> - <combo_box.item name="Fraud__US$" label="Fraude > US$"/> - <combo_box.item name="Harassment__Advert_farms___visual_spam" label="Intimidatie > Reclameverzamelingen / visuele spam"/> - <combo_box.item name="Harassment__Defaming_individuals_or_groups" label="Intimidatie > Individuen of groepen in diskrediet brengen"/> - <combo_box.item name="Harassment__Impeding_movement" label="Intimidatie > Beweging verhinderen"/> - <combo_box.item name="Harassment__Sexual_harassment" label="Intimidatie > Seksuele intimidatie"/> - <combo_box.item name="Harassment__Solicting_inciting_others_to_violate_ToS" label="Intimidatie > Anderen uitnodigen/aanzetten tot het schenden van de ToS"/> - <combo_box.item name="Harassment__Verbal_abuse" label="Intimidatie > Verbaal misbruik"/> - <combo_box.item name="Indecency__Broadly_offensive_content_or_conduct" label="Onfatsoenlijkheid > Globaal beledigende inhoud of gedrag"/> - <combo_box.item name="Indecency__Inappropriate_avatar_name" label="Onfatsoenlijkheid > Ongepaste avatar naam"/> - <combo_box.item name="Indecency__Mature_content_in_PG_region" label="Onfatsoenlijkheid > Ongepaste inhoud of gedrag in een PG regio"/> - <combo_box.item name="Indecency__Inappropriate_content_in_Mature_region" label="Onfatsoenlijkheid > Ongepaste inhoud of gedrag in een Mature regio"/> - <combo_box.item name="Intellectual_property_infringement_Content_Removal" label="Inbreuk op intellectueel eigendom > Verwijderen van inhoud"/> - <combo_box.item name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit" label="Inbreuk op intellectueel eigendom > CopyBot of misbruik van permissies"/> - <combo_box.item name="Intolerance" label="Intolerantie"/> - <combo_box.item name="Land__Abuse_of_sandbox_resources" label="Land > Misbruik van zandbakmiddelen"/> - <combo_box.item name="Land__Encroachment__Objects_textures" label="Land > Indringing > Objecten/texturen"/> - <combo_box.item name="Land__Encroachment__Particles" label="Land > Indringing > Particles"/> - <combo_box.item name="Land__Encroachment__Trees_plants" label="Land > Indringing > Bomen/planten"/> - <combo_box.item name="Wagering_gambling" label="Weddenschappen/gokken"/> - <combo_box.item name="Other" label="Anders"/> + <combo_box.item label="Selecteer categorie" name="Select_category"/> + <combo_box.item label="Leeftijd > Leeftijd spelen" name="Age__Age_play"/> + <combo_box.item label="Leeftijd > Volwassen inwoner in Teen Second Life" name="Age__Adult_resident_on_Teen_Second_Life"/> + <combo_box.item label="Leeftijd > Minderjarige inwoner buiten Teen Second Life" name="Age__Underage_resident_outside_of_Teen_Second_Life"/> + <combo_box.item label="Aanval > Gevechtszandbak / onveilig gebied" name="Assault__Combat_sandbox___unsafe_area"/> + <combo_box.item label="Aanval > Veilig gebied" name="Assault__Safe_area"/> + <combo_box.item label="Aanval > Zandbak voor het testen van wapens" name="Assault__Weapons_testing_sandbox"/> + <combo_box.item label="Handel > Product of dienst is niet geleverd" name="Commerce__Failure_to_deliver_product_or_service"/> + <combo_box.item label="Openbaring > Echte wereld informatie" name="Disclosure__Real_world_information"/> + <combo_box.item label="Openbaring > Op afstand chat afluisteren" name="Disclosure__Remotely_monitoring chat"/> + <combo_box.item label="Openbaring > Second Life informatie/chat/IMs" name="Disclosure__Second_Life_information_chat_IMs"/> + <combo_box.item label="Vredebreuk > Oneerlijk gebruik van regiomiddelen" name="Disturbing_the_peace__Unfair_use_of_region_resources"/> + <combo_box.item label="Vredebreuk > Excessieve gescripte objecten" name="Disturbing_the_peace__Excessive_scripted_objects"/> + <combo_box.item label="Vredebreuk > Objecten laten rondslingeren" name="Disturbing_the_peace__Object_littering"/> + <combo_box.item label="Vredebreuk > Herhaalde spam" name="Disturbing_the_peace__Repetitive_spam"/> + <combo_box.item label="Vredebreuk > Ongewenste reclame-spam" name="Disturbing_the_peace__Unwanted_advert_spam"/> + <combo_box.item label="Fraude > L$" name="Fraud__L$"/> + <combo_box.item label="Fraude > Land" name="Fraud__Land"/> + <combo_box.item label="Fraude > Piramideschema of kettingbrief" name="Fraud__Pyramid_scheme_or_chain_letter"/> + <combo_box.item label="Fraude > US$" name="Fraud__US$"/> + <combo_box.item label="Intimidatie > Reclameverzamelingen / visuele spam" name="Harassment__Advert_farms___visual_spam"/> + <combo_box.item label="Intimidatie > Individuen of groepen in diskrediet brengen" name="Harassment__Defaming_individuals_or_groups"/> + <combo_box.item label="Intimidatie > Beweging verhinderen" name="Harassment__Impeding_movement"/> + <combo_box.item label="Intimidatie > Seksuele intimidatie" name="Harassment__Sexual_harassment"/> + <combo_box.item label="Intimidatie > Anderen uitnodigen/aanzetten tot het schenden van de ToS" name="Harassment__Solicting_inciting_others_to_violate_ToS"/> + <combo_box.item label="Intimidatie > Verbaal misbruik" name="Harassment__Verbal_abuse"/> + <combo_box.item label="Onfatsoenlijkheid > Globaal beledigende inhoud of gedrag" name="Indecency__Broadly_offensive_content_or_conduct"/> + <combo_box.item label="Onfatsoenlijkheid > Ongepaste avatar naam" name="Indecency__Inappropriate_avatar_name"/> + <combo_box.item label="Onfatsoenlijkheid > Ongepaste inhoud of gedrag in een PG regio" name="Indecency__Mature_content_in_PG_region"/> + <combo_box.item label="Onfatsoenlijkheid > Ongepaste inhoud of gedrag in een Mature regio" name="Indecency__Inappropriate_content_in_Mature_region"/> + <combo_box.item label="Inbreuk op intellectueel eigendom > Verwijderen van inhoud" name="Intellectual_property_infringement_Content_Removal"/> + <combo_box.item label="Inbreuk op intellectueel eigendom > CopyBot of misbruik van permissies" name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit"/> + <combo_box.item label="Intolerantie" name="Intolerance"/> + <combo_box.item label="Land > Misbruik van zandbakmiddelen" name="Land__Abuse_of_sandbox_resources"/> + <combo_box.item label="Land > Indringing > Objecten/texturen" name="Land__Encroachment__Objects_textures"/> + <combo_box.item label="Land > Indringing > Particles" name="Land__Encroachment__Particles"/> + <combo_box.item label="Land > Indringing > Bomen/planten" name="Land__Encroachment__Trees_plants"/> + <combo_box.item label="Weddenschappen/gokken" name="Wagering_gambling"/> + <combo_box.item label="Anders" name="Other"/> </combo_box> <text name="abuser_name_title"> Misbruikernaam: </text> <button label="Kies inwoner" label_selected="" name="select_abuser" tool_tip="Selecteer de naam van de misbruiker uit een lijst"/> - <check_box label="Naam van misbruiker onbekend" name="omit_abuser_name" tool_tip="Vink dit aan wanneer u niet in staat bent de naam van de misbruiker te geven"/> <text name="abuser_name_title2"> Locatie van misbruik: </text> @@ -91,13 +93,11 @@ Details: </text> <text name="bug_aviso"> - Wees alstublieft zo specifiek mogelijk m.b.t. datum, locatie, -aard van het misbruik, relevante chat/IM tekst, en selecteer -het object indien mogelijk. + Wees zo specifiek mogelijk </text> <text name="incomplete_title"> - Let op: onvolledige rapporten zullen niet worden onderzocht. + Let Op: Onvolledige verslagen zullen niet worden onderzocht </text> - <button label="Annuleren" label_selected="Annuleren" name="cancel_btn"/> <button label="Misbruik rapporteren" label_selected="Misbruik rapporteren" name="send_btn"/> + <button label="Annuleren" label_selected="Annuleren" name="cancel_btn"/> </floater> diff --git a/indra/newview/skins/default/xui/nl/floater_stats.xml b/indra/newview/skins/default/xui/nl/floater_stats.xml new file mode 100644 index 0000000000000000000000000000000000000000..0db3f76735a3938413ea440d30bc85486e8bf942 --- /dev/null +++ b/indra/newview/skins/default/xui/nl/floater_stats.xml @@ -0,0 +1,71 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<floater name="Statistics" title="STATISTIEKEN"> + <scroll_container name="statistics_scroll"> + <container_view name="statistics_view"> + <stat_view label="Basis" name="basic"> + <stat_bar label="FPS" name="fps"/> + <stat_bar label="Bandbreedte" name="bandwidth"/> + <stat_bar label="Pakket Verlies" name="packet_loss"/> + <stat_bar label="Ping Sim" name="ping"/> + </stat_view> + <stat_view label="Geavanceerd" name="advanced"> + <stat_view label="Weergeven" name="render"> + <stat_bar label="KTris Tekenen" name="ktrisframe"/> + <stat_bar label="KTris Tekenen" name="ktrissec"/> + <stat_bar label="Totaal Voorwerpen" name="objs"/> + <stat_bar label="Nieuwe Voorwerpen" name="newobjs"/> + </stat_view> + <stat_view label="Textuur" name="texture"> + <stat_bar label="Count" name="numimagesstat"/> + <stat_bar label="Raw Count" name="numrawimagesstat"/> + <stat_bar label="GL Mem" name="gltexmemstat"/> + <stat_bar label="Formatted Mem" name="formattedmemstat"/> + <stat_bar label="Raw Mem" name="rawmemstat"/> + <stat_bar label="Bound Mem" name="glboundmemstat"/> + </stat_view> + <stat_view label="Netwerk" name="network"> + <stat_bar label="Pakketten In" name="packetsinstat"/> + <stat_bar label="Pakketten Uit" name="packetsoutstat"/> + <stat_bar label="Voorwerpen" name="objectkbitstat"/> + <stat_bar label="Textuur" name="texturekbitstat"/> + <stat_bar label="Bezit" name="assetkbitstat"/> + <stat_bar label="Lagen" name="layerskbitstat"/> + <stat_bar label="Daadwerkelijk In" name="actualinkbitstat"/> + <stat_bar label="Daadwerkelijk Out" name="actualoutkbitstat"/> + <stat_bar label="VFS Pending Ops" name="vfspendingoperations"/> + </stat_view> + </stat_view> + <stat_view label="Simulator" name="sim"> + <stat_bar label="Tijd Dilatatie" name="simtimedilation"/> + <stat_bar label="Sim FPS" name="simfps"/> + <stat_bar label="Physics FPS" name="simphysicsfps"/> + <stat_view label="Physics Details" name="physicsdetail"> + <stat_bar label="Pinned Objects" name="physicspinnedtasks"/> + <stat_bar label="Low LOD Objects" name="physicslodtasks"/> + <stat_bar label="Memory Allocated" name="physicsmemoryallocated"/> + <stat_bar label="Agent Updates/Sec" name="simagentups"/> + <stat_bar label="Main Agents" name="simmainagents"/> + <stat_bar label="Child Agents" name="simchildagents"/> + <stat_bar label="Voorwerpen" name="simobjects"/> + <stat_bar label="Actieve Voorwerpen" name="simactiveobjects"/> + <stat_bar label="Actieve Scripts" name="simactivescripts"/> + <stat_bar label="Actieve Evenementen" name="simscripteps"/> + <stat_bar label="Pakketten In" name="siminpps"/> + <stat_bar label="Pakketten Uit" name="simoutpps"/> + <stat_bar label="Wachtende Downloads" name="simpendingdownloads"/> + <stat_bar label="Wachtende Uploads" name="simpendinguploads"/> + <stat_bar label="Total Unacked Bytes" name="simtotalunackedbytes"/> + </stat_view> + <stat_view label="Tijd (ms)" name="simperf"> + <stat_bar label="Totale Frame Tijd" name="simframemsec"/> + <stat_bar label="Net Time" name="simnetmsec"/> + <stat_bar label="Physics Time" name="simsimphysicsmsec"/> + <stat_bar label="Simulatie Tijd" name="simsimothermsec"/> + <stat_bar label="Agent Tijd" name="simagentmsec"/> + <stat_bar label="Plaatjes Tijd" name="simimagesmsec"/> + <stat_bar label="Script Tijd" name="simscriptmsec"/> + </stat_view> + </stat_view> + </container_view> + </scroll_container> +</floater> diff --git a/indra/newview/skins/default/xui/nl/menu_inventory.xml b/indra/newview/skins/default/xui/nl/menu_inventory.xml index 6a514422b944ff1586bbb6dd2a7990e67a1f459a..c3b47cbddb90e9ec0634a37d942c4df433e5d0c7 100644 --- a/indra/newview/skins/default/xui/nl/menu_inventory.xml +++ b/indra/newview/skins/default/xui/nl/menu_inventory.xml @@ -12,7 +12,7 @@ <menu_item_call label="Nieuw script" name="New Script"/> <menu_item_call label="Nieuwe notitie" name="New Note"/> <menu_item_call label="Nieuw gebaar" name="New Gesture"/> - <menu name="New Clothes" label="Nieuwe Kleding"> + <menu label="Nieuwe Kleding" name="New Clothes"> <menu_item_call label="Nieuw shirt" name="New Shirt"/> <menu_item_call label="Nieuwe broek" name="New Pants"/> <menu_item_call label="Nieuwe schoenen" name="New Shoes"/> @@ -22,31 +22,47 @@ <menu_item_call label="Nieuwe handschoenen" name="New Gloves"/> <menu_item_call label="Nieuw onderhemd" name="New Undershirt"/> <menu_item_call label="Nieuwe onderbroek" name="New Underpants"/> + <menu_item_call label="Nieuw Alpha Masker" name="New Alpha Mask"/> + <menu_item_call label="Nieuwe Tattoo" name="New Tattoo"/> </menu> - <menu name="New Body Parts" label="Nieuwe Lichaamsdelen"> + <menu label="Nieuwe Lichaamsdelen" name="New Body Parts"> <menu_item_call label="Nieuwe postuur" name="New Shape"/> <menu_item_call label="Nieuwe huid" name="New Skin"/> <menu_item_call label="Nieuw haar" name="New Hair"/> <menu_item_call label="Nieuwe ogen" name="New Eyes"/> </menu> + <menu label="Change Type" name="Change Type"> + <menu_item_call label="Standaard" name="Default"/> + <menu_item_call label="Handschoenen" name="Gloves"/> + <menu_item_call label="Jas" name="Jacket"/> + <menu_item_call label="Broek" name="Pants"/> + <menu_item_call label="Vorm" name="Shape"/> + <menu_item_call label="Schoenen" name="Shoes"/> + <menu_item_call label="Overhemd" name="Shirt"/> + <menu_item_call label="Rok" name="Skirt"/> + <menu_item_call label="Onderbroek" name="Underpants"/> + <menu_item_call label="Onderhemd" name="Undershirt"/> + </menu> <menu_item_call label="Teleport" name="Landmark Open"/> <menu_item_call label="Open" name="Animation Open"/> <menu_item_call label="Open" name="Sound Open"/> <menu_item_call label="Verwijderen item" name="Purge Item"/> <menu_item_call label="Herstellen item" name="Restore Item"/> + <menu_item_call label="Ga Naar Link" name="Goto Link"/> <menu_item_call label="Open" name="Open"/> <menu_item_call label="Eigenschappen" name="Properties"/> <menu_item_call label="Hernoemen" name="Rename"/> <menu_item_call label="Kopieer asset UUID" name="Copy Asset UUID"/> <menu_item_call label="Kopiëren" name="Copy"/> <menu_item_call label="Plakken" name="Paste"/> + <menu_item_call label="Plak Als Link" name="Paste As Link"/> <menu_item_call label="Verwijderen" name="Delete"/> <menu_item_call label="Items uitdoen" name="Take Off Items"/> <menu_item_call label="Voeg toe aan kleding" name="Add To Outfit"/> <menu_item_call label="Vervang kleding" name="Replace Outfit"/> <menu_item_call label="Start conferentie chat" name="Conference Chat Folder"/> <menu_item_call label="Afspelen" name="Sound Play"/> - <menu_item_call label="Over landmarkering" name="Teleport To Landmark"/> + <menu_item_call label="Over Landmark" name="About Landmark"/> <menu_item_call label="In wereld afspelen" name="Animation Play"/> <menu_item_call label="Lokaal afspelen" name="Animation Audition"/> <menu_item_call label="Stuur instant message" name="Send Instant Message"/> @@ -54,8 +70,8 @@ <menu_item_call label="Start conferentie chat" name="Conference Chat"/> <menu_item_call label="Activeren" name="Activate"/> <menu_item_call label="Deactiveren" name="Deactivate"/> + <menu_item_call label="Opslaan Als" name="Save As"/> <menu_item_call label="Losmaken van jezelf" name="Detach From Yourself"/> - <menu_item_call label="Herstellen naar laatste positie" name="Restore to Last Position"/> <menu_item_call label="Dragen" name="Object Wear"/> <menu label="Bevestigen aan" name="Attach To"/> <menu label="Bevestigen aan HUD" name="Attach To HUD"/> diff --git a/indra/newview/skins/default/xui/nl/menu_inventory_add.xml b/indra/newview/skins/default/xui/nl/menu_inventory_add.xml new file mode 100644 index 0000000000000000000000000000000000000000..09330b9597a281d3c958fbcb440bc0984a45e2dd --- /dev/null +++ b/indra/newview/skins/default/xui/nl/menu_inventory_add.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<menu name="menu_inventory_add"> + <menu label="Upload" name="upload"> + <menu_item_call label="Plaatje (L$[COST])..." name="Upload Image"/> + <menu_item_call label="Geluid (L$[COST])..." name="Upload Sound"/> + <menu_item_call label="Animatie (L$[COST])..." name="Upload Animation"/> + <menu_item_call label="Bulk (L$[COST] per bestand)..." name="Bulk Upload"/> + </menu> + <menu_item_call label="Nieuwe Map" name="New Folder"/> + <menu_item_call label="Nieuw Script" name="New Script"/> + <menu_item_call label="Nieuw Notitie" name="New Note"/> + <menu_item_call label="Nieuw Gebaar" name="New Gesture"/> + <menu label="Nieuwe Kleding" name="New Clothes"> + <menu_item_call label="Nieuw Overhemd" name="New Shirt"/> + <menu_item_call label="Nieuwe Broek" name="New Pants"/> + <menu_item_call label="Nieuwe Schoenen" name="New Shoes"/> + <menu_item_call label="Nieuwe Sokken" name="New Socks"/> + <menu_item_call label="Nieuw Jas" name="New Jacket"/> + <menu_item_call label="Nieuw Rok" name="New Skirt"/> + <menu_item_call label="Nieuwe Handschoenen" name="New Gloves"/> + <menu_item_call label="Nieuw Hemd" name="New Undershirt"/> + <menu_item_call label="Nieuwe Onderbroek" name="New Underpants"/> + <menu_item_call label="Nieuwe Alpha" name="New Alpha"/> + <menu_item_call label="Nieuwe Tattoo" name="New Tattoo"/> + </menu> + <menu label="Nieuwe Lichaamsdelen" name="New Body Parts"> + <menu_item_call label="Nieuwe Vorm" name="New Shape"/> + <menu_item_call label="Nieuwe Huid" name="New Skin"/> + <menu_item_call label="Nieuw Haar" name="New Hair"/> + <menu_item_call label="Nieuwe Ogen" name="New Eyes"/> + </menu> +</menu> diff --git a/indra/newview/skins/default/xui/nl/menu_picks.xml b/indra/newview/skins/default/xui/nl/menu_picks.xml new file mode 100644 index 0000000000000000000000000000000000000000..2e53dbda589bdb1c908cff35bf78805ce502a519 --- /dev/null +++ b/indra/newview/skins/default/xui/nl/menu_picks.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Picks"> + <menu_item_call label="Info" name="pick_info"/> + <menu_item_call label="Bewerken" name="pick_edit"/> + <menu_item_call label="Teleport" name="pick_teleport"/> + <menu_item_call label="Kaart" name="pick_map"/> + <menu_item_call label="Verweideren" name="pick_delete"/> +</context_menu> diff --git a/indra/newview/skins/default/xui/nl/panel_group_roles.xml b/indra/newview/skins/default/xui/nl/panel_group_roles.xml index ffaaa8137a9a8d6143994d438bc7a7b5e3ed7763..507906c0d7c601a63ef561908c5d47903431ec18 100644 --- a/indra/newview/skins/default/xui/nl/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/nl/panel_group_roles.xml @@ -1,92 +1,50 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Leden & Rollen" name="roles_tab"> - <string name="default_needs_apply_text"> - Er zijn niet toegepaste wijzigingen op de huidige sub-tab. - </string> - <string name="want_apply_text"> - Wilt u deze wijzigingen toepassen? - </string> - <button label="?" name="help_button"/> - <panel name="members_header"> - <text name="static"> - Leden & Rollen - </text> - <text name="static2"> - Groepsleden krijgen Rollen met Mogelijkheden toegekend. Deze instellingen -kunnen eenvoudig aangepast worden, zodat meer organisatie en flexibiliteit -mogelijk is. - </text> - </panel> - <panel name="roles_header"> - <text name="static"> - Rollen - </text> - <text name="role_properties_modifiable"> - Selecteer een Rol hieronder. U kunt zijn Naam, Omschrijving en -Lid Titel wijzigen. - </text> - <text name="role_properties_not_modifiable"> - Selecteer een Rol hieronder om zijn eigenschappen, Leden en -toegestane Mogelijkheden te bekijken. - </text> - <text bottom_delta="-28" name="role_actions_modifiable"> - U kunt ook Mogelijkheden aan de Rol toekennen. - </text> - <text name="role_actions_not_modifiable"> - U kunt de toegekende Mogelijkheden bekijken, maar niet wijzigen. - </text> - </panel> - <panel name="actions_header"> - <text name="static"> - Mogelijkheden - </text> - <text name="static2"> - U kunt de Omschrijving van een Mogelijkheid bekijken en welke Rollen en -Leden de Mogelijkheid kunnen uitvoeren. - </text> - </panel> + <panel.string name="default_needs_apply_text"> + Er zijn niet opgeslagen veranderingen op de huidige tab + </panel.string> + <panel.string name="want_apply_text"> + Wilt u deze wijzigingen opslaan? + </panel.string> <tab_container height="164" name="roles_tab_container"> - <panel height="148" label="Leden" name="members_sub_tab" tool_tip="Leden"> - <line_editor bottom="127" name="search_text"/> - <button label="Zoeken" name="search_button"/> - <button label="Alles Tonen" name="show_all_button"/> - <name_list bottom_delta="-105" height="104" name="member_list"> - <column label="Lid Naam" name="name"/> - <column label="Gedoneerde Tier" name="donated"/> - <column label="Laatste Login" name="online"/> - </name_list> - <button label="Nieuw Lid Uitnodigen..." name="member_invite"/> - <button label="Uitwerpen uit de Groep" name="member_eject"/> - <string name="help_text"> + <panel height="148" label="LEDEN" name="members_sub_tab" tool_tip="Leden"> + <panel.string name="help_text"> U kunt Rollen aan Leden toewijzen of van Leden afnemen. Selecteer meerdere Leden door de Ctrl toets ingedrukt te houden en op hun namen te klikken. - </string> + </panel.string> + <filter_editor label="Filter Leden" name="filter_input"/> + <name_list bottom_delta="-105" height="104" name="member_list"> + <name_list.columns label="Lid Naam" name="name"/> + <name_list.columns label="Donaties" name="donated"/> + <name_list.columns label="Laatste Login" name="online"/> + </name_list> + <button label="Uitnodigen" name="member_invite"/> + <button label="Uitwerpen" name="member_eject"/> </panel> - <panel height="148" label="Rollen" name="roles_sub_tab"> - <line_editor bottom="127" name="search_text"/> - <button label="Zoeken" name="search_button"/> - <button label="Alles Tonen" name="show_all_button"/> + <panel height="148" label="ROLLEN" name="roles_sub_tab"> + <panel.string name="help_text"> + Rollen hebben een titel en een toegestane lijst met Vaardigheden die Leden kunnen uitvoeren. Leden kunnen tot 1 of meer Rollen behoren. Een groep kan tot 10 Rollen bevatten, inclusief de Iedereen en Eigenaren Rollen. + </panel.string> + <panel.string name="cant_delete_role"> + De 'Iedereen' en 'Eigenaren' Rollen zijn speciaal en kunnen niet verwijderd worden. + </panel.string> + <panel.string name="power_folder_icon"> + Inv_FolderClosed + </panel.string> + <filter_editor label="Filter Rollen" name="filter_input"/> <scroll_list bottom_delta="-104" height="104" name="role_list"> - <column label="Rol Naam" name="name"/> - <column label="Titel" name="title"/> - <column label="Leden" name="members"/> + <scroll_list.columns label="Rol" name="name"/> + <scroll_list.columns label="Titel" name="title"/> + <scroll_list.columns label="Leden" name="members"/> </scroll_list> - <button label="Nieuwe Rol Maken..." name="role_create"/> + <button label="Nieuwe Rol..." name="role_create"/> <button label="Rol Verwijderen" name="role_delete"/> - <string name="help_text"> - Rollen hebben een titel en een toegestane lijst met Mogelijkheden die Leden kunnen uitvoeren. Leden kunnen tot 1 of meer Rollen behoren. Een groep kan tot 10 Rollen bevatten, inclusief de Iedereen en Eigenaren Rollen. - </string> - <string name="cant_delete_role"> - De 'Iedereen' en 'Eigenaren' Rollen zijn speciaal en kunnen niet verwijderd worden. - </string> </panel> - <panel height="148" label="Mogelijkheden" name="actions_sub_tab"> - <line_editor bottom="127" name="search_text"/> - <button label="Zoeken" name="search_button"/> - <button label="Alles Tonen" name="show_all_button"/> - <scroll_list bottom_delta="-120" height="118" name="action_list" tool_tip="Selecteer een Mogelijkheid om meer details te bekijken."/> - <string name="help_text"> + <panel height="148" label="VAARDIGHEDEN" name="actions_sub_tab" tool_tip="Je kan een vaardigheid's beschrijving en welke Rollen en Leden kunnen uitvoeren van de Vaardigheid."> + <panel.string name="help_text"> Mogelijkheden stellen leden in staat om specifieke dingen in een groep te doen. Er is een brede variëteit aan Mogelijkheden. - </string> + </panel.string> + <filter_editor label="Filter Vaardigheden" name="filter_input"/> + <scroll_list bottom_delta="-120" height="118" name="action_list" tool_tip="Selecteer een Vaardigheid om meer details te bekijken"/> </panel> </tab_container> <panel name="members_footer"> @@ -96,15 +54,12 @@ Leden de Mogelijkheid kunnen uitvoeren. <text name="static2"> Toegestane Mogelijkheden </text> - <scroll_list name="member_allowed_actions" tool_tip="Kijk voor details van elke Toegestane Mogelijkheid in de Mogelijkheden tab."/> + <scroll_list name="member_allowed_actions" tool_tip="Voor details van elke Toegestane Vaardigheid in de Mogelijkheden tab"/> </panel> <panel name="roles_footer"> <text name="static"> Naam </text> - <text name="static2"> - Omschrijving - </text> <line_editor name="role_name"> Werknemers </line_editor> @@ -114,30 +69,33 @@ Leden de Mogelijkheid kunnen uitvoeren. <line_editor name="role_title"> (wachten) </line_editor> + <text name="static2"> + Omschrijving + </text> <text_editor name="role_description"> (wachten) </text_editor> <text name="static4"> - Toegewezen Leden + Toegewezen Rollen </text> + <check_box label="Leden Onthullen" name="role_visible_in_list" tool_tip="Bepaalt of leden van deze rol zichtbaar zijn in de Algemeen tab voor mensen buiten de groep."/> <text name="static5" tool_tip="Een lijst met Mogelijkheden die de geselecteerd rol kan uitvoeren."> Toegestane Mogelijkheden </text> - <check_box label="Leden zijn zichtbaar" name="role_visible_in_list" tool_tip="Bepaalt of leden van deze rol zichtbaar zijn in de Algemeen tab voor mensen buiten de groep."/> - <scroll_list name="role_allowed_actions" tool_tip="Kijk voor details van elke Toegestane Mogelijkheid in de Mogelijkheden tab."/> + <scroll_list name="role_allowed_actions" tool_tip="For details of each allowed ability see the abilities tab"/> </panel> <panel name="actions_footer"> <text name="static"> - Omschrijving + Vaardigheid omschrijving </text> <text_editor name="action_description"> Dit is de Mogelijkheid 'Werp Leden uit deze Groep'. Alleen een Eigenaar kan een andere Eigenaar uitwerpen. </text_editor> <text name="static2"> - Rollen met Mogelijkheid + Rollen met deze vaardigheid </text> <text name="static3"> - Leden met Mogelijkheid + Leden met deze vaardigheid </text> </panel> </panel> diff --git a/indra/newview/skins/default/xui/nl/panel_login.xml b/indra/newview/skins/default/xui/nl/panel_login.xml index 235e15e7fbc0be23fdf501f4a29067cdc9dbc15e..bcc888061f9de9ef697b7d1ac7e7369bae7aa1aa 100644 --- a/indra/newview/skins/default/xui/nl/panel_login.xml +++ b/indra/newview/skins/default/xui/nl/panel_login.xml @@ -6,34 +6,36 @@ <panel.string name="forgot_password_url"> http://secondlife.com/account/request.php?lang=nl-NL </panel.string> -<panel name="login_widgets"> - <text name="first_name_text"> - Voornaam: - </text> - <text name="last_name_text"> - Achternaam: - </text> - <text name="password_text"> - Wachtwoord: - </text> - <text name="start_location_text"> - Startlocatie: - </text> - <combo_box name="start_location_combo"> - <combo_box.item name="MyHome" label="Mijn Thuis"/> - <combo_box.item name="MyLastLocation" label="Mijn Laatste Locatie"/> - <combo_box.item name="Typeregionname" label="< Type regio naam >"/> - </combo_box> - <check_box label="Onthoud wachtwoord" name="remember_check"/> - <button label="Inloggen" label_selected="Inloggen" name="connect_btn"/> - <text name="create_new_account_text"> - Nieuw account maken - </text> - <text name="forgot_password_text"> - Naam of wachtwoord vergeten? - </text> - <text name="channel_text"> - [VERSION] - </text> -</panel> + <panel name="login_widgets"> + <text name="first_name_text"> + Voornaam: + </text> + <line_editor name="first_name_edit" tool_tip="[SECOND_LIFE] Voornaam"/> + <text name="last_name_text"> + Achternaam: + </text> + <line_editor name="last_name_edit" tool_tip="[SECOND_LIFE] Achternaam"/> + <text name="password_text"> + Paswoord: + </text> + <button label="Inloggen" label_selected="Inloggen" name="connect_btn"/> + <text name="start_location_text"> + Start locatie: + </text> + <combo_box name="start_location_combo"> + <combo_box.item label="Mijn Laatste Locatie" name="MyLastLocation"/> + <combo_box.item label="Mijn Thuis" name="MyHome"/> + <combo_box.item label="<Tik regio naam>" name="Typeregionname"/> + </combo_box> + <check_box label="Onthoud paswoord" name="remember_check"/> + <text name="create_new_account_text"> + Maak een nieuwe account + </text> + <text name="forgot_password_text"> + Naam of paswoord vergeten? + </text> + <text name="channel_text"> + [VERSION] + </text> + </panel> </panel> diff --git a/indra/newview/skins/default/xui/nl/panel_main_inventory.xml b/indra/newview/skins/default/xui/nl/panel_main_inventory.xml new file mode 100644 index 0000000000000000000000000000000000000000..c533cc20c0a39449c2b05e78bf91611dcbe7553a --- /dev/null +++ b/indra/newview/skins/default/xui/nl/panel_main_inventory.xml @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<panel label="Dingen" name="main inventory panel"> + <panel.string name="Title"> + Dingen + </panel.string> + <filter_editor label="Filter" name="inventory search editor"/> + <tab_container name="inventory filter tabs"> + <inventory_panel label="Alle Voorwerpen" name="All Items"/> + <inventory_panel label="Recente Voorwerpen" name="Recent Items"/> + </tab_container> + <panel name="bottom_panel"> + <button name="options_gear_btn" tool_tip="Toon extra opties"/> + <button name="add_btn" tool_tip="Voeg nieuw voorwerp toe"/> + <dnd_button name="trash_btn" tool_tip="Remove selected item"/> + </panel> + <menu_bar name="Inventory Menu"> + <menu label="Bestand" name="File"> + <menu_item_call label="Open" name="Open"/> + <menu label="Upload" name="upload"> + <menu_item_call label="Plaatje (L$[COST])..." name="Upload Image"/> + <menu_item_call label="Geluid (L$[COST])..." name="Upload Sound"/> + <menu_item_call label="Animatie (L$[COST])..." name="Upload Animation"/> + <menu_item_call label="Bulk (L$[COST] per bestand)..." name="Bulk Upload"/> + </menu> + <menu_item_call label="Nieuw Venster" name="New Window"/> + <menu_item_call label="Toon Filters" name="Show Filters"/> + <menu_item_call label="Reset Filters" name="Reset Current"/> + <menu_item_call label="Sluit Alle Mappen" name="Close All Folders"/> + <menu_item_call label="Prullenbak Leegmaken" name="Empty Trash"/> + <menu_item_call label="Leeg Verloren En Gevonden" name="Empty Lost And Found"/> + </menu> + <menu label="Maken" name="Create"> + <menu_item_call label="Nieuwe Map" name="New Folder"/> + <menu_item_call label="Nieuw Script" name="New Script"/> + <menu_item_call label="Nieuwe Notitie" name="New Note"/> + <menu_item_call label="Nieuw Gebaar" name="New Gesture"/> + <menu label="Nieuwe Kleding" name="New Clothes"> + <menu_item_call label="Nieuw Overhemd" name="New Shirt"/> + <menu_item_call label="Nieuwe Broek" name="New Pants"/> + <menu_item_call label="Nieuwe Schoenen" name="New Shoes"/> + <menu_item_call label="Nieuwe Sokken" name="New Socks"/> + <menu_item_call label="Nieuwe Jas" name="New Jacket"/> + <menu_item_call label="Nieuwe Rok" name="New Skirt"/> + <menu_item_call label="Nieuwe Handschoenen" name="New Gloves"/> + <menu_item_call label="Nieuw Hemd" name="New Undershirt"/> + <menu_item_call label="Nieuwe Onderbroek" name="New Underpants"/> + <menu_item_call label="Nieuwe Alpha" name="New Alpha"/> + <menu_item_call label="Nieuwe Tattoo" name="New Tattoo"/> + </menu> + <menu label="Nieuwe Lichaamsdelen" name="New Body Parts"> + <menu_item_call label="Nieuwe Vorm" name="New Shape"/> + <menu_item_call label="Nieuwe Huid" name="New Skin"/> + <menu_item_call label="Nieuw Haar" name="New Hair"/> + <menu_item_call label="Nieuwe Ogen" name="New Eyes"/> + </menu> + </menu> + <menu label="Sorteer" name="Sort"> + <menu_item_check label="Bij Naam" name="By Name"/> + <menu_item_check label="Bij Datum" name="By Date"/> + <menu_item_check label="Mappen Altijd Op Naam" name="Folders Always By Name"/> + <menu_item_check label="Syteemmappen Naar Boven" name="System Folders To Top"/> + </menu> + </menu_bar> +</panel> diff --git a/indra/newview/skins/default/xui/nl/panel_world_map.xml b/indra/newview/skins/default/xui/nl/panel_world_map.xml index 11855b7fc12259f7f30178581246a0fe217f77ea..d9a0b66fbcc528ef5b4baaa3d7346663cd429ae9 100644 --- a/indra/newview/skins/default/xui/nl/panel_world_map.xml +++ b/indra/newview/skins/default/xui/nl/panel_world_map.xml @@ -1,5 +1,11 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="world_map"> + <panel.string name="Loading"> + Laden... + </panel.string> + <panel.string name="InvalidLocation"> + Ongeldige Locatie + </panel.string> <panel.string name="world_map_north"> N </panel.string> diff --git a/indra/newview/skins/default/xui/nl/strings.xml b/indra/newview/skins/default/xui/nl/strings.xml index 0be5ec9e869f650e97cc75c7786e8a4de5e994d9..ae8d3b89dc134f3520623100f39d7507576589f3 100644 --- a/indra/newview/skins/default/xui/nl/strings.xml +++ b/indra/newview/skins/default/xui/nl/strings.xml @@ -4,10 +4,21 @@ 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="create_account_url">http://join.secondlife.com/index.php?lang=nl-NL</string> + <string name="SUPPORT_SITE"> + Second Life Ondersteunings Portaal + </string> + <string name="StartupDetectingHardware"> + Detecteert hardware... + </string> + <string name="StartupLoading"> + Laden + </string> <string name="LoginInProgress"> Inloggen. Het kan lijken dat [APP_NAME] is vastgelopen. Wacht u alstublieft... . </string> + <string name="LoginInProgressNoFrozen"> + Inloggen... + </string> <string name="LoginAuthenticating"> Authenticeren </string> @@ -26,11 +37,14 @@ <string name="LoginInitializingMultimedia"> Multimedia initialiseren... </string> + <string name="LoginInitializingFonts"> + Lettertypen laden... + </string> <string name="LoginVerifyingCache"> - Cache bestanden verifiëren (kan 60-90 seconden duren)... + Veriveren cache bestanden (kan 60-90 seconden duren)... </string> <string name="LoginProcessingResponse"> - Antwoord verwerken... + Reactie Verwerken... </string> <string name="LoginInitializingWorld"> Wereld initialiseren... @@ -56,9 +70,15 @@ <string name="LoginDownloadingClothing"> Kleding downloaden... </string> + <string name="LoginFailedNoNetwork"> + Netwerk Fout: Kon geen verbinding maken, kijk uw nerwerk connectie na alstublieft. + </string> <string name="Quit"> Afsluiten </string> + <string name="create_account_url"> + http://join.secondlife.com/index.php?lang=nl-NL + </string> <string name="AgentLostConnection"> Deze regio kan problemen ondervinden. Controleer alstublieft uw verbinding met het internet. </string> @@ -77,39 +97,9 @@ <string name="TooltipIsGroup"> (Groep) </string> - <string name="TooltipFlagScript"> - Script - </string> - <string name="TooltipFlagPhysics"> - Fysiek - </string> - <string name="TooltipFlagTouch"> - Aanraken - </string> - <string name="TooltipFlagL$"> - L$ - </string> - <string name="TooltipFlagDropInventory"> - Deponeer inventaris - </string> - <string name="TooltipFlagPhantom"> - Fantoom - </string> - <string name="TooltipFlagTemporary"> - Tijdelijk - </string> - <string name="TooltipFlagRightClickMenu"> - (Rechtsklikken voor menu) - </string> - <string name="TooltipFreeToCopy"> - Vrij te kopiëren - </string> <string name="TooltipForSaleL$"> Te koop: L$[AMOUNT] </string> - <string name="TooltipForSaleMsg"> - Te koop: [MESSAGE] - </string> <string name="TooltipFlagGroupBuild"> Groep bouwen </string> @@ -137,6 +127,76 @@ <string name="TooltipMustSingleDrop"> Slechts een enkel item kan hier naartoe gesleept worden </string> + <string name="TooltipHttpUrl"> + Klik om deze web pagina te bekijken + </string> + <string name="TooltipSLURL"> + Klik om deze locatie informatie te bekijken + </string> + <string name="TooltipAgentUrl"> + Klik om deze inwoner zijn profiel te bekijken + </string> + <string name="TooltipGroupUrl"> + Klik om deze groeps informatie te bekijken + </string> + <string name="TooltipEventUrl"> + Klik om deze evenement informatie te bekijken + </string> + <string name="TooltipClassifiedUrl"> + Klik om deze advertentie te bekijken + </string> + <string name="TooltipParcelUrl"> + Klik om deze perceel informatie te bekijken + </string> + <string name="TooltipTeleportUrl"> + Klik om naar deze lokatie te teleporteren + </string> + <string name="TooltipObjectIMUrl"> + Klik om deze object informatie te bekijken + </string> + <string name="TooltipMapUrl"> + Klik om deze locatie op een map te bekijken + </string> + <string name="TooltipSLAPP"> + Klik om het secondlife:// commando te starten + </string> + <string name="CurrentURL" value="HuidigeURL: [HuidigeURL]"/> + <string name="SLurlLabelTeleport"> + Teleporteer naar + </string> + <string name="SLurlLabelShowOnMap"> + Toon Map voor + </string> + <string name="BUTTON_CLOSE_DARWIN"> + Sluiten (⌘W) + </string> + <string name="BUTTON_CLOSE_WIN"> + Sluiten (Ctrl+W) + </string> + <string name="BUTTON_RESTORE"> + Restore + </string> + <string name="BUTTON_MINIMIZE"> + Minimaliseren + </string> + <string name="BUTTON_TEAR_OFF"> + Afscheuren + </string> + <string name="BUTTON_DOCK"> + Koppelen + </string> + <string name="BUTTON_UNDOCK"> + Loskoppelen + </string> + <string name="BUTTON_HELP"> + Toon Help + </string> + <string name="Searching"> + Zoeken... + </string> + <string name="NoneFound"> + Geen gevonden. + </string> <string name="RetrievingData"> Ophalen... </string> @@ -191,8 +251,77 @@ <string name="AssetErrorUnknownStatus"> Onbekende status </string> - <string name="AvatarEditingApparance"> - (Uiterlijk bewerken) + <string name="texture"> + textuur + </string> + <string name="sound"> + geluid + </string> + <string name="calling card"> + visitekaart + </string> + <string name="landmark"> + landmarkering + </string> + <string name="legacy script"> + legacy script + </string> + <string name="clothing"> + kleding + </string> + <string name="object"> + object + </string> + <string name="note card"> + notecard + </string> + <string name="folder"> + map + </string> + <string name="root"> + root + </string> + <string name="lsl2 script"> + LSL2 script + </string> + <string name="lsl bytecode"> + LSL bytecode + </string> + <string name="tga texture"> + tga textuur + </string> + <string name="body part"> + lichaamsdeel + </string> + <string name="snapshot"> + foto + </string> + <string name="lost and found"> + Verloren en Gevonden + </string> + <string name="targa image"> + targa plaatje + </string> + <string name="trash"> + Prullenbak + </string> + <string name="jpeg image"> + jpeg plaatje + </string> + <string name="animation"> + animatie + </string> + <string name="gesture"> + gebaar + </string> + <string name="simstate"> + simstate + </string> + <string name="favorite"> + favorieten + </string> + <string name="symbolic link"> + link </string> <string name="AvatarAway"> Afwezig @@ -414,7 +543,19 @@ Laden... </string> <string name="worldmap_offline"> - Offline + Off line + </string> + <string name="worldmap_results_none_found"> + Geen gevonden. + </string> + <string name="Ok"> + OK + </string> + <string name="Premature end of file"> + Vroegtijdig eind van bestand + </string> + <string name="ST_NO_JOINT"> + Kan niet ROOT of JOINT vinden. </string> <string name="whisper"> fluistert: @@ -422,6 +563,57 @@ <string name="shout"> schreeuwt: </string> + <string name="ringing"> + Verbinden met in-wereld voice chat... + </string> + <string name="connected"> + Verbonden + </string> + <string name="unavailable"> + Voice is niet beschikbaar op uw huidige locatie + </string> + <string name="hang_up"> + Verbinding met in-wereld voicechat verbroken + </string> + <string name="ScriptQuestionCautionChatGranted"> + '[OBJECTNAME]', een object van '[OWNERNAME]', gevestigd in [REGIONNAME] op [REGIONPOS], is toestemming verleend om te: [PERMISSIONS]. + </string> + <string name="ScriptQuestionCautionChatDenied"> + '[OBJECTNAME]', een object van '[OWNERNAME]', gevestigd in [REGIONNAME] op [REGIONPOS], is toestemming geweigerd om te: [PERMISSIONS]. + </string> + <string name="ScriptTakeMoney"> + Linden dollars (L$) van u wegnemen + </string> + <string name="ActOnControlInputs"> + Acteren op uw bedieningsinvoer + </string> + <string name="RemapControlInputs"> + Uw bedieningsinvoer herdefiniëren + </string> + <string name="AnimateYourAvatar"> + Animeer uw avatar + </string> + <string name="AttachToYourAvatar"> + Bevestig aan uw avatar + </string> + <string name="ReleaseOwnership"> + Eigendom vrijgeven en openbaar worden + </string> + <string name="LinkAndDelink"> + Koppelen met en ontkoppelen van andere objecten + </string> + <string name="AddAndRemoveJoints"> + Toevoegen en verwijderen koppelingen met andere objecten + </string> + <string name="ChangePermissions"> + Wijzig zijn permissies + </string> + <string name="TrackYourCamera"> + Volg uw camera + </string> + <string name="ControlYourCamera"> + Bedien uw camera + </string> <string name="SIM_ACCESS_PG"> PG </string> @@ -440,8 +632,6 @@ <string name="land_type_unknown"> (onbekend) </string> - <string name="covenant_never_modified">Laatst gewijzigd: (nooit)</string> - <string name="covenant_modified">Laatst gewijzigd: </string> <string name="all_files"> Alle bestanden </string> @@ -487,26 +677,122 @@ <string name="choose_the_directory"> Kies folder </string> - <string name="accel-mac-control"> - ⌃ + <string name="AvatarSetNotAway"> + Niet Afwezig Instellen </string> - <string name="accel-mac-command"> - ⌘ + <string name="AvatarSetAway"> + Afwezig Instellen </string> - <string name="accel-mac-option"> - ⌥ + <string name="AvatarSetNotBusy"> + Niet Bezig Instellen </string> - <string name="accel-mac-shift"> - ⇧ + <string name="AvatarSetBusy"> + Bezig Instellen </string> - <string name="accel-win-control"> - Ctrl+ + <string name="shape"> + Postuur </string> - <string name="accel-win-alt"> - Alt+ + <string name="skin"> + Huid </string> - <string name="accel-win-shift"> - Shift+ + <string name="hair"> + Haar + </string> + <string name="eyes"> + Ogen + </string> + <string name="shirt"> + Hemd + </string> + <string name="pants"> + Broek + </string> + <string name="shoes"> + Schoenen + </string> + <string name="socks"> + Sokken + </string> + <string name="jacket"> + Jas + </string> + <string name="gloves"> + Handschoenen + </string> + <string name="undershirt"> + onderhemd + </string> + <string name="underpants"> + Onderbroek + </string> + <string name="skirt"> + Rok + </string> + <string name="alpha"> + Alpha + </string> + <string name="tattoo"> + Tattoo + </string> + <string name="invalid"> + ongeldig + </string> + <string name="next"> + Volgende + </string> + <string name="ok"> + OK + </string> + <string name="GroupNotifyGroupNotice"> + Groep Mededeling + </string> + <string name="GroupNotifyGroupNotices"> + Groep Mededelingen + </string> + <string name="GroupNotifySentBy"> + Verzonden Door: + </string> + <string name="GroupNotifyAttached"> + Bijgevoegt: + </string> + <string name="GroupNotifyViewPastNotices"> + Bekijk alle mededelingen en bijlages van verzonden Mededelingen in het verleden + </string> + <string name="GroupNotifyOpenAttachment"> + Open Bijlage + </string> + <string name="GroupNotifySaveAttachment"> + Sla Bijlage Op + </string> + <string name="TeleportOffer"> + Teleporteer Aanbieding + </string> + <string name="StartUpNotification"> + [%d] Nieuwe mededelingen aangekomen terwijl u weg was ... + </string> + <string name="StartUpNotifications"> + [%d] Nieuwe mededelingen aangekomen terwijl u weg was ... + </string> + <string name="OverflowInfoChannelString"> + U heeft [%d] meer mededelingen + </string> + <string name="BodyPartsRightArm"> + Rechter Arm + </string> + <string name="BodyPartsHead"> + Hoofd + </string> + <string name="BodyPartsLeftArm"> + Linker Arm + </string> + <string name="BodyPartsLeftLeg"> + Linker Been + </string> + <string name="BodyPartsTorso"> + Torso + </string> + <string name="BodyPartsRightLeg"> + Rechter Been </string> <string name="GraphicsQualityLow"> Laag @@ -517,73 +803,2407 @@ <string name="GraphicsQualityHigh"> Hoog </string> - - <!-- PARCEL_CATEGORY_UI_STRING --> - <string name="Linden Location">Linden locatie</string> - <string name="Adult">Adult</string> - <string name="Arts&Culture">Kunst & Cultuur</string> - <string name="Business">Zakelijk</string> - <string name="Educational">Educatief</string> - <string name="Gaming">Spelen</string> - <string name="Hangout">Ontmoetingsplaats</string> - <string name="Newcomer Friendly">Nieuwkomervriendelijk</string> - <string name="Parks&Nature">Parken & natuur</string> - <string name="Residential">Woongebied</string> - <string name="Shopping">Winkelen</string> - <string name="Other">Anders</string> - - <string name="ringing"> - Verbinden met in-wereld voice chat... + <string name="LeaveMouselook"> + Druk op ESC om terug te keren naar Wereld Zicht + </string> + <string name="InventoryNoMatchingItems"> + Geen overeenkomende objecten gevonden in de voorraad. + </string> + <string name="InventoryNoTexture"> + Je hebt geen kopie van deze texture in je inventaris + </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="(worn)"/> + <string name="link" value="(link)"/> + <string name="broken_link" value="(broken_link)""/> + <string name="LoadingContents"> + Loading contents... + </string> + <string name="NoContents"> + No contents + </string> + <string name="WornOnAttachmentPoint" value="(worn on [ATTACHMENT_POINT])"/> + <string name="Chat" value="Chat :"/> + <string name="Sound" value="Geluid :"/> + <string name="Wait" value="--- Wachten :"/> + <string name="AnimFlagStop" value="Stop Animatie :"/> + <string name="AnimFlagStart" value="Start Animatie :"/> + <string name="Wave" value="Wave"/> + <string name="HelloAvatar" value="Hallo, avatar!"/> + <string name="ViewAllGestures" value="Bekijk alles >"/> + <string name="Animations" value="Animaties,"/> + <string name="Calling Cards" value="Calling Cards,"/> + <string name="Clothing" value="Kleding,"/> + <string name="Gestures" value="Gestures,"/> + <string name="Landmarks" value="Landmarks,"/> + <string name="Notecards" value="Notecards,"/> + <string name="Objects" value="Objecten,"/> + <string name="Scripts" value="Scripts,"/> + <string name="Sounds" value="Geluiden,"/> + <string name="Textures" value="Textures,"/> + <string name="Snapshots" value="Snapshots,"/> + <string name="No Filters" value="Nee"/> + <string name="Since Logoff" value="- Sinds Afmelden"/> + <string name="InvFolder My Inventory"> + Mijn Inventaris + </string> + <string name="InvFolder My Favorites"> + Mijn Favorieten + </string> + <string name="InvFolder Library"> + Bibliotheek + </string> + <string name="InvFolder Textures"> + Textures + </string> + <string name="InvFolder Sounds"> + Geluiden </string> - <string name="connected"> - Verbonden + <string name="InvFolder Calling Cards"> + Calling Cards </string> - <string name="unavailable"> - Voice is niet beschikbaar op uw huidige locatie + <string name="InvFolder Landmarks"> + Landmarks </string> - <string name="hang_up"> - Verbinding met in-wereld voicechat verbroken + <string name="InvFolder Scripts"> + Scripts + </string> + <string name="InvFolder Clothing"> + Kleding + </string> + <string name="InvFolder Objects"> + Objecten + </string> + <string name="InvFolder Notecards"> + Notecards + </string> + <string name="InvFolder New Folder"> + Nieuwe Map + </string> + <string name="InvFolder Inventory"> + Inventaris + </string> + <string name="InvFolder Uncompressed Images"> + Ongecomprimeerde Afbeeldingen + </string> + <string name="InvFolder Body Parts"> + Lichaams Delen + </string> + <string name="InvFolder Trash"> + Afval + </string> + <string name="InvFolder Photo Album"> + Foto Album + </string> + <string name="InvFolder Lost And Found"> + Verloren en Gevonden + </string> + <string name="InvFolder Uncompressed Sounds"> + Ongecomprimeerde Geluiden + </string> + <string name="InvFolder Animations"> + Animaties + </string> + <string name="InvFolder Gestures"> + Gebaren + </string> + <string name="InvFolder favorite"> + Favoriten + </string> + <string name="InvFolder Current Outfit"> + Huidige Uitrusting + </string> + <string name="InvFolder My Outfits"> + Mijn Uitrustingen + </string> + <string name="InvFolder Friends"> + Vrienden + </string> + <string name="InvFolder All"> + Alles + </string> + <string name="Buy"> + Koop + </string> + <string name="BuyforL$"> + Koop voor L$ + </string> + <string name="Stone"> + Steen + </string> + <string name="Metal"> + Metaal + </string> + <string name="Glass"> + Glas + </string> + <string name="Wood"> + Hout + </string> + <string name="Flesh"> + Vlees + </string> + <string name="Plastic"> + Plastic + </string> + <string name="Rubber"> + Rubber + </string> + <string name="Light"> + Licht + </string> + <string name="KBShift"> + Shift + </string> + <string name="KBCtrl"> + Ctrl + </string> + <string name="Chest"> + Borstkas + </string> + <string name="Skull"> + Schedel + </string> + <string name="Left Shoulder"> + Linker Schouder + </string> + <string name="Right Shoulder"> + Rechter Schouder + </string> + <string name="Left Hand"> + Linker Hand + </string> + <string name="Right Hand"> + Rechter Hand + </string> + <string name="Left Foot"> + Linker Voet + </string> + <string name="Right Foot"> + Rechter Voet + </string> + <string name="Spine"> + Ruggegraat + </string> + <string name="Pelvis"> + Bekken + </string> + <string name="Mouth"> + Mond + </string> + <string name="Chin"> + Kin + </string> + <string name="Left Ear"> + Linker Oor + </string> + <string name="Right Ear"> + Rechter Oor + </string> + <string name="Left Eyeball"> + Linker Oogbal + </string> + <string name="Right Eyeball"> + Rechter Oogbal + </string> + <string name="Nose"> + Neus + </string> + <string name="R Upper Arm"> + R Boven Arm + </string> + <string name="R Forearm"> + R Onder Arm + </string> + <string name="L Upper Arm"> + L Boven Arm + </string> + <string name="L Forearm"> + L Onder Arm + </string> + <string name="Right Hip"> + Rechter Heup + </string> + <string name="R Upper Leg"> + R Boven Been + </string> + <string name="R Lower Leg"> + R Onder Been + </string> + <string name="Left Hip"> + Linker Heub + </string> + <string name="L Upper Leg"> + L Boven Been + </string> + <string name="L Lower Leg"> + L Onder Been + </string> + <string name="Stomach"> + Maag + </string> + <string name="Left Pec"> + Left Pec + </string> + <string name="Right Pec"> + Right Pec + </string> + <string name="YearsMonthsOld"> + [AGEYEARS] [AGEMONTHS] oud + </string> + <string name="YearsOld"> + [AGEYEARS] oud + </string> + <string name="MonthsOld"> + [AGEMONTHS] oud + </string> + <string name="WeeksOld"> + [AGEWEEKS] oud + </string> + <string name="DaysOld"> + [AGEDAYS] oud + </string> + <string name="TodayOld"> + Vandaag toegetreden + </string> + <string name="AgeYearsA"> + [COUNT] jaar + </string> + <string name="AgeYearsB"> + [COUNT] jaar + </string> + <string name="AgeYearsC"> + [COUNT] jaar + </string> + <string name="AgeMonthsA"> + [COUNT] maand + </string> + <string name="AgeMonthsB"> + [COUNT] maanden + </string> + <string name="AgeMonthsC"> + [COUNT] maanden + </string> + <string name="AgeWeeksA"> + [COUNT] week + </string> + <string name="AgeWeeksB"> + [COUNT] weken + </string> + <string name="AgeWeeksC"> + [COUNT] weken + </string> + <string name="AgeDaysA"> + [COUNT] dag + </string> + <string name="AgeDaysB"> + [COUNT] dagen + </string> + <string name="AgeDaysC"> + [COUNT] dagen + </string> + <string name="GroupMembersA"> + [COUNT] lid + </string> + <string name="GroupMembersB"> + [COUNT] leden + </string> + <string name="GroupMembersC"> + [COUNT] leden + </string> + <string name="AcctTypeResident"> + bewoner + </string> + <string name="AcctTypeTrial"> + Trial + </string> + <string name="AcctTypeCharterMember"> + Charter Member + </string> + <string name="AcctTypeEmployee"> + Linden Lab Werknemer + </string> + <string name="PaymentInfoUsed"> + Betalings info gebruikt + </string> + <string name="PaymentInfoOnFile"> + Betalings info op bestand + </string> + <string name="NoPaymentInfoOnFile"> + Geen betalings info op bestand + </string> + <string name="AgeVerified"> + Leeftijd gecontroleerd + </string> + <string name="NotAgeVerified"> + Niet leeftijd gecontroleerd + </string> + <string name="Center 2"> + Centrum 2 + </string> + <string name="Top Right"> + Rechts Boven + </string> + <string name="Top"> + Boven + </string> + <string name="Top Left"> + Links Boven + </string> + <string name="Center"> + Centrum + </string> + <string name="Bottom Left"> + Links beneden + </string> + <string name="Bottom"> + Beneden + </string> + <string name="Bottom Right"> + Rechts beneden + </string> + <string name="CompileQueueDownloadedCompiling"> + Dedownload, nu samenstellen + </string> + <string name="CompileQueueScriptNotFound"> + Script niet gevonden op server. + </string> + <string name="CompileQueueProblemDownloading"> + Problem downloading + </string> + <string name="CompileQueueInsufficientPermDownload"> + Onvoldoende rechten om een script te downloaden. + </string> + <string name="CompileQueueInsufficientPermFor"> + Onvoldoende rechten voor + </string> + <string name="CompileQueueUnknownFailure"> + Onbekende fout te downloaden + </string> + <string name="CompileQueueTitle"> + Hercompilatie vooruitgang + </string> + <string name="CompileQueueStart"> + Hercompilatie + </string> + <string name="ResetQueueTitle"> + Reset Vooruitgang + </string> + <string name="ResetQueueStart"> + reset + </string> + <string name="RunQueueTitle"> + Set Running Progress + </string> + <string name="RunQueueStart"> + set running + </string> + <string name="NotRunQueueTitle"> + Set Not Running Progress + </string> + <string name="NotRunQueueStart"> + set not running + </string> + <string name="CompileSuccessful"> + Compileren succesvol! + </string> + <string name="CompileSuccessfulSaving"> + Compileren succesvol, opslaan... + </string> + <string name="SaveComplete"> + Opslaan gereed. + </string> + <string name="ObjectOutOfRange"> + Script (object buiten het bereik) + </string> + <string name="GodToolsObjectOwnedBy"> + Object [OBJECT] eigendom van [OWNER] + </string> + <string name="GroupsNone"> + geen + </string> + <string name="Group" value="(group)"/> + <string name="Unknown"> + (Unknown) + </string> + <string name="SummaryForTheWeek" value="Samenvatting voor deze week, vanaf"/> + <string name="NextStipendDay" value="The next stipend day is"/> + <string name="GroupIndividualShare" value="Groep Individueel Aandeel"/> + <string name="Balance"> + Banksaldo + </string> + <string name="Credits"> + Credits + </string> + <string name="Debits"> + Debiteert + </string> + <string name="Total"> + Totaal + </string> + <string name="NoGroupDataFound"> + Geen groep gegevens gevonden voor groep + </string> + <string name="IMParentEstate"> + parent estate + </string> + <string name="IMMainland"> + mainland + </string> + <string name="IMTeen"> + tiener + </string> + <string name="RegionInfoError"> + fout + </string> + <string name="RegionInfoAllEstatesOwnedBy"> + all estates owned by [OWNER] + </string> + <string name="RegionInfoAllEstatesYouOwn"> + all estates that you own + </string> + <string name="RegionInfoAllEstatesYouManage"> + all estates that you manage for [OWNER] + </string> + <string name="RegionInfoAllowedResidents"> + Toegestane bewoners: ([ALLOWEDAGENTS], max [MAXACCESS]) + </string> + <string name="RegionInfoAllowedGroups"> + Toegestane groepen: ([ALLOWEDGROUPS], max [MAXACCESS]) + </string> + <string name="CursorPos"> + Lijn [LINE], Column [COLUMN] + </string> + <string name="PanelDirCountFound"> + [COUNT] gevonden + </string> + <string name="PanelContentsNewScript"> + Nieuw Script + </string> + <string name="MuteByName"> + (by name) + </string> + <string name="MuteAgent"> + (resident) + </string> + <string name="MuteObject"> + (object) + </string> + <string name="MuteGroup"> + (group) + </string> + <string name="RegionNoCovenant"> + There is no Covenant provided for this Estate. + </string> + <string name="RegionNoCovenantOtherOwner"> + There is no Covenant provided for this Estate. The land on this estate is being sold by the Estate owner, not Linden Lab. Please contact the Estate Owner for sales details. + </string> + <string name="covenant_last_modified"> + Laatst bewerkt: + </string> + <string name="none_text" value="(none)"/> + <string name="never_text" value="(never)"/> + <string name="GroupOwned"> + Groep Eigendom + </string> + <string name="Public"> + Openbaar + </string> + <string name="ClassifiedClicksTxt"> + Klikken: [TELEPORT] teleport, [MAP] map, [PROFILE] profiel + </string> + <string name="ClassifiedUpdateAfterPublish"> + (zal bijwerken na publiceren) + </string> + <string name="MultiPreviewTitle"> + Preview + </string> + <string name="MultiPropertiesTitle"> + Eigenschappen + </string> + <string name="InvOfferAnObjectNamed"> + Een object genaamd + </string> + <string name="InvOfferOwnedByGroup"> + Eigendom van groep + </string> + <string name="InvOfferOwnedByUnknownGroup"> + Eigendom van een onbekende groep + </string> + <string name="InvOfferOwnedBy"> + Eigendom van + </string> + <string name="InvOfferOwnedByUnknownUser"> + Eigendom van onbekende gebruiker + </string> + <string name="InvOfferGaveYou"> + gaf je + </string> + <string name="InvOfferYouDecline"> + You decline + </string> + <string name="InvOfferFrom"> + van + </string> + <string name="GroupMoneyTotal"> + Totaal + </string> + <string name="GroupMoneyBought"> + kocht + </string> + <string name="GroupMoneyPaidYou"> + betaald u + </string> + <string name="GroupMoneyPaidInto"> + gestort + </string> + <string name="GroupMoneyBoughtPassTo"> + bought pass to + </string> + <string name="GroupMoneyPaidFeeForEvent"> + betaalde vergoeding voor evenement + </string> + <string name="GroupMoneyPaidPrizeForEvent"> + betaalde prijs voor evenement + </string> + <string name="GroupMoneyBalance"> + Banksaldo + </string> + <string name="GroupMoneyCredits"> + Credits + </string> + <string name="GroupMoneyDebits"> + Debiteert + </string> + <string name="ViewerObjectContents"> + Inhoud + </string> + <string name="AcquiredItems"> + Verworven objecten + </string> + <string name="Cancel"> + Annuleren + </string> + <string name="UploadingCosts"> + Uploading [%s] kosten + </string> + <string name="UnknownFileExtension"> + Onbekende extensie [.%s] +Verwacht .wav, .tga, .bmp, .jpg, .jpeg, or .bvh + </string> + <string name="AddLandmarkNavBarMenu"> + Voeg Landmark toe... + </string> + <string name="EditLandmarkNavBarMenu"> + Bewerk Landmark... + </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> + <string name="accel-win-alt"> + Alt+ + </string> + <string name="accel-win-shift"> + Shift+ + </string> + <string name="FileSaved"> + Bestand Opgeslagen + </string> + <string name="Receiving"> + Ontvangen + </string> + <string name="AM"> + AM + </string> + <string name="PM"> + PM + </string> + <string name="PST"> + PST + </string> + <string name="PDT"> + PDT + </string> + <string name="Forward"> + Vooruit + </string> + <string name="Left"> + Links + </string> + <string name="Right"> + Rechts + </string> + <string name="Back"> + Achteruit + </string> + <string name="North"> + Noord + </string> + <string name="South"> + Zuid + </string> + <string name="West"> + West + </string> + <string name="East"> + Oost + </string> + <string name="Up"> + Omhoog + </string> + <string name="Down"> + Omlaag + </string> + <string name="Any Category"> + Elke Categorie + </string> + <string name="Shopping"> + Boodschappen + </string> + <string name="Land Rental"> + Land Verhuur + </string> + <string name="Property Rental"> + Verhuur van onroerend goed + </string> + <string name="Special Attraction"> + Speciale Attractie + </string> + <string name="New Products"> + Nieuwe Producten + </string> + <string name="Employment"> + Employment + </string> + <string name="Wanted"> + Gezocht + </string> + <string name="Service"> + Service + </string> + <string name="Personal"> + Personal + </string> + <string name="None"> + Geen + </string> + <string name="Linden Location"> + Linden locatie + </string> + <string name="Adult"> + Adult + </string> + <string name="Arts&Culture"> + Kunst & Cultuur + </string> + <string name="Business"> + Zakelijk + </string> + <string name="Educational"> + Educatief + </string> + <string name="Gaming"> + Spelen + </string> + <string name="Hangout"> + Ontmoetingsplaats + </string> + <string name="Newcomer Friendly"> + Nieuwkomervriendelijk + </string> + <string name="Parks&Nature"> + Parken & natuur + </string> + <string name="Residential"> + Woongebied + </string> + <string name="Stage"> + Stage + </string> + <string name="Other"> + Anders + </string> + <string name="Any"> + Any + </string> + <string name="You"> + Jij + </string> + <string name="Multiple Media"> + Meerdere Media + </string> + <string name="Play Media"> + Play/Pause Media + </string> + <string name="MBCmdLineError"> + An error was found parsing the command line. +Please see: http://wiki.secondlife.com/wiki/Client_parameters +Error: + </string> + <string name="MBCmdLineUsg"> + [APP_NAME] Command line usage: + </string> + <string name="MBUnableToAccessFile"> + [APP_NAME] is unable to access a file that it needs. + +This can be because you somehow have multiple copies running, or your system incorrectly thinks a file is open. +If this message persists, restart your computer and try again. +If it continues to persist, you may need to completely uninstall [APP_NAME] and reinstall it. + </string> + <string name="MBFatalError"> + Fatal Error + </string> + <string name="MBRequiresAltiVec"> + [APP_NAME] requires a processor with AltiVec (G4 or later). + </string> + <string name="MBAlreadyRunning"> + [APP_NAME] is already running. +Check your task bar for a minimized copy of the program. +If this message persists, restart your computer. + </string> + <string name="MBFrozenCrashed"> + [APP_NAME] appears to have frozen or crashed on the previous run. +Would you like to send a crash report? + </string> + <string name="MBAlert"> + Alert + </string> + <string name="MBNoDirectX"> + [APP_NAME] is unable to detect DirectX 9.0b or greater. +[APP_NAME] uses DirectX to detect hardware and/or outdated drivers that can cause stability problems, poor performance and crashes. While you can run [APP_NAME] without it, we highly recommend running with DirectX 9.0b. + +Do you wish to continue? + </string> + <string name="MBWarning"> + Warning + </string> + <string name="MBNoAutoUpdate"> + Automatic updating is not yet implemented for Linux. +Please download the latest version from www.secondlife.com. + </string> + <string name="MBRegClassFailed"> + RegisterClass failed + </string> + <string name="MBError"> + Error + </string> + <string name="MBFullScreenErr"> + Unable to run fullscreen at [WIDTH] x [HEIGHT]. +Running in window. + </string> + <string name="MBDestroyWinFailed"> + Shutdown Error while destroying window (DestroyWindow() failed) + </string> + <string name="MBShutdownErr"> + Shutdown Error + </string> + <string name="MBDevContextErr"> + Can't make GL device context + </string> + <string name="MBPixelFmtErr"> + Can't find suitable pixel format + </string> + <string name="MBPixelFmtDescErr"> + Can't get pixel format description + </string> + <string name="MBTrueColorWindow"> + [APP_NAME] requires True Color (32-bit) to run. +Please go to your computer's display settings and set the color mode to 32-bit. + </string> + <string name="MBAlpha"> + [APP_NAME] is unable to run because it can't get an 8 bit alpha channel. Usually this is due to video card driver issues. +Please make sure you have the latest video card drivers installed. +Also be sure your monitor is set to True Color (32-bit) in Control Panels > Display > Settings. +If you continue to receive this message, contact the [SUPPORT_SITE]. + </string> + <string name="MBPixelFmtSetErr"> + Can't set pixel format + </string> + <string name="MBGLContextErr"> + Can't create GL rendering context + </string> + <string name="MBGLContextActErr"> + Can't activate GL rendering context + </string> + <string name="MBVideoDrvErr"> + [APP_NAME] is unable to run because your video card drivers did not install properly, are out of date, or are for unsupported hardware. Please make sure you have the latest video card drivers and even if you do have the latest, try reinstalling them. + +If you continue to receive this message, contact the [SUPPORT_SITE]. + </string> + <string name="5 O'Clock Shadow"> + Stoppels + </string> + <string name="All White"> + Alles Wit + </string> + <string name="Anime Eyes"> + Ogen Animeren + </string> + <string name="Arced"> + Gebogen + </string> + <string name="Arm Length"> + Arm Lengte + </string> + <string name="Attached"> + Bijgevoegt + </string> + <string name="Attached Earlobes"> + Bijgevoegde Oorlellen + </string> + <string name="Back Bangs"> + Achterkant Pony + </string> + <string name="Back Bangs Down"> + Achterkant Pony Neer + </string> + <string name="Back Bangs Up"> + Achterkant Pony Omhoog + </string> + <string name="Back Fringe"> + Achterkant Franje + </string> + <string name="Back Hair"> + Achterkant Haar + </string> + <string name="Back Hair Down"> + Achterkant Haar Neer + </string> + <string name="Back Hair Up"> + Achterkant Haar Omhoog + </string> + <string name="Baggy"> + Oogwallen + </string> + <string name="Bangs"> + Pony + </string> + <string name="Bangs Down"> + Pony Neer + </string> + <string name="Bangs Up"> + Pony Omhoog + </string> + <string name="Beady Eyes"> + Kraaloogjes + </string> + <string name="Belly Size"> + Buik Grootte + </string> + <string name="Big"> + Groot + </string> + <string name="Big Butt"> + Grote Kont + </string> + <string name="Big Eyeball"> + Grote Oogbol + </string> + <string name="Big Hair Back"> + Haar Volume Achter + </string> + <string name="Big Hair Front"> + Haar Volume Voor + </string> + <string name="Big Hair Top"> + Haar Volume Boven + </string> + <string name="Big Head"> + Groot Hoofd + </string> + <string name="Big Pectorals"> + Groote Borstspieren + </string> + <string name="Big Spikes"> + Grote Stekels + </string> + <string name="Black"> + Zwart + </string> + <string name="Blonde"> + Blond + </string> + <string name="Blonde Hair"> + Blond Haar + </string> + <string name="Blush"> + Blozen + </string> + <string name="Blush Color"> + Bloos Kleur + </string> + <string name="Blush Opacity"> + Bloos Opaciteit + </string> + <string name="Body Definition"> + Lichaam Definitie + </string> + <string name="Body Fat"> + Lichaam vet + </string> + <string name="Body Freckles"> + Lichaam Sproeten + </string> + <string name="Body Thick"> + Lichaam Dik + </string> + <string name="Body Thickness"> + Lichaam Dikte + </string> + <string name="Body Thin"> + Lichaam Dun + </string> + <string name="Bow Legged"> + Boog Benen + </string> + <string name="Breast Buoyancy"> + Borst Drijfvermogen + </string> + <string name="Breast Cleavage"> + Borst Splijting + </string> + <string name="Breast Size"> + Borst Grootte + </string> + <string name="Bridge Width"> + Brug Breedte + </string> + <string name="Broad"> + Breed + </string> + <string name="Brow Size"> + Wenkbrauw Grootte + </string> + <string name="Bug Eyes"> + Insect Ogen + </string> + <string name="Bugged Eyes"> + Insect Ogen + </string> + <string name="Bulbous"> + Bolle + </string> + <string name="Bulbous Nose"> + Bolle Neus + </string> + <string name="Bushy Eyebrows"> + Borstelige Wenkbrauwen + </string> + <string name="Bushy Hair"> + Borstelig Haar + </string> + <string name="Butt Size"> + Kont Grootte + </string> + <string name="bustle skirt"> + Bustle Skirt + </string> + <string name="no bustle"> + No Bustle + </string> + <string name="more bustle"> + More Bustle + </string> + <string name="Chaplin"> + Smalle Snor + </string> + <string name="Cheek Bones"> + Jukbeenderen + </string> + <string name="Chest Size"> + Borst Grootte + </string> + <string name="Chin Angle"> + Kin Hoek + </string> + <string name="Chin Cleft"> + Gespleten Kin + </string> + <string name="Chin Curtains"> + Kin Gordijnen + </string> + <string name="Chin Depth"> + Kin Diepte + </string> + <string name="Chin Heavy"> + Kin Zware + </string> + <string name="Chin In"> + Kin In + </string> + <string name="Chin Out"> + Kin uit + </string> + <string name="Chin-Neck"> + Kin-Nek + </string> + <string name="Clear"> + Opschonen + </string> + <string name="Cleft"> + Gespleten + </string> + <string name="Close Set Eyes"> + Close Set Eyes + </string> + <string name="Closed"> + Gesloten + </string> + <string name="Closed Back"> + Gesloten Achterkant + </string> + <string name="Closed Front"> + Gesloten Voorkant + </string> + <string name="Closed Left"> + Gesloten Links + </string> + <string name="Closed Right"> + Gesloten Rechts + </string> + <string name="Coin Purse"> + Verminder Grootte + </string> + <string name="Collar Back"> + Kraag Achterkant + </string> + <string name="Collar Front"> + Kraag Voorkant + </string> + <string name="Corner Down"> + Hoek Omlaag + </string> + <string name="Corner Normal"> + Hoek Normaal + </string> + <string name="Corner Up"> + Hoek Omhoog + </string> + <string name="Creased"> + Gevouwen + </string> + <string name="Crooked Nose"> + Kromte Neus + </string> + <string name="Cropped Hair"> + Bijgesneden Haar + </string> + <string name="Cuff Flare"> + Cuff Flare + </string> + <string name="Dark"> + Donker + </string> + <string name="Dark Green"> + Donker Groen + </string> + <string name="Darker"> + Donkerder + </string> + <string name="Deep"> + Diep + </string> + <string name="Default Heels"> + Standaard Hielen + </string> + <string name="Default Toe"> + Standaard Teen + </string> + <string name="Dense"> + Dicht + </string> + <string name="Dense hair"> + Dicht haar + </string> + <string name="Double Chin"> + Dubbele Kin + </string> + <string name="Downturned"> + Downturned + </string> + <string name="Duffle Bag"> + Vergroot Grootte + </string> + <string name="Ear Angle"> + Oor Hoek + </string> + <string name="Ear Size"> + Oor Grootte + </string> + <string name="Ear Tips"> + Oor Punten + </string> + <string name="Egg Head"> + Ei Hoofd + </string> + <string name="Eye Bags"> + Oog Zakken + </string> + <string name="Eye Color"> + Oog Kleur + </string> + <string name="Eye Depth"> + Oog Diepte + </string> + <string name="Eye Lightness"> + Oog Lichtheid + </string> + <string name="Eye Opening"> + Oog Opening + </string> + <string name="Eye Pop"> + Asymmetrisch + </string> + <string name="Eye Size"> + Oog Grootte + </string> + <string name="Eye Spacing"> + Oog Afstand + </string> + <string name="Eyeball Size"> + Oogbal Grootte + </string> + <string name="Eyebrow Arc"> + Wenkbrauw Boog + </string> + <string name="Eyebrow Density"> + Wenkbrauw Dichtheid + </string> + <string name="Eyebrow Height"> + Wenkbrauw Hoogte + </string> + <string name="Eyebrow Points"> + Wenkbrauw Punten + </string> + <string name="Eyebrow Size"> + Eyebrow Grootte + </string> + <string name="Eyelash Length"> + Eyelash Lengte + </string> + <string name="Eyeliner"> + Eyeliner + </string> + <string name="Eyeliner Color"> + Eyeliner Kleur + </string> + <string name="Eyes Back"> + Ogen Achteruit + </string> + <string name="Eyes Bugged"> + Insect Ogen + </string> + <string name="Eyes Forward"> + Ogen Vooruit + </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"> + Eyes Spread + </string> + <string name="Eyes Sunken"> + Ingevallen Ogen + </string> + <string name="Eyes Together"> + Ogen Bij Elkaar + </string> + <string name="Face Shear"> + Gezicht Gelijkheid + </string> + <string name="Facial Definition"> + Gezichts Definitie + </string> + <string name="Far Set Eyes"> + Ogen Uit Elkaar + </string> + <string name="Fat"> + Dik + </string> + <string name="Fat Head"> + Dik Hoofd + </string> + <string name="Fat Lips"> + Dikke Lippen + </string> + <string name="Fat Lower"> + Fat Lower + </string> + <string name="Fat Lower Lip"> + Fat Lower Lip + </string> + <string name="Fat Torso"> + Fat Torso + </string> + <string name="Fat Upper"> + Fat Upper + </string> + <string name="Fat Upper Lip"> + Dikke Boven Lip + </string> + <string name="Female"> + Vrouw + </string> + <string name="Fingerless"> + Vingerloos + </string> + <string name="Fingers"> + Vingers + </string> + <string name="Flared Cuffs"> + Verbrede Vorm + </string> + <string name="Flat"> + Plat + </string> + <string name="Flat Butt"> + Platte Kont + </string> + <string name="Flat Head"> + Plat Hoofd + </string> + <string name="Flat Toe"> + Platte Teen + </string> + <string name="Foot Size"> + Voet Grootte + </string> + <string name="Forehead Angle"> + Voorhoofd Hoek + </string> + <string name="Forehead Heavy"> + Zwaar Voorhoofd + </string> + <string name="Freckles"> + Sproeten + </string> + <string name="Front Bangs Down"> + Voorkant Pony Omlaag + </string> + <string name="Front Bangs Up"> + Voorkant Pony Omhoog + </string> + <string name="Front Fringe"> + Voorste Rand + </string> + <string name="Front Hair"> + Gezichtshaar + </string> + <string name="Front Hair Down"> + Gezichtshaar Omlaag + </string> + <string name="Front Hair Up"> + Gezichtshaar Omhoog + </string> + <string name="Full Back"> + Volle Achterkant + </string> + <string name="Full Eyeliner"> + Volle Eyeliner + </string> + <string name="Full Front"> + Volle Voorkant + </string> + <string name="Full Hair Sides"> + Full Hair Sides + </string> + <string name="Full Sides"> + Volle Zijkanten + </string> + <string name="Glossy"> + Glanzend + </string> + <string name="Glove Fingers"> + Vinger Handschoenen + </string> + <string name="Glove Length"> + Handschoen Lengte + </string> + <string name="Hair"> + Haar + </string> + <string name="Hair Back"> + Haar: Zwart + </string> + <string name="Hair Front"> + Haar: Voorkant + </string> + <string name="Hair Sides"> + Haar: Zijkant + </string> + <string name="Hair Sweep"> + Hair Sweep + </string> + <string name="Hair Thickess"> + Haar Dikheid + </string> + <string name="Hair Thickness"> + Hair Dikheid + </string> + <string name="Hair Tilt"> + Hair Tilt + </string> + <string name="Hair Tilted Left"> + Hair Tilted Left + </string> + <string name="Hair Tilted Right"> + Hair Tilted Right + </string> + <string name="Hair Volume"> + Haar: Volume + </string> + <string name="Hand Size"> + Hand Grootte + </string> + <string name="Handlebars"> + Handlebars + </string> + <string name="Head Length"> + Hoofd Lengte + </string> + <string name="Head Shape"> + Hoofd Vorm + </string> + <string name="Head Size"> + Hooft Grootte + </string> + <string name="Head Stretch"> + Hoofd Uitrekken + </string> + <string name="Heel Height"> + Hiel Hoogte + </string> + <string name="Heel Shape"> + Hiel Vorm + </string> + <string name="Height"> + Hoogte + </string> + <string name="High"> + Hoog + </string> + <string name="High Heels"> + Hoge Hielen + </string> + <string name="High Jaw"> + Hoge Kaak + </string> + <string name="High Platforms"> + High Platforms + </string> + <string name="High and Tight"> + Hoog en Strak + </string> + <string name="Higher"> + Hoger + </string> + <string name="Hip Length"> + Heup Lengte + </string> + <string name="Hip Width"> + Heup Breedte + </string> + <string name="In"> + Naar Binnen + </string> + <string name="In Shdw Color"> + Binnenste Schaduw Kleur + </string> + <string name="In Shdw Opacity"> + Binnenste Schaduw Opaciteit + </string> + <string name="Inner Eye Corner"> + Binnenste Oog Hoek + </string> + <string name="Inner Eye Shadow"> + Binnenste Oog Schaduw + </string> + <string name="Inner Shadow"> + Binnenste Schaduw + </string> + <string name="Jacket Length"> + Jas Lengte + </string> + <string name="Jacket Wrinkles"> + Jas Rimpels + </string> + <string name="Jaw Angle"> + Kaak Hoek + </string> + <string name="Jaw Jut"> + Jaw Jut + </string> + <string name="Jaw Shape"> + Kaak Vorm + </string> + <string name="Join"> + Samenvoegen + </string> + <string name="Jowls"> + Kaken + </string> + <string name="Knee Angle"> + Knie Hoek + </string> + <string name="Knock Kneed"> + Knieën Naar binnen + </string> + <string name="Large"> + Fors + </string> + <string name="Large Hands"> + Grote Handen + </string> + <string name="Left Part"> + Linker Deel + </string> + <string name="Leg Length"> + Been Lengte + </string> + <string name="Leg Muscles"> + Been Spieren + </string> + <string name="Less"> + Minder + </string> + <string name="Less Body Fat"> + Minder Lichaams Vet + </string> + <string name="Less Curtains"> + Less Curtains + </string> + <string name="Less Freckles"> + Minder Sproeten + </string> + <string name="Less Full"> + Minder Vol + </string> + <string name="Less Gravity"> + Minder Zwaartekracht + </string> + <string name="Less Love"> + Less Love + </string> + <string name="Less Muscles"> + Minder Spieren + </string> + <string name="Less Muscular"> + Minder Spieren + </string> + <string name="Less Rosy"> + Minder Rooskleurig + </string> + <string name="Less Round"> + Minder Rond + </string> + <string name="Less Saddle"> + Minder Heupen + </string> + <string name="Less Square"> + Minder Vierkant + </string> + <string name="Less Volume"> + Minder Volume + </string> + <string name="Less soul"> + Minder Ziel + </string> + <string name="Lighter"> + Lichter + </string> + <string name="Lip Cleft"> + Gespleten Lip + </string> + <string name="Lip Cleft Depth"> + Gespleten Lip Diepte + </string> + <string name="Lip Fullness"> + Lip Volheid + </string> + <string name="Lip Pinkness"> + Rozeheid Lippen + </string> + <string name="Lip Ratio"> + Lip Ratio + </string> + <string name="Lip Thickness"> + Lip Dikheid + </string> + <string name="Lip Width"> + Lip Breedte + </string> + <string name="Lipgloss"> + Lipgloss + </string> + <string name="Lipstick"> + Lipstick + </string> + <string name="Lipstick Color"> + Lipstick Kleur + </string> + <string name="Long"> + Lang + </string> + <string name="Long Head"> + Lang Hoofd + </string> + <string name="Long Hips"> + Lange Heupen + </string> + <string name="Long Legs"> + Lange Benen + </string> + <string name="Long Neck"> + Lange Nek + </string> + <string name="Long Pigtails"> + Long Pigtails + </string> + <string name="Long Ponytail"> + Lange Paardenstaart + </string> + <string name="Long Torso"> + Lang Torso + </string> + <string name="Long arms"> + Lange Armen + </string> + <string name="Longcuffs"> + Longcuffs + </string> + <string name="Loose Pants"> + Losse Broek + </string> + <string name="Loose Shirt"> + Los Shirt + </string> + <string name="Loose Sleeves"> + Losse Mouwen + </string> + <string name="Love Handles"> + Love Handles + </string> + <string name="Low"> + Laag + </string> + <string name="Low Heels"> + Lage Hielen + </string> + <string name="Low Jaw"> + Lage Kaak + </string> + <string name="Low Platforms"> + Lage Platforms + </string> + <string name="Low and Loose"> + Laag en Los + </string> + <string name="Lower"> + Lager + </string> + <string name="Lower Bridge"> + Lagere Brug + </string> + <string name="Lower Cheeks"> + Lagere Wangen + </string> + <string name="Male"> + Man + </string> + <string name="Middle Part"> + Middelste Deel + </string> + <string name="More"> + Meer + </string> + <string name="More Blush"> + Meer Blozen + </string> + <string name="More Body Fat"> + Meer Lichaams Vet + </string> + <string name="More Curtains"> + More Curtains + </string> + <string name="More Eyeshadow"> + Meer Oogshadow + </string> + <string name="More Freckles"> + Meer Sproeten + </string> + <string name="More Full"> + Meer Vol + </string> + <string name="More Gravity"> + Meer Zwaartekracht + </string> + <string name="More Lipstick"> + Meer Lippenstift + </string> + <string name="More Love"> + Meer Lovehandels + </string> + <string name="More Lower Lip"> + Meer Onder Lip + </string> + <string name="More Muscles"> + Meer Spieren + </string> + <string name="More Muscular"> + Meer Spieren + </string> + <string name="More Rosy"> + More Rosy + </string> + <string name="More Round"> + Meer Rond + </string> + <string name="More Saddle"> + Meer Heupen + </string> + <string name="More Sloped"> + Meer Hellend + </string> + <string name="More Square"> + Meer Vierkant + </string> + <string name="More Upper Lip"> + Meer Boven Lip + </string> + <string name="More Vertical"> + Meer Verticaal + </string> + <string name="More Volume"> + Meer Volume + </string> + <string name="More soul"> + Meer ziel + </string> + <string name="Moustache"> + Snor + </string> + <string name="Mouth Corner"> + Mond Hoek + </string> + <string name="Mouth Position"> + Mond Positie + </string> + <string name="Mowhawk"> + Hanekam + </string> + <string name="Muscular"> + Gespiert + </string> + <string name="Mutton Chops"> + Mutton Chops + </string> + <string name="Nail Polish"> + Nagel Lak + </string> + <string name="Nail Polish Color"> + Nagel Lak Kleur + </string> + <string name="Narrow"> + Smal + </string> + <string name="Narrow Back"> + Smalle Achterkant + </string> + <string name="Narrow Front"> + Smalle Voorkant + </string> + <string name="Narrow Lips"> + Smalle Lippen + </string> + <string name="Natural"> + Natural + </string> + <string name="Neck Length"> + Nek Lengte + </string> + <string name="Neck Thickness"> + Nek Dikheid + </string> + <string name="No Blush"> + Geen Bloos + </string> + <string name="No Eyeliner"> + Geen Eyeliner + </string> + <string name="No Eyeshadow"> + Geen Oogschaduw + </string> + <string name="No Heels"> + Geen Hakken + </string> + <string name="No Lipgloss"> + Geen Lipgloss + </string> + <string name="No Lipstick"> + Geen Lippenstift + </string> + <string name="No Part"> + Geen Deel + </string> + <string name="No Polish"> + Geen Glans + </string> + <string name="No Red"> + Geen Rood + </string> + <string name="No Spikes"> + Geen Stekels + </string> + <string name="No White"> + Geen Wit + </string> + <string name="No Wrinkles"> + Geen Rimpels + </string> + <string name="Normal Lower"> + Normaal Onder + </string> + <string name="Normal Upper"> + Normaal Boven + </string> + <string name="Nose Left"> + Neus Links + </string> + <string name="Nose Right"> + Neus Rechts + </string> + <string name="Nose Size"> + Neus Grootte + </string> + <string name="Nose Thickness"> + Neus Dickheid + </string> + <string name="Nose Tip Angle"> + Neus Top Hoek + </string> + <string name="Nose Tip Shape"> + Neus Top Vorm + </string> + <string name="Nose Width"> + Neus Breedte + </string> + <string name="Nostril Division"> + Nostril Division + </string> + <string name="Nostril Width"> + Neusgat Breedte + </string> + <string name="Old"> + Oud + </string> + <string name="Opaque"> + Ondoorzichtig + </string> + <string name="Open"> + Open + </string> + <string name="Open Back"> + Open Achterkant + </string> + <string name="Open Front"> + Open Voorkant + </string> + <string name="Open Left"> + Open Links + </string> + <string name="Open Right"> + Open Rechts + </string> + <string name="Orange"> + Oranje + </string> + <string name="Out"> + Uit + </string> + <string name="Out Shdw Color"> + Buitenste Schaduw Kleur + </string> + <string name="Out Shdw Opacity"> + Buitenste Schaduw Opaciteit + </string> + <string name="Outer Eye Corner"> + Buitenste Oog Hoek + </string> + <string name="Outer Eye Shadow"> + Buitenste Oog Schaduw + </string> + <string name="Outer Shadow"> + Buitenste Schaduw + </string> + <string name="Overbite"> + Overbeet + </string> + <string name="Package"> + Genitaliën + </string> + <string name="Painted Nails"> + Gelakte Nagels + </string> + <string name="Pale"> + Dof + </string> + <string name="Pants Crotch"> + Broek Kruis + </string> + <string name="Pants Fit"> + Broek Passend + </string> + <string name="Pants Length"> + Broek Lengte + </string> + <string name="Pants Waist"> + Broek Teille + </string> + <string name="Pants Wrinkles"> + Broek Rimpels + </string> + <string name="Part"> + Deel + </string> + <string name="Part Bangs"> + Part Bangs + </string> + <string name="Pectorals"> + Borstspieren + </string> + <string name="Pigment"> + Pigment + </string> + <string name="Pigtails"> + Pigtails + </string> + <string name="Pink"> + Roze + </string> + <string name="Pinker"> + Rozer + </string> + <string name="Platform Height"> + Platform Hoogte + </string> + <string name="Platform Width"> + Platform Breedte + </string> + <string name="Pointy"> + Puntig + </string> + <string name="Pointy Heels"> + Puntige Hielen + </string> + <string name="Pointy Toe"> + Puntige Tenen + </string> + <string name="Ponytail"> + Paardenstaard + </string> + <string name="Poofy Skirt"> + Poofy Skirt + </string> + <string name="Pop Left Eye"> + Asymmetrisch Links + </string> + <string name="Pop Right Eye"> + Asymmetrisch Rechts + </string> + <string name="Puffy"> + Opgezwollen + </string> + <string name="Puffy Eyelids"> + Opgezwollen Oogleden + </string> + <string name="Rainbow Color"> + Regenboog Kleur + </string> + <string name="Red Hair"> + Rood Haar + </string> + <string name="Red Skin"> + Rode Huid + </string> + <string name="Regular"> + Normaal + </string> + <string name="Regular Muscles"> + Normale Spieren + </string> + <string name="Right Part"> + Rechter Deel + </string> + <string name="Rosy Complexion"> + Rosy Complexion + </string> + <string name="Round"> + Rond + </string> + <string name="Round Forehead"> + Rond Voorhoofd + </string> + <string name="Ruddiness"> + Rossige kleur + </string> + <string name="Ruddy"> + Rossig + </string> + <string name="Rumpled Hair"> + Rumpled Hair + </string> + <string name="Saddle Bags"> + Saddle Bags + </string> + <string name="Saddlebags"> + Saddlebags + </string> + <string name="Scrawny"> + Magere + </string> + <string name="Scrawny Leg"> + Mager Been + </string> + <string name="Separate"> + Scheiden + </string> + <string name="Shading"> + Shading + </string> + <string name="Shadow hair"> + Schaduw Haar + </string> + <string name="Shallow"> + Ondiep + </string> + <string name="Shear Back"> + Shear Back + </string> + <string name="Shear Face"> + Shear Face + </string> + <string name="Shear Front"> + Shear Front + </string> + <string name="Shear Left"> + Shear Left + </string> + <string name="Shear Left Up"> + Shear Left Up + </string> + <string name="Shear Right"> + Shear Right + </string> + <string name="Shear Right Up"> + Shear Right Up + </string> + <string name="Sheared Back"> + Sheared Back + </string> + <string name="Sheared Front"> + Sheared Front + </string> + <string name="Shift Left"> + Verplaats Links + </string> + <string name="Shift Mouth"> + Verplaats Mond + </string> + <string name="Shift Right"> + Verplaats Rechts + </string> + <string name="Shirt Bottom"> + Hemd Onderkant + </string> + <string name="Shirt Fit"> + Hemd Passend + </string> + <string name="Shirt Wrinkles"> + Hemd Rimpels + </string> + <string name="Shoe Height"> + Schoen Hoogte + </string> + <string name="Short"> + Kort + </string> + <string name="Short Arms"> + Korte Armen + </string> + <string name="Short Legs"> + Korte Benen + </string> + <string name="Short Neck"> + Korte Nek + </string> + <string name="Short Pigtails"> + Short Pigtails + </string> + <string name="Short Ponytail"> + Korte Paardenstaart + </string> + <string name="Short Sideburns"> + Korte Bakkebaarden + </string> + <string name="Short Torso"> + Korte Torso + </string> + <string name="Short hips"> + Korte Heupen + </string> + <string name="Shoulders"> + Shouders + </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"> + Side Fringe + </string> + <string name="Sideburns"> + Bakkebaarden + </string> + <string name="Sides Hair"> + Sides Hair + </string> + <string name="Sides Hair Down"> + Sides Hair Down + </string> + <string name="Sides Hair Up"> + Sides Hair Up + </string> + <string name="Skinny"> + Broodmager + </string> + <string name="Skinny Neck"> + Smalle Nek + </string> + <string name="Skirt Fit"> + Skirt Fit + </string> + <string name="Skirt Length"> + Rok Lengte + </string> + <string name="Slanted Forehead"> + Schuin voorhoofd + </string> + <string name="Sleeve Length"> + Mouw Lengte + </string> + <string name="Sleeve Looseness"> + Mouw Losheid + </string> + <string name="Slit Back"> + Spleet: Achter + </string> + <string name="Slit Front"> + Spleet: Voor + </string> + <string name="Slit Left"> + Spleet: Links + </string> + <string name="Slit Right"> + Spleet: Rechts + </string> + <string name="Small"> + Klein + </string> + <string name="Small Hands"> + Kleine Handen + </string> + <string name="Small Head"> + Klein Hoofd + </string> + <string name="Smooth"> + Glad + </string> + <string name="Smooth Hair"> + Glad Haar + </string> + <string name="Socks Length"> + Sok Lengte + </string> + <string name="Some"> + enkele + </string> + <string name="Soulpatch"> + Soulpatch + </string> + <string name="Sparse"> + Schaars + </string> + <string name="Spiked Hair"> + Puntig Haar + </string> + <string name="Square"> + Vierkant + </string> + <string name="Square Toe"> + Vierkante Teen + </string> + <string name="Squash Head"> + Squash Head + </string> + <string name="Squash/Stretch Head"> + Squash/Stretch Head + </string> + <string name="Stretch Head"> + Uitgerekt Hoofd + </string> + <string name="Sunken"> + Verzonken + </string> + <string name="Sunken Chest"> + Verzonken Borstkas + </string> + <string name="Sunken Eyes"> + Verzonken Ogen + </string> + <string name="Sweep Back"> + Sweep Back + </string> + <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"> + Lang + </string> + <string name="Taper Back"> + Spits Achter + </string> + <string name="Taper Front"> + Spits Voor + </string> + <string name="Thick Heels"> + Dikke Hielen + </string> + <string name="Thick Neck"> + Dikke Nek + </string> + <string name="Thick Toe"> + Dikke Teen + </string> + <string name="Thickness"> + Dikheid + </string> + <string name="Thin"> + Dun + </string> + <string name="Thin Eyebrows"> + Dunne Wenkbrouwen + </string> + <string name="Thin Lips"> + Dunne Lippen + </string> + <string name="Thin Nose"> + Dunne Neus + </string> + <string name="Tight Chin"> + Strakke Kin + </string> + <string name="Tight Cuffs"> + Strakke Manchetten + </string> + <string name="Tight Pants"> + Strakke Broek + </string> + <string name="Tight Shirt"> + Strak Hemd + </string> + <string name="Tight Skirt"> + Strakke Rok + </string> + <string name="Tight Sleeves"> + Strakke Mouwen + </string> + <string name="Tilt Left"> + Tilt Left + </string> + <string name="Tilt Right"> + Tilt Right + </string> + <string name="Toe Shape"> + Teen Vorm + </string> + <string name="Toe Thickness"> + Teen Dikheid + </string> + <string name="Torso Length"> + Borstkas Lengte + </string> + <string name="Torso Muscles"> + Borstkas Spieren + </string> + <string name="Torso Scrawny"> + Magere Borstkas + </string> + <string name="Unattached"> + Niet Verbonden + </string> + <string name="Uncreased"> + Uncreased + </string> + <string name="Underbite"> + onderbeet + </string> + <string name="Unnatural"> + Onnatuurlijk + </string> + <string name="Upper Bridge"> + Boven Brug + </string> + <string name="Upper Cheeks"> + Bovenste Wangen + </string> + <string name="Upper Chin Cleft"> + Bovenste Kin Gespleten + </string> + <string name="Upper Eyelid Fold"> + Bovenste Ooglid Gevouwen + </string> + <string name="Upturned"> + Omgekeerde + </string> + <string name="Very Red"> + Erg Rood + </string> + <string name="Waist Height"> + Taille Hoogte + </string> + <string name="Well-Fed"> + Goed Gevoed + </string> + <string name="White Hair"> + Wit Haar + </string> + <string name="Wide"> + Breed + </string> + <string name="Wide Back"> + Breede Achterkant + </string> + <string name="Wide Front"> + Breed Voorkant + </string> + <string name="Wide Lips"> + Breed Lippen + </string> + <string name="Wild"> + Wild + </string> + <string name="Wrinkles"> + Rimpels + </string> + <string name="LocationCtrlAddLandmarkTooltip"> + Add to My Landmarks + </string> + <string name="LocationCtrlEditLandmarkTooltip"> + Edit My Landmark + </string> + <string name="LocationCtrlInfoBtnTooltip"> + See more info about the current location + </string> + <string name="LocationCtrlComboBtnTooltip"> + My location history + </string> + <string name="UpdaterWindowTitle"> + [APP_NAME] Update + </string> + <string name="UpdaterNowUpdating"> + Now updating [APP_NAME]... + </string> + <string name="UpdaterNowInstalling"> + Installing [APP_NAME]... + </string> + <string name="UpdaterUpdatingDescriptive"> + Your [APP_NAME] Viewer is being updated to the latest release. This may take some time, so please be patient. + </string> + <string name="UpdaterProgressBarTextWithEllipses"> + Downloading update... + </string> + <string name="UpdaterProgressBarText"> + Downloading update + </string> + <string name="UpdaterFailDownloadTitle"> + Failed to download update + </string> + <string name="UpdaterFailUpdateDescriptive"> + An error occurred while updating [APP_NAME]. Please download the latest version from www.secondlife.com. + </string> + <string name="UpdaterFailInstallTitle"> + Failed to install update + </string> + <string name="UpdaterFailStartTitle"> + Failed to start viewer + </string> + <string name="IM_logging_string"> + -- Instant message logging enabled -- + </string> + <string name="IM_typing_start_string"> + [NAME] is typing... + </string> + <string name="Unnamed"> + (Unnamed) + </string> + <string name="IM_moderated_chat_label"> + (Moderated: Voices off by default) + </string> + <string name="IM_unavailable_text_label"> + Text chat is not available for this call. + </string> + <string name="IM_muted_text_label"> + Your text chat has been disabled by a Group Moderator. + </string> + <string name="IM_default_text_label"> + Click here to instant message. + </string> + <string name="IM_to_label"> + To + </string> + <string name="IM_moderator_label"> + (Moderator) </string> - <string name="ScriptQuestionCautionChatGranted"> - '[OBJECTNAME]', een object van '[OWNERNAME]', gevestigd in [REGIONNAME] op [REGIONPOS], is toestemming verleend om te: [PERMISSIONS]. - </string> - <string name="ScriptQuestionCautionChatDenied"> - '[OBJECTNAME]', een object van '[OWNERNAME]', gevestigd in [REGIONNAME] op [REGIONPOS], is toestemming geweigerd om te: [PERMISSIONS]. - </string> - <string name="ScriptTakeMoney"> - Linden dollars (L$) van u wegnemen - </string> - <string name="ActOnControlInputs"> - Acteren op uw bedieningsinvoer - </string> - <string name="RemapControlInputs"> - Uw bedieningsinvoer herdefiniëren - </string> - <string name="AnimateYourAvatar"> - Animeer uw avatar - </string> - <string name="AttachToYourAvatar"> - Bevestig aan uw avatar - </string> - <string name="ReleaseOwnership"> - Eigendom vrijgeven en openbaar worden - </string> - <string name="LinkAndDelink"> - Koppelen met en ontkoppelen van andere objecten - </string> - <string name="AddAndRemoveJoints"> - Toevoegen en verwijderen koppelingen met andere objecten - </string> - <string name="ChangePermissions"> - Wijzig zijn permissies - </string> - <string name="TrackYourCamera"> - Volg uw camera - </string> - <string name="ControlYourCamera"> - Bedien uw camera - </string> - <string name="only_user_message"> U bent de enige gebruiker in deze sessie. </string> @@ -626,31 +3246,4 @@ <string name="close_on_no_ability"> U heeft niet langer de mogelijkheid om in deze chatsessie te zijn. </string> - <string name="AcctTypeResident"> - Inwoner - </string> - <string name="AcctTypeTrial"> - Proef - </string> - <string name="AcctTypeCharterMember"> - Charter lid - </string> - <string name="AcctTypeEmployee"> - Linden Lab werknemer - </string> - <string name="PaymentInfoUsed"> - Betalingsinformatie gebruikt - </string> - <string name="PaymentInfoOnFile"> - Betalingsinformatie aanwezig - </string> - <string name="NoPaymentInfoOnFile"> - Geen betalingsinfo aanwezig - </string> - <string name="AgeVerified"> - Leeftijd geverifieerd - </string> - <string name="NotAgeVerified"> - Leeftijd niet geverifieerd - </string> </strings> diff --git a/indra/newview/skins/default/xui/nl/teleport_strings.xml b/indra/newview/skins/default/xui/nl/teleport_strings.xml index ff43e0f32ff159fa24296d38ca3b3f639fc514b7..12a81447c0d81feffeefc4c1dab4aba54f53b0e9 100644 --- a/indra/newview/skins/default/xui/nl/teleport_strings.xml +++ b/indra/newview/skins/default/xui/nl/teleport_strings.xml @@ -2,12 +2,12 @@ <teleport_messages> <message_set name="errors"> <message name="invalid_tport"> - Er is een probleem opgetreden bij het verwerken van uw verzoek voor een teleport. U dient wellicht opnieuw in te loggen voor uw kunt teleporteren. Wanneer u deze boodschap blijft ontvangen, controleert u dan alstublieft de Tech Support FAQ op: -www.secondlife.com/support + Probleem ondervonden bij het verwerken van uw verzoek voor een teleport. Het kan nodig zijn om opnieuw in te loggen voordat u kunt teleporteren. +Als u dit bericht blijft krijgen, controleert u dan alstublieft [SUPPORT_SITE]. </message> <message name="invalid_region_handoff"> - Er is een probleem opgetreden bij het oversteken naar een andere regio. U dient wellicht opnieuw in te loggen voor uw kunt oversteken naar andere regio's. Wanneer u deze boodschap blijft ontvangen, controleert u dan alstublieft de Tech Support FAQ op: -www.secondlife.com/support + Er is een probleem opgetreden bij het oversteken naar een andere regio. U dient wellicht opnieuw in te loggen voor uw kunt oversteken naar andere regio's. +Als u dit bericht blijft krijgen, controleert u dan alstublieft [SUPPORT_SITE]. </message> <message name="blocked_tport"> Sorry, teleport is momenteel geblokkeerd. Probeer het zo meteen opnieuw. Indien u nog steeds niet kunt teleporteren, log dan alstublieft uit en weer in om het probleem te verhelpen. 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 b69efeb77e36cd346c094a2064f52e204b8834be..04372208d6cc16c1f024d13c96ff24b65b7c3593 100644 --- a/indra/newview/skins/default/xui/pl/panel_preferences_sound.xml +++ b/indra/newview/skins/default/xui/pl/panel_preferences_sound.xml @@ -1,7 +1,7 @@ <?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 dzwiÄ™k podczas minimalizacji okna" name="mute_when_minimized"/> + <check_box initial_value="true" label="Wycisz podczas minimalizacji" 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"/> diff --git a/indra/newview/skins/default/xui/pt/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/pt/floater_inventory_view_finder.xml index 57cdd50dccad2e18c3db450a0fce751571136537..d21e5740112de598d23722b8baff70b1690adf52 100644 --- a/indra/newview/skins/default/xui/pt/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/pt/floater_inventory_view_finder.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Inventory Finder" title="ITENS_DE_INVENTÃRIO_RECENTES" width="165"> +<floater name="Inventory Finder" title="ITENS_DE_INVENTÃRIO_RECENTES"> <check_box label="Animação" name="check_animation"/> <check_box label="Cartões de chamadas" name="check_calling_card"/> <check_box label="Roupas" name="check_clothing"/> @@ -13,8 +13,8 @@ <check_box label="Fotos" name="check_snapshot"/> <button label="Tudo" label_selected="Tudo" name="All"/> <button label="Nenhum" label_selected="Nenhum" name="None"/> - <check_box label="Sempre mostrar as pastas" name="check_show_empty" left="3"/> - <check_box label="Desde o Logoff" name="check_since_logoff" left="3"/> + <check_box label="Sempre mostrar as pastas" name="check_show_empty"/> + <check_box label="Desde o Logoff" name="check_since_logoff"/> <text name="- OR -"> - OU - </text> diff --git a/indra/newview/skins/default/xui/pt/floater_preferences.xml b/indra/newview/skins/default/xui/pt/floater_preferences.xml index 2736900d5f21cf113be043957d6f6d21ce2d0cbd..2c76a72ca869f4196a98dab25b7bb628691ea322 100644 --- a/indra/newview/skins/default/xui/pt/floater_preferences.xml +++ b/indra/newview/skins/default/xui/pt/floater_preferences.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater min_width="332" name="Preferences" title="PREFERÊNCIAS" width="628"> +<floater name="Preferences" title="PREFERÊNCIAS"> <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"> + <tab_container name="pref core"> <panel label="Geral" name="general"/> <panel label="VÃdeo" name="display"/> <panel label="Privacidade" name="im"/> diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml index 121272bf6c08b9c92d890f8786db1b31e41d3a3a..eb38323940243c3560f3c2e8deb1c12484f5c93a 100644 --- a/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml @@ -48,12 +48,12 @@ rápido <check_box initial_value="true" label="Atributos do Avatar" name="AvatarImpostors"/> <check_box initial_value="true" label="Melhoria de Hardware" name="AvatarVertexProgram"/> <check_box initial_value="true" label="Vestimenta do Avatar" name="AvatarCloth"/> - <slider label="Distancia de desenho:" label_width="150" name="DrawDistance" width="255"/> + <slider label="Distancia de desenho:" name="DrawDistance"/> <text name="DrawDistanceMeterText2"> m </text> - <slider label="Contador máx. de partÃculas:" label_width="150" name="MaxParticleCount" width="262"/> - <slider label="Qualidade de Pós-processamento:" label_width="178" name="RenderPostProcess" width="223"/> + <slider label="Contador máx. de partÃculas:" name="MaxParticleCount"/> + <slider label="Qualidade de Pós-processamento:" name="RenderPostProcess"/> <text name="MeshDetailText"> Detalhes de Malha: </text> @@ -94,13 +94,13 @@ rápido <text name="TerrainDetailText"> Detalhe do Terreno: </text> - <radio_group left_delta="45" name="TerrainDetailRadio" width="276"> + <radio_group left_delta="45" name="TerrainDetailRadio"> <radio_item label="Baixo" name="0"/> <radio_item label="Alto" name="2"/> </radio_group> </panel> <button label="Aplicar" label_selected="Aplicar" name="Apply"/> - <button label="Redefinir" left="110" name="Defaults" width="190"/> + <button label="Redefinir" left="110" name="Defaults"/> <button label="Avançado" name="Advanced"/> <button label="Hardware" label_selected="Hardware" name="GraphicsHardwareButton"/> </panel> diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 659ce4a47b964cbc44ab271790a56d40d25af23a..99dfc07cd553690ac759c993fa25814316dcb84f 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -276,8 +276,12 @@ def construct(self): self.disable_manifest_check() # Mesh 3rd party libs needed for auto LOD and collada reading - self.path("libcollada14dom21.dll") - self.path("glod.dll") + try: + self.path("libcollada14dom21.dll") + self.path("glod.dll") + except RuntimeError, err: + print err.message + print "Skipping COLLADA and GLOD libraries (assumming linked statically)" # For textures if self.args['configuration'].lower() == 'debug': diff --git a/install.xml b/install.xml index 4483666fd25f33ab318c309c330aeee0326cf761..2010cae15cb78feaa2cc8a648b9d6768e6f7610a 100644 --- a/install.xml +++ b/install.xml @@ -1014,23 +1014,23 @@ anguage Infrstructure (CLI) international standard</string> <key>darwin</key> <map> <key>md5sum</key> - <string>171bd85ebb81d319e1f15fab8092f8cd</string> + <string>7d75751cbd8786ea4d710b50b5931b9b</string> <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-4.6-darwin-20100326.tar.bz2</uri> + <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-4.6+cookies-darwin-20100402.tar.bz2</uri> </map> <key>linux</key> <map> <key>md5sum</key> - <string>455d9ce60837366a7e744751bdc8b6c3</string> + <string>a90135a68d2821eef742d15cb06b15b9</string> <key>url</key> - <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-linux-20100329.tar.bz2</uri> + <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-linux-20100407-cookie-api.tar.bz2</uri> </map> <key>windows</key> <map> <key>md5sum</key> - <string>04d86bb2eeed4f928d155cb5598ca6b5</string> + <string>b873755dff5f4221b5a3ba63129435a7</string> <key>url</key> - <uri>http://viewer-source-downloads.s3.amazonaws.com/install_pkgs/llqtwebkit-windows-qt4.6-20100326.tar.bz2</uri> + <uri>http://viewer-source-downloads.s3.amazonaws.com/install_pkgs/llqtwebkit-windows-qt4.6-cookies-20100402.tar.bz2</uri> </map> </map> </map>