Merge branch 'master' of https://github.com/LightDrake/SingularityViewer
This commit is contained in:
@@ -115,7 +115,6 @@ set(viewer_SOURCE_FILES
|
||||
llanimstatelabels.cpp
|
||||
llappearancemgr.cpp
|
||||
llappviewer.cpp
|
||||
llassetconverter.cpp
|
||||
llassetuploadqueue.cpp
|
||||
llassetuploadresponders.cpp
|
||||
llattachmentsmgr.cpp
|
||||
@@ -303,7 +302,6 @@ set(viewer_SOURCE_FILES
|
||||
llinventorypanel.cpp
|
||||
lljoystickbutton.cpp
|
||||
lllandmarklist.cpp
|
||||
lllocalinventory.cpp
|
||||
lllogchat.cpp
|
||||
llloginhandler.cpp
|
||||
llmainlooprepeater.cpp
|
||||
@@ -619,7 +617,6 @@ set(viewer_HEADER_FILES
|
||||
llappearance.h
|
||||
llappearancemgr.h
|
||||
llappviewer.h
|
||||
llassetconverter.h
|
||||
llassetuploadqueue.h
|
||||
llassetuploadresponders.h
|
||||
llattachmentsmgr.h
|
||||
@@ -807,7 +804,6 @@ set(viewer_HEADER_FILES
|
||||
lljoystickbutton.h
|
||||
lllandmarklist.h
|
||||
lllightconstants.h
|
||||
lllocalinventory.h
|
||||
lllogchat.h
|
||||
llloginhandler.h
|
||||
llmainlooprepeater.h
|
||||
|
||||
@@ -235,28 +235,6 @@
|
||||
<key>Value</key>
|
||||
<real>0.0</real>
|
||||
</map>
|
||||
<key>AscentUseSystemFolder</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables the System folder for setting and non-permanent asset storage.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>AscentSystemTemporary</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>When enabled, temporary uploads are put in the System Asset folder (if System Folder exists).</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>AscentShowFriendsTag</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
||||
@@ -218,8 +218,6 @@ void LLPrefsAscentSys::refreshValues()
|
||||
mAlwaysShowFly = gSavedSettings.getBOOL("AscentFlyAlwaysEnabled");
|
||||
mDisableMinZoom = gSavedSettings.getBOOL("AscentDisableMinZoomDist");
|
||||
mPowerUser = gSavedSettings.getBOOL("AscentPowerfulWizard");
|
||||
mUseSystemFolder = gSavedSettings.getBOOL("AscentUseSystemFolder");
|
||||
mUploadToSystem = gSavedSettings.getBOOL("AscentSystemTemporary");
|
||||
mFetchInventoryOnLogin = gSavedSettings.getBOOL("FetchInventoryOnLogin");
|
||||
mEnableLLWind = gSavedSettings.getBOOL("WindEnabled");
|
||||
mEnableClouds = gSavedSettings.getBOOL("CloudsEnabled");
|
||||
@@ -286,7 +284,6 @@ void LLPrefsAscentSys::refresh()
|
||||
childSetEnabled("offset_teleport_check", mDoubleClickTeleport);
|
||||
childSetValue("power_user_check", mPowerUser);
|
||||
childSetValue("power_user_confirm_check", mPowerUser);
|
||||
childSetEnabled("temp_in_system_check", mUseSystemFolder);
|
||||
childSetEnabled("speed_rez_interval", mSpeedRez);
|
||||
childSetEnabled("speed_rez_seconds", mSpeedRez);
|
||||
|
||||
@@ -371,8 +368,6 @@ void LLPrefsAscentSys::cancel()
|
||||
gSavedSettings.setBOOL("AscentBuildAlwaysEnabled", mBuildAlwaysEnabled);
|
||||
gSavedSettings.setBOOL("AscentFlyAlwaysEnabled", mAlwaysShowFly);
|
||||
gSavedSettings.setBOOL("AscentDisableMinZoomDist", mDisableMinZoom);
|
||||
gSavedSettings.setBOOL("AscentUseSystemFolder", mUseSystemFolder);
|
||||
gSavedSettings.setBOOL("AscentSystemTemporary", mUploadToSystem);
|
||||
gSavedSettings.setBOOL("FetchInventoryOnLogin", mFetchInventoryOnLogin);
|
||||
gSavedSettings.setBOOL("WindEnabled", mEnableLLWind);
|
||||
gSavedSettings.setBOOL("CloudsEnabled", mEnableClouds);
|
||||
|
||||
@@ -66,8 +66,6 @@ protected:
|
||||
BOOL mAlwaysShowFly;
|
||||
BOOL mDisableMinZoom;
|
||||
BOOL mPowerUser;
|
||||
BOOL mUseSystemFolder;
|
||||
BOOL mUploadToSystem;
|
||||
BOOL mFetchInventoryOnLogin;
|
||||
BOOL mEnableLLWind;
|
||||
BOOL mEnableClouds;
|
||||
|
||||
@@ -263,12 +263,6 @@ LLTimer gLogoutTimer;
|
||||
static const F32 LOGOUT_REQUEST_TIME = 6.f; // this will be cut short by the LogoutReply msg.
|
||||
F32 gLogoutMaxTime = LOGOUT_REQUEST_TIME;
|
||||
|
||||
// <edit>
|
||||
LLUUID gSystemFolderRoot;
|
||||
LLUUID gSystemFolderSettings;
|
||||
LLUUID gSystemFolderAssets;
|
||||
// </edit>
|
||||
|
||||
BOOL gDisconnected = FALSE;
|
||||
|
||||
// used to restore texture state after a mode switch
|
||||
|
||||
@@ -321,12 +321,6 @@ extern LLTimer gLogoutTimer;
|
||||
extern F32 gSimLastTime;
|
||||
extern F32 gSimFrames;
|
||||
|
||||
// <edit>
|
||||
extern LLUUID gSystemFolderRoot;
|
||||
extern LLUUID gSystemFolderSettings;
|
||||
extern LLUUID gSystemFolderAssets;
|
||||
// </edit>
|
||||
|
||||
extern BOOL gDisconnected;
|
||||
|
||||
extern LLFrameTimer gRestoreGLTimer;
|
||||
|
||||
@@ -1,112 +0,0 @@
|
||||
// <edit>
|
||||
#include "llviewerprecompiledheaders.h"
|
||||
#include "llvfs.h"
|
||||
#include "llapr.h"
|
||||
#include "llvfile.h"
|
||||
#include "llassetconverter.h"
|
||||
#include "llviewertexturelist.h"
|
||||
#include "llvorbisencode.h"
|
||||
#include "llwearable.h"
|
||||
#include "llbvhloader.h"
|
||||
#include <boost/bind.hpp>
|
||||
struct conversion_s
|
||||
{
|
||||
std::string extension;
|
||||
LLAssetType::EType type;
|
||||
boost::function<bool(const std::string&, const std::string&)> conv_fn;
|
||||
}conversion_list[] =
|
||||
{
|
||||
{ "bmp", LLAssetType::AT_TEXTURE, boost::bind(&LLViewerTextureList::createUploadFile,_1,_2,IMG_CODEC_BMP) },
|
||||
{ "tga", LLAssetType::AT_TEXTURE, boost::bind(&LLViewerTextureList::createUploadFile,_1,_2,IMG_CODEC_TGA) },
|
||||
{ "jpg", LLAssetType::AT_TEXTURE, boost::bind(&LLViewerTextureList::createUploadFile,_1,_2,IMG_CODEC_JPEG)},
|
||||
{ "jpeg", LLAssetType::AT_TEXTURE, boost::bind(&LLViewerTextureList::createUploadFile,_1,_2,IMG_CODEC_JPEG)},
|
||||
{ "png", LLAssetType::AT_TEXTURE, boost::bind(&LLViewerTextureList::createUploadFile,_1,_2,IMG_CODEC_PNG) },
|
||||
{ "jp2", LLAssetType::AT_TEXTURE, &LLAssetConverter::copyFile },
|
||||
{ "j2k", LLAssetType::AT_TEXTURE, &LLAssetConverter::copyFile },
|
||||
{ "j2c", LLAssetType::AT_TEXTURE, &LLAssetConverter::copyFile },
|
||||
{ "wav", LLAssetType::AT_SOUND, &encode_vorbis_file },
|
||||
{ "ogg", LLAssetType::AT_SOUND, &LLAssetConverter::copyFile },
|
||||
{ "bvh", LLAssetType::AT_ANIMATION, &LLAssetConverter::copyBVH },
|
||||
{ "animatn", LLAssetType::AT_ANIMATION, &LLAssetConverter::copyFile },
|
||||
{ "gesture", LLAssetType::AT_GESTURE, &LLAssetConverter::copyFile },
|
||||
{ "notecard", LLAssetType::AT_NOTECARD, &LLAssetConverter::copyFile },
|
||||
{ "lsl", LLAssetType::AT_LSL_TEXT, &LLAssetConverter::copyFile },
|
||||
//tmp ?
|
||||
};
|
||||
|
||||
// static
|
||||
extern std::string STATUS[];
|
||||
LLAssetType::EType LLAssetConverter::convert(const std::string &src_filename, const std::string &filename)
|
||||
{
|
||||
std::string exten = gDirUtilp->getExtension(src_filename);
|
||||
for(U32 i = 0;i < sizeof(conversion_list) / sizeof(conversion_list[0]); ++i)
|
||||
{
|
||||
if(conversion_list[i].extension == exten)
|
||||
{
|
||||
return conversion_list[i].conv_fn(src_filename, filename) ?
|
||||
conversion_list[i].type : LLAssetType::AT_NONE;
|
||||
}
|
||||
}
|
||||
LLWearableType::EType wear_type = LLWearableType::typeNameToType(exten);
|
||||
if(wear_type != LLWearableType::WT_NONE && copyFile(src_filename, filename))
|
||||
{
|
||||
return LLWearableType::getAssetType(wear_type);
|
||||
}
|
||||
|
||||
llwarns << "Unhandled extension" << llendl;
|
||||
return LLAssetType::AT_NONE;
|
||||
}
|
||||
bool LLAssetConverter::copyFile(const std::string &src_filename, const std::string &dst_filename)
|
||||
{
|
||||
S32 src_size;
|
||||
|
||||
LLAPRFile src_fp(src_filename, LL_APR_RB, &src_size);
|
||||
if(!src_fp.getFileHandle()) return false;
|
||||
|
||||
LLAPRFile dst_fp(dst_filename, LL_APR_WB);
|
||||
if(!dst_fp.getFileHandle()) return false;
|
||||
|
||||
std::vector<char> buffer(src_size + 1);
|
||||
|
||||
src_fp.read(&buffer[0], src_size);
|
||||
dst_fp.write(&buffer[0], src_size);
|
||||
|
||||
return true;
|
||||
}
|
||||
bool LLAssetConverter::copyBVH(const std::string &src_filename, const std::string &dst_filename)
|
||||
{
|
||||
S32 file_size;
|
||||
|
||||
LLAPRFile fp(src_filename, LL_APR_RB, &file_size);
|
||||
if(!fp.getFileHandle()) return false;
|
||||
|
||||
std::vector<char> buffer(file_size + 1);
|
||||
|
||||
ELoadStatus load_status = E_ST_OK;
|
||||
S32 line_number = 0;
|
||||
|
||||
LLBVHLoader* loaderp = new LLBVHLoader(&buffer[0], load_status, line_number);
|
||||
|
||||
if(load_status == E_ST_NO_XLT_FILE)
|
||||
{
|
||||
llwarns << "NOTE: No translation table found." << llendl;
|
||||
}
|
||||
else if(load_status != E_ST_OK)
|
||||
{
|
||||
llwarns << "ERROR: [line: " << line_number << "] " << STATUS[load_status].c_str() << llendl;
|
||||
}
|
||||
|
||||
buffer.resize(loaderp->getOutputSize());
|
||||
|
||||
LLDataPackerBinaryBuffer dp((U8*)&buffer[0], buffer.size());
|
||||
loaderp->serialize(dp);
|
||||
|
||||
delete loaderp;
|
||||
|
||||
LLAPRFile apr_file(dst_filename, LL_APR_RB, &file_size);
|
||||
if(!apr_file.getFileHandle()) return false;
|
||||
|
||||
apr_file.write(&buffer[0], buffer.size());
|
||||
return true;
|
||||
}
|
||||
// </edit>
|
||||
@@ -1,16 +0,0 @@
|
||||
// <edit>
|
||||
#ifndef LL_LLASSETCONVERTER_H
|
||||
#define LL_LLASSETCONVERTER_H
|
||||
|
||||
#include "llcommon.h"
|
||||
#include "llassettype.h"
|
||||
|
||||
class LLAssetConverter
|
||||
{
|
||||
public:
|
||||
static LLAssetType::EType convert(const std::string &src_filename, const std::string &filename);
|
||||
static bool copyFile(const std::string &src_filename, const std::string &dest_filename);
|
||||
static bool copyBVH(const std::string &src_filename, const std::string &dst_filename);
|
||||
};
|
||||
#endif
|
||||
// </edit>
|
||||
@@ -6,7 +6,6 @@
|
||||
#include "llscrolllistctrl.h"
|
||||
#include "llfloaterbvhpreview.h"
|
||||
#include "llvoavatar.h"
|
||||
#include "lllocalinventory.h"
|
||||
#include "llviewercamera.h"
|
||||
#include "llviewerwindow.h"
|
||||
#include "lltoolmgr.h"
|
||||
|
||||
@@ -88,8 +88,6 @@
|
||||
#include "rlvlocks.h"
|
||||
// [/RLVa:KB]
|
||||
|
||||
extern LLUUID gSystemFolderRoot;
|
||||
|
||||
// Marketplace outbox current disabled
|
||||
#define ENABLE_MERCHANT_OUTBOX_CONTEXT_MENU 1
|
||||
#define ENABLE_MERCHANT_SEND_TO_MARKETPLACE_CONTEXT_MENU 1
|
||||
@@ -385,33 +383,26 @@ void LLInvFVBridge::removeBatchNoCheck(LLDynamicArray<LLFolderViewEventListener*
|
||||
move_ids.push_back(item->getUUID());
|
||||
--update[item->getParentUUID()];
|
||||
++update[trash_id];
|
||||
// <edit>
|
||||
if(!gInventory.isObjectDescendentOf(item->getUUID(), gSystemFolderRoot))
|
||||
if(start_new_message)
|
||||
{
|
||||
// </edit>
|
||||
if(start_new_message)
|
||||
{
|
||||
start_new_message = false;
|
||||
msg->newMessageFast(_PREHASH_MoveInventoryItem);
|
||||
msg->nextBlockFast(_PREHASH_AgentData);
|
||||
msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
|
||||
msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
|
||||
msg->addBOOLFast(_PREHASH_Stamp, TRUE);
|
||||
}
|
||||
msg->nextBlockFast(_PREHASH_InventoryData);
|
||||
msg->addUUIDFast(_PREHASH_ItemID, item->getUUID());
|
||||
msg->addUUIDFast(_PREHASH_FolderID, trash_id);
|
||||
msg->addString("NewName", NULL);
|
||||
if(msg->isSendFullFast(_PREHASH_InventoryData))
|
||||
{
|
||||
start_new_message = true;
|
||||
gAgent.sendReliableMessage();
|
||||
gInventory.accountForUpdate(update);
|
||||
update.clear();
|
||||
}
|
||||
// <edit>
|
||||
start_new_message = false;
|
||||
msg->newMessageFast(_PREHASH_MoveInventoryItem);
|
||||
msg->nextBlockFast(_PREHASH_AgentData);
|
||||
msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
|
||||
msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
|
||||
msg->addBOOLFast(_PREHASH_Stamp, TRUE);
|
||||
}
|
||||
msg->nextBlockFast(_PREHASH_InventoryData);
|
||||
msg->addUUIDFast(_PREHASH_ItemID, item->getUUID());
|
||||
msg->addUUIDFast(_PREHASH_FolderID, trash_id);
|
||||
msg->addString("NewName", NULL);
|
||||
if(msg->isSendFullFast(_PREHASH_InventoryData))
|
||||
{
|
||||
start_new_message = true;
|
||||
gAgent.sendReliableMessage();
|
||||
gInventory.accountForUpdate(update);
|
||||
update.clear();
|
||||
}
|
||||
// </edit>
|
||||
}
|
||||
}
|
||||
if(!start_new_message)
|
||||
@@ -433,32 +424,25 @@ void LLInvFVBridge::removeBatchNoCheck(LLDynamicArray<LLFolderViewEventListener*
|
||||
move_ids.push_back(cat->getUUID());
|
||||
--update[cat->getParentUUID()];
|
||||
++update[trash_id];
|
||||
// <edit>
|
||||
if(!gInventory.isObjectDescendentOf(cat->getUUID(), gSystemFolderRoot)) //Avoid fake items.
|
||||
if(start_new_message)
|
||||
{
|
||||
// </edit>
|
||||
if(start_new_message)
|
||||
{
|
||||
start_new_message = false;
|
||||
msg->newMessageFast(_PREHASH_MoveInventoryFolder);
|
||||
msg->nextBlockFast(_PREHASH_AgentData);
|
||||
msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
|
||||
msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
|
||||
msg->addBOOL("Stamp", TRUE);
|
||||
}
|
||||
msg->nextBlockFast(_PREHASH_InventoryData);
|
||||
msg->addUUIDFast(_PREHASH_FolderID, cat->getUUID());
|
||||
msg->addUUIDFast(_PREHASH_ParentID, trash_id);
|
||||
if(msg->isSendFullFast(_PREHASH_InventoryData))
|
||||
{
|
||||
start_new_message = true;
|
||||
gAgent.sendReliableMessage();
|
||||
gInventory.accountForUpdate(update);
|
||||
update.clear();
|
||||
}
|
||||
// <edit>
|
||||
start_new_message = false;
|
||||
msg->newMessageFast(_PREHASH_MoveInventoryFolder);
|
||||
msg->nextBlockFast(_PREHASH_AgentData);
|
||||
msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
|
||||
msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
|
||||
msg->addBOOL("Stamp", TRUE);
|
||||
}
|
||||
msg->nextBlockFast(_PREHASH_InventoryData);
|
||||
msg->addUUIDFast(_PREHASH_FolderID, cat->getUUID());
|
||||
msg->addUUIDFast(_PREHASH_ParentID, trash_id);
|
||||
if(msg->isSendFullFast(_PREHASH_InventoryData))
|
||||
{
|
||||
start_new_message = true;
|
||||
gAgent.sendReliableMessage();
|
||||
gInventory.accountForUpdate(update);
|
||||
update.clear();
|
||||
}
|
||||
// </edit>
|
||||
}
|
||||
}
|
||||
if(!start_new_message)
|
||||
@@ -472,37 +456,6 @@ void LLInvFVBridge::removeBatchNoCheck(LLDynamicArray<LLFolderViewEventListener*
|
||||
uuid_vec_t::iterator end = move_ids.end();
|
||||
for(; it != end; ++it)
|
||||
{
|
||||
// <edit> trash problem
|
||||
if(gInventory.isObjectDescendentOf(*it, gSystemFolderRoot))
|
||||
{
|
||||
// if it's a category, delete descendents
|
||||
if(gInventory.getCategory(*it))
|
||||
{
|
||||
LLViewerInventoryCategory* cat = gInventory.getCategory(*it);
|
||||
cat->setDescendentCount(0);
|
||||
LLInventoryModel::cat_array_t categories;
|
||||
LLInventoryModel::item_array_t items;
|
||||
gInventory.collectDescendents(cat->getUUID(),
|
||||
categories,
|
||||
items,
|
||||
false); // include trash?
|
||||
S32 count = items.count();
|
||||
S32 i;
|
||||
for(i = 0; i < count; ++i)
|
||||
{
|
||||
gInventory.deleteObject(items.get(i)->getUUID());
|
||||
}
|
||||
count = categories.count();
|
||||
for(i = 0; i < count; ++i)
|
||||
{
|
||||
gInventory.deleteObject(categories.get(i)->getUUID());
|
||||
}
|
||||
}
|
||||
// delete it
|
||||
gInventory.deleteObject(*it);
|
||||
}
|
||||
else
|
||||
// </edit>
|
||||
gInventory.moveObject((*it), trash_id);
|
||||
}
|
||||
|
||||
@@ -1520,9 +1473,6 @@ void LLItemBridge::selectItem()
|
||||
LLViewerInventoryItem* item = static_cast<LLViewerInventoryItem*>(getItem());
|
||||
if(item && !item->isFinished())
|
||||
{
|
||||
// <edit>
|
||||
if(!(gInventory.isObjectDescendentOf(mUUID, gSystemFolderRoot)))
|
||||
// </edit>
|
||||
//item->fetchFromServer();
|
||||
LLInventoryModelBackgroundFetch::instance().start(item->getUUID(), false);
|
||||
}
|
||||
@@ -1794,16 +1744,6 @@ BOOL LLItemBridge::removeItem()
|
||||
// Already in trash
|
||||
if (model->isObjectDescendentOf(mUUID, trash_id)) return FALSE;
|
||||
|
||||
// <edit> trash problem
|
||||
if(gInventory.isObjectDescendentOf(mUUID, gSystemFolderRoot))
|
||||
{
|
||||
LLInventoryModel::LLCategoryUpdate up(item->getParentUUID(), -1);
|
||||
gInventory.deleteObject(mUUID);
|
||||
gInventory.accountForUpdate(up);
|
||||
gInventory.notifyObservers();
|
||||
}
|
||||
// </edit>
|
||||
|
||||
LLNotification::Params params("ConfirmItemDeleteHasLinks");
|
||||
params.functor(boost::bind(&LLItemBridge::confirmRemoveItem, this, _1, _2));
|
||||
|
||||
|
||||
@@ -1777,10 +1777,6 @@ bool LLInventoryModel::isCategoryComplete(const LLUUID& cat_id) const
|
||||
}
|
||||
}
|
||||
|
||||
// <edit>
|
||||
if((cat_id == gSystemFolderRoot) || gInventory.isObjectDescendentOf(cat_id, gSystemFolderRoot)) return true;
|
||||
// </edit>
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,561 +0,0 @@
|
||||
// <edit>
|
||||
#include "llviewerprecompiledheaders.h"
|
||||
|
||||
#include "lllocalinventory.h"
|
||||
|
||||
#include "llviewerinventory.h"
|
||||
#include "llviewercontrol.h"
|
||||
|
||||
#include "llpreviewsound.h"
|
||||
#include "llpreviewanim.h"
|
||||
#include "llpreviewtexture.h"
|
||||
#include "llpreviewgesture.h"
|
||||
#include "llpreviewlandmark.h"
|
||||
|
||||
#include "llappviewer.h"
|
||||
|
||||
#include "lluictrlfactory.h"
|
||||
#include "llcombobox.h"
|
||||
#include "llnotificationsutil.h"
|
||||
|
||||
#include "llagent.h" // gAgent
|
||||
#include "llviewerwindow.h" // alertXml
|
||||
|
||||
|
||||
LLUUID LLLocalInventory::addItem(std::string name, int type, LLUUID asset_id, bool open_automatically)
|
||||
{
|
||||
LLUUID item_id = addItem(name, type, asset_id);
|
||||
if(open_automatically) open(item_id);
|
||||
return item_id;
|
||||
}
|
||||
|
||||
LLUUID LLLocalInventory::addItem(std::string name, int type, LLUUID asset_id)
|
||||
{
|
||||
LLUUID item_id;
|
||||
item_id.generate();
|
||||
LLPermissions* perms = new LLPermissions();
|
||||
perms->set(LLPermissions::DEFAULT);
|
||||
perms->setOwnerAndGroup(LLUUID::null, LLUUID::null, LLUUID::null, false);
|
||||
perms->setMaskBase(0);
|
||||
perms->setMaskEveryone(0);
|
||||
perms->setMaskGroup(0);
|
||||
perms->setMaskNext(0);
|
||||
perms->setMaskOwner(0);
|
||||
LLViewerInventoryItem* item = new LLViewerInventoryItem(
|
||||
item_id,
|
||||
gSystemFolderAssets,
|
||||
*perms,
|
||||
asset_id,
|
||||
(LLAssetType::EType)type,
|
||||
(LLInventoryType::EType)type,
|
||||
name,
|
||||
"",
|
||||
LLSaleInfo::DEFAULT,
|
||||
0,
|
||||
time_corrected());
|
||||
addItem(item);
|
||||
return item_id;
|
||||
}
|
||||
|
||||
void LLLocalInventory::addItem(LLViewerInventoryItem* item)
|
||||
{
|
||||
//gInventory.addPretendItem(item);
|
||||
LLInventoryModel::update_map_t update;
|
||||
++update[item->getParentUUID()];
|
||||
gInventory.accountForUpdate(update);
|
||||
gInventory.updateItem(item);
|
||||
gInventory.notifyObservers();
|
||||
}
|
||||
|
||||
void LLLocalInventory::open(LLUUID item_id)
|
||||
{
|
||||
LLViewerInventoryItem* item = gInventory.getItem(item_id);
|
||||
if(!item)
|
||||
{
|
||||
llwarns << "Trying to open non-existent item" << llendl;
|
||||
return;
|
||||
}
|
||||
|
||||
LLAssetType::EType type = item->getType();
|
||||
|
||||
if(type == LLAssetType::AT_SOUND)
|
||||
{
|
||||
S32 left, top;
|
||||
gFloaterView->getNewFloaterPosition(&left, &top);
|
||||
LLRect rect = gSavedSettings.getRect("PreviewSoundRect");
|
||||
rect.translate(left - rect.mLeft, top - rect.mTop);
|
||||
LLPreviewSound* floaterp;
|
||||
floaterp = new LLPreviewSound("Preview sound",
|
||||
rect,
|
||||
"",
|
||||
item_id);
|
||||
floaterp->setFocus(TRUE);
|
||||
gFloaterView->adjustToFitScreen(floaterp, FALSE);
|
||||
}
|
||||
else if(type == LLAssetType::AT_ANIMATION)
|
||||
{
|
||||
S32 left, top;
|
||||
gFloaterView->getNewFloaterPosition(&left, &top);
|
||||
LLRect rect = gSavedSettings.getRect("PreviewAnimRect");
|
||||
rect.translate(left - rect.mLeft, top - rect.mTop);
|
||||
LLPreviewAnim* floaterp;
|
||||
floaterp = new LLPreviewAnim("Preview anim",
|
||||
rect,
|
||||
"",
|
||||
item_id,
|
||||
LLPreviewAnim::NONE);
|
||||
floaterp->setFocus(TRUE);
|
||||
gFloaterView->adjustToFitScreen(floaterp, FALSE);
|
||||
}
|
||||
else if(type == LLAssetType::AT_TEXTURE)
|
||||
{
|
||||
S32 left, top;
|
||||
gFloaterView->getNewFloaterPosition(&left, &top);
|
||||
LLRect rect = gSavedSettings.getRect("PreviewTextureRect");
|
||||
rect.translate( left - rect.mLeft, top - rect.mTop );
|
||||
|
||||
LLPreviewTexture* preview;
|
||||
preview = new LLPreviewTexture("preview texture",
|
||||
rect,
|
||||
"Preview texture",
|
||||
item_id,
|
||||
LLUUID::null,
|
||||
FALSE);
|
||||
//preview->setSourceID(source_id);
|
||||
preview->setFocus(TRUE);
|
||||
|
||||
gFloaterView->adjustToFitScreen(preview, FALSE);
|
||||
}
|
||||
else if(type == LLAssetType::AT_GESTURE)
|
||||
{
|
||||
// If only the others were like this
|
||||
LLPreviewGesture::show("preview gesture", item_id, LLUUID::null, TRUE);
|
||||
}
|
||||
else if(type == LLAssetType::AT_LANDMARK)
|
||||
{
|
||||
S32 left, top;
|
||||
gFloaterView->getNewFloaterPosition(&left, &top);
|
||||
LLRect rect = gSavedSettings.getRect("PreviewLandmarkRect");
|
||||
rect.translate( left - rect.mLeft, top - rect.mTop );
|
||||
|
||||
LLPreviewLandmark* preview;
|
||||
preview = new LLPreviewLandmark("preview landmark",
|
||||
rect,
|
||||
"Preview landmark",
|
||||
item_id);
|
||||
preview->setFocus(TRUE);
|
||||
|
||||
gFloaterView->adjustToFitScreen(preview, FALSE);
|
||||
}
|
||||
else
|
||||
{
|
||||
llwarns << "Dunno how to open type " << type << llendl;
|
||||
}
|
||||
}
|
||||
|
||||
//static
|
||||
void LLLocalInventory::loadInvCache(std::string filename)
|
||||
{
|
||||
std::string extension = gDirUtilp->getExtension(filename);
|
||||
std::string inv_filename = filename;
|
||||
if(extension == "gz")
|
||||
{
|
||||
LLUUID random;
|
||||
random.generate();
|
||||
inv_filename = filename.substr(0, filename.length() - 3) + "." + random.asString();
|
||||
|
||||
if(!gunzip_file(filename, inv_filename))
|
||||
{
|
||||
// failure... message?
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
LLInventoryModel::cat_array_t cats;
|
||||
LLInventoryModel::item_array_t items;
|
||||
bool is_cache_obsolete = false;
|
||||
if(LLInventoryModel::loadFromFile(inv_filename, cats, items, is_cache_obsolete))
|
||||
{
|
||||
// create a container category for everything
|
||||
LLViewerInventoryCategory* container = new LLViewerInventoryCategory(gAgent.getID());
|
||||
container->rename(gDirUtilp->getBaseFileName(filename, false));
|
||||
LLUUID container_id;
|
||||
container_id.generate();
|
||||
container->setUUID(container_id);
|
||||
container->setParent(gSystemFolderRoot);
|
||||
container->setPreferredType(LLFolderType::FT_NONE);
|
||||
LLInventoryModel::update_map_t container_update;
|
||||
++container_update[container->getParentUUID()];
|
||||
gInventory.accountForUpdate(container_update);
|
||||
gInventory.updateCategory(container);
|
||||
gInventory.notifyObservers();
|
||||
|
||||
LLViewerInventoryCategory* orphaned_items = new LLViewerInventoryCategory(gAgent.getID());
|
||||
orphaned_items->rename("Orphaned Items");
|
||||
LLUUID orphaned_items_id;
|
||||
|
||||
orphaned_items_id.generate();
|
||||
orphaned_items->setUUID(orphaned_items_id);
|
||||
orphaned_items->setParent(container_id);
|
||||
orphaned_items->setPreferredType(LLFolderType::FT_NONE);
|
||||
|
||||
LLInventoryModel::update_map_t orphaned_items_update;
|
||||
++orphaned_items_update[orphaned_items->getParentUUID()];
|
||||
gInventory.accountForUpdate(orphaned_items_update);
|
||||
gInventory.updateCategory(orphaned_items);
|
||||
gInventory.notifyObservers();
|
||||
|
||||
//conflict handling
|
||||
std::map<LLUUID,LLUUID> conflicting_cats;
|
||||
int dropped_cats = 0;
|
||||
int dropped_items = 0;
|
||||
|
||||
// Add all categories
|
||||
LLInventoryModel::cat_array_t::iterator cat_iter = cats.begin();
|
||||
LLInventoryModel::cat_array_t::iterator cat_end = cats.end();
|
||||
for(; cat_iter != cat_end; ++cat_iter)
|
||||
{
|
||||
// Conditionally change its parent
|
||||
// Note: Should I search for missing parent id's?
|
||||
|
||||
//if the parent is null, it goes in the very root of the tree!
|
||||
if((*cat_iter)->getParentUUID().isNull())
|
||||
{
|
||||
(*cat_iter)->setParent(container_id);
|
||||
}
|
||||
// If the parent exists and outside of pretend inventory, generate a new uuid
|
||||
else if(gInventory.getCategory((*cat_iter)->getParentUUID()))
|
||||
{
|
||||
if(!gInventory.isObjectDescendentOf((*cat_iter)->getParentUUID(), gSystemFolderRoot, TRUE))
|
||||
{
|
||||
std::map<LLUUID,LLUUID>::iterator itr = conflicting_cats.find((*cat_iter)->getParentUUID());
|
||||
if(itr == conflicting_cats.end())
|
||||
{
|
||||
dropped_cats++;
|
||||
continue;
|
||||
}
|
||||
(*cat_iter)->setParent(itr->second);
|
||||
}
|
||||
} else {
|
||||
//well balls, this is orphaned.
|
||||
(*cat_iter)->setParent(orphaned_items_id);
|
||||
}
|
||||
// If this category already exists, generate a new uuid
|
||||
if(gInventory.getCategory((*cat_iter)->getUUID()))
|
||||
{
|
||||
LLUUID cat_random;
|
||||
cat_random.generate();
|
||||
conflicting_cats[(*cat_iter)->getUUID()] = cat_random;
|
||||
(*cat_iter)->setUUID(cat_random);
|
||||
}
|
||||
|
||||
LLInventoryModel::update_map_t update;
|
||||
++update[(*cat_iter)->getParentUUID()];
|
||||
gInventory.accountForUpdate(update);
|
||||
gInventory.updateCategory(*cat_iter);
|
||||
gInventory.notifyObservers();
|
||||
}
|
||||
|
||||
// Add all items
|
||||
LLInventoryModel::item_array_t::iterator item_iter = items.begin();
|
||||
LLInventoryModel::item_array_t::iterator item_end = items.end();
|
||||
for(; item_iter != item_end; ++item_iter)
|
||||
{
|
||||
// Conditionally change its parent
|
||||
// Note: Should I search for missing parent id's?
|
||||
|
||||
//if the parent is null, it goes in the very root of the tree!
|
||||
if((*item_iter)->getParentUUID().isNull())
|
||||
{
|
||||
(*item_iter)->setParent(container_id);
|
||||
}
|
||||
|
||||
// If the parent exists and outside of pretend inventory, generate a new uuid
|
||||
if(gInventory.getCategory((*item_iter)->getParentUUID()))
|
||||
{
|
||||
if(!gInventory.isObjectDescendentOf((*item_iter)->getParentUUID(), gSystemFolderRoot, TRUE))
|
||||
{
|
||||
std::map<LLUUID,LLUUID>::iterator itr = conflicting_cats.find((*item_iter)->getParentUUID());
|
||||
if(itr == conflicting_cats.end())
|
||||
{
|
||||
dropped_items++;
|
||||
continue;
|
||||
}
|
||||
(*item_iter)->setParent(itr->second);
|
||||
}
|
||||
} else {
|
||||
//well balls, this is orphaned.
|
||||
(*item_iter)->setParent(orphaned_items_id);
|
||||
}
|
||||
// Avoid conflicts with real inventory...
|
||||
// If this item id already exists, generate a new uuid
|
||||
if(gInventory.getItem((*item_iter)->getUUID()))
|
||||
{
|
||||
LLUUID item_random;
|
||||
item_random.generate();
|
||||
(*item_iter)->setUUID(item_random);
|
||||
}
|
||||
|
||||
LLInventoryModel::update_map_t update;
|
||||
++update[(*item_iter)->getParentUUID()];
|
||||
gInventory.accountForUpdate(update);
|
||||
gInventory.updateItem(*item_iter);
|
||||
gInventory.notifyObservers();
|
||||
}
|
||||
|
||||
// Quality time
|
||||
if(dropped_items || dropped_cats)
|
||||
{
|
||||
std::ostringstream message;
|
||||
message << "Some items were ignored due to conflicts:\n\n";
|
||||
if(dropped_cats) message << dropped_cats << " folders\n";
|
||||
if(dropped_items) message << dropped_items << " items\n";
|
||||
|
||||
LLSD args;
|
||||
args["ERROR_MESSAGE"] = message.str();
|
||||
LLNotificationsUtil::add("ErrorMessage", args);
|
||||
}
|
||||
conflicting_cats.clear();// srsly dont think this is need but w/e :D
|
||||
}
|
||||
|
||||
// remove temporary unzipped file
|
||||
if(extension == "gz")
|
||||
{
|
||||
LLFile::remove(inv_filename);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//static
|
||||
void LLLocalInventory::saveInvCache(std::string filename, LLFolderView* folder)
|
||||
{
|
||||
LLInventoryModel* model = &gInventory;
|
||||
std::set<LLUUID> selected_items = folder->getSelectionList();
|
||||
if(selected_items.size() < 1)
|
||||
{
|
||||
// No items selected? Wtfboom
|
||||
return;
|
||||
}
|
||||
LLInventoryModel::cat_array_t cats;
|
||||
LLInventoryModel::item_array_t items;
|
||||
// Make complete lists of child categories and items
|
||||
std::set<LLUUID>::iterator sel_iter = selected_items.begin();
|
||||
std::set<LLUUID>::iterator sel_end = selected_items.end();
|
||||
for( ; sel_iter != sel_end; ++sel_iter)
|
||||
{
|
||||
LLInventoryCategory* cat = model->getCategory(*sel_iter);
|
||||
if(cat)
|
||||
{
|
||||
climb(cat, cats, items);
|
||||
}
|
||||
}
|
||||
// And what about items inside a folder that wasn't selected?
|
||||
// I guess I will just add selected items, so long as they aren't already added
|
||||
for(sel_iter = selected_items.begin(); sel_iter != sel_end; ++sel_iter)
|
||||
{
|
||||
LLInventoryItem* item = model->getItem(*sel_iter);
|
||||
if(item)
|
||||
{
|
||||
if(std::find(items.begin(), items.end(), item) == items.end())
|
||||
{
|
||||
items.push_back(LLPointer<LLViewerInventoryItem>((LLViewerInventoryItem*)item));
|
||||
LLInventoryCategory* parent = model->getCategory(item->getParentUUID());
|
||||
if(std::find(cats.begin(), cats.end(), parent) == cats.end())
|
||||
{
|
||||
cats.push_back(LLPointer<LLViewerInventoryCategory>((LLViewerInventoryCategory*)parent));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
LLInventoryModel::saveToFile(filename, cats, items);
|
||||
}
|
||||
|
||||
// static
|
||||
void LLLocalInventory::climb(LLInventoryCategory* cat,
|
||||
LLInventoryModel::cat_array_t& cats,
|
||||
LLInventoryModel::item_array_t& items)
|
||||
{
|
||||
LLInventoryModel* model = &gInventory;
|
||||
|
||||
// Add this category
|
||||
cats.push_back(LLPointer<LLViewerInventoryCategory>((LLViewerInventoryCategory*)cat));
|
||||
|
||||
LLInventoryModel::cat_array_t *direct_cats;
|
||||
LLInventoryModel::item_array_t *direct_items;
|
||||
model->getDirectDescendentsOf(cat->getUUID(), direct_cats, direct_items);
|
||||
|
||||
// Add items
|
||||
LLInventoryModel::item_array_t::iterator item_iter = direct_items->begin();
|
||||
LLInventoryModel::item_array_t::iterator item_end = direct_items->end();
|
||||
for( ; item_iter != item_end; ++item_iter)
|
||||
{
|
||||
items.push_back(*item_iter);
|
||||
}
|
||||
|
||||
// Do subcategories
|
||||
LLInventoryModel::cat_array_t::iterator cat_iter = direct_cats->begin();
|
||||
LLInventoryModel::cat_array_t::iterator cat_end = direct_cats->end();
|
||||
for( ; cat_iter != cat_end; ++cat_iter)
|
||||
{
|
||||
climb(*cat_iter, cats, items);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
LLUUID LLFloaterNewLocalInventory::sLastCreatorId = LLUUID::null;
|
||||
|
||||
LLFloaterNewLocalInventory::LLFloaterNewLocalInventory()
|
||||
: LLFloater()
|
||||
{
|
||||
LLUICtrlFactory::getInstance()->buildFloater(this, "floater_new_local_inventory.xml");
|
||||
}
|
||||
|
||||
LLFloaterNewLocalInventory::~LLFloaterNewLocalInventory()
|
||||
{
|
||||
}
|
||||
|
||||
BOOL LLFloaterNewLocalInventory::postBuild(void)
|
||||
{
|
||||
// Fill in default values
|
||||
|
||||
getChild<LLLineEditor>("creator_id_line")->setText(std::string("00000000-0000-0000-0000-000000000000"));
|
||||
getChild<LLLineEditor>("owner_id_line")->setText(gAgent.getID().asString());
|
||||
getChild<LLLineEditor>("asset_id_line")->setText(std::string("00000000-0000-0000-0000-000000000000"));
|
||||
getChild<LLLineEditor>("name_line")->setText(std::string(""));
|
||||
getChild<LLLineEditor>("desc_line")->setText(std::string(""));
|
||||
|
||||
// Set up callbacks
|
||||
|
||||
childSetAction("ok_btn", onClickOK, this);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterNewLocalInventory::onClickOK(void* user_data)
|
||||
{
|
||||
LLFloaterNewLocalInventory* floater = (LLFloaterNewLocalInventory*)user_data;
|
||||
|
||||
LLUUID item_id;
|
||||
item_id.generate();
|
||||
|
||||
std::string name = floater->getChild<LLLineEditor>("name_line")->getText();
|
||||
std::string desc = floater->getChild<LLLineEditor>("desc_line")->getText();
|
||||
LLUUID asset_id = LLUUID(floater->getChild<LLLineEditor>("asset_id_line")->getText());
|
||||
LLUUID creator_id = LLUUID(floater->getChild<LLLineEditor>("creator_id_line")->getText());
|
||||
LLUUID owner_id = LLUUID(floater->getChild<LLLineEditor>("owner_id_line")->getText());
|
||||
|
||||
LLAssetType::EType type = LLAssetType::lookup(floater->getChild<LLComboBox>("type_combo")->getValue().asString());
|
||||
LLInventoryType::EType inv_type = LLInventoryType::IT_NONE;
|
||||
switch(type)
|
||||
{
|
||||
case LLAssetType::AT_TEXTURE:
|
||||
case LLAssetType::AT_TEXTURE_TGA:
|
||||
case LLAssetType::AT_IMAGE_TGA:
|
||||
case LLAssetType::AT_IMAGE_JPEG:
|
||||
inv_type = LLInventoryType::IT_TEXTURE;
|
||||
break;
|
||||
case LLAssetType::AT_SOUND:
|
||||
case LLAssetType::AT_SOUND_WAV:
|
||||
inv_type = LLInventoryType::IT_SOUND;
|
||||
break;
|
||||
case LLAssetType::AT_CALLINGCARD:
|
||||
inv_type = LLInventoryType::IT_CALLINGCARD;
|
||||
break;
|
||||
case LLAssetType::AT_LANDMARK:
|
||||
inv_type = LLInventoryType::IT_LANDMARK;
|
||||
break;
|
||||
case LLAssetType::AT_SCRIPT:
|
||||
inv_type = LLInventoryType::IT_LSL;
|
||||
break;
|
||||
case LLAssetType::AT_CLOTHING:
|
||||
inv_type = LLInventoryType::IT_WEARABLE;
|
||||
break;
|
||||
case LLAssetType::AT_OBJECT:
|
||||
inv_type = LLInventoryType::IT_OBJECT;
|
||||
break;
|
||||
case LLAssetType::AT_NOTECARD:
|
||||
inv_type = LLInventoryType::IT_NOTECARD;
|
||||
break;
|
||||
case LLAssetType::AT_CATEGORY:
|
||||
inv_type = LLInventoryType::IT_CATEGORY;
|
||||
break;
|
||||
//No longer asset types.
|
||||
/*case LLFolderType::FT_ROOT_CATEGORY:
|
||||
case LLFolderType::FT_TRASH:
|
||||
case LLFolderType::FT_SNAPSHOT_CATEGORY:
|
||||
case LLFolderType::FT_LOST_AND_FOUND:
|
||||
inv_type = LLInventoryType::IT_ROOT_CATEGORY;
|
||||
break;*/
|
||||
case LLAssetType::AT_LSL_TEXT:
|
||||
case LLAssetType::AT_LSL_BYTECODE:
|
||||
inv_type = LLInventoryType::IT_LSL;
|
||||
break;
|
||||
case LLAssetType::AT_BODYPART:
|
||||
inv_type = LLInventoryType::IT_WEARABLE;
|
||||
break;
|
||||
case LLAssetType::AT_ANIMATION:
|
||||
inv_type = LLInventoryType::IT_ANIMATION;
|
||||
break;
|
||||
case LLAssetType::AT_GESTURE:
|
||||
inv_type = LLInventoryType::IT_GESTURE;
|
||||
break;
|
||||
//case LLAssetType::AT_SIMSTATE:
|
||||
default:
|
||||
//inv_type = LLInventoryType::IT_CALLINGCARD;
|
||||
break;
|
||||
}
|
||||
|
||||
if(inv_type == LLInventoryType::IT_NONE)
|
||||
return;
|
||||
|
||||
LLPermissions* perms = new LLPermissions();
|
||||
perms->init(creator_id, owner_id, LLUUID::null, LLUUID::null);
|
||||
|
||||
LLViewerInventoryItem* item = new LLViewerInventoryItem(
|
||||
item_id,
|
||||
gSystemFolderRoot,
|
||||
*perms,
|
||||
asset_id,
|
||||
type,
|
||||
inv_type,
|
||||
name,
|
||||
desc,
|
||||
LLSaleInfo::DEFAULT,
|
||||
0,
|
||||
0);
|
||||
|
||||
LLLocalInventory::addItem(item);
|
||||
if(floater->childGetValue("chk_open"))
|
||||
{
|
||||
LLLocalInventory::open(item_id);
|
||||
}
|
||||
|
||||
LLFloaterNewLocalInventory::sLastCreatorId = creator_id;
|
||||
floater->close();
|
||||
}
|
||||
|
||||
|
||||
|
||||
// </edit>
|
||||
@@ -1,45 +0,0 @@
|
||||
// <edit>
|
||||
#ifndef LL_LLLOCALINVENTORY_H
|
||||
#define LL_LLLOCALINVENTORY_H
|
||||
|
||||
#include "llviewerinventory.h"
|
||||
|
||||
#include "llfloater.h"
|
||||
|
||||
#include "llfolderview.h"
|
||||
#include "llinventorymodel.h" // cat_array_t, item_array_t
|
||||
|
||||
class LLLocalInventory
|
||||
{
|
||||
public:
|
||||
static LLUUID addItem(std::string name, int type, LLUUID asset_id, bool open);
|
||||
static LLUUID addItem(std::string name, int type, LLUUID asset_id);
|
||||
static void addItem(LLViewerInventoryItem* item);
|
||||
static void open(LLUUID item_id);
|
||||
static void loadInvCache(std::string filename);
|
||||
static void saveInvCache(std::string filename, LLFolderView* folder);
|
||||
static void climb(LLInventoryCategory* cat,
|
||||
LLInventoryModel::cat_array_t& cats,
|
||||
LLInventoryModel::item_array_t& items);
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
class LLFloaterNewLocalInventory
|
||||
: public LLFloater
|
||||
{
|
||||
public:
|
||||
LLFloaterNewLocalInventory();
|
||||
BOOL postBuild(void);
|
||||
|
||||
static void onClickOK(void* user_data);
|
||||
static LLUUID sLastCreatorId;
|
||||
|
||||
private:
|
||||
virtual ~LLFloaterNewLocalInventory();
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
// </edit>
|
||||
@@ -2193,41 +2193,6 @@ bool idle_startup()
|
||||
}
|
||||
display_startup();
|
||||
|
||||
// <edit> testing adding a local inventory folder...
|
||||
if (gSavedSettings.getBOOL("AscentUseSystemFolder"))
|
||||
{
|
||||
LLViewerInventoryCategory* system_folder = new LLViewerInventoryCategory(gAgent.getID());
|
||||
system_folder->rename(std::string("System Inventory"));
|
||||
LLUUID system_folder_id = LLUUID("00000000-0000-0000-0000-000000000001");//"FFFFFFFF-0000-F113-7357-000000000001");
|
||||
system_folder->setUUID(system_folder_id);
|
||||
gSystemFolderRoot = system_folder_id;
|
||||
system_folder->setParent(LLUUID::null);
|
||||
system_folder->setPreferredType(LLFolderType::FT_NONE);
|
||||
gInventory.addCategory(system_folder);
|
||||
|
||||
LLViewerInventoryCategory* settings_folder = new LLViewerInventoryCategory(gAgent.getID());
|
||||
settings_folder->rename(std::string("Settings"));
|
||||
LLUUID settings_folder_id;
|
||||
settings_folder_id.generate();
|
||||
settings_folder->setUUID(settings_folder_id);
|
||||
gSystemFolderSettings = settings_folder_id;
|
||||
settings_folder->setParent(gSystemFolderRoot);
|
||||
settings_folder->setPreferredType(LLFolderType::FT_NONE);
|
||||
gInventory.addCategory(settings_folder);
|
||||
|
||||
LLViewerInventoryCategory* assets_folder = new LLViewerInventoryCategory(gAgent.getID());
|
||||
assets_folder->rename(std::string("Assets"));
|
||||
LLUUID assets_folder_id;
|
||||
assets_folder_id.generate();
|
||||
assets_folder->setUUID(assets_folder_id);
|
||||
gSystemFolderAssets = assets_folder_id;
|
||||
assets_folder->setParent(gSystemFolderRoot);
|
||||
assets_folder->setPreferredType(LLFolderType::FT_NONE);
|
||||
gInventory.addCategory(assets_folder);
|
||||
}
|
||||
display_startup();
|
||||
// </edit>
|
||||
|
||||
LLSD buddy_list = response["buddy-list"];
|
||||
if(buddy_list.isDefined())
|
||||
{
|
||||
|
||||
@@ -70,7 +70,6 @@
|
||||
#include "lltrans.h"
|
||||
// <edit>
|
||||
#include "llmenugl.h"
|
||||
#include "lllocalinventory.h"
|
||||
// </edit>
|
||||
|
||||
// tag: vaa emerald local_asset_browser [begin]
|
||||
|
||||
@@ -1512,10 +1512,9 @@ EAcceptance LLToolDragAndDrop::willObjectAcceptInventory(LLViewerObject* obj, LL
|
||||
if(!item || !obj) return ACCEPT_NO;
|
||||
// HACK: downcast
|
||||
LLViewerInventoryItem* vitem = (LLViewerInventoryItem*)item;
|
||||
// <edit>
|
||||
//if(!vitem->isFinished()) return ACCEPT_NO;
|
||||
if(!vitem->isFinished() && !(gInventory.isObjectDescendentOf(vitem->getUUID(), gSystemFolderRoot))) return ACCEPT_NO;
|
||||
// </edit>
|
||||
|
||||
if(!vitem->isFinished()) return ACCEPT_NO;
|
||||
|
||||
if (vitem->getIsLinkType()) return ACCEPT_NO; // No giving away links
|
||||
|
||||
// deny attempts to drop from an object onto itself. This is to
|
||||
@@ -1980,10 +1979,9 @@ EAcceptance LLToolDragAndDrop::dad3dApplyToObject(
|
||||
LLViewerInventoryItem* item;
|
||||
LLViewerInventoryCategory* cat;
|
||||
locateInventory(item, cat);
|
||||
// <edit>
|
||||
//if(!item || !item->isFinished()) return ACCEPT_NO;
|
||||
if( !item || (!item->isFinished() && !(gInventory.isObjectDescendentOf(item->getUUID(), gSystemFolderRoot))) ) return ACCEPT_NO;
|
||||
// </edit>
|
||||
|
||||
if(!item || !item->isFinished()) return ACCEPT_NO;
|
||||
|
||||
EAcceptance rv = willObjectAcceptInventory(obj, item);
|
||||
if((mask & MASK_CONTROL))
|
||||
{
|
||||
|
||||
@@ -293,9 +293,6 @@ void LLViewerInventoryItem::cloneViewerItem(LLPointer<LLViewerInventoryItem>& ne
|
||||
|
||||
void LLViewerInventoryItem::removeFromServer()
|
||||
{
|
||||
// <edit> this check is ghetto
|
||||
if((mParentUUID == gSystemFolderRoot) || (gInventory.isObjectDescendentOf(mUUID, gSystemFolderRoot))) return;
|
||||
// </edit>
|
||||
lldebugs << "Removing inventory item " << mUUID << " from server."
|
||||
<< llendl;
|
||||
|
||||
@@ -314,9 +311,6 @@ void LLViewerInventoryItem::removeFromServer()
|
||||
|
||||
void LLViewerInventoryItem::updateServer(BOOL is_new) const
|
||||
{
|
||||
// <edit>
|
||||
if((mParentUUID == gSystemFolderRoot) || (gInventory.isObjectDescendentOf(mUUID, gSystemFolderRoot))) return;
|
||||
// </edit>
|
||||
if(!mIsComplete)
|
||||
{
|
||||
// *FIX: deal with this better.
|
||||
@@ -492,9 +486,6 @@ bool LLViewerInventoryItem::exportFileLocal(LLFILE* fp) const
|
||||
|
||||
void LLViewerInventoryItem::updateParentOnServer(BOOL restamp) const
|
||||
{
|
||||
// <edit>
|
||||
if(gInventory.isObjectDescendentOf(mUUID, gSystemFolderRoot)) return;
|
||||
// </edit>
|
||||
LLMessageSystem* msg = gMessageSystem;
|
||||
msg->newMessageFast(_PREHASH_MoveInventoryItem);
|
||||
msg->nextBlockFast(_PREHASH_AgentData);
|
||||
@@ -564,9 +555,6 @@ void LLViewerInventoryCategory::copyViewerCategory(const LLViewerInventoryCatego
|
||||
|
||||
void LLViewerInventoryCategory::updateParentOnServer(BOOL restamp) const
|
||||
{
|
||||
// <edit>
|
||||
if(gInventory.isObjectDescendentOf(mUUID, gSystemFolderRoot)) return;
|
||||
// </edit>
|
||||
LLMessageSystem* msg = gMessageSystem;
|
||||
msg->newMessageFast(_PREHASH_MoveInventoryFolder);
|
||||
msg->nextBlockFast(_PREHASH_AgentData);
|
||||
@@ -631,9 +619,6 @@ void LLViewerInventoryCategory::removeFromServer( void )
|
||||
|
||||
bool LLViewerInventoryCategory::fetch()
|
||||
{
|
||||
// <edit>
|
||||
if((mUUID == gSystemFolderRoot) || (gInventory.isObjectDescendentOf(mUUID, gSystemFolderRoot))) return false;
|
||||
// </edit>
|
||||
if((VERSION_UNKNOWN == getVersion()) &&
|
||||
(!mDescendentsRequested.getStarted() ||
|
||||
mDescendentsRequested.hasExpired())) //Expired check prevents multiple downloads.
|
||||
|
||||
@@ -1,135 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<floater can_close="true" can_drag_on_left="false" can_minimize="true"
|
||||
can_resize="false" height="160" min_height="160" min_width="100"
|
||||
name="item properties"
|
||||
title="Inventory Item Properties" width="350">
|
||||
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
||||
bottom="-35" drop_shadow_visible="true" follows="left|top"
|
||||
font="SansSerifSmall" h_pad="0" halign="left" height="10" left="10"
|
||||
mouse_opaque="true" name="LabelItemNameTitle" v_pad="0" width="78">
|
||||
Name:
|
||||
</text>
|
||||
<line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-41"
|
||||
enabled="true" follows="left|top|right" font="SansSerifSmall" height="16"
|
||||
is_unicode="false" left="88" max_length="63" mouse_opaque="true"
|
||||
name="name_line" width="252" />
|
||||
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
||||
bottom="-55" drop_shadow_visible="true" follows="left|top"
|
||||
font="SansSerifSmall" h_pad="0" halign="left" height="10" left="10"
|
||||
mouse_opaque="true" name="LabelItemDescTitle" v_pad="0" width="78">
|
||||
Description:
|
||||
</text>
|
||||
<line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-61"
|
||||
enabled="true" follows="left|top|right" font="SansSerifSmall" height="16"
|
||||
is_unicode="false" left="88" max_length="127" mouse_opaque="true"
|
||||
name="desc_line" width="252" />
|
||||
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
||||
bottom_delta="-20" drop_shadow_visible="true" follows="left|top"
|
||||
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="10"
|
||||
mouse_opaque="true" name="LabelAssetTitle" v_pad="0" width="78">
|
||||
Asset:
|
||||
</text>
|
||||
<line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="0"
|
||||
enabled="true" follows="left|top|right" font="SansSerifSmall" height="16"
|
||||
is_unicode="false" left="88" max_length="127" mouse_opaque="true"
|
||||
name="asset_id_line" width="252" />
|
||||
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
||||
bottom_delta="-20" drop_shadow_visible="true" follows="left|top"
|
||||
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="10"
|
||||
mouse_opaque="true" name="LabelCreatorTitle" v_pad="0" width="78">
|
||||
Creator:
|
||||
</text>
|
||||
<line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="0"
|
||||
enabled="true" follows="left|top|right" font="SansSerifSmall" height="16"
|
||||
is_unicode="false" left="88" max_length="127" mouse_opaque="true"
|
||||
name="creator_id_line" width="252" />
|
||||
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
||||
bottom_delta="-20" drop_shadow_visible="true" follows="left|top"
|
||||
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="10"
|
||||
mouse_opaque="true" name="LabelOwnerTitle" v_pad="0" width="78">
|
||||
Owner:
|
||||
</text>
|
||||
<line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="0"
|
||||
enabled="true" follows="left|top|right" font="SansSerifSmall" height="16"
|
||||
is_unicode="false" left="88" max_length="127" mouse_opaque="true"
|
||||
name="owner_id_line" width="252" />
|
||||
|
||||
<combo_box allow_text_entry="false" bottom_delta="-25" follows="left|top" height="18"
|
||||
left="10" max_chars="20" mouse_opaque="true" name="type_combo"
|
||||
width="100">
|
||||
<combo_item name="texture" value="texture">
|
||||
texture
|
||||
</combo_item>
|
||||
<combo_item name="sound" value="sound">
|
||||
sound
|
||||
</combo_item>
|
||||
<combo_item name="callcard" value="callcard">
|
||||
callcard
|
||||
</combo_item>
|
||||
<combo_item name="landmark" value="landmark">
|
||||
landmark
|
||||
</combo_item>
|
||||
<combo_item name="script" value="script">
|
||||
script
|
||||
</combo_item>
|
||||
<combo_item name="clothing" value="clothing">
|
||||
clothing
|
||||
</combo_item>
|
||||
<combo_item name="object" value="object">
|
||||
object
|
||||
</combo_item>
|
||||
<combo_item name="notecard" value="notecard">
|
||||
notecard
|
||||
</combo_item>
|
||||
<combo_item name="category" value="category">
|
||||
category
|
||||
</combo_item>
|
||||
<combo_item name="root" value="root">
|
||||
root
|
||||
</combo_item>
|
||||
<combo_item name="lsltext" value="lsltext">
|
||||
lsltext
|
||||
</combo_item>
|
||||
<combo_item name="lslbyte" value="lslbyte">
|
||||
lslbyte
|
||||
</combo_item>
|
||||
<combo_item name="txtr_tga" value="txtr_tga">
|
||||
txtr_tga
|
||||
</combo_item>
|
||||
<combo_item name="bodypart" value="bodypart">
|
||||
bodypart
|
||||
</combo_item>
|
||||
<combo_item name="trash" value="trash">
|
||||
trash
|
||||
</combo_item>
|
||||
<combo_item name="snapshot" value="snapshot">
|
||||
snapshot
|
||||
</combo_item>
|
||||
<combo_item name="lstndfnd" value="lstndfnd">
|
||||
lstndfnd
|
||||
</combo_item>
|
||||
<combo_item name="snd_wav" value="snd_wav">
|
||||
snd_wav
|
||||
</combo_item>
|
||||
<combo_item name="img_tga" value="img_tga">
|
||||
img_tga
|
||||
</combo_item>
|
||||
<combo_item name="jpeg" value="jpeg">
|
||||
jpeg
|
||||
</combo_item>
|
||||
<combo_item name="animatn" value="animatn">
|
||||
animatn
|
||||
</combo_item>
|
||||
<combo_item name="gesture" value="gesture">
|
||||
gesture
|
||||
</combo_item>
|
||||
<combo_item name="simstate" value="simstate">
|
||||
simstate
|
||||
</combo_item>
|
||||
</combo_box>
|
||||
<check_box bottom_delta="0" height="16" initial_value="true" label="Open immediately"
|
||||
left="115" mouse_opaque="true" name="chk_open" width="120" />
|
||||
<button bottom_delta="0" font="SansSerif"
|
||||
height="20" label="OK" left="240"
|
||||
mouse_opaque="true" name="ok_btn" width="100" />
|
||||
</floater>
|
||||
@@ -28,10 +28,6 @@
|
||||
label="Enable Power User functionality" tool_tip="Adds features deemed too dangerous for normal use. These features can wreak havoc or do bad things if misused - Mostly to yourself or your belongings. If you're sure, activate the checkbox below as well." name="power_user_check"/>
|
||||
<check_box bottom_delta="-18" enabled="true" follows="top" left="20" initial_value="true"
|
||||
label="Confirm Power User functionality" tool_tip="Confirms Power User activation. Turn this on at your own risk, and use any features it enables responsibly. Singularity devs won't replace anything you break. We recommend having a backup copy of anything to be victim to these powers. Unlike most checkboxes, you must click Apply or OK before this will activate." name="power_user_confirm_check"/>
|
||||
<check_box bottom_delta="-18" control_name="AscentUseSystemFolder" follows="top" left="10" initial_value="true"
|
||||
label="Enable Ascent System Inventory (Requires Restart)" tool_tip="Creates a new folder in the inventory for storing settings files and non-permanent assets." name="system_folder_check"/>
|
||||
<check_box bottom_delta="-18" control_name="AscentSystemTemporary" follows="top" left="20" initial_value="false"
|
||||
label="Temporary uploads go in the System Asset folder." tool_tip="Puts temporary uploads in the Asset folder which separates them from actual uploads, making them easier to find." name="temp_in_system_check"/>
|
||||
<check_box bottom_delta="-18" control_name="FetchInventoryOnLogin" follows="top" left="10" initial_value="true"
|
||||
label="Automatically fetch the inventory in the background after login" tool_tip="Inventory will preload when you log in, so you don't have to wait for it to load when doing an initial search." name="fetch_inventory_on_login_check"/>
|
||||
<check_box bottom_delta="-18" control_name="WindEnabled" follows="left|top" initial_value="false" label="Enable Wind Effects" name="enable_wind"/>
|
||||
|
||||
@@ -1,91 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<floater name="item properties" title="Propiedades de los Items del Inventario">
|
||||
<text name="LabelItemNameTitle">
|
||||
Nombre:
|
||||
</text>
|
||||
<text name="LabelItemDescTitle">
|
||||
Descripción:
|
||||
</text>
|
||||
<text name="LabelAssetTitle">
|
||||
Asset:
|
||||
</text>
|
||||
<text name="LabelCreatorTitle">
|
||||
Creador:
|
||||
</text>
|
||||
<text name="LabelOwnerTitle">
|
||||
Propietario:
|
||||
</text>
|
||||
<combo_box name="type_combo">
|
||||
<combo_item name="texture">
|
||||
Textura
|
||||
</combo_item>
|
||||
<combo_item name="sound">
|
||||
Sonido
|
||||
</combo_item>
|
||||
<combo_item name="callcard">
|
||||
Tarjeta de llamada
|
||||
</combo_item>
|
||||
<combo_item name="landmark">
|
||||
Hito
|
||||
</combo_item>
|
||||
<combo_item name="script">
|
||||
Script
|
||||
</combo_item>
|
||||
<combo_item name="clothing">
|
||||
Ropa
|
||||
</combo_item>
|
||||
<combo_item name="object">
|
||||
Objeto
|
||||
</combo_item>
|
||||
<combo_item name="notecard">
|
||||
Nota
|
||||
</combo_item>
|
||||
<combo_item name="category">
|
||||
Categoría
|
||||
</combo_item>
|
||||
<combo_item name="root">
|
||||
Raíz
|
||||
</combo_item>
|
||||
<combo_item name="lsltext">
|
||||
lsltext
|
||||
</combo_item>
|
||||
<combo_item name="lslbyte">
|
||||
lslbyte
|
||||
</combo_item>
|
||||
<combo_item name="txtr_tga">
|
||||
txtr_tga
|
||||
</combo_item>
|
||||
<combo_item name="bodypart">
|
||||
Parte de cuerpo
|
||||
</combo_item>
|
||||
<combo_item name="trash">
|
||||
Papelera
|
||||
</combo_item>
|
||||
<combo_item name="snapshot">
|
||||
Foto
|
||||
</combo_item>
|
||||
<combo_item name="lstndfnd">
|
||||
lstndfnd
|
||||
</combo_item>
|
||||
<combo_item name="snd_wav">
|
||||
Sonido_wav
|
||||
</combo_item>
|
||||
<combo_item name="img_tga">
|
||||
Imagen tga
|
||||
</combo_item>
|
||||
<combo_item name="jpeg">
|
||||
jpeg
|
||||
</combo_item>
|
||||
<combo_item name="animatn">
|
||||
Animación
|
||||
</combo_item>
|
||||
<combo_item name="gesture">
|
||||
Gesto
|
||||
</combo_item>
|
||||
<combo_item name="simstate">
|
||||
simstate
|
||||
</combo_item>
|
||||
</combo_box>
|
||||
<check_box label="Abrir inmediatamente" name="chk_open"/>
|
||||
<button label="OK" name="ok_btn"/>
|
||||
</floater>
|
||||
@@ -16,8 +16,6 @@
|
||||
<check_box label="Deshabilitar la Distancia Mínima de la Cámara" tool_tip="Permite a la cámara acercarse a los objetos." name="disable_camera_zoom_check"/>
|
||||
<check_box label="Habilitar la funcionalidad Super Usuario" tool_tip="Agrega funciones consideradas demasiado peligrosas para un uso normal. Estas características pueden causar estragos, o hacer daño si son mal utilizadas - Principalmente para ti o tus pertenencias. Si estás seguro, activa la casilla de verificación a continuación." name="power_user_check"/>
|
||||
<check_box label="Confirmar funcionalidad Super Usuario" tool_tip="Confirmar la activación de Super Usuario. Activalo bajo tu propio riesgo, y utiliza cualquier característica habilitada en forma responsable. Los desarrolladores de Singularity no reemplazarán nada que hayas arruinado. Te recomendamos hacer una copia de seguridad de todo aquello que será víctima de dichos poderes. A diferencia del resto de los items a marcar, debes hacer click en Aplicar o en OK después de activar esta función." name="power_user_confirm_check"/>
|
||||
<check_box label="Activar Sistema Ascent de Inventario (Requiere Reinicio)" tool_tip="Crea una nueva carpeta en el inventario para almacenar archivos de configuración y assets no permanentes." name="system_folder_check"/>
|
||||
<check_box label="Colocar las Subidas Temporales en la carpeta de asset del sistema." tool_tip="Coloca las subidas temporales en la carpeta de Assets, la cual está separada de las subidas actuales, haciendo que sean más fáciles de encontrar." name="temp_in_system_check"/>
|
||||
<check_box label="Descargar automáticamente el inventario en segundo plano al de iniciar sesión" tool_tip="El inventario será precargado cuando inicies sesión, de esta manera no tienes que esperar que cargue cuando hagas una búsqueda por primera vez." name="fetch_inventory_on_login_check"/>
|
||||
<check_box label="Activar Efectos del Viento" name="enable_wind"/>
|
||||
<check_box label="Activar Nubes" name="enable_clouds"/>
|
||||
|
||||
@@ -16,8 +16,6 @@
|
||||
<check_box label="Désactiver la distance minimum de la caméra" tool_tip="La caméra zoome de trés près." name="disable_camera_zoom_check"/>
|
||||
<check_box label="Activer les fonctions Power User - à vos risques et périls !" tool_tip="Ajoute des fonctions considérées trop dangereuses pour une utilisation normale. Ces fonctions peuvent faire des ravages si employées improprement." name="power_user_check"/>
|
||||
<check_box label="Confirmer les fonctions Power User" tool_tip="Confirme les fonctions Power User. A vos risques et périls. Singularity n'est pas responsable de cette utilisation." name="power_user_confirm_check"/>
|
||||
<check_box label="Activer l'Ascent System Inventory (Redémarrage nécessaire)" tool_tip="Crée un nouveau dossier dans l'inventaire afin de stocker les fichiers de settings et les assets non permanents." name="system_folder_check"/>
|
||||
<check_box label="Les téléchargements temporaires vont dans le dossier : System Inventory > Assets" tool_tip="Place les téléchargements temporaires dans le dossier : System Inventory > Assets ce qui permet de les retrouver plus aisément" name="temp_in_system_check"/>
|
||||
<check_box label="Précharger l'inventaire à la connection" tool_tip="Réduit l'attente lors de votre recherche initiale dans l'inventaire" name="fetch_inventory_on_login_check"/>
|
||||
<check_box label="Activer les effets de vent" name="enable_wind"/>
|
||||
<check_box label="Activer les nuages" name="enable_clouds"/>
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user