summaryrefslogtreecommitdiff
path: root/indra/newview/llwearable.h
blob: 683a8fa928aceb872ab640017593031c26c1b330 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
/** 
 * @file llwearable.h
 * @brief LLWearable class header file
 *
 * $LicenseInfo:firstyear=2002&license=viewergpl$
 * 
 * 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
 * ("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_LLWEARABLE_H
#define LL_LLWEARABLE_H

#include "lluuid.h"
#include "llstring.h"
#include "llpermissions.h"
#include "llsaleinfo.h"
#include "llassetstorage.h"

class LLViewerInventoryItem;

enum	EWearableType  // If you change this, update LLWearable::getTypeName(), getTypeLabel(), and LLVOAvatar::getTEWearableType()
{
	WT_SHAPE	= 0,
	WT_SKIN		= 1,
	WT_HAIR		= 2,
	WT_EYES		= 3,
	WT_SHIRT	= 4,
	WT_PANTS	= 5,
	WT_SHOES	= 6,
	WT_SOCKS	= 7,
	WT_JACKET	= 8,
	WT_GLOVES	= 9,
	WT_UNDERSHIRT = 10,
	WT_UNDERPANTS = 11,
	WT_SKIRT	= 12,
	WT_COUNT	= 13,
	WT_INVALID	= 255
};

class LLWearable
{
	friend class LLWearableList;
public:
	~LLWearable();

	const LLAssetID&		getID() const { return mAssetID; }
	const LLTransactionID&		getTransactionID() const { return mTransactionID; }

	BOOL				isDirty();
	BOOL				isOldVersion();

	void				writeToAvatar( BOOL set_by_user );
	void				readFromAvatar();
	void				removeFromAvatar( BOOL set_by_user )	{ LLWearable::removeFromAvatar( mType, set_by_user ); }
	static void			removeFromAvatar( EWearableType type, BOOL set_by_user ); 

	BOOL				exportFile(LLFILE* file);
	BOOL				importFile(LLFILE* file);

	EWearableType		getType() const							{ return mType; }
	void				setType( EWearableType type )			{ mType = type; }

	void				setName( const std::string& name )			{ mName = name; }
	const std::string&	getName() const								{ return mName; }

	void				setDescription( const std::string& desc )	{ mDescription = desc; }
	const std::string&	getDescription() const						{ return mDescription; }

	void				setPermissions( const LLPermissions& p ) { mPermissions = p; }
	const LLPermissions& getPermissions() const						{ return mPermissions; }

	void				setSaleInfo( const LLSaleInfo& info )	{ mSaleInfo = info; }
	const LLSaleInfo&	getSaleInfo() const							{ return mSaleInfo; }

	const std::string&	getTypeLabel() const					{ return LLWearable::sTypeLabel[ mType ]; }
	const std::string&	getTypeName() const						{ return LLWearable::sTypeName[ mType ]; }

	void				setParamsToDefaults();
	void				setTexturesToDefaults();

	LLAssetType::EType	getAssetType() const					{ return LLWearable::typeToAssetType( mType ); }

	static EWearableType typeNameToType( const std::string& type_name );
	static const std::string& typeToTypeName( EWearableType type )	{ return LLWearable::sTypeName[llmin(type,WT_COUNT)]; }
	static const std::string& typeToTypeLabel( EWearableType type )	{ return LLWearable::sTypeLabel[llmin(type,WT_COUNT)]; }
	static LLAssetType::EType typeToAssetType( EWearableType wearable_type );

	void				saveNewAsset();
	static void			onSaveNewAssetComplete( const LLUUID& asset_uuid, void* user_data, S32 status, LLExtStat ext_status );

	BOOL				isMatchedToInventoryItem( LLViewerInventoryItem* item );

	void				copyDataFrom( LLWearable* src );

	static void			setCurrentDefinitionVersion( S32 version ) { LLWearable::sCurrentDefinitionVersion = version; }

	friend std::ostream& operator<<(std::ostream &s, const LLWearable &w);

private:
	// Private constructor used by LLWearableList
	LLWearable(const LLTransactionID& transactionID);
	LLWearable(const LLAssetID& assetID);

	static S32			sCurrentDefinitionVersion;	// Depends on the current state of the avatar_lad.xml.
	S32					mDefinitionVersion;			// Depends on the state of the avatar_lad.xml when this asset was created.
	std::string			mName;
	std::string			mDescription;
	LLPermissions		mPermissions;
	LLSaleInfo			mSaleInfo;
	LLAssetID mAssetID;
	LLTransactionID		mTransactionID;
	EWearableType		mType;

	typedef std::map<S32, F32> param_map_t;
	param_map_t mVisualParamMap;	// maps visual param id to weight
	typedef std::map<S32, LLUUID> te_map_t;
	te_map_t mTEMap;				// maps TE to Image ID

	static const std::string sTypeName[ WT_COUNT+1 ];
	static const std::string sTypeLabel[ WT_COUNT+1 ];
};

#endif  // LL_LLWEARABLE_H