summaryrefslogtreecommitdiff
path: root/indra/newview/llfloatermodelwizard.h
blob: ea60cf5db8cbae74aa1fb22a9aa43e631eb22393 (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
/** 
 * @file llfloatermodelwizard.h
 *
 * $LicenseInfo:firstyear=2009&license=viewerlgpl$
 * Second Life Viewer Source Code
 * Copyright (C) 2010, Linden Research, Inc.
 * 
 * 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
 * 
 * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
 * $/LicenseInfo$
 */

#ifndef LLFLOATERMODELWIZARD_H
#define LLFLOATERMODELWIZARD_H


#include "llmeshrepository.h"
#include "llmodel.h"
#include "llthread.h"
#include "llfloatermodeluploadbase.h"


class LLModelPreview;


class LLFloaterModelWizard : public LLFloaterModelUploadBase
{
public:
	
	class DecompRequest : public LLPhysicsDecomp::Request
	{
	public:
		S32 mContinue;
		LLPointer<LLModel> mModel;
		
		DecompRequest(const std::string& stage, LLModel* mdl);
		virtual S32 statusCallback(const char* status, S32 p1, S32 p2);
		virtual void completed();
		
	};
	
	static LLFloaterModelWizard* sInstance;

	LLFloaterModelWizard(const LLSD& key);
	virtual ~LLFloaterModelWizard();
	/*virtual*/	BOOL	postBuild();
	void			draw();
	void            refresh();
	
	BOOL handleMouseDown(S32 x, S32 y, MASK mask);
	BOOL handleMouseUp(S32 x, S32 y, MASK mask);
	BOOL handleHover(S32 x, S32 y, MASK mask);
	BOOL handleScrollWheel(S32 x, S32 y, S32 clicks);

	void setDetails(F32 x, F32 y, F32 z, F32 streaming_cost, F32 physics_cost);
	void modelLoadedCallback();
	void modelChangedCallback();
	void initDecompControls();
	
	// shows warning message if agent has no permissions to upload model
	/*virtual*/ void onPermissionsReceived(const LLSD& result);

	// called when error occurs during permissions request
	/*virtual*/ void setPermissonsErrorStatus(U32 status, const std::string& reason);

	/*virtual*/ void onModelPhysicsFeeReceived(F64 physics, S32 fee, std::string upload_url);

	/*virtual*/ void setModelPhysicsFeeErrorStatus(U32 status, const std::string& reason);

	/*virtual*/ void onModelUploadSuccess();

	/*virtual*/ void onModelUploadFailure();

	const LLRect& getPreviewRect() const { return mPreviewRect; }

	LLPhysicsDecomp::decomp_params mDecompParams;
	std::set<LLPointer<DecompRequest> > mCurRequest;
	std::string mStatusMessage;
	static void executePhysicsStage(std::string stage_name);

private:
	enum EWizardState
	{
		CHOOSE_FILE = 0,
		OPTIMIZE,
		PHYSICS,
		REVIEW,
		UPLOAD
	};

	void setState(int state);
	void updateButtons();
	void onClickSwitchToAdvanced();
	void onClickRecalculateGeometry();
	void onClickRecalculatePhysics();
	void onClickCalculateUploadFee();
	void onClickCancel();
	void onClickBack();
	void onClickNext();
	bool onEnableNext();
	bool onEnableBack();
	void loadModel();
	void onPreviewLODCommit(LLUICtrl*);
	void onUpload();

	LLModelPreview*	mModelPreview;
	LLRect			mPreviewRect;
	int mState;

	S32				mLastMouseX;
	S32				mLastMouseY;

	U32			    mLastEnabledState;

	LLButton*		mRecalculateGeometryBtn;
	LLButton*		mRecalculatePhysicsBtn;
	LLButton*		mRecalculatingPhysicsBtn;
	LLButton*		mCalculateWeightsBtn;
	LLButton*		mCalculatingWeightsBtn;

	LLView*		mChooseFilePreviewPanel;
	LLView*		mOptimizePreviewPanel;
	LLView*		mPhysicsPreviewPanel;
};


#endif