From 3a47555dc27ffa74f5427e0ef44fa25b505f6c16 Mon Sep 17 00:00:00 2001
From: leyla_linden <none@none>
Date: Wed, 12 Jan 2011 13:38:47 -0800
Subject: [PATCH] SH-777 Wizard top buttons need to be clickable and switch
 between wizard steps

---
 indra/newview/llfloatermodelpreview.cpp       |   2 +
 indra/newview/llfloatermodelpreview.h         |   5 +-
 indra/newview/llfloatermodelwizard.cpp        | 121 +++++++++++++-----
 indra/newview/llfloatermodelwizard.h          |   7 +-
 .../{model_wizard => icons}/check_mark.png    | Bin
 .../textures/model_wizard/divider_line.png    | Bin 0 -> 2815 bytes
 .../skins/default/textures/textures.xml       |  18 ++-
 .../BreadCrumbBtn_Left_Disabled.png}          | Bin
 .../BreadCrumbBtn_Left_Off.png}               | Bin
 .../BreadCrumbBtn_Left_Over.png}              | Bin
 .../BreadCrumbBtn_Left_Press.png}             | Bin
 .../BreadCrumbBtn_Middle_Disabled.png}        | Bin
 .../BreadCrumbBtn_Middle_Off.png}             | Bin
 .../BreadCrumbBtn_Middle_Over.png}            | Bin
 .../BreadCrumbBtn_Middle_Press.png}           | Bin
 .../BreadCrumbBtn_Right_Disabled.png}         | Bin
 .../BreadCrumbBtn_Right_Off.png}              | Bin
 .../BreadCrumbBtn_Right_Over.png}             | Bin
 .../BreadCrumbBtn_Right_Press.png}            | Bin
 .../default/xui/en/floater_model_wizard.xml   |  75 ++++++-----
 20 files changed, 164 insertions(+), 64 deletions(-)
 rename indra/newview/skins/default/textures/{model_wizard => icons}/check_mark.png (100%)
 create mode 100644 indra/newview/skins/default/textures/model_wizard/divider_line.png
 rename indra/newview/skins/default/textures/{model_wizard/left_button_disabled.png => widgets/BreadCrumbBtn_Left_Disabled.png} (100%)
 rename indra/newview/skins/default/textures/{model_wizard/left_button_off.png => widgets/BreadCrumbBtn_Left_Off.png} (100%)
 rename indra/newview/skins/default/textures/{model_wizard/left_button_over.png => widgets/BreadCrumbBtn_Left_Over.png} (100%)
 rename indra/newview/skins/default/textures/{model_wizard/left_button_press.png => widgets/BreadCrumbBtn_Left_Press.png} (100%)
 rename indra/newview/skins/default/textures/{model_wizard/middle_button_disabled.png => widgets/BreadCrumbBtn_Middle_Disabled.png} (100%)
 rename indra/newview/skins/default/textures/{model_wizard/middle_button_off.png => widgets/BreadCrumbBtn_Middle_Off.png} (100%)
 rename indra/newview/skins/default/textures/{model_wizard/middle_button_over.png => widgets/BreadCrumbBtn_Middle_Over.png} (100%)
 rename indra/newview/skins/default/textures/{model_wizard/middle_button_press.png => widgets/BreadCrumbBtn_Middle_Press.png} (100%)
 rename indra/newview/skins/default/textures/{model_wizard/right_button_disabled.png => widgets/BreadCrumbBtn_Right_Disabled.png} (100%)
 rename indra/newview/skins/default/textures/{model_wizard/right_button_off.png => widgets/BreadCrumbBtn_Right_Off.png} (100%)
 rename indra/newview/skins/default/textures/{model_wizard/right_button_over.png => widgets/BreadCrumbBtn_Right_Over.png} (100%)
 rename indra/newview/skins/default/textures/{model_wizard/right_button_press.png => widgets/BreadCrumbBtn_Right_Press.png} (100%)

diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp
index 47a3a4cd308..8e08c6aa6cc 100755
--- a/indra/newview/llfloatermodelpreview.cpp
+++ b/indra/newview/llfloatermodelpreview.cpp
@@ -2561,6 +2561,8 @@ void LLModelPreview::loadModelCallback(S32 lod)
 
 	mLoading = false;
 	refresh();
+
+	mModelLoadedSignal();
 }
 
 void LLModelPreview::resetPreviewTarget()
diff --git a/indra/newview/llfloatermodelpreview.h b/indra/newview/llfloatermodelpreview.h
index 63377bb1d6d..fbf6ead930f 100644
--- a/indra/newview/llfloatermodelpreview.h
+++ b/indra/newview/llfloatermodelpreview.h
@@ -251,7 +251,8 @@ class LLMeshFilePicker : public LLFilePickerThread
 class LLModelPreview : public LLViewerDynamicTexture, public LLMutex
 {	
 	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();
@@ -288,6 +289,7 @@ class LLModelPreview : public LLViewerDynamicTexture, public LLMutex
 	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;
@@ -342,6 +344,7 @@ class LLModelPreview : public LLViewerDynamicTexture, public LLMutex
 	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 19bdea5f44b..095499e6b05 100644
--- a/indra/newview/llfloatermodelwizard.cpp
+++ b/indra/newview/llfloatermodelwizard.cpp
@@ -52,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()
 {
@@ -60,12 +67,12 @@ 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);
@@ -74,60 +81,101 @@ void LLFloaterModelWizard::setState(int state)
 
 	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)
 	{
-		getChildView("back")->setEnabled(true);
-		//mModelPreview->mModel[lod].clear();
-		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
 		{
@@ -426,7 +474,7 @@ 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);
 
@@ -439,19 +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();
 
@@ -484,6 +533,18 @@ void LLFloaterModelWizard::setDetails(F32 x, F32 y, F32 z, F32 streaming_cost, F
 	}
 }
 
+void LLFloaterModelWizard::modelLoadedCallback()
+{
+	mLastEnabledState = CHOOSE_FILE;
+	getChild<LLCheckBoxCtrl>("confirm_checkbox")->set(FALSE);
+	updateButtons();
+}
+
+void LLFloaterModelWizard::onPhysicsChanged()
+{
+	mLastEnabledState = PHYSICS;
+	updateButtons();
+}
 
 void LLFloaterModelWizard::onUpload()
 {	
@@ -496,7 +557,6 @@ void LLFloaterModelWizard::onUpload()
 	
 }
 
-
 void LLFloaterModelWizard::onAccuracyPerformance(const LLSD& data)
 {
 	int val = (int) data.asInteger();
@@ -506,6 +566,7 @@ void LLFloaterModelWizard::onAccuracyPerformance(const LLSD& data)
 	mModelPreview->refresh();
 }
 
+
 void LLFloaterModelWizard::onPreviewLODCommit(LLUICtrl* ctrl)
 {
 	if (!mModelPreview)
@@ -557,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 335f4f4b567..50e4ab1a96a 100644
--- a/indra/newview/llfloatermodelwizard.h
+++ b/indra/newview/llfloatermodelwizard.h
@@ -65,7 +65,8 @@ class LLFloaterModelWizard : public LLFloater
 	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;
@@ -84,7 +85,7 @@ class LLFloaterModelWizard : public LLFloater
 	};
 
 	void setState(int state);
-	void setButtons(int state);
+	void updateButtons();
 	void onClickCancel();
 	void onClickBack();
 	void onClickNext();
@@ -102,6 +103,8 @@ class LLFloaterModelWizard : public LLFloater
 	S32				mLastMouseX;
 	S32				mLastMouseY;
 
+	U32			    mLastEnabledState;
+
 
 };
 
diff --git a/indra/newview/skins/default/textures/model_wizard/check_mark.png b/indra/newview/skins/default/textures/icons/check_mark.png
similarity index 100%
rename from indra/newview/skins/default/textures/model_wizard/check_mark.png
rename to 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.png
new file mode 100644
index 0000000000000000000000000000000000000000..76c9e687675f26f2ba50465eaeee21146307515a
GIT binary patch
literal 2815
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
R^lShC002ovPDHLkV1oZqHU0nq

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index e69c5775f02..d351c442d3d 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.png
similarity index 100%
rename from indra/newview/skins/default/textures/model_wizard/left_button_disabled.png
rename to 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.png
similarity index 100%
rename from indra/newview/skins/default/textures/model_wizard/left_button_off.png
rename to 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.png
similarity index 100%
rename from indra/newview/skins/default/textures/model_wizard/left_button_over.png
rename to 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.png
similarity index 100%
rename from indra/newview/skins/default/textures/model_wizard/left_button_press.png
rename to 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.png
similarity index 100%
rename from indra/newview/skins/default/textures/model_wizard/middle_button_disabled.png
rename to 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.png
similarity index 100%
rename from indra/newview/skins/default/textures/model_wizard/middle_button_off.png
rename to 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.png
similarity index 100%
rename from indra/newview/skins/default/textures/model_wizard/middle_button_over.png
rename to 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.png
similarity index 100%
rename from indra/newview/skins/default/textures/model_wizard/middle_button_press.png
rename to 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.png
similarity index 100%
rename from indra/newview/skins/default/textures/model_wizard/right_button_disabled.png
rename to 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.png
similarity index 100%
rename from indra/newview/skins/default/textures/model_wizard/right_button_off.png
rename to 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.png
similarity index 100%
rename from indra/newview/skins/default/textures/model_wizard/right_button_over.png
rename to 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.png
similarity index 100%
rename from indra/newview/skins/default/textures/model_wizard/right_button_press.png
rename to 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 d8492a10bb6..2377a9e4ef7 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"
-- 
GitLab