From e7f3f3bdbbec310030209e09d389cd434adb7991 Mon Sep 17 00:00:00 2001
From: leyla_linden <none@none>
Date: Mon, 20 Dec 2010 17:32:05 -0800
Subject: [PATCH] model upload wizard - added optimization and state changes

---
 indra/newview/llfloatermodelpreview.cpp       |  15 +-
 indra/newview/llfloatermodelpreview.h         |   4 +-
 indra/newview/llfloatermodelwizard.cpp        | 141 ++-
 indra/newview/llfloatermodelwizard.h          |  38 +-
 .../default/xui/en/floater_model_wizard.xml   | 832 +++++++++++++-----
 5 files changed, 774 insertions(+), 256 deletions(-)

diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp
index f9648b0e3bd..85d0ae02cfe 100755
--- a/indra/newview/llfloatermodelpreview.cpp
+++ b/indra/newview/llfloatermodelpreview.cpp
@@ -107,7 +107,6 @@ const S32 PREVIEW_RESIZE_HANDLE_SIZE = S32(RESIZE_HANDLE_WIDTH * OO_SQRT2) + PRE
 const S32 PREVIEW_HPAD = PREVIEW_RESIZE_HANDLE_SIZE;
 const S32 PREF_BUTTON_HEIGHT = 16 + 7 + 16;
 const S32 PREVIEW_TEXTURE_HEIGHT = 300;
-const S32 NUM_LOD = 4;
 
 void drawBoxOutline(const LLVector3& pos, const LLVector3& size);
 
@@ -476,12 +475,10 @@ void LLFloaterModelPreview::onPreviewLODCommit(LLUICtrl* ctrl, void* userdata)
 	
 	S32 which_mode = 0;
 	
-	LLCtrlSelectionInterface* iface = fp->childGetSelectionInterface("preview_lod_combo");
-	if (iface)
-	{
-		which_mode = iface->getFirstSelectedIndex();
-	}
-	which_mode = (NUM_LOD-1)-which_mode; // combo box list of lods is in reverse order
+	LLComboBox* combo = (LLComboBox*) ctrl;
+	
+	which_mode = (NUM_LOD-1)-combo->getFirstSelectedIndex(); // combo box list of lods is in reverse order
+
 	fp->mModelPreview->setPreviewLOD(which_mode);
 }
 
@@ -2699,7 +2696,7 @@ bool LLModelPreview::containsRiggedAsset( void )
 	}
 	return false;
 }
-void LLModelPreview::genLODs(S32 which_lod)
+void LLModelPreview::genLODs(S32 which_lod, U32 decimation)
 {
 	if (mBaseModel.empty())
 	{
@@ -2916,7 +2913,7 @@ void LLModelPreview::genLODs(S32 which_lod)
 		{
 			if (lod < start)
 			{
-				triangle_count /= 3;
+				triangle_count /= decimation;
 			}
 		}
 		else
diff --git a/indra/newview/llfloatermodelpreview.h b/indra/newview/llfloatermodelpreview.h
index ae4cf18feef..64b220d86bf 100755
--- a/indra/newview/llfloatermodelpreview.h
+++ b/indra/newview/llfloatermodelpreview.h
@@ -52,6 +52,8 @@ class domTranslate;
 class LLMenuButton;
 class LLToggleableMenu;
 
+const S32 NUM_LOD = 4;
+
 class LLModelLoader : public LLThread
 {
 public:
@@ -258,7 +260,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);
+	void genLODs(S32 which_lod = -1, U32 decimation = 3);
 	void generateNormals();
 	void consolidate();
 	void clearMaterials();
diff --git a/indra/newview/llfloatermodelwizard.cpp b/indra/newview/llfloatermodelwizard.cpp
index 79c29ef0174..6a92e43d1a0 100644
--- a/indra/newview/llfloatermodelwizard.cpp
+++ b/indra/newview/llfloatermodelwizard.cpp
@@ -28,19 +28,71 @@
 
 #include "llviewerprecompiledheaders.h"
 
+#include "llbutton.h"
 #include "lldrawable.h"
+#include "llcombobox.h"
 #include "llfloater.h"
 #include "llfloatermodelwizard.h"
 #include "llfloatermodelpreview.h"
 #include "llfloaterreg.h"
+#include "llslider.h"
 
 
+static	const std::string stateNames[]={
+	"choose_file",
+	"optimize",
+	"physics",
+	"review",
+	"upload"};
 
 LLFloaterModelWizard::LLFloaterModelWizard(const LLSD& key)
 	: LLFloater(key)
 {
 }
 
+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");
+		if (view) 
+		{
+			view->setVisible(state == (int) t ? TRUE : FALSE);
+		}
+	}
+
+	if (state == OPTIMIZE)
+	{
+		mModelPreview->genLODs(-1);
+	}
+}
+
+void LLFloaterModelWizard::setButtons(int state)
+{
+	for(size_t i=0; i<LL_ARRAY_SIZE(stateNames); ++i)
+	{
+		LLButton *button = getChild<LLButton>(stateNames[i]+"_btn");
+
+		if (i < state)
+		{
+			button->setEnabled(TRUE);
+			button->setToggleState(FALSE);
+		}
+		else if (i == state)
+		{
+			button->setEnabled(TRUE);
+			button->setToggleState(TRUE);
+		}
+		else
+		{
+			button->setEnabled(FALSE);
+		}
+	}
+}
+
 void LLFloaterModelWizard::loadModel()
 {
 	 mModelPreview->mLoading = TRUE;
@@ -48,6 +100,30 @@ void LLFloaterModelWizard::loadModel()
 	(new LLMeshFilePicker(mModelPreview, 3))->getFile();
 }
 
+void LLFloaterModelWizard::onClickCancel()
+{
+	closeFloater();
+}
+
+void LLFloaterModelWizard::onClickBack()
+{
+	setState(llmax((int) CHOOSE_FILE, mState-1));
+}
+
+void LLFloaterModelWizard::onClickNext()
+{
+	setState(llmin((int) UPLOAD, mState+1));
+}
+
+bool LLFloaterModelWizard::onEnableNext()
+{
+	return true;
+}
+
+bool LLFloaterModelWizard::onEnableBack()
+{
+	return true;
+}
 
 BOOL LLFloaterModelWizard::postBuild()
 {
@@ -56,7 +132,20 @@ BOOL LLFloaterModelWizard::postBuild()
 	childSetValue("import_scale", (F32) 0.67335826);
 
 	getChild<LLUICtrl>("browse")->setCommitCallback(boost::bind(&LLFloaterModelWizard::loadModel, this));
+	getChild<LLUICtrl>("cancel")->setCommitCallback(boost::bind(&LLFloaterModelWizard::onClickCancel, this));
+	getChild<LLUICtrl>("back")->setCommitCallback(boost::bind(&LLFloaterModelWizard::onClickBack, this));
+	getChild<LLUICtrl>("next")->setCommitCallback(boost::bind(&LLFloaterModelWizard::onClickNext, this));
+	childSetCommitCallback("preview_lod_combo", onPreviewLODCommit, this);
+	getChild<LLUICtrl>("accuracy_slider")->setCommitCallback(boost::bind(&LLFloaterModelWizard::onAccuracyPerformance, this, _2));
+
+	childSetAction("ok_btn", onUpload, 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);
@@ -64,9 +153,55 @@ BOOL LLFloaterModelWizard::postBuild()
 
 	center();
 
+	setState(CHOOSE_FILE);
+
+	childSetTextArg("import_dimensions", "[X]", LLStringUtil::null);
+	childSetTextArg("import_dimensions", "[Y]", LLStringUtil::null);
+	childSetTextArg("import_dimensions", "[Z]", LLStringUtil::null);
+
 	return TRUE;
 }
 
+void LLFloaterModelWizard::onUpload(void* user_data)
+{
+	LLFloaterModelWizard* mp = (LLFloaterModelWizard*) user_data;
+	
+	mp->mModelPreview->rebuildUploadData();
+	
+	gMeshRepo.uploadModel(mp->mModelPreview->mUploadData, mp->mModelPreview->mPreviewScale, 
+						  mp->childGetValue("upload_textures").asBoolean(), mp->childGetValue("upload_skin"), mp->childGetValue("upload_joints"));
+	
+	mp->closeFloater(false);
+}
+
+
+void LLFloaterModelWizard::onAccuracyPerformance(const LLSD& data)
+{
+	int val = (int) data.asInteger();
+
+	mModelPreview->genLODs(-1, NUM_LOD-val);
+
+	mModelPreview->refresh();
+}
+
+void LLFloaterModelWizard::onPreviewLODCommit(LLUICtrl* ctrl, void* userdata)
+{
+	LLFloaterModelWizard *fp =(LLFloaterModelWizard *)userdata;
+	
+	if (!fp->mModelPreview)
+	{
+		return;
+	}
+	
+	S32 which_mode = 0;
+	
+	LLComboBox* combo = (LLComboBox*) ctrl;
+	
+	which_mode = (NUM_LOD-1)-combo->getFirstSelectedIndex(); // combo box list of lods is in reverse order
+
+	fp->mModelPreview->setPreviewLOD(which_mode);
+}
+
 void LLFloaterModelWizard::draw()
 {
 	LLFloater::draw();
@@ -74,14 +209,14 @@ void LLFloaterModelWizard::draw()
 	
 	mModelPreview->update();
 
-	if (mModelPreview && mModelPreview->mModelLoader)
+	if (mModelPreview)
 	{
 		gGL.color3f(1.f, 1.f, 1.f);
 		
 		gGL.getTexUnit(0)->bind(mModelPreview);
 		
-
-		LLView* preview_panel = getChild<LLView>("preview_panel");
+		LLView *view = getChild<LLView>(stateNames[mState]+"_panel");
+		LLView* preview_panel = view->getChild<LLView>("preview_panel");
 
 		LLRect rect = preview_panel->getRect();
 		if (rect != mPreviewRect)
diff --git a/indra/newview/llfloatermodelwizard.h b/indra/newview/llfloatermodelwizard.h
index c766697d472..ab69d93b635 100644
--- a/indra/newview/llfloatermodelwizard.h
+++ b/indra/newview/llfloatermodelwizard.h
@@ -35,24 +35,36 @@ class LLFloaterModelWizard : public LLFloater
 	virtual ~LLFloaterModelWizard() {};
 	/*virtual*/	BOOL	postBuild();
 	void			draw();
-	void loadModel();
-	//void onSave();
-	//void onReset();
-	//void onCancel();
-	///*virtual*/ void onOpen(const LLSD& key);
 	
 private:
-	
+	enum EWizardState
+	{
+		CHOOSE_FILE = 0,
+		OPTIMIZE,
+		PHYSICS,
+		REVIEW,
+		UPLOAD
+	};
+
+	void setState(int state);
+	void setButtons(int state);
+	void onClickCancel();
+	void onClickBack();
+	void onClickNext();
+	bool onEnableNext();
+	bool onEnableBack();
+	void loadModel();
+	static void	onPreviewLODCommit(LLUICtrl*,void*);
+	void onAccuracyPerformance(const LLSD& data);
+	static void onUpload(void* data);
+
 	LLModelPreview*	mModelPreview;
 	LLRect			mPreviewRect;
+	int mState;
+
+
+
 };
-/*
-namespace LLFloaterDisplayNameUtil
-{
-	// Register with LLFloaterReg
-	void registerFloater();
-}
-*/
 
 
 #endif
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 4a4b8075c8b..18dc33a23ad 100644
--- a/indra/newview/skins/default/xui/en/floater_model_wizard.xml
+++ b/indra/newview/skins/default/xui/en/floater_model_wizard.xml
@@ -1,230 +1,602 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- legacy_header_height="18"
- layout="topleft"
- name="Model Wizard"
- help_topic="model_wizard"
- bg_opaque_image_overlay="0.5 0.5 0.5 1"
- height="450"
- save_rect="true"
- title="UPLOAD MODEL WIZARD" 
- width="530">
-	<panel
-		   height="600">
-		<button
-	     top="30"
-		 left="410"
-		 height="32"
-		 name="upload" 
-		 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"/>
-		<button
-	     top="30"
-		 left="310"
-		 height="32"
-		  tab_stop="false"
-		 name="review"
-		 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"/>
-		<button
-	     top="30"
-		 left="210"
-		 height="32"
-		 name="physics"
-		 label="3. Physics"
-		 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"/>
-		<button
-	     top="30"
-		 left="115"
-		 name="optimize"
-		 label="2. Optimize"
-		  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"/>
-		<button
-	     top="30"
-		 left="15"
-		 name="choose_file"
-		 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"/>
-		<panel
-		 top_pad="20"
-		 height="20"
-		 width="500" 
-		 bg_opaque_color="DkGray2"
-		 background_visible="true"
-		 background_opaque="true" 
-		 left="20">
-		<text
-		 width="200"
-		 left="10" 
-		 top="2" 
-		 height="10"
-		 font="SansSerifBig"
-		 layout="topleft"
-		 >
-			  Upload Model
-		</text></panel>
-		<text
-		 top_pad="14"
-		 width="460"
-		 height="20"
-		 font="SansSerifSmall"
-		 layout="topleft"
-		 word_wrap="true"
-		 left_delta="0">
-			This wizard will help you import mesh models to Second Life.  First specify a file containing the model you wish to import.  Second Life supports COLLADA (.dae) files.
-		</text>
-
-		<panel
-			top_delta="40"
-			left="15"
-		 height="240"
-		 width="500"
-		 bg_opaque_color="DkGray2"
-		 background_visible="true"
-		 background_opaque="true">
-
-			<text
-	 type="string"
-	 length="1"
-	 follows="left|top"
-	 top="10" 
-	 height="10"
-	 layout="topleft"
-	 left_delta="10"
-	 name="Cache location"
-	 width="300">
-				Filename:
-			</text>
-			<line_editor
-			 border_style="line"
-			 border_thickness="1"
-			 follows="left|top"
-			 font="SansSerifSmall"
-			 height="20"
-			 layout="topleft"
-	 left_delta="0"
-			 max_length="4096"
-			 name="lod_file"
-			 top_pad="5"
-			 width="220" />
-			<button
-			 follows="left|top"
-			 height="23"
-			 label="Browse..."
-			 label_selected="Browse..."
-			 layout="topleft"
-			 left_pad="10"
-			 name="browse"
-			 top_delta="-1"
-			 width="75">
-			</button>
-			<text
-	top_delta="-15"
-	width="200"
-	height="15"
-	font="SansSerifSmall"
-	layout="topleft"
-	left_pad="24">
-				Model Preview:
-			</text>
-
-			<!-- Placeholder panel for 3D preview render -->
-			
-			<panel
-					left_delta="-2"
-				   top_pad="0"
-					name="preview_panel"
-					bevel_style="none"
-				   border_style="line"
-					border="true"
-				   height="150"
-			  follows="all"
-				   width="150">
-			</panel>
-			<text
-			 top_pad="10"
-			 width="130"
-			 height="15"
-			 left="340"
-			 word_wrap="true"
-		 >
-				Dimensions (meters):
-			</text>
-			<text
-			 top_pad="5"
-			 width="150"
-			 height="15"
-			 name="import_dimensions"
-			 left_delta="0">
-				X:  [X] |  Y:  [Y] | Z: [Z]
-			</text>
-			
-			<text
-			 top="100"
-			 width="320"
-			 height="40"
-			 left="10"
-			 word_wrap="true"
-		 >
-				Note:
-Advanced users familiar with 3d content creation tools may prefer to use the Advanced Mesh Import window.
-			</text>
-		</panel>
-		<button
-		 top="410"
-		 right="-175" 
-		 width="80"
-		 height="20"
-		 label="&lt;&lt; Back" />
-		<button
-		 top="410"
-		 right="-92"
-		 width="80"
-		 height="20"
-		 label="Next &gt;&gt; " />
-		<button
-		 top="410"
-		 right="-15"
-		 width="70"
-		 height="20"
-		 label="Cancel" />
-	</panel>
-	<spinner visible="false" left="10" height="20" follows="top|left" width="80" top_pad="-50" value="1.0" min_val="0.01" max_val="64.0" name="import_scale"/>
-</floater>
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+ legacy_header_height="18"
+ layout="topleft"
+ name="Model Wizard"
+ help_topic="model_wizard"
+ bg_opaque_image_overlay="0.5 0.5 0.5 1"
+ height="450"
+ save_rect="true"
+ title="UPLOAD MODEL WIZARD"
+ width="530">
+	<button
+	 top="30"
+	 tab_stop="false"
+	 left="410"
+	 height="32"
+	 name="upload_btn"
+	 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"/>
+	<button
+	 top="30"
+	 left="310"
+	 height="32"
+	 tab_stop="false"
+	 name="review_btn"
+	 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"/>
+	<button
+	 top="30"
+	 left="210"
+	 height="32"
+	 name="physics_btn"
+	 label="3. Physics"
+	 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"/>
+	<button
+	 top="30"
+	 left="115"
+	 name="optimize_btn"
+	 label="2. Optimize"
+	 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"/>
+	<button
+	 top="30"
+	 left="15"
+	 name="choose_file_btn"
+	 tab_stop="false"
+	 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"/>
+	<panel
+		 height="388"
+		 top_pad="0"
+		 name="choose_file_panel"
+		 visible="true"
+		 width="530"
+		 left="0">
+		<panel
+		 height="20"
+		 top_pad="20"
+		 width="500"
+		 name="header_panel"
+		 bg_opaque_color="DkGray2"
+		 background_visible="true"
+		 background_opaque="true"
+		 left="20">
+			<text
+			 width="200"
+			 left="10"
+			 top="2"
+			 name="header_text"
+			 height="10"
+			 font="SansSerifBig"
+			 layout="topleft">
+				Upload Model
+			</text>
+		</panel>
+		<text
+		 top_pad="14"
+		 width="460"
+		 height="20"
+		 name="description"
+		 font="SansSerifSmall"
+		 layout="topleft"
+		 word_wrap="true"
+		 left_delta="0">
+			This wizard will help you import mesh models to Second Life.  First specify a file containing the model you wish to import.  Second Life supports COLLADA (.dae) files.
+		</text>
+		<panel
+		 top_delta="40"
+		 left="15"
+		 height="240"
+		 width="500"
+		 name="content"
+		 bg_opaque_color="DkGray2"
+		 background_visible="true"
+		 background_opaque="true">
+			<text
+			 type="string"
+			 length="1"
+			 follows="left|top"
+			 top="10"
+			 height="10"
+			 layout="topleft"
+			 left_delta="10"
+			 name="Cache location"
+			 width="300">
+				Filename:
+			</text>
+			<line_editor
+			 border_style="line"
+			 border_thickness="1"
+			 follows="left|top"
+			 font="SansSerifSmall"
+			 height="20"
+			 layout="topleft"
+			 left_delta="0"
+			 max_length="4096"
+			 name="lod_file"
+			 top_pad="5"
+			 width="220" />
+			<button
+			 follows="left|top"
+			 height="23"
+			 label="Browse..."
+			 label_selected="Browse..."
+			 layout="topleft"
+			 left_pad="10"
+			 name="browse"
+			 top_delta="-1"
+			 width="75">
+			</button>
+			<text
+			 top_delta="-15"
+			 width="200"
+			 height="15"
+			 font="SansSerifSmall"
+			 layout="topleft"
+			 left_pad="24">
+				Model Preview:
+			</text>
+			<!-- Placeholder panel for 3D preview render -->
+			<panel
+			 left_delta="-2"
+			 top_pad="0"
+			 name="preview_panel"
+			 bevel_style="none"
+			 border_style="line"
+			 border="true"
+			 height="150"
+			 follows="all"
+			 width="150">
+			</panel>
+			<text
+			 top_pad="10"
+			 width="130"
+			 height="15"
+			 left="340"
+			 word_wrap="true">
+				Dimensions (meters):
+			</text>
+			<text
+			 top_pad="5"
+			 width="160"
+			 height="15"
+			 name="import_dimensions"
+			 left_delta="0">
+				X:  [X] |  Y:  [Y] | Z: [Z]
+			</text>
+			<text
+			 top="100"
+			 width="320"
+			 height="40"
+			 left="10"
+			 word_wrap="true">
+				Note:
+				Advanced users familiar with 3d content creation tools may prefer to use the Advanced Mesh Import window.
+			</text>
+			<combo_box left_pad="0" top_delta="0"  follows="left|top" list_position="below" height="18"
+  name="preview_lod_combo_2" width="90" tool_tip="LOD to view in preview render">
+				<combo_item name="high">
+					High
+				</combo_item>
+				<combo_item name="medium">
+					Medium
+				</combo_item>
+				<combo_item name="lowest">
+					Lowest
+				</combo_item>
+				<combo_item name="low">
+					Low
+				</combo_item>
+			</combo_box>
+		</panel>
+	</panel>
+
+
+	<panel
+		 height="388"
+		 top_delta="0"
+		 name="optimize_panel"
+		 visible="false"
+		 width="530"
+		 left="0">
+		<panel
+		 height="20"
+		 top_pad="20"
+		 name="header_panel"
+		 width="500"
+		 bg_opaque_color="DkGray2"
+		 background_visible="true"
+		 background_opaque="true"
+		 left="20">
+			<text
+			 width="200"
+			 left="10"
+			 name="header_text"
+			 top="2"
+			 height="10"
+			 font="SansSerifBig"
+			 layout="topleft">
+				Optimize
+			</text>
+		</panel>
+		<text
+		 top_pad="14"
+		 width="460"
+		 height="20"
+		 font="SansSerifSmall"
+		 layout="topleft"
+		 name="description"
+		 word_wrap="true"
+		 left_delta="0">
+			This wizard is optimizing your model. This may take several minutes. To stop the process click the back button
+		</text>
+		<panel
+		 top_delta="40"
+		 visible="false"
+		 left="15"
+		 height="240"
+		 width="500"
+		 name="content"
+		 bg_opaque_color="DkGray2"
+		 background_visible="true"
+		 background_opaque="true">
+			<text
+			 top="20"
+			 width="300"
+			 height="12"
+			 font="SansSerifBold"
+			 left="112">Generating Level of Detail</text>
+			<progress_bar
+			  name="optimize_progress_bar"
+              image_fill="model_wizard\progress_light.png"
+			  color_bg="1 1 1 1"
+			  color_bar="1 1 1 0.96"
+			  follows="left|right|top"
+			  width="260"
+			  height="16"
+			  image_bar="model_wizard\progress_bar_bg.png"
+			  top_pad="14"
+			  left="110"/>
+			<icon
+			 top_pad="10"
+			 left_delta="0"
+			 width="13"
+			 height="12"
+			 image_name="model_wizard\check_mark.png"/>
+			<text
+			 top_delta="0"
+			 left_delta="18"
+			 name="high_detail_text"
+			 width="200"
+			 height="14">Generate Level of Detail: High</text>
+			<icon
+			 top_pad="10"
+			 left_delta="-18"
+			 width="13"
+			 height="12"
+			 image_name="model_wizard\check_mark.png"/>
+			<text
+			 top_delta="0"
+			 left_delta="18"
+			 name="medium_detail_text"
+			 width="200"
+			 height="14">Generate Level of Detail: Medium</text>
+			<icon
+			 top_pad="10"
+			 left_delta="-18"
+			 width="13"
+			 height="12"
+			 image_name="model_wizard\check_mark.png"/>
+			<text
+			 top_delta="0"
+			 left_delta="18"
+			 name="low_detail_text"
+			 width="200"
+			 height="14">Generate Level of Detail: Low</text>
+			<icon
+			 top_pad="10"
+			 left_delta="-18"
+			 width="13"
+			 height="12"
+			 image_name="model_wizard\check_mark.png"/>
+			<text
+			 top_delta="0"
+			 left_delta="18"
+			 name="lowest_detail_text"
+			 width="200"
+			 height="14">Generate Level of Detail: Lowest</text>
+		</panel>
+		<panel
+				 top_delta="0"
+				 left_delta="0"
+				 height="240"
+				 width="500"
+				 name="content2"
+				 bg_opaque_color="DkGray2"
+				 background_visible="true"
+				 background_opaque="true">
+			<text top="10" left="10" width="85"  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"
+	     name="preview_lod_combo" width="90" tool_tip="LOD to view in preview render">
+				<combo_item name="high">
+					High
+				</combo_item>
+				<combo_item name="medium">
+					Medium
+				</combo_item>
+				<combo_item name="lowest">
+					Lowest
+				</combo_item>
+				<combo_item name="low">
+					Low
+				</combo_item>
+			</combo_box>
+			<panel
+				 left="10"
+				 top_pad="5"
+				 name="preview_panel"
+				 bevel_style="none"
+				 border_style="line"
+				 border="true"
+				 height="175"
+				 follows="all"
+				 width="175">
+			</panel>
+			<text top="50" left="210"  font="SansSerifSmallBold" width="300" height="4">Performance                            Accuracy</text>
+
+			<slider
+		   follows="left|top"
+		   height="20"
+		   increment="1"
+		   layout="topleft"
+		   left="220"
+		   max_val="2"
+		   initial_vauel="1"
+		   min_val="0"
+		   name="accuracy_slider"
+		   show_text="false"
+		   top="105"
+		   width="250" />
+			<text font="SansSerifSmall" top_pad="4"  width="300" left_delta="6" height="4">|                                      |                                      |</text>
+
+		</panel>
+	</panel>
+
+
+
+	<panel
+		 height="388"
+		 top_delta="0"
+		 name="physics_panel"
+		 visible="false"
+		 width="530"
+		 left="0">
+		<panel
+		 height="20"
+		 top_pad="20"
+		 name="header_panel"
+		 width="500"
+		 bg_opaque_color="DkGray2"
+		 background_visible="true"
+		 background_opaque="true"
+		 left="20">
+			<text
+			 width="200"
+			 left="10"
+			 name="header_text"
+			 top="2"
+			 height="10"
+			 font="SansSerifBig"
+			 layout="topleft">
+				Physics
+			</text>
+		</panel>
+		<text
+		 top_pad="14"
+		 width="460"
+		 height="20"
+		 font="SansSerifSmall"
+		 layout="topleft"
+		 name="description"
+		 word_wrap="true"
+		 left_delta="0">
+			The wizard will create a physical shape, which determines how the object interacts with other objects and avatars. Set the slider to the detail level most appropriate for how your object will be used:
+		</text>
+		<panel
+		 top_delta="40"
+		 left="15"
+		 height="240"
+		 width="500"
+		 name="content"
+		 bg_opaque_color="DkGray2"
+		 background_visible="true"
+		 background_opaque="true"/>
+	</panel>
+
+
+	<panel
+		 height="388"
+		 top_delta="0"
+		 name="review_panel"
+		 visible="false"
+		 width="530"
+		 left="0">
+		<panel
+		 height="20"
+		 top_pad="20"
+		 name="header_panel"
+		 width="500"
+		 bg_opaque_color="DkGray2"
+		 background_visible="true"
+		 background_opaque="true"
+		 left="20">
+			<text
+			 width="200"
+			 left="10"
+			 name="header_text"
+			 top="2"
+			 height="10"
+			 font="SansSerifBig"
+			 layout="topleft">
+				Review
+			</text>
+		</panel>
+		<text
+		 top_pad="14"
+		 width="460"
+		 height="20"
+		 font="SansSerifSmall"
+		 layout="topleft"
+		 name="description"
+		 word_wrap="true"
+		 left_delta="0">
+			Review the details below then click. Upload to upload your model. Your L$ balance will be charged when you click Upload.
+		</text>
+		<panel
+		 top_delta="40"
+		 left="15"
+		 height="240"
+		 width="500"
+		 name="content"
+		 bg_opaque_color="DkGray2"
+		 background_visible="true"
+		 background_opaque="true"/>
+	</panel>
+
+
+
+
+	<panel
+		 height="388"
+		 top_delta="0"
+		 name="upload_panel"
+		 visible="false"
+		 width="530"
+		 left="0">
+		<panel
+		 height="20"
+		 top_pad="20"
+		 name="header_panel"
+		 width="500"
+		 bg_opaque_color="DkGray2"
+		 background_visible="true"
+		 background_opaque="true"
+		 left="20">
+			<text
+			 width="200"
+			 left="10"
+			 name="header_text"
+			 top="2"
+			 height="10"
+			 font="SansSerifBig"
+			 layout="topleft">
+				Upload Complete!
+			</text>
+		</panel>
+		<text
+		 top_pad="14"
+		 width="460"
+		 height="20"
+		 font="SansSerifSmall"
+		 layout="topleft"
+		 name="description"
+		 word_wrap="true"
+		 left_delta="0">
+			Congratulations! Your model has been sucessfully uploaded.  You will find the model in the Objects folder in your inventory.
+		</text>
+		<panel
+		 top_delta="40"
+		 left="15"
+		 height="240"
+		 width="500"
+		 name="content"
+		 bg_opaque_color="DkGray2"
+		 background_visible="true"
+		 background_opaque="true">
+			<button top="10" follows="top|left" height="20" label="Upload"
+				   left="15" width="80" name="ok_btn" tool_tip="Upload to simulator"/>
+		</panel>
+	</panel>
+
+
+
+	<button
+	 top="410"
+	 right="-245"
+	 width="90"
+	 height="20"
+	 name="back"
+	 label="&lt;&lt; Back" />
+	<button
+	 top_delta="0"
+	 right="-150"
+	 width="90"
+	 height="20"
+	 name="next"
+	 label="Next &gt;&gt; " />
+	<button
+	 top_delta="0"
+	 right="-15"
+	 width="90"
+	 height="20"
+	 name="cancel"
+	 label="Cancel" />
+	<spinner visible="false" left="10" height="20" follows="top|left" width="80" top_pad="-50" value="1.0" min_val="0.01" max_val="64.0" name="import_scale"/>
+
+	<string name="status_idle">Idle</string>
+	<string name="status_reading_file">Loading...</string>
+	<string name="status_generating_meshes">Generating Meshes...</string>
+	<string name="high">High</string>
+	<string name="medium">Medium</string>
+	<string name="low">Low</string>
+	<string name="lowest">Lowest</string>
+	<string name="mesh_status_good">Ship it!</string>
+	<string name="mesh_status_na">N/A</string>
+	<string name="mesh_status_none">None</string>
+	<string name="mesh_status_submesh_mismatch">Levels of detail have a different number of textureable faces.</string>
+	<string name="mesh_status_mesh_mismatch">Levels of detail have a different number of mesh instances.</string>
+	<string name="mesh_status_too_many_vertices">Level of detail has too many vertices.</string>
+	<string name="mesh_status_missing_lod">Missing required level of detail.</string>
+	<string name="layer_all">All</string>
+	<!-- Text to display in physics layer combo box for "all layers" -->
+
+</floater>
-- 
GitLab