diff options
| -rwxr-xr-x | indra/newview/llfloatermodelpreview.cpp | 55 | ||||
| -rw-r--r-- | indra/newview/llfloatermodelpreview.h | 26 | ||||
| -rw-r--r-- | indra/newview/llfloatermodelwizard.cpp | 167 | ||||
| -rw-r--r-- | indra/newview/llfloatermodelwizard.h | 9 | ||||
| -rw-r--r-- | indra/newview/llvoavatar.cpp | 52 | ||||
| -rw-r--r-- | indra/newview/llvoavatar.h | 1 | ||||
| -rw-r--r-- | indra/newview/llvoavatarself.cpp | 23 | ||||
| -rw-r--r-- | indra/newview/skins/default/textures/icons/check_mark.png (renamed from indra/newview/skins/default/textures/model_wizard/check_mark.png) | bin | 3166 -> 3166 bytes | |||
| -rw-r--r-- | indra/newview/skins/default/textures/model_wizard/divider_line.png | bin | 0 -> 2815 bytes | |||
| -rw-r--r-- | indra/newview/skins/default/textures/textures.xml | 18 | ||||
| -rw-r--r-- | indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Disabled.png (renamed from indra/newview/skins/default/textures/model_wizard/left_button_disabled.png) | bin | 3576 -> 3576 bytes | |||
| -rw-r--r-- | indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Off.png (renamed from indra/newview/skins/default/textures/model_wizard/left_button_off.png) | bin | 4309 -> 4309 bytes | |||
| -rw-r--r-- | indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Over.png (renamed from indra/newview/skins/default/textures/model_wizard/left_button_over.png) | bin | 4272 -> 4272 bytes | |||
| -rw-r--r-- | indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Press.png (renamed from indra/newview/skins/default/textures/model_wizard/left_button_press.png) | bin | 4278 -> 4278 bytes | |||
| -rw-r--r-- | indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Disabled.png (renamed from indra/newview/skins/default/textures/model_wizard/middle_button_disabled.png) | bin | 3425 -> 3425 bytes | |||
| -rw-r--r-- | indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Off.png (renamed from indra/newview/skins/default/textures/model_wizard/middle_button_off.png) | bin | 4151 -> 4151 bytes | |||
| -rw-r--r-- | indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Over.png (renamed from indra/newview/skins/default/textures/model_wizard/middle_button_over.png) | bin | 4137 -> 4137 bytes | |||
| -rw-r--r-- | indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Press.png (renamed from indra/newview/skins/default/textures/model_wizard/middle_button_press.png) | bin | 4200 -> 4200 bytes | |||
| -rw-r--r-- | indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Disabled.png (renamed from indra/newview/skins/default/textures/model_wizard/right_button_disabled.png) | bin | 3169 -> 3169 bytes | |||
| -rw-r--r-- | indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Off.png (renamed from indra/newview/skins/default/textures/model_wizard/right_button_off.png) | bin | 3845 -> 3845 bytes | |||
| -rw-r--r-- | indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Over.png (renamed from indra/newview/skins/default/textures/model_wizard/right_button_over.png) | bin | 3867 -> 3867 bytes | |||
| -rw-r--r-- | indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Press.png (renamed from indra/newview/skins/default/textures/model_wizard/right_button_press.png) | bin | 3915 -> 3915 bytes | |||
| -rw-r--r-- | indra/newview/skins/default/xui/en/floater_model_wizard.xml | 275 | 
23 files changed, 470 insertions, 156 deletions
| diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp index 8dcb441b16..cc2a8c8aac 100755 --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -291,7 +291,7 @@ BOOL LLFloaterModelPreview::postBuild()  	childSetCommitCallback("lod_mode", onLODParamCommit, this);  	childSetCommitCallback("lod_error_threshold", onLODParamCommit, this); -	childSetCommitCallback("lod_triangle_limit", onLODParamCommit, this); +	childSetCommitCallback("lod_triangle_limit", onLODParamCommitTriangleLimit, this);  	childSetCommitCallback("build_operator", onLODParamCommit, this);  	childSetCommitCallback("queue_mode", onLODParamCommit, this);  	childSetCommitCallback("border_mode", onLODParamCommit, this); @@ -340,6 +340,7 @@ BOOL LLFloaterModelPreview::postBuild()  	mModelPreview = new LLModelPreview(512, 512, this);  	mModelPreview->setPreviewTarget(16.f); +	mModelPreview->setDetailsCallback(boost::bind(&LLFloaterModelPreview::setDetails, this, _1, _2, _3, _4, _5));  	//set callbacks for left click on line editor rows  	for (U32 i = 0; i <= LLModel::LOD_HIGH; i++) @@ -532,9 +533,14 @@ void LLFloaterModelPreview::onAutoFillCommit(LLUICtrl* ctrl, void* userdata)  void LLFloaterModelPreview::onLODParamCommit(LLUICtrl* ctrl, void* userdata)  {  	LLFloaterModelPreview* fp = (LLFloaterModelPreview*) userdata; -	fp->mModelPreview->genLODs(fp->mModelPreview->mPreviewLOD); -	fp->mModelPreview->updateStatusMessages(); -	fp->mModelPreview->refresh(); +	fp->mModelPreview->onLODParamCommit(false); +} + +//static +void LLFloaterModelPreview::onLODParamCommitTriangleLimit(LLUICtrl* ctrl, void* userdata) +{ +	LLFloaterModelPreview* fp = (LLFloaterModelPreview*) userdata; +	fp->mModelPreview->onLODParamCommit(true);  } @@ -1665,6 +1671,8 @@ void LLModelLoader::run()  			setLoadState( ERROR_PARSING );  			return;  		} +		setLoadState( DONE ); +  		processElement(scene);  		doOnIdleOneTime(boost::bind(&LLModelPreview::loadModelCallback,mPreview,mLod)); @@ -2264,18 +2272,24 @@ U32 LLModelPreview::calcResourceCost()  	//mFMP->childSetTextArg(info_name[LLModel::LOD_PHYSICS], "[HULLS]", llformat("%d",num_hulls));  	//mFMP->childSetTextArg(info_name[LLModel::LOD_PHYSICS], "[POINTS]", llformat("%d",num_points)); -	mFMP->childSetTextArg("streaming cost", "[COST]", llformat("%.3f", streaming_cost)); -	mFMP->childSetTextArg("physics cost", "[COST]", llformat("%.3f", physics_cost));	  	F32 scale = mFMP->childGetValue("import_scale").asReal()*2.f; -	mFMP->childSetTextArg("import_dimensions", "[X]", llformat("%.3f", mPreviewScale[0]*scale)); -	mFMP->childSetTextArg("import_dimensions", "[Y]", llformat("%.3f", mPreviewScale[1]*scale)); -	mFMP->childSetTextArg("import_dimensions", "[Z]", llformat("%.3f", mPreviewScale[2]*scale)); + +	mDetailsSignal(mPreviewScale[0]*scale, mPreviewScale[1]*scale, mPreviewScale[2]*scale, streaming_cost, physics_cost);  	updateStatusMessages();  	return cost;  } +void LLFloaterModelPreview::setDetails(F32 x, F32 y, F32 z, F32 streaming_cost, F32 physics_cost) +{ +	childSetTextArg("import_dimensions", "[X]", llformat("%.3f", x)); +	childSetTextArg("import_dimensions", "[Y]", llformat("%.3f", y)); +	childSetTextArg("import_dimensions", "[Z]", llformat("%.3f", z)); +	childSetTextArg("streaming cost", "[COST]", llformat("%.3f", streaming_cost)); +	childSetTextArg("physics cost", "[COST]", llformat("%.3f", physics_cost));	 +} +  void LLModelPreview::rebuildUploadData()  {  	assert_main_thread(); @@ -2552,6 +2566,8 @@ void LLModelPreview::loadModelCallback(S32 lod)  	mLoading = false;  	refresh(); + +	mModelLoadedSignal();  }  void LLModelPreview::resetPreviewTarget() @@ -2817,7 +2833,7 @@ void LLModelPreview::clearMaterials()  	refresh();  } -void LLModelPreview::genLODs(S32 which_lod, U32 decimation) +void LLModelPreview::genLODs(S32 which_lod, U32 decimation, bool enforce_tri_limit)  {  	if (mBaseModel.empty())  	{ @@ -3048,7 +3064,17 @@ void LLModelPreview::genLODs(S32 which_lod, U32 decimation)  		}  		else  		{ -			triangle_count = limit; +			if (enforce_tri_limit) +			{ +				triangle_count = limit; +			} +			else +			{ +				for (S32 j=LLModel::LOD_HIGH; j>which_lod; --j) +				{ +					triangle_count /= decimation; +				} +			}  		}  		mModel[lod].clear(); @@ -4314,6 +4340,13 @@ void LLModelPreview::textureLoadedCallback( BOOL success, LLViewerFetchedTexture  	preview->refresh();  } +void LLModelPreview::onLODParamCommit(bool enforce_tri_limit) +{ +	genLODs(mPreviewLOD, 3, enforce_tri_limit); +	updateStatusMessages(); +	refresh(); +} +  LLFloaterModelPreview::DecompRequest::DecompRequest(const std::string& stage, LLModel* mdl)  {  	mStage = stage; diff --git a/indra/newview/llfloatermodelpreview.h b/indra/newview/llfloatermodelpreview.h index 3747abedd1..8fc85cebb9 100644 --- a/indra/newview/llfloatermodelpreview.h +++ b/indra/newview/llfloatermodelpreview.h @@ -152,6 +152,8 @@ public:  	static void onMouseCaptureLostModelPreview(LLMouseHandler*);  	static void setUploadAmount(S32 amount) { sUploadAmount = amount; } + +	void setDetails(F32 x, F32 y, F32 z, F32 streaming_cost, F32 physics_cost);  	static void onBrowseLOD(void* data); @@ -187,6 +189,7 @@ protected:  	static void		onAutoFillCommit(LLUICtrl*,void*);  	static void		onLODParamCommit(LLUICtrl*,void*); +	static void		onLODParamCommitTriangleLimit(LLUICtrl*,void*);  	static void		onExplodeCommit(LLUICtrl*, void*); @@ -232,6 +235,7 @@ protected:  	LLMenuButton* mViewOptionMenuButton;  	LLToggleableMenu* mViewOptionMenu;  	LLMutex* mStatusLock; +  };  class LLMeshFilePicker : public LLFilePickerThread @@ -247,10 +251,12 @@ private:  class LLModelPreview : public LLViewerDynamicTexture, public LLMutex -{ - public: -	 -	 LLModelPreview(S32 width, S32 height, LLFloater* fmp); +{	 +	typedef boost::signals2::signal<void (F32 x, F32 y, F32 z, F32 streaming_cost, F32 physics_cost)> details_signal_t; +	typedef boost::signals2::signal<void (void)> model_loaded_signal_t; + +public: +	LLModelPreview(S32 width, S32 height, LLFloater* fmp);  	virtual ~LLModelPreview();  	void resetPreviewTarget(); @@ -271,7 +277,7 @@ class LLModelPreview : public LLViewerDynamicTexture, public LLMutex  	void clearModel(S32 lod);  	void loadModel(std::string filename, S32 lod);  	void loadModelCallback(S32 lod); -	void genLODs(S32 which_lod = -1, U32 decimation = 3); +	void genLODs(S32 which_lod = -1, U32 decimation = 3, bool enforce_tri_limit = false);  	void generateNormals();  	void consolidate();  	void clearMaterials(); @@ -280,10 +286,13 @@ class LLModelPreview : public LLViewerDynamicTexture, public LLMutex  	void clearIncompatible(S32 lod);  	void updateStatusMessages();  	void clearGLODGroup(); - +	void onLODParamCommit(bool enforce_tri_limit);  	static void	textureLoadedCallback( BOOL success, LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* src_aux, S32 discard_level, BOOL final, void* userdata ); - +	 +	boost::signals2::connection setDetailsCallback( const details_signal_t::slot_type& cb ){  return mDetailsSignal.connect(cb);  } +	boost::signals2::connection setModelLoadedCallback( const model_loaded_signal_t::slot_type& cb ){  return mModelLoadedSignal.connect(cb);  } +	   protected:  	friend class LLFloaterModelPreview;  	friend class LLFloaterModelWizard; @@ -335,6 +344,9 @@ class LLModelPreview : public LLViewerDynamicTexture, public LLMutex  	//map of vertex buffers to models (one vertex buffer in vector per face in model  	std::map<LLModel*, std::vector<LLPointer<LLVertexBuffer> > > mVertexBuffer[LLModel::NUM_LODS+1]; + +	details_signal_t mDetailsSignal; +	model_loaded_signal_t mModelLoadedSignal;  }; diff --git a/indra/newview/llfloatermodelwizard.cpp b/indra/newview/llfloatermodelwizard.cpp index fe53eafa40..095499e6b0 100644 --- a/indra/newview/llfloatermodelwizard.cpp +++ b/indra/newview/llfloatermodelwizard.cpp @@ -30,6 +30,7 @@  #include "llbutton.h"  #include "lldrawable.h" +#include "llcheckboxctrl.h"  #include "llcombobox.h"  #include "llfloater.h"  #include "llfloatermodelwizard.h" @@ -51,7 +52,14 @@ static	const std::string stateNames[]={  LLFloaterModelWizard::LLFloaterModelWizard(const LLSD& key)  	: LLFloater(key)  { +	mLastEnabledState = CHOOSE_FILE;  	sInstance = this; + +	mCommitCallbackRegistrar.add("Wizard.Choose", boost::bind(&LLFloaterModelWizard::setState, this, CHOOSE_FILE)); +	mCommitCallbackRegistrar.add("Wizard.Optimize", boost::bind(&LLFloaterModelWizard::setState, this, OPTIMIZE)); +	mCommitCallbackRegistrar.add("Wizard.Physics", boost::bind(&LLFloaterModelWizard::setState, this, PHYSICS)); +	mCommitCallbackRegistrar.add("Wizard.Review", boost::bind(&LLFloaterModelWizard::setState, this, REVIEW)); +	mCommitCallbackRegistrar.add("Wizard.Upload", boost::bind(&LLFloaterModelWizard::setState, this, UPLOAD));  }  LLFloaterModelWizard::~LLFloaterModelWizard()  { @@ -59,67 +67,115 @@ LLFloaterModelWizard::~LLFloaterModelWizard()  }  void LLFloaterModelWizard::setState(int state)  { +  	mState = state; -	setButtons(state);  	for(size_t t=0; t<LL_ARRAY_SIZE(stateNames); ++t)  	{ -		LLView *view = getChild<LLView>(stateNames[t]+"_panel"); +		LLView *view = getChildView(stateNames[t]+"_panel");  		if (view)   		{  			view->setVisible(state == (int) t ? TRUE : FALSE);  		}  	} +	if (state == CHOOSE_FILE) +	{ +		mModelPreview->mViewOption["show_physics"] = false; + +		getChildView("close")->setVisible(false); +		getChildView("back")->setVisible(true); +		getChildView("back")->setEnabled(false); +		getChildView("next")->setVisible(true); +		getChildView("upload")->setVisible(false); +		getChildView("cancel")->setVisible(true); +	} +  	if (state == OPTIMIZE)  	{ -		mModelPreview->genLODs(-1); +		if (mLastEnabledState < state) +		{			 +			mModelPreview->genLODs(-1); +		} +  		mModelPreview->mViewOption["show_physics"] = false; + +		getChildView("back")->setVisible(true); +		getChildView("back")->setEnabled(true); +		getChildView("close")->setVisible(false); +		getChildView("next")->setVisible(true); +		getChildView("upload")->setVisible(false); +		getChildView("cancel")->setVisible(true);  	}  	if (state == PHYSICS)  	{ -		mModelPreview->setPhysicsFromLOD(1); +		if (mLastEnabledState < state) +		{ +			mModelPreview->setPhysicsFromLOD(1); +		} +  		mModelPreview->mViewOption["show_physics"] = true; -		getChild<LLView>("next")->setVisible(true); -		getChild<LLView>("upload")->setVisible(false); +		getChildView("next")->setVisible(true); +		getChildView("upload")->setVisible(false); +		getChildView("close")->setVisible(false); +		getChildView("back")->setVisible(true); +		getChildView("back")->setEnabled(true); +		getChildView("cancel")->setVisible(true);  	}  	if (state == REVIEW)  	{ -		executePhysicsStage("Decompose"); -		getChild<LLView>("close")->setVisible(false); -		getChild<LLView>("next")->setVisible(false); -		getChild<LLView>("back")->setVisible(true); -		getChild<LLView>("upload")->setVisible(true); -		getChild<LLView>("cancel")->setVisible(true); +		if (mLastEnabledState < state) +		{ +			executePhysicsStage("Decompose"); +		} +		 +		mModelPreview->mViewOption["show_physics"] = true; + +		getChildView("close")->setVisible(false); +		getChildView("next")->setVisible(false); +		getChildView("back")->setVisible(true); +		getChildView("back")->setEnabled(true); +		getChildView("upload")->setVisible(true); +		getChildView("cancel")->setVisible(true);  	}  	if (state == UPLOAD)  	{ -		getChild<LLView>("close")->setVisible(true); -		getChild<LLView>("back")->setVisible(false); -		getChild<LLView>("upload")->setVisible(false); -		getChild<LLView>("cancel")->setVisible(false); +		getChildView("close")->setVisible(true); +		getChildView("next")->setVisible(false); +		getChildView("back")->setVisible(false); +		getChildView("upload")->setVisible(false); +		getChildView("cancel")->setVisible(false);  	} + +	updateButtons();  } -void LLFloaterModelWizard::setButtons(int state) + + +void LLFloaterModelWizard::updateButtons()  { +	if (mLastEnabledState < mState) +	{ +		mLastEnabledState = mState; +	} +  	for(size_t i=0; i<LL_ARRAY_SIZE(stateNames); ++i)  	{  		LLButton *button = getChild<LLButton>(stateNames[i]+"_btn"); -		if (i < state) +		if (i == mState)  		{  			button->setEnabled(TRUE); -			button->setToggleState(FALSE); +			button->setToggleState(TRUE);  		} -		else if (i == state) +		else if (i <= mLastEnabledState)  		{  			button->setEnabled(TRUE); -			button->setToggleState(TRUE); +			button->setToggleState(FALSE);  		}  		else  		{ @@ -418,11 +474,12 @@ void LLFloaterModelWizard::DecompRequest::completed()  BOOL LLFloaterModelWizard::postBuild()  { -	LLView* preview_panel = getChild<LLView>("preview_panel"); +	LLView* preview_panel = getChildView("preview_panel");  	childSetValue("import_scale", (F32) 0.67335826);  	getChild<LLUICtrl>("browse")->setCommitCallback(boost::bind(&LLFloaterModelWizard::loadModel, this)); +	//getChild<LLUICtrl>("lod_file")->setCommitCallback(boost::bind(&LLFloaterModelWizard::loadModel, this));  	getChild<LLUICtrl>("cancel")->setCommitCallback(boost::bind(&LLFloaterModelWizard::onClickCancel, this));  	getChild<LLUICtrl>("close")->setCommitCallback(boost::bind(&LLFloaterModelWizard::onClickCancel, this));  	getChild<LLUICtrl>("back")->setCommitCallback(boost::bind(&LLFloaterModelWizard::onClickBack, this)); @@ -430,17 +487,20 @@ BOOL LLFloaterModelWizard::postBuild()  	getChild<LLUICtrl>("preview_lod_combo")->setCommitCallback(boost::bind(&LLFloaterModelWizard::onPreviewLODCommit, this, _1));  	getChild<LLUICtrl>("accuracy_slider")->setCommitCallback(boost::bind(&LLFloaterModelWizard::onAccuracyPerformance, this, _2));  	getChild<LLUICtrl>("upload")->setCommitCallback(boost::bind(&LLFloaterModelWizard::onUpload, this)); -	 +	getChild<LLUICtrl>("physics_slider")->setCommitCallback(boost::bind(&LLFloaterModelWizard::onPhysicsChanged, this)); +  	LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable_registrar;  	enable_registrar.add("Next.OnEnable", boost::bind(&LLFloaterModelWizard::onEnableNext, this));  	enable_registrar.add("Back.OnEnable", boost::bind(&LLFloaterModelWizard::onEnableBack, this)); -	 +  	mPreviewRect = preview_panel->getRect();  	mModelPreview = new LLModelPreview(512, 512, this);  	mModelPreview->setPreviewTarget(16.f); +	mModelPreview->setDetailsCallback(boost::bind(&LLFloaterModelWizard::setDetails, this, _1, _2, _3, _4, _5)); +	mModelPreview->setModelLoadedCallback(boost::bind(&LLFloaterModelWizard::modelLoadedCallback, this));  	center(); @@ -455,6 +515,37 @@ BOOL LLFloaterModelWizard::postBuild()  	return TRUE;  } + +void LLFloaterModelWizard::setDetails(F32 x, F32 y, F32 z, F32 streaming_cost, F32 physics_cost) +{ +	// iterate through all the panels, setting the dimensions +	for(size_t t=0; t<LL_ARRAY_SIZE(stateNames); ++t) +	{ +		LLPanel *panel = getChild<LLPanel>(stateNames[t]+"_panel"); +		if (panel)  +		{ +			panel->childSetText("dimension_x", llformat("%.1f", x)); +			panel->childSetText("dimension_y", llformat("%.1f", y)); +			panel->childSetText("dimension_z", llformat("%.1f", z)); +			panel->childSetTextArg("streaming cost", "[COST]", llformat("%.3f", streaming_cost)); +			panel->childSetTextArg("physics cost", "[COST]", llformat("%.3f", physics_cost));	 +		} +	} +} + +void LLFloaterModelWizard::modelLoadedCallback() +{ +	mLastEnabledState = CHOOSE_FILE; +	getChild<LLCheckBoxCtrl>("confirm_checkbox")->set(FALSE); +	updateButtons(); +} + +void LLFloaterModelWizard::onPhysicsChanged() +{ +	mLastEnabledState = PHYSICS; +	updateButtons(); +} +  void LLFloaterModelWizard::onUpload()  {	  	mModelPreview->rebuildUploadData(); @@ -466,7 +557,6 @@ void LLFloaterModelWizard::onUpload()  } -  void LLFloaterModelWizard::onAccuracyPerformance(const LLSD& data)  {  	int val = (int) data.asInteger(); @@ -476,6 +566,7 @@ void LLFloaterModelWizard::onAccuracyPerformance(const LLSD& data)  	mModelPreview->refresh();  } +  void LLFloaterModelWizard::onPreviewLODCommit(LLUICtrl* ctrl)  {  	if (!mModelPreview) @@ -492,8 +583,30 @@ void LLFloaterModelWizard::onPreviewLODCommit(LLUICtrl* ctrl)  	mModelPreview->setPreviewLOD(which_mode);  } +void LLFloaterModelWizard::refresh() +{ +	if (mState == CHOOSE_FILE) +	{ +		bool model_loaded = false; + +		if (mModelPreview && mModelPreview->mModelLoader && mModelPreview->mModelLoader->getLoadState() == LLModelLoader::DONE) +		{ +			model_loaded = true; +		} +		 +		getChildView("next")->setEnabled(model_loaded); +	} +	if (mState == REVIEW) +	{ +		getChildView("upload")->setEnabled(getChild<LLCheckBoxCtrl>("confirm_checkbox")->getValue().asBoolean()); +	} + +} +  void LLFloaterModelWizard::draw()  { +	refresh(); +  	LLFloater::draw();  	LLRect r = getRect(); @@ -505,8 +618,8 @@ void LLFloaterModelWizard::draw()  		gGL.getTexUnit(0)->bind(mModelPreview); -		LLView *view = getChild<LLView>(stateNames[mState]+"_panel"); -		LLView* preview_panel = view->getChild<LLView>("preview_panel"); +		LLView *view = getChildView(stateNames[mState]+"_panel"); +		LLView* preview_panel = view->getChildView("preview_panel");  		LLRect rect = preview_panel->getRect();  		if (rect != mPreviewRect) diff --git a/indra/newview/llfloatermodelwizard.h b/indra/newview/llfloatermodelwizard.h index eaf188ed40..50e4ab1a96 100644 --- a/indra/newview/llfloatermodelwizard.h +++ b/indra/newview/llfloatermodelwizard.h @@ -57,13 +57,16 @@ public:  	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 onPhysicsChanged();  	void initDecompControls();  	LLPhysicsDecomp::decomp_params mDecompParams; @@ -82,7 +85,7 @@ private:  	};  	void setState(int state); -	void setButtons(int state); +	void updateButtons();  	void onClickCancel();  	void onClickBack();  	void onClickNext(); @@ -100,6 +103,8 @@ private:  	S32				mLastMouseX;  	S32				mLastMouseY; +	U32			    mLastEnabledState; +  }; diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index ded3e36cf6..b667dc1af0 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -2895,10 +2895,8 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)  				}  	LLVector3 name_position = idleUpdateNameTagPosition(root_pos_last); -	mNameText->setPositionAgent(name_position); -				 -	idleUpdateNameTagText(new_name); -			 +	mNameText->setPositionAgent(name_position);				 +	idleUpdateNameTagText(new_name);			  	idleUpdateNameTagAlpha(new_name, alpha);  } @@ -3184,8 +3182,9 @@ void LLVOAvatar::invalidateNameTags()  		if (avatar->isDead()) continue;  		avatar->clearNameTag(); -				} -			} + +	} +}  // Compute name tag position during idle update  LLVector3 LLVOAvatar::idleUpdateNameTagPosition(const LLVector3& root_pos_last) @@ -3204,12 +3203,14 @@ LLVector3 LLVOAvatar::idleUpdateNameTagPosition(const LLVector3& root_pos_last)  	local_camera_up.scaleVec(mBodySize * 0.5f);  	local_camera_at.scaleVec(mBodySize * 0.5f); -	LLVector3 name_position = mRoot.getWorldPosition() +  -		(local_camera_up * root_rot) - -		(projected_vec(local_camera_at * root_rot, camera_to_av)); +	LLVector3 name_position = mRoot.getWorldPosition(); +	name_position[VZ] -= mPelvisToFoot; +	name_position[VZ] += (mBodySize[VZ]* 0.55f); +	name_position += (local_camera_up * root_rot) - (projected_vec(local_camera_at * root_rot, camera_to_av));	  	name_position += pixel_up_vec * 15.f; +  	return name_position; -		} +}  void LLVOAvatar::idleUpdateNameTagAlpha(BOOL new_name, F32 alpha)  { @@ -6026,6 +6027,34 @@ void LLVOAvatar::rebuildRiggedAttachments( void )  	}  }  //----------------------------------------------------------------------------- +// cleanupAttachedMesh() +//----------------------------------------------------------------------------- +void LLVOAvatar::cleanupAttachedMesh( LLViewerObject* pVO ) +{ +	//If a VO has a skin that we'll reset the joint positions to their default +	if ( pVO && pVO->mDrawable ) +	{ +		LLVOVolume* pVObj = pVO->mDrawable->getVOVolume(); +		if ( pVObj ) +		{ +			const LLMeshSkinInfo* pSkinData = gMeshRepo.getSkinInfo( pVObj->getVolume()->getParams().getSculptID() ); +			if ( pSkinData ) +			{ +				const int jointCnt = pSkinData->mJointNames.size(); +				bool fullRig = ( jointCnt>=20 ) ? true : false; +				if ( fullRig ) +				{ +					const int bindCnt = pSkinData->mAlternateBindMatrix.size();							 +					if ( bindCnt > 0 ) +					{ +						LLVOAvatar::resetJointPositionsToDefault(); +					} +				} +			}				 +		} +	}	 +} +//-----------------------------------------------------------------------------  // detachObject()  //-----------------------------------------------------------------------------  BOOL LLVOAvatar::detachObject(LLViewerObject *viewer_object) @@ -6035,9 +6064,10 @@ BOOL LLVOAvatar::detachObject(LLViewerObject *viewer_object)  		 ++iter)  	{  		LLViewerJointAttachment* attachment = iter->second; - +		  		if (attachment->isObjectAttached(viewer_object))  		{ +			cleanupAttachedMesh( viewer_object );  			attachment->removeObject(viewer_object);  			lldebugs << "Detaching object " << viewer_object->mID << " from " << attachment->getName() << llendl;  			return TRUE; diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index ce5ce045b9..7ef35178ca 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -687,6 +687,7 @@ public:  	void 				clampAttachmentPositions();
  	virtual const LLViewerJointAttachment* attachObject(LLViewerObject *viewer_object);
  	virtual BOOL 		detachObject(LLViewerObject *viewer_object);
 +	void				cleanupAttachedMesh( LLViewerObject* pVO );
  	static LLVOAvatar*  findAvatarFromAttachment(LLViewerObject* obj);
  protected:
  	LLViewerJointAttachment* getTargetAttachmentPoint(LLViewerObject* viewer_object);
 diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index 5d1020fce8..3c66c4860e 100644 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -1150,28 +1150,7 @@ BOOL LLVOAvatarSelf::detachObject(LLViewerObject *viewer_object)  	const LLUUID attachment_id = viewer_object->getAttachmentItemID();  	if ( LLVOAvatar::detachObject(viewer_object) )  	{ -		//If a VO has a skin that we'll reset the joint positions to their default -		if ( viewer_object->mDrawable ) -		{ -			LLVOVolume* pVObj = viewer_object->mDrawable->getVOVolume(); -			if ( pVObj ) -			{ -				const LLMeshSkinInfo* pSkinData = gMeshRepo.getSkinInfo( pVObj->getVolume()->getParams().getSculptID() ); -				if ( pSkinData ) -				{ -					const int jointCnt = pSkinData->mJointNames.size(); -					bool fullRig = ( jointCnt>=20 ) ? true : false; -					if ( fullRig ) -					{ -						const int bindCnt = pSkinData->mAlternateBindMatrix.size();							 -						if ( bindCnt > 0 ) -						{ -							LLVOAvatar::resetJointPositionsToDefault(); -						} -					} -				}				 -			} -		} +		LLVOAvatar::cleanupAttachedMesh( viewer_object );  		// the simulator should automatically handle permission revocation diff --git a/indra/newview/skins/default/textures/model_wizard/check_mark.png b/indra/newview/skins/default/textures/icons/check_mark.pngBinary files differ index 2c05297f4f..2c05297f4f 100644 --- a/indra/newview/skins/default/textures/model_wizard/check_mark.png +++ b/indra/newview/skins/default/textures/icons/check_mark.png diff --git a/indra/newview/skins/default/textures/model_wizard/divider_line.png b/indra/newview/skins/default/textures/model_wizard/divider_line.pngBinary files differ new file mode 100644 index 0000000000..76c9e68767 --- /dev/null +++ b/indra/newview/skins/default/textures/model_wizard/divider_line.png diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index e69c5775f0..d351c442d3 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -73,7 +73,22 @@ with the same filename but different name    <texture name="BackButton_Press" file_name="icons/back_arrow_press.png" preload="false" scale.left="22" scale.top="12" scale.right="25" scale.bottom="12" />    <texture name="Blank" file_name="Blank.png" preload="false" /> - +	 +  <texture name="BreadCrumbBtn_Left_Disabled" file_name="widgets/BreadCrumbBtn_Left_Disabled.png" preload="false"/> +  <texture name="BreadCrumbBtn_Left_Off" file_name="widgets/BreadCrumbBtn_Left_Off.png" preload="false"/> +  <texture name="BreadCrumbBtn_Left_Over" file_name="widgets/BreadCrumbBtn_Left_Over.png" preload="false"/> +  <texture name="BreadCrumbBtn_Left_Press" file_name="widgets/BreadCrumbBtn_Left_Press.png" preload="false"/> +  +  <texture name="BreadCrumbBtn_Middle_Disabled" file_name="widgets/BreadCrumbBtn_Middle_Disabled.png" preload="false"/> +  <texture name="BreadCrumbBtn_Middle_Off" file_name="widgets/BreadCrumbBtn_Middle_Off.png" preload="false"/> +  <texture name="BreadCrumbBtn_Middle_Over" file_name="widgets/BreadCrumbBtn_Middle_Over.png" preload="false"/> +  <texture name="BreadCrumbBtn_Middle_Press" file_name="widgets/BreadCrumbBtn_Middle_Press.png" preload="false"/> + +  <texture name="BreadCrumbBtn_Right_Disabled" file_name="widgets/BreadCrumbBtn_Right_Disabled.png" preload="false"/> +  <texture name="BreadCrumbBtn_Right_Off" file_name="widgets/BreadCrumbBtn_Right_Off.png" preload="false"/> +  <texture name="BreadCrumbBtn_Right_Over" file_name="widgets/BreadCrumbBtn_Right_Over.png" preload="false"/> +  <texture name="BreadCrumbBtn_Right_Press" file_name="widgets/BreadCrumbBtn_Right_Press.png" preload="false"/> +     <texture name="BuyArrow_Over" file_name="navbar/BuyArrow_Over.png" preload="true" scale.left="0" scale.top="1" scale.right="0" scale.bottom="0"  />    <texture name="BuyArrow_Press" file_name="navbar/BuyArrow_Press.png" preload="true" scale.left="1" scale.top="1" scale.right="0" scale.bottom="0"  /> @@ -102,6 +117,7 @@ with the same filename but different name    <texture name="Checkbox_On" file_name="widgets/Checkbox_On.png" preload="true" />    <texture name="Checkbox_On_Press" file_name="widgets/Checkbox_On_Press.png" preload="true" />    <texture name="Checkbox_Press" file_name="widgets/Checkbox_Press.png" preload="true" /> +  <texture name="Check_Mark" file_name="icons/check_mark" preload="true" />    <texture name="ComboButton_Disabled" file_name="widgets/ComboButton_Disabled.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" />    <texture name="ComboButton_Selected" file_name="widgets/ComboButton_Selected.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" /> diff --git a/indra/newview/skins/default/textures/model_wizard/left_button_disabled.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Disabled.pngBinary files differ index c7c0eaa96b..c7c0eaa96b 100644 --- a/indra/newview/skins/default/textures/model_wizard/left_button_disabled.png +++ b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Disabled.png diff --git a/indra/newview/skins/default/textures/model_wizard/left_button_off.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Off.pngBinary files differ index 4a73c254fc..4a73c254fc 100644 --- a/indra/newview/skins/default/textures/model_wizard/left_button_off.png +++ b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Off.png diff --git a/indra/newview/skins/default/textures/model_wizard/left_button_over.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Over.pngBinary files differ index 6fb5c432de..6fb5c432de 100644 --- a/indra/newview/skins/default/textures/model_wizard/left_button_over.png +++ b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Over.png diff --git a/indra/newview/skins/default/textures/model_wizard/left_button_press.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Press.pngBinary files differ index fa18517933..fa18517933 100644 --- a/indra/newview/skins/default/textures/model_wizard/left_button_press.png +++ b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Press.png diff --git a/indra/newview/skins/default/textures/model_wizard/middle_button_disabled.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Disabled.pngBinary files differ index bed1a701bd..bed1a701bd 100644 --- a/indra/newview/skins/default/textures/model_wizard/middle_button_disabled.png +++ b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Disabled.png diff --git a/indra/newview/skins/default/textures/model_wizard/middle_button_off.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Off.pngBinary files differ index 57ce9af574..57ce9af574 100644 --- a/indra/newview/skins/default/textures/model_wizard/middle_button_off.png +++ b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Off.png diff --git a/indra/newview/skins/default/textures/model_wizard/middle_button_over.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Over.pngBinary files differ index 2c43022f0e..2c43022f0e 100644 --- a/indra/newview/skins/default/textures/model_wizard/middle_button_over.png +++ b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Over.png diff --git a/indra/newview/skins/default/textures/model_wizard/middle_button_press.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Press.pngBinary files differ index 6b8c1baca4..6b8c1baca4 100644 --- a/indra/newview/skins/default/textures/model_wizard/middle_button_press.png +++ b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Press.png diff --git a/indra/newview/skins/default/textures/model_wizard/right_button_disabled.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Disabled.pngBinary files differ index 51505e80c5..51505e80c5 100644 --- a/indra/newview/skins/default/textures/model_wizard/right_button_disabled.png +++ b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Disabled.png diff --git a/indra/newview/skins/default/textures/model_wizard/right_button_off.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Off.pngBinary files differ index 9f93efbd93..9f93efbd93 100644 --- a/indra/newview/skins/default/textures/model_wizard/right_button_off.png +++ b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Off.png diff --git a/indra/newview/skins/default/textures/model_wizard/right_button_over.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Over.pngBinary files differ index 3a4ec1a315..3a4ec1a315 100644 --- a/indra/newview/skins/default/textures/model_wizard/right_button_over.png +++ b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Over.png diff --git a/indra/newview/skins/default/textures/model_wizard/right_button_press.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Press.pngBinary files differ index 1f1b4c2ed5..1f1b4c2ed5 100644 --- a/indra/newview/skins/default/textures/model_wizard/right_button_press.png +++ b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Press.png diff --git a/indra/newview/skins/default/xui/en/floater_model_wizard.xml b/indra/newview/skins/default/xui/en/floater_model_wizard.xml index e2ec557b06..2377a9e4ef 100644 --- a/indra/newview/skins/default/xui/en/floater_model_wizard.xml +++ b/indra/newview/skins/default/xui/en/floater_model_wizard.xml @@ -18,12 +18,15 @@  	 enabled="false"  	 label="5. Upload"  	 border="false" -	 image_unselected="model_wizard/middle_button_off.png" -	 image_selected="model_wizard/middle_button_press.png" -	 image_hover_unselected="model_wizard/middle_button_over.png" -	 image_disabled="model_wizard/middle_button_disabled.png" -	 image_disabled_selected="model_wizard/middle_button_disabled.png" -	 width="110"/> +	 image_unselected="BreadCrumbBtn_Right_Off" +	 image_selected="BreadCrumbBtn_Right_Press" +	 image_hover_unselected="BreadCrumbBtn_Right_Over" +	 image_disabled="BreadCrumbBtn_Right_Disabled" +	 image_disabled_selected="BreadCrumbBtn_Right_Disabled" +	 width="110"> +		<button.commit_callback +		function="Wizard.Upload"/> +	</button>  	<button  	 top="32"  	 left="310" @@ -33,12 +36,15 @@  	 label="4. Review"  	 enabled="false"  	 border="false" -	 image_unselected="model_wizard/middle_button_off.png" -	 image_selected="model_wizard/middle_button_press.png" -	 image_hover_unselected="model_wizard/middle_button_over.png" -	 image_disabled="model_wizard/middle_button_disabled.png" -	 image_disabled_selected="model_wizard/middle_button_disabled.png" -	 width="110"/> +	 image_unselected="BreadCrumbBtn_Middle_Off" +	 image_selected="BreadCrumbBtn_Middle_Press" +	 image_hover_unselected="BreadCrumbBtn_Middle_Over" +	 image_disabled="BreadCrumbBtn_Middle_Disabled" +	 image_disabled_selected="BreadCrumbBtn_Middle_Disabled" +	 width="110"> +		<button.commit_callback +		function="Wizard.Review"/> +	</button>  	<button  	 top="32"  	 left="210" @@ -48,12 +54,15 @@  	 tab_stop="false"  	 enabled="false"  	 border="false" -	 image_unselected="model_wizard/middle_button_off.png" -	 image_selected="model_wizard/middle_button_press.png" -	 image_hover_unselected="model_wizard/middle_button_over.png" -	 image_disabled="model_wizard/middle_button_disabled.png" -	 image_disabled_selected="model_wizard/middle_button_disabled.png" -	 width="110"/> +	 image_unselected="BreadCrumbBtn_Middle_Off" +	 image_selected="BreadCrumbBtn_Middle_Press" +	 image_hover_unselected="BreadCrumbBtn_Middle_Over" +	 image_disabled="BreadCrumbBtn_Middle_Disabled" +	 image_disabled_selected="BreadCrumbBtn_Middle_Disabled" +	 width="110"> +		<button.commit_callback +		function="Wizard.Physics"/> +	</button>  	<button  	 top="32"  	 left="115" @@ -62,12 +71,15 @@  	 tab_stop="false"  	 height="32"  	 border="false" -	 image_unselected="model_wizard/middle_button_off.png" -	 image_selected="model_wizard/middle_button_press.png" -	 image_hover_unselected="model_wizard/middle_button_over.png" -	 image_disabled="model_wizard/middle_button_disabled.png" -	 image_disabled_selected="model_wizard/middle_button_disabled.png" -	 width="110"/> +	 image_unselected="BreadCrumbBtn_Middle_Off" +	 image_selected="BreadCrumbBtn_Middle_Press" +	 image_hover_unselected="BreadCrumbBtn_Middle_Over" +	 image_disabled="BreadCrumbBtn_Middle_Disabled" +	 image_disabled_selected="BreadCrumbBtn_Middle_Disabled" +	 width="110"> +		<button.commit_callback +		function="Wizard.Optimize"/> +	</button>  	<button  	 top="32"  	 left="15" @@ -76,12 +88,15 @@  	 enabled="false"  	 label="1. Choose File"  	 height="32" -	 image_unselected="model_wizard/left_button_off.png" -	 image_selected="model_wizard/left_button_press.png" -	 image_hover_unselected="model_wizard/left_button_over.png" -	 image_disabled="model_wizard/left_button_disabled.png" -	 image_disabled_selected="model_wizard/left_button_disabled.png" -	 width="110"/> +	 image_unselected="BreadCrumbBtn_Left_Off" +	 image_selected="BreadCrumbBtn_Left_Press" +	 image_hover_unselected="BreadCrumbBtn_Left_Over" +	 image_disabled="BreadCrumbBtn_Left_Disabled" +	 image_disabled_selected="BreadCrumbBtn_Left_Disabled" +	 width="110"> +		<button.commit_callback +		function="Wizard.Choose"/> +	</button>  	<panel  		 height="388"  		 top_pad="0" @@ -190,21 +205,49 @@  			<text  			 top_pad="10"  			 width="130" -			 height="15" +			 height="14"  			 left="340"  			 text_color="White"  			 word_wrap="true">  				Dimensions (meters):  			</text>  			<text -			 top_pad="2" +			 top_pad="0"  			 width="160"  			 height="15" -			 name="import_dimensions" +			 font="SansSerifSmallBold"  +			 text_color="White" +			 name="dimensions"  			 left_delta="0"> -				X:  [X] |Y:  [Y] |Z: [Z] +				X:         Y:         Z:   			</text>  			<text +			 top_delta="0" +			 width="160" +			 height="15" +			 name="dimension_dividers" +			 left_delta="41"> +				 |               |    +			</text> +			<text +			 top_delta="0" +			 width="160" +			 height="15" +			 name="dimension_x" +			 left="356"/> +			<text +			 top_delta="0" +			 width="160" +			 height="15" +			 name="dimension_y" +			 left="403"/> +			<text +			 top_delta="0" +			 width="160" +			 height="15" +			 name="dimension_z" +			 left="450"/> +			<text  			 top="100"  			 width="320"  			 height="15" @@ -397,29 +440,66 @@ Advanced users familiar with 3d content creation tools may prefer to use the [se  		   width="290" />  			<text   			font="SansSerifSmall"  -			top_pad="1"   +			top_pad="0"    			width="300"   			left_delta="6"   			height="4">'                                             '                                             '</text> -			<text top_delta="25" width="100" text_color="White" left_delta="50"  height="20">Resource Cost:</text> + + +			<icon +				 top_pad="10" +				 left_delta="0" +				 width="280" +				 height="2" +				 image_name="model_wizard\divider_line.png"/> +	 +			<text top_delta="25" width="200" text_color="White" left_delta="50" name="streaming cost"  height="20">Resource Cost:    [COST]</text>  			<text top_delta="25" width="100" text_color="White" left_delta="0"  height="20">Upload Fee:</text>  			<text -			 top_pad="15" -			 width="130" -			 height="15" -			 left="10" -			 text_color="White" -			 word_wrap="true"> +						 top_pad="5" +						 width="130" +						 height="14" +						 left="10" +						 text_color="White" +						 word_wrap="true">  				Dimensions (meters):  			</text>  			<text  			 top_pad="0"  			 width="160"  			 height="15" -			 name="import_dimensions" +			 font="SansSerifSmallBold" +			 text_color="White" +			 name="dimensions"  			 left_delta="0"> -				X:  [X] |Y:  [Y] |Z: [Z] +				X:         Y:         Z: +			</text> +			<text +			 top_delta="0" +			 width="160" +			 height="15" +			 name="dimension_dividers" +			 left_delta="41"> +				|               |  			</text> +			<text +			 top_delta="0" +			 width="160" +			 height="15" +			 name="dimension_x" +			 left_delta="-25"/> +			<text +			 top_delta="0" +			 width="160" +			 height="15" +			 name="dimension_y" +			 left_delta="46"/> +			<text +			 top_delta="0" +			 width="160" +			 height="15" +			 name="dimension_z" +			 left_delta="46"/>  		</panel>  	</panel> @@ -466,7 +546,7 @@ Advanced users familiar with 3d content creation tools may prefer to use the [se      <panel  		 top_delta="40"  		 left="15" -		 height="245" +		 height="265"  		 width="500"  		 name="content"  		 bg_opaque_color="DkGray2" @@ -499,9 +579,18 @@ Advanced users familiar with 3d content creation tools may prefer to use the [se        <text top_pad="10" width="110" halign="center" word_wrap="true" left="25"  height="40">Recommended for solid objects</text>        <text top_delta="0" width="110" halign="center" word_wrap="true" left="190"  height="40">Recommended for buildings</text>        <text top_delta="0" width="110" halign="center" word_wrap="true" left="350"  height="40">Recommended for vehicles</text> -      <text top_delta="60" width="100" text_color="White" left="160"  height="20">Resource Cost:</text> -      <text top_delta="20" width="100" text_color="White" left_delta="0"  height="20">Physics Cost:</text> -      <text top_delta="20" width="100" text_color="White" left_delta="0"  height="20">Upload Fee:</text> + + +		<icon +			 top_pad="5" +			 left="15" +			 width="470" +			 height="2" +			 image_name="model_wizard\divider_line.png"/> +		 +	<text top_delta="20" width="180" text_color="White" left="160" name="streaming cost"  height="20">Resource Cost:       [COST]</text> +      <text top_delta="26" width="180" text_color="White" left_delta="0" name="physics cost"  height="20">Physics Cost:           [COST]</text> +      <text top_delta="26" width="180" text_color="White" left_delta="0"  height="20">Upload Fee:</text>      </panel>  	</panel> @@ -511,7 +600,7 @@ Advanced users familiar with 3d content creation tools may prefer to use the [se  		 height="388"  		 top_delta="0"  		 name="review_panel" -		 visible="false" +		 visible="true"  		 width="530"  		 left="0">  		<panel @@ -538,7 +627,7 @@ Advanced users familiar with 3d content creation tools may prefer to use the [se  		<text  		 top_pad="14"  		 width="460" -		 height="20" +		 height="24"  		 font="SansSerifSmall"  		 layout="topleft"  		 name="description" @@ -546,8 +635,14 @@ Advanced users familiar with 3d content creation tools may prefer to use the [se  		 left_delta="10">  			Review the details below then click. Upload to upload your model. Your L$ balance will be charged when you click Upload.  		</text> +		<icon +			 top_pad="10" +			 left="20" +			 width="495" +			 height="2" +			 image_name="model_wizard\divider_line.png"/>      <panel -		 top_delta="40" +		 top_pad="5"  		 left="15"  		 height="245"  		 width="500" @@ -555,7 +650,7 @@ Advanced users familiar with 3d content creation tools may prefer to use the [se        <text top="10" left="10" width="85" text_color="White" follows="left|top" height="15" name="lod_label">          Model Preview:        </text> -      <combo_box left_pad="5" top_delta="-2"  follows="left|top" list_position="below" height="18" +      <combo_box left_pad="5" top_delta="-5"  follows="left|top" list_position="below" height="22"  	     name="preview_lod_combo" width="90" tool_tip="LOD to view in preview render">          <combo_item name="high">            High @@ -580,32 +675,61 @@ Advanced users familiar with 3d content creation tools may prefer to use the [se  				 height="190"  				 follows="all"  				 width="190"> -			</panel>			 -      <text -			 top_pad="8" -			 width="130" -			 height="15" -			 left="10" -			 text_color="White" -			 word_wrap="true"> -				Dimensions (meters): -			</text> -      <text -			 top_pad="0" -			 width="160" -			 height="15" -			 name="import_dimensions" -			 left_delta="0"> -        X:  [X] |Y:  [Y] |Z: [Z] -      </text> +			</panel> +		<text +					 top_pad="8" +					 width="130" +					 height="14" +					 left="10" +					 text_color="White" +					 word_wrap="true"> +			Dimensions (meters): +		</text> +		<text +		 top_pad="0" +		 width="160" +		 height="15" +		 font="SansSerifSmallBold" +		 text_color="White" +		 name="dimensions" +		 left_delta="0"> +			X:         Y:         Z: +		</text> +		<text +		 top_delta="0" +		 width="160" +		 height="15" +		 name="dimension_dividers" +		 left_delta="41"> +			|               | +		</text> +		<text +		 top_delta="0" +		 width="160" +		 height="15" +		 name="dimension_x" +		 left_delta="-25"/> +		<text +		 top_delta="0" +		 width="160" +		 height="15" +		 name="dimension_y" +		 left_delta="46"/> +		<text +		 top_delta="0" +		 width="160" +		 height="15" +		 name="dimension_z" +		 left_delta="46"/>        </panel>      <text -      width="200" +      width="300"        height="12"        top="125"  +	  name="streaming cost"         left="230"         font="SansSerifSmallBold"  -      text_color="White">Resource Cost:</text> +      text_color="White">Resource Cost:         [COST]</text>      <text        width="285"        height="30" @@ -614,12 +738,13 @@ Advanced users familiar with 3d content creation tools may prefer to use the [se        word_wrap="true"        font="SansSerifItalic">This is the cost to your Region's prim/object limit, at default scale</text>  	<text -	 width="200" +	 width="300"  	 height="12" +	 name="physics cost"   	 top_pad="10"  		 left_delta="0"  	 font="SansSerifSmallBold" -	 text_color="White">Physics Cost:</text> +	 text_color="White">Physics Cost:        [COST]</text>  	<text  	  width="285"  	  height="30" @@ -663,7 +788,7 @@ Advanced users familiar with 3d content creation tools may prefer to use the [se  		 height="388"  		 top_delta="0"  		 name="upload_panel" -		 visible="true" +		 visible="false"  		 width="530"  		 left="0">  		<panel | 
