From f243f7e550b9dadd26d119bfeb4b215aa809997c Mon Sep 17 00:00:00 2001 From: leyla_linden Date: Thu, 6 Jan 2011 16:42:18 -0800 Subject: added callback for updating wizard dimensions and costs from the model preview properly enabling/disabling wizard buttons xml ui fixes --- indra/newview/llfloatermodelwizard.cpp | 52 ++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) (limited to 'indra/newview/llfloatermodelwizard.cpp') diff --git a/indra/newview/llfloatermodelwizard.cpp b/indra/newview/llfloatermodelwizard.cpp index fe53eafa40..19bdea5f44 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" @@ -71,8 +72,15 @@ void LLFloaterModelWizard::setState(int state) } } + if (state == CHOOSE_FILE) + { + getChildView("back")->setEnabled(false); + } + if (state == OPTIMIZE) { + getChildView("back")->setEnabled(true); + //mModelPreview->mModel[lod].clear(); mModelPreview->genLODs(-1); mModelPreview->mViewOption["show_physics"] = false; } @@ -423,6 +431,7 @@ BOOL LLFloaterModelWizard::postBuild() childSetValue("import_scale", (F32) 0.67335826); getChild("browse")->setCommitCallback(boost::bind(&LLFloaterModelWizard::loadModel, this)); + //getChild("lod_file")->setCommitCallback(boost::bind(&LLFloaterModelWizard::loadModel, this)); getChild("cancel")->setCommitCallback(boost::bind(&LLFloaterModelWizard::onClickCancel, this)); getChild("close")->setCommitCallback(boost::bind(&LLFloaterModelWizard::onClickCancel, this)); getChild("back")->setCommitCallback(boost::bind(&LLFloaterModelWizard::onClickBack, this)); @@ -441,6 +450,8 @@ BOOL LLFloaterModelWizard::postBuild() mModelPreview = new LLModelPreview(512, 512, this); mModelPreview->setPreviewTarget(16.f); + mModelPreview->setDetailsCallback(boost::bind(&LLFloaterModelWizard::setDetails, this, _1, _2, _3, _4, _5)); + center(); @@ -455,6 +466,25 @@ 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(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::onUpload() { mModelPreview->rebuildUploadData(); @@ -492,8 +522,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("confirm_checkbox")->getValue().asBoolean()); + } + +} + void LLFloaterModelWizard::draw() { + refresh(); + LLFloater::draw(); LLRect r = getRect(); -- cgit v1.2.3 From 3a47555dc27ffa74f5427e0ef44fa25b505f6c16 Mon Sep 17 00:00:00 2001 From: leyla_linden Date: Wed, 12 Jan 2011 13:38:47 -0800 Subject: SH-777 Wizard top buttons need to be clickable and switch between wizard steps --- indra/newview/llfloatermodelwizard.cpp | 121 +++++++++++++++++++++++++-------- 1 file changed, 91 insertions(+), 30 deletions(-) (limited to 'indra/newview/llfloatermodelwizard.cpp') diff --git a/indra/newview/llfloatermodelwizard.cpp b/indra/newview/llfloatermodelwizard.cpp index 19bdea5f44..095499e6b0 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(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("next")->setVisible(true); - getChild("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("close")->setVisible(false); - getChild("next")->setVisible(false); - getChild("back")->setVisible(true); - getChild("upload")->setVisible(true); - getChild("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("close")->setVisible(true); - getChild("back")->setVisible(false); - getChild("upload")->setVisible(false); - getChild("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(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("preview_panel"); + LLView* preview_panel = getChildView("preview_panel"); childSetValue("import_scale", (F32) 0.67335826); @@ -439,19 +487,20 @@ BOOL LLFloaterModelWizard::postBuild() getChild("preview_lod_combo")->setCommitCallback(boost::bind(&LLFloaterModelWizard::onPreviewLODCommit, this, _1)); getChild("accuracy_slider")->setCommitCallback(boost::bind(&LLFloaterModelWizard::onAccuracyPerformance, this, _2)); getChild("upload")->setCommitCallback(boost::bind(&LLFloaterModelWizard::onUpload, this)); - + getChild("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("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(stateNames[mState]+"_panel"); - LLView* preview_panel = view->getChild("preview_panel"); + LLView *view = getChildView(stateNames[mState]+"_panel"); + LLView* preview_panel = view->getChildView("preview_panel"); LLRect rect = preview_panel->getRect(); if (rect != mPreviewRect) -- cgit v1.2.3