diff options
Diffstat (limited to 'indra/newview/llscrollingpanelparam.cpp')
| -rw-r--r-- | indra/newview/llscrollingpanelparam.cpp | 394 |
1 files changed, 197 insertions, 197 deletions
diff --git a/indra/newview/llscrollingpanelparam.cpp b/indra/newview/llscrollingpanelparam.cpp index 833eaaf8ca..8dfe21e4cb 100644 --- a/indra/newview/llscrollingpanelparam.cpp +++ b/indra/newview/llscrollingpanelparam.cpp @@ -1,25 +1,25 @@ -/** +/** * @file llscrollingpanelparam.cpp * @brief UI panel for a list of visual param panels * * $LicenseInfo:firstyear=2009&license=viewerlgpl$ * Second Life Viewer Source Code * Copyright (C) 2010, Linden Research, Inc. - * + * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License only. - * + * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. - * + * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * + * * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ @@ -50,7 +50,7 @@ const S32 LLScrollingPanelParam::PARAM_HINT_HEIGHT = 128; S32 LLScrollingPanelParam::sUpdateDelayFrames = 0; LLScrollingPanelParam::LLScrollingPanelParam( const LLPanel::Params& panel_params, - LLViewerJointMesh* mesh, LLViewerVisualParam* param, bool allow_modify, LLWearable* wearable, LLJoint* jointp, bool use_hints ) + LLViewerJointMesh* mesh, LLViewerVisualParam* param, bool allow_modify, LLWearable* wearable, LLJoint* jointp, bool use_hints ) : LLScrollingPanelParamBase( panel_params, mesh, param, allow_modify, wearable, jointp, use_hints) { mLessBtn = getChild<LLButton>("less"); @@ -60,19 +60,19 @@ LLScrollingPanelParam::LLScrollingPanelParam( const LLPanel::Params& panel_param mMinParamText = getChild<LLUICtrl>("min param text"); mMaxParamText = getChild<LLUICtrl>("max param text"); - // *HACK To avoid hard coding texture position, lets use border's position for texture. - static LLUICachedControl<S32> slider_ctrl_height ("UISliderctrlHeight", 0); - S32 pos_x = mLeftBorder->getRect().mLeft + mLeftBorder->getBorderWidth(); - S32 pos_y = mLeftBorder->getRect().mBottom + mLeftBorder->getBorderWidth(); - F32 min_weight = param->getMinWeight(); - F32 max_weight = param->getMaxWeight(); + // *HACK To avoid hard coding texture position, lets use border's position for texture. + static LLUICachedControl<S32> slider_ctrl_height ("UISliderctrlHeight", 0); + S32 pos_x = mLeftBorder->getRect().mLeft + mLeftBorder->getBorderWidth(); + S32 pos_y = mLeftBorder->getRect().mBottom + mLeftBorder->getBorderWidth(); + F32 min_weight = param->getMinWeight(); + F32 max_weight = param->getMaxWeight(); - mHintMin = new LLVisualParamHint( pos_x, pos_y, PARAM_HINT_WIDTH, PARAM_HINT_HEIGHT, mesh, (LLViewerVisualParam*) wearable->getVisualParam(param->getID()), wearable, min_weight, jointp); - pos_x = mRightBorder->getRect().mLeft + mLeftBorder->getBorderWidth(); - mHintMax = new LLVisualParamHint( pos_x, pos_y, PARAM_HINT_WIDTH, PARAM_HINT_HEIGHT, mesh, (LLViewerVisualParam*) wearable->getVisualParam(param->getID()), wearable, max_weight, jointp ); - - mHintMin->setAllowsUpdates( false ); - mHintMax->setAllowsUpdates( false ); + mHintMin = new LLVisualParamHint( pos_x, pos_y, PARAM_HINT_WIDTH, PARAM_HINT_HEIGHT, mesh, (LLViewerVisualParam*) wearable->getVisualParam(param->getID()), wearable, min_weight, jointp); + pos_x = mRightBorder->getRect().mLeft + mLeftBorder->getBorderWidth(); + mHintMax = new LLVisualParamHint( pos_x, pos_y, PARAM_HINT_WIDTH, PARAM_HINT_HEIGHT, mesh, (LLViewerVisualParam*) wearable->getVisualParam(param->getID()), wearable, max_weight, jointp ); + + mHintMin->setAllowsUpdates( false ); + mHintMax->setAllowsUpdates( false ); mMinParamText->setValue(LLTrans::getString(param->getMinDisplayName())); mMaxParamText->setValue(LLTrans::getString(param->getMaxDisplayName())); @@ -87,8 +87,8 @@ LLScrollingPanelParam::LLScrollingPanelParam( const LLPanel::Params& panel_param mMoreBtn->setHeldDownCallback(LLScrollingPanelParam::onHintMaxHeldDown, this); mMoreBtn->setHeldDownDelay(PARAM_STEP_TIME_THRESHOLD); - setVisible(false); - setBorderVisible( false ); + setVisible(false); + setBorderVisible( false ); } LLScrollingPanelParam::~LLScrollingPanelParam() @@ -96,86 +96,86 @@ LLScrollingPanelParam::~LLScrollingPanelParam() } void LLScrollingPanelParam::updatePanel(bool allow_modify) { - if (!mWearable) - { - // not editing a wearable just now, no update necessary - return; - } - LLScrollingPanelParamBase::updatePanel(allow_modify); - - mHintMin->requestUpdate( sUpdateDelayFrames++ ); - mHintMax->requestUpdate( sUpdateDelayFrames++ ); + if (!mWearable) + { + // not editing a wearable just now, no update necessary + return; + } + LLScrollingPanelParamBase::updatePanel(allow_modify); + + mHintMin->requestUpdate( sUpdateDelayFrames++ ); + mHintMax->requestUpdate( sUpdateDelayFrames++ ); mLessBtn->setEnabled(mAllowModify); mMoreBtn->setEnabled(mAllowModify); } void LLScrollingPanelParam::setVisible( bool visible ) { - if( getVisible() != visible ) - { - LLPanel::setVisible( visible ); - if (mHintMin) - mHintMin->setAllowsUpdates( visible ); - if (mHintMax) - mHintMax->setAllowsUpdates( visible ); - - if( visible ) - { - if (mHintMin) - mHintMin->setUpdateDelayFrames( sUpdateDelayFrames++ ); - if (mHintMax) - mHintMax->setUpdateDelayFrames( sUpdateDelayFrames++ ); - } - } + if( getVisible() != visible ) + { + LLPanel::setVisible( visible ); + if (mHintMin) + mHintMin->setAllowsUpdates( visible ); + if (mHintMax) + mHintMax->setAllowsUpdates( visible ); + + if( visible ) + { + if (mHintMin) + mHintMin->setUpdateDelayFrames( sUpdateDelayFrames++ ); + if (mHintMax) + mHintMax->setUpdateDelayFrames( sUpdateDelayFrames++ ); + } + } } void LLScrollingPanelParam::draw() { - if( !mWearable ) - { - return; - } - + if( !mWearable ) + { + return; + } + mLessBtn->setVisible( mHintMin->getVisible()); mMoreBtn->setVisible( mHintMax->getVisible()); - // hide borders if texture has been loaded + // hide borders if texture has been loaded mLeftBorder->setVisible( !mHintMin->getVisible()); mRightBorder->setVisible( !mHintMax->getVisible()); - // Draw all the children except for the labels + // Draw all the children except for the labels mMinParamText->setVisible( false ); mMaxParamText->setVisible( false ); - LLPanel::draw(); - - // If we're in a focused floater, don't apply the floater's alpha to visual param hint, - // making its behavior similar to texture controls'. - F32 alpha = getTransparencyType() == TT_ACTIVE ? 1.0f : getCurrentTransparency(); - - // Draw the hints over the "less" and "more" buttons. - gGL.pushUIMatrix(); - { - const LLRect& r = mHintMin->getRect(); - gGL.translateUI((F32)r.mLeft, (F32)r.mBottom, 0.f); - mHintMin->draw(alpha); - } - gGL.popUIMatrix(); - - gGL.pushUIMatrix(); - { - const LLRect& r = mHintMax->getRect(); - gGL.translateUI((F32)r.mLeft, (F32)r.mBottom, 0.f); - mHintMax->draw(alpha); - } - gGL.popUIMatrix(); - - - // Draw labels on top of the buttons + LLPanel::draw(); + + // If we're in a focused floater, don't apply the floater's alpha to visual param hint, + // making its behavior similar to texture controls'. + F32 alpha = getTransparencyType() == TT_ACTIVE ? 1.0f : getCurrentTransparency(); + + // Draw the hints over the "less" and "more" buttons. + gGL.pushUIMatrix(); + { + const LLRect& r = mHintMin->getRect(); + gGL.translateUI((F32)r.mLeft, (F32)r.mBottom, 0.f); + mHintMin->draw(alpha); + } + gGL.popUIMatrix(); + + gGL.pushUIMatrix(); + { + const LLRect& r = mHintMax->getRect(); + gGL.translateUI((F32)r.mLeft, (F32)r.mBottom, 0.f); + mHintMax->draw(alpha); + } + gGL.popUIMatrix(); + + + // Draw labels on top of the buttons mMinParamText->setVisible( true ); - drawChild(mMinParamText); + drawChild(mMinParamText); mMaxParamText->setVisible( true ); - drawChild(mMaxParamText); + drawChild(mMaxParamText); } // static @@ -186,168 +186,168 @@ void LLScrollingPanelParam::onSliderMouseDown(LLUICtrl* ctrl, void* userdata) // static void LLScrollingPanelParam::onSliderMouseUp(LLUICtrl* ctrl, void* userdata) { - LLScrollingPanelParam* self = (LLScrollingPanelParam*) userdata; - LLVisualParamHint::requestHintUpdates( self->mHintMin, self->mHintMax ); + LLScrollingPanelParam* self = (LLScrollingPanelParam*) userdata; + LLVisualParamHint::requestHintUpdates( self->mHintMin, self->mHintMax ); } // static void LLScrollingPanelParam::onHintMinMouseDown( void* userdata ) { - LLScrollingPanelParam* self = (LLScrollingPanelParam*) userdata; - self->onHintMouseDown( self->mHintMin ); + LLScrollingPanelParam* self = (LLScrollingPanelParam*) userdata; + self->onHintMouseDown( self->mHintMin ); } // static void LLScrollingPanelParam::onHintMaxMouseDown( void* userdata ) { - LLScrollingPanelParam* self = (LLScrollingPanelParam*) userdata; - self->onHintMouseDown( self->mHintMax ); + LLScrollingPanelParam* self = (LLScrollingPanelParam*) userdata; + self->onHintMouseDown( self->mHintMax ); } void LLScrollingPanelParam::onHintMouseDown( LLVisualParamHint* hint ) { - // morph towards this result - F32 current_weight = mWearable->getVisualParamWeight( hint->getVisualParam()->getID() ); - - // if we have maxed out on this morph, we shouldn't be able to click it - if( hint->getVisualParamWeight() != current_weight ) - { - mMouseDownTimer.reset(); - mLastHeldTime = 0.f; - } + // morph towards this result + F32 current_weight = mWearable->getVisualParamWeight( hint->getVisualParam()->getID() ); + + // if we have maxed out on this morph, we shouldn't be able to click it + if( hint->getVisualParamWeight() != current_weight ) + { + mMouseDownTimer.reset(); + mLastHeldTime = 0.f; + } } // static void LLScrollingPanelParam::onHintMinHeldDown( void* userdata ) { - LLScrollingPanelParam* self = (LLScrollingPanelParam*) userdata; - self->onHintHeldDown( self->mHintMin ); + LLScrollingPanelParam* self = (LLScrollingPanelParam*) userdata; + self->onHintHeldDown( self->mHintMin ); } // static void LLScrollingPanelParam::onHintMaxHeldDown( void* userdata ) { - LLScrollingPanelParam* self = (LLScrollingPanelParam*) userdata; - self->onHintHeldDown( self->mHintMax ); + LLScrollingPanelParam* self = (LLScrollingPanelParam*) userdata; + self->onHintHeldDown( self->mHintMax ); } - + void LLScrollingPanelParam::onHintHeldDown( LLVisualParamHint* hint ) { - F32 current_weight = mWearable->getVisualParamWeight( hint->getVisualParam()->getID() ); - - if (current_weight != hint->getVisualParamWeight() ) - { - const F32 FULL_BLEND_TIME = 2.f; - F32 elapsed_time = mMouseDownTimer.getElapsedTimeF32() - mLastHeldTime; - mLastHeldTime += elapsed_time; - - F32 new_weight; - if (current_weight > hint->getVisualParamWeight() ) - { - new_weight = current_weight - (elapsed_time / FULL_BLEND_TIME); - } - else - { - new_weight = current_weight + (elapsed_time / FULL_BLEND_TIME); - } - - // Make sure we're not taking the slider out of bounds - // (this is where some simple UI limits are stored) - F32 new_percent = weightToPercent(new_weight); - LLSliderCtrl* slider = getChild<LLSliderCtrl>("param slider"); - if (slider) - { - if (slider->getMinValue() < new_percent - && new_percent < slider->getMaxValue()) - { - mWearable->setVisualParamWeight( hint->getVisualParam()->getID(), new_weight); - mWearable->writeToAvatar(gAgentAvatarp); - gAgentAvatarp->updateVisualParams(); - - slider->setValue( weightToPercent( new_weight ) ); - } - } - } + F32 current_weight = mWearable->getVisualParamWeight( hint->getVisualParam()->getID() ); + + if (current_weight != hint->getVisualParamWeight() ) + { + const F32 FULL_BLEND_TIME = 2.f; + F32 elapsed_time = mMouseDownTimer.getElapsedTimeF32() - mLastHeldTime; + mLastHeldTime += elapsed_time; + + F32 new_weight; + if (current_weight > hint->getVisualParamWeight() ) + { + new_weight = current_weight - (elapsed_time / FULL_BLEND_TIME); + } + else + { + new_weight = current_weight + (elapsed_time / FULL_BLEND_TIME); + } + + // Make sure we're not taking the slider out of bounds + // (this is where some simple UI limits are stored) + F32 new_percent = weightToPercent(new_weight); + LLSliderCtrl* slider = getChild<LLSliderCtrl>("param slider"); + if (slider) + { + if (slider->getMinValue() < new_percent + && new_percent < slider->getMaxValue()) + { + mWearable->setVisualParamWeight( hint->getVisualParam()->getID(), new_weight); + mWearable->writeToAvatar(gAgentAvatarp); + gAgentAvatarp->updateVisualParams(); + + slider->setValue( weightToPercent( new_weight ) ); + } + } + } } // static void LLScrollingPanelParam::onHintMinMouseUp( void* userdata ) { - LLScrollingPanelParam* self = (LLScrollingPanelParam*) userdata; - - F32 elapsed_time = self->mMouseDownTimer.getElapsedTimeF32(); - - LLVisualParamHint* hint = self->mHintMin; - - if (elapsed_time < PARAM_STEP_TIME_THRESHOLD) - { - // step in direction - F32 current_weight = self->mWearable->getVisualParamWeight( hint->getVisualParam()->getID() ); - F32 range = self->mHintMax->getVisualParamWeight() - self->mHintMin->getVisualParamWeight(); - // step a fraction in the negative directiona - F32 new_weight = current_weight - (range / 10.f); - F32 new_percent = self->weightToPercent(new_weight); - LLSliderCtrl* slider = self->getChild<LLSliderCtrl>("param slider"); - if (slider) - { - if (slider->getMinValue() < new_percent - && new_percent < slider->getMaxValue()) - { - self->mWearable->setVisualParamWeight(hint->getVisualParam()->getID(), new_weight); - self->mWearable->writeToAvatar(gAgentAvatarp); - slider->setValue( self->weightToPercent( new_weight ) ); - } - } - } - - LLVisualParamHint::requestHintUpdates( self->mHintMin, self->mHintMax ); + LLScrollingPanelParam* self = (LLScrollingPanelParam*) userdata; + + F32 elapsed_time = self->mMouseDownTimer.getElapsedTimeF32(); + + LLVisualParamHint* hint = self->mHintMin; + + if (elapsed_time < PARAM_STEP_TIME_THRESHOLD) + { + // step in direction + F32 current_weight = self->mWearable->getVisualParamWeight( hint->getVisualParam()->getID() ); + F32 range = self->mHintMax->getVisualParamWeight() - self->mHintMin->getVisualParamWeight(); + // step a fraction in the negative directiona + F32 new_weight = current_weight - (range / 10.f); + F32 new_percent = self->weightToPercent(new_weight); + LLSliderCtrl* slider = self->getChild<LLSliderCtrl>("param slider"); + if (slider) + { + if (slider->getMinValue() < new_percent + && new_percent < slider->getMaxValue()) + { + self->mWearable->setVisualParamWeight(hint->getVisualParam()->getID(), new_weight); + self->mWearable->writeToAvatar(gAgentAvatarp); + slider->setValue( self->weightToPercent( new_weight ) ); + } + } + } + + LLVisualParamHint::requestHintUpdates( self->mHintMin, self->mHintMax ); } void LLScrollingPanelParam::onHintMaxMouseUp( void* userdata ) { - LLScrollingPanelParam* self = (LLScrollingPanelParam*) userdata; - - F32 elapsed_time = self->mMouseDownTimer.getElapsedTimeF32(); - - if (isAgentAvatarValid()) - { - LLVisualParamHint* hint = self->mHintMax; - - if (elapsed_time < PARAM_STEP_TIME_THRESHOLD) - { - // step in direction - F32 current_weight = self->mWearable->getVisualParamWeight( hint->getVisualParam()->getID() ); - F32 range = self->mHintMax->getVisualParamWeight() - self->mHintMin->getVisualParamWeight(); - // step a fraction in the negative direction - F32 new_weight = current_weight + (range / 10.f); - F32 new_percent = self->weightToPercent(new_weight); - LLSliderCtrl* slider = self->getChild<LLSliderCtrl>("param slider"); - if (slider) - { - if (slider->getMinValue() < new_percent - && new_percent < slider->getMaxValue()) - { - self->mWearable->setVisualParamWeight(hint->getVisualParam()->getID(), new_weight); - self->mWearable->writeToAvatar(gAgentAvatarp); - slider->setValue( self->weightToPercent( new_weight ) ); - } - } - } - } - - LLVisualParamHint::requestHintUpdates( self->mHintMin, self->mHintMax ); + LLScrollingPanelParam* self = (LLScrollingPanelParam*) userdata; + + F32 elapsed_time = self->mMouseDownTimer.getElapsedTimeF32(); + + if (isAgentAvatarValid()) + { + LLVisualParamHint* hint = self->mHintMax; + + if (elapsed_time < PARAM_STEP_TIME_THRESHOLD) + { + // step in direction + F32 current_weight = self->mWearable->getVisualParamWeight( hint->getVisualParam()->getID() ); + F32 range = self->mHintMax->getVisualParamWeight() - self->mHintMin->getVisualParamWeight(); + // step a fraction in the negative direction + F32 new_weight = current_weight + (range / 10.f); + F32 new_percent = self->weightToPercent(new_weight); + LLSliderCtrl* slider = self->getChild<LLSliderCtrl>("param slider"); + if (slider) + { + if (slider->getMinValue() < new_percent + && new_percent < slider->getMaxValue()) + { + self->mWearable->setVisualParamWeight(hint->getVisualParam()->getID(), new_weight); + self->mWearable->writeToAvatar(gAgentAvatarp); + slider->setValue( self->weightToPercent( new_weight ) ); + } + } + } + } + + LLVisualParamHint::requestHintUpdates( self->mHintMin, self->mHintMax ); } F32 LLScrollingPanelParam::weightToPercent( F32 weight ) { - LLViewerVisualParam* param = mParam; - return (weight - param->getMinWeight()) / (param->getMaxWeight() - param->getMinWeight()) * 100.f; + LLViewerVisualParam* param = mParam; + return (weight - param->getMinWeight()) / (param->getMaxWeight() - param->getMinWeight()) * 100.f; } F32 LLScrollingPanelParam::percentToWeight( F32 percent ) { - LLViewerVisualParam* param = mParam; - return percent / 100.f * (param->getMaxWeight() - param->getMinWeight()) + param->getMinWeight(); + LLViewerVisualParam* param = mParam; + return percent / 100.f * (param->getMaxWeight() - param->getMinWeight()) + param->getMinWeight(); } |
