Inventory Updates and Clean Up

Better viewed without space changes
Adds translatable inventory strings
This commit is contained in:
Lirusaito
2013-03-29 03:25:03 -04:00
parent e44ba343a6
commit 126eeb9244
8 changed files with 420 additions and 390 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -74,7 +74,6 @@ BOOL LLInventoryModel::sFirstTimeInViewer2 = TRUE;
///----------------------------------------------------------------------------
//BOOL decompress_file(const char* src_filename, const char* dst_filename);
const char CACHE_FORMAT_STRING[] = "%s.inv";
struct InventoryIDPtrLess
@@ -531,8 +530,8 @@ private:
LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id,
LLFolderType::EType preferred_type,
const std::string& pname,
void (*callback)(const LLSD&, void*)/*=NULL*/,
void* user_data/*=NULL*/)
void (*callback)(const LLSD&, void*), //Default to NULL
void* user_data) //Default to NULL
{
LLUUID id;
if(!isInventoryUsable())
@@ -1100,9 +1099,6 @@ void LLInventoryModel::changeItemParent(LLViewerInventoryItem* item,
const LLUUID& new_parent_id,
BOOL restamp)
{
// <edit>
bool send_parent_update = gInventory.isObjectDescendentOf(item->getUUID(), gInventory.getRootFolderID());
// </edit>
if (item->getParentUUID() == new_parent_id)
{
LL_DEBUGS("Inventory") << "'" << item->getName() << "' (" << item->getUUID()
@@ -1123,7 +1119,7 @@ void LLInventoryModel::changeItemParent(LLViewerInventoryItem* item,
LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
new_item->setParent(new_parent_id);
// <edit>
if(send_parent_update)
if(gInventory.isObjectDescendentOf(item->getUUID(), gInventory.getRootFolderID()))
// </edit>
new_item->updateParentOnServer(restamp);
updateItem(new_item);
@@ -1254,7 +1250,7 @@ void LLInventoryModel::purgeDescendentsOf(const LLUUID& id)
return;
}
LLPointer<LLViewerInventoryCategory> cat = getCategory(id);
if(cat.notNull())
if (cat.notNull())
{
if (LLInventoryClipboard::instance().hasContents() && LLInventoryClipboard::instance().isCutMode())
{
@@ -1290,7 +1286,7 @@ void LLInventoryModel::purgeDescendentsOf(const LLUUID& id)
// Fast purge
// do the cache accounting
llinfos << "LLInventoryModel::purgeDescendentsOf " << cat->getName()
<< llendl;
<< llendl;
S32 descendents = cat->getDescendentCount();
if(descendents > 0)
{
@@ -1325,6 +1321,7 @@ void LLInventoryModel::purgeDescendentsOf(const LLUUID& id)
{
deleteObject(items.get(i)->getUUID());
}
count = categories.count();
for(S32 i = 0; i < count; ++i)
{
@@ -1377,7 +1374,6 @@ void LLInventoryModel::notifyObservers()
iter != mObservers.end(); )
{
LLInventoryObserver* observer = *iter;
observer->changed(mModifyMask);
// safe way to increment since changed may delete entries! (@!##%@!@&*!)
@@ -1563,7 +1559,7 @@ void LLInventoryModel::addCategory(LLViewerInventoryCategory* category)
}
// try to localize default names first. See EXT-8319, EXT-7051.
//category->localizeName();
category->localizeName();
// Insert category uniquely into the map
mCategoryMap[category->getUUID()] = category; // LLPointer will deref and delete the old one
@@ -1643,7 +1639,7 @@ void LLInventoryModel::accountForUpdate(const LLCategoryUpdate& update) const
cat->setVersion(++version);
lldebugs << "accounted: '" << cat->getName() << "' "
<< version << " with " << descendents_actual
<< " descendents." << llendl;
<< " descendents." << llendl;
}
}
if(!accounted)
@@ -1890,7 +1886,7 @@ bool LLInventoryModel::loadSkeleton(
LLViewerInventoryCategory* tcat = *cit;
// we can safely ignore anything loaded from file, but
// not sent down in the skeleton.
// not sent down in the skeleton. Must have been removed from inventory.
if (cit == not_cached)
{
continue;
@@ -2351,73 +2347,6 @@ bool LLUUIDAndName::operator>(const LLUUIDAndName& rhs) const
return (mID > rhs.mID);
}
// Given the current state of the inventory items, figure out the
// clone information. *FIX: This is sub-optimal, since we can insert
// this information snurgically, but this makes sure the implementation
// works before we worry about optimization.
//void LLInventoryModel::recalculateCloneInformation()
//{
// //dumpInventory();
//
// // This implements a 'multi-map' like structure to keep track of
// // how many clones we find.
// typedef LLDynamicArray<LLViewerInventoryItem*> viewer_item_array_t;
// typedef std::map<LLUUIDAndName, viewer_item_array_t*> clone_map_t;
// clone_map_t clone_map;
// LLUUIDAndName id_and_name;
// viewer_item_array_t* clones = NULL;
// LLViewerInventoryItem* item = NULL;
// for(item = (LLViewerInventoryItem*)mItemMap.getFirstData();
// item != NULL;
// item = (LLViewerInventoryItem*)mItemMap.getNextData())
// {
// if(item->getType() == LLAssetType::AT_CALLINGCARD)
// {
// // if it's a calling card, we key off of the creator id, not
// // the asset id.
// id_and_name.mID = item->getCreatorUUID();
// }
// else
// {
// // if it's not a calling card, we key clones from the
// // asset id.
// id_and_name.mID = item->getAssetUUID();
// }
// if(id_and_name.mID == LLUUID::null)
// {
// continue;
// }
// id_and_name.mName = item->getName();
// if(clone_map.checkData(id_and_name))
// {
// clones = clone_map.getData(id_and_name);
// }
// else
// {
// clones = new viewer_item_array_t;
// clone_map.addData(id_and_name, clones);
// }
// clones->put(item);
// }
//
// S32 count = 0;
// for(clones = clone_map.getFirstData();
// clones != NULL;
// clones = clone_map.getNextData())
// {
// count = clones->count();
// for(S32 i = 0; i < count; i++)
// {
// item = clones->get(i);
// item->setCloneCount(count - 1);
// //clones[i] = NULL;
// }
// delete clones;
// }
// clone_map.removeAllData();
// //dumpInventory();
//}
// static
bool LLInventoryModel::loadFromFile(const std::string& filename,
LLInventoryModel::cat_array_t& categories,
@@ -2480,7 +2409,7 @@ bool LLInventoryModel::loadFromFile(const std::string& filename,
{
if (is_cache_obsolete)
break;
LLPointer<LLViewerInventoryItem> inv_item = new LLViewerInventoryItem;
if( inv_item->importFileLocal(file) )
{
@@ -3002,7 +2931,7 @@ void LLInventoryModel::processBulkUpdateInventory(LLMessageSystem* msg, void**)
// << titem->getParentUUID() << llendl;
U32 callback_id;
msg->getU32Fast(_PREHASH_ItemData, _PREHASH_CallbackID, callback_id);
if(titem->getUUID().notNull())
if(titem->getUUID().notNull() ) // && callback_id.notNull() )
{
items.push_back(titem);
cblist.push_back(InventoryCallbackInfo(callback_id, titem->getUUID()));
@@ -3116,6 +3045,7 @@ void LLInventoryModel::processInventoryDescendents(LLMessageSystem* msg,void**)
msg->getS32("AgentData", "Version", version);
S32 descendents;
msg->getS32("AgentData", "Descendents", descendents);
S32 i;
S32 count = msg->getNumberOfBlocksFast(_PREHASH_FolderData);
LLPointer<LLViewerInventoryCategory> tcategory = new LLViewerInventoryCategory(owner_id);
@@ -3421,7 +3351,8 @@ void LLInventoryModel::updateItemsOrder(LLInventoryModel::item_array_t& items, c
}
//* @param[in] items vector of items in order to be saved.
/*void LLInventoryModel::saveItemsOrder(const LLInventoryModel::item_array_t& items)
/*
void LLInventoryModel::saveItemsOrder(const LLInventoryModel::item_array_t& items)
{
int sortField = 0;
@@ -3441,8 +3372,8 @@ void LLInventoryModel::updateItemsOrder(LLInventoryModel::item_array_t& items, c
}
notifyObservers();
}*/
}
*/
// See also LLInventorySort where landmarks in the Favorites folder are sorted.
/*class LLViewerInventoryItemSort
{
@@ -3466,7 +3397,8 @@ public:
// * @param source_item_id - LLUUID of the source item to be moved into new position
// * @param target_item_id - LLUUID of the target item before which source item should be placed.
/*void LLInventoryModel::rearrangeFavoriteLandmarks(const LLUUID& source_item_id, const LLUUID& target_item_id)
/*
void LLInventoryModel::rearrangeFavoriteLandmarks(const LLUUID& source_item_id, const LLUUID& target_item_id)
{
LLInventoryModel::cat_array_t cats;
LLInventoryModel::item_array_t items;
@@ -3481,7 +3413,10 @@ public:
updateItemsOrder(items, source_item_id, target_item_id);
saveItemsOrder(items);
}*/
}
*/
//----------------------------------------------------------------------------
// *NOTE: DEBUG functionality
void LLInventoryModel::dumpInventory() const
{
@@ -3493,8 +3428,8 @@ void LLInventoryModel::dumpInventory() const
if(cat)
{
llinfos << " " << cat->getUUID() << " '" << cat->getName() << "' "
<< cat->getVersion() << " " << cat->getDescendentCount() << " parent: " << cat->getParentUUID()
<< LL_ENDL;
<< cat->getVersion() << " " << cat->getDescendentCount() << " parent: " << cat->getParentUUID()
<< llendl;
}
else
{

View File

@@ -63,11 +63,140 @@
#include "llfloatercustomize.h"
// <edit>
#include "llappviewer.h" // System Folders
// </edit>
// Two do-nothing ops for use in callbacks.
void no_op_inventory_func(const LLUUID&) {}
void no_op() {}
// </edit>
///----------------------------------------------------------------------------
/// Helper class to store special inventory item names and their localized values.
///----------------------------------------------------------------------------
class LLLocalizedInventoryItemsDictionary : public LLSingleton<LLLocalizedInventoryItemsDictionary>
{
public:
std::map<std::string, std::string> mInventoryItemsDict;
LLLocalizedInventoryItemsDictionary()
{
mInventoryItemsDict["New Shape"] = LLTrans::getString("New Shape");
mInventoryItemsDict["New Skin"] = LLTrans::getString("New Skin");
mInventoryItemsDict["New Hair"] = LLTrans::getString("New Hair");
mInventoryItemsDict["New Eyes"] = LLTrans::getString("New Eyes");
mInventoryItemsDict["New Shirt"] = LLTrans::getString("New Shirt");
mInventoryItemsDict["New Pants"] = LLTrans::getString("New Pants");
mInventoryItemsDict["New Shoes"] = LLTrans::getString("New Shoes");
mInventoryItemsDict["New Socks"] = LLTrans::getString("New Socks");
mInventoryItemsDict["New Jacket"] = LLTrans::getString("New Jacket");
mInventoryItemsDict["New Gloves"] = LLTrans::getString("New Gloves");
mInventoryItemsDict["New Undershirt"] = LLTrans::getString("New Undershirt");
mInventoryItemsDict["New Underpants"] = LLTrans::getString("New Underpants");
mInventoryItemsDict["New Skirt"] = LLTrans::getString("New Skirt");
mInventoryItemsDict["New Alpha"] = LLTrans::getString("New Alpha");
mInventoryItemsDict["New Tattoo"] = LLTrans::getString("New Tattoo");
mInventoryItemsDict["New Physics"] = LLTrans::getString("New Physics");
mInventoryItemsDict["Invalid Wearable"] = LLTrans::getString("Invalid Wearable");
mInventoryItemsDict["New Gesture"] = LLTrans::getString("New Gesture");
mInventoryItemsDict["New Script"] = LLTrans::getString("New Script");
mInventoryItemsDict["New Folder"] = LLTrans::getString("New Folder");
mInventoryItemsDict["New Note"] = LLTrans::getString("New Note");
mInventoryItemsDict["Contents"] = LLTrans::getString("Contents");
mInventoryItemsDict["Gesture"] = LLTrans::getString("Gesture");
mInventoryItemsDict["Male Gestures"] = LLTrans::getString("Male Gestures");
mInventoryItemsDict["Female Gestures"] = LLTrans::getString("Female Gestures");
mInventoryItemsDict["Other Gestures"] = LLTrans::getString("Other Gestures");
mInventoryItemsDict["Speech Gestures"] = LLTrans::getString("Speech Gestures");
mInventoryItemsDict["Common Gestures"] = LLTrans::getString("Common Gestures");
//predefined gestures
//male
mInventoryItemsDict["Male - Excuse me"] = LLTrans::getString("Male - Excuse me");
mInventoryItemsDict["Male - Get lost"] = LLTrans::getString("Male - Get lost"); // double space after Male. EXT-8319
mInventoryItemsDict["Male - Blow kiss"] = LLTrans::getString("Male - Blow kiss");
mInventoryItemsDict["Male - Boo"] = LLTrans::getString("Male - Boo");
mInventoryItemsDict["Male - Bored"] = LLTrans::getString("Male - Bored");
mInventoryItemsDict["Male - Hey"] = LLTrans::getString("Male - Hey");
mInventoryItemsDict["Male - Laugh"] = LLTrans::getString("Male - Laugh");
mInventoryItemsDict["Male - Repulsed"] = LLTrans::getString("Male - Repulsed");
mInventoryItemsDict["Male - Shrug"] = LLTrans::getString("Male - Shrug");
mInventoryItemsDict["Male - Stick tougue out"] = LLTrans::getString("Male - Stick tougue out");
mInventoryItemsDict["Male - Wow"] = LLTrans::getString("Male - Wow");
//female
mInventoryItemsDict["Female - Chuckle"] = LLTrans::getString("Female - Chuckle");
mInventoryItemsDict["Female - Cry"] = LLTrans::getString("Female - Cry");
mInventoryItemsDict["Female - Embarrassed"] = LLTrans::getString("Female - Embarrassed");
mInventoryItemsDict["Female - Excuse me"] = LLTrans::getString("Female - Excuse me");
mInventoryItemsDict["Female - Get lost"] = LLTrans::getString("Female - Get lost"); // double space after Female. EXT-8319
mInventoryItemsDict["Female - Blow kiss"] = LLTrans::getString("Female - Blow kiss");
mInventoryItemsDict["Female - Boo"] = LLTrans::getString("Female - Boo");
mInventoryItemsDict["Female - Bored"] = LLTrans::getString("Female - Bored");
mInventoryItemsDict["Female - Hey"] = LLTrans::getString("Female - Hey");
mInventoryItemsDict["Female - Hey baby"] = LLTrans::getString("Female - Hey baby");
mInventoryItemsDict["Female - Laugh"] = LLTrans::getString("Female - Laugh");
mInventoryItemsDict["Female - Looking good"] = LLTrans::getString("Female - Looking good");
mInventoryItemsDict["Female - Over here"] = LLTrans::getString("Female - Over here");
mInventoryItemsDict["Female - Please"] = LLTrans::getString("Female - Please");
mInventoryItemsDict["Female - Repulsed"] = LLTrans::getString("Female - Repulsed");
mInventoryItemsDict["Female - Shrug"] = LLTrans::getString("Female - Shrug");
mInventoryItemsDict["Female - Stick tougue out"]= LLTrans::getString("Female - Stick tougue out");
mInventoryItemsDict["Female - Wow"] = LLTrans::getString("Female - Wow");
//common
mInventoryItemsDict["/bow"] = LLTrans::getString("/bow");
mInventoryItemsDict["/clap"] = LLTrans::getString("/clap");
mInventoryItemsDict["/count"] = LLTrans::getString("/count");
mInventoryItemsDict["/extinguish"] = LLTrans::getString("/extinguish");
mInventoryItemsDict["/kmb"] = LLTrans::getString("/kmb");
mInventoryItemsDict["/muscle"] = LLTrans::getString("/muscle");
mInventoryItemsDict["/no"] = LLTrans::getString("/no");
mInventoryItemsDict["/no!"] = LLTrans::getString("/no!");
mInventoryItemsDict["/paper"] = LLTrans::getString("/paper");
mInventoryItemsDict["/pointme"] = LLTrans::getString("/pointme");
mInventoryItemsDict["/pointyou"] = LLTrans::getString("/pointyou");
mInventoryItemsDict["/rock"] = LLTrans::getString("/rock");
mInventoryItemsDict["/scissor"] = LLTrans::getString("/scissor");
mInventoryItemsDict["/smoke"] = LLTrans::getString("/smoke");
mInventoryItemsDict["/stretch"] = LLTrans::getString("/stretch");
mInventoryItemsDict["/whistle"] = LLTrans::getString("/whistle");
mInventoryItemsDict["/yes"] = LLTrans::getString("/yes");
mInventoryItemsDict["/yes!"] = LLTrans::getString("/yes!");
mInventoryItemsDict["afk"] = LLTrans::getString("afk");
mInventoryItemsDict["dance1"] = LLTrans::getString("dance1");
mInventoryItemsDict["dance2"] = LLTrans::getString("dance2");
mInventoryItemsDict["dance3"] = LLTrans::getString("dance3");
mInventoryItemsDict["dance4"] = LLTrans::getString("dance4");
mInventoryItemsDict["dance5"] = LLTrans::getString("dance5");
mInventoryItemsDict["dance6"] = LLTrans::getString("dance6");
mInventoryItemsDict["dance7"] = LLTrans::getString("dance7");
mInventoryItemsDict["dance8"] = LLTrans::getString("dance8");
}
/**
* Finds passed name in dictionary and replaces it with found localized value.
*
* @param object_name - string to be localized.
* @return true if passed name was found and localized, false otherwise.
*/
bool localizeInventoryObjectName(std::string& object_name)
{
LL_DEBUGS("InventoryLocalize") << "Searching for localization: " << object_name << LL_ENDL;
std::map<std::string, std::string>::const_iterator dictionary_iter = mInventoryItemsDict.find(object_name);
bool found = dictionary_iter != mInventoryItemsDict.end();
if(found)
{
object_name = dictionary_iter->second;
LL_DEBUGS("InventoryLocalize") << "Found, new name is: " << object_name << LL_ENDL;
}
return found;
}
};
///----------------------------------------------------------------------------
/// Local function declarations, constants, enums, and typedefs
@@ -165,13 +294,10 @@ void LLViewerInventoryItem::cloneViewerItem(LLPointer<LLViewerInventoryItem>& ne
void LLViewerInventoryItem::removeFromServer()
{
// <edit> this check is ghetto
if((mParentUUID == gSystemFolderRoot) || (gInventory.isObjectDescendentOf(mUUID, gSystemFolderRoot)))
{
return;
}
if((mParentUUID == gSystemFolderRoot) || (gInventory.isObjectDescendentOf(mUUID, gSystemFolderRoot))) return;
// </edit>
llinfos << "Removing inventory item " << mUUID << " from server."
<< llendl;
lldebugs << "Removing inventory item " << mUUID << " from server."
<< llendl;
LLInventoryModel::LLCategoryUpdate up(mParentUUID, -1);
gInventory.accountForUpdate(up);
@@ -189,22 +315,14 @@ void LLViewerInventoryItem::removeFromServer()
void LLViewerInventoryItem::updateServer(BOOL is_new) const
{
// <edit>
//if(gAgent.getID() != mPermissions.getOwner())
//{
// // *FIX: deal with this better.
// llwarns << "LLViewerInventoryItem::updateServer() - for unowned item"
// << llendl;
if((mParentUUID == gSystemFolderRoot) || (gInventory.isObjectDescendentOf(mUUID, gSystemFolderRoot)))
{
if((mParentUUID == gSystemFolderRoot) || (gInventory.isObjectDescendentOf(mUUID, gSystemFolderRoot))) return;
// </edit>
return;
}
if(!mIsComplete)
{
// *FIX: deal with this better.
llwarns << "LLViewerInventoryItem::updateServer() - for incomplete item"
<< llendl;
LLNotificationsUtil::add("IncompleteInventoryItem");
LLNotificationsUtil::add("IncompleteInventoryItem");
return;
}
if(gAgent.getID() != mPermissions.getOwner())
@@ -286,6 +404,9 @@ void LLViewerInventoryItem::fetchFromServer(void) const
BOOL LLViewerInventoryItem::unpackMessage(LLSD item)
{
BOOL rv = LLInventoryItem::fromLLSD(item);
LLLocalizedInventoryItemsDictionary::getInstance()->localizeInventoryObjectName(mName);
mIsComplete = TRUE;
return rv;
}
@@ -294,6 +415,9 @@ BOOL LLViewerInventoryItem::unpackMessage(LLSD item)
BOOL LLViewerInventoryItem::unpackMessage(LLMessageSystem* msg, const char* block, S32 block_num)
{
BOOL rv = LLInventoryItem::unpackMessage(msg, block, block_num);
LLLocalizedInventoryItemsDictionary::getInstance()->localizeInventoryObjectName(mName);
mIsComplete = TRUE;
return rv;
}
@@ -429,7 +553,7 @@ void LLViewerInventoryCategory::copyViewerCategory(const LLViewerInventoryCatego
{
copyCategory(other);
mOwnerID = other->mOwnerID;
mVersion = other->mVersion;
setVersion(other->getVersion());
mDescendentCount = other->mDescendentCount;
mDescendentsRequested = other->mDescendentsRequested;
}
@@ -505,7 +629,7 @@ bool LLViewerInventoryCategory::fetch()
// <edit>
if((mUUID == gSystemFolderRoot) || (gInventory.isObjectDescendentOf(mUUID, gSystemFolderRoot))) return false;
// </edit>
if((VERSION_UNKNOWN == mVersion) &&
if((VERSION_UNKNOWN == getVersion()) &&
(!mDescendentsRequested.getStarted() ||
mDescendentsRequested.hasExpired())) //Expired check prevents multiple downloads.
{
@@ -720,6 +844,12 @@ void LLViewerInventoryCategory::changeType(LLFolderType::EType new_folder_type)
setPreferredType(new_folder_type);
gInventory.addChangedMask(LLInventoryObserver::LABEL, folder_id);
}
void LLViewerInventoryCategory::localizeName()
{
LLLocalizedInventoryItemsDictionary::getInstance()->localizeInventoryObjectName(mName);
}
///----------------------------------------------------------------------------
/// Local function definitions
///----------------------------------------------------------------------------
@@ -858,6 +988,25 @@ void create_inventory_item(const LLUUID& agent_id, const LLUUID& session_id,
U32 next_owner_perm,
LLPointer<LLInventoryCallback> cb)
{
//check if name is equal to one of special inventory items names
//EXT-5839
std::string server_name = name;
{
std::map<std::string, std::string>::const_iterator dictionary_iter;
for (dictionary_iter = LLLocalizedInventoryItemsDictionary::getInstance()->mInventoryItemsDict.begin();
dictionary_iter != LLLocalizedInventoryItemsDictionary::getInstance()->mInventoryItemsDict.end();
dictionary_iter++)
{
const std::string& localized_name = dictionary_iter->second;
if(localized_name == name)
{
server_name = dictionary_iter->first;
}
}
}
LLMessageSystem* msg = gMessageSystem;
msg->newMessageFast(_PREHASH_CreateInventoryItem);
msg->nextBlock(_PREHASH_AgentData);
@@ -871,7 +1020,7 @@ void create_inventory_item(const LLUUID& agent_id, const LLUUID& session_id,
msg->addS8Fast(_PREHASH_Type, (S8)asset_type);
msg->addS8Fast(_PREHASH_InvType, (S8)inv_type);
msg->addU8Fast(_PREHASH_WearableType, (U8)wtype);
msg->addStringFast(_PREHASH_Name, name);
msg->addStringFast(_PREHASH_Name, server_name);
msg->addStringFast(_PREHASH_Description, desc);
gAgent.sendReliableMessage();

View File

@@ -3,10 +3,9 @@
* @brief Declaration of the inventory bits that only used on the viewer.
*
* $LicenseInfo:firstyear=2002&license=viewergpl$
*
* Second Life Viewer Source Code
* Copyright (c) 2002-2009, Linden Research, Inc.
*
* Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
@@ -211,7 +210,7 @@ public:
// Returns true if a fetch was issued.
bool fetch();
// used to help make cacheing more robust - for example, if
// used to help make caching more robust - for example, if
// someone is getting 4 packets but logs out after 3. the viewer
// may never know the cache is wrong.
enum { DESCENDENT_COUNT_UNKNOWN = -1 };
@@ -219,7 +218,7 @@ public:
void setDescendentCount(S32 descendents) { mDescendentCount = descendents; }
// file handling on the viewer. These are not meant for anything
// other than cacheing.
// other than caching.
bool exportFileLocal(LLFILE* fp) const;
bool importFileLocal(LLFILE* fp);
void determineFolderType();
@@ -227,6 +226,7 @@ public:
private:
friend class LLInventoryModel;
void localizeName(); // intended to be called from the LLInventoryModel
protected:
LLUUID mOwnerID;
@@ -327,6 +327,7 @@ extern LLInventoryCallbackManager gInventoryCallbacks;
#define NOT_WEARABLE (LLWearableType::EType)0
// *TODO: Find a home for these
void create_inventory_item(const LLUUID& agent_id, const LLUUID& session_id,
const LLUUID& parent, const LLTransactionID& transaction_id,
const std::string& name,

View File

@@ -177,10 +177,6 @@
mouse_opaque="true" name="Copy Asset UUID" width="128">
<on_click filter="" function="Inventory.DoToSelected" userdata="copy_uuid" />
</menu_item_call>
<menu_item_call bottom_delta="-18" height="18" label="Reupload..." left="0" mouse_opaque="true"
name="Reupload..." width="128">
<on_click filter="" function="Inventory.DoToSelected" userdata="reupload" />
</menu_item_call>
<menu_item_call bottom_delta="-18" height="18" label="Acquire Asset ID" left="0" mouse_opaque="true"
name="Acquire Asset ID" width="128">
<on_click filter="" function="Inventory.DoToSelected" userdata="acquire_asset_id" />

View File

@@ -4121,6 +4121,72 @@ Abuse Report</string>
<string name="New Script">New Script</string>
<string name="New Note">New Note</string>
<string name="New Folder">New Folder</string>
<string name="Contents">Contents</string>
<string name="Gesture">Gesture</string>
<string name="Male Gestures">Male Gestures</string>
<string name="Female Gestures">Female Gestures</string>
<string name="Other Gestures">Other Gestures</string>
<string name="Speech Gestures">Speech Gestures</string>
<string name="Common Gestures">Common Gestures</string>
<!-- gestures -->
<string name="Male - Excuse me">Male - Excuse me</string>
<string name="Male - Get lost">Male - Get lost</string>
<string name="Male - Blow kiss">Male - Blow kiss</string>
<string name="Male - Boo">Male - Boo</string>
<string name="Male - Bored">Male - Bored</string>
<string name="Male - Hey">Male - Hey</string>
<string name="Male - Laugh">Male - Laugh</string>
<string name="Male - Repulsed">Male - Repulsed</string>
<string name="Male - Shrug">Male - Shrug</string>
<string name="Male - Stick tougue out">Male - Stick tongue out</string>
<string name="Male - Wow">Male - Wow</string>
<string name="Female - Chuckle">Female - Chuckle</string>
<string name="Female - Cry">Female - Cry</string>
<string name="Female - Embarrassed">Female - Embarrassed</string>
<string name="Female - Excuse me">Female - Excuse me</string>
<string name="Female - Get lost">Female - Get lost</string>
<string name="Female - Blow kiss">Female - Blow kiss</string>
<string name="Female - Boo">Female - Boo</string>
<string name="Female - Bored">Female - Bored</string>
<string name="Female - Hey">Female - Hey</string>
<string name="Female - Hey baby">Female - Hey baby</string>
<string name="Female - Laugh">Female - Laugh</string>
<string name="Female - Looking good">Female - Looking good</string>
<string name="Female - Over here">Female - Over here</string>
<string name="Female - Please">Female - Please</string>
<string name="Female - Repulsed">Female - Repulsed</string>
<string name="Female - Shrug">Female - Shrug</string>
<string name="Female - Stick tougue out">Female - Stick tongue out</string>
<string name="Female - Wow">Female - Wow</string>
<string name="/bow">/bow</string>
<string name="/clap">/clap</string>
<string name="/count">/count</string>
<string name="/extinguish">/extinguish</string>
<string name="/kmb">/kmb</string>
<string name="/muscle">/muscle</string>
<string name="/no">/no</string>
<string name="/no!">/no!</string>
<string name="/paper">/paper</string>
<string name="/pointme">/pointme</string>
<string name="/pointyou">/pointyou</string>
<string name="/rock">/rock</string>
<string name="/scissor">/scissor</string>
<string name="/smoke">/smoke</string>
<string name="/stretch">/stretch</string>
<string name="/whistle">/whistle</string>
<string name="/yes">/yes</string>
<string name="/yes!">/yes!</string>
<string name="afk">afk</string>
<string name="dance1">dance1</string>
<string name="dance2">dance2</string>
<string name="dance3">dance3</string>
<string name="dance4">dance4</string>
<string name="dance5">dance5</string>
<string name="dance6">dance6</string>
<string name="dance7">dance7</string>
<string name="dance8">dance8</string>
<string name="DefaultMimeType">none/none</string>
<string name="Chat">Chat</string>

View File

@@ -47,7 +47,6 @@
<menu_item_call name="Properties" label="Propiedades"/>
<menu_item_call name="Rename" label="Renombrar"/>
<menu_item_call name="Copy Asset UUID" label="Copiar Asset UUID"/>
<menu_item_call name="Reupload..." label="Resubir..."/>
<menu_item_call name="Acquire Asset ID" label="Adquirir Asset ID"/>
<menu_item_call name="Cut" label="Cortar"/>
<menu_item_call name="Copy" label="Copiar"/>

View File

@@ -47,7 +47,6 @@
<menu_item_call name="Properties" label="Propriétés"/>
<menu_item_call name="Rename" label="Renommer"/>
<menu_item_call name="Copy Asset UUID" label="Copier l'UUID (identifiant universel unique)"/>
<menu_item_call name="Reupload..." label="Reupload..."/>
<menu_item_call name="Acquire Asset ID" label="Acquérir Asset ID"/>
<menu_item_call name="Copy" label="Copier"/>
<menu_item_call name="Paste" label="Coller"/>