157 lines
5.1 KiB
C++
157 lines
5.1 KiB
C++
/**
|
|
* @file fsfloaterexport.h
|
|
* @brief export selected objects to an xml file in LLSD format.
|
|
*
|
|
* $LicenseInfo:firstyear=2012&license=viewerlgpl$
|
|
* Phoenix Firestorm Viewer Source Code
|
|
* Copyright (c) 2012 Techwolf Lupindo
|
|
* Copyright (c) 2013 Cinder Roxley <cinder.roxley@phoenixviewer.com>
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation;
|
|
* version 2.1 of the License only.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*
|
|
* The Phoenix Firestorm Project, Inc., 1831 Oakwood Drive, Fairmont, Minnesota 56031-3225 USA
|
|
* http://www.firestormviewer.org
|
|
* $/LicenseInfo$
|
|
*/
|
|
|
|
#ifndef FS_FSEXPORT_H
|
|
#define FS_FSEXPORT_H
|
|
|
|
#include "llselectmgr.h"
|
|
#include "llsingleton.h"
|
|
#include "lltexturecache.h"
|
|
#include "llviewertexture.h"
|
|
|
|
// Floater includes
|
|
#include "llfloater.h"
|
|
#include "llscrolllistctrl.h"
|
|
|
|
class LLObjectSelection;
|
|
|
|
struct FSAssetResourceData
|
|
{
|
|
std::string name;
|
|
std::string description;
|
|
void* user_data;
|
|
LLUUID uuid;
|
|
};
|
|
|
|
class FSFloaterObjectExport : public LLFloater, public LLVOInventoryListener
|
|
{
|
|
LOG_CLASS(FSFloaterObjectExport);
|
|
public:
|
|
FSFloaterObjectExport(const LLSD& key);
|
|
bool postBuild();
|
|
void updateSelection();
|
|
|
|
static void onImageLoaded(bool success,
|
|
LLViewerFetchedTexture *src_vi,
|
|
LLImageRaw* src,
|
|
LLImageRaw* aux_src,
|
|
S32 discard_level,
|
|
bool final,
|
|
void* userdata);
|
|
void fetchTextureFromCache(LLViewerFetchedTexture* src_vi);
|
|
void saveFormattedImage(LLPointer<LLImageFormatted> mFormattedImage, LLUUID id);
|
|
void removeRequestedTexture(LLUUID texture_id);
|
|
static void onIdle(void *user_data);
|
|
/*virtual*/ void inventoryChanged(LLViewerObject* object,
|
|
LLInventoryObject::object_list_t* inventory,
|
|
S32 serial_num,
|
|
void* user_data);
|
|
static void onLoadComplete(const LLUUID& asset_uuid,
|
|
LLAssetType::EType type,
|
|
void* user_data, S32 status, LLExtStat ext_status);
|
|
|
|
private:
|
|
typedef enum {IDLE, INVENTORY_DOWNLOAD, ASSET_DOWNLOAD, TEXTURE_DOWNLOAD} FSExportState;
|
|
virtual ~FSFloaterObjectExport();
|
|
/* virtual */ void draw();
|
|
/* virtual */ void onOpen(const LLSD& key);
|
|
void refresh();
|
|
void dirty();
|
|
bool exportSelection();
|
|
void addSelectedObjects();
|
|
void populateObjectList();
|
|
void onClickExport();
|
|
void onExportFileSelected(const std::vector<std::string>& filenames);
|
|
void addTexturePreview();
|
|
S32 getNumExportableTextures();
|
|
void addObject(const LLViewerObject* prim, const std::string name);
|
|
void updateTextureInfo();
|
|
void updateUI();
|
|
void updateTitleProgress(FSExportState state);
|
|
|
|
FSExportState mExportState;
|
|
typedef std::vector<std::pair<LLViewerObject*,std::string> > obj_info_t;
|
|
obj_info_t mObjects;
|
|
std::string mFilename;
|
|
LLSafeHandle<LLObjectSelection> mObjectSelection;
|
|
LLUUID mCurrentObjectID;
|
|
|
|
S32 mTotal;
|
|
S32 mIncluded;
|
|
S32 mNumTextures;
|
|
S32 mNumExportableTextures;
|
|
|
|
LLScrollListCtrl* mObjectList;
|
|
LLPanel* mTexturePanel;
|
|
|
|
std::string mObjectName;
|
|
|
|
LLSD getLinkSet(LLSelectNode* node);
|
|
void addPrim(LLViewerObject* object, bool root);
|
|
bool exportTexture(const LLUUID& texture_id);
|
|
|
|
void onIdle();
|
|
void removeRequestedAsset(LLUUID asset_uuid);
|
|
|
|
LLSD mManifest;
|
|
std::map<LLUUID, FSAssetResourceData> mRequestedTexture;
|
|
std::map<LLUUID, bool> mTextureChecked;
|
|
std::string mFilePath;
|
|
LLLoadedCallbackEntry::source_callback_list_t mCallbackTextureList;
|
|
LLFrameTimer mWaitTimer;
|
|
size_t mLastRequest;
|
|
bool mExported;
|
|
bool mAborted;
|
|
bool mDirty;
|
|
|
|
typedef std::vector<LLUUID> id_list_t;
|
|
typedef std::vector<std::string> string_list_t;
|
|
id_list_t mTextures;
|
|
string_list_t mTextureNames;
|
|
|
|
uuid_vec_t mInventoryRequests;
|
|
uuid_vec_t mAssetRequests;
|
|
|
|
class FSExportCacheReadResponder : public LLTextureCache::ReadResponder
|
|
{
|
|
LOG_CLASS(FSExportCacheReadResponder);
|
|
public:
|
|
FSExportCacheReadResponder(const LLUUID& id, LLImageFormatted* image, FSFloaterObjectExport* parent);
|
|
|
|
void setData(U8* data, S32 datasize, S32 imagesize, S32 imageformat, bool imagelocal);
|
|
virtual void completed(bool success);
|
|
|
|
private:
|
|
LLPointer<LLImageFormatted> mFormattedImage;
|
|
LLUUID mID;
|
|
FSFloaterObjectExport* mParent;
|
|
};
|
|
};
|
|
|
|
#endif // FS_FSEXPORT_H
|