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.png Binary files differindex 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.png Binary files differnew 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.png Binary files differindex 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.png Binary files differindex 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.png Binary files differindex 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.png Binary files differindex 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.png Binary files differindex 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.png Binary files differindex 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.png Binary files differindex 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.png Binary files differindex 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.png Binary files differindex 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.png Binary files differindex 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.png Binary files differindex 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.png Binary files differindex 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 |