diff options
Diffstat (limited to 'indra')
148 files changed, 2657 insertions, 4508 deletions
diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt index f785698612..e7aaf3c984 100644 --- a/indra/llcommon/CMakeLists.txt +++ b/indra/llcommon/CMakeLists.txt @@ -50,7 +50,6 @@ set(llcommon_SOURCE_FILES llfile.cpp llfindlocale.cpp llfixedbuffer.cpp - llfoldertype.cpp llformat.cpp llframetimer.cpp llheartbeat.cpp @@ -151,7 +150,6 @@ set(llcommon_HEADER_FILES llfile.h llfindlocale.h llfixedbuffer.h - llfoldertype.h llformat.h llframetimer.h llhash.h diff --git a/indra/llcommon/llassettype.cpp b/indra/llcommon/llassettype.cpp index 6d5b12d840..b2a92861cc 100644 --- a/indra/llcommon/llassettype.cpp +++ b/indra/llcommon/llassettype.cpp @@ -43,21 +43,30 @@ struct AssetEntry : public LLDictionaryEntry { AssetEntry(const char *desc_name, - const char *type_name, // 8 character limit! - const char *human_name, // for decoding to human readable form; put any and as many printable characters you want in each one - bool can_link) // can you create a link to this type? + const char *type_name, // 8 character limit! + const char *human_name, // for decoding to human readable form; put any and as many printable characters you want in each one + const char *category_name, // used by llinventorymodel when creating new categories + EDragAndDropType dad_type, + bool can_link, // can you create a link to this type? + bool is_protected) // can the viewer change categories of this type? : LLDictionaryEntry(desc_name), mTypeName(type_name), mHumanName(human_name), - mCanLink(can_link) + mCategoryName(category_name), + mDadType(dad_type), + mCanLink(can_link), + mIsProtected(is_protected) { llassert(strlen(mTypeName) <= 8); } const char *mTypeName; const char *mHumanName; + const char *mCategoryName; + EDragAndDropType mDadType; bool mCanLink; + bool mIsProtected; }; class LLAssetDictionary : public LLSingleton<LLAssetDictionary>, @@ -69,32 +78,48 @@ public: LLAssetDictionary::LLAssetDictionary() { - // DESCRIPTION TYPE NAME HUMAN NAME CAN LINK? - // |--------------------|-----------|-------------------|-----------| - addEntry(LLAssetType::AT_TEXTURE, new AssetEntry("TEXTURE", "texture", "texture", FALSE)); - addEntry(LLAssetType::AT_SOUND, new AssetEntry("SOUND", "sound", "sound", FALSE)); - addEntry(LLAssetType::AT_CALLINGCARD, new AssetEntry("CALLINGCARD", "callcard", "calling card", FALSE)); - addEntry(LLAssetType::AT_LANDMARK, new AssetEntry("LANDMARK", "landmark", "landmark", FALSE)); - addEntry(LLAssetType::AT_SCRIPT, new AssetEntry("SCRIPT", "script", "legacy script", FALSE)); - addEntry(LLAssetType::AT_CLOTHING, new AssetEntry("CLOTHING", "clothing", "clothing", TRUE)); - addEntry(LLAssetType::AT_OBJECT, new AssetEntry("OBJECT", "object", "object", TRUE)); - addEntry(LLAssetType::AT_NOTECARD, new AssetEntry("NOTECARD", "notecard", "note card", FALSE)); - addEntry(LLAssetType::AT_CATEGORY, new AssetEntry("CATEGORY", "category", "folder", TRUE)); - addEntry(LLAssetType::AT_LSL_TEXT, new AssetEntry("LSL_TEXT", "lsltext", "lsl2 script", FALSE)); - addEntry(LLAssetType::AT_LSL_BYTECODE, new AssetEntry("LSL_BYTECODE", "lslbyte", "lsl bytecode", FALSE)); - addEntry(LLAssetType::AT_TEXTURE_TGA, new AssetEntry("TEXTURE_TGA", "txtr_tga", "tga texture", FALSE)); - addEntry(LLAssetType::AT_BODYPART, new AssetEntry("BODYPART", "bodypart", "body part", TRUE)); - addEntry(LLAssetType::AT_SOUND_WAV, new AssetEntry("SOUND_WAV", "snd_wav", "sound", FALSE)); - addEntry(LLAssetType::AT_IMAGE_TGA, new AssetEntry("IMAGE_TGA", "img_tga", "targa image", FALSE)); - addEntry(LLAssetType::AT_IMAGE_JPEG, new AssetEntry("IMAGE_JPEG", "jpeg", "jpeg image", FALSE)); - addEntry(LLAssetType::AT_ANIMATION, new AssetEntry("ANIMATION", "animatn", "animation", FALSE)); - addEntry(LLAssetType::AT_GESTURE, new AssetEntry("GESTURE", "gesture", "gesture", TRUE)); - addEntry(LLAssetType::AT_SIMSTATE, new AssetEntry("SIMSTATE", "simstate", "simstate", FALSE)); - - addEntry(LLAssetType::AT_LINK, new AssetEntry("LINK", "link", "symbolic link", FALSE)); - addEntry(LLAssetType::AT_LINK_FOLDER, new AssetEntry("FOLDER_LINK", "link_f", "symbolic folder link", FALSE)); - - addEntry(LLAssetType::AT_NONE, new AssetEntry("NONE", "-1", NULL, FALSE)); + // DESCRIPTION TYPE NAME HUMAN NAME CATEGORY NAME DRAG&DROP CAN LINK? PROTECTED? + // |--------------------|-----------|-------------------|-------------------|---------------|-----------|-----------| + addEntry(LLAssetType::AT_TEXTURE, new AssetEntry("TEXTURE", "texture", "texture", "Textures", DAD_TEXTURE, TRUE, TRUE)); + addEntry(LLAssetType::AT_SOUND, new AssetEntry("SOUND", "sound", "sound", "Sounds", DAD_SOUND, TRUE, TRUE)); + addEntry(LLAssetType::AT_CALLINGCARD, new AssetEntry("CALLINGCARD", "callcard", "calling card", "Calling Cards", DAD_CALLINGCARD, TRUE, TRUE)); + addEntry(LLAssetType::AT_LANDMARK, new AssetEntry("LANDMARK", "landmark", "landmark", "Landmarks", DAD_LANDMARK, TRUE, TRUE)); + addEntry(LLAssetType::AT_SCRIPT, new AssetEntry("SCRIPT", "script", "legacy script", "Scripts", DAD_NONE, TRUE, TRUE)); + addEntry(LLAssetType::AT_CLOTHING, new AssetEntry("CLOTHING", "clothing", "clothing", "Clothing", DAD_CLOTHING, TRUE, TRUE)); + addEntry(LLAssetType::AT_OBJECT, new AssetEntry("OBJECT", "object", "object", "Objects", DAD_OBJECT, TRUE, TRUE)); + addEntry(LLAssetType::AT_NOTECARD, new AssetEntry("NOTECARD", "notecard", "note card", "Notecards", DAD_NOTECARD, TRUE, TRUE)); + addEntry(LLAssetType::AT_CATEGORY, new AssetEntry("CATEGORY", "category", "folder", "New Folder", DAD_CATEGORY, TRUE, TRUE)); + addEntry(LLAssetType::AT_ROOT_CATEGORY, new AssetEntry("ROOT_CATEGORY", "root", "root", "Inventory", DAD_ROOT_CATEGORY, TRUE, TRUE)); + addEntry(LLAssetType::AT_LSL_TEXT, new AssetEntry("LSL_TEXT", "lsltext", "lsl2 script", "Scripts", DAD_SCRIPT, TRUE, TRUE)); + addEntry(LLAssetType::AT_LSL_BYTECODE, new AssetEntry("LSL_BYTECODE", "lslbyte", "lsl bytecode", "Scripts", DAD_NONE, TRUE, TRUE)); + addEntry(LLAssetType::AT_TEXTURE_TGA, new AssetEntry("TEXTURE_TGA", "txtr_tga", "tga texture", "Uncompressed Images", DAD_NONE, TRUE, TRUE)); + addEntry(LLAssetType::AT_BODYPART, new AssetEntry("BODYPART", "bodypart", "body part", "Body Parts", DAD_BODYPART, TRUE, TRUE)); + addEntry(LLAssetType::AT_TRASH, new AssetEntry("TRASH", "trash", "trash", "Trash", DAD_NONE, FALSE, TRUE)); + addEntry(LLAssetType::AT_SNAPSHOT_CATEGORY, new AssetEntry("SNAPSHOT_CATEGORY", "snapshot", "snapshot", "Photo Album", DAD_NONE, FALSE, TRUE)); + addEntry(LLAssetType::AT_LOST_AND_FOUND, new AssetEntry("LOST_AND_FOUND", "lstndfnd", "lost and found", "Lost And Found", DAD_NONE, FALSE, TRUE)); + addEntry(LLAssetType::AT_SOUND_WAV, new AssetEntry("SOUND_WAV", "snd_wav", "sound", "Uncompressed SoundS", DAD_NONE, TRUE, TRUE)); + addEntry(LLAssetType::AT_IMAGE_TGA, new AssetEntry("IMAGE_TGA", "img_tga", "targa image", "Uncompressed Images", DAD_NONE, TRUE, TRUE)); + addEntry(LLAssetType::AT_IMAGE_JPEG, new AssetEntry("IMAGE_JPEG", "jpeg", "jpeg image", "Uncompressed Images", DAD_NONE, TRUE, TRUE)); + addEntry(LLAssetType::AT_ANIMATION, new AssetEntry("ANIMATION", "animatn", "animation", "Animations", DAD_ANIMATION, TRUE, TRUE)); + addEntry(LLAssetType::AT_GESTURE, new AssetEntry("GESTURE", "gesture", "gesture", "Gestures", DAD_GESTURE, TRUE, TRUE)); + addEntry(LLAssetType::AT_SIMSTATE, new AssetEntry("SIMSTATE", "simstate", "simstate", "New Folder", DAD_NONE, FALSE, TRUE)); + addEntry(LLAssetType::AT_FAVORITE, new AssetEntry("FAVORITE", "favorite", "favorite", "favorite", DAD_NONE, FALSE, TRUE)); + + addEntry(LLAssetType::AT_LINK, new AssetEntry("LINK", "link", "symbolic link", "Link", DAD_LINK, FALSE, TRUE)); + addEntry(LLAssetType::AT_LINK_FOLDER, new AssetEntry("FOLDER_LINK", "link_f", "symbolic folder link", "New Folder", DAD_LINK, FALSE, TRUE)); + + for (S32 ensemble_num = S32(LLAssetType::AT_FOLDER_ENSEMBLE_START); + ensemble_num <= S32(LLAssetType::AT_FOLDER_ENSEMBLE_END); + ensemble_num++) + { + addEntry(LLAssetType::EType(ensemble_num), new AssetEntry("ENSEMBLE", "ensemble", "ensemble", "New Folder", DAD_CATEGORY, FALSE, FALSE)); + } + + addEntry(LLAssetType::AT_CURRENT_OUTFIT, new AssetEntry("CURRENT", "current", "current outfit", "Current Look", DAD_CATEGORY, FALSE, TRUE)); + addEntry(LLAssetType::AT_OUTFIT, new AssetEntry("OUTFIT", "outfit", "outfit", "New Look", DAD_CATEGORY, FALSE, FALSE)); + addEntry(LLAssetType::AT_MY_OUTFITS, new AssetEntry("MY_OUTFITS", "my_otfts", "my outfits", "My Looks", DAD_CATEGORY, FALSE, TRUE)); + + addEntry(LLAssetType::AT_NONE, new AssetEntry("NONE", "-1", NULL, "New Folder", DAD_NONE, FALSE, FALSE)); }; // static @@ -115,7 +140,8 @@ const std::string &LLAssetType::getDesc(LLAssetType::EType asset_type) } else { - return badLookup(); + static const std::string error_string = "BAD TYPE"; + return error_string; } } @@ -130,7 +156,7 @@ const char *LLAssetType::lookup(LLAssetType::EType asset_type) } else { - return badLookup().c_str(); + return "-1"; } } @@ -140,7 +166,6 @@ LLAssetType::EType LLAssetType::lookup(const char* name) return lookup(ll_safe_string(name)); } -// static LLAssetType::EType LLAssetType::lookup(const std::string& type_name) { const LLAssetDictionary *dict = LLAssetDictionary::getInstance(); @@ -168,7 +193,7 @@ const char *LLAssetType::lookupHumanReadable(LLAssetType::EType asset_type) } else { - return badLookup().c_str(); + return NULL; } } @@ -178,7 +203,6 @@ LLAssetType::EType LLAssetType::lookupHumanReadable(const char* name) return lookupHumanReadable(ll_safe_string(name)); } -// static LLAssetType::EType LLAssetType::lookupHumanReadable(const std::string& readable_name) { const LLAssetDictionary *dict = LLAssetDictionary::getInstance(); @@ -196,6 +220,32 @@ LLAssetType::EType LLAssetType::lookupHumanReadable(const std::string& readable_ } // static +const char *LLAssetType::lookupCategoryName(LLAssetType::EType asset_type) +{ + const LLAssetDictionary *dict = LLAssetDictionary::getInstance(); + const AssetEntry *entry = dict->lookup(asset_type); + if (entry) + { + return entry->mCategoryName; + } + else + { + return "New Folder"; + } +} + +// static +EDragAndDropType LLAssetType::lookupDragAndDropType(EType asset_type) +{ + const LLAssetDictionary *dict = LLAssetDictionary::getInstance(); + const AssetEntry *entry = dict->lookup(asset_type); + if (entry) + return entry->mDadType; + else + return DAD_NONE; +} + +// static bool LLAssetType::lookupCanLink(EType asset_type) { const LLAssetDictionary *dict = LLAssetDictionary::getInstance(); @@ -219,9 +269,37 @@ bool LLAssetType::lookupIsLinkType(EType asset_type) } // static -const std::string &LLAssetType::badLookup() +// Only ensembles and plain folders aren't protected. "Protected" means +// you can't change certain properties such as their type. +bool LLAssetType::lookupIsProtectedCategoryType(EType asset_type) { - static const std::string sBadLookup = "llassettype_bad_lookup"; - return sBadLookup; + const LLAssetDictionary *dict = LLAssetDictionary::getInstance(); + const AssetEntry *entry = dict->lookup(asset_type); + if (entry) + { + return entry->mIsProtected; + } + return true; +} +// static +bool LLAssetType::lookupIsEnsembleCategoryType(EType asset_type) +{ + return (asset_type >= AT_FOLDER_ENSEMBLE_START && + asset_type <= AT_FOLDER_ENSEMBLE_END); +} + + +// static. Generate a good default description +void LLAssetType::generateDescriptionFor(LLAssetType::EType asset_type, + std::string& description) +{ + const S32 BUF_SIZE = 30; + char time_str[BUF_SIZE]; /* Flawfinder: ignore */ + time_t now; + time(&now); + memset(time_str, '\0', BUF_SIZE); + strftime(time_str, BUF_SIZE - 1, "%Y-%m-%d %H:%M:%S ", localtime(&now)); + description.assign(time_str); + description.append(LLAssetType::lookupHumanReadable(asset_type)); } diff --git a/indra/llcommon/llassettype.h b/indra/llcommon/llassettype.h index ec2290d30e..3c760e4d91 100644 --- a/indra/llcommon/llassettype.h +++ b/indra/llcommon/llassettype.h @@ -94,6 +94,18 @@ public: AT_BODYPART = 13, // A collection of textures and parameters that can be worn by an avatar. + AT_TRASH = 14, + // Only to be used as a marker for a category preferred type. + // Using this, we can throw things in the trash before completely deleting. + + AT_SNAPSHOT_CATEGORY = 15, + // A marker for a folder meant for snapshots. + // No actual assets will be snapshots, though if there were, you + // could interpret them as textures. + + AT_LOST_AND_FOUND = 16, + // Used to stuff lost&found items into. + AT_SOUND_WAV = 17, // Uncompressed sound. @@ -114,22 +126,38 @@ public: AT_SIMSTATE = 22, // Simstate file. + AT_FAVORITE = 23, + // favorite items + AT_LINK = 24, // Inventory symbolic link AT_LINK_FOLDER = 25, // Inventory folder link + + AT_FOLDER_ENSEMBLE_START = 26, + AT_FOLDER_ENSEMBLE_END = 45, + // This range is reserved for special clothing folder types. + + AT_CURRENT_OUTFIT = 46, + // Current outfit + + AT_OUTFIT = 47, + // Predefined outfit ("look") + + AT_MY_OUTFITS = 48, + // Folder that holds your outfits. + - AT_COUNT = 26, + AT_COUNT = 49, // +*********************************************************+ // | TO ADD AN ELEMENT TO THIS ENUM: | // +*********************************************************+ // | 1. INSERT BEFORE AT_COUNT | // | 2. INCREMENT AT_COUNT BY 1 | - // | 3. ADD TO LLAssetType.cpp | - // | 4. ADD TO LLViewerAssetType.cpp | - // | 5. ADD TO DEFAULT_ASSET_FOR_INV in LLInventoryType.cpp | + // | 3. ADD TO LLAssetDictionary in LLAssetType.cpp | + // | 3. ADD TO DEFAULT_ASSET_FOR_INV in LLInventoryType.cpp | // +*********************************************************+ AT_NONE = -1 @@ -145,17 +173,33 @@ public: static EType lookupHumanReadable(const std::string& readable_name); static const char* lookupHumanReadable(EType asset_type); + // Generate a good default description. You may want to add a verb + // or agent name after this depending on your application. + static void generateDescriptionFor(LLAssetType::EType asset_type, + std::string& description); + static EType getType(const std::string& desc_name); static const std::string& getDesc(EType asset_type); + static EDragAndDropType lookupDragAndDropType(EType asset_type); static bool lookupCanLink(EType asset_type); static bool lookupIsLinkType(EType asset_type); - static const std::string& badLookup(); // error string when a lookup fails - -protected: - LLAssetType() {} - ~LLAssetType() {} + static const char* lookupCategoryName(EType asset_type); + static bool lookupIsProtectedCategoryType(EType asset_type); + static bool lookupIsEnsembleCategoryType(EType asset_type); + + /* TODO: Change return types from "const char *" to "const std::string &". + This is fairly straightforward, but requires changing some calls to use .c_str(). + e.g.: + - fprintf(fp, "\t\ttype\t%s\n", LLAssetType::lookup(mType)); + + fprintf(fp, "\t\ttype\t%s\n", LLAssetType::lookup(mType).c_str()); + */ + +private: + // don't instantiate or derive one of these objects + LLAssetType( void ) {} + ~LLAssetType( void ) {} }; #endif // LL_LLASSETTYPE_H diff --git a/indra/llcommon/llfoldertype.cpp b/indra/llcommon/llfoldertype.cpp deleted file mode 100644 index 9107b11597..0000000000 --- a/indra/llcommon/llfoldertype.cpp +++ /dev/null @@ -1,165 +0,0 @@ -/** - * @file llfoldertype.cpp - * @brief Implementatino of LLFolderType functionality. - * - * $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 "llfoldertype.h" -#include "lldictionary.h" -#include "llmemory.h" -#include "llsingleton.h" - -///---------------------------------------------------------------------------- -/// Class LLFolderType -///---------------------------------------------------------------------------- -struct FolderEntry : public LLDictionaryEntry -{ - FolderEntry(const std::string &type_name, // 8 character limit! - bool is_protected) // can the viewer change categories of this type? - : - LLDictionaryEntry(type_name), - mIsProtected(is_protected) - { - llassert(type_name.length() <= 8); - } - - const bool mIsProtected; -}; - -class LLFolderDictionary : public LLSingleton<LLFolderDictionary>, - public LLDictionary<LLFolderType::EType, FolderEntry> -{ -public: - LLFolderDictionary(); -}; - -LLFolderDictionary::LLFolderDictionary() -{ - // TYPE NAME PROTECTED - // |-----------|---------| - addEntry(LLFolderType::FT_TEXTURE, new FolderEntry("texture", TRUE)); - addEntry(LLFolderType::FT_SOUND, new FolderEntry("sound", TRUE)); - addEntry(LLFolderType::FT_CALLINGCARD, new FolderEntry("callcard", TRUE)); - addEntry(LLFolderType::FT_LANDMARK, new FolderEntry("landmark", TRUE)); - addEntry(LLFolderType::FT_CLOTHING, new FolderEntry("clothing", TRUE)); - addEntry(LLFolderType::FT_OBJECT, new FolderEntry("object", TRUE)); - addEntry(LLFolderType::FT_NOTECARD, new FolderEntry("notecard", TRUE)); - addEntry(LLFolderType::FT_CATEGORY, new FolderEntry("category", TRUE)); - addEntry(LLFolderType::FT_ROOT_CATEGORY, new FolderEntry("root", TRUE)); - addEntry(LLFolderType::FT_LSL_TEXT, new FolderEntry("lsltext", TRUE)); - addEntry(LLFolderType::FT_BODYPART, new FolderEntry("bodypart", TRUE)); - addEntry(LLFolderType::FT_TRASH, new FolderEntry("trash", TRUE)); - addEntry(LLFolderType::FT_SNAPSHOT_CATEGORY, new FolderEntry("snapshot", TRUE)); - addEntry(LLFolderType::FT_LOST_AND_FOUND, new FolderEntry("lstndfnd", TRUE)); - addEntry(LLFolderType::FT_ANIMATION, new FolderEntry("animatn", TRUE)); - addEntry(LLFolderType::FT_GESTURE, new FolderEntry("gesture", TRUE)); - addEntry(LLFolderType::FT_FAVORITE, new FolderEntry("favorite", TRUE)); - - for (S32 ensemble_num = S32(LLFolderType::FT_ENSEMBLE_START); ensemble_num <= S32(LLFolderType::FT_ENSEMBLE_END); ensemble_num++) - { - addEntry(LLFolderType::EType(ensemble_num), new FolderEntry("ensemble", FALSE)); - } - - addEntry(LLFolderType::FT_CURRENT_OUTFIT, new FolderEntry("current", TRUE)); - addEntry(LLFolderType::FT_OUTFIT, new FolderEntry("outfit", FALSE)); - addEntry(LLFolderType::FT_MY_OUTFITS, new FolderEntry("my_otfts", TRUE)); - addEntry(LLFolderType::FT_INBOX, new FolderEntry("inbox", TRUE)); - - addEntry(LLFolderType::FT_NONE, new FolderEntry("-1", FALSE)); -}; - -// static -LLFolderType::EType LLFolderType::lookup(const std::string& name) -{ - return LLFolderDictionary::getInstance()->lookup(name); -} - -// static -const std::string &LLFolderType::lookup(LLFolderType::EType folder_type) -{ - const FolderEntry *entry = LLFolderDictionary::getInstance()->lookup(folder_type); - if (entry) - { - return entry->mName; - } - else - { - return badLookup(); - } -} - -// static -// Only ensembles and plain folders aren't protected. "Protected" means -// you can't change certain properties such as their type. -bool LLFolderType::lookupIsProtectedType(EType folder_type) -{ - const LLFolderDictionary *dict = LLFolderDictionary::getInstance(); - const FolderEntry *entry = dict->lookup(folder_type); - if (entry) - { - return entry->mIsProtected; - } - return true; -} - -// static -bool LLFolderType::lookupIsEnsembleType(EType folder_type) -{ - return (folder_type >= FT_ENSEMBLE_START && - folder_type <= FT_ENSEMBLE_END); -} - -// static -LLAssetType::EType LLFolderType::folderTypeToAssetType(LLFolderType::EType folder_type) -{ - if (LLAssetType::lookup(LLAssetType::EType(folder_type)) == LLAssetType::badLookup()) - { - llwarns << "Converting to unknown asset type " << folder_type << llendl; - } - return (LLAssetType::EType)folder_type; -} - -// static -LLFolderType::EType LLFolderType::assetTypeToFolderType(LLAssetType::EType asset_type) -{ - if (LLFolderType::lookup(LLFolderType::EType(asset_type)) == LLFolderType::badLookup()) - { - llwarns << "Converting to unknown folder type " << asset_type << llendl; - } - return (LLFolderType::EType)asset_type; -} - -// static -const std::string &LLFolderType::badLookup() -{ - static const std::string sBadLookup = "llfoldertype_bad_lookup"; - return sBadLookup; -} diff --git a/indra/llcommon/llfoldertype.h b/indra/llcommon/llfoldertype.h deleted file mode 100644 index 5374ffd829..0000000000 --- a/indra/llcommon/llfoldertype.h +++ /dev/null @@ -1,123 +0,0 @@ -/** - * @file llfoldertype.h - * @brief Declaration of LLFolderType. - * - * $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_LLFOLDERTYPE_H -#define LL_LLFOLDERTYPE_H - -#include <string> -#include "llassettype.h" - -// This class handles folder types (similar to assettype, except for folders) -// and operations on those. -class LL_COMMON_API LLFolderType -{ -public: - // ! BACKWARDS COMPATIBILITY ! Folder type enums must match asset type enums. - enum EType - { - FT_TEXTURE = 0, - - FT_SOUND = 1, - - FT_CALLINGCARD = 2, - - FT_LANDMARK = 3, - - // FT_SCRIPT = 4, - - FT_CLOTHING = 5, - - FT_OBJECT = 6, - - FT_NOTECARD = 7, - - FT_CATEGORY = 8, - - FT_ROOT_CATEGORY = 9, - - FT_LSL_TEXT = 10, - - // FT_LSL_BYTECODE = 11, - // FT_TEXTURE_TGA = 12, - - FT_BODYPART = 13, - - FT_TRASH = 14, - - FT_SNAPSHOT_CATEGORY = 15, - - FT_LOST_AND_FOUND = 16, - - // FT_SOUND_WAV = 17, - // FT_IMAGE_TGA = 18, - // FT_IMAGE_JPEG = 19, - - FT_ANIMATION = 20, - - FT_GESTURE = 21, - - // FT_SIMSTATE = 22, - - FT_FAVORITE = 23, - - FT_ENSEMBLE_START = 26, - FT_ENSEMBLE_END = 45, - // This range is reserved for special clothing folder types. - - FT_CURRENT_OUTFIT = 46, - FT_OUTFIT = 47, - FT_MY_OUTFITS = 48, - - FT_INBOX = 49, - - FT_COUNT = 50, - - FT_NONE = -1 - }; - - static EType lookup(const std::string& type_name); - static const std::string& lookup(EType folder_type); - - static bool lookupIsProtectedType(EType folder_type); - static bool lookupIsEnsembleType(EType folder_type); - - static LLAssetType::EType folderTypeToAssetType(LLFolderType::EType folder_type); - static LLFolderType::EType assetTypeToFolderType(LLAssetType::EType asset_type); - - static const std::string& badLookup(); // error string when a lookup fails - -protected: - LLFolderType() {} - ~LLFolderType() {} -}; - -#endif // LL_LLFOLDERTYPE_H diff --git a/indra/llinventory/llinventory.cpp b/indra/llinventory/llinventory.cpp index d665deb605..5d3fbe5128 100644 --- a/indra/llinventory/llinventory.cpp +++ b/indra/llinventory/llinventory.cpp @@ -1324,7 +1324,7 @@ BOOL item_date_sort( LLInventoryItem* a, LLInventoryItem* b ) LLInventoryCategory::LLInventoryCategory( const LLUUID& uuid, const LLUUID& parent_uuid, - LLFolderType::EType preferred_type, + LLAssetType::EType preferred_type, const std::string& name) : LLInventoryObject(uuid, parent_uuid, LLAssetType::AT_CATEGORY, name), mPreferredType(preferred_type) @@ -1332,7 +1332,7 @@ LLInventoryCategory::LLInventoryCategory( } LLInventoryCategory::LLInventoryCategory() : - mPreferredType(LLFolderType::FT_NONE) + mPreferredType(LLAssetType::AT_NONE) { mType = LLAssetType::AT_CATEGORY; } @@ -1354,12 +1354,12 @@ void LLInventoryCategory::copyCategory(const LLInventoryCategory* other) mPreferredType = other->mPreferredType; } -LLFolderType::EType LLInventoryCategory::getPreferredType() const +LLAssetType::EType LLInventoryCategory::getPreferredType() const { return mPreferredType; } -void LLInventoryCategory::setPreferredType(LLFolderType::EType type) +void LLInventoryCategory::setPreferredType(LLAssetType::EType type) { mPreferredType = type; } @@ -1405,13 +1405,13 @@ bool LLInventoryCategory::fromLLSD(const LLSD& sd) if (sd.has(w)) { S8 type = (U8)sd[w].asInteger(); - mPreferredType = static_cast<LLFolderType::EType>(type); + mPreferredType = static_cast<LLAssetType::EType>(type); } w = INV_ASSET_TYPE_LABEL_WS; if (sd.has(w)) { S8 type = (U8)sd[w].asInteger(); - mPreferredType = static_cast<LLFolderType::EType>(type); + mPreferredType = static_cast<LLAssetType::EType>(type); } w = INV_NAME_LABEL; @@ -1433,7 +1433,7 @@ void LLInventoryCategory::unpackMessage(LLMessageSystem* msg, msg->getUUIDFast(block, _PREHASH_ParentID, mParentUUID, block_num); S8 type; msg->getS8Fast(block, _PREHASH_Type, type, block_num); - mPreferredType = static_cast<LLFolderType::EType>(type); + mPreferredType = static_cast<LLAssetType::EType>(type); msg->getStringFast(block, _PREHASH_Name, mName, block_num); LLStringUtil::replaceNonstandardASCII(mName, ' '); } @@ -1482,7 +1482,7 @@ BOOL LLInventoryCategory::importFile(LLFILE* fp) } else if(0 == strcmp("pref_type", keyword)) { - mPreferredType = LLFolderType::lookup(valuestr); + mPreferredType = LLAssetType::lookup(valuestr); } else if(0 == strcmp("name", keyword)) { @@ -1514,7 +1514,7 @@ BOOL LLInventoryCategory::exportFile(LLFILE* fp, BOOL) const mParentUUID.toString(uuid_str); fprintf(fp, "\t\tparent_id\t%s\n", uuid_str.c_str()); fprintf(fp, "\t\ttype\t%s\n", LLAssetType::lookup(mType)); - fprintf(fp, "\t\tpref_type\t%s\n", LLFolderType::lookup(mPreferredType).c_str()); + fprintf(fp, "\t\tpref_type\t%s\n", LLAssetType::lookup(mPreferredType)); fprintf(fp, "\t\tname\t%s|\n", mName.c_str()); fprintf(fp,"\t}\n"); return TRUE; @@ -1561,7 +1561,7 @@ BOOL LLInventoryCategory::importLegacyStream(std::istream& input_stream) } else if(0 == strcmp("pref_type", keyword)) { - mPreferredType = LLFolderType::lookup(valuestr); + mPreferredType = LLAssetType::lookup(valuestr); } else if(0 == strcmp("name", keyword)) { @@ -1593,7 +1593,7 @@ BOOL LLInventoryCategory::exportLegacyStream(std::ostream& output_stream, BOOL) mParentUUID.toString(uuid_str); output_stream << "\t\tparent_id\t" << uuid_str << "\n"; output_stream << "\t\ttype\t" << LLAssetType::lookup(mType) << "\n"; - output_stream << "\t\tpref_type\t" << LLFolderType::lookup(mPreferredType) << "\n"; + output_stream << "\t\tpref_type\t" << LLAssetType::lookup(mPreferredType) << "\n"; output_stream << "\t\tname\t" << mName.c_str() << "|\n"; output_stream << "\t}\n"; return TRUE; @@ -1629,6 +1629,38 @@ LLSD ll_create_sd_from_inventory_item(LLPointer<LLInventoryItem> item) return rv; } +/* deprecated, use LLInventoryItem::fromLLSD() instead +LLPointer<LLInventoryItem> ll_create_item_from_sd(const LLSD& sd_item) +{ + LLPointer<LLInventoryItem> rv = new LLInventoryItem; + rv->setUUID(sd_item[INV_ITEM_ID_LABEL].asUUID()); + rv->setParent(sd_item[INV_PARENT_ID_LABEL].asUUID()); + rv->rename(sd_item[INV_NAME_LABEL].asString()); + rv->setType( + LLAssetType::lookup(sd_item[INV_ASSET_TYPE_LABEL].asString())); + if (sd_item.has("shadow_id")) + { + LLUUID asset_id = sd_item["shadow_id"]; + LLXORCipher cipher(MAGIC_ID.mData, UUID_BYTES); + cipher.decrypt(asset_id.mData, UUID_BYTES); + rv->setAssetUUID(asset_id); + } + if (sd_item.has(INV_ASSET_ID_LABEL)) + { + rv->setAssetUUID(sd_item[INV_ASSET_ID_LABEL].asUUID()); + } + rv->setDescription(sd_item[INV_DESC_LABEL].asString()); + rv->setSaleInfo(ll_sale_info_from_sd(sd_item[INV_SALE_INFO_LABEL])); + rv->setPermissions(ll_permissions_from_sd(sd_item[INV_PERMISSIONS_LABEL])); + rv->setInventoryType( + LLInventoryType::lookup( + sd_item[INV_INVENTORY_TYPE_LABEL].asString())); + rv->setFlags((U32)(sd_item[INV_FLAGS_LABEL].asInteger())); + rv->setCreationDate(sd_item[INV_CREATION_DATE_LABEL].asInteger()); + return rv; +} +*/ + LLSD ll_create_sd_from_inventory_category(LLPointer<LLInventoryCategory> cat) { LLSD rv; @@ -1643,10 +1675,10 @@ LLSD ll_create_sd_from_inventory_category(LLPointer<LLInventoryCategory> cat) rv[INV_PARENT_ID_LABEL] = cat->getParentUUID(); rv[INV_NAME_LABEL] = cat->getName(); rv[INV_ASSET_TYPE_LABEL] = LLAssetType::lookup(cat->getType()); - if(LLFolderType::lookupIsProtectedType(cat->getPreferredType())) + if(LLAssetType::lookupIsProtectedCategoryType(cat->getPreferredType())) { rv[INV_PREFERRED_TYPE_LABEL] = - LLFolderType::lookup(cat->getPreferredType()).c_str(); + LLAssetType::lookup(cat->getPreferredType()); } return rv; } @@ -1660,7 +1692,7 @@ LLPointer<LLInventoryCategory> ll_create_category_from_sd(const LLSD& sd_cat) rv->setType( LLAssetType::lookup(sd_cat[INV_ASSET_TYPE_LABEL].asString())); rv->setPreferredType( - LLFolderType::lookup( - sd_cat[INV_PREFERRED_TYPE_LABEL].asString())); + LLAssetType::lookup( + sd_cat[INV_PREFERRED_TYPE_LABEL].asString())); return rv; } diff --git a/indra/llinventory/llinventory.h b/indra/llinventory/llinventory.h index 3de9d14f54..bd581e860f 100644 --- a/indra/llinventory/llinventory.h +++ b/indra/llinventory/llinventory.h @@ -37,7 +37,6 @@ #include "llassetstorage.h" #include "lldarray.h" -#include "llfoldertype.h" #include "llinventorytype.h" #include "llmemtype.h" #include "llpermissions.h" @@ -322,15 +321,15 @@ protected: public: MEM_TYPE_NEW(LLMemType::MTYPE_INVENTORY); LLInventoryCategory(const LLUUID& uuid, const LLUUID& parent_uuid, - LLFolderType::EType preferred_type, + LLAssetType::EType preferred_type, const std::string& name); LLInventoryCategory(); LLInventoryCategory(const LLInventoryCategory* other); void copyCategory(const LLInventoryCategory* other); // LLRefCount requires custom copy // accessors and mutators - LLFolderType::EType getPreferredType() const; - void setPreferredType(LLFolderType::EType type); + LLAssetType::EType getPreferredType() const; + void setPreferredType(LLAssetType::EType type); // For messaging system support virtual void packMessage(LLMessageSystem* msg) const; virtual void unpackMessage(LLMessageSystem* msg, const char* block, S32 block_num = 0); @@ -346,8 +345,10 @@ public: virtual BOOL exportLegacyStream(std::ostream& output_stream, BOOL include_asset_key = TRUE) const; protected: - // May be the type that this category was "meant" to hold (although it may hold any type). - LLFolderType::EType mPreferredType; + // The type of asset that this category was "meant" to hold + // (although it may in fact hold any type). + LLAssetType::EType mPreferredType; + }; diff --git a/indra/llinventory/llinventorytype.cpp b/indra/llinventory/llinventorytype.cpp index 0e71c0d12d..a445466b26 100644 --- a/indra/llinventory/llinventorytype.cpp +++ b/indra/llinventory/llinventorytype.cpp @@ -79,16 +79,24 @@ LLInventoryDictionary::LLInventoryDictionary() addEntry(LLInventoryType::IT_SOUND, new InventoryEntry("sound", "sound", 1, LLAssetType::AT_SOUND)); addEntry(LLInventoryType::IT_CALLINGCARD, new InventoryEntry("callcard", "calling card", 1, LLAssetType::AT_CALLINGCARD)); addEntry(LLInventoryType::IT_LANDMARK, new InventoryEntry("landmark", "landmark", 1, LLAssetType::AT_LANDMARK)); + //addEntry(LLInventoryType::IT_SCRIPT, new InventoryEntry(NULL,NULL)); + //addEntry(LLInventoryType::IT_CLOTHING, new InventoryEntry(NULL,NULL)); addEntry(LLInventoryType::IT_OBJECT, new InventoryEntry("object", "object", 1, LLAssetType::AT_OBJECT)); addEntry(LLInventoryType::IT_NOTECARD, new InventoryEntry("notecard", "note card", 1, LLAssetType::AT_NOTECARD)); addEntry(LLInventoryType::IT_CATEGORY, new InventoryEntry("category", "folder" )); addEntry(LLInventoryType::IT_ROOT_CATEGORY, new InventoryEntry("root", "root" )); addEntry(LLInventoryType::IT_LSL, new InventoryEntry("script", "script", 2, LLAssetType::AT_LSL_TEXT, LLAssetType::AT_LSL_BYTECODE)); + //addEntry(LLInventoryType::IT_LSL_BYTECODE, new InventoryEntry(NULL,NULL)); + //addEntry(LLInventoryType::IT_TEXTURE_TGA, new InventoryEntry(NULL,NULL)); + //addEntry(LLInventoryType::IT_BODYPART, new InventoryEntry(NULL,NULL)); + //addEntry(LLInventoryType::IT_TRASH, new InventoryEntry(NULL,NULL)); addEntry(LLInventoryType::IT_SNAPSHOT, new InventoryEntry("snapshot", "snapshot", 1, LLAssetType::AT_TEXTURE)); + //addEntry(LLInventoryType::IT_LOST_AND_FOUND, new InventoryEntry(NULL,NULL, )); addEntry(LLInventoryType::IT_ATTACHMENT, new InventoryEntry("attach", "attachment", 1, LLAssetType::AT_OBJECT)); addEntry(LLInventoryType::IT_WEARABLE, new InventoryEntry("wearable", "wearable", 2, LLAssetType::AT_CLOTHING, LLAssetType::AT_BODYPART)); addEntry(LLInventoryType::IT_ANIMATION, new InventoryEntry("animation", "animation", 1, LLAssetType::AT_ANIMATION)); addEntry(LLInventoryType::IT_GESTURE, new InventoryEntry("gesture", "gesture", 1, LLAssetType::AT_GESTURE)); + addEntry(LLInventoryType::IT_FAVORITE, new InventoryEntry("favorite", "favorite", 1, LLAssetType::AT_FAVORITE)); } @@ -120,9 +128,35 @@ DEFAULT_ASSET_FOR_INV_TYPE[LLAssetType::AT_COUNT] = LLInventoryType::IT_ANIMATION, // AT_ANIMATION LLInventoryType::IT_GESTURE, // AT_GESTURE LLInventoryType::IT_NONE, // AT_SIMSTATE + LLInventoryType::IT_FAVORITE, // AT_FAVORITE LLInventoryType::IT_NONE, // AT_LINK LLInventoryType::IT_NONE, // AT_LINK_FOLDER + + LLInventoryType::IT_CATEGORY, // AT_ENSEMBLE + LLInventoryType::IT_CATEGORY, // AT_ENSEMBLE + LLInventoryType::IT_CATEGORY, // AT_ENSEMBLE + LLInventoryType::IT_CATEGORY, // AT_ENSEMBLE + LLInventoryType::IT_CATEGORY, // AT_ENSEMBLE + LLInventoryType::IT_CATEGORY, // AT_ENSEMBLE + LLInventoryType::IT_CATEGORY, // AT_ENSEMBLE + LLInventoryType::IT_CATEGORY, // AT_ENSEMBLE + LLInventoryType::IT_CATEGORY, // AT_ENSEMBLE + LLInventoryType::IT_CATEGORY, // AT_ENSEMBLE + LLInventoryType::IT_CATEGORY, // AT_ENSEMBLE + LLInventoryType::IT_CATEGORY, // AT_ENSEMBLE + LLInventoryType::IT_CATEGORY, // AT_ENSEMBLE + LLInventoryType::IT_CATEGORY, // AT_ENSEMBLE + LLInventoryType::IT_CATEGORY, // AT_ENSEMBLE + LLInventoryType::IT_CATEGORY, // AT_ENSEMBLE + LLInventoryType::IT_CATEGORY, // AT_ENSEMBLE + LLInventoryType::IT_CATEGORY, // AT_ENSEMBLE + LLInventoryType::IT_CATEGORY, // AT_ENSEMBLE + LLInventoryType::IT_CATEGORY, // AT_ENSEMBLE + + LLInventoryType::IT_CATEGORY, // AT_CURRENT_OUTFIT + LLInventoryType::IT_CATEGORY, // AT_OUTFIT + LLInventoryType::IT_CATEGORY, // AT_MY_OUTFITS }; // static diff --git a/indra/llinventory/llinventorytype.h b/indra/llinventory/llinventorytype.h index e515b8a304..14b28bfe4b 100644 --- a/indra/llinventory/llinventorytype.h +++ b/indra/llinventory/llinventorytype.h @@ -67,7 +67,8 @@ public: IT_WEARABLE = 18, IT_ANIMATION = 19, IT_GESTURE = 20, - IT_COUNT = 21, + IT_FAVORITE = 21, + IT_COUNT = 22, IT_NONE = -1 }; diff --git a/indra/llinventory/tests/inventorymisc_test.cpp b/indra/llinventory/tests/inventorymisc_test.cpp index c797a70c50..770594dc9d 100644 --- a/indra/llinventory/tests/inventorymisc_test.cpp +++ b/indra/llinventory/tests/inventorymisc_test.cpp @@ -94,7 +94,7 @@ LLPointer<LLInventoryCategory> create_random_inventory_cat() LLPointer<LLInventoryCategory> cat = new LLInventoryCategory( item_id, parent_id, - LLFolderType::FT_NONE, + LLAssetType::AT_NONE, std::string("Sample category")); return cat; } @@ -452,7 +452,7 @@ namespace tut ensure_equals("4.type::getType() failed", dst->getType(), src->getType()); ensure_equals("5.preferred type::getPreferredType() failed", dst->getPreferredType(), src->getPreferredType()); - src->setPreferredType( LLFolderType::FT_TEXTURE); + src->setPreferredType( LLAssetType::AT_TEXTURE); sd = ll_create_sd_from_inventory_category(src); dst = ll_create_category_from_sd(sd); ensure_equals("6.preferred type::getPreferredType() failed", dst->getPreferredType(), src->getPreferredType()); diff --git a/indra/llmessage/lltransfersourceasset.cpp b/indra/llmessage/lltransfersourceasset.cpp index 7332f5c954..41f3f3f607 100644 --- a/indra/llmessage/lltransfersourceasset.cpp +++ b/indra/llmessage/lltransfersourceasset.cpp @@ -292,6 +292,7 @@ bool is_asset_id_knowable(LLAssetType::EType type) case LLAssetType::AT_BODYPART: case LLAssetType::AT_ANIMATION: case LLAssetType::AT_GESTURE: + case LLAssetType::AT_FAVORITE: case LLAssetType::AT_LINK: case LLAssetType::AT_LINK_FOLDER: rv = true; diff --git a/indra/llprimitive/llmediaentry.cpp b/indra/llprimitive/llmediaentry.cpp index 701300163a..fa04bf80e7 100644 --- a/indra/llprimitive/llmediaentry.cpp +++ b/indra/llprimitive/llmediaentry.cpp @@ -164,7 +164,6 @@ void LLMediaEntry::asLLSD(LLSD& sd) const // "security" fields sd[WHITELIST_ENABLE_KEY] = mWhiteListEnable; - sd.erase(WHITELIST_KEY); for (U32 i=0; i<mWhiteList.size(); i++) { sd[WHITELIST_KEY].append(mWhiteList[i]); diff --git a/indra/llprimitive/tests/llmediaentry_test.cpp b/indra/llprimitive/tests/llmediaentry_test.cpp index cd9608d56b..9ce6560923 100644 --- a/indra/llprimitive/tests/llmediaentry_test.cpp +++ b/indra/llprimitive/tests/llmediaentry_test.cpp @@ -223,7 +223,8 @@ namespace tut { set_test_name("Test LLMediaEntry Instantiation"); LLMediaEntry entry; - ensure_llsd_equals(get_test_name() + " failed", defaultMediaEntryLLSD, entry.asLLSD()); + ensure_llsd_equals(get_test_name(), defaultMediaEntryLLSD, entry.asLLSD()); + } template<> template<> @@ -250,27 +251,12 @@ namespace tut ensure_llsd_equals(get_test_name() + " failed", golden, entry.asLLSD()); } - template<> template<> - void object::test<4>() - { - set_test_name("Test LLMediaEntry::asLLSD()"); - LLMediaEntry entry; - LLSD sd; - // Put some cruft in the LLSD - sd[LLMediaEntry::CURRENT_URL_KEY] = "http://www.example.com"; - LLSD whitelist; - whitelist.append("*.example.com"); - sd[LLMediaEntry::WHITELIST_KEY] = whitelist; - entry.asLLSD(sd); - ensure_llsd_equals(get_test_name() + " failed", defaultMediaEntryLLSD, sd); - } - // limit tests const char *URL_OK = "http://www.example.com"; const char *URL_TOO_BIG = "http://www.example.com.qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq"; template<> template<> - void object::test<5>() + void object::test<4>() { set_test_name("Test Limits on setting current URL"); LLMediaEntry entry; @@ -281,7 +267,7 @@ namespace tut } template<> template<> - void object::test<6>() + void object::test<5>() { set_test_name("Test Limits on setting home URL"); LLMediaEntry entry; @@ -292,7 +278,7 @@ namespace tut } template<> template<> - void object::test<7>() + void object::test<6>() { set_test_name("Test Limits on setting whitelist"); @@ -306,7 +292,7 @@ namespace tut } template<> template<> - void object::test<8>() + void object::test<7>() { set_test_name("Test Limits on setting whitelist too big"); @@ -321,7 +307,7 @@ namespace tut } template<> template<> - void object::test<9>() + void object::test<8>() { set_test_name("Test Limits on setting whitelist too many"); @@ -337,7 +323,7 @@ namespace tut } template<> template<> - void object::test<10>() + void object::test<9>() { set_test_name("Test to make sure both setWhiteList() functions behave the same"); @@ -355,7 +341,7 @@ namespace tut } template<> template<> - void object::test<11>() + void object::test<10>() { set_test_name("Test to make sure both setWhiteList() functions behave the same"); @@ -376,7 +362,7 @@ namespace tut } template<> template<> - void object::test<12>() + void object::test<11>() { set_test_name("Test to make sure both setWhiteList() functions behave the same"); @@ -400,99 +386,99 @@ namespace tut // Check the "empty whitelist" case template<> template<> - void object::test<13>() { whitelist_test("", "http://www.example.com", true); } + void object::test<12>() { whitelist_test("", "http://www.example.com", true); } // Check the "missing scheme" case template<> template<> - void object::test<14>() { whitelist_test("www.example.com", "http://www.example.com", true); } + void object::test<13>() { whitelist_test("www.example.com", "http://www.example.com", true); } // Check the "exactly the same" case template<> template<> - void object::test<15>() { whitelist_test("http://example.com", "http://example.com", true); } + void object::test<14>() { whitelist_test("http://example.com", "http://example.com", true); } // Check the enable flag template<> template<> - void object::test<16>() { whitelist_test(false, "www.example.com", "http://www.secondlife.com", true); } + void object::test<15>() { whitelist_test(false, "www.example.com", "http://www.secondlife.com", true); } template<> template<> - void object::test<17>() { whitelist_test(true, "www.example.com", "http://www.secondlife.com", false); } + void object::test<16>() { whitelist_test(true, "www.example.com", "http://www.secondlife.com", false); } // Check permutations of trailing slash: template<> template<> - void object::test<18>() { whitelist_test("http://www.example.com", "http://www.example.com/", true); } + void object::test<17>() { whitelist_test("http://www.example.com", "http://www.example.com/", true); } template<> template<> - void object::test<19>() { whitelist_test("http://www.example.com/", "http://www.example.com/", true); } + void object::test<18>() { whitelist_test("http://www.example.com/", "http://www.example.com/", true); } template<> template<> - void object::test<20>() { whitelist_test("http://www.example.com/", "http://www.example.com", false); } + void object::test<19>() { whitelist_test("http://www.example.com/", "http://www.example.com", false); } template<> template<> - void object::test<21>() { whitelist_test("http://www.example.com", "http://www.example.com/foobar", true); } + void object::test<20>() { whitelist_test("http://www.example.com", "http://www.example.com/foobar", true); } template<> template<> - void object::test<22>() { whitelist_test("http://www.example.com/", "http://www.example.com/foobar", false); } + void object::test<21>() { whitelist_test("http://www.example.com/", "http://www.example.com/foobar", false); } // More cases... template<> template<> - void object::test<23>() { whitelist_test("http://example.com", "http://example.com/wiki", true); } + void object::test<22>() { whitelist_test("http://example.com", "http://example.com/wiki", true); } template<> template<> - void object::test<24>() { whitelist_test("www.example.com", "http://www.example.com/help", true); } + void object::test<23>() { whitelist_test("www.example.com", "http://www.example.com/help", true); } template<> template<> - void object::test<25>() { whitelist_test("http://www.example.com", "http://wwwexample.com", false); } + void object::test<24>() { whitelist_test("http://www.example.com", "http://wwwexample.com", false); } template<> template<> - void object::test<26>() { whitelist_test("http://www.example.com", "http://www.example.com/wiki", true); } + void object::test<25>() { whitelist_test("http://www.example.com", "http://www.example.com/wiki", true); } template<> template<> - void object::test<27>() { whitelist_test("example.com", "http://wwwexample.com", false); } + void object::test<26>() { whitelist_test("example.com", "http://wwwexample.com", false); } template<> template<> - void object::test<28>() { whitelist_test("http://www.example.com/", "http://www.amazon.com/wiki", false); } + void object::test<27>() { whitelist_test("http://www.example.com/", "http://www.amazon.com/wiki", false); } template<> template<> - void object::test<29>() { whitelist_test("www.example.com", "http://www.amazon.com", false); } + void object::test<28>() { whitelist_test("www.example.com", "http://www.amazon.com", false); } // regexp cases template<> template<> - void object::test<30>() { whitelist_test("*.example.com", "http://www.example.com", true); } + void object::test<29>() { whitelist_test("*.example.com", "http://www.example.com", true); } template<> template<> - void object::test<31>() { whitelist_test("*.example.com", "http://www.amazon.com", false); } + void object::test<30>() { whitelist_test("*.example.com", "http://www.amazon.com", false); } template<> template<> - void object::test<32>() { whitelist_test("*.example.com", "http://www.example.com/foo/bar", true); } + void object::test<31>() { whitelist_test("*.example.com", "http://www.example.com/foo/bar", true); } template<> template<> - void object::test<33>() { whitelist_test("*.example.com", "http:/example.com/foo/bar", false); } + void object::test<32>() { whitelist_test("*.example.com", "http:/example.com/foo/bar", false); } template<> template<> - void object::test<34>() { whitelist_test("*example.com", "http://example.com/foo/bar", true); } + void object::test<33>() { whitelist_test("*example.com", "http://example.com/foo/bar", true); } template<> template<> - void object::test<35>() { whitelist_test("*example.com", "http://my.virus.com/foo/bar?example.com", false); } + void object::test<34>() { whitelist_test("*example.com", "http://my.virus.com/foo/bar?example.com", false); } template<> template<> - void object::test<36>() { whitelist_test("example.com", "http://my.virus.com/foo/bar?example.com", false); } + void object::test<35>() { whitelist_test("example.com", "http://my.virus.com/foo/bar?example.com", false); } template<> template<> - void object::test<37>() { whitelist_test("*example.com", "http://my.virus.com/foo/bar?*example.com", false); } + void object::test<36>() { whitelist_test("*example.com", "http://my.virus.com/foo/bar?*example.com", false); } template<> template<> - void object::test<38>() { whitelist_test("http://*example.com", "http://www.example.com", true); } + void object::test<37>() { whitelist_test("http://*example.com", "http://www.example.com", true); } template<> template<> - void object::test<39>() { whitelist_test("http://*.example.com", "http://www.example.com", true); } + void object::test<38>() { whitelist_test("http://*.example.com", "http://www.example.com", true); } template<> template<> - void object::test<40>() { whitelist_test("http://*.e$?^.com", "http://www.e$?^.com", true); } + void object::test<39>() { whitelist_test("http://*.e$?^.com", "http://www.e$?^.com", true); } template<> template<> - void object::test<41>() { whitelist_test("*.example.com/foo/bar", "http://www.example.com/", false); } + void object::test<40>() { whitelist_test("*.example.com/foo/bar", "http://www.example.com/", false); } template<> template<> - void object::test<42>() { whitelist_test("*.example.com/foo/bar", "http://example.com/foo/bar", false); } + void object::test<41>() { whitelist_test("*.example.com/foo/bar", "http://example.com/foo/bar", false); } template<> template<> - void object::test<43>() { whitelist_test("http://*.example.com/foo/bar", "http://www.example.com", false); } + void object::test<42>() { whitelist_test("http://*.example.com/foo/bar", "http://www.example.com", false); } template<> template<> - void object::test<44>() { whitelist_test("http://*.example.com", "https://www.example.com", false); } + void object::test<43>() { whitelist_test("http://*.example.com", "https://www.example.com", false); } template<> template<> - void object::test<45>() { whitelist_test("http*://*.example.com", "rtsp://www.example.com", false); } + void object::test<44>() { whitelist_test("http*://*.example.com", "rtsp://www.example.com", false); } template<> template<> - void object::test<46>() { whitelist_test("http*://*.example.com", "https://www.example.com", true); } + void object::test<45>() { whitelist_test("http*://*.example.com", "https://www.example.com", true); } template<> template<> - void object::test<47>() { whitelist_test("example.com", "http://www.example.com", false); } + void object::test<46>() { whitelist_test("example.com", "http://www.example.com", false); } template<> template<> - void object::test<48>() { whitelist_test("www.example.com", "http://www.example.com:80", false); } + void object::test<47>() { whitelist_test("www.example.com", "http://www.example.com:80", false); } template<> template<> - void object::test<49>() { whitelist_test("www.example.com", "http://www.example.com", true); } + void object::test<48>() { whitelist_test("www.example.com", "http://www.example.com", true); } template<> template<> - void object::test<50>() { whitelist_test("www.example.com/", "http://www.example.com", false); } + void object::test<49>() { whitelist_test("www.example.com/", "http://www.example.com", false); } template<> template<> - void object::test<51>() { whitelist_test("www.example.com/foo/bar/*", "http://www.example.com/foo/bar/baz", true); } + void object::test<50>() { whitelist_test("www.example.com/foo/bar/*", "http://www.example.com/foo/bar/baz", true); } // Path only template<> template<> - void object::test<52>() { whitelist_test("/foo/*/baz", "http://www.example.com/foo/bar/baz", true); } + void object::test<51>() { whitelist_test("/foo/*/baz", "http://www.example.com/foo/bar/baz", true); } template<> template<> - void object::test<53>() { whitelist_test("/foo/*/baz", "http://www.example.com/foo/bar/", false); } + void object::test<52>() { whitelist_test("/foo/*/baz", "http://www.example.com/foo/bar/", false); } } diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index 99aebbcb30..8c72b079ee 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -772,12 +772,6 @@ LLMultiFloater* LLFloater::getHost() return (LLMultiFloater*)mHostHandle.get(); } -void LLFloater::applySavedVariables() -{ - applyRectControl(); - applyDockState(); -} - void LLFloater::applyRectControl() { if (mRectControl.size() > 1) diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h index 95c8dd84f6..ef0d06a58e 100644 --- a/indra/llui/llfloater.h +++ b/indra/llui/llfloater.h @@ -280,9 +280,6 @@ public: protected: void setRectControl(const std::string& rectname) { mRectControl = rectname; }; - - virtual void applySavedVariables(); - void applyRectControl(); void applyDockState(); void storeRectControl(); diff --git a/indra/llui/llfloaterreg.cpp b/indra/llui/llfloaterreg.cpp index f8e07913fb..aca4dc56ee 100644 --- a/indra/llui/llfloaterreg.cpp +++ b/indra/llui/llfloaterreg.cpp @@ -134,7 +134,8 @@ LLFloater* LLFloaterReg::getInstance(const std::string& name, const LLSD& key) // Note: key should eventually be a non optional LLFloater arg; for now, set mKey to be safe res->mKey = key; res->setInstanceName(name); - res->applySavedVariables(); // Can't apply rect and dock state until setting instance name + res->applyRectControl(); // Can't apply rect control until setting instance name + res->applyDockState();//same... if (res->mAutoTile && !res->getHost() && index > 0) { const LLRect& cur_rect = res->getRect(); diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 643f89068f..e138b431c5 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -216,6 +216,7 @@ set(viewer_SOURCE_FILES llfloaterwhitelistentry.cpp llfloaterwindlight.cpp llfloaterworldmap.cpp + llfoldertype.cpp llfolderview.cpp llfolderviewitem.cpp llfollowcam.cpp @@ -316,7 +317,6 @@ set(viewer_SOURCE_FILES llpanelimcontrolpanel.cpp llpanelland.cpp llpanellandaudio.cpp - llpanellandmarkinfo.cpp llpanellandmarks.cpp llpanellandmedia.cpp llpanellogin.cpp @@ -337,7 +337,6 @@ set(viewer_SOURCE_FILES llpanelpicks.cpp llpanelplace.cpp llpanelplaceinfo.cpp - llpanelplaceprofile.cpp llpanelplaces.cpp llpanelplacestab.cpp llpanelprimmediacontrols.cpp @@ -437,14 +436,12 @@ set(viewer_SOURCE_FILES llvectorperfoptions.cpp llviewchildren.cpp llviewerassetstorage.cpp - llviewerassettype.cpp llvieweraudio.cpp llviewercamera.cpp llviewercontrol.cpp llviewercontrollistener.cpp llviewerdisplay.cpp llviewerfloaterreg.cpp - llviewerfoldertype.cpp llviewergenericmessage.cpp llviewergesture.cpp llviewerhelp.cpp @@ -705,6 +702,7 @@ set(viewer_HEADER_FILES llfloaterwhitelistentry.h llfloaterwindlight.h llfloaterworldmap.h + llfoldertype.h llfolderview.h llfoldervieweventlistener.h llfolderviewitem.h @@ -802,7 +800,6 @@ set(viewer_HEADER_FILES llpanelimcontrolpanel.h llpanelland.h llpanellandaudio.h - llpanellandmarkinfo.h llpanellandmarks.h llpanellandmedia.h llpanellogin.h @@ -823,7 +820,6 @@ set(viewer_HEADER_FILES llpanelpicks.h llpanelplace.h llpanelplaceinfo.h - llpanelplaceprofile.h llpanelplaces.h llpanelplacestab.h llpanelprimmediacontrols.h @@ -927,7 +923,6 @@ set(viewer_HEADER_FILES llvectorperfoptions.h llviewchildren.h llviewerassetstorage.h - llviewerassettype.h llvieweraudio.h llviewerbuild.h llviewercamera.h @@ -935,7 +930,6 @@ set(viewer_HEADER_FILES llviewercontrollistener.h llviewerdisplay.h llviewerfloaterreg.h - llviewerfoldertype.h llviewergenericmessage.h llviewergesture.h llviewerhelp.h diff --git a/indra/newview/app_settings/foldertypes.xml b/indra/newview/app_settings/foldertypes.xml index 0d539177f3..2038779c4f 100644 --- a/indra/newview/app_settings/foldertypes.xml +++ b/indra/newview/app_settings/foldertypes.xml @@ -1,61 +1,66 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <ensemble_defs> <ensemble - foldertype_num="27" + asset_num="-1" + xui_name="default" + icon_name="inv_plain_closed.tga" + /> + <ensemble + asset_num="27" xui_name="head" icon_name="inv_folder_outfit_head.tga" allowed="hair,eyes" /> <ensemble - foldertype_num="28" + asset_num="28" xui_name="gloves" icon_name="inv_folder_outfit_gloves.tga" allowed="gloves" /> <ensemble - foldertype_num="29" + asset_num="29" xui_name="jacket" icon_name="inv_folder_outfit_jacket.tga" allowed="jacket" /> <ensemble - foldertype_num="30" + asset_num="30" xui_name="pants" icon_name="inv_folder_outfit_pants.tga" allowed="pants,underpants" /> <ensemble - foldertype_num="31" + asset_num="31" xui_name="shape" icon_name="inv_folder_outfit_shape.tga" allowed="shape,skin,hair,eyes" /> <ensemble - foldertype_num="32" + asset_num="32" xui_name="shoes" icon_name="inv_folder_outfit_shoes.tga" allowed="shoes,socks" /> <ensemble - foldertype_num="33" + asset_num="33" xui_name="shirt" icon_name="inv_folder_outfit_shirt.tga" allowed="shirt,undershirt" /> <ensemble - foldertype_num="34" + asset_num="34" xui_name="skirt" icon_name="inv_folder_outfit_skirt.tga" allowed="" /> <ensemble - foldertype_num="35" + asset_num="35" xui_name="underpants" icon_name="inv_folder_outfit_underpants.tga" allowed="underpants" /> <ensemble - foldertype_num="36" + asset_num="36" xui_name="undershirt" icon_name="inv_folder_outfit_undershirt.tga" allowed="undershirt" diff --git a/indra/newview/llagentpicksinfo.cpp b/indra/newview/llagentpicksinfo.cpp index 3c8d0dac42..6e5835bace 100644 --- a/indra/newview/llagentpicksinfo.cpp +++ b/indra/newview/llagentpicksinfo.cpp @@ -47,8 +47,7 @@ public: ~LLAgentPicksObserver() { - if (LLAvatarPropertiesProcessor::instanceExists()) - LLAvatarPropertiesProcessor::getInstance()->removeObserver(gAgent.getID(), this); + LLAvatarPropertiesProcessor::getInstance()->removeObserver(gAgent.getID(), this); } void sendAgentPicksRequest() diff --git a/indra/newview/llagentui.cpp b/indra/newview/llagentui.cpp index 2911a35581..09f7c49f23 100644 --- a/indra/newview/llagentui.cpp +++ b/indra/newview/llagentui.cpp @@ -92,10 +92,7 @@ std::string LLAgentUI::buildSLURL(const bool escaped /*= true*/) //static BOOL LLAgentUI::checkAgentDistance(const LLVector3& pole, F32 radius) { - F32 delta_x = gAgent.getPositionAgent().mV[VX] - pole.mV[VX]; - F32 delta_y = gAgent.getPositionAgent().mV[VY] - pole.mV[VY]; - - return sqrt( delta_x* delta_x + delta_y* delta_y ) < radius; + return (gAgent.getPositionAgent() - pole).length() < radius; } BOOL LLAgentUI::buildLocationString(std::string& str, ELocationFormat fmt,const LLVector3& agent_pos_region) { diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp index 8c76a219a0..4b3d27767c 100644 --- a/indra/newview/llagentwearables.cpp +++ b/indra/newview/llagentwearables.cpp @@ -434,7 +434,7 @@ void LLAgentWearables::saveWearableAs(const EWearableType type, if (save_in_lost_and_found) { category_id = gInventory.findCategoryUUIDForType( - LLFolderType::FT_LOST_AND_FOUND); + LLAssetType::AT_LOST_AND_FOUND); } else { @@ -840,7 +840,7 @@ void LLAgentWearables::processAgentInitialWearablesUpdate(LLMessageSystem* mesgs } // Get the UUID of the current outfit folder (will be created if it doesn't exist) - const LLUUID current_outfit_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT); + LLUUID current_outfit_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT); LLInitialWearablesFetch* outfit = new LLInitialWearablesFetch(); @@ -981,7 +981,8 @@ void LLAgentWearables::recoverMissingWearable(const EWearableType type, U32 inde // Add a new one in the lost and found folder. // (We used to overwrite the "not found" one, but that could potentially // destory content.) JC - const LLUUID lost_and_found_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND); + LLUUID lost_and_found_id = + gInventory.findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND); LLPointer<LLInventoryCallback> cb = new addWearableToAgentInventoryCallback( LLPointer<LLRefCount>(NULL), @@ -1122,8 +1123,8 @@ void LLAgentWearables::makeNewOutfit(const std::string& new_folder_name, // First, make a folder in the Clothes directory. LLUUID folder_id = gInventory.createNewCategory( - gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING), - LLFolderType::FT_NONE, + gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING), + LLAssetType::AT_NONE, new_folder_name); bool found_first_item = false; @@ -1256,10 +1257,10 @@ LLUUID LLAgentWearables::makeNewOutfitLinks(const std::string& new_folder_name) } // First, make a folder in the My Outfits directory. - const LLUUID parent_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS); + LLUUID parent_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_MY_OUTFITS); LLUUID folder_id = gInventory.createNewCategory( parent_id, - LLFolderType::FT_OUTFIT, + LLAssetType::AT_OUTFIT, new_folder_name); LLAppearanceManager::shallowCopyCategory(LLAppearanceManager::getCOF(),folder_id, NULL); @@ -2031,7 +2032,7 @@ void LLInitialWearablesFetch::processWearablesMessage() { if (!mAgentInitialWearables.empty()) // We have an empty current outfit folder, use the message data instead. { - const LLUUID current_outfit_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT); + LLUUID current_outfit_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT); for (U8 i = 0; i < mAgentInitialWearables.size(); ++i) { // Populate the current outfit folder with links to the wearables passed in the message diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 80086de3dc..8d0f11e021 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -130,11 +130,11 @@ void LLOutfitObserver::done() { if(LLInventoryType::IT_GESTURE == item->getInventoryType()) { - pid = gInventory.findCategoryUUIDForType(LLFolderType::FT_GESTURE); + pid = gInventory.findCategoryUUIDForType(LLAssetType::AT_GESTURE); } else { - pid = gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING); + pid = gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING); } break; } @@ -146,7 +146,7 @@ void LLOutfitObserver::done() LLUUID cat_id = gInventory.createNewCategory( pid, - LLFolderType::FT_NONE, + LLAssetType::AT_NONE, name); mCatID = cat_id; LLPointer<LLInventoryCallback> cb = new LLWearInventoryCategoryCallback(mCatID, mAppend); @@ -353,7 +353,7 @@ void removeDuplicateItems(LLInventoryModel::item_array_t& dst, const LLInventory /* static */ LLUUID LLAppearanceManager::getCOF() { - return gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT); + return gInventory.findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT); } // Update appearance from outfit folder. @@ -373,12 +373,12 @@ void LLAppearanceManager::changeOutfit(bool proceed, const LLUUID& category, boo else { LLViewerInventoryCategory* catp = gInventory.getCategory(category); - if (catp->getPreferredType() == LLFolderType::FT_NONE || - LLFolderType::lookupIsEnsembleType(catp->getPreferredType())) + if (catp->getPreferredType() == LLAssetType::AT_NONE || + LLAssetType::lookupIsEnsembleCategoryType(catp->getPreferredType())) { updateCOFFromCategory(category, append); // append is false - rebuild COF. } - else if (catp->getPreferredType() == LLFolderType::FT_OUTFIT) + else if (catp->getPreferredType() == LLAssetType::AT_OUTFIT) { rebuildCOFFromOutfit(category); } @@ -405,7 +405,7 @@ void LLAppearanceManager::updateCOFFromCategory(const LLUUID& category, bool app return; } - const LLUUID current_outfit_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT); + const LLUUID ¤t_outfit_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT); // Processes that take time should show the busy cursor //inc_busy_count(); @@ -503,7 +503,7 @@ void LLAppearanceManager::shallowCopyCategory(const LLUUID& src_id, const LLUUID { LLViewerInventoryCategory *catp = item->getLinkedCategory(); // Skip copying outfit links. - if (catp && catp->getPreferredType() != LLFolderType::FT_OUTFIT) + if (catp && catp->getPreferredType() != LLAssetType::AT_OUTFIT) { link_inventory_item(gAgent.getID(), item->getLinkedUUID(), @@ -641,7 +641,7 @@ void LLAppearanceManager::shallowCopyCategory(const LLUUID& src_id, const LLUUID // Add link to outfit if category is an outfit. LLViewerInventoryCategory* catp = gInventory.getCategory(category); - if (!append && catp && catp->getPreferredType() == LLFolderType::FT_OUTFIT) + if (!append && catp && catp->getPreferredType() == LLAssetType::AT_OUTFIT) { link_inventory_item(gAgent.getID(), category, cof, catp->getName(), LLAssetType::AT_LINK_FOLDER, link_waiter); @@ -732,7 +732,7 @@ void LLAppearanceManager::rebuildCOFFromOutfit(const LLUUID& category) LLNotifications::instance().add("CouldNotPutOnOutfit"); return; } - + // Processes that take time should show the busy cursor //inc_busy_count(); @@ -750,7 +750,7 @@ void LLAppearanceManager::rebuildCOFFromOutfit(const LLUUID& category) // Create a link to the outfit that we wore. LLViewerInventoryCategory* catp = gInventory.getCategory(category); - if (catp && catp->getPreferredType() == LLFolderType::FT_OUTFIT) + if (catp && catp->getPreferredType() == LLAssetType::AT_OUTFIT) { link_inventory_item(gAgent.getID(), category, current_outfit_id, catp->getName(), LLAssetType::AT_LINK_FOLDER, link_waiter); diff --git a/indra/newview/llassetuploadresponders.cpp b/indra/newview/llassetuploadresponders.cpp index d4df6dfbe7..5dbf57c9be 100644 --- a/indra/newview/llassetuploadresponders.cpp +++ b/indra/newview/llassetuploadresponders.cpp @@ -334,7 +334,7 @@ void LLNewAgentInventoryResponder::uploadComplete(const LLSD& content) LLAssetStorage::LLStoreAssetCallback callback = NULL; void *userdata = NULL; upload_new_resource(next_file, asset_name, asset_name, - 0, LLFolderType::FT_NONE, LLInventoryType::IT_NONE, + 0, LLAssetType::AT_NONE, LLInventoryType::IT_NONE, next_owner_perms, group_perms, everyone_perms, display_name, callback, expected_upload_cost, userdata); diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp index 97e0aa5f46..2f67401301 100644 --- a/indra/newview/llavataractions.cpp +++ b/indra/newview/llavataractions.cpp @@ -343,7 +343,7 @@ bool LLAvatarActions::callbackAddFriend(const LLSD& notification, const LLSD& re // Servers older than 1.25 require the text of the message to be the // calling card folder ID for the offering user. JC LLUUID calling_card_folder_id = - gInventory.findCategoryUUIDForType(LLFolderType::FT_CALLINGCARD); + gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD); std::string message = calling_card_folder_id.asString(); requestFriendship(notification["payload"]["id"].asUUID(), notification["payload"]["name"].asString(), @@ -355,7 +355,7 @@ bool LLAvatarActions::callbackAddFriend(const LLSD& notification, const LLSD& re // static void LLAvatarActions::requestFriendship(const LLUUID& target_id, const std::string& target_name, const std::string& message) { - const LLUUID calling_card_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CALLINGCARD); + LLUUID calling_card_folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD); send_improved_im(target_id, target_name, message, diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp index 8609ba8b1c..7b2dc02864 100644 --- a/indra/newview/llavatarlist.cpp +++ b/indra/newview/llavatarlist.cpp @@ -239,46 +239,11 @@ void LLAvatarList::refresh() bool dirty = add_limit_exceeded || (have_filter && !have_names); setDirty(dirty); - // Refreshed all items, lets send refresh_complete signal. - if(!dirty) - { - std::vector<LLSD> cur_values; - getValues(cur_values); - mRefreshCompleteSignal(this, LLSD((S32)cur_values.size())); - } - // Commit if we've added/removed items. if (modified) onCommit(); } -bool LLAvatarList::filterHasMatches() -{ - uuid_vector_t values = getIDs(); - - for (uuid_vector_t::const_iterator it=values.begin(); it != values.end(); it++) - { - std::string name; - const LLUUID& buddy_id = *it; - BOOL have_name = gCacheName->getFullName(buddy_id, name); - - // If name has not been loaded yet we consider it as a match. - // When the name will be loaded the filter will be applied again(in refresh()). - - if (have_name && !findInsensitive(name, mNameFilter)) - { - continue; - } - - return true; - } - return false; -} - -boost::signals2::connection LLAvatarList::setRefreshCompleteCallback(const commit_signal_t::slot_type& cb) -{ - return mRefreshCompleteSignal.connect(cb); -} void LLAvatarList::addNewItem(const LLUUID& id, const std::string& name, BOOL is_online, EAddPosition pos) { diff --git a/indra/newview/llavatarlist.h b/indra/newview/llavatarlist.h index 195d9e5b55..51d3760d39 100644 --- a/indra/newview/llavatarlist.h +++ b/indra/newview/llavatarlist.h @@ -82,11 +82,6 @@ public: const std::string getIconParamName() const{return mIconParamName;} virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); - // Return true if filter has at least one match. - bool filterHasMatches(); - - boost::signals2::connection setRefreshCompleteCallback(const commit_signal_t::slot_type& cb); - protected: void refresh(); @@ -112,8 +107,6 @@ private: uuid_vector_t mIDs; LLAvatarListItem::ContextMenu* mContextMenu; - - commit_signal_t mRefreshCompleteSignal; }; /** Abstract comparator for avatar items */ diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp index b9e8c5394d..bad61101c1 100644 --- a/indra/newview/llchiclet.cpp +++ b/indra/newview/llchiclet.cpp @@ -51,7 +51,7 @@ #include "lltransientfloatermgr.h" static LLDefaultChildRegistry::Register<LLChicletPanel> t1("chiclet_panel"); -static LLDefaultChildRegistry::Register<LLTalkButton> t2("talk_button"); +static LLDefaultChildRegistry::Register<LLTalkButton> t2("chiclet_talk"); static LLDefaultChildRegistry::Register<LLNotificationChiclet> t3("chiclet_notification"); static LLDefaultChildRegistry::Register<LLIMP2PChiclet> t4("chiclet_im_p2p"); static LLDefaultChildRegistry::Register<LLIMGroupChiclet> t5("chiclet_im_group"); @@ -830,21 +830,13 @@ LLChicletPanel::~LLChicletPanel() void im_chiclet_callback(LLChicletPanel* panel, const LLSD& data){ LLUUID session_id = data["session_id"].asUUID(); - S32 unread = data["num_unread"].asInteger(); - - LLIMFloater* im_floater = LLIMFloater::findInstance(session_id); - if (im_floater && im_floater->getVisible()) - { - unread = 0; - } - std::list<LLChiclet*> chiclets = LLIMChiclet::sFindChicletsSignal(session_id); std::list<LLChiclet *>::iterator iter; for (iter = chiclets.begin(); iter != chiclets.end(); iter++) { LLChiclet* chiclet = *iter; if (chiclet != NULL) { - chiclet->setCounter(unread); + chiclet->setCounter(data["num_unread"].asInteger()); } else { @@ -1265,7 +1257,30 @@ LLTalkButton::Params::Params() , show_button("show_button") , monitor("monitor") { - // See widgets/talk_button.xml + // *TODO Vadim: move hardcoded labels (!) and other params to XUI. + speak_button.name("left"); + speak_button.label("Speak"); + speak_button.label_selected("Speak"); + speak_button.font(LLFontGL::getFontSansSerifSmall()); + speak_button.tab_stop(false); + speak_button.is_toggle(true); + speak_button.picture_style(true); + // Use default button art. JC + //speak_button.image_selected(LLUI::getUIImage("SegmentedBtn_Left_Selected")); + //speak_button.image_unselected(LLUI::getUIImage("SegmentedBtn_Left_Off")); + + show_button.name("right"); + show_button.label(LLStringUtil::null); + show_button.rect(LLRect(0, 0, 20, 0)); + show_button.tab_stop(false); + show_button.is_toggle(true); + show_button.picture_style(true); + show_button.image_selected(LLUI::getUIImage("ComboButton_Selected")); + show_button.image_unselected(LLUI::getUIImage("ComboButton_Off")); + + monitor.name("monitor"); + // *TODO: Make this data driven. + monitor.rect(LLRect(0, 18, 18, 0)); } LLTalkButton::LLTalkButton(const Params& p) @@ -1321,7 +1336,6 @@ LLTalkButton::LLTalkButton(const Params& p) // never show "muted" because you can't mute yourself mOutputMonitor->setIsMuted(false); - mOutputMonitor->setIsAgentControl(true); } LLTalkButton::~LLTalkButton() diff --git a/indra/newview/llcolorswatch.cpp b/indra/newview/llcolorswatch.cpp index 7b75c77a1e..ed304bdd34 100644 --- a/indra/newview/llcolorswatch.cpp +++ b/indra/newview/llcolorswatch.cpp @@ -228,7 +228,8 @@ void LLColorSwatchCtrl::draw() { if (!mFallbackImageName.empty()) { - LLPointer<LLViewerTexture> fallback_image = LLViewerTextureManager::getFetchedTextureFromFile(mFallbackImageName, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE); + LLPointer<LLViewerTexture> fallback_image = LLViewerTextureManager::getFetchedTextureFromFile(mFallbackImageName, TRUE, + LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE); if( fallback_image->getComponents() == 4 ) { gl_rect_2d_checkerboard( interior ); diff --git a/indra/newview/lldrawpoolbump.cpp b/indra/newview/lldrawpoolbump.cpp index e087feeaec..5f845c3721 100644 --- a/indra/newview/lldrawpoolbump.cpp +++ b/indra/newview/lldrawpoolbump.cpp @@ -144,7 +144,7 @@ void LLStandardBumpmap::restoreGL() gStandardBumpmapList[LLStandardBumpmap::sStandardBumpmapCount].mImage = LLViewerTextureManager::getFetchedTexture(LLUUID(bump_image_id), TRUE, - FALSE, + LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0); diff --git a/indra/newview/lldrawpoolterrain.cpp b/indra/newview/lldrawpoolterrain.cpp index 790e75cfaa..9dc22cddcd 100644 --- a/indra/newview/lldrawpoolterrain.cpp +++ b/indra/newview/lldrawpoolterrain.cpp @@ -72,7 +72,7 @@ LLDrawPoolTerrain::LLDrawPoolTerrain(LLViewerTexture *texturep) : sDetailScale = 1.f/gSavedSettings.getF32("RenderTerrainScale"); sDetailMode = gSavedSettings.getS32("RenderTerrainDetail"); mAlphaRampImagep = LLViewerTextureManager::getFetchedTextureFromFile("alpha_gradient.tga", - TRUE, TRUE, + TRUE, LLViewerTexture::BOOST_UI, LLViewerTexture::FETCHED_TEXTURE, GL_ALPHA8, GL_ALPHA, LLUUID("e97cf410-8e61-7005-ec06-629eba4cd1fb")); @@ -81,7 +81,7 @@ LLDrawPoolTerrain::LLDrawPoolTerrain(LLViewerTexture *texturep) : mAlphaRampImagep->setAddressMode(LLTexUnit::TAM_CLAMP); m2DAlphaRampImagep = LLViewerTextureManager::getFetchedTextureFromFile("alpha_gradient_2d.j2c", - TRUE, TRUE, + TRUE, LLViewerTexture::BOOST_UI, LLViewerTexture::FETCHED_TEXTURE, GL_ALPHA8, GL_ALPHA, LLUUID("38b86f85-2575-52a9-a531-23108d8da837")); diff --git a/indra/newview/lldrawpoolwater.cpp b/indra/newview/lldrawpoolwater.cpp index 21e17cc207..107de934df 100644 --- a/indra/newview/lldrawpoolwater.cpp +++ b/indra/newview/lldrawpoolwater.cpp @@ -69,11 +69,11 @@ LLVector3 LLDrawPoolWater::sLightDir; LLDrawPoolWater::LLDrawPoolWater() : LLFacePool(POOL_WATER) { - mHBTex[0] = LLViewerTextureManager::getFetchedTexture(gSunTextureID, TRUE, TRUE); + mHBTex[0] = LLViewerTextureManager::getFetchedTexture(gSunTextureID, TRUE, LLViewerTexture::BOOST_UI); gGL.getTexUnit(0)->bind(mHBTex[0]) ; mHBTex[0]->setAddressMode(LLTexUnit::TAM_CLAMP); - mHBTex[1] = LLViewerTextureManager::getFetchedTexture(gMoonTextureID, TRUE, TRUE); + mHBTex[1] = LLViewerTextureManager::getFetchedTexture(gMoonTextureID, TRUE, LLViewerTexture::BOOST_UI); gGL.getTexUnit(0)->bind(mHBTex[1]); mHBTex[1]->setAddressMode(LLTexUnit::TAM_CLAMP); diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index 09b3ce1e86..8ec448e281 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -515,8 +515,8 @@ void LLFace::renderSelected(LLViewerTexture *imagep, const LLColor4& color) /* removed in lieu of raycast uv detection void LLFace::renderSelectedUV() { - LLViewerTexture* red_blue_imagep = LLViewerTextureManager::getFetchedTextureFromFile("uv_test1.j2c", TRUE, TRUE); - LLViewerTexture* green_imagep = LLViewerTextureManager::getFetchedTextureFromFile("uv_test2.tga", TRUE, TRUE); + LLViewerTexture* red_blue_imagep = LLViewerTextureManager::getFetchedTextureFromFile("uv_test1.j2c", TRUE, LLViewerTexture::BOOST_UI); + LLViewerTexture* green_imagep = LLViewerTextureManager::getFetchedTextureFromFile("uv_test2.tga", TRUE, LLViewerTexture::BOOST_UI); LLGLSUVSelect object_select; diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp index a3980457b9..a6afbc05be 100644 --- a/indra/newview/llfavoritesbar.cpp +++ b/indra/newview/llfavoritesbar.cpp @@ -437,7 +437,7 @@ BOOL LLFavoritesBarCtrl::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, } else { - const LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE); + LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE); if (item->getParentUUID() == favorites_id) { llwarns << "Attemt to copy a favorite item into the same folder." << llendl; @@ -539,7 +539,7 @@ void LLFavoritesBarCtrl::handleNewFavoriteDragAndDrop(LLInventoryItem *item, con LLToolDragAndDrop* tool_dad = LLToolDragAndDrop::getInstance(); if (tool_dad->getSource() == LLToolDragAndDrop::SOURCE_NOTECARD) { - viewer_item->setType(LLAssetType::AT_LANDMARK); + viewer_item->setType(LLAssetType::AT_FAVORITE); copy_inventory_from_notecard(tool_dad->getObjectID(), tool_dad->getSourceID(), viewer_item.get(), gInventoryCallbacks.registerCB(cb)); } else @@ -561,7 +561,7 @@ void LLFavoritesBarCtrl::changed(U32 mask) { if (mFavoriteFolderId.isNull()) { - mFavoriteFolderId = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE); + mFavoriteFolderId = gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE); if (mFavoriteFolderId.notNull()) { diff --git a/indra/newview/llfloateranimpreview.cpp b/indra/newview/llfloateranimpreview.cpp index 095fe0a220..55b7ed0c99 100644 --- a/indra/newview/llfloateranimpreview.cpp +++ b/indra/newview/llfloateranimpreview.cpp @@ -989,7 +989,7 @@ void LLFloaterAnimPreview::onBtnOK(void* userdata) name, desc, 0, - LLFolderType::FT_NONE, + LLAssetType::AT_NONE, LLInventoryType::IT_ANIMATION, LLFloaterPerms::getNextOwnerPerms(), LLFloaterPerms::getGroupPerms(), LLFloaterPerms::getEveryonePerms(), name, diff --git a/indra/newview/llfloaterbulkpermission.cpp b/indra/newview/llfloaterbulkpermission.cpp index 538b44c056..7cb8987879 100644 --- a/indra/newview/llfloaterbulkpermission.cpp +++ b/indra/newview/llfloaterbulkpermission.cpp @@ -264,6 +264,7 @@ void LLFloaterBulkPermission::handleInventory(LLViewerObject* viewer_obj, Invent ( asstype == LLAssetType::AT_BODYPART && gSavedSettings.getBOOL("BulkChangeIncludeBodyParts" )) || ( asstype == LLAssetType::AT_CLOTHING && gSavedSettings.getBOOL("BulkChangeIncludeClothing" )) || ( asstype == LLAssetType::AT_GESTURE && gSavedSettings.getBOOL("BulkChangeIncludeGestures" )) || + ( asstype == LLAssetType::AT_FAVORITE && gSavedSettings.getBOOL("BulkChangeIncludeFavourite" )) || ( asstype == LLAssetType::AT_NOTECARD && gSavedSettings.getBOOL("BulkChangeIncludeNotecards" )) || ( asstype == LLAssetType::AT_OBJECT && gSavedSettings.getBOOL("BulkChangeIncludeObjects" )) || ( asstype == LLAssetType::AT_LSL_TEXT && gSavedSettings.getBOOL("BulkChangeIncludeScripts" )) || diff --git a/indra/newview/llfloaterbuy.cpp b/indra/newview/llfloaterbuy.cpp index cefd7a3808..3da06fa7b3 100644 --- a/indra/newview/llfloaterbuy.cpp +++ b/indra/newview/llfloaterbuy.cpp @@ -293,7 +293,7 @@ void LLFloaterBuy::onClickBuy() { // Put the items where we put new folders. LLUUID category_id; - category_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_OBJECT); + category_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_OBJECT); // *NOTE: doesn't work for multiple object buy, which UI does not // currently support sale info is used for verification only, if diff --git a/indra/newview/llfloaterbuycontents.cpp b/indra/newview/llfloaterbuycontents.cpp index 32802f6a20..f3eaa0c916 100644 --- a/indra/newview/llfloaterbuycontents.cpp +++ b/indra/newview/llfloaterbuycontents.cpp @@ -286,7 +286,7 @@ void LLFloaterBuyContents::onClickBuy() // Put the items where we put new folders. LLUUID category_id; - category_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CATEGORY); + category_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CATEGORY); // *NOTE: doesn't work for multiple object buy, which UI does not // currently support sale info is used for verification only, if diff --git a/indra/newview/llfloaterinventory.cpp b/indra/newview/llfloaterinventory.cpp index 92778510e7..8570b5eb4a 100644 --- a/indra/newview/llfloaterinventory.cpp +++ b/indra/newview/llfloaterinventory.cpp @@ -40,7 +40,6 @@ #include "llinventorymodel.h" #include "llpanelmaininventory.h" #include "llresmgr.h" -#include "llviewerfoldertype.h" ///---------------------------------------------------------------------------- /// LLFloaterInventory diff --git a/indra/newview/llfloaterinventory.h b/indra/newview/llfloaterinventory.h index c0de89bff2..f2f2963a33 100644 --- a/indra/newview/llfloaterinventory.h +++ b/indra/newview/llfloaterinventory.h @@ -35,7 +35,6 @@ #define LL_LLFLOATERINVENTORY_H #include "llfloater.h" -#include "llfoldertype.h" class LLInventoryPanel; class LLPanelMainInventory; diff --git a/indra/newview/llfloaternamedesc.cpp b/indra/newview/llfloaternamedesc.cpp index b7296518d4..ed7d2c71ea 100644 --- a/indra/newview/llfloaternamedesc.cpp +++ b/indra/newview/llfloaternamedesc.cpp @@ -176,7 +176,7 @@ void LLFloaterNameDesc::onBtnOK( ) upload_new_resource(mFilenameAndPath, // file childGetValue("name_form").asString(), childGetValue("description_form").asString(), - 0, LLFolderType::FT_NONE, LLInventoryType::IT_NONE, + 0, LLAssetType::AT_NONE, LLInventoryType::IT_NONE, LLFloaterPerms::getNextOwnerPerms(), LLFloaterPerms::getGroupPerms(), LLFloaterPerms::getEveryonePerms(), display_name, callback, expected_upload_cost, nruserdata); closeFloater(false); diff --git a/indra/newview/llfloateropenobject.cpp b/indra/newview/llfloateropenobject.cpp index e277aba493..b6ec0868cf 100644 --- a/indra/newview/llfloateropenobject.cpp +++ b/indra/newview/llfloateropenobject.cpp @@ -158,14 +158,14 @@ void LLFloaterOpenObject::moveToInventory(bool wear) if (wear) { parent_category_id = gInventory.findCategoryUUIDForType( - LLFolderType::FT_CLOTHING); + LLAssetType::AT_CLOTHING); } else { parent_category_id = gInventory.getRootFolderID(); } LLUUID category_id = gInventory.createNewCategory(parent_category_id, - LLFolderType::FT_NONE, + LLAssetType::AT_NONE, name); LLCatAndWear* data = new LLCatAndWear; diff --git a/indra/newview/llfloaterreporter.cpp b/indra/newview/llfloaterreporter.cpp index b146ed9b38..ad2fe34e95 100644 --- a/indra/newview/llfloaterreporter.cpp +++ b/indra/newview/llfloaterreporter.cpp @@ -770,7 +770,7 @@ void LLFloaterReporter::takeScreenshot() if (COMPLAINT_REPORT == mReportType) { mResourceDatap->mAssetInfo.mType = LLAssetType::AT_TEXTURE; - mResourceDatap->mPreferredLocation = LLFolderType::EType(LLResourceData::INVALID_LOCATION); + mResourceDatap->mPreferredLocation = LLAssetType::EType(-2); } else { @@ -789,7 +789,7 @@ void LLFloaterReporter::takeScreenshot() // store in the image list so it doesn't try to fetch from the server LLPointer<LLViewerFetchedTexture> image_in_list = - LLViewerTextureManager::getFetchedTexture(mResourceDatap->mAssetInfo.mUuid, TRUE, FALSE, LLViewerTexture::FETCHED_TEXTURE); + LLViewerTextureManager::getFetchedTexture(mResourceDatap->mAssetInfo.mUuid, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::FETCHED_TEXTURE); image_in_list->createGLTexture(0, raw); // the texture picker then uses that texture @@ -838,7 +838,7 @@ void LLFloaterReporter::uploadDoneCallback(const LLUUID &uuid, void *user_data, } EReportType report_type = UNKNOWN_REPORT; - if (data->mPreferredLocation == LLResourceData::INVALID_LOCATION) + if (data->mPreferredLocation == -2) { report_type = COMPLAINT_REPORT; } diff --git a/indra/newview/llfloaterscriptdebug.cpp b/indra/newview/llfloaterscriptdebug.cpp index 3bf1848efb..eeea71cc4c 100644 --- a/indra/newview/llfloaterscriptdebug.cpp +++ b/indra/newview/llfloaterscriptdebug.cpp @@ -106,7 +106,7 @@ void LLFloaterScriptDebug::addScriptLine(const std::string &utf8mesg, const std: if (objectp) { - objectp->setIcon(LLViewerTextureManager::getFetchedTextureFromFile("script_error.j2c", TRUE, TRUE)); + objectp->setIcon(LLViewerTextureManager::getFetchedTextureFromFile("script_error.j2c", TRUE, LLViewerTexture::BOOST_UI)); floater_label = llformat("%s(%.2f, %.2f)", user_name.c_str(), objectp->getPositionRegion().mV[VX], objectp->getPositionRegion().mV[VY]); } else diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp index 541e2a2664..235e819218 100644 --- a/indra/newview/llfloatersnapshot.cpp +++ b/indra/newview/llfloatersnapshot.cpp @@ -980,7 +980,7 @@ void LLSnapshotLivePreview::saveTexture() "Snapshot : " + pos_string, "Taken by " + who_took_it + " at " + pos_string, 0, - LLFolderType::FT_SNAPSHOT_CATEGORY, + LLAssetType::AT_SNAPSHOT_CATEGORY, LLInventoryType::IT_SNAPSHOT, PERM_ALL, // Note: Snapshots to inventory is a special case of content upload PERM_NONE, // that ignores the user's premissions preferences and continues to diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp index 6567c1a649..f3f600149f 100644 --- a/indra/newview/llfloaterworldmap.cpp +++ b/indra/newview/llfloaterworldmap.cpp @@ -327,7 +327,7 @@ void LLFloaterWorldMap::onOpen(const LLSD& key) LLFirstUse::useMap(); // Start speculative download of landmarks - const LLUUID landmark_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK); + LLUUID landmark_folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK); gInventory.startBackgroundFetch(landmark_folder_id); childSetFocus("location", TRUE); diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp index 7863c373c6..a963c96da4 100644 --- a/indra/newview/llfolderview.cpp +++ b/indra/newview/llfolderview.cpp @@ -55,7 +55,6 @@ #include "llviewermenu.h" #include "lluictrlfactory.h" #include "llviewercontrol.h" -#include "llviewerfoldertype.h" #include "llviewerwindow.h" #include "llvoavatar.h" #include "llfloaterproperties.h" @@ -1109,7 +1108,7 @@ void LLFolderView::propertiesSelectedItems( void ) } } -void LLFolderView::changeType(LLInventoryModel *model, LLFolderType::EType new_folder_type) +void LLFolderView::changeType(LLInventoryModel *model, LLAssetType::EType new_folder_type) { LLFolderBridge *folder_bridge = LLFolderBridge::sSelf; @@ -1959,7 +1958,7 @@ bool LLFolderView::doToSelected(LLInventoryModel* model, const LLSD& userdata) if (action.length() > change_folder_string.length() && (action.compare(0,change_folder_string.length(),"change_folder_type_") == 0)) { - LLFolderType::EType new_folder_type = LLViewerFolderType::lookupTypeFromXUIName(action.substr(change_folder_string.length())); + LLAssetType::EType new_folder_type = LLFolderType::lookupTypeFromXUIName(action.substr(change_folder_string.length())); changeType(model, new_folder_type); return true; } diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h index 0bd65b5f90..ebfb4efde2 100644 --- a/indra/newview/llfolderview.h +++ b/indra/newview/llfolderview.h @@ -192,7 +192,7 @@ public: void propertiesSelectedItems( void ); // change the folder type - void changeType(LLInventoryModel *model, LLFolderType::EType new_folder_type); + void changeType(LLInventoryModel *model, LLAssetType::EType new_folder_type); void autoOpenItem(LLFolderViewFolder* item); void closeAutoOpenedFolders(); diff --git a/indra/newview/llfoldervieweventlistener.h b/indra/newview/llfoldervieweventlistener.h index 60ece75cea..ff38da279a 100644 --- a/indra/newview/llfoldervieweventlistener.h +++ b/indra/newview/llfoldervieweventlistener.h @@ -32,7 +32,6 @@ #define LLFOLDERVIEWEVENTLISTENER_H #include "lldarray.h" // JAMESDEBUG convert to std::vector -#include "llfoldertype.h" #include "llfontgl.h" // just for StyleFlags enum #include "llpointer.h" @@ -58,7 +57,7 @@ public: virtual const LLUUID& getUUID() const = 0; virtual time_t getCreationDate() const = 0; // UTC seconds virtual PermissionMask getPermissionMask() const = 0; - virtual LLFolderType::EType getPreferredType() const = 0; + virtual LLAssetType::EType getPreferredType() const = 0; virtual LLPointer<LLUIImage> getIcon() const = 0; virtual LLFontGL::StyleFlags getLabelStyle() const = 0; virtual std::string getLabelSuffix() const = 0; diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp index 6fdaefd21a..f83a426cda 100644 --- a/indra/newview/llfolderviewitem.cpp +++ b/indra/newview/llfolderviewitem.cpp @@ -248,13 +248,13 @@ void LLFolderViewItem::refreshFromListener() if(mListener) { mLabel = mListener->getDisplayName(); - LLFolderType::EType preferred_type = mListener->getPreferredType(); + LLAssetType::EType preferred_type = mListener->getPreferredType(); // *TODO: to be removed when database supports multi language. This is a // temporary attempt to display the inventory folder in the user locale. // mantipov: *NOTE: be sure this code is synchronized with LLFriendCardsManager::findChildFolderUUID // it uses the same way to find localized string - if (LLFolderType::lookupIsProtectedType(preferred_type)) + if (LLAssetType::lookupIsProtectedCategoryType(preferred_type)) { LLTrans::findString(mLabel, "InvFolder " + mLabel); }; @@ -1753,7 +1753,7 @@ bool LLFolderViewFolder::isTrash() const { if (mAmTrash == LLFolderViewFolder::UNKNOWN) { - mAmTrash = mListener->getUUID() == gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH, false) ? LLFolderViewFolder::TRASH : LLFolderViewFolder::NOT_TRASH; + mAmTrash = mListener->getUUID() == gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH, false) ? LLFolderViewFolder::TRASH : LLFolderViewFolder::NOT_TRASH; } return mAmTrash == LLFolderViewFolder::TRASH; } @@ -2167,7 +2167,7 @@ BOOL LLFolderViewFolder::handleDoubleClick( S32 x, S32 y, MASK mask ) { const LLUUID &cat_uuid = getListener()->getUUID(); const LLViewerInventoryCategory *cat = gInventory.getCategory(cat_uuid); - if (cat && cat->getPreferredType() == LLFolderType::FT_OUTFIT) + if (cat && cat->getPreferredType() == LLAssetType::AT_OUTFIT) { getListener()->performAction(NULL, NULL,"replaceoutfit"); return TRUE; @@ -2490,7 +2490,7 @@ bool LLInventorySort::operator()(const LLFolderViewItem* const& a, const LLFolde && b->getListener()->getInventoryType() == LLInventoryType::IT_LANDMARK) { - static const LLUUID& favorites_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE); + static LLUUID favorites_folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE); LLUUID a_uuid = a->getParentFolder()->getListener()->getUUID(); LLUUID b_uuid = b->getParentFolder()->getListener()->getUUID(); diff --git a/indra/newview/llfriendcard.cpp b/indra/newview/llfriendcard.cpp index 5f79fe8b20..fbcaeee01f 100644 --- a/indra/newview/llfriendcard.cpp +++ b/indra/newview/llfriendcard.cpp @@ -135,14 +135,14 @@ const LLUUID LLFriendCardsManager::extractAvatarID(const LLUUID& avatarID) // and this method must be called before any actions with friend list void LLFriendCardsManager::ensureFriendFoldersExist() { - const LLUUID callingCardsFolderID = gInventory.findCategoryUUIDForType(LLFolderType::FT_CALLINGCARD); + LLUUID callingCardsFolderID = gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD); LLUUID friendFolderUUID = findFriendFolderUUIDImpl(); if (friendFolderUUID.isNull()) { friendFolderUUID = gInventory.createNewCategory(callingCardsFolderID, - LLFolderType::FT_CALLINGCARD, get_friend_folder_name()); + LLAssetType::AT_CALLINGCARD, get_friend_folder_name()); } LLUUID friendAllSubfolderUUID = findFriendAllSubfolderUUIDImpl(); @@ -150,7 +150,7 @@ void LLFriendCardsManager::ensureFriendFoldersExist() if (friendAllSubfolderUUID.isNull()) { friendAllSubfolderUUID = gInventory.createNewCategory(friendFolderUUID, - LLFolderType::FT_CALLINGCARD, get_friend_all_subfolder_name()); + LLAssetType::AT_CALLINGCARD, get_friend_all_subfolder_name()); } } @@ -351,7 +351,7 @@ void LLFriendCardsManager::collectFriendsLists(folderid_buddies_map_t& folderBud /************************************************************************/ const LLUUID& LLFriendCardsManager::findFriendFolderUUIDImpl() const { - const LLUUID callingCardsFolderID = gInventory.findCategoryUUIDForType(LLFolderType::FT_CALLINGCARD); + LLUUID callingCardsFolderID = gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD); std::string friendFolderName = get_friend_folder_name(); diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp index 19fa66fd0e..dee86f4a22 100644 --- a/indra/newview/llimfloater.cpp +++ b/indra/newview/llimfloater.cpp @@ -106,8 +106,6 @@ void LLIMFloater::onFocusReceived() // virtual void LLIMFloater::onClose(bool app_quitting) { - if (!gIMMgr->hasSession(mSessionID)) return; - setTyping(false); gIMMgr->leaveSession(mSessionID); } @@ -236,10 +234,7 @@ BOOL LLIMFloater::postBuild() mChatHistory = getChild<LLChatHistory>("chat_history"); - std::string session_name(LLIMModel::instance().getName(mSessionID)); - LLStringUtil::toUpper(session_name); - setTitle(session_name); - + setTitle(LLIMModel::instance().getName(mSessionID)); setDocked(true); mTypingStart = LLTrans::getString("IM_typing_start_string"); diff --git a/indra/newview/llinspectavatar.cpp b/indra/newview/llinspectavatar.cpp index 9989a3b473..bfad2b1624 100644 --- a/indra/newview/llinspectavatar.cpp +++ b/indra/newview/llinspectavatar.cpp @@ -188,8 +188,7 @@ LLInspectAvatar::LLInspectAvatar(const LLSD& sd) { mCommitCallbackRegistrar.add("InspectAvatar.ViewProfile", boost::bind(&LLInspectAvatar::onClickViewProfile, this)); mCommitCallbackRegistrar.add("InspectAvatar.AddFriend", boost::bind(&LLInspectAvatar::onClickAddFriend, this)); - mCommitCallbackRegistrar.add("InspectAvatar.IM", - boost::bind(&LLInspectAvatar::onClickIM, this)); + mCommitCallbackRegistrar.add("InspectAvatar.IM", boost::bind(&LLInspectAvatar::onClickIM, this)); mCommitCallbackRegistrar.add("InspectAvatar.Teleport", boost::bind(&LLInspectAvatar::onClickTeleport, this)); mCommitCallbackRegistrar.add("InspectAvatar.InviteToGroup", boost::bind(&LLInspectAvatar::onClickInviteToGroup, this)); mCommitCallbackRegistrar.add("InspectAvatar.Pay", boost::bind(&LLInspectAvatar::onClickPay, this)); @@ -307,21 +306,7 @@ void LLInspectAvatar::requestUpdate() // You can't re-add someone as a friend if they are already your friend bool is_friend = LLAvatarTracker::instance().getBuddyInfo(mAvatarID) != NULL; bool is_self = (mAvatarID == gAgentID); - if (is_self) - { - getChild<LLUICtrl>("add_friend_btn")->setVisible(false); - getChild<LLUICtrl>("im_btn")->setVisible(false); - } - else if (is_friend) - { - getChild<LLUICtrl>("add_friend_btn")->setVisible(false); - getChild<LLUICtrl>("im_btn")->setVisible(true); - } - else - { - getChild<LLUICtrl>("add_friend_btn")->setVisible(true); - getChild<LLUICtrl>("im_btn")->setVisible(false); - } + childSetEnabled("add_friend_btn", !is_friend && !is_self); // Use an avatar_icon even though the image id will come down with the // avatar properties because the avatar_icon code maintains a cache of icons diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index b9a25d5dc7..b9775cf0e9 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -78,7 +78,6 @@ #include "llscrollcontainer.h" #include "llimview.h" #include "lltooldraganddrop.h" -#include "llviewerfoldertype.h" #include "llviewertexturelist.h" #include "llviewerinventory.h" #include "llviewerobjectlist.h" @@ -86,7 +85,6 @@ #include "llvoavatar.h" #include "llwearable.h" #include "llwearablelist.h" -#include "llviewerassettype.h" #include "llviewermessage.h" #include "llviewerregion.h" #include "llvoavatarself.h" @@ -204,9 +202,9 @@ PermissionMask LLInvFVBridge::getPermissionMask() const } // virtual -LLFolderType::EType LLInvFVBridge::getPreferredType() const +LLAssetType::EType LLInvFVBridge::getPreferredType() const { - return LLFolderType::FT_NONE; + return LLAssetType::AT_NONE; } @@ -341,7 +339,7 @@ void LLInvFVBridge::removeBatchNoCheck(LLDynamicArray<LLFolderViewEventListener* LLInventoryModel* model = getInventoryModel(); if(!model) return; LLMessageSystem* msg = gMessageSystem; - const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH); + LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH); LLViewerInventoryItem* item = NULL; LLViewerInventoryCategory* cat = NULL; std::vector<LLUUID> move_ids; @@ -506,7 +504,7 @@ BOOL LLInvFVBridge::isClipboardPasteableAsLink() const } } const LLViewerInventoryCategory *cat = model->getCategory(objects.get(i)); - if (cat && !LLFolderType::lookupIsProtectedType(cat->getPreferredType())) + if (cat && !LLAssetType::lookupCanLink(cat->getPreferredType())) { return FALSE; } @@ -647,7 +645,7 @@ BOOL LLInvFVBridge::startDrag(EDragAndDropType* type, LLUUID* id) const if(obj) { - *type = LLViewerAssetType::lookupDragAndDropType(obj->getActualType()); + *type = LLAssetType::lookupDragAndDropType(obj->getActualType()); if(*type == DAD_NONE) { return FALSE; @@ -688,7 +686,7 @@ BOOL LLInvFVBridge::isInTrash() const { LLInventoryModel* model = getInventoryModel(); if(!model) return FALSE; - const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH); + const LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH); return model->isObjectDescendentOf(mUUID, trash_id); } @@ -701,7 +699,7 @@ BOOL LLInvFVBridge::isLinkedObjectInTrash() const { LLInventoryModel* model = getInventoryModel(); if(!model) return FALSE; - const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH); + const LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH); return model->isObjectDescendentOf(obj->getLinkedUUID(), trash_id); } return FALSE; @@ -719,7 +717,7 @@ BOOL LLInvFVBridge::isCOFFolder() const { const LLInventoryModel* model = getInventoryModel(); if(!model) return TRUE; - const LLUUID cof_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT); + const LLUUID cof_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT); if (mUUID == cof_id || model->isObjectDescendentOf(mUUID, cof_id)) { return TRUE; @@ -1046,7 +1044,7 @@ void LLItemBridge::restoreItem() if(item) { LLInventoryModel* model = getInventoryModel(); - const LLUUID new_parent = model->findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(item->getType())); + const LLUUID new_parent = model->findCategoryUUIDForType(item->getType()); // do not restamp on restore. LLInvFVBridge::changeItemParent(model, item, new_parent, FALSE); } @@ -1079,7 +1077,7 @@ void LLItemBridge::restoreToWorld() } // Check if it's in the trash. (again similar to the normal rez logic) - const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); + const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH); if(gInventory.isObjectDescendentOf(itemp->getUUID(), trash_id)) { remove_from_inventory = TRUE; @@ -1274,7 +1272,7 @@ BOOL LLItemBridge::removeItem() LLPreview::hide(mUUID, TRUE); LLInventoryModel* model = getInventoryModel(); if(!model) return FALSE; - const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH); + LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH); LLViewerInventoryItem* item = getItem(); // if item is not already in trash @@ -1367,7 +1365,7 @@ BOOL LLFolderBridge::isItemMovable() const LLInventoryObject* obj = getInventoryObject(); if(obj) { - return (!LLFolderType::lookupIsProtectedType(((LLInventoryCategory*)obj)->getPreferredType())); + return (!LLAssetType::lookupIsProtectedCategoryType(((LLInventoryCategory*)obj)->getPreferredType())); } return FALSE; } @@ -1403,7 +1401,7 @@ BOOL LLFolderBridge::isItemRemovable() return FALSE; } - if(LLFolderType::lookupIsProtectedType(category->getPreferredType())) + if(LLAssetType::lookupIsProtectedCategoryType(category->getPreferredType())) { return FALSE; } @@ -1416,7 +1414,7 @@ BOOL LLFolderBridge::isItemRemovable() for( i = 0; i < descendent_categories.count(); i++ ) { LLInventoryCategory* category = descendent_categories[i]; - if(LLFolderType::lookupIsProtectedType(category->getPreferredType())) + if(LLAssetType::lookupIsProtectedCategoryType(category->getPreferredType())) { return FALSE; } @@ -1593,20 +1591,20 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat, const LLUUID& cat_id = inv_cat->getUUID(); // Is the destination the trash? - const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH); + const LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH); BOOL move_is_into_trash = (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 is_movable = (!LLAssetType::lookupIsProtectedCategoryType(inv_cat->getPreferredType())); + LLUUID current_outfit_id = model->findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT); BOOL move_is_into_current_outfit = (mUUID == current_outfit_id); - BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT); + BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLAssetType::AT_OUTFIT); if (move_is_into_current_outfit || move_is_into_outfit) { // BAP - restrictions? is_movable = true; } - if (mUUID == gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE)) + if (mUUID == gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE)) { is_movable = FALSE; // It's generally movable but not into Favorites folder. EXT-1604 } @@ -1618,7 +1616,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat, for( i = 0; i < descendent_categories.count(); i++ ) { LLInventoryCategory* category = descendent_categories[i]; - if(LLFolderType::lookupIsProtectedType(category->getPreferredType())) + if(LLAssetType::lookupIsProtectedCategoryType(category->getPreferredType())) { // ...can't move "special folders" like Textures is_movable = FALSE; @@ -1851,8 +1849,8 @@ bool LLFindCOFValidItems::operator()(LLInventoryCategory* cat, LLViewerInventoryCategory *linked_category = ((LLViewerInventoryItem*)item)->getLinkedCategory(); // BAP - safe? // BAP remove AT_NONE support after ensembles are fully working? return (linked_category && - ((linked_category->getPreferredType() == LLFolderType::FT_NONE) || - (LLFolderType::lookupIsEnsembleType(linked_category->getPreferredType())))); + ((linked_category->getPreferredType() == LLAssetType::AT_NONE) || + (LLAssetType::lookupIsEnsembleCategoryType(linked_category->getPreferredType())))); } } @@ -2154,7 +2152,7 @@ void LLFolderBridge::determineFolderType() BOOL LLFolderBridge::isItemRenameable() const { LLViewerInventoryCategory* cat = (LLViewerInventoryCategory*)getCategory(); - if(cat && !LLFolderType::lookupIsProtectedType(cat->getPreferredType()) + if(cat && !LLAssetType::lookupIsProtectedCategoryType(cat->getPreferredType()) && (cat->getOwnerID() == gAgent.getID())) { return TRUE; @@ -2169,15 +2167,15 @@ void LLFolderBridge::restoreItem() if(cat) { LLInventoryModel* model = getInventoryModel(); - const LLUUID new_parent = model->findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(cat->getType())); + LLUUID new_parent = model->findCategoryUUIDForType(cat->getType()); // do not restamp children on restore LLInvFVBridge::changeCategoryParent(model, cat, new_parent, FALSE); } } -LLFolderType::EType LLFolderBridge::getPreferredType() const +LLAssetType::EType LLFolderBridge::getPreferredType() const { - LLFolderType::EType preferred_type = LLFolderType::FT_NONE; + LLAssetType::EType preferred_type = LLAssetType::AT_NONE; LLViewerInventoryCategory* cat = getCategory(); if(cat) { @@ -2190,7 +2188,7 @@ LLFolderType::EType LLFolderBridge::getPreferredType() const // Icons for folders are based on the preferred type LLUIImagePtr LLFolderBridge::getIcon() const { - LLFolderType::EType preferred_type = LLFolderType::FT_NONE; + LLAssetType::EType preferred_type = LLAssetType::AT_NONE; LLViewerInventoryCategory* cat = getCategory(); if(cat) { @@ -2199,7 +2197,7 @@ LLUIImagePtr LLFolderBridge::getIcon() const return getIcon(preferred_type); } -LLUIImagePtr LLFolderBridge::getIcon(LLFolderType::EType preferred_type) +LLUIImagePtr LLFolderBridge::getIcon(LLAssetType::EType preferred_type) { // we only have one folder image now return LLUI::getUIImage("Inv_FolderClosed"); @@ -2238,7 +2236,7 @@ BOOL LLFolderBridge::removeItem() LLInventoryModel* model = getInventoryModel(); if(!model) return FALSE; - const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH); + LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH); // Look for any gestures and deactivate them LLInventoryModel::cat_array_t descendent_categories; @@ -2356,11 +2354,11 @@ void LLFolderBridge::folderOptionsMenu() if(!model) return; const LLInventoryCategory* category = model->getCategory(mUUID); - LLFolderType::EType type = category->getPreferredType(); - const bool is_default_folder = category && LLFolderType::lookupIsProtectedType(type); + LLAssetType::EType type = category->getPreferredType(); + const bool is_default_folder = category && LLAssetType::lookupIsProtectedCategoryType(type); // BAP change once we're no longer treating regular categories as ensembles. - const bool is_ensemble = category && (type == LLFolderType::FT_NONE || - LLFolderType::lookupIsEnsembleType(type)); + const bool is_ensemble = category && (type == LLAssetType::AT_NONE || + LLAssetType::lookupIsEnsembleCategoryType(type)); // calling card related functionality for folders. @@ -2426,8 +2424,8 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags) // std::vector<std::string> disabled_items; LLInventoryModel* model = getInventoryModel(); if(!model) return; - const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH); - const LLUUID lost_and_found_id = model->findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND); + LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH); + LLUUID lost_and_found_id = model->findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND); mItems.clear(); //adding code to clear out member Items (which means Items should not have other data here at this point) mDisabledItems.clear(); //adding code to clear out disabled members from previous @@ -2457,6 +2455,7 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags) else if(isAgentInventory()) // do not allow creating in library { LLViewerInventoryCategory *cat = getCategory(); + // BAP removed protected check to re-enable standard ops in untyped folders. // Not sure what the right thing is to do here. if (!isCOFFolder() && cat /*&& @@ -2473,7 +2472,7 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags) mItems.push_back(std::string("Change Type")); LLViewerInventoryCategory *cat = getCategory(); - if (cat && LLFolderType::lookupIsProtectedType(cat->getPreferredType())) + if (cat && LLAssetType::lookupIsProtectedCategoryType(cat->getPreferredType())) { mDisabledItems.push_back(std::string("Change Type")); } @@ -2483,7 +2482,7 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags) else { // Want some but not all of the items from getClipboardEntries for outfits. - if (cat && cat->getPreferredType()==LLFolderType::FT_OUTFIT) + if (cat && cat->getPreferredType()==LLAssetType::AT_OUTFIT) { mItems.push_back(std::string("Rename")); mItems.push_back(std::string("Delete")); @@ -2619,7 +2618,7 @@ void LLFolderBridge::createNewCategory(void* user_data) if(!model) return; LLUUID id; id = model->createNewCategory(bridge->getUUID(), - LLFolderType::FT_NONE, + LLAssetType::AT_NONE, LLStringUtil::null); model->notifyObservers(); @@ -2704,7 +2703,7 @@ void LLFolderBridge::createWearable(LLFolderBridge* bridge, EWearableType type) // Separate function so can be called by global menu as well as right-click // menu. // static -void LLFolderBridge::createWearable(const LLUUID &parent_id, EWearableType type) +void LLFolderBridge::createWearable(LLUUID parent_id, EWearableType type) { LLWearable* wearable = LLWearableList::instance().createNewWearable(type); LLAssetType::EType asset_type = wearable->getAssetType(); @@ -2847,17 +2846,17 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item, break; case LLAssetType::AT_CATEGORY: - is_movable = !LLFolderType::lookupIsProtectedType(((LLInventoryCategory*)inv_item)->getPreferredType()); + is_movable = !LLAssetType::lookupIsProtectedCategoryType(((LLInventoryCategory*)inv_item)->getPreferredType()); break; default: break; } - const LLUUID trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH); + LLUUID trash_id = model->findCategoryUUIDForType(LLAssetType::AT_TRASH); BOOL move_is_into_trash = (mUUID == trash_id) || model->isObjectDescendentOf(mUUID, trash_id); - const LLUUID current_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT); + LLUUID current_outfit_id = model->findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT); BOOL move_is_into_current_outfit = (mUUID == current_outfit_id); - BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT); + BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLAssetType::AT_OUTFIT); if(is_movable && move_is_into_trash) { @@ -2887,7 +2886,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item, .isObjDirectDescendentOfCategory (inv_item, getCategory()); } - const LLUUID& favorites_id = model->findCategoryUUIDForType(LLFolderType::FT_FAVORITE); + LLUUID favorites_id = model->findCategoryUUIDForType(LLAssetType::AT_FAVORITE); // we can move item inside a folder only if this folder is Favorites. See EXT-719 accept = is_movable && ((mUUID != inv_item->getParentUUID()) || (mUUID == favorites_id)); @@ -4935,7 +4934,7 @@ void LLLSLTextBridgeAction::doIt() BOOL LLWearableBridgeAction::isInTrash() const { if(!mModel) return FALSE; - const LLUUID trash_id = mModel->findCategoryUUIDForType(LLFolderType::FT_TRASH); + LLUUID trash_id = mModel->findCategoryUUIDForType(LLAssetType::AT_TRASH); return mModel->isObjectDescendentOf(mUUID, trash_id); } @@ -5074,7 +5073,7 @@ std::string LLLinkFolderBridge::sPrefix("Link: "); LLUIImagePtr LLLinkFolderBridge::getIcon() const { - LLFolderType::EType preferred_type = LLFolderType::FT_NONE; + LLAssetType::EType preferred_type = LLAssetType::AT_NONE; if (LLViewerInventoryItem *item = getItem()) { if (const LLViewerInventoryCategory* cat = item->getLinkedCategory()) diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h index f95e8f9361..3f3513a665 100644 --- a/indra/newview/llinventorybridge.h +++ b/indra/newview/llinventorybridge.h @@ -159,7 +159,7 @@ public: virtual const std::string& getName() const; virtual const std::string& getDisplayName() const; virtual PermissionMask getPermissionMask() const; - virtual LLFolderType::EType getPreferredType() const; + virtual LLAssetType::EType getPreferredType() const; virtual time_t getCreationDate() const; virtual LLFontGL::StyleFlags getLabelStyle() const { @@ -298,9 +298,9 @@ public: virtual void selectItem(); virtual void restoreItem(); - virtual LLFolderType::EType getPreferredType() const; + virtual LLAssetType::EType getPreferredType() const; virtual LLUIImagePtr getIcon() const; - static LLUIImagePtr getIcon(LLFolderType::EType preferred_type); + static LLUIImagePtr getIcon(LLAssetType::EType asset_type); virtual BOOL renameItem(const std::string& new_name); virtual BOOL removeItem(); @@ -321,7 +321,7 @@ public: virtual BOOL copyToClipboard() const; static void createWearable(LLFolderBridge* bridge, EWearableType type); - static void createWearable(const LLUUID &parent_folder_id, EWearableType type); + static void createWearable(LLUUID parent_folder_id, EWearableType type); LLViewerInventoryCategory* getCategory() const; diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp index 75218e98e0..77121bd922 100644 --- a/indra/newview/llinventoryfunctions.cpp +++ b/indra/newview/llinventoryfunctions.cpp @@ -317,6 +317,10 @@ const std::string& get_item_icon_name(LLAssetType::EType asset_type, case LLAssetType::AT_GESTURE: idx = GESTURE_ICON_NAME; break; + case LLAssetType::AT_FAVORITE: + //TODO - need bette idx + idx = LANDMARK_ICON_NAME; + break; case LLAssetType::AT_LINK: idx = LINKITEM_ICON_NAME; break; diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index baf34b42ff..23439191f3 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -49,7 +49,6 @@ #include "llinventoryfunctions.h" #include "llinventorypanel.h" #include "llfloaterinventory.h" -#include "llviewerfoldertype.h" #include "llviewerinventory.h" #include "llviewermessage.h" #include "llviewerwindow.h" @@ -317,7 +316,7 @@ void LLInventoryModel::unlockDirectDescendentArrays(const LLUUID& cat_id) // specifies 'type' as what it defaults to containing. The category is // not necessarily only for that type. *NOTE: This will create a new // inventory category on the fly if one does not exist. -const LLUUID LLInventoryModel::findCategoryUUIDForType(LLFolderType::EType t, bool create_folder) +LLUUID LLInventoryModel::findCategoryUUIDForType(LLAssetType::EType t, bool create_folder) { const LLUUID &rv = findCatUUID(t); if(rv.isNull() && isInventoryUsable() && create_folder) @@ -333,10 +332,10 @@ const LLUUID LLInventoryModel::findCategoryUUIDForType(LLFolderType::EType t, bo // Internal method which looks for a category with the specified // preferred type. Returns LLUUID::null if not found. -const LLUUID &LLInventoryModel::findCatUUID(LLFolderType::EType preferred_type) const +const LLUUID &LLInventoryModel::findCatUUID(LLAssetType::EType preferred_type) const { const LLUUID &root_id = gInventory.getRootFolderID(); - if(LLFolderType::FT_CATEGORY == preferred_type) + if(LLAssetType::AT_CATEGORY == preferred_type) { return root_id; } @@ -364,7 +363,7 @@ const LLUUID &LLInventoryModel::findCatUUID(LLFolderType::EType preferred_type) // version will take care of details like what the name should be // based on preferred type. Returns the UUID of the new category. LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id, - LLFolderType::EType preferred_type, + LLAssetType::EType preferred_type, const std::string& pname) { LLUUID id; @@ -374,9 +373,9 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id, return id; } - if(LLFolderType::lookup(preferred_type) == LLFolderType::badLookup()) + if(preferred_type == LLAssetType::AT_SIMSTATE) { - lldebugs << "Attempt to create undefined category." << llendl; + lldebugs << "Attempt to create simstate category." << llendl; return id; } @@ -388,7 +387,7 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id, } else { - name.assign(LLViewerFolderType::lookupNewCategoryName(preferred_type)); + name.assign(LLAssetType::lookupCategoryName(preferred_type)); } // Add the category to the internal representation @@ -452,7 +451,7 @@ void LLInventoryModel::collectDescendentsIf(const LLUUID& id, // Start with categories if(!include_trash) { - const LLUUID trash_id = findCategoryUUIDForType(LLFolderType::FT_TRASH); + const LLUUID trash_id = findCategoryUUIDForType(LLAssetType::AT_TRASH); if(trash_id.notNull() && (trash_id == id)) return; } @@ -486,7 +485,7 @@ void LLInventoryModel::collectDescendentsIf(const LLUUID& id, if (item->getActualType() == LLAssetType::AT_LINK_FOLDER) { LLViewerInventoryCategory *linked_cat = item->getLinkedCategory(); - if (linked_cat && linked_cat->getPreferredType() != LLFolderType::FT_OUTFIT) + if (linked_cat && linked_cat->getPreferredType() != LLAssetType::AT_OUTFIT) // BAP - was // LLAssetType::lookupIsEnsembleCategoryType(linked_cat->getPreferredType())) // Change back once ensemble typing is in place. @@ -666,7 +665,7 @@ U32 LLInventoryModel::updateItem(const LLViewerInventoryItem* item) if(item->getParentUUID().isNull()) { - const LLUUID category_id = findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(new_item->getType())); + LLUUID category_id = findCategoryUUIDForType(new_item->getType()); new_item->setParent(category_id); item_array_t* item_array = get_ptr_in_map(mParentChildItemTree, category_id); if( item_array ) @@ -690,7 +689,7 @@ U32 LLInventoryModel::updateItem(const LLViewerInventoryItem* item) LLUUID parent_id = item->getParentUUID(); if(parent_id == CATEGORIZE_LOST_AND_FOUND_ID) { - parent_id = findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND); + parent_id = findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND); new_item->setParent(parent_id); } item_array_t* item_array = get_ptr_in_map(mParentChildItemTree, parent_id); @@ -703,7 +702,7 @@ U32 LLInventoryModel::updateItem(const LLViewerInventoryItem* item) // Whoops! No such parent, make one. llinfos << "Lost item: " << new_item->getUUID() << " - " << new_item->getName() << llendl; - parent_id = findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND); + parent_id = findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND); new_item->setParent(parent_id); item_array = get_ptr_in_map(mParentChildItemTree, parent_id); if(item_array) @@ -1185,7 +1184,7 @@ void LLInventoryModel::mock(const LLUUID& root_id) root_id, LLUUID::null, LLAssetType::AT_CATEGORY, - LLFolderType::lookupNewCategoryName(LLFolderType::FT_ROOT_CATEGORY), + LLAssetType::lookupCategoryName(LLAssetType::AT_ROOT_CATEGORY), gAgent.getID()); addCategory(cat); gInventory.buildParentChildMap(); @@ -1343,7 +1342,7 @@ void fetchDescendentsResponder::result(const LLSD& content) item_it != folder_sd["items"].endArray(); ++item_it) { - const LLUUID lost_uuid = gInventory.findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND); + LLUUID lost_uuid = gInventory.findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND); if (lost_uuid.notNull()) { LLSD item = *item_it; @@ -2050,11 +2049,11 @@ bool LLInventoryModel::loadSkeleton( cat->setUUID(folder_id.asUUID()); cat->setParent(parent_id.asUUID()); - LLFolderType::EType preferred_type = LLFolderType::FT_NONE; + LLAssetType::EType preferred_type = LLAssetType::AT_NONE; LLSD type_default = (*it)["type_default"]; if(type_default.isDefined()) { - preferred_type = (LLFolderType::EType)type_default.asInteger(); + preferred_type = (LLAssetType::EType)type_default.asInteger(); } cat->setPreferredType(preferred_type); cat->setVersion(version.asInteger()); @@ -2401,12 +2400,12 @@ void LLInventoryModel::buildParentChildMap() << cat->getName() << llendl; ++lost; // plop it into the lost & found. - LLFolderType::EType pref = cat->getPreferredType(); - if(LLFolderType::FT_NONE == pref) + LLAssetType::EType pref = cat->getPreferredType(); + if(LLAssetType::AT_NONE == pref) { - cat->setParent(findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND)); + cat->setParent(findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND)); } - else if(LLFolderType::FT_CATEGORY == pref) + else if(LLAssetType::AT_CATEGORY == pref) { // it's the root cat->setParent(LLUUID::null); @@ -2465,7 +2464,7 @@ void LLInventoryModel::buildParentChildMap() ++lost; // plop it into the lost & found. // - item->setParent(findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND)); + item->setParent(findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND)); // move it later using a special message to move items. If // we update server here, the client might crash. //item->updateServer(); @@ -2486,7 +2485,7 @@ void LLInventoryModel::buildParentChildMap() llwarns << "Found " << lost << " lost items." << llendl; LLMessageSystem* msg = gMessageSystem; BOOL start_new_message = TRUE; - const LLUUID lnf = findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND); + LLUUID lnf = findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND); for(std::vector<LLUUID>::iterator it = lost_item_ids.begin() ; it < lost_item_ids.end(); ++it) { if(start_new_message) @@ -2939,7 +2938,7 @@ void LLInventoryModel::processUpdateInventoryFolder(LLMessageSystem* msg, lastfolder = tfolder; tfolder->unpackMessage(msg, _PREHASH_FolderData, i); // make sure it's not a protected folder - tfolder->setPreferredType(LLFolderType::FT_NONE); + tfolder->setPreferredType(LLAssetType::AT_NONE); folders.push_back(tfolder); // examine update for changes. LLViewerInventoryCategory* folderp = gInventory.getCategory(tfolder->getUUID()); @@ -3326,31 +3325,31 @@ void LLInventoryModel::processMoveInventoryItem(LLMessageSystem* msg, void**) //---------------------------------------------------------------------------- -// Trash: LLFolderType::FT_TRASH, "ConfirmEmptyTrash" -// Lost&Found: LLFolderType::FT_LOST_AND_FOUND, "ConfirmEmptyLostAndFound" +// Trash: LLAssetType::AT_TRASH, "ConfirmEmptyTrash" +// Lost&Found: LLAssetType::AT_LOST_AND_FOUND, "ConfirmEmptyLostAndFound" -bool LLInventoryModel::callbackEmptyFolderType(const LLSD& notification, const LLSD& response, LLFolderType::EType preferred_type) +bool LLInventoryModel::callbackEmptyFolderType(const LLSD& notification, const LLSD& response, LLAssetType::EType folder_type) { S32 option = LLNotification::getSelectedOption(notification, response); if (option == 0) // YES { - const LLUUID folder_id = findCategoryUUIDForType(preferred_type); + LLUUID folder_id = findCategoryUUIDForType(folder_type); purgeDescendentsOf(folder_id); notifyObservers(); } return false; } -void LLInventoryModel::emptyFolderType(const std::string notification, LLFolderType::EType preferred_type) +void LLInventoryModel::emptyFolderType(const std::string notification, LLAssetType::EType folder_type) { if (!notification.empty()) { LLNotifications::instance().add(notification, LLSD(), LLSD(), - boost::bind(&LLInventoryModel::callbackEmptyFolderType, this, _1, _2, preferred_type)); + boost::bind(&LLInventoryModel::callbackEmptyFolderType, this, _1, _2, folder_type)); } else { - const LLUUID folder_id = findCategoryUUIDForType(preferred_type); + LLUUID folder_id = findCategoryUUIDForType(folder_type); purgeDescendentsOf(folder_id); notifyObservers(); } @@ -3361,7 +3360,7 @@ void LLInventoryModel::emptyFolderType(const std::string notification, LLFolderT void LLInventoryModel::removeItem(const LLUUID& item_id) { LLViewerInventoryItem* item = getItem(item_id); - const LLUUID new_parent = findCategoryUUIDForType(LLFolderType::FT_TRASH); + const LLUUID new_parent = findCategoryUUIDForType(LLAssetType::AT_TRASH); if (item && item->getParentUUID() != new_parent) { LLInventoryModel::update_list_t update; diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h index aba0a619db..d51460b374 100644 --- a/indra/newview/llinventorymodel.h +++ b/indra/newview/llinventorymodel.h @@ -34,7 +34,6 @@ #define LL_LLINVENTORYMODEL_H #include "llassettype.h" -#include "llfoldertype.h" #include "lldarray.h" #include "llframetimer.h" #include "llhttpclient.h" @@ -281,7 +280,7 @@ public: // SDK: Added flag to specify whether the folder should be created if not found. This fixes the horrible // multiple trash can bug. - const LLUUID findCategoryUUIDForType(LLFolderType::EType preferred_type, bool create_folder = true); + LLUUID findCategoryUUIDForType(LLAssetType::EType preferred_type, bool create_folder = true); // Call this method when it's time to update everyone on a new // state, by default, the inventory model will not update @@ -330,7 +329,7 @@ public: // category. If you want to use the default name based on type, // pass in a NULL to the 'name parameter. LLUUID createNewCategory(const LLUUID& parent_id, - LLFolderType::EType preferred_type, + LLAssetType::EType preferred_type, const std::string& name); // methods to load up inventory skeleton & meat. These are used @@ -386,9 +385,9 @@ public: bool isCategoryComplete(const LLUUID& cat_id) const; // callbacks - // Trigger a notification and empty the folder type (FT_TRASH or FT_LOST_AND_FOUND) if confirmed - void emptyFolderType(const std::string notification, LLFolderType::EType folder_type); - bool callbackEmptyFolderType(const LLSD& notification, const LLSD& response, LLFolderType::EType preferred_type); + // Trigger a notification and empty the folder type (AT_TRASH or AT_LOST_AND_FOUND) if confirmed + void emptyFolderType(const std::string notification, LLAssetType::EType folder_type); + bool callbackEmptyFolderType(const LLSD& notification, const LLSD& response, LLAssetType::EType folder_type); // Utility Functions void removeItem(const LLUUID& item_id); @@ -432,7 +431,7 @@ protected: // // Internal method which looks for a category with the specified // preferred type. Returns LLUUID::null if not found - const LLUUID &findCatUUID(LLFolderType::EType preferred_type) const; + const LLUUID &findCatUUID(LLAssetType::EType preferred_type) const; // Empty the entire contents void empty(); diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index 178e7d0823..d1ca0efed3 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -78,7 +78,6 @@ #include "lltabcontainer.h" #include "lltooldraganddrop.h" #include "lluictrlfactory.h" -#include "llviewerfoldertype.h" #include "llviewerinventory.h" #include "llviewermessage.h" #include "llviewerobjectlist.h" @@ -111,8 +110,8 @@ LLInventoryPanel::LLInventoryPanel(const LLInventoryPanel::Params& p) : // contex menu callbacks mCommitCallbackRegistrar.add("Inventory.DoToSelected", boost::bind(&LLInventoryPanel::doToSelected, this, _2)); - mCommitCallbackRegistrar.add("Inventory.EmptyTrash", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyTrash", LLFolderType::FT_TRASH)); - mCommitCallbackRegistrar.add("Inventory.EmptyLostAndFound", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyLostAndFound", LLFolderType::FT_LOST_AND_FOUND)); + mCommitCallbackRegistrar.add("Inventory.EmptyTrash", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyTrash", LLAssetType::AT_TRASH)); + mCommitCallbackRegistrar.add("Inventory.EmptyLostAndFound", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyLostAndFound", LLAssetType::AT_LOST_AND_FOUND)); mCommitCallbackRegistrar.add("Inventory.DoCreate", boost::bind(&LLInventoryPanel::doCreate, this, _2)); mCommitCallbackRegistrar.add("Inventory.AttachObject", boost::bind(&LLInventoryPanel::attachObject, this, _2)); mCommitCallbackRegistrar.add("Inventory.BeginIMSession", boost::bind(&LLInventoryPanel::beginIMSession, this)); @@ -170,19 +169,19 @@ BOOL LLInventoryPanel::postBuild() // determine the root folder, if any, so inventory contents show just the children // of that folder (i.e. not including the folder itself). - const LLFolderType::EType preferred_type = LLViewerFolderType::lookupTypeFromNewCategoryName(mStartFolderString); + const LLAssetType::EType preferred_type = LLAssetType::lookupHumanReadable(mStartFolderString); - if ("INVENTORY" == mStartFolderString) + if ("inventory" == mStartFolderString) { mStartFolderID = gInventory.getRootFolderID(); } - else if ("LIBRARY" == mStartFolderString) + else if ("library" == mStartFolderString) { mStartFolderID = gInventory.getLibraryRootFolderID(); } else { - mStartFolderID = (preferred_type != LLFolderType::FT_NONE ? gInventory.findCategoryUUIDForType(preferred_type) : LLUUID::null); + mStartFolderID = (preferred_type != LLAssetType::AT_NONE ? gInventory.findCategoryUUIDForType(preferred_type) : LLUUID::null); } // build view of inventory if we need default full hierarchy and inventory ready, otherwise wait for modelChanged() callback @@ -193,7 +192,7 @@ BOOL LLInventoryPanel::postBuild() } // bit of a hack to make sure the inventory is open. - mFolders->openFolder(preferred_type != LLFolderType::FT_NONE ? LLViewerFolderType::lookupNewCategoryName(preferred_type) : "My Inventory"); + mFolders->openFolder(preferred_type != LLAssetType::AT_NONE ? LLAssetType::lookupCategoryName(preferred_type) : "My Inventory"); if (mSortOrderSetting != INHERIT_SORT_ORDER) { @@ -383,19 +382,6 @@ void LLInventoryPanel::modelChanged(U32 mask) view_item->getParentFolder()->extractItem(view_item); view_item->addToFolder(new_parent, mFolders); } -/* - on the other side in case Inventory Panel has content of the any folder - it is possible that item moved to some folder which is absent in current - Panel. For ex. removing item (via moving to trash). - In this case we need to check if new parent is other then inventory start folder - and simply remove its View from the hierarchy. - See details in EXT-2098. -*/ - // So, let check if item was moved into folder out of this Inventory Panel. - else if (mStartFolderID.notNull() && NULL == new_parent && model_item->getParentUUID() != mStartFolderID) - { - view_item->getParentFolder()->extractItem(view_item); - } } } else @@ -664,7 +650,7 @@ void LLInventoryPanel::openAllFolders() mFolders->arrangeAll(); } -void LLInventoryPanel::openDefaultFolderForType(LLFolderType::EType type) +void LLInventoryPanel::openDefaultFolderForType(LLAssetType::EType type) { LLUUID category_id = mInventory->findCategoryUUIDForType(type); LLOpenFolderByID opener(category_id); diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h index 9f74fad5c1..997678a478 100644 --- a/indra/newview/llinventorypanel.h +++ b/indra/newview/llinventorypanel.h @@ -122,7 +122,7 @@ public: // Call this method to set the selection. void openAllFolders(); - void openDefaultFolderForType(LLFolderType::EType); + void openDefaultFolderForType(LLAssetType::EType); void setSelection(const LLUUID& obj_id, BOOL take_keyboard_focus); void setSelectCallback(const LLFolderView::signal_t::slot_type& cb) { if (mFolders) mFolders->setSelectCallback(cb); } void clearSelection(); diff --git a/indra/newview/lllandmarkactions.cpp b/indra/newview/lllandmarkactions.cpp index b1829b3945..0b07dd4f21 100644 --- a/indra/newview/lllandmarkactions.cpp +++ b/indra/newview/lllandmarkactions.cpp @@ -135,13 +135,13 @@ public: // Returns true if the given inventory item is a landmark pointing to the current parcel. // Used to find out if there is at least one landmark from current parcel. -class LLFirstAgentParcelLandmark : public LLInventoryCollectFunctor +class LLFistAgentParcelLandmark : public LLInventoryCollectFunctor { private: bool mFounded;// to avoid unnecessary check public: - LLFirstAgentParcelLandmark(): mFounded(false){} + LLFistAgentParcelLandmark(): mFounded(false){} /*virtual*/ bool operator()(LLInventoryCategory* cat, LLInventoryItem* item) { @@ -165,7 +165,8 @@ static void fetch_landmarks(LLInventoryModel::cat_array_t& cats, LLInventoryCollectFunctor& add) { // Look in "My Favorites" - const LLUUID favorites_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE); + LLUUID favorites_folder_id = + gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE); gInventory.collectDescendentsIf(favorites_folder_id, cats, items, @@ -173,7 +174,8 @@ static void fetch_landmarks(LLInventoryModel::cat_array_t& cats, add); // Look in "Landmarks" - const LLUUID landmarks_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK); + LLUUID landmarks_folder_id = + gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK); gInventory.collectDescendentsIf(landmarks_folder_id, cats, items, @@ -200,7 +202,7 @@ bool LLLandmarkActions::landmarkAlreadyExists() //static bool LLLandmarkActions::hasParcelLandmark() { - LLFirstAgentParcelLandmark get_first_agent_landmark; + LLFistAgentParcelLandmark get_first_agent_landmark; LLInventoryModel::cat_array_t cats; LLInventoryModel::item_array_t items; fetch_landmarks(cats, items, get_first_agent_landmark); @@ -285,7 +287,7 @@ void LLLandmarkActions::createLandmarkHere() LLAgentUI::buildLocationString(landmark_name, LLAgentUI::LOCATION_FORMAT_LANDMARK); LLAgentUI::buildLocationString(landmark_desc, LLAgentUI::LOCATION_FORMAT_FULL); - const LLUUID folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK); + LLUUID folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK); createLandmarkHere(landmark_name, landmark_desc, folder_id); } diff --git a/indra/newview/lllandmarkactions.h b/indra/newview/lllandmarkactions.h index 1c524c820c..312426cab0 100644 --- a/indra/newview/lllandmarkactions.h +++ b/indra/newview/lllandmarkactions.h @@ -55,7 +55,7 @@ public: static bool landmarkAlreadyExists(); /** - * @brief Checks whether landmark exists for current agent parcel. + * @brief Checks whether landmark exists for current parcel. */ static bool hasParcelLandmark(); diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp index b35fd6134b..e63daac4af 100644 --- a/indra/newview/llnavigationbar.cpp +++ b/indra/newview/llnavigationbar.cpp @@ -50,7 +50,6 @@ #include "llslurl.h" #include "llurlsimstring.h" #include "llviewerinventory.h" -#include "llviewermenu.h" #include "llviewerparcelmgr.h" #include "llworldmap.h" #include "llappviewer.h" @@ -272,12 +271,6 @@ void LLNavigationBar::draw() LLPanel::draw(); } -BOOL LLNavigationBar::handleRightMouseDown(S32 x, S32 y, MASK mask) -{ - show_navbar_context_menu(this,x,y); - return TRUE; -} - void LLNavigationBar::onBackButtonClicked() { LLTeleportHistory::getInstance()->goBack(); diff --git a/indra/newview/llnavigationbar.h b/indra/newview/llnavigationbar.h index 52f5a827e4..04707d8d48 100644 --- a/indra/newview/llnavigationbar.h +++ b/indra/newview/llnavigationbar.h @@ -54,7 +54,6 @@ public: virtual ~LLNavigationBar(); /*virtual*/ void draw(); - /*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); /*virtual*/ BOOL postBuild(); void handleLoginComplete(); diff --git a/indra/newview/llnearbychat.cpp b/indra/newview/llnearbychat.cpp index 81d033d7f9..12638ab855 100644 --- a/indra/newview/llnearbychat.cpp +++ b/indra/newview/llnearbychat.cpp @@ -97,39 +97,14 @@ BOOL LLNearbyChat::postBuild() if (getDockControl() == NULL) { setDockControl(new LLDockControl( - LLBottomTray::getInstance()->getNearbyChatBar(), this, - getDockTongue(), LLDockControl::LEFT, boost::bind(&LLNearbyChat::getAllowedRect, this, _1))); + LLBottomTray::getInstance()->getNearbyChatBar(), this, + getDockTongue(), LLDockControl::LEFT, boost::bind(&LLNearbyChat::getAllowedRect, this, _1))); } return true; } -void LLNearbyChat::applySavedVariables() -{ - - if (mRectControl.size() > 1) - { - const LLRect& rect = LLUI::sSettingGroups["floater"]->getRect(mRectControl); - reshape(rect.getWidth(), rect.getHeight()); - setRect(rect); - } - - - if(!LLUI::sSettingGroups["floater"]->controlExists(mDocStateControl)) - { - setDocked(true); - } - else - { - if (mDocStateControl.size() > 1) - { - bool dockState = LLUI::sSettingGroups["floater"]->getBOOL(mDocStateControl); - setDocked(dockState); - } - } -} - LLColor4 nearbychat_get_text_color(const LLChat& chat) { LLColor4 text_color; @@ -290,5 +265,11 @@ void LLNearbyChat::getAllowedRect(LLRect& rect) { rect = gViewerWindow->getWorldViewRect(); } - +void LLNearbyChat::setVisible (BOOL visible) +{ + LLDockableFloater::setVisible(visible); +} +void LLNearbyChat::toggleWindow() +{ +} diff --git a/indra/newview/llnearbychat.h b/indra/newview/llnearbychat.h index cb4654654a..20cbf7537d 100644 --- a/indra/newview/llnearbychat.h +++ b/indra/newview/llnearbychat.h @@ -52,15 +52,16 @@ public: void onNearbyChatContextMenuItemClicked(const LLSD& userdata); bool onNearbyChatCheckContextMenuItem(const LLSD& userdata); - void setDocked (bool docked, bool pop_on_undock = true); + void setDocked (bool docked, bool pop_on_undock); + void toggleWindow (); /*virtual*/ void onOpen (const LLSD& key); + virtual void setVisible (BOOL visible); + virtual void setRect (const LLRect &rect); private: - virtual void applySavedVariables(); - void getAllowedRect (LLRect& rect); void onNearbySpeakers (); diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp index d7a5ff289c..32dc5e5927 100644 --- a/indra/newview/llnearbychatbar.cpp +++ b/indra/newview/llnearbychatbar.cpp @@ -77,10 +77,6 @@ LLGestureComboBox::LLGestureComboBox(const LLGestureComboBox::Params& p) // refresh list from current active gestures refreshGestures(); - - // This forces using of halign from xml, since LLComboBox - // sets it to LLFontGL::LEFT, if text entry is disabled - mButton->setHAlign(p.drop_down_button.font_halign); } LLGestureComboBox::~LLGestureComboBox() @@ -211,7 +207,6 @@ LLNearbyChatBar::LLNearbyChatBar() : LLPanel() , mChatBox(NULL) { - mSpeakerMgr = LLLocalSpeakerMgr::getInstance(); } //virtual @@ -521,8 +516,8 @@ void LLNearbyChatBar::displaySpeakingIndicator() LLUUID id; id.setNull(); - mSpeakerMgr->update(TRUE); - mSpeakerMgr->getSpeakerList(&speaker_list, FALSE); + mSpeakerMgr.update(TRUE); + mSpeakerMgr.getSpeakerList(&speaker_list, FALSE); for (LLSpeakerMgr::speaker_list_t::iterator i = speaker_list.begin(); i != speaker_list.end(); ++i) { diff --git a/indra/newview/llnearbychatbar.h b/indra/newview/llnearbychatbar.h index 0307eee7bf..06204e6367 100644 --- a/indra/newview/llnearbychatbar.h +++ b/indra/newview/llnearbychatbar.h @@ -127,7 +127,7 @@ protected: LLLineEditor* mChatBox; LLTalkButton* mTalkBtn; LLOutputMonitorCtrl* mOutputMonitor; - LLLocalSpeakerMgr* mSpeakerMgr; + LLActiveSpeakerMgr mSpeakerMgr; }; #endif diff --git a/indra/newview/lloutputmonitorctrl.cpp b/indra/newview/lloutputmonitorctrl.cpp index 39381e3faa..8bac9937f0 100644 --- a/indra/newview/lloutputmonitorctrl.cpp +++ b/indra/newview/lloutputmonitorctrl.cpp @@ -80,8 +80,7 @@ LLOutputMonitorCtrl::LLOutputMonitorCtrl(const LLOutputMonitorCtrl::Params& p) mImageLevel2(p.image_level_2), mImageLevel3(p.image_level_3), mAutoUpdate(p.auto_update), - mSpeakerId(p.speaker_id), - mIsAgentControl(false) + mSpeakerId(p.speaker_id) { //static LLUIColor output_monitor_muted_color = LLUIColorTable::instance().getColor("OutputMonitorMutedColor", LLColor4::orange); //static LLUIColor output_monitor_overdriven_color = LLUIColorTable::instance().getColor("OutputMonitorOverdrivenColor", LLColor4::red); @@ -133,14 +132,7 @@ void LLOutputMonitorCtrl::draw() if (getVisible() && mAutoUpdate && !mIsMuted && mSpeakerId.notNull()) { setPower(gVoiceClient->getCurrentPower(mSpeakerId)); - if(mIsAgentControl) - { - setIsTalking(gVoiceClient->getUserPTTState()); - } - else - { - setIsTalking(gVoiceClient->getIsSpeaking(mSpeakerId)); - } + setIsTalking(gVoiceClient->getIsSpeaking(mSpeakerId)); } LLPointer<LLUIImage> icon; diff --git a/indra/newview/lloutputmonitorctrl.h b/indra/newview/lloutputmonitorctrl.h index 85ea552a57..7a7b8bc3a1 100644 --- a/indra/newview/lloutputmonitorctrl.h +++ b/indra/newview/lloutputmonitorctrl.h @@ -81,8 +81,6 @@ public: // For the current user, need to know the PTT state to show // correct button image. - void setIsAgentControl(bool val) { mIsAgentControl = val; } - void setIsTalking(bool val) { mIsTalking = val; } void setSpeakerId(const LLUUID& speaker_id); @@ -102,7 +100,6 @@ private: F32 mPower; - bool mIsAgentControl; bool mIsMuted; bool mIsTalking; LLPointer<LLUIImage> mImageMute; diff --git a/indra/newview/llpanelcontents.cpp b/indra/newview/llpanelcontents.cpp index 9d591ef43d..c28792a711 100644 --- a/indra/newview/llpanelcontents.cpp +++ b/indra/newview/llpanelcontents.cpp @@ -59,7 +59,6 @@ #include "lltoolcomp.h" #include "lltoolmgr.h" #include "lltrans.h" -#include "llviewerassettype.h" #include "llviewerobject.h" #include "llviewerregion.h" #include "llviewerwindow.h" @@ -168,7 +167,7 @@ void LLPanelContents::onClickNewScript(void *userdata) PERM_NONE, PERM_MOVE | PERM_TRANSFER); std::string desc; - LLViewerAssetType::generateDescriptionFor(LLAssetType::AT_LSL_TEXT, desc); + LLAssetType::generateDescriptionFor(LLAssetType::AT_LSL_TEXT, desc); LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem( LLUUID::null, diff --git a/indra/newview/llpanelimcontrolpanel.cpp b/indra/newview/llpanelimcontrolpanel.cpp index 21e88b6d07..b54975b76b 100644 --- a/indra/newview/llpanelimcontrolpanel.cpp +++ b/indra/newview/llpanelimcontrolpanel.cpp @@ -112,32 +112,21 @@ BOOL LLPanelIMControlPanel::postBuild() childSetAction("add_friend_btn", boost::bind(&LLPanelIMControlPanel::onAddFriendButtonClicked, this)); childSetAction("share_btn", boost::bind(&LLPanelIMControlPanel::onShareButtonClicked, this)); - childSetAction("teleport_btn", boost::bind(&LLPanelIMControlPanel::onTeleportButtonClicked, this)); - childSetAction("pay_btn", boost::bind(&LLPanelIMControlPanel::onPayButtonClicked, this)); childSetEnabled("add_friend_btn", !LLAvatarActions::isFriend(getChild<LLAvatarIconCtrl>("avatar_icon")->getAvatarId())); return LLPanelChatControlPanel::postBuild(); } -void LLPanelIMControlPanel::onTeleportButtonClicked() -{ - LLAvatarActions::offerTeleport(mAvatarID); -} -void LLPanelIMControlPanel::onPayButtonClicked() -{ - LLAvatarActions::pay(mAvatarID); -} - void LLPanelIMControlPanel::onViewProfileButtonClicked() { - LLAvatarActions::showProfile(mAvatarID); + LLAvatarActions::showProfile(getChild<LLAvatarIconCtrl>("avatar_icon")->getAvatarId()); } void LLPanelIMControlPanel::onAddFriendButtonClicked() { LLAvatarIconCtrl* avatar_icon = getChild<LLAvatarIconCtrl>("avatar_icon"); std::string full_name = avatar_icon->getFirstName() + " " + avatar_icon->getLastName(); - LLAvatarActions::requestFriendshipDialog(mAvatarID, full_name); + LLAvatarActions::requestFriendshipDialog(avatar_icon->getAvatarId(), full_name); } void LLPanelIMControlPanel::onShareButtonClicked() @@ -151,12 +140,12 @@ void LLPanelIMControlPanel::setSessionId(const LLUUID& session_id) LLIMModel& im_model = LLIMModel::instance(); - mAvatarID = im_model.getOtherParticipantID(session_id); + LLUUID avatar_id = im_model.getOtherParticipantID(session_id); // Disable "Add friend" button for friends. - childSetEnabled("add_friend_btn", !LLAvatarActions::isFriend(mAvatarID)); + childSetEnabled("add_friend_btn", !LLAvatarActions::isFriend(avatar_id)); - getChild<LLAvatarIconCtrl>("avatar_icon")->setValue(mAvatarID); + getChild<LLAvatarIconCtrl>("avatar_icon")->setValue(avatar_id); // Disable profile button if participant is not realy SL avatar LLIMModel::LLIMSession* im_session = @@ -199,20 +188,6 @@ void LLPanelGroupControlPanel::onGroupInfoButtonClicked() LLGroupActions::show(mGroupID); } -void LLPanelGroupControlPanel::onSortMenuItemClicked(const LLSD& userdata) -{ - // TODO: Check this code when when sort order menu will be added. (EM) - if (false && !mParticipantList) - return; - - std::string chosen_item = userdata.asString(); - - if (chosen_item == "sort_name") - { - mParticipantList->setSortOrder(LLParticipantList::E_SORT_BY_NAME); - } - -} void LLPanelGroupControlPanel::setSessionId(const LLUUID& session_id) { diff --git a/indra/newview/llpanelimcontrolpanel.h b/indra/newview/llpanelimcontrolpanel.h index fa101f4280..d25f33935a 100644 --- a/indra/newview/llpanelimcontrolpanel.h +++ b/indra/newview/llpanelimcontrolpanel.h @@ -73,8 +73,6 @@ private: void onViewProfileButtonClicked(); void onAddFriendButtonClicked(); void onShareButtonClicked(); - void onTeleportButtonClicked(); - void onPayButtonClicked(); LLUUID mAvatarID; }; @@ -99,7 +97,6 @@ protected: private: void onGroupInfoButtonClicked(); - void onSortMenuItemClicked(const LLSD& userdata); }; class LLPanelAdHocControlPanel : public LLPanelGroupControlPanel diff --git a/indra/newview/llpanellandmarkinfo.cpp b/indra/newview/llpanellandmarkinfo.cpp index 1152ca6873..6f3b0db498 100644 --- a/indra/newview/llpanellandmarkinfo.cpp +++ b/indra/newview/llpanellandmarkinfo.cpp @@ -344,7 +344,7 @@ void LLPanelLandmarkInfo::createLandmark(const LLUUID& folder_id) LLStringUtil::replaceChar(desc, '\n', ' '); // If no folder chosen use the "Landmarks" folder. LLLandmarkActions::createLandmarkHere(name, desc, - folder_id.notNull() ? folder_id : gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK)); + folder_id.notNull() ? folder_id : gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK)); } // static @@ -379,7 +379,7 @@ void LLPanelLandmarkInfo::populateFoldersList() mFolderCombo->removeall(); // Put the "Landmarks" folder first in list. - LLUUID landmarks_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK); + LLUUID landmarks_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK); const LLViewerInventoryCategory* cat = gInventory.getCategory(landmarks_id); if (!cat) { @@ -411,7 +411,7 @@ static bool cmp_folders(const folder_pair_t& left, const folder_pair_t& right) static void collectLandmarkFolders(LLInventoryModel::cat_array_t& cats) { - LLUUID landmarks_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK); + LLUUID landmarks_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK); // Add descendent folders of the "Landmarks" category. LLInventoryModel::item_array_t items; // unused @@ -424,7 +424,7 @@ static void collectLandmarkFolders(LLInventoryModel::cat_array_t& cats) is_category); // Add the "My Favorites" category. - LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE); + LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE); LLViewerInventoryCategory* favorites_cat = gInventory.getCategory(favorites_id); if (!favorites_cat) { diff --git a/indra/newview/llpanellandmarkinfo.h b/indra/newview/llpanellandmarkinfo.h deleted file mode 100644 index 03377986b3..0000000000 --- a/indra/newview/llpanellandmarkinfo.h +++ /dev/null @@ -1,85 +0,0 @@ -/** - * @file llpanellandmarkinfo.h - * @brief Displays landmark info in Side Tray. - * - * $LicenseInfo:firstyear=2009&license=viewergpl$ - * - * Copyright (c) 2004-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_LLPANELLANDMARKINFO_H -#define LL_LLPANELLANDMARKINFO_H - -#include "llpanelplaceinfo.h" - -class LLComboBox; -class LLLineEditor; -class LLTextEditor; - -class LLPanelLandmarkInfo : public LLPanelPlaceInfo -{ -public: - LLPanelLandmarkInfo(); - /*virtual*/ ~LLPanelLandmarkInfo(); - - /*virtual*/ BOOL postBuild(); - - /*virtual*/ void resetLocation(); - - /*virtual*/ void setInfoType(INFO_TYPE type); - - /*virtual*/ void processParcelInfo(const LLParcelData& parcel_data); - - // Displays landmark owner, creator and creation date info. - void displayItemInfo(const LLInventoryItem* pItem); - - void toggleLandmarkEditMode(BOOL enabled); - - const std::string& getLandmarkTitle() const; - const std::string getLandmarkNotes() const; - const LLUUID getLandmarkFolder() const; - - // Select current landmark folder in combobox. - BOOL setLandmarkFolder(const LLUUID& id); - - // Create a landmark for the current location - // in a folder specified by folder_id. - void createLandmark(const LLUUID& folder_id); - - static std::string getFullFolderName(const LLViewerInventoryCategory* cat); - -private: - void populateFoldersList(); - - LLTextBox* mOwner; - LLTextBox* mCreator; - LLTextBox* mCreated; - LLLineEditor* mTitleEditor; - LLTextEditor* mNotesEditor; - LLComboBox* mFolderCombo; -}; - -#endif // LL_LLPANELLANDMARKINFO_H diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp index 6d6fd38cce..91e1590dc3 100644 --- a/indra/newview/llpanellandmarks.cpp +++ b/indra/newview/llpanellandmarks.cpp @@ -553,16 +553,14 @@ void LLLandmarksPanel::onAddAction(const LLSD& userdata) const std::string command_name = userdata.asString(); if("add_landmark" == command_name) { - LLViewerInventoryItem* landmark = LLLandmarkActions::findLandmarkForAgentPos(); - if(landmark) - { - LLSideTray::getInstance()->showPanel("panel_places", - LLSD().insert("type", "landmark").insert("id",landmark->getUUID())); - } - else + if(LLLandmarkActions::landmarkAlreadyExists()) { - LLSideTray::getInstance()->showPanel("panel_places", LLSD().insert("type", "create_landmark")); + std::string location; + LLAgentUI::buildLocationString(location, LLAgentUI::LOCATION_FORMAT_FULL); + llwarns<<" Landmark already exists at location: "<< location<<llendl; + return; } + LLSideTray::getInstance()->showPanel("panel_places", LLSD().insert("type", "create_landmark")); } else if ("category" == command_name) { @@ -586,7 +584,7 @@ void LLLandmarksPanel::onAddAction(const LLSD& userdata) const menu_create_inventory_item(mCurrentSelectedList->getRootFolder(), dynamic_cast<LLFolderBridge*> (folder_bridge), LLSD( "category"), gInventory.findCategoryUUIDForType( - LLFolderType::FT_LANDMARK)); + LLAssetType::AT_LANDMARK)); } } } @@ -618,21 +616,19 @@ void LLLandmarksPanel::onClipboardAction(const LLSD& userdata) const void LLLandmarksPanel::onFoldingAction(const LLSD& userdata) { - LLFolderView* landmarks_folder = mLandmarksInventoryPanel->getRootFolder(); - LLFolderView* fav_folder = mFavoritesInventoryPanel->getRootFolder(); + if(!mCurrentSelectedList) return; + + LLFolderView* root_folder = mCurrentSelectedList->getRootFolder(); std::string command_name = userdata.asString(); if ("expand_all" == command_name) { - landmarks_folder->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_DOWN); - fav_folder->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_DOWN); - landmarks_folder->arrangeAll(); - fav_folder->arrangeAll(); + root_folder->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_DOWN); + root_folder->arrangeAll(); } else if ("collapse_all" == command_name) { - landmarks_folder->closeAllFolders(); - fav_folder->closeAllFolders(); + root_folder->closeAllFolders(); } else if ( "sort_by_date" == command_name) { @@ -643,9 +639,6 @@ void LLLandmarksPanel::onFoldingAction(const LLSD& userdata) } else { - if(!mCurrentSelectedList) return; - - LLFolderView* root_folder = mCurrentSelectedList->getRootFolder(); root_folder->doToSelected(&gInventory, userdata); } } diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index 25be09fa24..617445a27f 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -84,8 +84,8 @@ LLPanelMainInventory::LLPanelMainInventory() // Menu Callbacks (non contex menus) mCommitCallbackRegistrar.add("Inventory.DoToSelected", boost::bind(&LLPanelMainInventory::doToSelected, this, _2)); mCommitCallbackRegistrar.add("Inventory.CloseAllFolders", boost::bind(&LLPanelMainInventory::closeAllFolders, this)); - mCommitCallbackRegistrar.add("Inventory.EmptyTrash", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyTrash", LLFolderType::FT_TRASH)); - mCommitCallbackRegistrar.add("Inventory.EmptyLostAndFound", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyLostAndFound", LLFolderType::FT_LOST_AND_FOUND)); + mCommitCallbackRegistrar.add("Inventory.EmptyTrash", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyTrash", LLAssetType::AT_TRASH)); + mCommitCallbackRegistrar.add("Inventory.EmptyLostAndFound", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyLostAndFound", LLAssetType::AT_LOST_AND_FOUND)); mCommitCallbackRegistrar.add("Inventory.DoCreate", boost::bind(&LLPanelMainInventory::doCreate, this, _2)); mCommitCallbackRegistrar.add("Inventory.NewWindow", boost::bind(&LLPanelMainInventory::newWindow, this)); mCommitCallbackRegistrar.add("Inventory.ShowFilters", boost::bind(&LLPanelMainInventory::toggleFindOptions, this)); diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp index 79b33e29f5..68181f12b9 100644 --- a/indra/newview/llpanelobjectinventory.cpp +++ b/indra/newview/llpanelobjectinventory.cpp @@ -60,7 +60,6 @@ #include "llsidetray.h" #include "llstatusbar.h" #include "lltrans.h" -#include "llviewerassettype.h" #include "llviewerregion.h" #include "llviewerobjectlist.h" #include "llviewermessage.h" @@ -103,7 +102,7 @@ public: virtual const std::string& getName() const; virtual const std::string& getDisplayName() const; virtual PermissionMask getPermissionMask() const { return PERM_NONE; } - /*virtual*/ LLFolderType::EType getPreferredType() const { return LLFolderType::FT_NONE; } + /*virtual*/ LLAssetType::EType getPreferredType() const { return LLAssetType::AT_NONE; } virtual const LLUUID& getUUID() const { return mUUID; } virtual time_t getCreationDate() const; virtual LLUIImagePtr getIcon() const; @@ -276,7 +275,7 @@ bool LLTaskInvFVBridge::commitBuyItem(const LLSD& notification, const LLSD& resp msg->addUUIDFast(_PREHASH_ObjectID, notification["payload"]["task_id"].asUUID()); msg->addUUIDFast(_PREHASH_ItemID, notification["payload"]["item_id"].asUUID()); msg->addUUIDFast(_PREHASH_FolderID, - gInventory.findCategoryUUIDForType((LLFolderType::EType)notification["payload"]["type"].asInteger())); + gInventory.findCategoryUUIDForType((LLAssetType::EType)notification["payload"]["type"].asInteger())); msg->sendReliable(object->getRegion()->getHost()); } return false; @@ -574,7 +573,7 @@ BOOL LLTaskInvFVBridge::startDrag(EDragAndDropType* type, LLUUID* id) const // || gAgent.isGodlike()) { - *type = LLViewerAssetType::lookupDragAndDropType(inv->getType()); + *type = LLAssetType::lookupDragAndDropType(inv->getType()); *id = inv->getUUID(); return TRUE; @@ -779,7 +778,7 @@ BOOL LLTaskCategoryBridge::startDrag(EDragAndDropType* type, LLUUID* id) const // || gAgent.isGodlike()) { - *type = LLViewerAssetType::lookupDragAndDropType(inv->getType()); + *type = LLAssetType::lookupDragAndDropType(inv->getType()); *id = inv->getUUID(); return TRUE; @@ -1462,6 +1461,7 @@ LLTaskInvFVBridge* LLTaskInvFVBridge::createObjectBridge(LLPanelObjectInventory* item->getFlags()); break; case LLAssetType::AT_CATEGORY: + case LLAssetType::AT_FAVORITE: new_bridge = new LLTaskCategoryBridge(panel, object->getUUID(), object->getName()); @@ -1503,8 +1503,8 @@ LLPanelObjectInventory::LLPanelObjectInventory(const LLPanelObjectInventory::Par { // Setup context menu callbacks mCommitCallbackRegistrar.add("Inventory.DoToSelected", boost::bind(&LLPanelObjectInventory::doToSelected, this, _2)); - mCommitCallbackRegistrar.add("Inventory.EmptyTrash", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyTrash", LLFolderType::FT_TRASH)); - mCommitCallbackRegistrar.add("Inventory.EmptyLostAndFound", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyLostAndFound", LLFolderType::FT_LOST_AND_FOUND)); + mCommitCallbackRegistrar.add("Inventory.EmptyTrash", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyTrash", LLAssetType::AT_TRASH)); + mCommitCallbackRegistrar.add("Inventory.EmptyLostAndFound", boost::bind(&LLInventoryModel::emptyFolderType, &gInventory, "ConfirmEmptyLostAndFound", LLAssetType::AT_LOST_AND_FOUND)); mCommitCallbackRegistrar.add("Inventory.DoCreate", boost::bind(&do_nothing)); mCommitCallbackRegistrar.add("Inventory.AttachObject", boost::bind(&do_nothing)); mCommitCallbackRegistrar.add("Inventory.BeginIMSession", boost::bind(&do_nothing)); diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 2f8fae0f5d..4580eeb336 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -42,7 +42,6 @@ #include "llpanelpeople.h" // newview -#include "llaccordionctrl.h" #include "llaccordionctrltab.h" #include "llagent.h" #include "llavataractions.h" @@ -517,9 +516,6 @@ BOOL LLPanelPeople::postBuild() // call this method in case some list is empty and buttons can be in inconsistent state updateButtons(); - mOnlineFriendList->setRefreshCompleteCallback(boost::bind(&LLPanelPeople::onFriendListRefreshComplete, this, _1, _2)); - mAllFriendList->setRefreshCompleteCallback(boost::bind(&LLPanelPeople::onFriendListRefreshComplete, this, _1, _2)); - return TRUE; } @@ -564,8 +560,6 @@ void LLPanelPeople::updateFriendList() mOnlineFriendList->setDirty(); mAllFriendList->setDirty(); - - showFriendsAccordionsIfNeeded(); } void LLPanelPeople::updateNearbyList() @@ -803,15 +797,14 @@ void LLPanelPeople::reSelectedCurrentTab() void LLPanelPeople::onFilterEdit(const std::string& search_string) { - std::string search_upper = search_string; - // Searches are case-insensitive - LLStringUtil::toUpper(search_upper); - LLStringUtil::trimHead(search_upper); - - if (mFilterSubString == search_upper) + if (mFilterSubString == search_string) return; - mFilterSubString = search_upper; + mFilterSubString = search_string; + + // Searches are case-insensitive + LLStringUtil::toUpper(mFilterSubString); + LLStringUtil::trimHead(mFilterSubString); // Apply new filter. mNearbyList->setNameFilter(mFilterSubString); @@ -819,8 +812,6 @@ void LLPanelPeople::onFilterEdit(const std::string& search_string) mAllFriendList->setNameFilter(mFilterSubString); mRecentList->setNameFilter(mFilterSubString); mGroupList->setNameFilter(mFilterSubString); - - showFriendsAccordionsIfNeeded(); } void LLPanelPeople::onTabSelected(const LLSD& param) @@ -1133,49 +1124,3 @@ void LLPanelPeople::onOpen(const LLSD& key) else reSelectedCurrentTab(); } - -void LLPanelPeople::showAccordion(const std::string name, bool show) -{ - if(name.empty()) - { - llwarns << "No name provided" << llendl; - return; - } - - LLAccordionCtrlTab* tab = getChild<LLAccordionCtrlTab>(name); - tab->setVisible(show); - if(show) - { - // expand accordion - tab->changeOpenClose(false); - } -} - -void LLPanelPeople::showFriendsAccordionsIfNeeded() -{ - if(FRIENDS_TAB_NAME == getActiveTabName()) - { - // Expand and show accordions if needed, else - hide them - showAccordion("tab_online", mOnlineFriendList->filterHasMatches()); - showAccordion("tab_all", mAllFriendList->filterHasMatches()); - - // Rearrange accordions - LLAccordionCtrl* accordion = getChild<LLAccordionCtrl>("friends_accordion"); - accordion->arrange(); - } -} - -void LLPanelPeople::onFriendListRefreshComplete(LLUICtrl*ctrl, const LLSD& param) -{ - if(ctrl == mOnlineFriendList) - { - showAccordion("tab_online", param.asInteger()); - } - else if(ctrl == mAllFriendList) - { - showAccordion("tab_all", param.asInteger()); - } - - LLAccordionCtrl* accordion = getChild<LLAccordionCtrl>("friends_accordion"); - accordion->arrange(); -} diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index 9bf9befe90..dc0aaeb70f 100644 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -124,12 +124,6 @@ private: void onFriendsAccordionExpandedCollapsed(const LLSD& param, LLAvatarList* avatar_list); - void showAccordion(const std::string name, bool show); - - void showFriendsAccordionsIfNeeded(); - - void onFriendListRefreshComplete(LLUICtrl*ctrl, const LLSD& param); - LLFilterEditor* mFilterEditor; LLTabContainer* mTabContainer; LLAvatarList* mOnlineFriendList; diff --git a/indra/newview/llpanelplaceinfo.cpp b/indra/newview/llpanelplaceinfo.cpp index 2c5f4b5afa..34644cfe42 100644 --- a/indra/newview/llpanelplaceinfo.cpp +++ b/indra/newview/llpanelplaceinfo.cpp @@ -1,6 +1,6 @@ /** * @file llpanelplaceinfo.cpp - * @brief Base class for place information in Side Tray. + * @brief Displays place information in Side Tray. * * $LicenseInfo:firstyear=2009&license=viewergpl$ * @@ -39,34 +39,66 @@ #include "llsecondlifeurls.h" #include "llinventory.h" +#include "llparcel.h" -#include "llsdutil_math.h" +#include "llqueryflags.h" +#include "llbutton.h" +#include "llcombobox.h" +#include "lliconctrl.h" #include "llscrollcontainer.h" #include "lltextbox.h" +#include "lltrans.h" +#include "llaccordionctrl.h" +#include "llaccordionctrltab.h" #include "llagent.h" +#include "llagentui.h" +#include "llappviewer.h" #include "llavatarpropertiesprocessor.h" +#include "llcallbacklist.h" #include "llexpandabletextbox.h" #include "llfloaterworldmap.h" +#include "llfloaterbuycurrency.h" #include "llinventorymodel.h" +#include "lllandmarkactions.h" #include "llpanelpick.h" #include "lltexturectrl.h" +#include "llstatusbar.h" #include "llviewerinventory.h" #include "llviewerparcelmgr.h" #include "llviewerregion.h" +#include "llviewercontrol.h" #include "llviewertexteditor.h" #include "llworldmap.h" +#include "llsdutil_math.h" + +//---------------------------------------------------------------------------- +// Aux types and methods +//---------------------------------------------------------------------------- + +typedef std::pair<LLUUID, std::string> folder_pair_t; + +static bool cmp_folders(const folder_pair_t& left, const folder_pair_t& right); +static void collectLandmarkFolders(LLInventoryModel::cat_array_t& cats); + +static LLRegisterPanelClassWrapper<LLPanelPlaceInfo> t_place_info("panel_place_info"); LLPanelPlaceInfo::LLPanelPlaceInfo() : LLPanel(), mParcelID(), mRequestedID(), mPosRegion(), - mMinHeight(0) + mLandmarkID(), + mMinHeight(0), + mScrollingPanel(NULL), + mInfoPanel(NULL), + mMediaPanel(NULL), + mForSalePanel(NULL), + mYouAreHerePanel(NULL), + mSelectedParcelID(-1) {} -//virtual LLPanelPlaceInfo::~LLPanelPlaceInfo() { if (mParcelID.notNull()) @@ -75,41 +107,220 @@ LLPanelPlaceInfo::~LLPanelPlaceInfo() } } -//virtual BOOL LLPanelPlaceInfo::postBuild() { - mTitle = getChild<LLTextBox>("title"); + mTitle = getChild<LLTextBox>("panel_title"); mCurrentTitle = mTitle->getText(); + mForSalePanel = getChild<LLPanel>("for_sale_panel"); + mYouAreHerePanel = getChild<LLPanel>("here_panel"); + gIdleCallbacks.addFunction(&LLPanelPlaceInfo::updateYouAreHereBanner, this); + + //Icon value should contain sale price of last selected parcel. + mForSalePanel->getChild<LLIconCtrl>("icon_for_sale")-> + setMouseDownCallback(boost::bind(&LLPanelPlaceInfo::onForSaleBannerClick, this)); + mSnapshotCtrl = getChild<LLTextureCtrl>("logo"); mRegionName = getChild<LLTextBox>("region_title"); mParcelName = getChild<LLTextBox>("parcel_title"); mDescEditor = getChild<LLExpandableTextBox>("description"); mMaturityRatingText = getChild<LLTextBox>("maturity_value"); + mParcelOwner = getChild<LLTextBox>("owner_value"); + mLastVisited = getChild<LLTextBox>("last_visited_value"); + + mRatingText = getChild<LLTextBox>("rating_value"); + mVoiceText = getChild<LLTextBox>("voice_value"); + mFlyText = getChild<LLTextBox>("fly_value"); + mPushText = getChild<LLTextBox>("push_value"); + mBuildText = getChild<LLTextBox>("build_value"); + mScriptsText = getChild<LLTextBox>("scripts_value"); + mDamageText = getChild<LLTextBox>("damage_value"); + + mRegionNameText = getChild<LLTextBox>("region_name"); + mRegionTypeText = getChild<LLTextBox>("region_type"); + mRegionRatingText = getChild<LLTextBox>("region_rating"); + mRegionOwnerText = getChild<LLTextBox>("region_owner"); + mRegionGroupText = getChild<LLTextBox>("region_group"); + + mEstateNameText = getChild<LLTextBox>("estate_name"); + mEstateRatingText = getChild<LLTextBox>("estate_rating"); + mEstateOwnerText = getChild<LLTextBox>("estate_owner"); + mCovenantText = getChild<LLTextEditor>("covenant"); + + mSalesPriceText = getChild<LLTextBox>("sales_price"); + mAreaText = getChild<LLTextBox>("area"); + mTrafficText = getChild<LLTextBox>("traffic"); + mPrimitivesText = getChild<LLTextBox>("primitives"); + mParcelScriptsText = getChild<LLTextBox>("parcel_scripts"); + mTerraformLimitsText = getChild<LLTextBox>("terraform_limits"); + mSubdivideText = getChild<LLTextEditor>("subdivide"); + mResaleText = getChild<LLTextEditor>("resale"); + mSaleToText = getChild<LLTextBox>("sale_to"); - LLScrollContainer* scroll_container = getChild<LLScrollContainer>("place_scroll"); + mOwner = getChild<LLTextBox>("owner"); + mCreator = getChild<LLTextBox>("creator"); + mCreated = getChild<LLTextBox>("created"); + + mTitleEditor = getChild<LLLineEditor>("title_editor"); + mNotesEditor = getChild<LLTextEditor>("notes_editor"); + mFolderCombo = getChild<LLComboBox>("folder_combo"); + + LLScrollContainer* scroll_container = getChild<LLScrollContainer>("scroll_container"); scroll_container->setBorderVisible(FALSE); mMinHeight = scroll_container->getScrolledViewRect().getHeight(); + mScrollingPanel = getChild<LLPanel>("scrolling_panel"); + mInfoPanel = getChild<LLPanel>("info_panel"); + mMediaPanel = getChild<LLMediaPanel>("media_panel"); + if (!mMediaPanel) + return FALSE; + return TRUE; } -//virtual +void LLPanelPlaceInfo::displayItemInfo(const LLInventoryItem* pItem) +{ + if (!pItem) + return; + + mLandmarkID = pItem->getUUID(); + + if(!gCacheName) + return; + + const LLPermissions& perm = pItem->getPermissions(); + + ////////////////// + // CREATOR NAME // + ////////////////// + if (pItem->getCreatorUUID().notNull()) + { + std::string name; + LLUUID creator_id = pItem->getCreatorUUID(); + if (!gCacheName->getFullName(creator_id, name)) + { + gCacheName->get(creator_id, FALSE, + boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, this, mCreator, _2, _3)); + } + mCreator->setText(name); + } + else + { + mCreator->setText(getString("unknown")); + } + + //////////////// + // OWNER NAME // + //////////////// + if(perm.isOwned()) + { + std::string name; + if (perm.isGroupOwned()) + { + LLUUID group_id = perm.getGroup(); + if (!gCacheName->getGroupName(group_id, name)) + { + gCacheName->get(group_id, TRUE, + boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, this, mOwner, _2, _3)); + } + } + else + { + LLUUID owner_id = perm.getOwner(); + if (!gCacheName->getFullName(owner_id, name)) + { + gCacheName->get(owner_id, FALSE, + boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, this, mOwner, _2, _3)); + } + } + mOwner->setText(name); + } + else + { + mOwner->setText(getString("public")); + } + + ////////////////// + // ACQUIRE DATE // + ////////////////// + time_t time_utc = pItem->getCreationDate(); + if (0 == time_utc) + { + mCreated->setText(getString("unknown")); + } + else + { + std::string timeStr = getString("acquired_date"); + LLSD substitution; + substitution["datetime"] = (S32) time_utc; + LLStringUtil::format (timeStr, substitution); + mCreated->setText(timeStr); + } + + mTitleEditor->setText(pItem->getName()); + mNotesEditor->setText(pItem->getDescription()); +} + +void LLPanelPlaceInfo::nameUpdatedCallback( + LLTextBox* text, + const std::string& first, + const std::string& last) +{ + text->setText(first + " " + last); +} + void LLPanelPlaceInfo::resetLocation() { mParcelID.setNull(); mRequestedID.setNull(); + mLandmarkID.setNull(); mPosRegion.clearVec(); - + mForSalePanel->setVisible(FALSE); + mYouAreHerePanel->setVisible(FALSE); std::string not_available = getString("not_available"); mMaturityRatingText->setValue(not_available); + mParcelOwner->setValue(not_available); + mLastVisited->setValue(not_available); mRegionName->setText(not_available); mParcelName->setText(not_available); mDescEditor->setText(not_available); - + mCreator->setText(not_available); + mOwner->setText(not_available); + mCreated->setText(not_available); + mTitleEditor->setText(LLStringUtil::null); + mNotesEditor->setText(LLStringUtil::null); mSnapshotCtrl->setImageAssetID(LLUUID::null); mSnapshotCtrl->setFallbackImageName("default_land_picture.j2c"); + + mRatingText->setText(not_available); + mVoiceText->setText(not_available); + mFlyText->setText(not_available); + mPushText->setText(not_available); + mBuildText->setText(not_available); + mParcelScriptsText->setText(not_available); + mDamageText->setText(not_available); + + mRegionNameText->setValue(not_available); + mRegionTypeText->setValue(not_available); + mRegionRatingText->setValue(not_available); + mRegionOwnerText->setValue(not_available); + mRegionGroupText->setValue(not_available); + + mEstateNameText->setValue(not_available); + mEstateRatingText->setValue(not_available); + mEstateOwnerText->setValue(not_available); + mCovenantText->setValue(not_available); + + mSalesPriceText->setValue(not_available); + mAreaText->setValue(not_available); + mTrafficText->setValue(not_available); + mPrimitivesText->setValue(not_available); + mParcelScriptsText->setValue(not_available); + mTerraformLimitsText->setValue(not_available); + mSubdivideText->setValue(not_available); + mResaleText->setValue(not_available); + mSaleToText->setValue(not_available); } //virtual @@ -119,55 +330,108 @@ void LLPanelPlaceInfo::setParcelID(const LLUUID& parcel_id) sendParcelInfoRequest(); } -//virtual void LLPanelPlaceInfo::setInfoType(INFO_TYPE type) { - mTitle->setText(mCurrentTitle); + LLPanel* landmark_info_panel = getChild<LLPanel>("landmark_info_panel"); + LLPanel* landmark_edit_panel = getChild<LLPanel>("landmark_edit_panel"); - mInfoType = type; -} + bool is_info_type_agent = type == AGENT; + bool is_info_type_create_landmark = type == CREATE_LANDMARK; + bool is_info_type_landmark = type == LANDMARK; + bool is_info_type_teleport_history = type == TELEPORT_HISTORY; -void LLPanelPlaceInfo::sendParcelInfoRequest() -{ - if (mParcelID != mRequestedID) + getChild<LLTextBox>("maturity_label")->setVisible(!is_info_type_agent); + mMaturityRatingText->setVisible(!is_info_type_agent); + + getChild<LLTextBox>("owner_label")->setVisible(is_info_type_agent); + mParcelOwner->setVisible(is_info_type_agent); + + getChild<LLTextBox>("last_visited_label")->setVisible(is_info_type_teleport_history); + mLastVisited->setVisible(is_info_type_teleport_history); + + landmark_info_panel->setVisible(is_info_type_landmark); + landmark_edit_panel->setVisible(is_info_type_landmark || is_info_type_create_landmark); + + getChild<LLTextBox>("folder_lable")->setVisible(is_info_type_create_landmark); + mFolderCombo->setVisible(is_info_type_create_landmark); + + getChild<LLAccordionCtrl>("advanced_info_accordion")->setVisible(is_info_type_agent); + + switch(type) { - LLRemoteParcelInfoProcessor::getInstance()->addObserver(mParcelID, this); - LLRemoteParcelInfoProcessor::getInstance()->sendParcelInfoRequest(mParcelID); + case CREATE_LANDMARK: + mCurrentTitle = getString("title_create_landmark"); - mRequestedID = mParcelID; + mTitleEditor->setEnabled(TRUE); + mNotesEditor->setEnabled(TRUE); + + populateFoldersList(); + break; + + case AGENT: + case PLACE: + mCurrentTitle = getString("title_place"); + + if (!isMediaPanelVisible()) + { + mTitle->setText(mCurrentTitle); + } + break; + + case LANDMARK: + mCurrentTitle = getString("title_landmark"); + + mTitleEditor->setEnabled(FALSE); + mNotesEditor->setEnabled(FALSE); + + populateFoldersList(); + break; + + case TELEPORT_HISTORY: + mCurrentTitle = getString("title_teleport_history"); + break; } + + if (type != AGENT) + toggleMediaPanel(FALSE); + + mInfoType = type; } -void LLPanelPlaceInfo::displayParcelInfo(const LLUUID& region_id, - const LLVector3d& pos_global) +BOOL LLPanelPlaceInfo::isMediaPanelVisible() { - LLViewerRegion* region = gAgent.getRegion(); - if (!region) - return; + if (!mMediaPanel) + return FALSE; - mPosRegion.setVec((F32)fmod(pos_global.mdV[VX], (F64)REGION_WIDTH_METERS), - (F32)fmod(pos_global.mdV[VY], (F64)REGION_WIDTH_METERS), - (F32)pos_global.mdV[VZ]); + return mMediaPanel->getVisible(); +} - LLSD body; - std::string url = region->getCapability("RemoteParcelRequest"); - if (!url.empty()) +void LLPanelPlaceInfo::toggleMediaPanel(BOOL visible) +{ + if (!mMediaPanel) + return; + + if (visible) { - body["location"] = ll_sd_from_vector3(mPosRegion); - if (!region_id.isNull()) - { - body["region_id"] = region_id; - } - if (!pos_global.isExactlyZero()) - { - U64 region_handle = to_region_handle(pos_global); - body["region_handle"] = ll_sd_from_U64(region_handle); - } - LLHTTPClient::post(url, body, new LLRemoteParcelRequestResponder(getObserverHandle())); + mTitle->setText(getString("title_media")); } else { - mDescEditor->setText(getString("server_update_text")); + mTitle->setText(mCurrentTitle); + } + + mInfoPanel->setVisible(!visible); + mMediaPanel->setVisible(visible); +} + +void LLPanelPlaceInfo::sendParcelInfoRequest() +{ + if (mParcelID != mRequestedID) + { + LLRemoteParcelInfoProcessor::getInstance()->addObserver(mParcelID, this); + LLRemoteParcelInfoProcessor::getInstance()->sendParcelInfoRequest(mParcelID); + + mRequestedID = mParcelID; } } @@ -209,6 +473,27 @@ void LLPanelPlaceInfo::processParcelInfo(const LLParcelData& parcel_data) mDescEditor->setText(parcel_data.desc); } + // HACK: Flag 0x2 == adult region, + // Flag 0x1 == mature region, otherwise assume PG + std::string rating = LLViewerRegion::accessToString(SIM_ACCESS_PG); + if (parcel_data.flags & 0x2) + { + rating = LLViewerRegion::accessToString(SIM_ACCESS_ADULT); + } + else if (parcel_data.flags & 0x1) + { + rating = LLViewerRegion::accessToString(SIM_ACCESS_MATURE); + } + + mMaturityRatingText->setValue(rating); + mRatingText->setValue(rating); + + //update for_sale banner, here we should use DFQ_FOR_SALE instead of PF_FOR_SALE + //because we deal with remote parcel response format + bool is_for_sale = (parcel_data.flags & DFQ_FOR_SALE) && + mInfoType == AGENT ? TRUE : FALSE; + mForSalePanel->setVisible(is_for_sale); + S32 region_x; S32 region_y; S32 region_z; @@ -236,25 +521,408 @@ void LLPanelPlaceInfo::processParcelInfo(const LLParcelData& parcel_data) { mParcelName->setText(getString("not_available")); } + + if (mInfoType == CREATE_LANDMARK) + { + if (parcel_data.name.empty()) + { + mTitleEditor->setText(llformat("%s (%d, %d, %d)", + parcel_data.sim_name.c_str(), region_x, region_y, region_z)); + } + else + { + mTitleEditor->setText(parcel_data.name); + } + + // FIXME: Creating landmark works only for current agent location. + std::string desc; + LLAgentUI::buildLocationString(desc, LLAgentUI::LOCATION_FORMAT_FULL, gAgent.getPositionAgent()); + mNotesEditor->setText(desc); + + if (!LLLandmarkActions::landmarkAlreadyExists()) + { + createLandmark(mFolderCombo->getValue().asUUID()); + } + } } -// virtual -void LLPanelPlaceInfo::handleVisibilityChange(BOOL new_visibility) +void LLPanelPlaceInfo::displayParcelInfo(const LLUUID& region_id, + const LLVector3d& pos_global) { - LLPanel::handleVisibilityChange(new_visibility); + LLViewerRegion* region = gAgent.getRegion(); + if (!region) + return; - LLViewerParcelMgr* parcel_mgr = LLViewerParcelMgr::getInstance(); - if (!parcel_mgr) + mPosRegion.setVec((F32)fmod(pos_global.mdV[VX], (F64)REGION_WIDTH_METERS), + (F32)fmod(pos_global.mdV[VY], (F64)REGION_WIDTH_METERS), + (F32)pos_global.mdV[VZ]); + + LLSD body; + std::string url = region->getCapability("RemoteParcelRequest"); + if (!url.empty()) + { + body["location"] = ll_sd_from_vector3(mPosRegion); + if (!region_id.isNull()) + { + body["region_id"] = region_id; + } + if (!pos_global.isExactlyZero()) + { + U64 region_handle = to_region_handle(pos_global); + body["region_handle"] = ll_sd_from_U64(region_handle); + } + LLHTTPClient::post(url, body, new LLRemoteParcelRequestResponder(getObserverHandle())); + } + else + { + mDescEditor->setText(getString("server_update_text")); + } +} + +void LLPanelPlaceInfo::displaySelectedParcelInfo(LLParcel* parcel, + LLViewerRegion* region, + const LLVector3d& pos_global, + bool is_current_parcel) +{ + if (!region || !parcel) return; - // Remove land selection when panel hides. - if (!new_visibility) + // send EstateCovenantInfo message + LLMessageSystem *msg = gMessageSystem; + msg->newMessage("EstateCovenantRequest"); + msg->nextBlockFast(_PREHASH_AgentData); + msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); + msg->addUUIDFast(_PREHASH_SessionID,gAgent.getSessionID()); + msg->sendReliable(region->getHost()); + + LLParcelData parcel_data; + + // HACK: Converting sim access flags to the format + // returned by remote parcel response. + switch(region->getSimAccess()) { - if (!parcel_mgr->selectionEmpty()) + case SIM_ACCESS_MATURE: + parcel_data.flags = 0x1; + break; + + case SIM_ACCESS_ADULT: + parcel_data.flags = 0x2; + break; + + default: + parcel_data.flags = 0; + } + parcel_data.desc = parcel->getDesc(); + parcel_data.name = parcel->getName(); + parcel_data.sim_name = region->getName(); + parcel_data.snapshot_id = parcel->getSnapshotID(); + mPosRegion.setVec((F32)fmod(pos_global.mdV[VX], (F64)REGION_WIDTH_METERS), + (F32)fmod(pos_global.mdV[VY], (F64)REGION_WIDTH_METERS), + (F32)pos_global.mdV[VZ]); + parcel_data.global_x = pos_global.mdV[VX]; + parcel_data.global_y = pos_global.mdV[VY]; + parcel_data.global_z = pos_global.mdV[VZ]; + + std::string on = getString("on"); + std::string off = getString("off"); + + // Processing parcel characteristics + if (parcel->getParcelFlagAllowVoice()) + { + mVoiceText->setText(on); + } + else + { + mVoiceText->setText(off); + } + + if (!region->getBlockFly() && parcel->getAllowFly()) + { + mFlyText->setText(on); + } + else + { + mFlyText->setText(off); + } + + if (region->getRestrictPushObject() || parcel->getRestrictPushObject()) + { + mPushText->setText(off); + } + else + { + mPushText->setText(on); + } + + if (parcel->getAllowModify()) + { + mBuildText->setText(on); + } + else + { + mBuildText->setText(off); + } + + if((region->getRegionFlags() & REGION_FLAGS_SKIP_SCRIPTS) || + (region->getRegionFlags() & REGION_FLAGS_ESTATE_SKIP_SCRIPTS) || + !parcel->getAllowOtherScripts()) + { + mScriptsText->setText(off); + } + else + { + mScriptsText->setText(on); + } + + if (region->getAllowDamage() || parcel->getAllowDamage()) + { + mDamageText->setText(on); + } + else + { + mDamageText->setText(off); + } + + mRegionNameText->setText(region->getName()); + mRegionTypeText->setText(region->getSimProductName()); + mRegionRatingText->setText(region->getSimAccessString()); + + // Determine parcel owner + if (parcel->isPublic()) + { + mParcelOwner->setText(getString("public")); + mRegionOwnerText->setText(getString("public")); + } + else + { + if (parcel->getIsGroupOwned()) { - parcel_mgr->deselectLand(); + mRegionOwnerText->setText(getString("group_owned_text")); + + if(!parcel->getGroupID().isNull()) + { + // FIXME: Using parcel group as region group. + gCacheName->get(parcel->getGroupID(), TRUE, + boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, this, mRegionGroupText, _2, _3)); + + gCacheName->get(parcel->getGroupID(), TRUE, + boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, this, mParcelOwner, _2, _3)); + } + else + { + std::string owner = getString("none_text"); + mRegionGroupText->setText(owner); + mParcelOwner->setText(owner); + } + } + else + { + // Figure out the owner's name + gCacheName->get(parcel->getOwnerID(), FALSE, + boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, this, mParcelOwner, _2, _3)); + gCacheName->get(region->getOwner(), FALSE, + boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, this, mRegionOwnerText, _2, _3)); + } + + if(LLParcel::OS_LEASE_PENDING == parcel->getOwnershipStatus()) + { + mRegionOwnerText->setText(mRegionOwnerText->getText() + getString("sale_pending_text")); + } + } + + mEstateRatingText->setText(region->getSimAccessString()); + + S32 area; + S32 claim_price; + S32 rent_price; + F32 dwell; + BOOL for_sale = parcel->getForSale(); + LLViewerParcelMgr::getInstance()->getDisplayInfo(&area, + &claim_price, + &rent_price, + &for_sale, + &dwell); + if (for_sale) + { + // Adding "For Sale" flag in remote parcel response format. + parcel_data.flags |= DFQ_FOR_SALE; + + const LLUUID& auth_buyer_id = parcel->getAuthorizedBuyerID(); + if(auth_buyer_id.notNull()) + { + gCacheName->get(auth_buyer_id, TRUE, + boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, this, mSaleToText, _2, _3)); + + // Show sales info to a specific person or a group he belongs to. + if (auth_buyer_id != gAgent.getID() && !gAgent.isInGroup(auth_buyer_id)) + { + for_sale = FALSE; + } + } + else + { + mSaleToText->setText(getString("anyone")); + } + + const U8* sign = (U8*)getString("price_text").c_str(); + const U8* sqm = (U8*)getString("area_text").c_str(); + + mSalesPriceText->setText(llformat("%s%d ", sign, parcel->getSalePrice())); + mAreaText->setText(llformat("%d %s", area, sqm)); + mTrafficText->setText(llformat("%.0f", dwell)); + + // Can't have more than region max tasks, regardless of parcel + // object bonus factor. + S32 primitives = llmin(llround(parcel->getMaxPrimCapacity() * parcel->getParcelPrimBonus()), + (S32)region->getMaxTasks()); + + const U8* available = (U8*)getString("available").c_str(); + const U8* allocated = (U8*)getString("allocated").c_str(); + + mPrimitivesText->setText(llformat("%d %s, %d %s", primitives, available, parcel->getPrimCount(), allocated)); + + if (parcel->getAllowOtherScripts()) + { + mParcelScriptsText->setText(getString("all_residents_text")); + } + else if (parcel->getAllowGroupScripts()) + { + mParcelScriptsText->setText(getString("group_text")); + } + else + { + mParcelScriptsText->setText(off); + } + + mTerraformLimitsText->setText(parcel->getAllowTerraform() ? on : off); + + if (region->getRegionFlags() & REGION_FLAGS_ALLOW_PARCEL_CHANGES) + { + mSubdivideText->setText(getString("can_change")); + } + else + { + mSubdivideText->setText(getString("can_not_change")); + } + if (region->getRegionFlags() & REGION_FLAGS_BLOCK_LAND_RESELL) + { + mResaleText->setText(getString("can_not_resell")); + } + else + { + mResaleText->setText(getString("can_resell")); + } + } + + mSelectedParcelID = parcel->getLocalID(); + mLastSelectedRegionID = region->getRegionID(); + processParcelInfo(parcel_data); + + mYouAreHerePanel->setVisible(is_current_parcel); + getChild<LLAccordionCtrlTab>("sales_tab")->setVisible(for_sale); +} + +void LLPanelPlaceInfo::updateEstateName(const std::string& name) +{ + mEstateNameText->setText(name); +} + +void LLPanelPlaceInfo::updateEstateOwnerName(const std::string& name) +{ + mEstateOwnerText->setText(name); +} + +void LLPanelPlaceInfo::updateCovenantText(const std::string &text) +{ + mCovenantText->setText(text); +} + +void LLPanelPlaceInfo::updateLastVisitedText(const LLDate &date) +{ + if (date.isNull()) + { + mLastVisited->setText(getString("unknown")); + } + else + { + std::string timeStr = getString("acquired_date"); + LLSD substitution; + substitution["datetime"] = (S32) date.secondsSinceEpoch(); + LLStringUtil::format (timeStr, substitution); + mLastVisited->setText(timeStr); + } +} + +void LLPanelPlaceInfo::toggleLandmarkEditMode(BOOL enabled) +{ + // If switching to edit mode while creating landmark + // the "Create Landmark" title remains. + if (enabled && mInfoType != CREATE_LANDMARK) + { + mTitle->setText(getString("title_edit_landmark")); + } + else + { + mTitle->setText(mCurrentTitle); + } + + if (mNotesEditor->getReadOnly() == (enabled == TRUE)) + { + mTitleEditor->setEnabled(enabled); + mNotesEditor->setReadOnly(!enabled); + mFolderCombo->setVisible(enabled); + getChild<LLTextBox>("folder_lable")->setVisible(enabled); + + // HACK: To change the text color in a text editor + // when it was enabled/disabled we set the text once again. + mNotesEditor->setText(mNotesEditor->getText()); + } +} + +const std::string& LLPanelPlaceInfo::getLandmarkTitle() const +{ + return mTitleEditor->getText(); +} + +const std::string LLPanelPlaceInfo::getLandmarkNotes() const +{ + return mNotesEditor->getText(); +} + +const LLUUID LLPanelPlaceInfo::getLandmarkFolder() const +{ + return mFolderCombo->getValue().asUUID(); +} + +BOOL LLPanelPlaceInfo::setLandmarkFolder(const LLUUID& id) +{ + return mFolderCombo->setCurrentByID(id); +} + +void LLPanelPlaceInfo::createLandmark(const LLUUID& folder_id) +{ + std::string name = mTitleEditor->getText(); + std::string desc = mNotesEditor->getText(); + + LLStringUtil::trim(name); + LLStringUtil::trim(desc); + + // If typed name is empty use the parcel name instead. + if (name.empty()) + { + name = mParcelName->getText(); + + // If no parcel exists use the region name instead. + if (name.empty()) + { + name = mRegionName->getText(); } } + + LLStringUtil::replaceChar(desc, '\n', ' '); + // If no folder chosen use the "Landmarks" folder. + LLLandmarkActions::createLandmarkHere(name, desc, + folder_id.notNull() ? folder_id : gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK)); } void LLPanelPlaceInfo::createPick(const LLVector3d& pos_global, LLPanelPickEdit* pick_panel) @@ -274,10 +942,159 @@ void LLPanelPlaceInfo::createPick(const LLVector3d& pos_global, LLPanelPickEdit* pick_panel->setPickData(&data); } -// static -void LLPanelPlaceInfo::nameUpdatedCallback(LLTextBox* text, - const std::string& first, - const std::string& last) +// virtual +void LLPanelPlaceInfo::handleVisibilityChange (BOOL new_visibility) { - text->setText(first + " " + last); + LLPanel::handleVisibilityChange(new_visibility); + + LLViewerParcelMgr* parcel_mgr = LLViewerParcelMgr::getInstance(); + if (!parcel_mgr) + return; + + // Remove land selection when panel hides. + if (!new_visibility) + { + if (!parcel_mgr->selectionEmpty()) + { + parcel_mgr->deselectLand(); + } + } +} + +void LLPanelPlaceInfo::populateFoldersList() +{ + // Collect all folders that can contain landmarks. + LLInventoryModel::cat_array_t cats; + collectLandmarkFolders(cats); + + mFolderCombo->removeall(); + + // Put the "Landmarks" folder first in list. + LLUUID landmarks_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK); + const LLViewerInventoryCategory* cat = gInventory.getCategory(landmarks_id); + if (!cat) + { + llwarns << "Cannot find the landmarks folder" << llendl; + } + std::string cat_full_name = getFullFolderName(cat); + mFolderCombo->add(cat_full_name, cat->getUUID()); + + typedef std::vector<folder_pair_t> folder_vec_t; + folder_vec_t folders; + // Sort the folders by their full name. + for (S32 i = 0; i < cats.count(); i++) + { + cat = cats.get(i); + cat_full_name = getFullFolderName(cat); + folders.push_back(folder_pair_t(cat->getUUID(), cat_full_name)); + } + sort(folders.begin(), folders.end(), cmp_folders); + + // Finally, populate the combobox. + for (folder_vec_t::const_iterator it = folders.begin(); it != folders.end(); it++) + mFolderCombo->add(it->second, LLSD(it->first)); +} + +//static +void LLPanelPlaceInfo::updateYouAreHereBanner(void* userdata) +{ + //YouAreHere Banner should be displayed only for selected places, + // If you want to display it for landmark or teleport history item, you should check by mParcelId + + LLPanelPlaceInfo* self = static_cast<LLPanelPlaceInfo*>(userdata); + if(!self->getVisible()) + return; + if(!gDisconnected) + { + static F32 radius = gSavedSettings.getF32("YouAreHereDistance"); + + BOOL display_banner = gAgent.getRegion()->getRegionID() == self->mLastSelectedRegionID && + LLAgentUI::checkAgentDistance(self->mPosRegion, radius); + + self->mYouAreHerePanel->setVisible(display_banner); + } +} + +void LLPanelPlaceInfo::onForSaleBannerClick() +{ + LLViewerParcelMgr* mgr = LLViewerParcelMgr::getInstance(); + LLParcelSelectionHandle hParcel = mgr->getFloatingParcelSelection(); + LLViewerRegion* selected_region = mgr->getSelectionRegion(); + if(!hParcel.isNull() && selected_region) + { + if(hParcel->getParcel()->getLocalID() == mSelectedParcelID && + mLastSelectedRegionID ==selected_region->getRegionID()) + { + if(hParcel->getParcel()->getSalePrice() - gStatusBar->getBalance() > 0) + { + LLFloaterBuyCurrency::buyCurrency("Buying selected land ", hParcel->getParcel()->getSalePrice()); + } + else + { + LLViewerParcelMgr::getInstance()->startBuyLand(); + } + } + else + { + LL_WARNS("Places") << "User is trying to buy remote parcel.Operation is not supported"<< LL_ENDL; + } + + } + + +} + +/*static*/ +std::string LLPanelPlaceInfo::getFullFolderName(const LLViewerInventoryCategory* cat) +{ + std::string name = cat->getName(); + LLUUID parent_id; + + // translate category name, if it's right below the root + // FIXME: it can throw notification about non existent string in strings.xml + if (cat->getParentUUID().notNull() && cat->getParentUUID() == gInventory.getRootFolderID()) + { + LLTrans::findString(name, "InvFolder " + name); + } + + // we don't want "My Inventory" to appear in the name + while ((parent_id = cat->getParentUUID()).notNull() && parent_id != gInventory.getRootFolderID()) + { + cat = gInventory.getCategory(parent_id); + name = cat->getName() + "/" + name; + } + + return name; +} + +static bool cmp_folders(const folder_pair_t& left, const folder_pair_t& right) +{ + return left.second < right.second; +} + +static void collectLandmarkFolders(LLInventoryModel::cat_array_t& cats) +{ + LLUUID landmarks_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK); + + // Add descendent folders of the "Landmarks" category. + LLInventoryModel::item_array_t items; // unused + LLIsType is_category(LLAssetType::AT_CATEGORY); + gInventory.collectDescendentsIf( + landmarks_id, + cats, + items, + LLInventoryModel::EXCLUDE_TRASH, + is_category); + + // Add the "My Favorites" category. + LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE); + LLViewerInventoryCategory* favorites_cat = gInventory.getCategory(favorites_id); + if (!favorites_cat) + { + llwarns << "Cannot find the favorites folder" << llendl; + } + else + { + cats.put(favorites_cat); + } } diff --git a/indra/newview/llpanelplaceinfo.h b/indra/newview/llpanelplaceinfo.h index c9e1347542..07a2434d59 100644 --- a/indra/newview/llpanelplaceinfo.h +++ b/indra/newview/llpanelplaceinfo.h @@ -1,6 +1,6 @@ /** * @file llpanelplaceinfo.h - * @brief Base class for place information in Side Tray. + * @brief Displays place information in Side Tray. * * $LicenseInfo:firstyear=2009&license=viewergpl$ * @@ -38,13 +38,19 @@ #include "v3dmath.h" #include "lluuid.h" +#include "llpanelmedia.h" #include "llremoteparcelrequest.h" +class LLButton; +class LLComboBox; class LLExpandableTextBox; class LLInventoryItem; +class LLLineEditor; class LLPanelPickEdit; class LLParcel; +class LLIconCtrl; class LLTextBox; +class LLTextEditor; class LLTextureCtrl; class LLViewerRegion; class LLViewerInventoryCategory; @@ -68,18 +74,30 @@ public: // Ignore all old location information, useful if you are // recycling an existing dialog and need to clear it. - virtual void resetLocation(); + void resetLocation(); // Sends a request for data about the given parcel, which will // only update the location if there is none already available. /*virtual*/ void setParcelID(const LLUUID& parcel_id); - // Depending on how the panel was triggered - // (from landmark or current location, or other) + // Depending on how the panel was triggered + // (from landmark or current location, or other) // sets a corresponding title and contents. - virtual void setInfoType(INFO_TYPE type); + void setInfoType(INFO_TYPE type); + + // Create a landmark for the current location + // in a folder specified by folder_id. + void createLandmark(const LLUUID& folder_id); + + // Create a pick for the location specified + // by global_pos. + void createPick(const LLVector3d& pos_global, LLPanelPickEdit* pick_panel); + + BOOL isMediaPanelVisible(); + void toggleMediaPanel(BOOL visible); + void displayItemInfo(const LLInventoryItem* pItem); + /*virtual*/ void setErrorStatus(U32 status, const std::string& reason); - // Requests remote parcel info by parcel ID. void sendParcelInfoRequest(); // Displays information about a remote parcel. @@ -87,37 +105,109 @@ public: void displayParcelInfo(const LLUUID& region_id, const LLVector3d& pos_global); - /*virtual*/ void setErrorStatus(U32 status, const std::string& reason); + // Displays information about the currently selected parcel + // without sending a request to the server. + // If is_current_parcel true shows "You Are Here" banner. + void displaySelectedParcelInfo(LLParcel* parcel, + LLViewerRegion* region, + const LLVector3d& pos_global, + bool is_current_parcel); - /*virtual*/ void processParcelInfo(const LLParcelData& parcel_data); + void updateEstateName(const std::string& name); + void updateEstateOwnerName(const std::string& name); + void updateCovenantText(const std::string &text); + void updateLastVisitedText(const LLDate &date); + + void nameUpdatedCallback(LLTextBox* text, + const std::string& first, + const std::string& last); + + void toggleLandmarkEditMode(BOOL enabled); + const std::string& getLandmarkTitle() const; + const std::string getLandmarkNotes() const; + const LLUUID getLandmarkFolder() const; + + // Select current landmark folder in combobox. + BOOL setLandmarkFolder(const LLUUID& id); + + /*virtual*/ void processParcelInfo(const LLParcelData& parcel_data); /*virtual*/ void handleVisibilityChange (BOOL new_visibility); + + static std::string getFullFolderName(const LLViewerInventoryCategory* cat); - // Create a pick for the location specified - // by global_pos. - void createPick(const LLVector3d& pos_global, LLPanelPickEdit* pick_panel); +private: -protected: - static void nameUpdatedCallback(LLTextBox* text, - const std::string& first, - const std::string& last); + void populateFoldersList(); + static void updateYouAreHereBanner(void*);// added to gIdleCallbacks + void onForSaleBannerClick(); /** * mParcelID is valid only for remote places, in other cases it's null. See resetLocation() */ - LLUUID mParcelID; - LLUUID mRequestedID; - LLVector3 mPosRegion; - std::string mCurrentTitle; - S32 mMinHeight; - INFO_TYPE mInfoType; - - LLTextBox* mTitle; - LLTextureCtrl* mSnapshotCtrl; - LLTextBox* mRegionName; - LLTextBox* mParcelName; - LLExpandableTextBox* mDescEditor; - LLTextBox* mMaturityRatingText; + LLUUID mParcelID; + LLUUID mRequestedID; + LLUUID mLandmarkID; + LLVector3 mPosRegion; + std::string mCurrentTitle; + S32 mMinHeight; + INFO_TYPE mInfoType; + + /** + * Hold last displayed parcel. Needs for YouAreHere banner. + */ + S32 mSelectedParcelID; + LLUUID mLastSelectedRegionID; + + LLTextBox* mTitle; + LLPanel* mForSalePanel; + LLPanel* mYouAreHerePanel; + LLTextureCtrl* mSnapshotCtrl; + LLTextBox* mRegionName; + LLTextBox* mParcelName; + LLExpandableTextBox*mDescEditor; + LLTextBox* mMaturityRatingText; + LLTextBox* mParcelOwner; + LLTextBox* mLastVisited; + + LLTextBox* mRatingText; + LLTextBox* mVoiceText; + LLTextBox* mFlyText; + LLTextBox* mPushText; + LLTextBox* mBuildText; + LLTextBox* mScriptsText; + LLTextBox* mDamageText; + + LLTextBox* mRegionNameText; + LLTextBox* mRegionTypeText; + LLTextBox* mRegionRatingText; + LLTextBox* mRegionOwnerText; + LLTextBox* mRegionGroupText; + + LLTextBox* mEstateNameText; + LLTextBox* mEstateRatingText; + LLTextBox* mEstateOwnerText; + LLTextEditor* mCovenantText; + + LLTextBox* mSalesPriceText; + LLTextBox* mAreaText; + LLTextBox* mTrafficText; + LLTextBox* mPrimitivesText; + LLTextBox* mParcelScriptsText; + LLTextBox* mTerraformLimitsText; + LLTextEditor* mSubdivideText; + LLTextEditor* mResaleText; + LLTextBox* mSaleToText; + + LLTextBox* mOwner; + LLTextBox* mCreator; + LLTextBox* mCreated; + LLLineEditor* mTitleEditor; + LLTextEditor* mNotesEditor; + LLComboBox* mFolderCombo; + LLPanel* mScrollingPanel; + LLPanel* mInfoPanel; + LLMediaPanel* mMediaPanel; }; #endif // LL_LLPANELPLACEINFO_H diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp deleted file mode 100644 index 9ba72fe6cf..0000000000 --- a/indra/newview/llpanelplaceprofile.cpp +++ /dev/null @@ -1,541 +0,0 @@ -/** - * @file llpanelplaceprofile.cpp - * @brief Displays place profile in Side Tray. - * - * $LicenseInfo:firstyear=2009&license=viewergpl$ - * - * Copyright (c) 2004-2009, Linden Research, Inc. - * - * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab. Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 - * - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at - * http://secondlifegrid.net/programs/open_source/licensing/flossexception - * - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. - * - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. - * $/LicenseInfo$ - */ - -#include "llviewerprecompiledheaders.h" - -#include "llpanelplaceprofile.h" - -#include "llparcel.h" - -#include "llqueryflags.h" - -#include "lliconctrl.h" -#include "lllineeditor.h" -#include "lltextbox.h" -#include "lltexteditor.h" - -#include "llaccordionctrl.h" -#include "llaccordionctrltab.h" -#include "llagent.h" -#include "llagentui.h" -#include "llappviewer.h" -#include "llcallbacklist.h" -#include "llfloaterbuycurrency.h" -#include "llstatusbar.h" -#include "llviewercontrol.h" -#include "llviewerparcelmgr.h" -#include "llviewerregion.h" - -static LLRegisterPanelClassWrapper<LLPanelPlaceProfile> t_place_profile("panel_place_profile"); - -LLPanelPlaceProfile::LLPanelPlaceProfile() -: LLPanelPlaceInfo(), - mForSalePanel(NULL), - mYouAreHerePanel(NULL), - mSelectedParcelID(-1) -{} - -// virtual -LLPanelPlaceProfile::~LLPanelPlaceProfile() -{} - -// virtual -BOOL LLPanelPlaceProfile::postBuild() -{ - LLPanelPlaceInfo::postBuild(); - - mForSalePanel = getChild<LLPanel>("for_sale_panel"); - mYouAreHerePanel = getChild<LLPanel>("here_panel"); - gIdleCallbacks.addFunction(&LLPanelPlaceProfile::updateYouAreHereBanner, this); - - //Icon value should contain sale price of last selected parcel. - mForSalePanel->getChild<LLIconCtrl>("icon_for_sale")-> - setMouseDownCallback(boost::bind(&LLPanelPlaceProfile::onForSaleBannerClick, this)); - - mParcelOwner = getChild<LLTextBox>("owner_value"); - mLastVisited = getChild<LLTextBox>("last_visited_value"); - - mRatingText = getChild<LLTextBox>("rating_value"); - mVoiceText = getChild<LLTextBox>("voice_value"); - mFlyText = getChild<LLTextBox>("fly_value"); - mPushText = getChild<LLTextBox>("push_value"); - mBuildText = getChild<LLTextBox>("build_value"); - mScriptsText = getChild<LLTextBox>("scripts_value"); - mDamageText = getChild<LLTextBox>("damage_value"); - - mRegionNameText = getChild<LLTextBox>("region_name"); - mRegionTypeText = getChild<LLTextBox>("region_type"); - mRegionRatingText = getChild<LLTextBox>("region_rating"); - mRegionOwnerText = getChild<LLTextBox>("region_owner"); - mRegionGroupText = getChild<LLTextBox>("region_group"); - - mEstateNameText = getChild<LLTextBox>("estate_name"); - mEstateRatingText = getChild<LLTextBox>("estate_rating"); - mEstateOwnerText = getChild<LLTextBox>("estate_owner"); - mCovenantText = getChild<LLTextEditor>("covenant"); - - mSalesPriceText = getChild<LLTextBox>("sales_price"); - mAreaText = getChild<LLTextBox>("area"); - mTrafficText = getChild<LLTextBox>("traffic"); - mPrimitivesText = getChild<LLTextBox>("primitives"); - mParcelScriptsText = getChild<LLTextBox>("parcel_scripts"); - mTerraformLimitsText = getChild<LLTextBox>("terraform_limits"); - mSubdivideText = getChild<LLTextEditor>("subdivide"); - mResaleText = getChild<LLTextEditor>("resale"); - mSaleToText = getChild<LLTextBox>("sale_to"); - - return TRUE; -} - -// virtual -void LLPanelPlaceProfile::resetLocation() -{ - LLPanelPlaceInfo::resetLocation(); - - mForSalePanel->setVisible(FALSE); - mYouAreHerePanel->setVisible(FALSE); - - std::string not_available = getString("not_available"); - mParcelOwner->setValue(not_available); - mLastVisited->setValue(not_available); - - mRatingText->setText(not_available); - mVoiceText->setText(not_available); - mFlyText->setText(not_available); - mPushText->setText(not_available); - mBuildText->setText(not_available); - mParcelScriptsText->setText(not_available); - mDamageText->setText(not_available); - - mRegionNameText->setValue(not_available); - mRegionTypeText->setValue(not_available); - mRegionRatingText->setValue(not_available); - mRegionOwnerText->setValue(not_available); - mRegionGroupText->setValue(not_available); - - mEstateNameText->setValue(not_available); - mEstateRatingText->setValue(not_available); - mEstateOwnerText->setValue(not_available); - mCovenantText->setValue(not_available); - - mSalesPriceText->setValue(not_available); - mAreaText->setValue(not_available); - mTrafficText->setValue(not_available); - mPrimitivesText->setValue(not_available); - mParcelScriptsText->setValue(not_available); - mTerraformLimitsText->setValue(not_available); - mSubdivideText->setValue(not_available); - mResaleText->setValue(not_available); - mSaleToText->setValue(not_available); -} - -// virtual -void LLPanelPlaceProfile::setInfoType(INFO_TYPE type) -{ - bool is_info_type_agent = type == AGENT; - bool is_info_type_teleport_history = type == TELEPORT_HISTORY; - - getChild<LLTextBox>("maturity_label")->setVisible(!is_info_type_agent); - mMaturityRatingText->setVisible(!is_info_type_agent); - - getChild<LLTextBox>("owner_label")->setVisible(is_info_type_agent); - mParcelOwner->setVisible(is_info_type_agent); - - getChild<LLTextBox>("last_visited_label")->setVisible(is_info_type_teleport_history); - mLastVisited->setVisible(is_info_type_teleport_history); - - getChild<LLAccordionCtrl>("advanced_info_accordion")->setVisible(is_info_type_agent); - - switch(type) - { - case AGENT: - case PLACE: - default: - mCurrentTitle = getString("title_place"); - break; - - case TELEPORT_HISTORY: - mCurrentTitle = getString("title_teleport_history"); - break; - } - - LLPanelPlaceInfo::setInfoType(type); -} - -// virtual -void LLPanelPlaceProfile::processParcelInfo(const LLParcelData& parcel_data) -{ - LLPanelPlaceInfo::processParcelInfo(parcel_data); - - // HACK: Flag 0x2 == adult region, - // Flag 0x1 == mature region, otherwise assume PG - std::string rating = LLViewerRegion::accessToString(SIM_ACCESS_PG); - if (parcel_data.flags & 0x2) - { - rating = LLViewerRegion::accessToString(SIM_ACCESS_ADULT); - } - else if (parcel_data.flags & 0x1) - { - rating = LLViewerRegion::accessToString(SIM_ACCESS_MATURE); - } - - mMaturityRatingText->setValue(rating); - mRatingText->setValue(rating); - - //update for_sale banner, here we should use DFQ_FOR_SALE instead of PF_FOR_SALE - //because we deal with remote parcel response format - bool is_for_sale = (parcel_data.flags & DFQ_FOR_SALE) && - mInfoType == AGENT ? TRUE : FALSE; - mForSalePanel->setVisible(is_for_sale); -} - -void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel, - LLViewerRegion* region, - const LLVector3d& pos_global, - bool is_current_parcel) -{ - if (!region || !parcel) - return; - - // send EstateCovenantInfo message - LLMessageSystem *msg = gMessageSystem; - msg->newMessage("EstateCovenantRequest"); - msg->nextBlockFast(_PREHASH_AgentData); - msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - msg->addUUIDFast(_PREHASH_SessionID,gAgent.getSessionID()); - msg->sendReliable(region->getHost()); - - LLParcelData parcel_data; - - // HACK: Converting sim access flags to the format - // returned by remote parcel response. - switch(region->getSimAccess()) - { - case SIM_ACCESS_MATURE: - parcel_data.flags = 0x1; - break; - - case SIM_ACCESS_ADULT: - parcel_data.flags = 0x2; - break; - - default: - parcel_data.flags = 0; - } - parcel_data.desc = parcel->getDesc(); - parcel_data.name = parcel->getName(); - parcel_data.sim_name = region->getName(); - parcel_data.snapshot_id = parcel->getSnapshotID(); - mPosRegion.setVec((F32)fmod(pos_global.mdV[VX], (F64)REGION_WIDTH_METERS), - (F32)fmod(pos_global.mdV[VY], (F64)REGION_WIDTH_METERS), - (F32)pos_global.mdV[VZ]); - parcel_data.global_x = pos_global.mdV[VX]; - parcel_data.global_y = pos_global.mdV[VY]; - parcel_data.global_z = pos_global.mdV[VZ]; - - std::string on = getString("on"); - std::string off = getString("off"); - - // Processing parcel characteristics - if (parcel->getParcelFlagAllowVoice()) - { - mVoiceText->setText(on); - } - else - { - mVoiceText->setText(off); - } - - if (!region->getBlockFly() && parcel->getAllowFly()) - { - mFlyText->setText(on); - } - else - { - mFlyText->setText(off); - } - - if (region->getRestrictPushObject() || parcel->getRestrictPushObject()) - { - mPushText->setText(off); - } - else - { - mPushText->setText(on); - } - - if (parcel->getAllowModify()) - { - mBuildText->setText(on); - } - else - { - mBuildText->setText(off); - } - - if((region->getRegionFlags() & REGION_FLAGS_SKIP_SCRIPTS) || - (region->getRegionFlags() & REGION_FLAGS_ESTATE_SKIP_SCRIPTS) || - !parcel->getAllowOtherScripts()) - { - mScriptsText->setText(off); - } - else - { - mScriptsText->setText(on); - } - - if (region->getAllowDamage() || parcel->getAllowDamage()) - { - mDamageText->setText(on); - } - else - { - mDamageText->setText(off); - } - - mRegionNameText->setText(region->getName()); - mRegionTypeText->setText(region->getSimProductName()); - mRegionRatingText->setText(region->getSimAccessString()); - - // Determine parcel owner - if (parcel->isPublic()) - { - mParcelOwner->setText(getString("public")); - mRegionOwnerText->setText(getString("public")); - } - else - { - if (parcel->getIsGroupOwned()) - { - mRegionOwnerText->setText(getString("group_owned_text")); - - if(!parcel->getGroupID().isNull()) - { - // FIXME: Using parcel group as region group. - gCacheName->get(parcel->getGroupID(), TRUE, - boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mRegionGroupText, _2, _3)); - - gCacheName->get(parcel->getGroupID(), TRUE, - boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mParcelOwner, _2, _3)); - } - else - { - std::string owner = getString("none_text"); - mRegionGroupText->setText(owner); - mParcelOwner->setText(owner); - } - } - else - { - // Figure out the owner's name - gCacheName->get(parcel->getOwnerID(), FALSE, - boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mParcelOwner, _2, _3)); - gCacheName->get(region->getOwner(), FALSE, - boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mRegionOwnerText, _2, _3)); - } - - if(LLParcel::OS_LEASE_PENDING == parcel->getOwnershipStatus()) - { - mRegionOwnerText->setText(mRegionOwnerText->getText() + getString("sale_pending_text")); - } - } - - mEstateRatingText->setText(region->getSimAccessString()); - - S32 area; - S32 claim_price; - S32 rent_price; - F32 dwell; - BOOL for_sale = parcel->getForSale(); - LLViewerParcelMgr::getInstance()->getDisplayInfo(&area, - &claim_price, - &rent_price, - &for_sale, - &dwell); - if (for_sale) - { - // Adding "For Sale" flag in remote parcel response format. - parcel_data.flags |= DFQ_FOR_SALE; - - const LLUUID& auth_buyer_id = parcel->getAuthorizedBuyerID(); - if(auth_buyer_id.notNull()) - { - gCacheName->get(auth_buyer_id, TRUE, - boost::bind(&LLPanelPlaceInfo::nameUpdatedCallback, mSaleToText, _2, _3)); - - // Show sales info to a specific person or a group he belongs to. - if (auth_buyer_id != gAgent.getID() && !gAgent.isInGroup(auth_buyer_id)) - { - for_sale = FALSE; - } - } - else - { - mSaleToText->setText(getString("anyone")); - } - - const U8* sign = (U8*)getString("price_text").c_str(); - const U8* sqm = (U8*)getString("area_text").c_str(); - - mSalesPriceText->setText(llformat("%s%d ", sign, parcel->getSalePrice())); - mAreaText->setText(llformat("%d %s", area, sqm)); - mTrafficText->setText(llformat("%.0f", dwell)); - - // Can't have more than region max tasks, regardless of parcel - // object bonus factor. - S32 primitives = llmin(llround(parcel->getMaxPrimCapacity() * parcel->getParcelPrimBonus()), - (S32)region->getMaxTasks()); - - const U8* available = (U8*)getString("available").c_str(); - const U8* allocated = (U8*)getString("allocated").c_str(); - - mPrimitivesText->setText(llformat("%d %s, %d %s", primitives, available, parcel->getPrimCount(), allocated)); - - if (parcel->getAllowOtherScripts()) - { - mParcelScriptsText->setText(getString("all_residents_text")); - } - else if (parcel->getAllowGroupScripts()) - { - mParcelScriptsText->setText(getString("group_text")); - } - else - { - mParcelScriptsText->setText(off); - } - - mTerraformLimitsText->setText(parcel->getAllowTerraform() ? on : off); - - if (region->getRegionFlags() & REGION_FLAGS_ALLOW_PARCEL_CHANGES) - { - mSubdivideText->setText(getString("can_change")); - } - else - { - mSubdivideText->setText(getString("can_not_change")); - } - if (region->getRegionFlags() & REGION_FLAGS_BLOCK_LAND_RESELL) - { - mResaleText->setText(getString("can_not_resell")); - } - else - { - mResaleText->setText(getString("can_resell")); - } - } - - mSelectedParcelID = parcel->getLocalID(); - mLastSelectedRegionID = region->getRegionID(); - processParcelInfo(parcel_data); - - mYouAreHerePanel->setVisible(is_current_parcel); - getChild<LLAccordionCtrlTab>("sales_tab")->setVisible(for_sale); -} - -void LLPanelPlaceProfile::updateEstateName(const std::string& name) -{ - mEstateNameText->setText(name); -} - -void LLPanelPlaceProfile::updateEstateOwnerName(const std::string& name) -{ - mEstateOwnerText->setText(name); -} - -void LLPanelPlaceProfile::updateCovenantText(const std::string &text) -{ - mCovenantText->setText(text); -} - -void LLPanelPlaceProfile::updateLastVisitedText(const LLDate &date) -{ - if (date.isNull()) - { - mLastVisited->setText(getString("unknown")); - } - else - { - std::string timeStr = getString("acquired_date"); - LLSD substitution; - substitution["datetime"] = (S32) date.secondsSinceEpoch(); - LLStringUtil::format (timeStr, substitution); - mLastVisited->setText(timeStr); - } -} - -void LLPanelPlaceProfile::onForSaleBannerClick() -{ - LLViewerParcelMgr* mgr = LLViewerParcelMgr::getInstance(); - LLParcelSelectionHandle hParcel = mgr->getFloatingParcelSelection(); - LLViewerRegion* selected_region = mgr->getSelectionRegion(); - if(!hParcel.isNull() && selected_region) - { - if(hParcel->getParcel()->getLocalID() == mSelectedParcelID && - mLastSelectedRegionID ==selected_region->getRegionID()) - { - if(hParcel->getParcel()->getSalePrice() - gStatusBar->getBalance() > 0) - { - LLFloaterBuyCurrency::buyCurrency("Buying selected land ", hParcel->getParcel()->getSalePrice()); - } - else - { - LLViewerParcelMgr::getInstance()->startBuyLand(); - } - } - else - { - LL_WARNS("Places") << "User is trying to buy remote parcel.Operation is not supported"<< LL_ENDL; - } - - } -} - -// static -void LLPanelPlaceProfile::updateYouAreHereBanner(void* userdata) -{ - //YouAreHere Banner should be displayed only for selected places, - // If you want to display it for landmark or teleport history item, you should check by mParcelId - - LLPanelPlaceProfile* self = static_cast<LLPanelPlaceProfile*>(userdata); - if(!self->getVisible()) - return; - - if(!gDisconnected) - { - static F32 radius = gSavedSettings.getF32("YouAreHereDistance"); - - BOOL display_banner = gAgent.getRegion()->getRegionID() == self->mLastSelectedRegionID && - LLAgentUI::checkAgentDistance(self->mPosRegion, radius); - - self->mYouAreHerePanel->setVisible(display_banner); - } -} diff --git a/indra/newview/llpanelplaceprofile.h b/indra/newview/llpanelplaceprofile.h deleted file mode 100644 index d8e4bcb6bd..0000000000 --- a/indra/newview/llpanelplaceprofile.h +++ /dev/null @@ -1,114 +0,0 @@ -/** - * @file llpanelplaceprofile.h - * @brief Displays place profile in Side Tray. - * - * $LicenseInfo:firstyear=2009&license=viewergpl$ - * - * Copyright (c) 2004-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_LLPANELPLACEPROFILE_H -#define LL_LLPANELPLACEPROFILE_H - -#include "llpanelplaceinfo.h" - -class LLTextEditor; - -class LLPanelPlaceProfile : public LLPanelPlaceInfo -{ -public: - LLPanelPlaceProfile(); - /*virtual*/ ~LLPanelPlaceProfile(); - - /*virtual*/ BOOL postBuild(); - - /*virtual*/ void resetLocation(); - - /*virtual*/ void setInfoType(INFO_TYPE type); - - /*virtual*/ void processParcelInfo(const LLParcelData& parcel_data); - - // Displays information about the currently selected parcel - // without sending a request to the server. - // If is_current_parcel true shows "You Are Here" banner. - void displaySelectedParcelInfo(LLParcel* parcel, - LLViewerRegion* region, - const LLVector3d& pos_global, - bool is_current_parcel); - - void updateEstateName(const std::string& name); - void updateEstateOwnerName(const std::string& name); - void updateCovenantText(const std::string &text); - void updateLastVisitedText(const LLDate &date); - -private: - void onForSaleBannerClick(); - - static void updateYouAreHereBanner(void*);// added to gIdleCallbacks - - /** - * Holds last displayed parcel. Needed for YouAreHere banner. - */ - S32 mSelectedParcelID; - LLUUID mLastSelectedRegionID; - - LLPanel* mForSalePanel; - LLPanel* mYouAreHerePanel; - - LLTextBox* mParcelOwner; - LLTextBox* mLastVisited; - - LLTextBox* mRatingText; - LLTextBox* mVoiceText; - LLTextBox* mFlyText; - LLTextBox* mPushText; - LLTextBox* mBuildText; - LLTextBox* mScriptsText; - LLTextBox* mDamageText; - - LLTextBox* mRegionNameText; - LLTextBox* mRegionTypeText; - LLTextBox* mRegionRatingText; - LLTextBox* mRegionOwnerText; - LLTextBox* mRegionGroupText; - - LLTextBox* mEstateNameText; - LLTextBox* mEstateRatingText; - LLTextBox* mEstateOwnerText; - LLTextEditor* mCovenantText; - - LLTextBox* mSalesPriceText; - LLTextBox* mAreaText; - LLTextBox* mTrafficText; - LLTextBox* mPrimitivesText; - LLTextBox* mParcelScriptsText; - LLTextBox* mTerraformLimitsText; - LLTextEditor* mSubdivideText; - LLTextEditor* mResaleText; - LLTextBox* mSaleToText; -}; - -#endif // LL_LLPANELPLACEPROFILE_H diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp index 66efb96fc7..b2e9110e96 100644 --- a/indra/newview/llpanelplaces.cpp +++ b/indra/newview/llpanelplaces.cpp @@ -57,10 +57,9 @@ #include "llinventorymodel.h" #include "lllandmarkactions.h" #include "lllandmarklist.h" -#include "llpanellandmarkinfo.h" +#include "llpanelplaceinfo.h" #include "llpanellandmarks.h" #include "llpanelpick.h" -#include "llpanelplaceprofile.h" #include "llpanelteleporthistory.h" #include "llteleporthistorystorage.h" #include "lltoggleablemenu.h" @@ -122,8 +121,7 @@ LLPanelPlaces::LLPanelPlaces() mFilterSubString(LLStringUtil::null), mActivePanel(NULL), mFilterEditor(NULL), - mPlaceProfile(NULL), - mLandmarkInfo(NULL), + mPlaceInfo(NULL), mPickPanel(NULL), mItem(NULL), mPlaceMenu(NULL), @@ -137,7 +135,7 @@ LLPanelPlaces::LLPanelPlaces() gInventory.addObserver(mInventoryObserver); LLViewerParcelMgr::getInstance()->addAgentParcelChangedCallback( - boost::bind(&LLPanelPlaces::updateVerbs, this)); + boost::bind(&LLPanelPlaces::onAgentParcelChange, this)); //LLUICtrlFactory::getInstance()->buildPanel(this, "panel_places.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder() } @@ -208,32 +206,25 @@ BOOL LLPanelPlaces::postBuild() mFilterEditor->setCommitCallback(boost::bind(&LLPanelPlaces::onFilterEdit, this, _2, false)); } - mPlaceProfile = getChild<LLPanelPlaceProfile>("panel_place_profile"); - mLandmarkInfo = getChild<LLPanelLandmarkInfo>("panel_landmark_info"); - if (!mPlaceProfile || !mLandmarkInfo) - return FALSE; + mPlaceInfo = getChild<LLPanelPlaceInfo>("panel_place_info"); - LLButton* back_btn = mPlaceProfile->getChild<LLButton>("back_btn"); + LLButton* back_btn = mPlaceInfo->getChild<LLButton>("back_btn"); back_btn->setClickedCallback(boost::bind(&LLPanelPlaces::onBackButtonClicked, this)); - back_btn = mLandmarkInfo->getChild<LLButton>("back_btn"); - back_btn->setClickedCallback(boost::bind(&LLPanelPlaces::onBackButtonClicked, this)); - - LLLineEditor* title_editor = mLandmarkInfo->getChild<LLLineEditor>("title_editor"); + LLLineEditor* title_editor = mPlaceInfo->getChild<LLLineEditor>("title_editor"); title_editor->setKeystrokeCallback(boost::bind(&LLPanelPlaces::onEditButtonClicked, this), NULL); - LLTextEditor* notes_editor = mLandmarkInfo->getChild<LLTextEditor>("notes_editor"); + LLTextEditor* notes_editor = mPlaceInfo->getChild<LLTextEditor>("notes_editor"); notes_editor->setKeystrokeCallback(boost::bind(&LLPanelPlaces::onEditButtonClicked, this)); - LLComboBox* folder_combo = mLandmarkInfo->getChild<LLComboBox>("folder_combo"); + LLComboBox* folder_combo = mPlaceInfo->getChild<LLComboBox>("folder_combo"); folder_combo->setSelectionCallback(boost::bind(&LLPanelPlaces::onEditButtonClicked, this)); - return TRUE; } void LLPanelPlaces::onOpen(const LLSD& key) { - if(!mPlaceProfile || !mLandmarkInfo || key.size() == 0) + if(mPlaceInfo == NULL || key.size() == 0) return; mFilterEditor->clear(); @@ -248,11 +239,11 @@ void LLPanelPlaces::onOpen(const LLSD& key) if (mPlaceInfoType == AGENT_INFO_TYPE) { - mPlaceProfile->setInfoType(LLPanelPlaceInfo::AGENT); + mPlaceInfo->setInfoType(LLPanelPlaceInfo::AGENT); } else if (mPlaceInfoType == CREATE_LANDMARK_INFO_TYPE) { - mLandmarkInfo->setInfoType(LLPanelPlaceInfo::CREATE_LANDMARK); + mPlaceInfo->setInfoType(LLPanelPlaceInfo::CREATE_LANDMARK); if (key.has("x") && key.has("y") && key.has("z")) { @@ -265,11 +256,11 @@ void LLPanelPlaces::onOpen(const LLSD& key) mPosGlobal = gAgent.getPositionGlobal(); } - mLandmarkInfo->displayParcelInfo(LLUUID(), mPosGlobal); + mPlaceInfo->displayParcelInfo(LLUUID(), mPosGlobal); } else if (mPlaceInfoType == LANDMARK_INFO_TYPE) { - mLandmarkInfo->setInfoType(LLPanelPlaceInfo::LANDMARK); + mPlaceInfo->setInfoType(LLPanelPlaceInfo::LANDMARK); LLInventoryItem* item = gInventory.getItem(key["id"].asUUID()); if (!item) @@ -279,12 +270,17 @@ void LLPanelPlaces::onOpen(const LLSD& key) } else if (mPlaceInfoType == REMOTE_PLACE_INFO_TYPE) { + if (mPlaceInfo->isMediaPanelVisible()) + { + toggleMediaPanel(); + } + mPosGlobal = LLVector3d(key["x"].asReal(), key["y"].asReal(), key["z"].asReal()); - mPlaceProfile->setInfoType(LLPanelPlaceInfo::PLACE); - mPlaceProfile->displayParcelInfo(LLUUID(), mPosGlobal); + mPlaceInfo->setInfoType(LLPanelPlaceInfo::PLACE); + mPlaceInfo->displayParcelInfo(LLUUID(), mPosGlobal); } else if (mPlaceInfoType == TELEPORT_HISTORY_INFO_TYPE) { @@ -295,9 +291,9 @@ void LLPanelPlaces::onOpen(const LLSD& key) mPosGlobal = hist_items[index].mGlobalPos; - mPlaceProfile->setInfoType(LLPanelPlaceInfo::TELEPORT_HISTORY); - mPlaceProfile->updateLastVisitedText(hist_items[index].mDate); - mPlaceProfile->displayParcelInfo(LLUUID(), mPosGlobal); + mPlaceInfo->setInfoType(LLPanelPlaceInfo::TELEPORT_HISTORY); + mPlaceInfo->updateLastVisitedText(hist_items[index].mDate); + mPlaceInfo->displayParcelInfo(LLUUID(), mPosGlobal); } LLViewerParcelMgr* parcel_mgr = LLViewerParcelMgr::getInstance(); @@ -325,7 +321,7 @@ void LLPanelPlaces::onOpen(const LLSD& key) void LLPanelPlaces::setItem(LLInventoryItem* item) { - if (!mLandmarkInfo || !item) + if (!mPlaceInfo || !item) return; mItem = item; @@ -355,19 +351,19 @@ void LLPanelPlaces::setItem(LLInventoryItem* item) if (is_landmark_editable) { - if(!mLandmarkInfo->setLandmarkFolder(mItem->getParentUUID()) && !mItem->getParentUUID().isNull()) + if(!mPlaceInfo->setLandmarkFolder(mItem->getParentUUID()) && !mItem->getParentUUID().isNull()) { const LLViewerInventoryCategory* cat = gInventory.getCategory(mItem->getParentUUID()); - if (cat) + if(cat) { - std::string cat_fullname = LLPanelLandmarkInfo::getFullFolderName(cat); - LLComboBox* folderList = mLandmarkInfo->getChild<LLComboBox>("folder_combo"); - folderList->add(cat_fullname, cat->getUUID(), ADD_TOP); + std::string cat_fullname = LLPanelPlaceInfo::getFullFolderName(cat); + LLComboBox* folderList = mPlaceInfo->getChild<LLComboBox>("folder_combo"); + folderList->add(cat_fullname, cat->getUUID(),ADD_TOP); } } } - mLandmarkInfo->displayItemInfo(mItem); + mPlaceInfo->displayItemInfo(mItem); LLLandmark* lm = gLandmarkList.getAsset(mItem->getAssetUUID(), boost::bind(&LLPanelPlaces::onLandmarkLoaded, this, _1)); @@ -379,13 +375,13 @@ void LLPanelPlaces::setItem(LLInventoryItem* item) void LLPanelPlaces::onLandmarkLoaded(LLLandmark* landmark) { - if (!mLandmarkInfo) + if (!mPlaceInfo) return; LLUUID region_id; landmark->getRegionID(region_id); landmark->getGlobalPos(mPosGlobal); - mLandmarkInfo->displayParcelInfo(region_id, mPosGlobal); + mPlaceInfo->displayParcelInfo(region_id, mPosGlobal); } void LLPanelPlaces::onFilterEdit(const std::string& search_string, bool force_filter) @@ -422,8 +418,10 @@ void LLPanelPlaces::onShareButtonClicked() void LLPanelPlaces::onTeleportButtonClicked() { - LLPanelPlaceInfo* panel = getCurrentInfoPanel(); - if (panel && panel->getVisible()) + if (!mPlaceInfo) + return; + + if (mPlaceInfo->getVisible()) { if (mPlaceInfoType == LANDMARK_INFO_TYPE) { @@ -452,8 +450,10 @@ void LLPanelPlaces::onTeleportButtonClicked() void LLPanelPlaces::onShowOnMapButtonClicked() { - LLPanelPlaceInfo* panel = getCurrentInfoPanel(); - if (panel && panel->getVisible()) + if (!mPlaceInfo) + return; + + if (mPlaceInfo->getVisible()) { LLFloaterWorldMap* worldmap_instance = LLFloaterWorldMap::getInstance(); if(!worldmap_instance) @@ -496,31 +496,31 @@ void LLPanelPlaces::onShowOnMapButtonClicked() void LLPanelPlaces::onEditButtonClicked() { - if (!mLandmarkInfo || isLandmarkEditModeOn) + if (!mPlaceInfo || isLandmarkEditModeOn) return; isLandmarkEditModeOn = true; - mLandmarkInfo->toggleLandmarkEditMode(TRUE); + mPlaceInfo->toggleLandmarkEditMode(TRUE); updateVerbs(); } void LLPanelPlaces::onSaveButtonClicked() { - if (!mLandmarkInfo || mItem.isNull()) + if (!mPlaceInfo || mItem.isNull()) return; - std::string current_title_value = mLandmarkInfo->getLandmarkTitle(); + std::string current_title_value = mPlaceInfo->getLandmarkTitle(); std::string item_title_value = mItem->getName(); - std::string current_notes_value = mLandmarkInfo->getLandmarkNotes(); + std::string current_notes_value = mPlaceInfo->getLandmarkNotes(); std::string item_notes_value = mItem->getDescription(); LLStringUtil::trim(current_title_value); LLStringUtil::trim(current_notes_value); LLUUID item_id = mItem->getUUID(); - LLUUID folder_id = mLandmarkInfo->getLandmarkFolder(); + LLUUID folder_id = mPlaceInfo->getLandmarkFolder(); LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(mItem); @@ -553,7 +553,7 @@ void LLPanelPlaces::onSaveButtonClicked() void LLPanelPlaces::onCancelButtonClicked() { - if (!mLandmarkInfo) + if (!mPlaceInfo) return; if (mPlaceInfoType == CREATE_LANDMARK_INFO_TYPE) @@ -562,13 +562,13 @@ void LLPanelPlaces::onCancelButtonClicked() } else { - mLandmarkInfo->toggleLandmarkEditMode(FALSE); + mPlaceInfo->toggleLandmarkEditMode(FALSE); isLandmarkEditModeOn = false; updateVerbs(); // Reload the landmark properties. - mLandmarkInfo->displayItemInfo(mItem); + mPlaceInfo->displayItemInfo(mItem); } } @@ -597,7 +597,7 @@ void LLPanelPlaces::onOverflowButtonClicked() if (mItem.notNull()) { const LLUUID& item_id = mItem->getUUID(); - const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); + const LLUUID& trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH); is_landmark_removable = gInventory.isObjectDescendentOf(item_id, gInventory.getRootFolderID()) && !gInventory.isObjectDescendentOf(item_id, trash_id); } @@ -652,6 +652,9 @@ void LLPanelPlaces::onOverflowMenuItemClicked(const LLSD& param) } else if (item == "pick") { + if (!mPlaceInfo) + return; + if (mPickPanel == NULL) { mPickPanel = LLPanelPickEdit::create(); @@ -664,12 +667,7 @@ void LLPanelPlaces::onOverflowMenuItemClicked(const LLSD& param) togglePickPanel(TRUE); mPickPanel->onOpen(LLSD()); - - LLPanelPlaceInfo* panel = getCurrentInfoPanel(); - if (panel) - { - panel->createPick(mPosGlobal, mPickPanel); - } + mPlaceInfo->createPick(mPosGlobal, mPickPanel); LLRect rect = getRect(); mPickPanel->reshape(rect.getWidth(), rect.getHeight()); @@ -679,7 +677,7 @@ void LLPanelPlaces::onOverflowMenuItemClicked(const LLSD& param) { if ( mItem.notNull() ) { - const LLUUID& favorites_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE); + LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE); if ( favorites_id.notNull() ) { copy_inventory_item(gAgent.getID(), @@ -696,16 +694,39 @@ void LLPanelPlaces::onOverflowMenuItemClicked(const LLSD& param) void LLPanelPlaces::onBackButtonClicked() { - togglePlaceInfoPanel(FALSE); + if (!mPlaceInfo) + return; + + if (mPlaceInfo->isMediaPanelVisible()) + { + toggleMediaPanel(); + } + else + { + togglePlaceInfoPanel(FALSE); - // Resetting mPlaceInfoType when Place Info panel is closed. - mPlaceInfoType = LLStringUtil::null; + // Resetting mPlaceInfoType when Place Info panel is closed. + mPlaceInfoType = LLStringUtil::null; - isLandmarkEditModeOn = false; + isLandmarkEditModeOn = false; + } updateVerbs(); } +void LLPanelPlaces::toggleMediaPanel() +{ + if (!mPlaceInfo) + return; + + mPlaceInfo->toggleMediaPanel(!mPlaceInfo->isMediaPanelVisible()); + + // Refresh the current place info because + // the media panel controls can't refer to + // the remote parcel media. + onOpen(LLSD().insert("type", AGENT_INFO_TYPE)); +} + void LLPanelPlaces::togglePickPanel(BOOL visible) { setAllChildrenVisible(this, !visible); @@ -716,50 +737,26 @@ void LLPanelPlaces::togglePickPanel(BOOL visible) void LLPanelPlaces::togglePlaceInfoPanel(BOOL visible) { - if (!mPlaceProfile || !mLandmarkInfo) + if (!mPlaceInfo) return; + mPlaceInfo->setVisible(visible); mFilterEditor->setVisible(!visible); mTabContainer->setVisible(!visible); - if (mPlaceInfoType == AGENT_INFO_TYPE || - mPlaceInfoType == REMOTE_PLACE_INFO_TYPE || - mPlaceInfoType == TELEPORT_HISTORY_INFO_TYPE) + if (visible) { - mPlaceProfile->setVisible(visible); + mPlaceInfo->resetLocation(); - if (visible) - { - mPlaceProfile->resetLocation(); - - LLRect rect = getRect(); - LLRect new_rect = LLRect(rect.mLeft, rect.mTop, rect.mRight, mTabContainer->getRect().mBottom); - mPlaceProfile->reshape(new_rect.getWidth(), new_rect.getHeight()); - - mLandmarkInfo->setVisible(FALSE); - } - } - else if (mPlaceInfoType == CREATE_LANDMARK_INFO_TYPE || - mPlaceInfoType == LANDMARK_INFO_TYPE) - { - mLandmarkInfo->setVisible(visible); - - if (visible) - { - mLandmarkInfo->resetLocation(); - - LLRect rect = getRect(); - LLRect new_rect = LLRect(rect.mLeft, rect.mTop, rect.mRight, mTabContainer->getRect().mBottom); - mLandmarkInfo->reshape(new_rect.getWidth(), new_rect.getHeight()); - - mPlaceProfile->setVisible(FALSE); - } + LLRect rect = getRect(); + LLRect new_rect = LLRect(rect.mLeft, rect.mTop, rect.mRight, mTabContainer->getRect().mBottom); + mPlaceInfo->reshape(new_rect.getWidth(),new_rect.getHeight()); } } void LLPanelPlaces::changedParcelSelection() { - if (!mPlaceProfile) + if (!mPlaceInfo) return; LLViewerParcelMgr* parcel_mgr = LLViewerParcelMgr::getInstance(); @@ -785,8 +782,8 @@ void LLPanelPlaces::changedParcelSelection() } } - mPlaceProfile->resetLocation(); - mPlaceProfile->displaySelectedParcelInfo(parcel, region, mPosGlobal, is_current_parcel); + mPlaceInfo->resetLocation(); + mPlaceInfo->displaySelectedParcelInfo(parcel, region, mPosGlobal, is_current_parcel); updateVerbs(); } @@ -833,22 +830,30 @@ void LLPanelPlaces::changedInventory(U32 mask) gInventory.removeObserver(mInventoryObserver); } -void LLPanelPlaces::updateVerbs() +void LLPanelPlaces::onAgentParcelChange() { - bool is_place_info_visible; + if (!mPlaceInfo) + return; - LLPanelPlaceInfo* panel = getCurrentInfoPanel(); - if (panel) + if (mPlaceInfo->isMediaPanelVisible()) { - is_place_info_visible = panel->getVisible(); + onOpen(LLSD().insert("type", AGENT_INFO_TYPE)); } else { - is_place_info_visible = false; + updateVerbs(); } +} +void LLPanelPlaces::updateVerbs() +{ + if (!mPlaceInfo) + return; + + bool is_place_info_visible = mPlaceInfo->getVisible(); bool is_agent_place_info_visible = mPlaceInfoType == AGENT_INFO_TYPE; bool is_create_landmark_visible = mPlaceInfoType == CREATE_LANDMARK_INFO_TYPE; + bool is_media_panel_visible = mPlaceInfo->isMediaPanelVisible(); mTeleportBtn->setVisible(!is_create_landmark_visible && !isLandmarkEditModeOn); mShowOnMapBtn->setVisible(!is_create_landmark_visible && !isLandmarkEditModeOn); @@ -859,7 +864,7 @@ void LLPanelPlaces::updateVerbs() mCancelBtn->setVisible(isLandmarkEditModeOn); mCloseBtn->setVisible(is_create_landmark_visible && !isLandmarkEditModeOn); - mOverflowBtn->setEnabled(is_place_info_visible && !is_create_landmark_visible); + mOverflowBtn->setEnabled(is_place_info_visible && !is_media_panel_visible && !is_create_landmark_visible); if (is_place_info_visible) { @@ -867,13 +872,16 @@ void LLPanelPlaces::updateVerbs() { // We don't need to teleport to the current location // so check if the location is not within the current parcel. - mTeleportBtn->setEnabled(!mPosGlobal.isExactlyZero() && + mTeleportBtn->setEnabled(!is_media_panel_visible && + !mPosGlobal.isExactlyZero() && !LLViewerParcelMgr::getInstance()->inAgentParcel(mPosGlobal)); } else if (mPlaceInfoType == LANDMARK_INFO_TYPE || mPlaceInfoType == REMOTE_PLACE_INFO_TYPE) { mTeleportBtn->setEnabled(TRUE); } + + mShowOnMapBtn->setEnabled(!is_media_panel_visible); } else { @@ -882,23 +890,6 @@ void LLPanelPlaces::updateVerbs() } } -LLPanelPlaceInfo* LLPanelPlaces::getCurrentInfoPanel() -{ - if (mPlaceInfoType == AGENT_INFO_TYPE || - mPlaceInfoType == REMOTE_PLACE_INFO_TYPE || - mPlaceInfoType == TELEPORT_HISTORY_INFO_TYPE) - { - return mPlaceProfile; - } - else if (mPlaceInfoType == CREATE_LANDMARK_INFO_TYPE || - mPlaceInfoType == LANDMARK_INFO_TYPE) - { - return mLandmarkInfo; - } - - return NULL; -} - static bool is_agent_in_selected_parcel(LLParcel* parcel) { LLViewerParcelMgr* parcel_mgr = LLViewerParcelMgr::getInstance(); diff --git a/indra/newview/llpanelplaces.h b/indra/newview/llpanelplaces.h index 39eb5261db..e2d281dd84 100644 --- a/indra/newview/llpanelplaces.h +++ b/indra/newview/llpanelplaces.h @@ -37,10 +37,6 @@ class LLInventoryItem; class LLFilterEditor; class LLLandmark; - -class LLPanelLandmarkInfo; -class LLPanelPlaceProfile; - class LLPanelPickEdit; class LLPanelPlaceInfo; class LLPanelPlacesTab; @@ -89,16 +85,13 @@ private: void togglePickPanel(BOOL visible); void togglePlaceInfoPanel(BOOL visible); + void onAgentParcelChange(); void updateVerbs(); - LLPanelPlaceInfo* getCurrentInfoPanel(); - LLFilterEditor* mFilterEditor; LLPanelPlacesTab* mActivePanel; LLTabContainer* mTabContainer; - LLPanelPlaceProfile* mPlaceProfile; - LLPanelLandmarkInfo* mLandmarkInfo; - + LLPanelPlaceInfo* mPlaceInfo; LLPanelPickEdit* mPickPanel; LLToggleableMenu* mPlaceMenu; LLToggleableMenu* mLandmarkMenu; diff --git a/indra/newview/llpanelprofileview.h b/indra/newview/llpanelprofileview.h index 45c2fc116e..b59d1d42f3 100644 --- a/indra/newview/llpanelprofileview.h +++ b/indra/newview/llpanelprofileview.h @@ -36,8 +36,6 @@ #include "llpanel.h" #include "llpanelprofile.h" #include "llavatarpropertiesprocessor.h" -#include "llagent.h" -#include "lltooldraganddrop.h" class LLPanelProfile; class LLPanelProfileTab; @@ -66,18 +64,6 @@ public: /*virtual*/ void togglePanel(LLPanel* panel); - BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, - BOOL drop, EDragAndDropType cargo_type, - void *cargo_data, EAcceptance *accept, - std::string& tooltip_msg) - { - LLToolDragAndDrop::handleGiveDragAndDrop(getAvatarId(), gAgent.getSessionID(), drop, - cargo_type, cargo_data, accept); - - return TRUE; - } - - protected: void onBackBtnClick(); diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp index 9450bee315..e97eb1df2b 100644 --- a/indra/newview/llparticipantlist.cpp +++ b/indra/newview/llparticipantlist.cpp @@ -32,11 +32,6 @@ #include "llviewerprecompiledheaders.h" -// common includes -#include "lltrans.h" -#include "llavataractions.h" -#include "llagent.h" - #include "llparticipantlist.h" #include "llavatarlist.h" #include "llspeakers.h" @@ -44,18 +39,15 @@ //LLParticipantList retrieves add, clear and remove events and updates view accordingly LLParticipantList::LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* avatar_list): mSpeakerMgr(data_source), - mAvatarList(avatar_list), - mSpeakerAddListener(*this), - mSpeakerRemoveListener(*this), - mSpeakerClearListener(*this), - mSortOrder(E_SORT_BY_NAME) + mAvatarList(avatar_list) { - mSpeakerMgr->addListener(&mSpeakerAddListener, "add"); - mSpeakerMgr->addListener(&mSpeakerRemoveListener, "remove"); - mSpeakerMgr->addListener(&mSpeakerClearListener, "clear"); + mSpeakerAddListener = new SpeakerAddListener(mAvatarList); + mSpeakerRemoveListener = new SpeakerRemoveListener(mAvatarList); + mSpeakerClearListener = new SpeakerClearListener(mAvatarList); - mAvatarList->setNoItemsCommentText(LLTrans::getString("LoadingData")); - mAvatarList->setDoubleClickCallback(boost::bind(&LLParticipantList::onAvatarListDoubleClicked, this, mAvatarList)); + mSpeakerMgr->addListener(mSpeakerAddListener, "add"); + mSpeakerMgr->addListener(mSpeakerRemoveListener, "remove"); + mSpeakerMgr->addListener(mSpeakerClearListener, "clear"); //Lets fill avatarList with existing speakers LLAvatarList::uuid_vector_t& group_members = mAvatarList->getIDs(); @@ -66,33 +58,24 @@ LLParticipantList::LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* av { group_members.push_back((*it)->mID); } - sort(); + mAvatarList->setDirty(); + mAvatarList->sortByName(); } LLParticipantList::~LLParticipantList() { + delete mSpeakerAddListener; + delete mSpeakerRemoveListener; + delete mSpeakerClearListener; + mSpeakerAddListener = NULL; + mSpeakerRemoveListener = NULL; + mSpeakerClearListener = NULL; } -void LLParticipantList::onAvatarListDoubleClicked(LLAvatarList* list) -{ - LLUUID clicked_id = list->getSelectedUUID(); - - if (clicked_id.isNull() || clicked_id == gAgent.getID()) - return; - - LLAvatarActions::startIM(clicked_id); -} - -void LLParticipantList::setSortOrder(EParticipantSortOrder order) -{ - if ( mSortOrder != order ) - { - mSortOrder = order; - sort(); - } -} - -bool LLParticipantList::onAddItemEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata) +// +// LLParticipantList::SpeakerAddListener +// +bool LLParticipantList::SpeakerAddListener::handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata) { LLAvatarList::uuid_vector_t& group_members = mAvatarList->getIDs(); LLUUID uu_id = event->getValue().asUUID(); @@ -105,11 +88,15 @@ bool LLParticipantList::onAddItemEvent(LLPointer<LLOldEvents::LLEvent> event, co } group_members.push_back(uu_id); - sort(); + mAvatarList->setDirty(); + mAvatarList->sortByName(); return true; } -bool LLParticipantList::onRemoveItemEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata) +// +// LLParticipantList::SpeakerRemoveListener +// +bool LLParticipantList::SpeakerRemoveListener::handleEvent(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()); @@ -121,7 +108,10 @@ bool LLParticipantList::onRemoveItemEvent(LLPointer<LLOldEvents::LLEvent> event, return true; } -bool LLParticipantList::onClearListEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata) +// +// LLParticipantList::SpeakerClearListener +// +bool LLParticipantList::SpeakerClearListener::handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata) { LLAvatarList::uuid_vector_t& group_members = mAvatarList->getIDs(); group_members.clear(); @@ -129,45 +119,3 @@ bool LLParticipantList::onClearListEvent(LLPointer<LLOldEvents::LLEvent> event, return true; } -void LLParticipantList::sort() -{ - if ( !mAvatarList ) - return; - - // Mark AvatarList as dirty one - mAvatarList->setDirty(); - - // TODO: Implement more sorting orders after specs updating (EM) - switch ( mSortOrder ) { - case E_SORT_BY_NAME : - mAvatarList->sortByName(); - break; - default : - llwarns << "Unrecognized sort order for " << mAvatarList->getName() << llendl; - return; - } -} - -// -// LLParticipantList::SpeakerAddListener -// -bool LLParticipantList::SpeakerAddListener::handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata) -{ - return mParent.onAddItemEvent(event, userdata); -} - -// -// LLParticipantList::SpeakerRemoveListener -// -bool LLParticipantList::SpeakerRemoveListener::handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata) -{ - return mParent.onRemoveItemEvent(event, userdata); -} - -// -// LLParticipantList::SpeakerClearListener -// -bool LLParticipantList::SpeakerClearListener::handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata) -{ - return mParent.onClearListEvent(event, userdata); -} diff --git a/indra/newview/llparticipantlist.h b/indra/newview/llparticipantlist.h index 04d9e29256..68aae0aee5 100644 --- a/indra/newview/llparticipantlist.h +++ b/indra/newview/llparticipantlist.h @@ -38,74 +38,46 @@ class LLAvatarList; class LLParticipantList { - LOG_CLASS(LLParticipantList); public: LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* avatar_list); ~LLParticipantList(); - typedef enum e_participant_sort_oder { - E_SORT_BY_NAME = 0, - } EParticipantSortOrder; - - /** - * Set and sort Avatarlist by given order - */ - void setSortOrder(EParticipantSortOrder order = E_SORT_BY_NAME); - protected: - /** - * LLSpeakerMgr event handlers - */ - bool onAddItemEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata); - bool onRemoveItemEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata); - bool onClearListEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata); - - /** - * Sorts the Avatarlist by stored order - */ - void sort(); //List of listeners implementing LLOldEvents::LLSimpleListener. //There is no way to handle all the events in one listener as LLSpeakerMgr registers listeners in such a way //that one listener can handle only one type of event - class BaseSpeakerListner : public LLOldEvents::LLSimpleListener + class SpeakerAddListener : public LLOldEvents::LLSimpleListener { public: - BaseSpeakerListner(LLParticipantList& parent) : mParent(parent) {} - protected: - LLParticipantList& mParent; - }; + SpeakerAddListener(LLAvatarList* avatar_list) : mAvatarList(avatar_list) {} - class SpeakerAddListener : public BaseSpeakerListner - { - public: - SpeakerAddListener(LLParticipantList& parent) : BaseSpeakerListner(parent) {} /*virtual*/ bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata); + LLAvatarList* mAvatarList; }; - class SpeakerRemoveListener : public BaseSpeakerListner + class SpeakerRemoveListener : public LLOldEvents::LLSimpleListener { public: - SpeakerRemoveListener(LLParticipantList& parent) : BaseSpeakerListner(parent) {} + SpeakerRemoveListener(LLAvatarList* avatar_list) : mAvatarList(avatar_list) {} + /*virtual*/ bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata); + LLAvatarList* mAvatarList; }; - class SpeakerClearListener : public BaseSpeakerListner + class SpeakerClearListener : public LLOldEvents::LLSimpleListener { public: - SpeakerClearListener(LLParticipantList& parent) : BaseSpeakerListner(parent) {} + SpeakerClearListener(LLAvatarList* avatar_list) : mAvatarList(avatar_list) {} + /*virtual*/ bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata); + LLAvatarList* mAvatarList; }; - private: - void onAvatarListDoubleClicked(LLAvatarList* list); - LLSpeakerMgr* mSpeakerMgr; - LLAvatarList* mAvatarList; - - SpeakerAddListener mSpeakerAddListener; - SpeakerRemoveListener mSpeakerRemoveListener; - SpeakerClearListener mSpeakerClearListener; + LLAvatarList* mAvatarList; - EParticipantSortOrder mSortOrder; + SpeakerAddListener* mSpeakerAddListener; + SpeakerRemoveListener* mSpeakerRemoveListener; + SpeakerClearListener* mSpeakerClearListener; }; diff --git a/indra/newview/llpreview.cpp b/indra/newview/llpreview.cpp index 34e78b5c46..b06e70c00a 100644 --- a/indra/newview/llpreview.cpp +++ b/indra/newview/llpreview.cpp @@ -45,7 +45,6 @@ #include "lltooldraganddrop.h" #include "llradiogroup.h" #include "llassetstorage.h" -#include "llviewerassettype.h" #include "llviewerobject.h" #include "llviewerobjectlist.h" #include "lldbstrings.h" @@ -318,7 +317,7 @@ BOOL LLPreview::handleHover(S32 x, S32 y, MASK mask) && LLToolDragAndDrop::getInstance()->isOverThreshold(screen_x, screen_y)) { EDragAndDropType type; - type = LLViewerAssetType::lookupDragAndDropType(item->getType()); + type = LLAssetType::lookupDragAndDropType(item->getType()); LLToolDragAndDrop::ESource src = LLToolDragAndDrop::SOURCE_LIBRARY; if(!mObjectUUID.isNull()) { @@ -407,7 +406,7 @@ void LLPreview::onDiscardBtn(void* data) */ // Move the item to the trash - const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); + LLUUID trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH); if (item->getParentUUID() != trash_id) { LLInventoryModel::update_list_t update; diff --git a/indra/newview/llpreviewgesture.cpp b/indra/newview/llpreviewgesture.cpp index 7b3a20d102..ab2afb8056 100644 --- a/indra/newview/llpreviewgesture.cpp +++ b/indra/newview/llpreviewgesture.cpp @@ -130,10 +130,10 @@ LLPreviewGesture* LLPreviewGesture::show(const LLUUID& item_id, const LLUUID& ob preview->setObjectID(object_id); // Start speculative download of sounds and animations - const LLUUID animation_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_ANIMATION); + LLUUID animation_folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_ANIMATION); gInventory.startBackgroundFetch(animation_folder_id); - const LLUUID sound_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_SOUND); + LLUUID sound_folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_SOUND); gInventory.startBackgroundFetch(sound_folder_id); // this will call refresh when we have everything. diff --git a/indra/newview/llpreviewtexture.cpp b/indra/newview/llpreviewtexture.cpp index 9c21faa3be..86fa2c4695 100644 --- a/indra/newview/llpreviewtexture.cpp +++ b/indra/newview/llpreviewtexture.cpp @@ -552,7 +552,7 @@ void LLPreviewTexture::onAspectRatioCommit(LLUICtrl* ctrl, void* userdata) void LLPreviewTexture::loadAsset() { - mImage = LLViewerTextureManager::getFetchedTexture(mImageID, MIPMAP_TRUE, FALSE, LLViewerTexture::LOD_TEXTURE); + mImage = LLViewerTextureManager::getFetchedTexture(mImageID, MIPMAP_TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE); mImage->setBoostLevel(LLViewerTexture::BOOST_PREVIEW); mAssetStatus = PREVIEW_ASSET_LOADING; updateDimensions(); diff --git a/indra/newview/llresourcedata.h b/indra/newview/llresourcedata.h index b4b9042689..46b79150bb 100644 --- a/indra/newview/llresourcedata.h +++ b/indra/newview/llresourcedata.h @@ -39,12 +39,11 @@ struct LLResourceData { LLAssetInfo mAssetInfo; - LLFolderType::EType mPreferredLocation; + LLAssetType::EType mPreferredLocation; LLInventoryType::EType mInventoryType; U32 mNextOwnerPerm; S32 mExpectedUploadCost; void *mUserData; - static const S8 INVALID_LOCATION = -2; }; #endif diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index abfb51b6e1..b8ceef0899 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -1448,7 +1448,7 @@ void LLSelectMgr::selectionSetImage(const LLUUID& imageid) // Texture picker defaults aren't inventory items // * Don't need to worry about permissions for them // * Can just apply the texture and be done with it. - objectp->setTEImage(te, LLViewerTextureManager::getFetchedTexture(mImageID, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE)); + objectp->setTEImage(te, LLViewerTextureManager::getFetchedTexture(mImageID, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE)); } return true; } @@ -1604,7 +1604,7 @@ BOOL LLSelectMgr::selectionRevertTextures() } else { - object->setTEImage(te, LLViewerTextureManager::getFetchedTexture(id, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE)); + object->setTEImage(te, LLViewerTextureManager::getFetchedTexture(id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE)); } } } @@ -2827,7 +2827,7 @@ bool LLSelectMgr::confirmDelete(const LLSD& notification, const LLSD& response, case 0: { // TODO: Make sure you have delete permissions on all of them. - const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); + LLUUID trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH); // attempt to derez into the trash. LLDeRezInfo* info = new LLDeRezInfo(DRD_TRASH, trash_id); LLSelectMgr::getInstance()->sendListToRegions("DeRezObject", @@ -4604,7 +4604,7 @@ void LLSelectMgr::updateSilhouettes() if (!mSilhouetteImagep) { - mSilhouetteImagep = LLViewerTextureManager::getFetchedTextureFromFile("silhouette.j2c", TRUE, TRUE); + mSilhouetteImagep = LLViewerTextureManager::getFetchedTextureFromFile("silhouette.j2c", TRUE, LLViewerTexture::BOOST_UI); } mHighlightedObjects->cleanupNodes(); diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index 9f317803ce..279e143851 100644 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -2704,7 +2704,7 @@ void renderTexturePriority(LLDrawable* drawable) drawBox(center, size); /*S32 boost = imagep->getBoostLevel(); - if (boost) + if (boost>LLViewerTexture::BOOST_NONE) { F32 t = (F32) boost / (F32) (LLViewerTexture::BOOST_MAX_LEVEL-1); LLVector4 col = lerp(boost_cold, boost_hot, t); diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index b23e7feda2..9bdea57491 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -334,7 +334,7 @@ void populate_favorites_bar() S32 count = lib_cats->count(); for(S32 i = 0; i < count; ++i) { - if(lib_cats->get(i)->getPreferredType() == LLFolderType::FT_LANDMARK) + if(lib_cats->get(i)->getPreferredType() == LLAssetType::AT_LANDMARK) { lib_landmarks = lib_cats->get(i)->getUUID(); break; @@ -351,7 +351,7 @@ void populate_favorites_bar() gInventory.getDirectDescendentsOf(lib_landmarks, lm_cats, lm_items); if (!lm_items) return; - const LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE); + LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE); if (favorites_id.isNull()) { llerror("My Inventory is missing My Favorites", 0); @@ -1673,7 +1673,7 @@ bool idle_startup() gInventory.buildParentChildMap(); //all categories loaded. lets create "My Favorites" category - gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE,true); + gInventory.findCategoryUUIDForType(LLAssetType::AT_FAVORITE,true); // lets create "Friends" and "Friends/All" in the Inventory "Calling Cards" and fill it with buddies LLFriendCardsManager::instance().syncFriendsFolder(); diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp index cb7b29dfc6..efe8804742 100644 --- a/indra/newview/lltexturectrl.cpp +++ b/indra/newview/lltexturectrl.cpp @@ -426,7 +426,7 @@ BOOL LLFloaterTexturePicker::postBuild() mInventoryPanel->getRootFolder()->getFilter()->markDefault(); // Commented out to stop opening all folders with textures - // mInventoryPanel->openDefaultFolderForType(LLFolderType::FT_TEXTURE); + // mInventoryPanel->openDefaultFolderForType(LLAssetType::AT_TEXTURE); // don't put keyboard focus on selected item, because the selection callback // will assume that this was user input @@ -529,7 +529,7 @@ void LLFloaterTexturePicker::draw() mTexturep = NULL; if(mImageAssetID.notNull()) { - mTexturep = LLViewerTextureManager::getFetchedTexture(mImageAssetID, MIPMAP_YES, IMMEDIATE_NO); + mTexturep = LLViewerTextureManager::getFetchedTexture(mImageAssetID, MIPMAP_YES); mTexturep->setBoostLevel(LLViewerTexture::BOOST_PREVIEW); } else if (!mFallbackImageName.empty()) @@ -1073,7 +1073,7 @@ BOOL LLTextureCtrl::handleMouseDown(S32 x, S32 y, MASK mask) { showPicker(FALSE); //grab textures first... - gInventory.startBackgroundFetch(gInventory.findCategoryUUIDForType(LLFolderType::FT_TEXTURE)); + gInventory.startBackgroundFetch(gInventory.findCategoryUUIDForType(LLAssetType::AT_TEXTURE)); //...then start full inventory fetch. gInventory.startBackgroundFetch(); handled = TRUE; @@ -1190,7 +1190,7 @@ void LLTextureCtrl::draw() } else if (!mImageAssetID.isNull()) { - mTexturep = LLViewerTextureManager::getFetchedTexture(mImageAssetID, MIPMAP_YES, IMMEDIATE_NO); + mTexturep = LLViewerTextureManager::getFetchedTexture(mImageAssetID, MIPMAP_YES); mTexturep->setBoostLevel(LLViewerTexture::BOOST_PREVIEW); } else if (!mFallbackImageName.empty()) diff --git a/indra/newview/lltextureview.cpp b/indra/newview/lltextureview.cpp index ea675c5a6e..dafa4f25ca 100644 --- a/indra/newview/lltextureview.cpp +++ b/indra/newview/lltextureview.cpp @@ -168,7 +168,7 @@ void LLTextureBar::draw() { color = LLColor4::green4; } - else if (mImagep->getBoostLevel()) + else if (mImagep->getBoostLevel() > LLViewerTexture::BOOST_NONE) { color = LLColor4::magenta; } diff --git a/indra/newview/lltoastgroupnotifypanel.cpp b/indra/newview/lltoastgroupnotifypanel.cpp index f82573f46c..e78737fe0d 100644 --- a/indra/newview/lltoastgroupnotifypanel.cpp +++ b/indra/newview/lltoastgroupnotifypanel.cpp @@ -220,6 +220,7 @@ bool LLToastGroupNotifyPanel::isAttachmentOpenable(LLAssetType::EType type) switch(type) { case LLAssetType::AT_LANDMARK: + case LLAssetType::AT_FAVORITE: case LLAssetType::AT_NOTECARD: case LLAssetType::AT_IMAGE_JPEG: case LLAssetType::AT_IMAGE_TGA: diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp index 959cb3f182..9a63f07a7e 100644 --- a/indra/newview/lltooldraganddrop.cpp +++ b/indra/newview/lltooldraganddrop.cpp @@ -92,7 +92,7 @@ public: virtual bool operator()(LLInventoryCategory* cat, LLInventoryItem* item) { - if(cat && (cat->getPreferredType() == LLFolderType::FT_NONE)) + if(cat && (cat->getPreferredType() == LLAssetType::AT_NONE)) { return true; } @@ -109,7 +109,7 @@ public: LLInventoryItem* item) { if(item) return true; - if(cat && (cat->getPreferredType() == LLFolderType::FT_NONE)) + if(cat && (cat->getPreferredType() == LLAssetType::AT_NONE)) { return true; } @@ -1317,7 +1317,8 @@ void LLToolDragAndDrop::dropObject(LLViewerObject* raycast_target, // Check if it's in the trash. bool is_in_trash = false; - const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); + LLUUID trash_id; + trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH); if(gInventory.isObjectDescendentOf(item->getUUID(), trash_id)) { is_in_trash = true; @@ -2087,7 +2088,7 @@ EAcceptance LLToolDragAndDrop::dad3dRezAttachmentFromInv( if(!item || !item->isComplete()) return ACCEPT_NO; // must not be in the trash - const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); + LLUUID trash_id(gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH)); if( gInventory.isObjectDescendentOf( item->getUUID(), trash_id ) ) { return ACCEPT_NO; @@ -2169,7 +2170,8 @@ EAcceptance LLToolDragAndDrop::dad3dRezObjectOnLand( } // Check if it's in the trash. - const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); + LLUUID trash_id; + trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH); if(gInventory.isObjectDescendentOf(item->getUUID(), trash_id)) { accept = ACCEPT_YES_SINGLE; @@ -2247,7 +2249,8 @@ EAcceptance LLToolDragAndDrop::dad3dRezObjectOnObject( } // Check if it's in the trash. - const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); + LLUUID trash_id; + trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH); if(gInventory.isObjectDescendentOf(item->getUUID(), trash_id)) { accept = ACCEPT_YES_SINGLE; @@ -2385,7 +2388,7 @@ EAcceptance LLToolDragAndDrop::dad3dWearItem( if(mSource == SOURCE_AGENT || mSource == SOURCE_LIBRARY) { // it's in the agent inventory - const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); + LLUUID trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH); if( gInventory.isObjectDescendentOf( item->getUUID(), trash_id ) ) { return ACCEPT_NO; @@ -2440,7 +2443,7 @@ EAcceptance LLToolDragAndDrop::dad3dActivateGesture( if(mSource == SOURCE_AGENT || mSource == SOURCE_LIBRARY) { // it's in the agent inventory - const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); + LLUUID trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH); if( gInventory.isObjectDescendentOf( item->getUUID(), trash_id ) ) { return ACCEPT_NO; @@ -2499,7 +2502,7 @@ EAcceptance LLToolDragAndDrop::dad3dWearCategory( if(mSource == SOURCE_AGENT) { - const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); + LLUUID trash_id(gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH)); if( gInventory.isObjectDescendentOf( category->getUUID(), trash_id ) ) { return ACCEPT_NO; diff --git a/indra/newview/llviewerassettype.cpp b/indra/newview/llviewerassettype.cpp deleted file mode 100644 index c974171c2c..0000000000 --- a/indra/newview/llviewerassettype.cpp +++ /dev/null @@ -1,114 +0,0 @@ -/** - * @file llassettype.cpp - * @brief Implementatino of LLViewerAssetType functionality. - * - * $LicenseInfo:firstyear=2001&license=viewergpl$ - * - * Copyright (c) 2001-2009, Linden Research, Inc. - * - * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab. Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 - * - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at - * http://secondlifegrid.net/programs/open_source/licensing/flossexception - * - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. - * - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. - * $/LicenseInfo$ - */ - -#include "llviewerprecompiledheaders.h" - -#include "llviewerassettype.h" -#include "lldictionary.h" -#include "llmemory.h" -#include "llsingleton.h" - -static const std::string empty_string; - -struct ViewerAssetEntry : public LLDictionaryEntry -{ - ViewerAssetEntry(EDragAndDropType dad_type // drag and drop type - ) - : - LLDictionaryEntry(empty_string), // no reverse lookup needed for now, so just leave this blank - mDadType(dad_type) - { - } - EDragAndDropType mDadType; -}; - -class LLViewerAssetDictionary : public LLSingleton<LLViewerAssetDictionary>, - public LLDictionary<LLViewerAssetType::EType, ViewerAssetEntry> -{ -public: - LLViewerAssetDictionary(); -}; - -LLViewerAssetDictionary::LLViewerAssetDictionary() -{ - // DRAG&DROP TYPE - // |--------------------| - addEntry(LLViewerAssetType::AT_TEXTURE, new ViewerAssetEntry(DAD_TEXTURE)); - addEntry(LLViewerAssetType::AT_SOUND, new ViewerAssetEntry(DAD_SOUND)); - addEntry(LLViewerAssetType::AT_CALLINGCARD, new ViewerAssetEntry(DAD_CALLINGCARD)); - addEntry(LLViewerAssetType::AT_LANDMARK, new ViewerAssetEntry(DAD_LANDMARK)); - addEntry(LLViewerAssetType::AT_SCRIPT, new ViewerAssetEntry(DAD_NONE)); - addEntry(LLViewerAssetType::AT_CLOTHING, new ViewerAssetEntry(DAD_CLOTHING)); - addEntry(LLViewerAssetType::AT_OBJECT, new ViewerAssetEntry(DAD_OBJECT)); - addEntry(LLViewerAssetType::AT_NOTECARD, new ViewerAssetEntry(DAD_NOTECARD)); - addEntry(LLViewerAssetType::AT_CATEGORY, new ViewerAssetEntry(DAD_CATEGORY)); - addEntry(LLViewerAssetType::AT_ROOT_CATEGORY, new ViewerAssetEntry(DAD_ROOT_CATEGORY)); - addEntry(LLViewerAssetType::AT_LSL_TEXT, new ViewerAssetEntry(DAD_SCRIPT)); - addEntry(LLViewerAssetType::AT_LSL_BYTECODE, new ViewerAssetEntry(DAD_NONE)); - addEntry(LLViewerAssetType::AT_TEXTURE_TGA, new ViewerAssetEntry(DAD_NONE)); - addEntry(LLViewerAssetType::AT_BODYPART, new ViewerAssetEntry(DAD_BODYPART)); - addEntry(LLViewerAssetType::AT_SOUND_WAV, new ViewerAssetEntry(DAD_NONE)); - addEntry(LLViewerAssetType::AT_IMAGE_TGA, new ViewerAssetEntry(DAD_NONE)); - addEntry(LLViewerAssetType::AT_IMAGE_JPEG, new ViewerAssetEntry(DAD_NONE)); - addEntry(LLViewerAssetType::AT_ANIMATION, new ViewerAssetEntry(DAD_ANIMATION)); - addEntry(LLViewerAssetType::AT_GESTURE, new ViewerAssetEntry(DAD_GESTURE)); - addEntry(LLViewerAssetType::AT_SIMSTATE, new ViewerAssetEntry(DAD_NONE)); - - addEntry(LLViewerAssetType::AT_LINK, new ViewerAssetEntry(DAD_LINK)); - addEntry(LLViewerAssetType::AT_LINK_FOLDER, new ViewerAssetEntry(DAD_LINK)); - - addEntry(LLViewerAssetType::AT_NONE, new ViewerAssetEntry(DAD_NONE)); -}; - -EDragAndDropType LLViewerAssetType::lookupDragAndDropType(EType asset_type) -{ - const LLViewerAssetDictionary *dict = LLViewerAssetDictionary::getInstance(); - const ViewerAssetEntry *entry = dict->lookup(asset_type); - if (entry) - return entry->mDadType; - else - return DAD_NONE; -} - -// Generate a good default description -void LLViewerAssetType::generateDescriptionFor(LLViewerAssetType::EType asset_type, - std::string& description) -{ - const S32 BUF_SIZE = 30; - char time_str[BUF_SIZE]; /* Flawfinder: ignore */ - time_t now; - time(&now); - memset(time_str, '\0', BUF_SIZE); - strftime(time_str, BUF_SIZE - 1, "%Y-%m-%d %H:%M:%S ", localtime(&now)); - description.assign(time_str); - description.append(LLAssetType::lookupHumanReadable(asset_type)); -} diff --git a/indra/newview/llviewerassettype.h b/indra/newview/llviewerassettype.h deleted file mode 100644 index 01158885ce..0000000000 --- a/indra/newview/llviewerassettype.h +++ /dev/null @@ -1,54 +0,0 @@ -/** - * @file llviewerassettype.h - * @brief Declaration of LLViewerViewerAssetType. - * - * $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_LLVIEWERASSETTYPE_H -#define LL_LLVIEWERASSETTYPE_H - -#include <string> -#include "llassettype.h" - -// This class is similar to llassettype, but contains methods -// only used by the viewer. -class LLViewerAssetType : public LLAssetType -{ -public: - // Generate a good default description. You may want to add a verb - // or agent name after this depending on your application. - static void generateDescriptionFor(LLViewerAssetType::EType asset_type, - std::string& description); - static EDragAndDropType lookupDragAndDropType(EType asset_type); -protected: - LLViewerAssetType() {} - ~LLViewerAssetType() {} -}; - -#endif // LL_LLVIEWERASSETTYPE_H diff --git a/indra/newview/llviewerfoldertype.cpp b/indra/newview/llviewerfoldertype.cpp deleted file mode 100644 index 384538364f..0000000000 --- a/indra/newview/llviewerfoldertype.cpp +++ /dev/null @@ -1,263 +0,0 @@ -/** - * @file llfoldertype.cpp - * @brief Implementation of LLViewerFolderType functionality. - * - * $LicenseInfo:firstyear=2001&license=viewergpl$ - * - * Copyright (c) 2001-2009, Linden Research, Inc. - * - * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab. Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 - * - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at - * http://secondlifegrid.net/programs/open_source/licensing/flossexception - * - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. - * - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. - * $/LicenseInfo$ - */ - -#include "llviewerprecompiledheaders.h" - -#include "llviewerfoldertype.h" -#include "lldictionary.h" -#include "llmemory.h" -#include "llvisualparam.h" - -static const std::string empty_string; - -struct ViewerFolderEntry : public LLDictionaryEntry -{ - // Constructor for non-ensembles - ViewerFolderEntry(const std::string &new_category_name, // default name when creating a new category of this type - const std::string &icon_name // name of the folder icon - ) - : - LLDictionaryEntry(empty_string), // no reverse lookup needed on non-ensembles, so just leave this blank - mIconName(icon_name), - mNewCategoryName(new_category_name) - { - mAllowedNames.clear(); - } - - // Constructor for ensembles - ViewerFolderEntry(const std::string &xui_name, // name of the xui menu item - const std::string &new_category_name, // default name when creating a new category of this type - const std::string &icon_name, // name of the folder icon - const std::string allowed_names // allowed item typenames for this folder type - ) - : - LLDictionaryEntry(xui_name), - mIconName(icon_name), - mNewCategoryName(new_category_name) - { - const std::string delims (","); - LLStringUtilBase<char>::getTokens(allowed_names, mAllowedNames, delims); - } - - bool getIsAllowedName(const std::string &name) const - { - if (mAllowedNames.empty()) - return false; - for (name_vec_t::const_iterator iter = mAllowedNames.begin(); - iter != mAllowedNames.end(); - iter++) - { - if (name == (*iter)) - return true; - } - return false; - } - const std::string mIconName; - const std::string mNewCategoryName; - typedef std::vector<std::string> name_vec_t; - name_vec_t mAllowedNames; -}; - -class LLViewerFolderDictionary : public LLSingleton<LLViewerFolderDictionary>, - public LLDictionary<LLFolderType::EType, ViewerFolderEntry> -{ -public: - LLViewerFolderDictionary(); -protected: - bool initEnsemblesFromFile(); // Reads in ensemble information from foldertypes.xml -}; - -LLViewerFolderDictionary::LLViewerFolderDictionary() -{ - initEnsemblesFromFile(); - - // NEW CATEGORY NAME FOLDER ICON NAME - // |-------------------------|---------------------------| - addEntry(LLFolderType::FT_TEXTURE, new ViewerFolderEntry("Textures", "inv_folder_texture.tga")); - addEntry(LLFolderType::FT_SOUND, new ViewerFolderEntry("Sounds", "inv_folder_sound.tga")); - addEntry(LLFolderType::FT_CALLINGCARD, new ViewerFolderEntry("Calling Cards", "inv_folder_callingcard.tga")); - addEntry(LLFolderType::FT_LANDMARK, new ViewerFolderEntry("Landmarks", "inv_folder_landmark.tga")); - addEntry(LLFolderType::FT_CLOTHING, new ViewerFolderEntry("Clothing", "inv_folder_clothing.tga")); - addEntry(LLFolderType::FT_OBJECT, new ViewerFolderEntry("Objects", "inv_folder_object.tga")); - addEntry(LLFolderType::FT_NOTECARD, new ViewerFolderEntry("Notecards", "inv_folder_notecard.tga")); - addEntry(LLFolderType::FT_CATEGORY, new ViewerFolderEntry("New Folder", "inv_folder_plain_closed.tga")); - addEntry(LLFolderType::FT_ROOT_CATEGORY, new ViewerFolderEntry("Inventory", "")); - addEntry(LLFolderType::FT_LSL_TEXT, new ViewerFolderEntry("Scripts", "inv_folder_script.tga")); - addEntry(LLFolderType::FT_BODYPART, new ViewerFolderEntry("Body Parts", "inv_folder_bodypart.tga")); - addEntry(LLFolderType::FT_TRASH, new ViewerFolderEntry("Trash", "inv_folder_trash.tga")); - addEntry(LLFolderType::FT_SNAPSHOT_CATEGORY, new ViewerFolderEntry("Photo Album", "inv_folder_snapshot.tga")); - addEntry(LLFolderType::FT_LOST_AND_FOUND, new ViewerFolderEntry("Lost And Found", "inv_folder_lostandfound.tga")); - addEntry(LLFolderType::FT_ANIMATION, new ViewerFolderEntry("Animations", "inv_folder_animation.tga")); - addEntry(LLFolderType::FT_GESTURE, new ViewerFolderEntry("Gestures", "inv_folder_gesture.tga")); - addEntry(LLFolderType::FT_FAVORITE, new ViewerFolderEntry("Favorite", "inv_folder_plain_closed.tga")); - - addEntry(LLFolderType::FT_CURRENT_OUTFIT, new ViewerFolderEntry("Current Outfit", "inv_folder_current_outfit.tga")); - addEntry(LLFolderType::FT_OUTFIT, new ViewerFolderEntry("New Outfit", "inv_folder_outfit.tga")); - addEntry(LLFolderType::FT_MY_OUTFITS, new ViewerFolderEntry("My Outfits", "inv_folder_my_outfits.tga")); - addEntry(LLFolderType::FT_INBOX, new ViewerFolderEntry("Inbox", "inv_folder_inbox.tga")); - - addEntry(LLFolderType::FT_NONE, new ViewerFolderEntry("New Folder", "inv_folder_plain_closed.tga")); -} - -bool LLViewerFolderDictionary::initEnsemblesFromFile() -{ - std::string xml_filename = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"foldertypes.xml"); - LLXmlTree folder_def; - if (!folder_def.parseFile(xml_filename)) - { - llerrs << "Failed to parse folders file " << xml_filename << llendl; - return false; - } - - LLXmlTreeNode* rootp = folder_def.getRoot(); - for (LLXmlTreeNode* ensemble = rootp->getFirstChild(); - ensemble; - ensemble = rootp->getNextChild()) - { - if (!ensemble->hasName("ensemble")) - { - llwarns << "Invalid ensemble definition node " << ensemble->getName() << llendl; - continue; - } - - S32 ensemble_type; - static LLStdStringHandle ensemble_num_string = LLXmlTree::addAttributeString("foldertype_num"); - if (!ensemble->getFastAttributeS32(ensemble_num_string, ensemble_type)) - { - llwarns << "No ensemble type defined" << llendl; - continue; - } - - - if (ensemble_type < S32(LLFolderType::FT_ENSEMBLE_START) || ensemble_type > S32(LLFolderType::FT_ENSEMBLE_END)) - { - llwarns << "Exceeded maximum ensemble index" << LLFolderType::FT_ENSEMBLE_END << llendl; - break; - } - - std::string xui_name; - static LLStdStringHandle xui_name_string = LLXmlTree::addAttributeString("xui_name"); - if (!ensemble->getFastAttributeString(xui_name_string, xui_name)) - { - llwarns << "No xui name defined" << llendl; - continue; - } - - std::string icon_name; - static LLStdStringHandle icon_name_string = LLXmlTree::addAttributeString("icon_name"); - if (!ensemble->getFastAttributeString(icon_name_string, icon_name)) - { - llwarns << "No ensemble icon name defined" << llendl; - continue; - } - - std::string allowed_names; - static LLStdStringHandle allowed_names_string = LLXmlTree::addAttributeString("allowed"); - if (!ensemble->getFastAttributeString(allowed_names_string, allowed_names)) - { - } - - // Add the entry and increment the asset number. - const static std::string new_ensemble_name = "New Ensemble"; - addEntry(LLFolderType::EType(ensemble_type), new ViewerFolderEntry(xui_name, new_ensemble_name, icon_name, allowed_names)); - } - - return true; -} - - -const std::string &LLViewerFolderType::lookupXUIName(LLFolderType::EType folder_type) -{ - const ViewerFolderEntry *entry = LLViewerFolderDictionary::getInstance()->lookup(folder_type); - if (entry) - { - return entry->mName; - } - return badLookup(); -} - -LLFolderType::EType LLViewerFolderType::lookupTypeFromXUIName(const std::string &name) -{ - return LLViewerFolderDictionary::getInstance()->lookup(name); -} - -const std::string &LLViewerFolderType::lookupIconName(LLFolderType::EType folder_type) -{ - const ViewerFolderEntry *entry = LLViewerFolderDictionary::getInstance()->lookup(folder_type); - if (entry) - { - return entry->mIconName; - } - return badLookup(); -} - -const std::string &LLViewerFolderType::lookupNewCategoryName(LLFolderType::EType folder_type) -{ - const ViewerFolderEntry *entry = LLViewerFolderDictionary::getInstance()->lookup(folder_type); - if (entry) - { - return entry->mNewCategoryName; - } - return badLookup(); -} - -LLFolderType::EType LLViewerFolderType::lookupTypeFromNewCategoryName(const std::string& name) -{ - for (LLViewerFolderDictionary::const_iterator iter = LLViewerFolderDictionary::getInstance()->begin(); - iter != LLViewerFolderDictionary::getInstance()->end(); - iter++) - { - const ViewerFolderEntry *entry = iter->second; - if (entry->mNewCategoryName == name) - { - return iter->first; - } - } - return FT_NONE; -} - - -U64 LLViewerFolderType::lookupValidFolderTypes(const std::string& item_name) -{ - U64 matching_folders = 0; - for (LLViewerFolderDictionary::const_iterator iter = LLViewerFolderDictionary::getInstance()->begin(); - iter != LLViewerFolderDictionary::getInstance()->end(); - iter++) - { - const ViewerFolderEntry *entry = iter->second; - if (entry->getIsAllowedName(item_name)) - { - matching_folders |= 1LL << iter->first; - } - } - return matching_folders; -} diff --git a/indra/newview/llviewerfoldertype.h b/indra/newview/llviewerfoldertype.h deleted file mode 100644 index a6aea62b2a..0000000000 --- a/indra/newview/llviewerfoldertype.h +++ /dev/null @@ -1,57 +0,0 @@ -/** - * @file llviewerfoldertype.h - * @brief Declaration of LLAssetType. - * - * $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_LLVIEWERFOLDERTYPE_H -#define LL_LLVIEWERFOLDERTYPE_H - -#include <string> -#include "llfoldertype.h" - -// This class is similar to llfoldertype, but contains methods -// only used by the viewer. This also handles ensembles. -class LLViewerFolderType : public LLFolderType -{ -public: - static const std::string& lookupXUIName(EType folder_type); // name used by the UI - static LLFolderType::EType lookupTypeFromXUIName(const std::string& name); - - static const std::string& lookupIconName(EType asset_type); // folder icon name - static const std::string& lookupNewCategoryName(EType folder_type); // default name when creating new category - static LLFolderType::EType lookupTypeFromNewCategoryName(const std::string& name); // default name when creating new category - - static U64 lookupValidFolderTypes(const std::string& item_name); // which folders allow an item of this type? -protected: - LLViewerFolderType() {} - ~LLViewerFolderType() {} -}; - -#endif // LL_LLVIEWERFOLDERTYPE_H diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp index 1d62ead843..470739baa9 100644 --- a/indra/newview/llviewerinventory.cpp +++ b/indra/newview/llviewerinventory.cpp @@ -37,7 +37,7 @@ #include "indra_constants.h" #include "llagent.h" -#include "llviewerfoldertype.h" +#include "llfoldertype.h" #include "llfolderview.h" #include "llviewercontrol.h" #include "llconsole.h" @@ -48,7 +48,6 @@ #include "llinventorybridge.h" #include "llfloaterinventory.h" -#include "llviewerassettype.h" #include "llviewerregion.h" #include "llviewerobjectlist.h" #include "llpreviewgesture.h" @@ -360,7 +359,7 @@ void LLViewerInventoryItem::updateParentOnServer(BOOL restamp) const LLViewerInventoryCategory::LLViewerInventoryCategory(const LLUUID& uuid, const LLUUID& parent_uuid, - LLFolderType::EType pref, + LLAssetType::EType pref, const std::string& name, const LLUUID& owner_id) : LLInventoryCategory(uuid, parent_uuid, pref, name), @@ -417,7 +416,7 @@ void LLViewerInventoryCategory::updateServer(BOOL is_new) const { // communicate that change with the server. - if (LLFolderType::lookupIsProtectedType(mPreferredType)) + if (LLAssetType::lookupIsProtectedCategoryType(mPreferredType)) { LLNotifications::instance().add("CannotModifyProtectedCategories"); return; @@ -441,7 +440,7 @@ void LLViewerInventoryCategory::removeFromServer( void ) llinfos << "Removing inventory category " << mUUID << " from server." << llendl; // communicate that change with the server. - if(LLFolderType::lookupIsProtectedType(mPreferredType)) + if(LLAssetType::lookupIsProtectedCategoryType(mPreferredType)) { LLNotifications::instance().add("CannotRemoveProtectedCategories"); return; @@ -544,7 +543,7 @@ bool LLViewerInventoryCategory::importFileLocal(LLFILE* fp) } else if(0 == strcmp("pref_type", keyword)) { - mPreferredType = LLFolderType::lookup(valuestr); + mPreferredType = LLAssetType::lookup(valuestr); } else if(0 == strcmp("name", keyword)) { @@ -582,7 +581,7 @@ bool LLViewerInventoryCategory::exportFileLocal(LLFILE* fp) const mParentUUID.toString(uuid_str); fprintf(fp, "\t\tparent_id\t%s\n", uuid_str.c_str()); fprintf(fp, "\t\ttype\t%s\n", LLAssetType::lookup(mType)); - fprintf(fp, "\t\tpref_type\t%s\n", LLFolderType::lookup(mPreferredType).c_str()); + fprintf(fp, "\t\tpref_type\t%s\n", LLAssetType::lookup(mPreferredType)); fprintf(fp, "\t\tname\t%s|\n", mName.c_str()); mOwnerID.toString(uuid_str); fprintf(fp, "\t\towner_id\t%s\n", uuid_str.c_str()); @@ -593,8 +592,8 @@ bool LLViewerInventoryCategory::exportFileLocal(LLFILE* fp) const void LLViewerInventoryCategory::determineFolderType() { - LLFolderType::EType original_type = getPreferredType(); - if (LLFolderType::lookupIsProtectedType(original_type)) + LLAssetType::EType original_type = getPreferredType(); + if (LLAssetType::lookupIsProtectedCategoryType(original_type)) return; U64 folder_valid = 0; @@ -617,28 +616,28 @@ void LLViewerInventoryCategory::determineFolderType() { const EWearableType wearable_type = item->getWearableType(); const std::string& wearable_name = LLWearableDictionary::getTypeName(wearable_type); - U64 valid_folder_types = LLViewerFolderType::lookupValidFolderTypes(wearable_name); + U64 valid_folder_types = LLFolderType::lookupValidFolderTypes(wearable_name); folder_valid |= valid_folder_types; folder_invalid |= ~valid_folder_types; } } - for (U8 i = LLFolderType::FT_ENSEMBLE_START; i <= LLFolderType::FT_ENSEMBLE_END; i++) + for (U8 i = LLAssetType::AT_FOLDER_ENSEMBLE_START; i <= LLAssetType::AT_FOLDER_ENSEMBLE_END; i++) { if ((folder_valid & (1LL << i)) && !(folder_invalid & (1LL << i))) { - changeType((LLFolderType::EType)i); + changeType((LLAssetType::EType)i); return; } } } - if (LLFolderType::lookupIsEnsembleType(original_type)) + if (LLAssetType::lookupIsEnsembleCategoryType(original_type)) { - changeType(LLFolderType::FT_NONE); + changeType(LLAssetType::AT_NONE); } } -void LLViewerInventoryCategory::changeType(LLFolderType::EType new_folder_type) +void LLViewerInventoryCategory::changeType(LLAssetType::EType new_folder_type) { const LLUUID &folder_id = getUUID(); const LLUUID &parent_id = getParentUUID(); @@ -949,7 +948,7 @@ void copy_inventory_from_notecard(const LLUUID& object_id, const LLUUID& notecar body["notecard-id"] = notecard_inv_id; body["object-id"] = object_id; body["item-id"] = src->getUUID(); - body["folder-id"] = gInventory.findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(src->getType())); + body["folder-id"] = gInventory.findCategoryUUIDForType(src->getType()); body["callback-id"] = (LLSD::Integer)callback_id; request["message"] = "CopyInventoryFromNotecard"; @@ -965,7 +964,7 @@ void create_new_item(const std::string& name, U32 next_owner_perm) { std::string desc; - LLViewerAssetType::generateDescriptionFor(asset_type, desc); + LLAssetType::generateDescriptionFor(asset_type, desc); next_owner_perm = (next_owner_perm) ? next_owner_perm : PERM_MOVE | PERM_TRANSFER; @@ -990,14 +989,19 @@ const std::string NEW_LSL_NAME = "New Script"; // *TODO:Translate? (probably not const std::string NEW_NOTECARD_NAME = "New Note"; // *TODO:Translate? (probably not) 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) { - std::string type_name = userdata.asString(); + std::string type = userdata.asString(); - if (("category" == type_name) || ("current" == type_name) || ("outfit" == type_name) || ("my_otfts" == type_name)) + if (("category" == type) || ("current" == type) || ("outfit" == type) || ("my_otfts" == type) ) { - LLFolderType::EType preferred_type = LLFolderType::lookup(type_name); + LLAssetType::EType a_type = LLAssetType::AT_NONE; + if ("current" == type) + a_type = LLAssetType::AT_CURRENT_OUTFIT; + if ("outfit" == type) + a_type = LLAssetType::AT_OUTFIT; + if ("my_otfts" == type) + a_type = LLAssetType::AT_MY_OUTFITS; LLUUID parent_id; if (bridge) @@ -1013,100 +1017,100 @@ void menu_create_inventory_item(LLFolderView* folder, LLFolderBridge *bridge, co parent_id = gInventory.getRootFolderID(); } - LLUUID category = gInventory.createNewCategory(parent_id, preferred_type, LLStringUtil::null); + LLUUID category = gInventory.createNewCategory(parent_id, a_type, LLStringUtil::null); gInventory.notifyObservers(); folder->setSelectionByID(category, TRUE); } - else if ("lsl" == type_name) + else if ("lsl" == type) { - const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_LSL_TEXT); + LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_LSL_TEXT); create_new_item(NEW_LSL_NAME, parent_id, LLAssetType::AT_LSL_TEXT, LLInventoryType::IT_LSL, PERM_MOVE | PERM_TRANSFER); } - else if ("notecard" == type_name) + else if ("notecard" == type) { - const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_NOTECARD); + LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_NOTECARD); create_new_item(NEW_NOTECARD_NAME, parent_id, LLAssetType::AT_NOTECARD, LLInventoryType::IT_NOTECARD, PERM_ALL); } - else if ("gesture" == type_name) + else if ("gesture" == type) { - const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_GESTURE); + LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_GESTURE); create_new_item(NEW_GESTURE_NAME, parent_id, LLAssetType::AT_GESTURE, LLInventoryType::IT_GESTURE, PERM_ALL); } - else if ("shirt" == type_name) + else if ("shirt" == type) { - const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING); + LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING); LLFolderBridge::createWearable(parent_id, WT_SHIRT); } - else if ("pants" == type_name) + else if ("pants" == type) { - const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING); + LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING); LLFolderBridge::createWearable(parent_id, WT_PANTS); } - else if ("shoes" == type_name) + else if ("shoes" == type) { - const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING); + LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING); LLFolderBridge::createWearable(parent_id, WT_SHOES); } - else if ("socks" == type_name) + else if ("socks" == type) { - const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING); + LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING); LLFolderBridge::createWearable(parent_id, WT_SOCKS); } - else if ("jacket" == type_name) + else if ("jacket" == type) { - const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING); + LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING); LLFolderBridge::createWearable(parent_id, WT_JACKET); } - else if ("skirt" == type_name) + else if ("skirt" == type) { - const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING); + LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING); LLFolderBridge::createWearable(parent_id, WT_SKIRT); } - else if ("gloves" == type_name) + else if ("gloves" == type) { - const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING); + LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING); LLFolderBridge::createWearable(parent_id, WT_GLOVES); } - else if ("undershirt" == type_name) + else if ("undershirt" == type) { - const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING); + LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING); LLFolderBridge::createWearable(parent_id, WT_UNDERSHIRT); } - else if ("underpants" == type_name) + else if ("underpants" == type) { - const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_CLOTHING); + LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_CLOTHING); LLFolderBridge::createWearable(parent_id, WT_UNDERPANTS); } - else if ("shape" == type_name) + else if ("shape" == type) { - const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_BODYPART); + LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_BODYPART); LLFolderBridge::createWearable(parent_id, WT_SHAPE); } - else if ("skin" == type_name) + else if ("skin" == type) { - const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_BODYPART); + LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_BODYPART); LLFolderBridge::createWearable(parent_id, WT_SKIN); } - else if ("hair" == type_name) + else if ("hair" == type) { - const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_BODYPART); + LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_BODYPART); LLFolderBridge::createWearable(parent_id, WT_HAIR); } - else if ("eyes" == type_name) + else if ("eyes" == type) { - const LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_BODYPART); + LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_BODYPART); LLFolderBridge::createWearable(parent_id, WT_EYES); } diff --git a/indra/newview/llviewerinventory.h b/indra/newview/llviewerinventory.h index 529425aa25..d523bf2859 100644 --- a/indra/newview/llviewerinventory.h +++ b/indra/newview/llviewerinventory.h @@ -185,7 +185,7 @@ protected: public: LLViewerInventoryCategory(const LLUUID& uuid, const LLUUID& parent_uuid, - LLFolderType::EType preferred_type, + LLAssetType::EType preferred_type, const std::string& name, const LLUUID& owner_id); LLViewerInventoryCategory(const LLUUID& owner_id); @@ -221,7 +221,7 @@ public: bool exportFileLocal(LLFILE* fp) const; bool importFileLocal(LLFILE* fp); void determineFolderType(); - void changeType(LLFolderType::EType new_folder_type); + void changeType(LLAssetType::EType new_folder_type); protected: LLUUID mOwnerID; S32 mVersion; diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 9a98264847..23ceb1e72d 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -4176,10 +4176,12 @@ void handle_take_copy() { if (LLSelectMgr::getInstance()->getSelection()->isEmpty()) return; - const LLUUID category_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_OBJECT); + LLUUID category_id = + gInventory.findCategoryUUIDForType(LLAssetType::AT_OBJECT); derez_objects(DRD_ACQUIRE_TO_AGENT_INVENTORY, category_id); } + // You can return an object to its owner if it is on your land. class LLObjectReturn : public view_listener_t { @@ -4260,7 +4262,7 @@ class LLObjectEnableReturn : public view_listener_t void force_take_copy(void*) { if (LLSelectMgr::getInstance()->getSelection()->isEmpty()) return; - const LLUUID category_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_OBJECT); + const LLUUID& category_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_OBJECT); derez_objects(DRD_FORCE_TO_GOD_INVENTORY, category_id); } @@ -4321,7 +4323,8 @@ void handle_take() if(category_id.notNull()) { // check trash - const LLUUID trash = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); + LLUUID trash; + trash = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH); if(category_id == trash || gInventory.isObjectDescendentOf(category_id, trash)) { category_id.setNull(); @@ -4337,7 +4340,7 @@ void handle_take() } if(category_id.isNull()) { - category_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_OBJECT); + category_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_OBJECT); } LLSD payload; payload["folder_id"] = category_id; @@ -6916,7 +6919,7 @@ void handle_grab_texture(void* data) LL_INFOS("texture") << "Adding baked texture " << asset_id << " to inventory." << llendl; LLAssetType::EType asset_type = LLAssetType::AT_TEXTURE; LLInventoryType::EType inv_type = LLInventoryType::IT_TEXTURE; - const LLUUID folder_id = gInventory.findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(asset_type)); + LLUUID folder_id(gInventory.findCategoryUUIDForType(asset_type)); if(folder_id.notNull()) { std::string name = "Unknown"; diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp index d17c7e486f..d3a9e1cef8 100644 --- a/indra/newview/llviewermenufile.cpp +++ b/indra/newview/llviewermenufile.cpp @@ -319,7 +319,7 @@ class LLFileUploadBulk : public view_listener_t LLAssetStorage::LLStoreAssetCallback callback = NULL; S32 expected_upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload(); void *userdata = NULL; - upload_new_resource(filename, asset_name, asset_name, 0, LLFolderType::FT_NONE, LLInventoryType::IT_NONE, + upload_new_resource(filename, asset_name, asset_name, 0, LLAssetType::AT_NONE, LLInventoryType::IT_NONE, LLFloaterPerms::getNextOwnerPerms(), LLFloaterPerms::getGroupPerms(), LLFloaterPerms::getEveryonePerms(), display_name, callback, expected_upload_cost, userdata); @@ -493,7 +493,7 @@ void handle_compress_image(void*) void upload_new_resource(const std::string& src_filename, std::string name, std::string desc, S32 compression_info, - LLFolderType::EType destination_folder_type, + LLAssetType::EType destination_folder_type, LLInventoryType::EType inv_type, U32 next_owner_perms, U32 group_perms, @@ -810,7 +810,7 @@ void upload_done_callback(const LLUUID& uuid, void* user_data, S32 result, LLExt if(result >= 0) { - LLFolderType::EType dest_loc = (data->mPreferredLocation == LLFolderType::FT_NONE) ? LLFolderType::assetTypeToFolderType(data->mAssetInfo.mType) : data->mPreferredLocation; + LLAssetType::EType dest_loc = (data->mPreferredLocation == LLAssetType::AT_NONE) ? data->mAssetInfo.mType : data->mPreferredLocation; if (LLAssetType::AT_SOUND == data->mAssetInfo.mType || LLAssetType::AT_TEXTURE == data->mAssetInfo.mType || @@ -856,7 +856,7 @@ void upload_done_callback(const LLUUID& uuid, void* user_data, S32 result, LLExt { // Actually add the upload to inventory llinfos << "Adding " << uuid << " to inventory." << llendl; - const LLUUID folder_id = gInventory.findCategoryUUIDForType(dest_loc); + LLUUID folder_id(gInventory.findCategoryUUIDForType(dest_loc)); if(folder_id.notNull()) { U32 next_owner_perms = data->mNextOwnerPerm; @@ -903,7 +903,7 @@ void upload_done_callback(const LLUUID& uuid, void* user_data, S32 result, LLExt LLAssetStorage::LLStoreAssetCallback callback = NULL; void *userdata = NULL; upload_new_resource(next_file, asset_name, asset_name, // file - 0, LLFolderType::FT_NONE, LLInventoryType::IT_NONE, + 0, LLAssetType::AT_NONE, LLInventoryType::IT_NONE, PERM_NONE, PERM_NONE, PERM_NONE, display_name, callback, @@ -915,7 +915,7 @@ void upload_done_callback(const LLUUID& uuid, void* user_data, S32 result, LLExt void upload_new_resource(const LLTransactionID &tid, LLAssetType::EType asset_type, std::string name, std::string desc, S32 compression_info, - LLFolderType::EType destination_folder_type, + LLAssetType::EType destination_folder_type, LLInventoryType::EType inv_type, U32 next_owner_perms, U32 group_perms, @@ -973,14 +973,14 @@ void upload_new_resource(const LLTransactionID &tid, LLAssetType::EType asset_ty llinfos << "Name: " << name << llendl; llinfos << "Desc: " << desc << llendl; llinfos << "Expected Upload Cost: " << expected_upload_cost << llendl; - lldebugs << "Folder: " << gInventory.findCategoryUUIDForType((destination_folder_type == LLFolderType::FT_NONE) ? LLFolderType::assetTypeToFolderType(asset_type) : destination_folder_type) << llendl; + lldebugs << "Folder: " << gInventory.findCategoryUUIDForType((destination_folder_type == LLAssetType::AT_NONE) ? asset_type : destination_folder_type) << llendl; lldebugs << "Asset Type: " << LLAssetType::lookup(asset_type) << llendl; std::string url = gAgent.getRegion()->getCapability("NewFileAgentInventory"); if (!url.empty()) { llinfos << "New Agent Inventory via capability" << llendl; LLSD body; - body["folder_id"] = gInventory.findCategoryUUIDForType((destination_folder_type == LLFolderType::FT_NONE) ? LLFolderType::assetTypeToFolderType(asset_type) : destination_folder_type); + body["folder_id"] = gInventory.findCategoryUUIDForType((destination_folder_type == LLAssetType::AT_NONE) ? asset_type : destination_folder_type); body["asset_type"] = LLAssetType::lookup(asset_type); body["inventory_type"] = LLInventoryType::lookup(inv_type); body["name"] = name; diff --git a/indra/newview/llviewermenufile.h b/indra/newview/llviewermenufile.h index da78537a29..bf21292082 100644 --- a/indra/newview/llviewermenufile.h +++ b/indra/newview/llviewermenufile.h @@ -33,7 +33,7 @@ #ifndef LLVIEWERMENUFILE_H #define LLVIEWERMENUFILE_H -#include "llfoldertype.h" +#include "llassettype.h" #include "llinventorytype.h" class LLTransactionID; @@ -45,7 +45,7 @@ void upload_new_resource(const std::string& src_filename, std::string name, std::string desc, S32 compression_info, - LLFolderType::EType destination_folder_type, + LLAssetType::EType destination_folder_type, LLInventoryType::EType inv_type, U32 next_owner_perms, U32 group_perms, @@ -60,7 +60,7 @@ void upload_new_resource(const LLTransactionID &tid, std::string name, std::string desc, S32 compression_info, - LLFolderType::EType destination_folder_type, + LLAssetType::EType destination_folder_type, LLInventoryType::EType inv_type, U32 next_owner_perms, U32 group_perms, diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index d8e6c52c8c..ff1c7b526f 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -140,7 +140,7 @@ #include "llgroupactions.h" #include "llagentui.h" #include "llpanelblockedlist.h" -#include "llpanelplaceprofile.h" +#include "llpanelplaceinfo.h" #include <boost/tokenizer.hpp> #include <boost/algorithm/string/split.hpp> @@ -209,6 +209,7 @@ const BOOL SCRIPT_QUESTION_IS_CAUTION[SCRIPT_PERMISSION_EOF] = bool friendship_offer_callback(const LLSD& notification, const LLSD& response) { S32 option = LLNotification::getSelectedOption(notification, response); + LLUUID fid; LLMessageSystem* msg = gMessageSystem; const LLSD& payload = notification["payload"]; @@ -218,11 +219,10 @@ bool friendship_offer_callback(const LLSD& notification, const LLSD& response) switch(option) { case 0: - { // accept LLAvatarTracker::formFriendship(payload["from_id"]); - const LLUUID fid = gInventory.findCategoryUUIDForType(LLFolderType::FT_CALLINGCARD); + fid = gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD); // This will also trigger an onlinenotification if the user is online msg->newMessageFast(_PREHASH_AcceptFriendship); @@ -235,9 +235,7 @@ bool friendship_offer_callback(const LLSD& notification, const LLSD& response) msg->addUUIDFast(_PREHASH_FolderID, fid); msg->sendReliable(LLHost(payload["sender"].asString())); break; - } case 1: - { // decline // We no longer notify other viewers, but we DO still send // the rejection to the simulator to delete the pending userop. @@ -249,7 +247,6 @@ bool friendship_offer_callback(const LLSD& notification, const LLSD& response) msg->addUUIDFast(_PREHASH_TransactionID, payload["session_id"]); msg->sendReliable(LLHost(payload["sender"].asString())); break; - } default: // close button probably, possibly timed out break; @@ -770,7 +767,8 @@ public: virtual void done() { LL_DEBUGS("Messaging") << "LLDiscardAgentOffer::done()" << LL_ENDL; - const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); + LLUUID trash_id; + trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH); bool notify = false; if(trash_id.notNull() && mObjectID.notNull()) { @@ -877,7 +875,7 @@ void open_offer(const std::vector<LLUUID>& items, const std::string& from_name) { std::vector<LLUUID>::const_iterator it = items.begin(); std::vector<LLUUID>::const_iterator end = items.end(); - const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); + LLUUID trash_id(gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH)); LLInventoryItem* item; for(; it != end; ++it) { @@ -948,12 +946,13 @@ void open_offer(const std::vector<LLUUID>& items, const std::string& from_name) } //Trash Check - const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); + LLUUID trash_id; + trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH); if(gInventory.isObjectDescendentOf(item->getUUID(), trash_id)) { return; } - const LLUUID lost_and_found_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND); + LLUUID lost_and_found_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LOST_AND_FOUND); //BOOL inventory_has_focus = gFocusMgr.childHasKeyboardFocus(view); BOOL user_is_away = gAwayTimer.getStarted(); @@ -1717,7 +1716,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) info->mFromGroup = from_group; info->mTransactionID = session_id; info->mType = (LLAssetType::EType) asset_type; - info->mFolderID = gInventory.findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(info->mType)); + info->mFolderID = gInventory.findCategoryUUIDForType(info->mType); std::string from_name; from_name += "A group member named "; @@ -1851,7 +1850,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) info->mFromID = from_id; info->mFromGroup = from_group; info->mTransactionID = session_id; - info->mFolderID = gInventory.findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(info->mType)); + info->mFolderID = gInventory.findCategoryUUIDForType(info->mType); if (dialog == IM_TASK_INVENTORY_OFFERED) { @@ -2145,7 +2144,7 @@ bool callingcard_offer_callback(const LLSD& notification, const LLSD& response) msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); msg->nextBlockFast(_PREHASH_TransactionBlock); msg->addUUIDFast(_PREHASH_TransactionID, notification["payload"]["transaction_id"].asUUID()); - fid = gInventory.findCategoryUUIDForType(LLFolderType::FT_CALLINGCARD); + fid = gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD); msg->nextBlockFast(_PREHASH_FolderData); msg->addUUIDFast(_PREHASH_FolderID, fid); msg->sendReliable(LLHost(notification["payload"]["sender"].asString())); @@ -2598,10 +2597,11 @@ BOOL LLPostTeleportNotifiers::tick() { // get callingcards and landmarks available to the user arriving. LLInventoryFetchDescendentsObserver::folder_ref_t folders; - const LLUUID callingcard_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CALLINGCARD); - if(callingcard_id.notNull()) - folders.push_back(callingcard_id); - const LLUUID folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK); + LLUUID folder_id; + folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CALLINGCARD); + if(folder_id.notNull()) + folders.push_back(folder_id); + folder_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK); if(folder_id.notNull()) folders.push_back(folder_id); if(!folders.empty()) @@ -4819,7 +4819,7 @@ void container_inventory_arrived(LLViewerObject* object, // create a new inventory category to put this in LLUUID cat_id; cat_id = gInventory.createNewCategory(gInventory.getRootFolderID(), - LLFolderType::FT_NONE, + LLAssetType::AT_NONE, LLTrans::getString("AcquiredItems")); InventoryObjectList::const_iterator it = inventory->begin(); @@ -4869,7 +4869,7 @@ void container_inventory_arrived(LLViewerObject* object, } LLInventoryItem* item = (LLInventoryItem*)((LLInventoryObject*)(*it)); - const LLUUID category = gInventory.findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(item->getType())); + LLUUID category = gInventory.findCategoryUUIDForType(item->getType()); LLUUID item_id; item_id.generate(); @@ -5549,7 +5549,7 @@ void process_covenant_reply(LLMessageSystem* msg, void**) LLPanelLandCovenant::updateEstateOwnerName(owner_name); LLFloaterBuyLand::updateEstateOwnerName(owner_name); - LLPanelPlaceProfile* panel = LLSideTray::getInstance()->findChild<LLPanelPlaceProfile>("panel_place_profile"); + LLPanelPlaceInfo* panel = LLSideTray::getInstance()->findChild<LLPanelPlaceInfo>("panel_place_info"); if (panel) { panel->updateEstateName(estate_name); @@ -5683,7 +5683,7 @@ void onCovenantLoadComplete(LLVFS *vfs, LLPanelLandCovenant::updateCovenantText(covenant_text); LLFloaterBuyLand::updateCovenantText(covenant_text, asset_uuid); - LLPanelPlaceProfile* panel = LLSideTray::getInstance()->findChild<LLPanelPlaceProfile>("panel_place_profile"); + LLPanelPlaceInfo* panel = LLSideTray::getInstance()->findChild<LLPanelPlaceInfo>("panel_place_info"); if (panel) { panel->updateCovenantText(covenant_text); diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 20cd516fa0..26411ce152 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -2928,7 +2928,7 @@ void LLViewerObject::boostTexturePriority(BOOL boost_children /* = TRUE */) { LLSculptParams *sculpt_params = (LLSculptParams *)getParameterEntry(LLNetworkData::PARAMS_SCULPT); LLUUID sculpt_id = sculpt_params->getSculptTexture(); - LLViewerTextureManager::getFetchedTexture(sculpt_id, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE)->setBoostLevel(LLViewerTexture::BOOST_SELECTED); + LLViewerTextureManager::getFetchedTexture(sculpt_id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE)->setBoostLevel(LLViewerTexture::BOOST_SELECTED); } if (boost_children) @@ -3691,7 +3691,7 @@ void LLViewerObject::setTE(const U8 te, const LLTextureEntry &texture_entry) // if (mDrawable.notNull() && mDrawable->isVisible()) // { const LLUUID& image_id = getTE(te)->getID(); - mTEImages[te] = LLViewerTextureManager::getFetchedTexture(image_id, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE); + mTEImages[te] = LLViewerTextureManager::getFetchedTexture(image_id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE); // } } @@ -3717,7 +3717,7 @@ S32 LLViewerObject::setTETextureCore(const U8 te, const LLUUID& uuid, LLHost hos uuid == LLUUID::null) { retval = LLPrimitive::setTETexture(te, uuid); - mTEImages[te] = LLViewerTextureManager::getFetchedTexture(uuid, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE, 0, 0, host); + mTEImages[te] = LLViewerTextureManager::getFetchedTexture(uuid, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, host); setChanged(TEXTURE); if (mDrawable.notNull()) { diff --git a/indra/newview/llviewertexteditor.cpp b/indra/newview/llviewertexteditor.cpp index 90dff465c9..5c40f2a540 100644 --- a/indra/newview/llviewertexteditor.cpp +++ b/indra/newview/llviewertexteditor.cpp @@ -62,7 +62,6 @@ #include "lltooltip.h" #include "lltrans.h" #include "lluictrlfactory.h" -#include "llviewerassettype.h" #include "llviewercontrol.h" #include "llviewerinventory.h" #include "llviewertexturelist.h" @@ -506,17 +505,19 @@ LLUIImagePtr LLEmbeddedItems::getItemImage(llwchar ext_char) const } break; - case LLAssetType::AT_SOUND: img_name = "Inv_Sound"; break; + case LLAssetType::AT_SOUND: img_name = "Inv_Sound"; break; case LLAssetType::AT_CLOTHING: img_name = "Inv_Clothing"; break; - case LLAssetType::AT_OBJECT: img_name = "Inv_Object"; break; + case LLAssetType::AT_OBJECT: img_name = "Inv_Object"; break; case LLAssetType::AT_CALLINGCARD: img_name = "Inv_CallingCard"; break; - case LLAssetType::AT_LANDMARK: img_name = "Inv_Landmark"; break; + case LLAssetType::AT_LANDMARK: img_name = "Inv_Landmark"; break; case LLAssetType::AT_NOTECARD: img_name = "Inv_Notecard"; break; case LLAssetType::AT_LSL_TEXT: img_name = "Inv_Script"; break; - case LLAssetType::AT_BODYPART: img_name = "Inv_Skin"; break; - case LLAssetType::AT_ANIMATION: img_name = "Inv_Animation"; break; - case LLAssetType::AT_GESTURE: img_name = "Inv_Gesture"; break; - default: llassert(0); + case LLAssetType::AT_BODYPART: img_name = "Inv_Skin"; break; + case LLAssetType::AT_ANIMATION: img_name = "Inv_Animation";break; + case LLAssetType::AT_GESTURE: img_name = "Inv_Gesture"; break; + //TODO need img_name + case LLAssetType::AT_FAVORITE: img_name = "Inv_Landmark"; break; + default: llassert(0); } return LLUI::getUIImage(img_name); @@ -731,10 +732,11 @@ BOOL LLViewerTextEditor::handleHover(S32 x, S32 y, MASK mask) if( LLToolDragAndDrop::getInstance()->isOverThreshold( screen_x, screen_y ) ) { LLToolDragAndDrop::getInstance()->beginDrag( - LLViewerAssetType::lookupDragAndDropType( mDragItem->getType() ), + LLAssetType::lookupDragAndDropType( mDragItem->getType() ), mDragItem->getUUID(), LLToolDragAndDrop::SOURCE_NOTECARD, mPreviewID, mObjectID); + return LLToolDragAndDrop::getInstance()->handleHover( x, y, mask ); } getWindow()->setCursor(UI_CURSOR_HAND); diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index 758bf8c1aa..6b8c8c01d4 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -198,6 +198,7 @@ LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTexture( LLGLenum primary_format, LLHost request_from_host) { + llassert_always(boost_priority >= LLViewerTexture::BOOST_NONE) ; return gTextureList.getImage(image_id, usemipmaps, boost_priority, texture_type, internal_format, primary_format, request_from_host) ; } @@ -210,6 +211,7 @@ LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTextureFromFile( LLGLenum primary_format, const LLUUID& force_id) { + llassert_always(boost_priority >= LLViewerTexture::BOOST_NONE) ; return gTextureList.getImageFromFile(filename, usemipmaps, boost_priority, texture_type, internal_format, primary_format, force_id) ; } @@ -256,10 +258,10 @@ void LLViewerTextureManager::init() image_raw = NULL; LLViewerFetchedTexture::sDefaultImagep->dontDiscard(); #else - LLViewerFetchedTexture::sDefaultImagep = LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, TRUE, TRUE); + LLViewerFetchedTexture::sDefaultImagep = LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, TRUE, LLViewerTexture::BOOST_UI); #endif - LLViewerFetchedTexture::sSmokeImagep = LLViewerTextureManager::getFetchedTexture(IMG_SMOKE, TRUE, TRUE); + LLViewerFetchedTexture::sSmokeImagep = LLViewerTextureManager::getFetchedTexture(IMG_SMOKE, TRUE, LLViewerTexture::BOOST_UI); LLViewerFetchedTexture::sSmokeImagep->setNoDelete() ; LLViewerTexture::initClass() ; @@ -1240,7 +1242,7 @@ F32 LLViewerFetchedTexture::calcDecodePriority() { ddiscard+=2; } - else if (mGLTexturep.notNull() && !mGLTexturep->getBoundRecently() && mBoostLevel == 0) + else if (mGLTexturep.notNull() && !mGLTexturep->getBoundRecently() && mBoostLevel == LLViewerTexture::BOOST_NONE) { ddiscard-=2; } @@ -1252,11 +1254,11 @@ F32 LLViewerFetchedTexture::calcDecodePriority() pixel_priority = llclamp(pixel_priority, 0.0f, priority-1.f); // priority range = 100000-900000 if ( mBoostLevel > BOOST_HIGH) { - priority = 1000000.f + pixel_priority + 1000.f * mBoostLevel; + priority = 1000000.f + pixel_priority + 1000.f * (mBoostLevel - LLViewerTexture::BOOST_NONE); } else { - priority += 0.f + pixel_priority + 1000.f * mBoostLevel; + priority += 0.f + pixel_priority + 1000.f * (mBoostLevel - LLViewerTexture::BOOST_NONE); } } return priority; @@ -1436,7 +1438,7 @@ bool LLViewerFetchedTexture::updateFetch() } if (!mDontDiscard) { - if (mBoostLevel == 0) + if (mBoostLevel == LLViewerTexture::BOOST_NONE) { desired_discard = llmax(desired_discard, current_discard-1); } diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h index 020478beef..ff8f14e879 100644 --- a/indra/newview/llviewertexture.h +++ b/indra/newview/llviewertexture.h @@ -107,11 +107,12 @@ public: enum EBoostLevel { - BOOST_NONE = 0, - BOOST_AVATAR_BAKED = 1, - BOOST_AVATAR = 2, - BOOST_CLOUDS = 3, - BOOST_SCULPTED = 4, + //skip 0 and 1 to avoid mistakenly mixing boost level with boolean numbers. + BOOST_NONE = 2, + BOOST_AVATAR_BAKED = 3, + BOOST_AVATAR = 4, + BOOST_CLOUDS = 5, + BOOST_SCULPTED = 6, BOOST_HIGH = 10, BOOST_TERRAIN = 11, // has to be high priority for minimap / low detail @@ -601,7 +602,7 @@ public: static LLViewerFetchedTexture* getFetchedTexture(const LLUUID &image_id, BOOL usemipmap = TRUE, - BOOL level_immediate = FALSE, // Get the requested level immediately upon creation. + S32 boost_priority = LLViewerTexture::BOOST_NONE, // Get the requested level immediately upon creation. S8 texture_type = LLViewerTexture::FETCHED_TEXTURE, LLGLint internal_format = 0, LLGLenum primary_format = 0, @@ -610,7 +611,7 @@ public: static LLViewerFetchedTexture* getFetchedTextureFromFile(const std::string& filename, BOOL usemipmap = TRUE, - BOOL level_immediate = FALSE, // Get the requested level immediately upon creation. + S32 boost_priority = LLViewerTexture::BOOST_NONE, // Get the requested level immediately upon creation. S8 texture_type = LLViewerTexture::FETCHED_TEXTURE, LLGLint internal_format = 0, LLGLenum primary_format = 0, diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index b5986c70f5..d2be1ac9b5 100644 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -197,7 +197,7 @@ void LLViewerTextureList::doPrefetchImages() if(LLViewerTexture::FETCHED_TEXTURE == texture_type || LLViewerTexture::LOD_TEXTURE == texture_type) { - LLViewerFetchedTexture* image = LLViewerTextureManager::getFetchedTexture(uuid, MIPMAP_TRUE, FALSE, texture_type); + LLViewerFetchedTexture* image = LLViewerTextureManager::getFetchedTexture(uuid, MIPMAP_TRUE, LLViewerTexture::BOOST_NONE, texture_type); if (image) { image->addTextureStats((F32)pixel_area); @@ -325,14 +325,14 @@ LLViewerFetchedTexture* LLViewerTextureList::getImageFromFile(const std::string& { // Never mind that this ignores image_set_id; // getImage() will handle that later. - return LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, TRUE, TRUE); + return LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, TRUE, LLViewerTexture::BOOST_UI); } std::string full_path = gDirUtilp->findSkinnedFilename("textures", filename); if (full_path.empty()) { llwarns << "Failed to find local image file: " << filename << llendl; - return LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, TRUE, TRUE); + return LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, TRUE, LLViewerTexture::BOOST_UI); } // generate UUID based on hash of filename @@ -400,7 +400,7 @@ LLViewerFetchedTexture* LLViewerTextureList::getImage(const LLUUID &image_id, if ((&image_id == NULL) || image_id.isNull()) { - return (LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, TRUE, TRUE)); + return (LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, TRUE, LLViewerTexture::BOOST_UI)); } LLPointer<LLViewerFetchedTexture> imagep = findImage(image_id); @@ -1171,7 +1171,7 @@ void LLViewerTextureList::receiveImageHeader(LLMessageSystem *msg, void **user_d U8 *data = new U8[data_size]; msg->getBinaryDataFast(_PREHASH_ImageData, _PREHASH_Data, data, data_size); - LLViewerFetchedTexture *image = LLViewerTextureManager::getFetchedTexture(id, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE); + LLViewerFetchedTexture *image = LLViewerTextureManager::getFetchedTexture(id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE); if (!image) { delete [] data; @@ -1235,7 +1235,7 @@ void LLViewerTextureList::receiveImagePacket(LLMessageSystem *msg, void **user_d U8 *data = new U8[data_size]; msg->getBinaryDataFast(_PREHASH_ImageData, _PREHASH_Data, data, data_size); - LLViewerFetchedTexture *image = LLViewerTextureManager::getFetchedTexture(id, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE); + LLViewerFetchedTexture *image = LLViewerTextureManager::getFetchedTexture(id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE); if (!image) { delete [] data; diff --git a/indra/newview/llviewertexturelist.h b/indra/newview/llviewertexturelist.h index fda57ce981..6948db70f8 100644 --- a/indra/newview/llviewertexturelist.h +++ b/indra/newview/llviewertexturelist.h @@ -131,7 +131,7 @@ private: LLViewerFetchedTexture * getImage(const LLUUID &image_id, BOOL usemipmap = TRUE, - BOOL level_immediate = FALSE, // Get the requested level immediately upon creation. + S32 boost_priority = LLViewerTexture::BOOST_NONE, // Get the requested level immediately upon creation. S8 texture_type = LLViewerTexture::FETCHED_TEXTURE, LLGLint internal_format = 0, LLGLenum primary_format = 0, @@ -140,7 +140,7 @@ private: LLViewerFetchedTexture * getImageFromFile(const std::string& filename, BOOL usemipmap = TRUE, - BOOL level_immediate = FALSE, // Get the requested level immediately upon creation. + S32 boost_priority = LLViewerTexture::BOOST_NONE, // Get the requested level immediately upon creation. S8 texture_type = LLViewerTexture::FETCHED_TEXTURE, LLGLint internal_format = 0, LLGLenum primary_format = 0, @@ -149,7 +149,7 @@ private: LLViewerFetchedTexture* createImage(const LLUUID &image_id, BOOL usemipmap = TRUE, - BOOL level_immediate = FALSE, // Get the requested level immediately upon creation. + S32 boost_priority = LLViewerTexture::BOOST_NONE, // Get the requested level immediately upon creation. S8 texture_type = LLViewerTexture::FETCHED_TEXTURE, LLGLint internal_format = 0, LLGLenum primary_format = 0, @@ -159,7 +159,7 @@ private: // Request image from a specific host, used for baked avatar textures. // Implemented in header in case someone changes default params above. JC LLViewerFetchedTexture* getImageFromHost(const LLUUID& image_id, LLHost host) - { return getImage(image_id, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE, 0, 0, host); } + { return getImage(image_id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, host); } public: typedef std::set<LLPointer<LLViewerFetchedTexture> > image_list_t; diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 4bf66ba17e..240f87d104 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -6520,7 +6520,7 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys ) && baked_index != BAKED_SKIRT) { setTEImage(mBakedTextureDatas[baked_index].mTextureIndex, - LLViewerTextureManager::getFetchedTexture(mBakedTextureDatas[baked_index].mLastTextureIndex, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE)); + LLViewerTextureManager::getFetchedTexture(mBakedTextureDatas[baked_index].mLastTextureIndex, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE)); } } diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index e7a43924db..a964f43171 100644 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -41,22 +41,53 @@ #include "llvoavatarself.h" #include "llvoavatar.h" -#include "pipeline.h" +#include <stdio.h> +#include <ctype.h> + +#include "llaudioengine.h" +#include "noise.h" +// TODO: Seraph - Remove unnecessary headers. These are copied from llvoavatar.h. #include "llagent.h" // Get state values from here #include "llagentwearables.h" +#include "llviewercontrol.h" +#include "lldrawpoolavatar.h" +#include "lldriverparam.h" +#include "lleditingmotion.h" +#include "llemote.h" +#include "llface.h" +#include "llfirstuse.h" +#include "llheadrotmotion.h" #include "llhudeffecttrail.h" #include "llhudmanager.h" +#include "llkeyframefallmotion.h" +#include "llkeyframestandmotion.h" +#include "llkeyframewalkmotion.h" +#include "llmutelist.h" #include "llselectmgr.h" +#include "llsprite.h" +#include "lltargetingmotion.h" +#include "lltexlayer.h" +#include "lltexglobalcolor.h" #include "lltoolgrab.h" // for needsRenderBeam #include "lltoolmgr.h" // for needsRenderBeam #include "lltoolmorph.h" #include "lltrans.h" #include "llviewercamera.h" +#include "llviewertexturelist.h" #include "llviewermenu.h" #include "llviewerobjectlist.h" +#include "llviewerparcelmgr.h" #include "llviewerstats.h" -#include "llviewerregion.h" +#include "llvovolume.h" +#include "llworld.h" +#include "pipeline.h" +#include "llviewershadermgr.h" +#include "llsky.h" +#include "llanimstatelabels.h" +#include "llgesturemgr.h" //needed to trigger the voice gesticulations +#include "llvoiceclient.h" +#include "llvoicevisualizer.h" // Ventrella #include "llappearancemgr.h" #if LL_MSVC diff --git a/indra/newview/llvograss.cpp b/indra/newview/llvograss.cpp index 570a3334b9..110433a27d 100644 --- a/indra/newview/llvograss.cpp +++ b/indra/newview/llvograss.cpp @@ -106,7 +106,7 @@ void LLVOGrass::updateSpecies() SpeciesMap::const_iterator it = sSpeciesTable.begin(); mSpecies = (*it).first; } - setTEImage(0, LLViewerTextureManager::getFetchedTexture(sSpeciesTable[mSpecies]->mTextureID, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE)); + setTEImage(0, LLViewerTextureManager::getFetchedTexture(sSpeciesTable[mSpecies]->mTextureID, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE)); } diff --git a/indra/newview/llvosky.cpp b/indra/newview/llvosky.cpp index d44c543266..d37deaf53d 100644 --- a/indra/newview/llvosky.cpp +++ b/indra/newview/llvosky.cpp @@ -376,9 +376,9 @@ LLVOSky::LLVOSky(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp) mSun.setIntensity(SUN_INTENSITY); mMoon.setIntensity(0.1f * SUN_INTENSITY); - mSunTexturep = LLViewerTextureManager::getFetchedTexture(gSunTextureID, TRUE, TRUE); + mSunTexturep = LLViewerTextureManager::getFetchedTexture(gSunTextureID, TRUE, LLViewerTexture::BOOST_UI); mSunTexturep->setAddressMode(LLTexUnit::TAM_CLAMP); - mMoonTexturep = LLViewerTextureManager::getFetchedTexture(gMoonTextureID, TRUE, TRUE); + mMoonTexturep = LLViewerTextureManager::getFetchedTexture(gMoonTextureID, TRUE, LLViewerTexture::BOOST_UI); mMoonTexturep->setAddressMode(LLTexUnit::TAM_CLAMP); mBloomTexturep = LLViewerTextureManager::getFetchedTexture(IMG_BLOOM1); mBloomTexturep->setNoDelete() ; @@ -472,9 +472,9 @@ void LLVOSky::restoreGL() { mSkyTex[i].restoreGL(); } - mSunTexturep = LLViewerTextureManager::getFetchedTexture(gSunTextureID, TRUE, TRUE); + mSunTexturep = LLViewerTextureManager::getFetchedTexture(gSunTextureID, TRUE, LLViewerTexture::BOOST_UI); mSunTexturep->setAddressMode(LLTexUnit::TAM_CLAMP); - mMoonTexturep = LLViewerTextureManager::getFetchedTexture(gMoonTextureID, TRUE, TRUE); + mMoonTexturep = LLViewerTextureManager::getFetchedTexture(gMoonTextureID, TRUE, LLViewerTexture::BOOST_UI); mMoonTexturep->setAddressMode(LLTexUnit::TAM_CLAMP); mBloomTexturep = LLViewerTextureManager::getFetchedTexture(IMG_BLOOM1); mBloomTexturep->setNoDelete() ; diff --git a/indra/newview/llvotree.cpp b/indra/newview/llvotree.cpp index 615ae13bc2..ec118d89bc 100644 --- a/indra/newview/llvotree.cpp +++ b/indra/newview/llvotree.cpp @@ -311,7 +311,7 @@ U32 LLVOTree::processUpdateMessage(LLMessageSystem *mesgsys, // // Load Species-Specific data // - mTreeImagep = LLViewerTextureManager::getFetchedTexture(sSpeciesTable[mSpecies]->mTextureID, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE); + mTreeImagep = LLViewerTextureManager::getFetchedTexture(sSpeciesTable[mSpecies]->mTextureID, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE); mBranchLength = sSpeciesTable[mSpecies]->mBranchLength; mTrunkLength = sSpeciesTable[mSpecies]->mTrunkLength; mLeafScale = sSpeciesTable[mSpecies]->mLeafScale; diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 7d4bef3f7d..1d94e9118e 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -665,7 +665,7 @@ void LLVOVolume::updateTextures() { LLSculptParams *sculpt_params = (LLSculptParams *)getParameterEntry(LLNetworkData::PARAMS_SCULPT); LLUUID id = sculpt_params->getSculptTexture(); - mSculptTexture = LLViewerTextureManager::getFetchedTexture(id, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE); + mSculptTexture = LLViewerTextureManager::getFetchedTexture(id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE); if (mSculptTexture.notNull()) { S32 lod = llmin(mLOD, 3); @@ -876,7 +876,7 @@ BOOL LLVOVolume::setVolume(const LLVolumeParams &volume_params, const S32 detail if (isSculpted()) { - mSculptTexture = LLViewerTextureManager::getFetchedTexture(volume_params.getSculptID(), TRUE, FALSE, LLViewerTexture::LOD_TEXTURE); + mSculptTexture = LLViewerTextureManager::getFetchedTexture(volume_params.getSculptID(), TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE); if (mSculptTexture.notNull()) { //ignore sculpt GL usage since bao fixed this in a separate branch diff --git a/indra/newview/llwearable.cpp b/indra/newview/llwearable.cpp index e647f479e1..f2cf84c228 100644 --- a/indra/newview/llwearable.cpp +++ b/indra/newview/llwearable.cpp @@ -661,7 +661,7 @@ void LLWearable::writeToAvatar( BOOL set_by_user, BOOL update_customize_floater { image_id = LLVOAvatarDictionary::getDefaultTextureImageID((ETextureIndex) te); } - LLViewerTexture* image = LLViewerTextureManager::getFetchedTexture( image_id, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE ); + LLViewerTexture* image = LLViewerTextureManager::getFetchedTexture( image_id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE ); // MULTI-WEARABLE: replace hard-coded 0 avatar->setLocalTextureTE(te, image, set_by_user, 0); } @@ -1123,7 +1123,7 @@ void LLWearable::saveNewAsset() const { llinfos << "Update Agent Inventory via capability" << llendl; LLSD body; - body["folder_id"] = gInventory.findCategoryUUIDForType(LLFolderType::assetToFolderType(getAssetType())); + body["folder_id"] = gInventory.findCategoryUUIDForType(getAssetType()); body["asset_type"] = LLAssetType::lookup(getAssetType()); body["inventory_type"] = LLInventoryType::lookup(LLInventoryType::IT_WEARABLE); body["name"] = getName(); diff --git a/indra/newview/llworldmap.cpp b/indra/newview/llworldmap.cpp index f198f3a0cf..355d4141c3 100644 --- a/indra/newview/llworldmap.cpp +++ b/indra/newview/llworldmap.cpp @@ -525,7 +525,7 @@ void LLWorldMap::processMapLayerReply(LLMessageSystem* msg, void**) LLWorldMapLayer new_layer; new_layer.LayerDefined = TRUE; msg->getUUIDFast(_PREHASH_LayerData, _PREHASH_ImageID, new_layer.LayerImageID, block); - new_layer.LayerImage = LLViewerTextureManager::getFetchedTexture(new_layer.LayerImageID, MIPMAP_TRUE, FALSE, LLViewerTexture::LOD_TEXTURE); + new_layer.LayerImage = LLViewerTextureManager::getFetchedTexture(new_layer.LayerImageID, MIPMAP_TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE); gGL.getTexUnit(0)->bind(new_layer.LayerImage); new_layer.LayerImage->setAddressMode(LLTexUnit::TAM_CLAMP); @@ -640,14 +640,15 @@ void LLWorldMap::processMapBlockReply(LLMessageSystem* msg, void**) siminfo->mMapImageID[agent_flags] = image_id; #ifdef IMMEDIATE_IMAGE_LOAD - siminfo->mCurrentImage = LLViewerTextureManager::getFetchedTexture(siminfo->mMapImageID[LLWorldMap::getInstance()->mCurrentMap], MIPMAP_TRUE, FALSE, LLViewerTexture::LOD_TEXTURE); + siminfo->mCurrentImage = LLViewerTextureManager::getFetchedTexture(siminfo->mMapImageID[LLWorldMap::getInstance()->mCurrentMap], + MIPMAP_TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE); siminfo->mCurrentImage->setAddressMode(LLTexUnit::TAM_CLAMP); #endif if (siminfo->mMapImageID[2].notNull()) { #ifdef IMMEDIATE_IMAGE_LOAD - siminfo->mOverlayImage = LLViewerTextureManager::getFetchedTexture(siminfo->mMapImageID[2], MIPMAP_TRUE, FALSE, LLViewerTexture::LOD_TEXTURE); + siminfo->mOverlayImage = LLViewerTextureManager::getFetchedTexture(siminfo->mMapImageID[2], MIPMAP_TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE); #endif } else diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp index 823db027ee..920415873e 100644 --- a/indra/newview/llworldmapview.cpp +++ b/indra/newview/llworldmapview.cpp @@ -511,7 +511,8 @@ void LLWorldMapView::draw() (textures_requested_this_tick < MAX_REQUEST_PER_TICK))) { textures_requested_this_tick++; - info->mCurrentImage = LLViewerTextureManager::getFetchedTexture(info->mMapImageID[LLWorldMap::getInstance()->mCurrentMap], MIPMAP_TRUE, FALSE, LLViewerTexture::LOD_TEXTURE); + info->mCurrentImage = LLViewerTextureManager::getFetchedTexture(info->mMapImageID[LLWorldMap::getInstance()->mCurrentMap], + MIPMAP_TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE); info->mCurrentImage->setAddressMode(LLTexUnit::TAM_CLAMP); simimage = info->mCurrentImage; gGL.getTexUnit(0)->bind(simimage); @@ -524,7 +525,7 @@ void LLWorldMapView::draw() (textures_requested_this_tick < MAX_REQUEST_PER_TICK))) { textures_requested_this_tick++; - info->mOverlayImage = LLViewerTextureManager::getFetchedTexture(info->mMapImageID[2], MIPMAP_TRUE, FALSE, LLViewerTexture::LOD_TEXTURE); + info->mOverlayImage = LLViewerTextureManager::getFetchedTexture(info->mMapImageID[2], MIPMAP_TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE); info->mOverlayImage->setAddressMode(LLTexUnit::TAM_CLAMP); overlayimage = info->mOverlayImage; gGL.getTexUnit(0)->bind(overlayimage); diff --git a/indra/newview/skins/default/textures/inv_folder_inbox.tga b/indra/newview/skins/default/textures/inv_folder_inbox.tga Binary files differdeleted file mode 100644 index 04539c2cc4..0000000000 --- a/indra/newview/skins/default/textures/inv_folder_inbox.tga +++ /dev/null diff --git a/indra/newview/skins/default/xui/en/floater_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml index 88aca005cf..26d2f4e497 100644 --- a/indra/newview/skins/default/xui/en/floater_im_session.xml +++ b/indra/newview/skins/default/xui/en/floater_im_session.xml @@ -3,7 +3,7 @@ legacy_header_height="18" background_visible="true" follows="left|top|right|bottom" - height="359" + height="270" layout="topleft" left="0" name="panel_im" @@ -12,13 +12,13 @@ can_dock="true" can_minimize="true" visible="true" - width="400" + width="365" can_resize="true" min_width="200" min_height="150"> <layout_stack follows="left|top|right|bottom" - height="344" - width="400" + height="255" + width="365" layout="topleft" orientation="horizontal" name="im_panels" @@ -28,13 +28,13 @@ name="panel_im_control_panel" layout="topleft" top_delta="-3" - height="344" + width="146" + height="255" follows="left" label="IM Control Panel" - auto_resize="false" user_resize="false" /> - <layout_panel height="344" - width="235" + <layout_panel height="255" + width="200" left_delta="146" top="0" user_resize="false"> @@ -56,14 +56,14 @@ length="1" follows="left|top|right|bottom" font="SansSerif" - height="290" + height="205" layout="topleft" name="chat_history" parse_highlights="true" allow_html="true" - width="230"> + width="195"> </chat_history> - <line_editor follows="left|right" name="chat_editor" height="20" layout="topleft" width="225"> + <line_editor follows="left|right" name="chat_editor" height="20" layout="topleft" width="190"> </line_editor> </layout_panel> </layout_stack> diff --git a/indra/newview/skins/default/xui/en/inspect_avatar.xml b/indra/newview/skins/default/xui/en/inspect_avatar.xml index e2ae81e0b9..6b13e2f1c7 100644 --- a/indra/newview/skins/default/xui/en/inspect_avatar.xml +++ b/indra/newview/skins/default/xui/en/inspect_avatar.xml @@ -128,8 +128,6 @@ left_delta="110" tab_stop="false" width="18" /> - <!-- Overlapping buttons for default actions - llinspectavatar.cpp makes visible the most likely default action --> <button follows="bottom|left" height="23" @@ -138,16 +136,6 @@ top="246" name="add_friend_btn" width="100" /> - <button - follows="bottom|left" - height="23" - label="IM" - left_delta="0" - top_delta="0" - name="im_btn" - width="100" - commit_callback.function="InspectAvatar.IM" - /> <menu_button follows="top|left" height="18" diff --git a/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml index 8ee67b9a02..6049476a43 100644 --- a/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml +++ b/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml @@ -7,6 +7,7 @@ name="Gear Menu">
<menu_item_call
label="View Profile"
+ layout="topleft"
enabled="true"
name="view_profile">
<menu_item_call.on_click
@@ -14,42 +15,49 @@ </menu_item_call>
<menu_item_call
label="Add Friend"
+ layout="topleft"
name="add_friend">
<menu_item_call.on_click
function="InspectAvatar.AddFriend"/>
</menu_item_call>
<menu_item_call
label="IM"
+ layout="topleft"
name="im">
<menu_item_call.on_click
function="InspectAvatar.IM"/>
</menu_item_call>
<menu_item_call
label="Call"
+ layout="topleft"
enabled="true"
name="call">
</menu_item_call>
<menu_item_call
label="Teleport"
+ layout="topleft"
name="teleport">
<menu_item_call.on_click
function="InspectAvatar.Teleport"/>
</menu_item_call>
<menu_item_call
label="Invite to Group"
+ layout="topleft"
name="invite_to_group">
<menu_item_call.on_click
function="InspectAvatar.InviteToGroup"/>
</menu_item_call>
- <menu_item_separator />
+ <menu_item_separator layout="topleft" />
<menu_item_call
label="Block"
+ layout="topleft"
name="block">
<menu_item_call.on_click
function="InspectAvatar.Block"/>
</menu_item_call>
<menu_item_call
label="Report"
+ layout="topleft"
name="report">
<menu_item_call.on_click
function="InspectAvatar.Report"/>
@@ -80,6 +88,7 @@ </menu_item_call>
<menu_item_call
label="Find On Map"
+ layout="topleft"
name="find_on_map">
<menu_item_call.on_click
function="InspectAvatar.FindOnMap"/>
@@ -88,14 +97,16 @@ </menu_item_call>
<menu_item_call
label="Zoom In"
+ layout="topleft"
name="zoom_in">
<menu_item_call.on_click
function="InspectAvatar.ZoomIn"/>
</menu_item_call>
<menu_item_call
label="Pay"
+ layout="topleft"
name="pay">
<menu_item_call.on_click
function="InspectAvatar.Pay"/>
</menu_item_call>
-</menu>
+</menu>
\ No newline at end of file diff --git a/indra/newview/skins/default/xui/en/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/en/menu_inspect_self_gear.xml index ce5ee83f55..19c2bf3496 100644 --- a/indra/newview/skins/default/xui/en/menu_inspect_self_gear.xml +++ b/indra/newview/skins/default/xui/en/menu_inspect_self_gear.xml @@ -7,6 +7,7 @@ name="Gear Menu"> <menu_item_call label="Stand Up" + layout="topleft" enabled="true" name="stand_up"> <menu_item_call.on_click @@ -17,6 +18,7 @@ </menu_item_call> <menu_item_call label="My Appearance" + layout="topleft" name="my_appearance"> <menu_item_call.on_click function="ShowFloater" @@ -26,6 +28,7 @@ </menu_item_call> <menu_item_call label="My Profile" + layout="topleft" enabled="true" name="my_profile"> <menu_item_call.on_click @@ -34,6 +37,7 @@ </menu_item_call> <menu_item_call label="My Friends" + layout="topleft" name="my_friends"> <menu_item_call.on_click function="Self.Friends" @@ -41,8 +45,9 @@ </menu_item_call> <menu_item_call label="My Groups" + layout="topleft" name="my_groups"> <menu_item_call.on_click function="Self.Groups" /> </menu_item_call> -</menu> +</menu>
\ No newline at end of file diff --git a/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml index 87c4e2787f..f50acc224f 100644 --- a/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml +++ b/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel name="panel_im_control_panel" - width="180" + width="146" height="215" border="false"> <avatar_list @@ -16,11 +16,10 @@ show_info_btn="false" show_profile_btn="false" top="10" - width="180" /> + width="140" /> <button name="call_btn" label="Call" - left_delta="27" width="125" height="20" /> <button diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml index b5051523e5..61bd1d186e 100644 --- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml +++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml @@ -60,7 +60,7 @@ min_width="96" name="speak_panel" user_resize="false"> - <talk_button + <chiclet_talk follows="right" height="23" speak_button.tab_stop="true" @@ -93,7 +93,7 @@ min_width="76" name="gesture_panel" user_resize="false"> - <gesture_combo_box + <button follows="right" height="23" label="Gesture" diff --git a/indra/newview/skins/default/xui/en/panel_group_control_panel.xml b/indra/newview/skins/default/xui/en/panel_group_control_panel.xml index 3358015335..9ed510dff3 100644 --- a/indra/newview/skins/default/xui/en/panel_group_control_panel.xml +++ b/indra/newview/skins/default/xui/en/panel_group_control_panel.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel name="panel_im_control_panel" - width="180" + width="146" height="238" border="false"> <avatar_list @@ -16,11 +16,11 @@ show_info_btn="false" show_profile_btn="false" top="10" - width="180" /> + width="140" /> <button name="group_info_btn" label="Group Info" - left_delta="27" + left_delta="3" width="125" height="20" /> <button diff --git a/indra/newview/skins/default/xui/en/panel_group_general.xml b/indra/newview/skins/default/xui/en/panel_group_general.xml index 4f24c7a745..a85c55f9b2 100644 --- a/indra/newview/skins/default/xui/en/panel_group_general.xml +++ b/indra/newview/skins/default/xui/en/panel_group_general.xml @@ -1,14 +1,14 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel follows="all" - height="380" + height="412" label="General" class="panel_group_general" layout="topleft" left="0" top="0" name="general_tab" - width="303"> + width="313"> <panel.string name="help_text"> The General tab contains general information about this group, a list of members, general Group Preferences and member options. @@ -41,7 +41,7 @@ Hover your mouse over the options for more help. draw_heading="true" follows="left|top" heading_height="16" - height="130" + height="160" layout="topleft" left_delta="0" name="visible_members" 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 ab0f956da0..d8d47c4008 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 @@ -5,7 +5,7 @@ background_visible="true" height="570" label="Group Info" layout="topleft" - min_height="425" + min_height="350" left="0" top="20" name="GroupInfo" @@ -47,7 +47,7 @@ background_visible="true" text_color="white" top="0" value="(Loading...)" - use_ellipses="true" + use_elipsis="true" width="300" /> <line_editor follows="left|top" @@ -60,7 +60,7 @@ background_visible="true" top_delta="5" width="250" height="20" - visible="false" /> + visible="true" /> <texture_picker follows="left|top" height="113" @@ -112,46 +112,33 @@ background_visible="true" left_delta="0" top_pad="6" height="23" - label="JOIN NOW!" + label="Join now!" + label_selected="Join now!" name="btn_join" visible="true" width="120" /> <accordion follows="all" - height="425" + height="405" layout="topleft" left="0" - multiple_expansion="false" name="groups_accordion" - top_pad="15" - width="336"> + top_pad="20" + width="333"> <accordion_tab can_resize="false" - expanded="true" layout="topleft" name="tab_general" title="General"> - <scroll_container - color="DkGray2" - opaque="true" - height="323" - follows="all" + <panel + border="false" + filename="panel_group_general.xml" layout="topleft" left="0" + help_topic="group_general_tab" + name="general_tab" top="0" - name="general_scroll" - reserve_scroll_corner="false" - width="333"> - <panel - border="false" - filename="panel_group_general.xml" - layout="topleft" - left="0" - help_topic="group_general_tab" - name="general_tab" - top="0" - width="303" /> - </scroll_container> + width="333" /> </accordion_tab> <accordion_tab can_resize="false" @@ -159,27 +146,15 @@ background_visible="true" layout="topleft" name="tab_roles" title="Roles"> - <scroll_container - color="DkGray2" - opaque="true" - height="323" - follows="all" - layout="topleft" - left="0" - top="0" - name="roles_scroll" - reserve_scroll_corner="false" - width="333"> - <panel - border="false" - filename="panel_group_roles.xml" - layout="topleft" - left="0" - help_topic="group_roles_tab" - name="roles_tab" - top="0" - width="303" /> - </scroll_container> + <panel + border="false" + filename="panel_group_roles.xml" + layout="topleft" + left="0" + help_topic="group_roles_tab" + name="roles_tab" + top="0" + width="333" /> </accordion_tab> <accordion_tab can_resize="false" @@ -187,45 +162,21 @@ background_visible="true" layout="topleft" name="tab_notices" title="Notices"> - <scroll_container - color="DkGray2" - opaque="true" - height="323" - follows="all" - layout="topleft" - left="0" - top="0" - name="notices_scroll" - reserve_scroll_corner="false" - width="333"> <panel - border="false" filename="panel_group_notices.xml" layout="topleft" left="0" help_topic="group_notices_tab" name="notices_tab" top="0" - width="303" /> - </scroll_container> + width="333" /> </accordion_tab> - <accordion_tab + <accordion_tab can_resize="false" expanded="false" layout="topleft" name="tab_notices" title="Land/Assets"> - <scroll_container - color="DkGray2" - opaque="true" - height="323" - follows="all" - layout="topleft" - left="0" - top="0" - name="land_scroll" - reserve_scroll_corner="false" - width="333"> <panel border="false" filename="panel_group_land_money.xml" @@ -234,43 +185,41 @@ background_visible="true" help_topic="group_land_money_tab" name="land_money_tab" top="0" - width="313" /> - </scroll_container> + width="333" /> </accordion_tab> </accordion> - <button + <button follows="top|left" - height="22" + height="20" image_overlay="Refresh_Off" layout="topleft" - left="5" name="btn_refresh" picture_style="true" - top_pad="-15" - width="23" /> - <button + left="5" + width="20" /> + <button + height="20" + font="SansSerifSmall" + label="Save" + label_selected="Save" + name="btn_apply" + left_pad="5" + width="65" /> + <button height="20" label="Create" - label_selected="New group" + label_selected="Create" name="btn_create" - left_pad="10" + left_pad="5" visible="false" - width="100" /> - <!-- <button - left_pad="10" + width="65" /> + <button + left_pad="5" height="20" label="Cancel" label_selected="Cancel" name="btn_cancel" visible="false" - width="65" />--> - <button - height="20" - font="SansSerifSmall" - label="Save" - label_selected="Save" - name="btn_apply" - left_pad="10" - right="-10" width="65" /> + </panel>
\ No newline at end of file diff --git a/indra/newview/skins/default/xui/en/panel_group_land_money.xml b/indra/newview/skins/default/xui/en/panel_group_land_money.xml index 99fc39c466..c81c7113ae 100644 --- a/indra/newview/skins/default/xui/en/panel_group_land_money.xml +++ b/indra/newview/skins/default/xui/en/panel_group_land_money.xml @@ -1,25 +1,25 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel - border="false" + border="true" follows="all" height="510" label="Land & L$" layout="topleft" left="1" name="land_money_tab" - top="0" - width="313"> + top="490" + width="280"> <panel.string name="help_text"> - Parcels owned by a group are listed along with contribution details. A warning appears until the Total Land in Use is less than or = to the Total Contribution. + Parcels owned by the group are listed along with contribution details. A warning appears until the Total Land in Use is less than or equal to the Total Contribution. The Planning, Details, and Sales tabs provide information about the group's finances. </panel.string> <panel.string name="cant_view_group_land_text"> - You don't have permission to view group owned land + You do not have permission to view group owned land. </panel.string> <panel.string name="cant_view_group_accounting_text"> - You don't have permission to view the group's accounting information. + You do not have permission to view the group's accounting information. </panel.string> <panel.string name="loading_txt"> @@ -27,7 +27,7 @@ </panel.string> <panel.string name="land_contrib_error"> - Unable to set your land contribution + Unable to set your land contribution. </panel.string> <!-- <text type="string" @@ -44,29 +44,29 @@ <scroll_list draw_heading="true" follows="top" - heading_height="20" - height="150" + heading_height="14" + height="100" layout="topleft" - left="0" + left="5" name="group_parcel_list" - top_pad="0" - width="313"> + top_pad="10" + width="265"> <scroll_list.columns label="Parcel" name="name" - width="78" /> + width="67" /> <scroll_list.columns label="Region" name="location" - width="78" /> + width="72" /> <scroll_list.columns label="Type" name="type" - width="70" /> + width="60" /> <scroll_list.columns label="Area" name="area" - width="50" /> + width="20" /> <scroll_list.columns label="" name="hidden" @@ -74,14 +74,14 @@ </scroll_list> <button follows="top" - height="23" + height="20" label="Map" label_selected="Map" layout="topleft" + left="150" name="map_button" - right="-10" - top_pad="5" - width="95" + top_pad="10" + width="125" enabled="false" /> <text type="string" @@ -91,12 +91,11 @@ layout="topleft" left="5" name="total_contributed_land_label" - top_pad="0" + top_pad="10" width="130"> Total Contribution: </text> <text - text_color="EmphasisColor" type="string" follows="left|top" height="16" @@ -120,7 +119,6 @@ Total Land In Use: </text> <text - text_color="EmphasisColor" type="string" follows="left|top" height="16" @@ -144,7 +142,6 @@ Land Available: </text> <text - text_color="EmphasisColor" type="string" follows="left|top" height="16" @@ -171,19 +168,19 @@ border_style="line" border_thickness="1" follows="left|top" - height="19" + height="16" layout="topleft" left_pad="5" max_length="10" name="your_contribution_line_editor" - top_delta="0" + top_delta="-2" width="95" /> <text type="string" follows="left|top" height="16" layout="topleft" - left_pad="3" + left_pad="5" name="your_contribution_units" top_delta="2"> m² @@ -196,13 +193,13 @@ layout="topleft" left="140" name="your_contribution_max_value" - top_pad="2" + top_pad="0" width="95"> ([AMOUNT] max) </text> <icon height="16" - image_name="notify_next" + image_name="smicon_warn.tga" layout="topleft" left="9" name="group_over_limit_icon" @@ -214,14 +211,14 @@ type="string" word_wrap="true" font="SansSerifSmall" - height="35" + height="40" layout="topleft" - left_pad="0" + left_pad="5" name="group_over_limit_text" - text_color="EmphasisColor" + text_color="GroupOverTierColor" top_delta="0" - width="290"> - Group members must contribute more land credits to support land in use + width="250"> + Group members must contribute more land credits to support land in use. </text> <text type="string" @@ -245,126 +242,128 @@ name="group_money_tab_container" tab_position="top" tab_height="20" - top_pad="2" - tab_min_width="70" - width="300"> + top_pad="10" + width="265"> <panel - border="false" + border="true" follows="all" height="180" - label="PLANNING" + label="Planning" layout="topleft" - left="0" + left="1" help_topic="group_money_planning_tab" name="group_money_planning_tab" top="5" - width="300"> + width="265"> <text_editor type="string" + bg_readonly_color="0.784314 0.819608 0.8 1" follows="all" - font="SansSerif" - height="140" + font="Monospace" + height="168" layout="topleft" - left="0" + left="8" max_length="4096" name="group_money_planning_text" - top="0" - width="300" + top="5" + width="250" word_wrap="true"> - Loading... + Computing... </text_editor> </panel> <panel - border="false" - follows="all" + border="true" + follows="left|top|right|bottom" height="180" - label="DETAILS" + label="Details" layout="topleft" - left="0" + left_delta="0" help_topic="group_money_details_tab" name="group_money_details_tab" - top="5" - width="300"> + top_delta="0" + width="265"> <text_editor type="string" + bg_readonly_color="0.784314 0.819608 0.8 1" follows="all" + font="Monospace" height="140" layout="topleft" - left="0" + left="8" max_length="4096" name="group_money_details_text" - top="0" - width="300" + top="7" + width="250" word_wrap="true"> - Loading... + Computing... </text_editor> + <button + height="20" + label="< Earlier" + label_selected="< Earlier" + layout="topleft" + left="5" + name="earlier_details_button" + tool_tip="Go back in time" + top_pad="10" + width="125" /> <button - follows="left|top" - height="23" - image_overlay="Arrow_Left_Off" - layout="topleft" - name="earlier_details_button" - picture_style="true" - tool_tip="Back" - top_pad="3" - right="-35" - width="31" /> - <button - follows="left|top" - height="23" - image_overlay="Arrow_Right_Off" - layout="topleft" - left_pad="10" + height="20" + label="Later >" + label_selected="Later >" + layout="topleft" + left_pad="5" name="later_details_button" - picture_style="true" - tool_tip="Next" - width="31" /> + tool_tip="Go forward in time" + top_delta="0" + width="125" /> </panel> <panel - border="false" - follows="all" + border="true" + follows="left|top|right|bottom" height="180" - label="SALES" + label="Sales" layout="topleft" left_delta="0" help_topic="group_money_sales_tab" name="group_money_sales_tab" top_delta="-1" - width="300"> + width="265"> <text_editor type="string" + bg_readonly_color="0.784314 0.819608 0.8 1" follows="all" + font="Monospace" height="140" layout="topleft" - left="0" + left="8" max_length="4096" name="group_money_sales_text" - top="0" - width="300" + top="7" + width="250" word_wrap="true"> - Loading... + Computing... </text_editor> - <button - follows="left|top" - height="23" - image_overlay="Arrow_Left_Off" - layout="topleft" - name="earlier_sales_button" - picture_style="true" - tool_tip="Back" - top_pad="3" - right="-35" - width="31" /> - <button - follows="left|top" - height="23" - image_overlay="Arrow_Right_Off" - layout="topleft" - left_pad="10" + <button + height="20" + label="< Earlier" + label_selected="< Earlier" + layout="topleft" + left="5" + name="earlier_sales_button" + tool_tip="Go back in time" + top_pad="10" + width="125" /> + <button + height="20" + label="Later >" + label_selected="Later >" + layout="topleft" + left_pad="5" name="later_sales_button" - picture_style="true" - tool_tip="Next" - width="31" /> + tool_tip="Go forward in time" + top_delta="0" + width="125" /> </panel> </tab_container> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_group_notices.xml b/indra/newview/skins/default/xui/en/panel_group_notices.xml index bfb49a60c2..0e4d490369 100644 --- a/indra/newview/skins/default/xui/en/panel_group_notices.xml +++ b/indra/newview/skins/default/xui/en/panel_group_notices.xml @@ -1,13 +1,14 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel + border="true" follows="all" height="485" label="Notices" layout="topleft" - left="0" + left="1" name="notices_tab" - top="0" - width="313"> + top="485" + width="280"> <panel.string name="help_text"> Notices are a quick way to communicate across a @@ -19,48 +20,60 @@ the General tab. </panel.string> <panel.string name="no_notices_text"> - There are no past notices + There are no past notices. </panel.string> + <!--<text + follows="left|top" + type="string" + font="SansSerifBig" + height="16" + layout="topleft" + left="10" + name="lbl" + top_pad="10" + width="269"> + Group Notices Archive + </text> --> <text follows="left|top" type="string" word_wrap="true" - height="30" + height="40" layout="topleft" - left="10" + left_delta="10" name="lbl2" - top="5" - width="300"> - Notices are kept for 14 days -Groups are limited to 200 notices/group daily + text_color="EmphasisColor" + top_pad="10" + width="270"> + Notices are kept for 14 days. Notice lists are limited to 200 notices per group on a daily basis. </text> <scroll_list follows="left|top" column_padding="0" draw_heading="true" - heading_height="16" - height="125" + heading_height="14" + height="109" layout="topleft" - left="0" + left_delta="0" name="notice_list" top_pad="0" - width="303"> + width="265"> <scroll_list.columns label="" name="icon" - width="20" /> + width="16" /> <scroll_list.columns label="Subject" name="subject" - width="125" /> + width="100" /> <scroll_list.columns label="From" name="from" - width="90" /> + width="83" /> <scroll_list.columns label="Date" name="date" - width="30" /> + width="50" /> <scroll_list.columns name="sort" width="-1" /> @@ -71,42 +84,39 @@ Groups are limited to 200 notices/group daily layout="topleft" name="notice_list_none_found" visible="false"> - None found + None found. </text> - <button - follows="bottom|left" - height="18" - image_selected="AddItem_Press" - image_unselected="AddItem_Off" - image_disabled="AddItem_Disabled" - layout="topleft" - label="Create a new notice" - left="15" - name="create_new_notice" - picture_style="true" - tool_tip="Create a new notice" - top_delta="-5" - width="18" /> - <button - follows="top|left" - height="22" - image_overlay="Refresh_Off" + <button + follows="left|top" + height="20" + font="SansSerifSmall" + label="New Notice" + label_selected="Create New Notice" + layout="topleft" + left_delta="0" + name="create_new_notice" + top_delta="4" + width="125" /> + <button + follows="left|top" + height="20" + font="SansSerifSmall" + label="Refresh" + label_selected="Refresh List" layout="topleft" + left_pad="12" name="refresh_notices" - picture_style="true" - right="-5" - top_delta="5" - width="23" /> + top_delta="0" + width="125" /> <panel follows="left|top" - height="300" + height="268" label="Create New Notice" layout="topleft" left="0" - top_pad="10" - visible="false" name="panel_create_new_notice" - width="303"> + top_pad="10" + width="265"> <text follows="left|top" type="string" @@ -117,16 +127,30 @@ Groups are limited to 200 notices/group daily mouse_opaque="false" name="lbl" text_color="EmphasisColor" - top="0" - width="200"> + top_pad="0" + width="265"> Create a Notice </text> <text follows="left|top" type="string" + word_wrap="true" + height="90" + layout="topleft" + left_delta="0" + name="lbl2" + text_color="EmphasisColor" + top_pad="4" + width="195"> + You can add a single item to a notice by dragging it from your inventory to this panel. Attached items must be copiable and transferrable, and you can't send a folder. + </text> + <text + follows="left|top" + type="string" halign="left" height="16" layout="topleft" + left_delta="0" name="lbl3" top_pad="10" width="60"> @@ -140,7 +164,8 @@ Groups are limited to 200 notices/group daily left_pad="3" max_length="63" name="create_subject" - width="220" /> + top_delta="-1" + width="200" /> <text follows="left|top" type="string" @@ -149,100 +174,106 @@ Groups are limited to 200 notices/group daily layout="topleft" left="10" name="lbl4" - top_pad="5" + top_pad="10" width="60"> Message: </text> <text_editor - height="90" + height="75" layout="topleft" left_pad="3" max_length="511" name="create_message" top_delta="0" - width="220" + width="200" word_wrap="true" /> <text follows="left|top" type="string" halign="left" - height="14" + height="16" layout="topleft" left="10" name="lbl5" - width="200"> + top_pad="10" + width="60"> Attach: </text> <line_editor enabled="false" - height="19" + height="16" layout="topleft" - max_length="90" + left_pad="3" + max_length="63" mouse_opaque="false" name="create_inventory_name" - top_pad="2" - width="285" /> - <text - text_color="EmphasisColor" - follows="left|top" - type="string" - halign="right" - height="34" - layout="topleft" - left="10" - name="string" - top_pad="15" - word_wrap="true" - width="150"> - Drag here to attach something -- > - </text> + top_delta="0" + width="200" /> <icon - height="72" - image_name="DropTarget" + height="16" layout="topleft" - left_pad="10" - mouse_opaque="true" - name="drop_icon" - top_delta="-10" - width="72" /> + left_delta="0" + name="create_inv_icon" + top_delta="0" + width="16" /> <button follows="left|top" - height="23" - label="Remove" + height="20" + font="SansSerifSmall" + label="Remove Attachment" + label_selected="Remove Attachment" layout="topleft" - left="70" + left="10" name="remove_attachment" - top_delta="45" - width="90" /> + top_pad="10" + width="135" /> <button follows="left|top" - height="23" + height="20" + font="SansSerifSmall" label="Send" label_selected="Send Notice" layout="topleft" - right="-10" - top_pad="20" + left_delta="138" name="send_notice" - width="100" /> - <group_drop_target + top_delta="0" + width="125" /> + <panel + bevel_style="in" + border="true" + height="71" + layout="topleft" + left="200" + name="drop_target2" + top="20" + width="71" /> + <icon + height="59" + image_name="icon_groupnoticeinventory.tga" + layout="topleft" + left_delta="6" + mouse_opaque="true" + name="drop_icon" + top="26" + width="59" /> + <group_drop_target height="466" - top="0" - left="0" layout="topleft" + left="0" name="drop_target" tool_tip="Drag an inventory item onto the message box to send it with the notice. You must have permission to copy and transfer the object to send it with the notice." - width="295" /> + top="-198" + width="280" /> </panel> <panel follows="left|top" - height="300" + height="268" label="View Past Notice" layout="topleft" left="0" - visible="true" name="panel_view_past_notice" - top="180" - width="303"> + top="197" + width="265"> <text type="string" font="SansSerifBig" @@ -263,9 +294,9 @@ Groups are limited to 200 notices/group daily layout="topleft" left_delta="0" name="lbl2" - top_pad="2" + top_pad="4" width="265"> - To send a new notice, click the + button + To send a new notice, click the 'New Notice' button above. </text> <text type="string" @@ -274,7 +305,7 @@ Groups are limited to 200 notices/group daily layout="topleft" left_delta="0" name="lbl3" - top_pad="15" + top_pad="24" visible="false" width="60"> Subject: @@ -305,13 +336,13 @@ Groups are limited to 200 notices/group daily </text> <text_editor enabled="false" - height="205" + height="150" layout="topleft" left="10" max_length="511" name="view_message" top_delta="-35" - width="285" + width="260" word_wrap="true" /> <line_editor enabled="false" @@ -322,7 +353,7 @@ Groups are limited to 200 notices/group daily mouse_opaque="false" name="view_inventory_name" top_pad="10" - width="285" /> + width="260" /> <icon height="16" layout="topleft" @@ -332,12 +363,14 @@ Groups are limited to 200 notices/group daily width="16" /> <button follows="left|top" - height="23" - label="Open attachment" + height="20" + font="SansSerifSmall" + label="Open Attachment" + label_selected="Open Attachment" layout="topleft" - right="-10" + left_delta="0" name="open_attachment" - top_pad="5" + top_pad="10" width="135" /> </panel> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_group_roles.xml b/indra/newview/skins/default/xui/en/panel_group_roles.xml index 5ed464bcec..e87859f788 100644 --- a/indra/newview/skins/default/xui/en/panel_group_roles.xml +++ b/indra/newview/skins/default/xui/en/panel_group_roles.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel border="false" - height="552" + height="412" label="Members & Roles" layout="topleft" left="0" @@ -18,28 +18,158 @@ </panel.string> <panel.string name="help_text" /> + <!--<panel + follows="left|top" + height="80" + layout="topleft" + left="10" + name="members_header" + top_pad="10" + width="270"> + <text + type="string" + font="SansSerifBig" + height="16" + layout="topleft" + left="0" + name="static" + top="0" + width="270"> + Members & Roles + </text> + <text + type="string" + word_wrap="true" + height="40" + layout="topleft" + left_delta="0" + name="static2" + top_pad="4" + width="270"> + Group Members are assigned Roles with Abilities. These settings can easily be customized, allowing for greater organization and flexibility. + </text> + </panel> + <panel + follows="left|top" + height="24" + layout="topleft" + left_delta="0" + name="roles_header" + top_delta="0" + visible="false" + width="270"> + <text + type="string" + font="SansSerifBig" + height="16" + layout="topleft" + left="0" + name="static" + top="0" + width="270"> + Roles + </text> + <text + type="string" + word_wrap="true" + height="40" + layout="topleft" + left_delta="0" + name="role_properties_modifiable" + top_pad="4" + visible="false" + width="270"> + Select a Role below. You can modify its Name, Description and Member Title. + </text> + <text + type="string" + word_wrap="true" + height="40" + layout="topleft" + left_delta="0" + name="role_properties_not_modifiable" + top_delta="0" + width="270"> + Select a Role below to see its properties, Members and allowed Abilities. + </text> + <text + type="string" + word_wrap="true" + height="16" + layout="topleft" + left_delta="0" + name="role_actions_modifiable" + top_delta="24" + visible="false" + width="270"> + You can also assign Abilities to the Role. + </text> + <text + type="string" + word_wrap="true" + height="16" + layout="topleft" + left_delta="0" + name="role_actions_not_modifiable" + top_delta="0" + width="270"> + You may view, but not modify, assigned Abilities. + </text> + </panel> + <panel + follows="left|top" + height="24" + layout="topleft" + left_delta="0" + name="actions_header" + top_delta="0" + visible="false" + width="270"> + <text + type="string" + font="SansSerifBig" + height="16" + layout="topleft" + left="0" + name="static" + top="0" + width="270"> + Abilities + </text> + <text + type="string" + word_wrap="true" + height="40" + layout="topleft" + left_delta="0" + name="static2" + top_pad="4" + width="270"> + You can view an Ability's Description and which Roles and Members can execute the Ability. + </text> + </panel> --> <tab_container - border="false" + border="true" follows="left|top" - height="245" + height="260" halign="center" layout="topleft" left="5" name="roles_tab_container" tab_position="top" tab_height="20" - tab_min_width="96" - top="3" + top="0" width="303"> <panel border="false" - height="220" - label="MEMBERS" + height="260" + label="Members" layout="topleft" - left="0" + left="1" help_topic="roles_members_tab" name="members_sub_tab" tool_tip="Members" + top="17" class="panel_group_members_subtab" width="300"> <panel.string @@ -57,7 +187,8 @@ clicking on their names. follows="left|top|right" max_length="250" label="Filter Members" - name="filter_input" /> + name="filter_input" + font="SansSerif" /> <!-- <button enabled="false" font="SansSerifSmall" @@ -98,7 +229,6 @@ clicking on their names. font="SansSerifSmall" label="Invite" layout="topleft" - left="5" name="member_invite" top_pad="3" width="100" /> @@ -108,10 +238,8 @@ clicking on their names. label="Eject" layout="topleft" left_pad="5" - right="-5" name="member_eject" width="100" /> - <!--What is this?--> <icon height="16" image_name="Inv_FolderClosed" @@ -122,14 +250,15 @@ clicking on their names. </panel> <panel border="false" - height="220" - label="ROLES" + height="164" + label="Roles" layout="topleft" - left="0" + left_delta="0" help_topic="roles_roles_tab" name="roles_sub_tab" class="panel_group_roles_subtab" - width="300"> + top="17" + width="265"> <panel.string name="help_text"> Roles have a title and an allowed list of Abilities @@ -153,19 +282,40 @@ including the Everyone and Owner Roles. name="power_partial_icon"> checkbox_enabled_false.tga </panel.string> - <filter_editor - layout="topleft" - top="10" - left="4" - width="280" - height="20" - follows="left|top|right" - max_length="250" - label="Filter Roles" - name="filter_input" /> - <!-- + <filter_editor + layout="topleft" + top="10" + left="4" + width="260" + height="20" + follows="left|top|right" + max_length="250" + label="Filter Roles" + name="filter_input" + font="SansSerif" /> + <!--<line_editor + border_style="line" + border_thickness="1" + follows="left|top" + height="16" + layout="topleft" + left="4" + max_length="63" + name="search_text" + top="10" + width="90" /> + <button + font="SansSerifSmall" + height="20" + label="Search" + layout="topleft" + left_pad="5" + name="search_button" + top_delta="-2" + width="80" /> <button enabled="false" + font="SansSerifSmall" height="20" label="Show All" layout="topleft" @@ -176,13 +326,11 @@ including the Everyone and Owner Roles. <scroll_list column_padding="0" draw_heading="true" - draw_stripes="false" follows="left|top" heading_height="20" height="150" layout="topleft" - search_column="1" - left="0" + left="4" name="role_list" top_pad="4" width="300"> @@ -204,7 +352,7 @@ including the Everyone and Owner Roles. font="SansSerifSmall" label="Add Role" layout="topleft" - left="5" + left_delta="0" name="role_create" top_pad="6" width="125" /> @@ -214,20 +362,20 @@ including the Everyone and Owner Roles. label="Delete Role" layout="topleft" left_pad="5" - right="-5" name="role_delete" top_delta="0" width="125" /> </panel> <panel border="false" - height="220" - label="ABILITIES" + height="164" + label="Abilities" layout="topleft" - left="0" + left_delta="0" help_topic="roles_actions_tab" name="actions_sub_tab" class="panel_group_actions_subtab" + top="17" tool_tip="You can view an Ability's Description and which Roles and Members can execute the Ability." width="300"> <panel.string @@ -235,17 +383,37 @@ including the Everyone and Owner Roles. Abilities allow Members in Roles to do specific things in this group. There's a broad variety of Abilities. </panel.string> - <filter_editor - layout="topleft" - top="10" - left="4" - width="280" - height="20" - follows="left|top|right" - max_length="250" - label="Filter Abilities" - name="filter_input" /> - <!-- + <filter_editor + layout="topleft" + top="10" + left="4" + width="255" + height="20" + follows="left|top|right" + max_length="250" + label="Filter Abilities" + name="filter_input" + font="SansSerif" /> + <!--<line_editor + border_style="line" + border_thickness="1" + follows="left|top" + height="16" + layout="topleft" + left="4" + max_length="63" + name="search_text" + top="10" + width="90" /> + <button + font="SansSerifSmall" + height="20" + label="Search" + layout="topleft" + left_pad="5" + name="search_button" + top_delta="-2" + width="80" /> <button enabled="false" font="SansSerifSmall" @@ -260,19 +428,19 @@ things in this group. There's a broad variety of Abilities. column_padding="0" draw_stripes="false" follows="left|top" - height="160" + height="100" layout="topleft" - left="0" + left="6" multi_select="true" name="action_list" search_column="1" tool_tip="Select an Ability to view more details" top_pad="6" - width="300"> + width="255"> <scroll_list.columns label="" name="icon" - width="16" /> + width="18" /> <scroll_list.columns label="" name="action" @@ -280,7 +448,7 @@ things in this group. There's a broad variety of Abilities. </scroll_list> <icon height="16" - image_name="Inv_FolderClosed" + image_name="inv_folder_plain_closed.tga" layout="topleft" name="power_folder_icon" visible="false" @@ -288,93 +456,105 @@ things in this group. There's a broad variety of Abilities. </panel> </tab_container> <panel - height="252" + height="150" layout="topleft" follows="left|top" left="10" name="members_footer" - top_pad="10" - top_delta="0" + top_pad="2" width="300"> <text type="string" + font="SansSerif" height="16" layout="topleft" follows="left|top" left="0" name="static" - top_pad="5" - width="295"> + top_pad="0" + width="100"> Assigned Roles </text> + <text + type="string" + font="SansSerif" + height="16" + layout="topleft" + follows="left|top" + left_pad="35" + name="static2" + top_delta="0" + width="100"> + Allowed Abilities + </text> <scroll_list draw_stripes="false" follows="left|top" - height="80" + height="150" layout="topleft" left="0" name="member_assigned_roles" - top_pad="0" - width="295"> + top_pad="5" + width="130"> <scroll_list.columns label="" name="checkbox" - width="30" /> + width="18" /> <scroll_list.columns label="" name="role" - width="265" /> + width="107" /> </scroll_list> - <text - type="string" - height="16" - layout="topleft" - follows="left|top" - left="0" - name="static2" - top_pad="5" - width="295"> - Allowed Abilities - </text> - <scroll_list + <scroll_list draw_stripes="false" - height="80" + height="150" layout="topleft" - left="0" + follows="left|top" + left_pad="5" name="member_allowed_actions" - search_column="2" tool_tip="For details of each allowed ability see the abilities tab" - top_pad="0" - width="295"> + top_delta="0" + width="130"> <scroll_list.columns label="" name="icon" - width="20" /> + width="14" /> <scroll_list.columns label="" name="action" - width="275" /> + width="126" /> </scroll_list> </panel> <panel - height="297" + height="252" layout="topleft" - left="10" + left_delta="0" name="roles_footer" top_delta="0" - top="245" visible="false" - width="300"> + width="270"> <text type="string" + font="SansSerif" height="16" layout="topleft" left="0" name="static" top="0" - width="140"> + width="100"> Name </text> + <text + type="string" + font="SansSerif" + height="16" + layout="topleft" + left_pad="35" + name="static2" + top_delta="0" + width="100"> + Description + </text> <line_editor type="string" border_style="line" @@ -383,19 +563,21 @@ things in this group. There's a broad variety of Abilities. height="20" layout="topleft" left="0" - max_length="295" + max_length="20" name="role_name" top_pad="0" - width="295"> + width="130"> Employees </line_editor> <text type="string" + font="SansSerif" height="16" layout="topleft" + left_delta="0" name="static3" - top_pad="5" - width="295"> + top_pad="10" + width="100"> Title </text> <line_editor @@ -405,159 +587,158 @@ things in this group. There's a broad variety of Abilities. follows="left|top" height="20" layout="topleft" - max_length="295" + left_delta="0" + max_length="20" name="role_title" top_pad="0" - width="295"> - (waiting) + width="130"> + (waiting) </line_editor> - <text - type="string" - height="16" - layout="topleft" - left="0" - name="static2" - top_pad="5" - width="100"> - Description - </text> <text_editor type="string" halign="left" - height="35" + height="48" layout="topleft" - left="0" - max_length="295" + left="135" + max_length="254" name="role_description" - top_pad="0" - width="295" + top="16" + width="130" word_wrap="true"> - (waiting) + (waiting) </text_editor> <text type="string" + font="SansSerif" height="16" layout="topleft" - follows="left|top" left="0" - name="static" - top_pad="5" - width="295"> - Assigned Roles + name="static4" + top="85" + width="120"> + Assigned Members + </text> + <text + type="string" + font="SansSerif" + height="16" + layout="topleft" + left_pad="15" + name="static5" + tool_tip="A list of abilities the currently selected role can perform" + top_delta="0" + width="100"> + Allowed Abilities </text> <name_list draw_stripes="false" - height="50" + height="150" layout="topleft" left="0" name="role_assigned_members" top_pad="0" - width="295" /> + width="130" /> <check_box - height="15" - label="Reveal members" + height="16" + label="Members are visible" layout="topleft" + left_delta="0" name="role_visible_in_list" tool_tip="Sets whether members of this role are visible in the General tab to people outside of the group." - top_pad="3" - width="290" /> - <text - type="string" - height="16" - layout="topleft" - follows="left|top" - left="0" - name="static2" - top_pad="5" - width="295"> - Allowed Abilities - </text> + top_pad="10" + width="130" /> <scroll_list draw_stripes="false" - height="50" + height="150" layout="topleft" - left="0" + left="135" name="role_allowed_actions" search_column="2" tool_tip="For details of each allowed ability see the abilities tab" - top_pad="0" - width="295"> + top="101" + width="130"> <scroll_list.columns label="" name="icon" - width="20" /> + width="2" /> <scroll_list.columns label="" name="checkbox" - width="20" /> + width="16" /> <scroll_list.columns label="" name="action" - width="250" /> + width="220" /> </scroll_list> </panel> <panel - height="303" + height="215" layout="topleft" - left="10" + left_delta="0" name="actions_footer" top_delta="0" - top="245" visible="false" - width="300"> + width="265"> <text type="string" + font="SansSerif" height="16" layout="topleft" + left="0" name="static" + top="0" width="200"> - Ability description + Description </text> <text_editor type="string" enabled="false" halign="left" - height="80" + height="48" layout="topleft" left_delta="0" max_length="512" name="action_description" top_pad="0" - width="295" + width="265" word_wrap="true"> This Ability is 'Eject Members from this Group'. Only an Owner can eject another Owner. </text_editor> <text type="string" + font="SansSerif" height="16" layout="topleft" left_delta="0" name="static2" - top_pad="5" - width="295"> - Roles with this ability + top_pad="10" + width="125"> + Roles with Ability </text> - <scroll_list - height="60" - layout="topleft" - left="0" - name="action_roles" - top_pad="0" - width="295" /> - <text + <text type="string" + font="SansSerif" height="16" layout="topleft" + left_pad="10" name="static3" - top_pad="5" - width="295"> - Members with this ability + top_delta="0" + width="125"> + Members with Ability </text> + <scroll_list + height="150" + layout="topleft" + left="0" + name="action_roles" + top="90" + width="130" /> <name_list - height="100" + height="150" layout="topleft" + left_pad="5" name="action_members" - top_pad="0" - width="295" /> + top_delta="0" + width="130" /> </panel> </panel> 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 0dd3878426..c4cdaa41f9 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 @@ -1,35 +1,30 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel name="panel_im_control_panel" - width="128" - height="327" + width="125" + height="248" border="false"> <avatar_icon name="avatar_icon" - follows="left|top" - left_delta="3" - width="125" - height="125" /> + width="96" + height="96" /> <button name="view_profile_btn" - follows="left|bottom" label="View Profile" + left_delta="3" width="125" height="20" /> <button name="add_friend_btn" - follows="left|bottom" label="Add Friend" width="125" height="20" /> <button name="call_btn" - follows="left|bottom" label="Call" width="125" height="20" /> <button - follows="left|bottom" height="20" label="End Call" name="end_call_btn" @@ -38,27 +33,15 @@ <button enabled="false" - follows="left|bottom" name="voice_ctrls_btn" label="Open Voice Controls" width="125" height="20" visible="false"/> - <button name="teleport_btn" - follows="left|bottom" - label="Teleport" - width="125" - height="20" /> <button name="share_btn" - follows="left|bottom" label="Share" width="125" height="20" /> - <button name="pay_btn" - follows="left|bottom" - label="Pay" - width="125" - height="20" /> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_landmark_info.xml b/indra/newview/skins/default/xui/en/panel_landmark_info.xml deleted file mode 100644 index 03ba7f7c81..0000000000 --- a/indra/newview/skins/default/xui/en/panel_landmark_info.xml +++ /dev/null @@ -1,257 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel - background_visible="true" - follows="all" - height="570" - layout="topleft" - left="0" - min_height="350" - name="landmark_info" - top="20" - width="330"> - <string - name="title_create_landmark" - value="Create Landmark" /> - <string - name="title_edit_landmark" - value="Edit Landmark" /> - <string - name="title_landmark" - value="Landmark" /> - <string - name="not_available" - value="(N\A)" /> - <string - name="unknown" - value="(unknown)" /> - <string - name="public" - value="(public)" /> - <string - name="server_update_text"> - Place information not available without server update. - </string> - <string - name="server_error_text"> - Information about this location is unavailable at this time, please try again later. - </string> - <string - name="server_forbidden_text"> - Information about this location is unavailable due to access restrictions. Please check your permissions with the parcel owner. - </string> - <string - name="acquired_date"> - [wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local] - </string> - <button - follows="top|right" - height="23" - image_overlay="BackArrow_Off" - layout="topleft" - left="10" - name="back_btn" - picture_style="true" - tab_stop="false" - top="0" - width="23" /> - <text - follows="top|left|right" - font="SansSerifHugeBold" - height="26" - layout="topleft" - left_pad="10" - name="title" - text_color="white" - top="0" - use_ellipses="true" - value="Place Profile" - width="275" /> - <scroll_container - color="DkGray2" - follows="all" - height="533" - layout="topleft" - left="10" - name="place_scroll" - opaque="true" - top_pad="5" - width="313"> - <panel - bg_alpha_color="DkGray2" - follows="all" - height="533" - layout="topleft" - left="0" - min_height="300" - name="scrolling_panel" - top="0" - width="313"> - <texture_picker - enabled="false" - follows="top|left" - height="190" - layout="topleft" - left="10" - name="logo" - top="10" - width="290" /> - <text - follows="left|top|right" - font="SansSerifLarge" - height="14" - layout="topleft" - left="10" - name="region_title" - text_color="white" - top_pad="5" - use_ellipses="true" - value="SampleRegion" - width="290" /> - <text - follows="left|top|right" - height="14" - layout="topleft" - left="10" - name="parcel_title" - top_pad="4" - use_ellipses="true" - value="SampleParcel, Name Long (145, 228, 26)" - width="285" /> - <expandable_text - follows="left|top|right" - height="50" - layout="topleft" - left="5" - name="description" - top_pad="10" - value="Du waltz die spritz" - width="300" /> - <panel - follows="left|top|right" - height="55" - layout="topleft" - left="10" - name="landmark_info_panel" - top_pad="10" - width="290"> - <text - follows="left|top" - height="15" - layout="topleft" - left="0" - name="owner_label" - top_pad="10" - value="Owner:" - width="90" /> - <text - follows="left|top|right" - height="15" - layout="topleft" - left="70" - name="owner" - top_delta="0" - width="200" /> - <text - follows="left|top" - height="15" - layout="topleft" - left="0" - name="creator_label" - value="Creator:" - width="90" /> - <text - follows="left|top|right" - height="15" - layout="topleft" - left="70" - name="creator" - top_delta="0" - width="200" /> - <text - follows="left|top" - height="15" - layout="topleft" - left="0" - name="created_label" - value="Created:" - width="50" /> - <text - follows="left|top|right" - height="15" - layout="topleft" - left="70" - name="created" - top_delta="0" - width="200" /> - </panel> - <panel - follows="left|top|right" - height="210" - layout="topleft" - left="10" - name="landmark_edit_panel" - width="290"> - <text - follows="left|top" - height="15" - layout="topleft" - left="0" - name="title_label" - top_pad="10" - value="Title:" - width="290" /> - <line_editor - background_image_disabled="task_panel_background.png" - follows="left|top|right" - height="22" - layout="topleft" - left="0" - max_length="63" - name="title_editor" - prevalidate_callback="ascii" - text_readonly_color="white" - top_pad="5" - width="290" /> - <text - follows="left|top" - height="15" - layout="topleft" - left="0" - name="notes_label" - top_pad="10" - value="My notes:" - width="290" /> - <text_editor - bg_readonly_color="DkGray2" - follows="all" - height="70" - layout="topleft" - left="0" - max_length="127" - name="notes_editor" - read_only="true" - text_readonly_color="white" - top_pad="5" - width="290" - wrap="true" /> - <text - follows="left|top" - height="15" - layout="topleft" - left="0" - name="folder_label" - top_pad="15" - value="Landmark location:" - width="290" /> - <combo_box - follows="bottom|left|right" - height="20" - layout="topleft" - left="0" - name="folder_combo" - top_pad="5" - width="200" /> - </panel> - </panel> - </scroll_container> -</panel> diff --git a/indra/newview/skins/default/xui/en/panel_landmarks.xml b/indra/newview/skins/default/xui/en/panel_landmarks.xml index 91fcf4b5f2..5293043ba7 100644 --- a/indra/newview/skins/default/xui/en/panel_landmarks.xml +++ b/indra/newview/skins/default/xui/en/panel_landmarks.xml @@ -31,7 +31,7 @@ left="0" mouse_opaque="true" name="favorites_list" - start_folder="Favorite" + start_folder="favorite" width="380"/> </accordion_tab> <accordion_tab @@ -47,7 +47,7 @@ left="0" mouse_opaque="true" name="landmarks_list" - start_folder="Landmarks" + start_folder="landmark" width="380"/> </accordion_tab> <accordion_tab @@ -63,13 +63,13 @@ left="0" mouse_opaque="true" name="my_inventory_list" - start_folder="INVENTORY" + start_folder="inventory" width="380"/> - </accordion_tab> - <accordion_tab - layout="topleft" - name="tab_library" - title="Library"> + </accordion_tab> + <accordion_tab + layout="topleft" + name="tab_library" + title="Library"> <inventory_subtree_panel allow_multi_select="true" border="true" @@ -79,7 +79,7 @@ left="0" mouse_opaque="true" name="library_list" - start_folder="LIBRARY" + start_folder="library" width="380"/> </accordion_tab> </accordion> diff --git a/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml index 555fedb1ff..2182163da5 100644 --- a/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml @@ -42,17 +42,13 @@ width="20" /> <button follows="right" - is_toggle="true" width="45" top="0" layout="topleft" left_pad="8" label="Log" height="23" - name="show_nearby_chat" tool_tip="Show/hide nearby chat log"> - <button.init_callback - function="Button.SetDockableFloaterToggle" - parameter="nearby_chat" /> + <button.commit_callback function="Floater.Toggle" parameter="nearby_chat"/> </button> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_pick_info.xml b/indra/newview/skins/default/xui/en/panel_pick_info.xml index 3cc9c3f38a..a67ae59b4a 100644 --- a/indra/newview/skins/default/xui/en/panel_pick_info.xml +++ b/indra/newview/skins/default/xui/en/panel_pick_info.xml @@ -30,7 +30,7 @@ text_color="white" top="0" value="Pick Info" - use_ellipses="true" + use_elipsis="true" width="275" /> <scroll_container color="DkGray2" diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml deleted file mode 100644 index 7e073f064d..0000000000 --- a/indra/newview/skins/default/xui/en/panel_place_profile.xml +++ /dev/null @@ -1,979 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel - background_visible="true" - follows="all" - height="570" - layout="topleft" - left="0" - min_height="350" - name="place_profile" - top="20" - width="330"> - <string - name="on" - value="On" /> - <string - name="off" - value="Off" /> - <string - name="anyone" - value="Anyone" /> - <string - name="available" - value="available" /> - <string - name="allocated" - value="allocated" /> - <string - name="title_place" - value="Place Profile" /> - <string - name="title_teleport_history" - value="Teleport History Location" /> - <string - name="not_available" - value="(N\A)" /> - <string - name="unknown" - value="(unknown)" /> - <string - name="public" - value="(public)" /> - <string - name="none_text" - value="(none)" /> - <string - name="sale_pending_text" - value="(Sale Pending)" /> - <string - name="group_owned_text" - value="(Group Owned)" /> - <string - name="price_text" - value="L$" /> - <string - name="area_text" - value="m²" /> - <string - name="all_residents_text" - value="All Residents" /> - <string - name="group_text" - value="Group" /> - <string - name="can_resell"> - Purchased land in this region may be resold. - </string> - <string - name="can_not_resell"> - Purchased land in this region may not be resold. - </string> - <string - name="can_change"> - Purchased land in this region may be joined or subdivided. - </string> - <string - name="can_not_change"> - Purchased land in this region may not be joined or subdivided. - </string> - <string - name="server_update_text"> - Place information not available without server update. - </string> - <string - name="server_error_text"> - Information about this location is unavailable at this time, please try again later. - </string> - <string - name="server_forbidden_text"> - Information about this location is unavailable due to access restrictions. Please check your permissions with the parcel owner. - </string> - <string - name="acquired_date"> - [wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local] - </string> - <button - follows="top|right" - height="23" - image_overlay="BackArrow_Off" - layout="topleft" - left="10" - name="back_btn" - picture_style="true" - tab_stop="false" - top="0" - width="23" /> - <text - follows="top|left|right" - font="SansSerifHugeBold" - height="26" - layout="topleft" - left_pad="10" - name="title" - text_color="white" - top="0" - use_ellipses="true" - value="Place Profile" - width="275" /> - <scroll_container - color="DkGray2" - follows="all" - height="533" - layout="topleft" - left="10" - name="place_scroll" - opaque="true" - top_pad="5" - width="313"> - <panel - bg_alpha_color="DkGray2" - follows="all" - height="533" - layout="topleft" - left="0" - min_height="300" - name="scrolling_panel" - top="0" - value=">" - width="313"> - <texture_picker - enabled="false" - follows="top|left" - height="190" - layout="topleft" - left="10" - name="logo" - top="10" - width="290" /> - <layout_stack - border_size="0" - clip="false" - follows="all" - height="50" - layout="topleft" - mouse_opaque="false" - name="panel_stack" - orientation="horizontal" - top_pad="-65" - width="100"> - <layout_panel - follows="left|right" - height="50" - layout="topleft" - left="0" - min_height="50" - min_width="50" - mouse_opaque="false" - name="here_panel" - top="0" - user_resize="false" - width="60"> - <icon - follows="top|left" - height="50" - image_name="YouAreHere_Badge" - layout="topleft" - left="0" - name="icon_you_are_here" - top="0" - width="50" /> - </layout_panel> - <layout_panel - follows="left|right" - height="60" - layout="topleft" - min_height="50" - min_width="60" - mouse_opaque="false" - name="for_sale_panel" - top="0" - user_resize="false" - width="60"> - <icon - follows="top|left" - height="50" - image_name="ForSale_Badge" - layout="topleft" - left="10" - name="icon_for_sale" - top="0" - width="50" /> - </layout_panel> - </layout_stack> - <text - follows="left|top|right" - font="SansSerifLarge" - height="14" - layout="topleft" - left="10" - name="region_title" - text_color="white" - top_pad="5" - use_ellipses="true" - value="SampleRegion" - width="290" /> - <!-- <icon - follows="top|right" - height="16" - image_name="Icon_For_Sale" - layout="topleft" - left="3" - mouse_opaque="true" - name="icon_for_sale" - width="16" />--> - <text - follows="left|top|right" - height="14" - layout="topleft" - left="10" - name="parcel_title" - top_pad="4" - use_ellipses="true" - value="SampleParcel, Name Long (145, 228, 26)" - width="285" /> - <expandable_text - follows="left|top|right" - height="50" - layout="topleft" - left="5" - name="description" - top_pad="10" - value="Du waltz die spritz" - width="300" /> - <text - follows="left|top" - height="14" - layout="topleft" - left="10" - name="owner_label" - text_color="White" - top_pad="0" - value="Owner:" - width="90" /> - <!--TODO: HOOK THIS NAME UP WITH AN INSPECTOR --> - <text - follows="left|top|right" - height="14" - layout="topleft" - left_pad="1" - name="owner_value" - top_delta="0" - value="Alex Superduperlongenamenton" - width="205" /> - <accordion - follows="all" - height="230" - layout="topleft" - left="0" - name="advanced_info_accordion" - top_pad="10" - width="313"> - <accordion_tab - layout="topleft" - name="parcel_characteristics_tab" - title="Parcel"> - <scroll_container - color="DkGray2" - follows="all" - height="132" - layout="topleft" - left="0" - name="parcel_scroll" - opaque="true" - top="0" - width="290"> - <panel - follows="all" - height="165" - layout="topleft" - left="0" - top="0" - width="275"> - <icon - follows="top|left" - height="16" - image_name="parcel_drk_M" - layout="topleft" - left="20" - name="icon_M" - top="0" - width="18" /> - <icon - follows="top|left" - height="16" - image_name="parcel_drk_R" - layout="topleft" - left="20" - name="icon_R" - top="0" - width="18" /> - <icon - follows="top|left" - height="16" - image_name="parcel_drk_PG" - layout="topleft" - left="20" - name="icon_PG" - top="0" - visible="false" - width="18" /> - <text - follows="left|top" - height="16" - layout="topleft" - left_pad="8" - name="rating_label" - value="Rating:" - width="80" /> - <text - follows="right|top" - height="16" - layout="topleft" - left_pad="0" - name="rating_value" - top_delta="0" - value="Mature" - width="120" /> - <icon - follows="top|left" - height="18" - image_name="parcel_drk_Voice" - layout="topleft" - left="20" - name="icon_Voice" - top_pad="5" - width="22" /> - <icon - follows="top|left" - height="18" - image_name="parcel_drk_VoiceNo" - layout="topleft" - left="20" - name="icon_VoiceNo" - top_delta="0" - visible="false" - width="22" /> - <text - follows="left|top" - height="18" - layout="topleft" - left_pad="8" - name="voice_label" - top_delta="0" - value="Voice:" - width="76" /> - <text - follows="right|top" - height="18" - layout="topleft" - left_pad="0" - name="voice_value" - top_delta="0" - value="On" - width="60" /> - <icon - follows="top|left" - height="18" - image_name="parcel_drk_Fly" - layout="topleft" - left="20" - name="icon_Fly" - top_pad="3" - width="22" /> - <icon - follows="top|left" - height="18" - image_name="parcel_drk_FlyNo" - layout="topleft" - left="20" - name="icon_FlyNo" - top_delta="0" - visible="false" - width="22" /> - <text - follows="left|top" - height="16" - layout="topleft" - left_pad="8" - name="fly_label" - value="Fly:" - width="76" /> - <text - follows="right|top" - height="16" - layout="topleft" - left_pad="0" - name="fly_value" - top_delta="0" - value="On" - width="60" /> - <icon - follows="top|left" - height="18" - image_name="parcel_drk_Push" - layout="topleft" - left="20" - name="icon_Push" - top_pad="3" - visible="false" - width="22" /> - <icon - follows="top|left" - height="18" - image_name="parcel_drk_PushNo" - layout="topleft" - left="20" - name="icon_PushNo" - top_delta="0" - width="22" /> - <text - follows="left|top" - height="14" - layout="topleft" - left_pad="8" - name="push_label" - value="Push:" - width="76" /> - <text - follows="right|top" - height="14" - layout="topleft" - left_pad="0" - name="push_value" - top_delta="0" - value="Off" - width="60" /> - <icon - follows="top|left" - height="18" - image_name="parcel_drk_Build" - layout="topleft" - left="20" - name="icon_Build" - top_pad="3" - width="22" /> - <icon - follows="top|left" - height="18" - image_name="parcel_drk_BuildNo" - layout="topleft" - left="20" - name="icon_BuildNo" - top_delta="0" - visible="false" /> - <text - follows="left|top" - height="14" - layout="topleft" - left_pad="8" - name="build_label" - value="Build:" - width="76" /> - <text - follows="right|top" - height="15" - layout="topleft" - left_pad="0" - name="build_value" - top_delta="0" - value="On" - width="60" /> - <icon - follows="top|left" - height="18" - image_name="parcel_drk_Scripts" - layout="topleft" - left="20" - name="icon_Scripts" - top_pad="3" - width="22" /> - <icon - follows="top|left" - height="18" - image_name="parcel_drk_ScriptsNo" - layout="topleft" - left="20" - name="icon_ScriptsNo" - top_delta="0" - visible="false" /> - <text - follows="left|top" - height="14" - layout="topleft" - left_pad="8" - name="scripts_label" - value="Scripts:" - width="76" /> - <text - follows="right|top" - height="14" - layout="topleft" - left_pad="0" - name="scripts_value" - top_delta="0" - value="On" - width="60" /> - <icon - follows="top|left" - height="18" - image_name="parcel_drk_Damage" - layout="topleft" - left="20" - name="icon_Damage" - top_pad="7" - visible="false" - width="22" /> - <icon - follows="top|left" - height="18" - image_name="parcel_drk_DamageNo" - layout="topleft" - left="20" - name="icon_DamageNo" - top_delta="0" /> - <text - follows="left|top" - height="14" - layout="topleft" - left_pad="8" - name="damage_label" - value="Damage:" - width="76" /> - <text - follows="right|top" - height="14" - layout="topleft" - left_pad="0" - name="damage_value" - top_delta="0" - value="Off" - width="60" /> - <button - follows="bottom|right" - height="19" - label="About Land" - layout="topleft" - name="about_land_btn" - right="-5" - tab_stop="false" - top="138" - width="90"> - <click_callback - function="ShowFloater" - parameter="about_land" /> - </button> - </panel> - </scroll_container> - </accordion_tab> - <accordion_tab - expanded="false" - layout="topleft" - name="region_information_tab" - title="Region"> - <panel - follows="all" - height="125" - layout="topleft" - left="0" - top="0" - width="290"> - <text - follows="left|top" - height="15" - layout="topleft" - left="10" - name="region_name_label" - top_pad="5" - value="Region:" - width="80" /> - <text - follows="left|top|right" - height="15" - layout="topleft" - left_pad="0" - name="region_name" - top_delta="0" - value="Mooseland" - width="195" /> - <text - follows="left|top" - height="15" - layout="topleft" - left="10" - name="region_type_label" - top_pad="5" - value="Type:" - width="80" /> - <text - follows="left|top|right" - height="15" - layout="topleft" - left_pad="0" - name="region_type" - top_delta="0" - value="Moose" - width="195" /> - <text - follows="left|top" - height="15" - layout="topleft" - left="10" - name="region_rating_label" - top_pad="7" - value="Rating:" - width="80" /> - <icon - follows="top|left" - height="16" - image_name="parcel_drk_M" - layout="topleft" - left_pad="0" - name="icon_M" - width="18" /> - <icon - follows="top|left" - height="16" - image_name="parcel_drk_R" - layout="topleft" - left_delta="0" - name="icon_R" - top_delta="0" - visible="false" - width="18" /> - <icon - follows="top|left" - height="16" - image_name="parcel_drk_PG" - layout="topleft" - left_delta="0" - name="icon_PG" - top_delta="0" - visible="false" - width="18" /> - <text - follows="left|top|right" - height="15" - layout="topleft" - left_pad="10" - name="region_rating" - value="Explicit" - width="100" /> - <text - follows="left|top" - height="15" - layout="topleft" - left="10" - name="region_owner_label" - top_pad="5" - value="Owner:" - width="80" /> - <text - follows="left|top|right" - height="15" - layout="topleft" - left_pad="0" - name="region_owner" - top_delta="0" - value="moose Van Moose" - width="195" /> - <text - follows="left|top" - height="15" - layout="topleft" - left="10" - name="region_group_label" - top_pad="5" - value="Group:" - width="80" /> - <text - follows="left|top|right" - height="15" - layout="topleft" - left_pad="0" - name="region_group" - top_delta="0" - use_ellipses="true" - width="195"> - The Mighty Moose of mooseville soundvillemoose - </text> - <button - follows="bottom|right" - height="19" - label="Region/Estate" - layout="topleft" - name="region_info_btn" - right="-5" - tab_stop="false" - width="105"> - <click_callback - function="ShowFloater" - parameter="region_info" /> - </button> - </panel> - </accordion_tab> - <accordion_tab - expanded="false" - layout="topleft" - name="estate_information_tab" - title="Estate"> - <panel - follows="all" - height="189" - layout="topleft" - left="0" - top="0" - width="290"> - <text - follows="left|top" - height="15" - layout="topleft" - left="10" - name="estate_name_label" - top_pad="5" - value="Estate:" - width="80" /> - <text - follows="left|top|right" - height="15" - layout="topleft" - left="90" - name="estate_name" - top_delta="0" - width="160" /> - <text - follows="left|top" - height="15" - layout="topleft" - left="10" - name="estate_rating_label" - top_pad="5" - value="Rating:" - width="80" /> - <text - follows="left|top|right" - height="15" - layout="topleft" - left="90" - name="estate_rating" - top_delta="0" - width="160" /> - <text - follows="left|top" - height="15" - layout="topleft" - left="10" - name="estate_owner_label" - top_pad="5" - value="Owner:" - width="80" /> - <text - follows="left|top|right" - height="15" - layout="topleft" - left="90" - name="estate_owner" - top_delta="0" - width="160" /> - <text - follows="left|top" - height="15" - layout="topleft" - left="10" - name="covenant_label" - top_pad="5" - value="Covenant:" - width="220" /> - <text_editor - bg_focus_color="DkGray2" - bg_readonly_color="DkGray2" - follows="left|top|right" - handle_edit_keys_directly="true" - height="90" - layout="topleft" - left="10" - max_length="65535" - name="covenant" - read_only="true" - top_pad="0" - width="280" /> - </panel> - </accordion_tab> - <accordion_tab - expanded="false" - layout="topleft" - name="sales_tab" - title="For Sale"> - <panel - follows="all" - height="300" - layout="topleft" - left="0" - top="0" - width="290"> - <text - follows="left|top" - height="15" - layout="topleft" - left="10" - name="sales_price_label" - top_pad="5" - value="Price:" - width="100" /> - <text - follows="left|top|right" - height="15" - layout="topleft" - left="110" - name="sales_price" - top_delta="0" - width="140" /> - <text - follows="left|top" - height="15" - layout="topleft" - left="10" - name="area_label" - top_pad="5" - value="Area:" - width="100" /> - <text - follows="left|top|right" - height="15" - layout="topleft" - left="110" - name="area" - top_delta="0" - width="140" /> - <text - follows="left|top" - height="15" - layout="topleft" - left="10" - name="traffic_label" - top_pad="5" - value="Traffic:" - width="100" /> - <text - follows="left|top|right" - height="15" - layout="topleft" - left="110" - name="traffic" - top_delta="0" - width="140" /> - <text - follows="left|top" - height="15" - layout="topleft" - left="10" - name="primitives_label" - top_pad="5" - value="Primitives:" - width="100" /> - <text - follows="left|top|right" - height="15" - layout="topleft" - left="110" - name="primitives" - top_delta="0" - width="140" /> - <text - follows="left|top" - height="15" - layout="topleft" - left="10" - name="parcel_scripts_label" - top_pad="5" - value="Scripts:" - width="100" /> - <text - follows="left|top|right" - height="15" - layout="topleft" - left="110" - name="parcel_scripts" - top_delta="0" - width="140" /> - <text - follows="left|top" - height="15" - layout="topleft" - left="10" - name="terraform_limits_label" - top_pad="5" - value="Terraform limits:" - width="100" /> - <text - follows="left|top|right" - height="15" - layout="topleft" - left="110" - name="terraform_limits" - top_delta="0" - width="140" /> - <text - follows="left|top" - height="15" - layout="topleft" - left="10" - name="subdivide_label" - top_pad="5" - value="Subdivide/Join ability:" - width="220" /> - <text_editor - bg_focus_color="DkGray2" - bg_readonly_color="DkGray2" - follows="left|top|right" - height="45" - layout="topleft" - left="10" - max_length="65535" - name="subdivide" - read_only="true" - top_pad="5" - width="245" /> - <text - follows="left|top" - height="15" - layout="topleft" - left="10" - name="resale_label" - top_pad="5" - value="ReSale ability:" - width="80" /> - <text_editor - bg_focus_color="DkGray2" - bg_readonly_color="DkGray2" - follows="left|top|right" - height="45" - layout="topleft" - left="10" - max_length="65535" - name="resale" - read_only="true" - top_pad="5" - width="245" /> - <text - follows="left|top" - height="15" - layout="topleft" - left="10" - name="sale_to_label" - top_pad="5" - value="For sale to:" - width="80" /> - <text - follows="left|top|right" - height="15" - layout="topleft" - left="90" - name="sale_to" - top_delta="0" - width="160" /> - </panel> - </accordion_tab> - </accordion> - </panel> - </scroll_container> -</panel> diff --git a/indra/newview/skins/default/xui/en/panel_places.xml b/indra/newview/skins/default/xui/en/panel_places.xml index 87ac5be74a..5aa53ab46b 100644 --- a/indra/newview/skins/default/xui/en/panel_places.xml +++ b/indra/newview/skins/default/xui/en/panel_places.xml @@ -40,26 +40,14 @@ background_visible="true" top_pad="10" width="313" /> <panel - class="panel_place_profile" - filename="panel_place_profile.xml" + class="panel_place_info" + filename="panel_place_info.xml" follows="all" height="533" layout="topleft" left="0" help_topic="places_info_tab" - name="panel_place_profile" - top="5" - visible="false" - width="313" /> - <panel - class="panel_landmark_info" - filename="panel_landmark_info.xml" - follows="all" - height="533" - layout="topleft" - left="0" - help_topic="places_info_tab" - name="panel_landmark_info" + name="panel_place_info" top="5" visible="false" width="313" /> diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml index c3a92f9d9a..5af7d7d674 100644 --- a/indra/newview/skins/default/xui/en/panel_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_profile.xml @@ -157,7 +157,7 @@ value="http://librarianavengers.org" width="280" word_wrap="false" - use_ellipses="true" + use_elipsis="true" /> <text follows="left|top" diff --git a/indra/newview/skins/default/xui/en/panel_profile_view.xml b/indra/newview/skins/default/xui/en/panel_profile_view.xml index 4b2e901718..195b731531 100644 --- a/indra/newview/skins/default/xui/en/panel_profile_view.xml +++ b/indra/newview/skins/default/xui/en/panel_profile_view.xml @@ -36,7 +36,7 @@ text_color="white" top="0" value="(Loading...)" - use_ellipses="true" + use_elipsis="true" width="275" /> <text follows="top|left" diff --git a/indra/newview/skins/default/xui/en/widgets/gesture_combo_box.xml b/indra/newview/skins/default/xui/en/widgets/gesture_combo_box.xml index 6171be034f..ab4ad94089 100644 --- a/indra/newview/skins/default/xui/en/widgets/gesture_combo_box.xml +++ b/indra/newview/skins/default/xui/en/widgets/gesture_combo_box.xml @@ -15,14 +15,14 @@ image_disabled_selected="ComboButton_Disabled_Selected" /> <gesture_combo_box.drop_down_button name="Drop Down Button" label="" - halign="center" hover_glow_amount="0.15" font="SansSerif" scale_image="true" - image_unselected="PushButton_Off" - image_selected="PushButton_Selected" - image_disabled="PushButton_Disabled" - image_disabled_selected="PushButton_Selected_Disabled" /> + pad_right="24" + image_unselected="DropDown_Off" + image_selected="DropDown_Selected" + image_disabled="DropDown_Disabled" + image_disabled_selected="DropDown_Disabled_Selected" /> <gesture_combo_box.combo_list bg_writeable_color="MenuDefaultBgColor" scroll_bar_bg_visible="true" /> <gesture_combo_box.combo_editor name="Combo Text Entry" diff --git a/indra/newview/skins/default/xui/en/widgets/talk_button.xml b/indra/newview/skins/default/xui/en/widgets/talk_button.xml deleted file mode 100644 index 725492052c..0000000000 --- a/indra/newview/skins/default/xui/en/widgets/talk_button.xml +++ /dev/null @@ -1,37 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<!-- Derives from LLUICtrl --> -<talk_button> - <!-- To make speak button look green when selected set: - image_selected="SegmentedBtn_Left_Selected" - image_unselected="SegmentedBtn_Left_Off" - --> - <speak_button - name="left" - label="Speak" - label_selected="Speak" - font="SansSerifSmall" - tab_stop="false" - is_toggle="true" - picture_style="true" - /> - <show_button - name="right" - label="" - left="0" - top="0" - right="20" - bottom="0" - tab_stop="false" - is_toggle="true" - picture_style="true" - image_selected="ComboButton_Selected" - image_unselected="ComboButton_Off" - /> - <monitor - name="monitor" - left="0" - top="18" - right="18" - bottom="0" - /> -</talk_button> |