Files
SingularityViewer/indra/newview/llviewerobjectbackup.h

238 lines
6.4 KiB
C++

/**
* @file llviewerobjectbackup.h
*
* $LicenseInfo:firstyear=2007&license=viewergpl$
*
* 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_LLVIEWEROBJECTBACKUP_H
#define LL_LLVIEWEROBJECTBACKUP_H
#include <deque>
#include <string>
#include <vector>
#include "boost/unordered_map.hpp"
#include "boost/unordered_set.hpp"
#include "llfloater.h"
#include "statemachine/aifilepicker.h"
#include "lluuid.h"
#include "llviewerinventory.h"
#include "llviewerobject.h"
class LLSelectNode;
class LLViewerObject;
enum export_states {
EXPORT_INIT,
EXPORT_CHECK_PERMS,
EXPORT_FETCH_PHYSICS,
EXPORT_STRUCTURE,
EXPORT_TEXTURES,
EXPORT_LLSD,
EXPORT_DONE,
EXPORT_FAILED,
EXPORT_ABORTED
};
class LLObjectBackup : public LLFloater,
public LLFloaterSingleton<LLObjectBackup>
{
friend class LLUISingleton<LLObjectBackup, VisibilityPolicy<LLFloater> >;
protected:
LOG_CLASS(LLObjectBackup);
public:
///////////////////////////////////////////////////////////////////////////
// LLFloater interface
/*virtual*/ ~LLObjectBackup();
/*virtual*/ void onClose(bool app_quitting);
///////////////////////////////////////////////////////////////////////////
// Public interface for invoking the object backup feature
// Import entry point
void importObject(bool upload = false);
void importObject_continued(AIFilePicker* filepicker);
// Export entry point
void exportObject();
void exportObject_continued(AIFilePicker* filepicker);
///////////////////////////////////////////////////////////////////////////
// Public methods used in callbacks, workers and responders
// Update map from texture worker
void updateMap(LLUUID uploaded_asset);
// Move to next texture upload, called by the agent inventory responder
void uploadNextAsset();
// Export idle callback
static void exportWorker(void *userdata);
// Prim updated callback, called in llviewerobjectlist.cpp
static void primUpdate(LLViewerObject* object);
// New prim call back, called in llviewerobjectlist.cpp
static void newPrim(LLViewerObject* object);
// Folder public getter, used by the texture cache responder
std::string getFolder() { return mFolder; }
static void setDefaultTextures();
// Permissions checking
static bool validatePerms(const LLPermissions* item_permissions);
static bool validateTexturePerms(const LLUUID& asset_id);
static bool validateNode(LLSelectNode* node);
private:
// Open only via the importObject() and exportObject() methods defined
// above.
LLObjectBackup(const LLSD&);
void showFloater(bool exporting);
static bool confirmCloseCallback(const LLSD& notification,
const LLSD& response);
// Update the floater with status numbers
void updateImportNumbers();
void updateExportNumbers();
// Permissions stuff.
LLUUID validateTextureID(const LLUUID& asset_id);
// Convert a selection list of objects to LLSD
LLSD primsToLLSD(LLViewerObject::child_list_t child_list,
bool is_attachment);
// Start the import process
void importFirstObject();
// Move to the next import group
void importNextObject();
// Export the next texture in list
void exportNextTexture();
// Apply LLSD to object
void xmlToPrim(LLSD prim_llsd, LLViewerObject* object);
// Rez a prim at a given position
void rezAgentOffset(LLVector3 offset);
// Get an offset from the agent based on rotation and current pos
LLVector3 offsetAgent(LLVector3 offset);
public:
// Public static constants, used in callbacks, workers and responders
static const U32 TEXTURE_OK = 0x00;
static const U32 TEXTURE_BAD_PERM = 0x01;
static const U32 TEXTURE_MISSING = 0x02;
static const U32 TEXTURE_BAD_ENCODING = 0x04;
static const U32 TEXTURE_IS_NULL = 0x08;
static const U32 TEXTURE_SAVED_FAILED = 0x10;
// Export state machine
enum export_states mExportState;
// Export result flags for textures.
U32 mNonExportedTextures;
// Set when the region supports the extra physics flags
bool mGotExtraPhysics;
// Are we ready to check for next texture?
bool mCheckNextTexture;
private:
// Are we active flag
bool mRunning;
// True if we need to rebase the assets
bool mRetexture;
// Counts of import and export objects and prims
U32 mObjects;
U32 mCurObject;
U32 mPrims;
U32 mCurPrim;
// Number of rezzed prims
U32 mRezCount;
// Root pos and rotation and central root pos for link set
LLVector3 mRootPos;
LLQuaternion mRootRot;
LLVector3 mRootRootPos;
LLVector3 mGroupOffset;
// Agent inital pos and rot when starting import
LLVector3 mAgentPos;
LLQuaternion mAgentRot;
LLUUID mCurrentAsset;
LLUUID mExpectingUpdate;
// Working llsd iterators for objects and linksets
LLSD::map_const_iterator mPrimImportIter;
LLSD::array_const_iterator mGroupPrimImportIter;
// File and folder name control
std::string mFileName;
std::string mFolder;
// Export texture list
typedef uuid_set_t textures_set_t;
textures_set_t mTexturesList;
textures_set_t mBadPermsTexturesList;
// Rebase map
boost::unordered_map<LLUUID, LLUUID> mAssetMap;
// Import object tracking
std::vector<LLViewerObject*> mToSelect;
std::vector<LLViewerObject*>::iterator mProcessIter;
// Working LLSD holders
LLSD mLLSD;
LLSD mThisGroup;
};
extern LLUUID LL_TEXTURE_PLYWOOD;
extern LLUUID LL_TEXTURE_BLANK;
extern LLUUID LL_TEXTURE_INVISIBLE;
extern LLUUID LL_TEXTURE_TRANSPARENT;
extern LLUUID LL_TEXTURE_MEDIA;
#endif // LL_LLVIEWEROBJECTBACKUP_H