diff options
author | Nat Goodspeed <nat@lindenlab.com> | 2024-05-14 21:02:28 -0400 |
---|---|---|
committer | Nat Goodspeed <nat@lindenlab.com> | 2024-05-14 21:02:28 -0400 |
commit | 094dcc07f8c1d90ae723dbe60eddacb90a09eae8 (patch) | |
tree | e750942e5f22ed677b543bd49509c2a7cdc5ce56 /indra/newview/llfloatertools.cpp | |
parent | d4043d3b011c32eb503c43c551872f9c24d7344f (diff) | |
parent | 38c2a5bde985a6a8a96d912d432f8bdf7e5b60be (diff) |
Merge DRTVWR-591-maint-X to main on promotion of secondlife/viewer #705: Maintenance X
Diffstat (limited to 'indra/newview/llfloatertools.cpp')
-rw-r--r-- | indra/newview/llfloatertools.cpp | 1598 |
1 files changed, 799 insertions, 799 deletions
diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp index 5fb4fb9b07..ccecdd89f0 100644 --- a/indra/newview/llfloatertools.cpp +++ b/indra/newview/llfloatertools.cpp @@ -1,25 +1,25 @@ -/** +/** * @file llfloatertools.cpp * @brief The edit tools, including move, position, land, etc. * * $LicenseInfo:firstyear=2002&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$ */ @@ -95,11 +95,11 @@ bool LLFloaterTools::sPreviousFocusOnAvatar = false; const std::string PANEL_NAMES[LLFloaterTools::PANEL_COUNT] = { - std::string("General"), // PANEL_GENERAL, - std::string("Object"), // PANEL_OBJECT, - std::string("Features"), // PANEL_FEATURES, - std::string("Texture"), // PANEL_FACE, - std::string("Content"), // PANEL_CONTENTS, + std::string("General"), // PANEL_GENERAL, + std::string("Object"), // PANEL_OBJECT, + std::string("Features"), // PANEL_FEATURES, + std::string("Texture"), // PANEL_FACE, + std::string("Content"), // PANEL_CONTENTS, }; @@ -127,352 +127,352 @@ void commit_slider_zoom(LLUICtrl *ctrl); class LLLandImpactsObserver : public LLParcelObserver { public: - virtual void changed() - { - LLFloaterTools* tools_floater = LLFloaterReg::getTypedInstance<LLFloaterTools>("build"); - if(tools_floater) - { - tools_floater->updateLandImpacts(); - } - } + virtual void changed() + { + LLFloaterTools* tools_floater = LLFloaterReg::getTypedInstance<LLFloaterTools>("build"); + if(tools_floater) + { + tools_floater->updateLandImpacts(); + } + } }; //static -void* LLFloaterTools::createPanelPermissions(void* data) +void* LLFloaterTools::createPanelPermissions(void* data) { - LLFloaterTools* floater = (LLFloaterTools*)data; - floater->mPanelPermissions = new LLPanelPermissions(); - return floater->mPanelPermissions; + LLFloaterTools* floater = (LLFloaterTools*)data; + floater->mPanelPermissions = new LLPanelPermissions(); + return floater->mPanelPermissions; } //static -void* LLFloaterTools::createPanelObject(void* data) +void* LLFloaterTools::createPanelObject(void* data) { - LLFloaterTools* floater = (LLFloaterTools*)data; - floater->mPanelObject = new LLPanelObject(); - return floater->mPanelObject; + LLFloaterTools* floater = (LLFloaterTools*)data; + floater->mPanelObject = new LLPanelObject(); + return floater->mPanelObject; } //static -void* LLFloaterTools::createPanelVolume(void* data) +void* LLFloaterTools::createPanelVolume(void* data) { - LLFloaterTools* floater = (LLFloaterTools*)data; - floater->mPanelVolume = new LLPanelVolume(); - return floater->mPanelVolume; + LLFloaterTools* floater = (LLFloaterTools*)data; + floater->mPanelVolume = new LLPanelVolume(); + return floater->mPanelVolume; } //static -void* LLFloaterTools::createPanelFace(void* data) +void* LLFloaterTools::createPanelFace(void* data) { - LLFloaterTools* floater = (LLFloaterTools*)data; - floater->mPanelFace = new LLPanelFace(); - return floater->mPanelFace; + LLFloaterTools* floater = (LLFloaterTools*)data; + floater->mPanelFace = new LLPanelFace(); + return floater->mPanelFace; } //static -void* LLFloaterTools::createPanelContents(void* data) +void* LLFloaterTools::createPanelContents(void* data) { - LLFloaterTools* floater = (LLFloaterTools*)data; - floater->mPanelContents = new LLPanelContents(); - return floater->mPanelContents; + LLFloaterTools* floater = (LLFloaterTools*)data; + floater->mPanelContents = new LLPanelContents(); + return floater->mPanelContents; } //static -void* LLFloaterTools::createPanelLandInfo(void* data) +void* LLFloaterTools::createPanelLandInfo(void* data) { - LLFloaterTools* floater = (LLFloaterTools*)data; - floater->mPanelLandInfo = new LLPanelLandInfo(); - return floater->mPanelLandInfo; + LLFloaterTools* floater = (LLFloaterTools*)data; + floater->mPanelLandInfo = new LLPanelLandInfo(); + return floater->mPanelLandInfo; } -static const std::string toolNames[]={ - "ToolCube", - "ToolPrism", - "ToolPyramid", - "ToolTetrahedron", - "ToolCylinder", - "ToolHemiCylinder", - "ToolCone", - "ToolHemiCone", - "ToolSphere", - "ToolHemiSphere", - "ToolTorus", - "ToolTube", - "ToolRing", - "ToolTree", - "ToolGrass"}; +static const std::string toolNames[]={ + "ToolCube", + "ToolPrism", + "ToolPyramid", + "ToolTetrahedron", + "ToolCylinder", + "ToolHemiCylinder", + "ToolCone", + "ToolHemiCone", + "ToolSphere", + "ToolHemiSphere", + "ToolTorus", + "ToolTube", + "ToolRing", + "ToolTree", + "ToolGrass"}; LLPCode toolData[]={ - LL_PCODE_CUBE, - LL_PCODE_PRISM, - LL_PCODE_PYRAMID, - LL_PCODE_TETRAHEDRON, - LL_PCODE_CYLINDER, - LL_PCODE_CYLINDER_HEMI, - LL_PCODE_CONE, - LL_PCODE_CONE_HEMI, - LL_PCODE_SPHERE, - LL_PCODE_SPHERE_HEMI, - LL_PCODE_TORUS, - LLViewerObject::LL_VO_SQUARE_TORUS, - LLViewerObject::LL_VO_TRIANGLE_TORUS, - LL_PCODE_LEGACY_TREE, - LL_PCODE_LEGACY_GRASS}; - -BOOL LLFloaterTools::postBuild() -{ - // Hide until tool selected - setVisible(FALSE); - - // Since we constantly show and hide this during drags, don't - // make sounds on visibility changes. - setSoundFlags(LLView::SILENT); - - getDragHandle()->setEnabled( !gSavedSettings.getBOOL("ToolboxAutoMove") ); - - LLRect rect; - mBtnFocus = getChild<LLButton>("button focus");//btn; - mBtnMove = getChild<LLButton>("button move"); - mBtnEdit = getChild<LLButton>("button edit"); - mBtnCreate = getChild<LLButton>("button create"); - mBtnLand = getChild<LLButton>("button land" ); - mTextStatus = getChild<LLTextBox>("text status"); - mRadioGroupFocus = getChild<LLRadioGroup>("focus_radio_group"); - mRadioGroupMove = getChild<LLRadioGroup>("move_radio_group"); - mRadioGroupEdit = getChild<LLRadioGroup>("edit_radio_group"); - mBtnGridOptions = getChild<LLButton>("Options..."); - mBtnLink = getChild<LLButton>("link_btn"); - mBtnUnlink = getChild<LLButton>("unlink_btn"); - - mCheckSelectIndividual = getChild<LLCheckBoxCtrl>("checkbox edit linked parts"); - getChild<LLUICtrl>("checkbox edit linked parts")->setValue((BOOL)gSavedSettings.getBOOL("EditLinkedParts")); - mCheckSnapToGrid = getChild<LLCheckBoxCtrl>("checkbox snap to grid"); - getChild<LLUICtrl>("checkbox snap to grid")->setValue((BOOL)gSavedSettings.getBOOL("SnapEnabled")); - mCheckStretchUniform = getChild<LLCheckBoxCtrl>("checkbox uniform"); - getChild<LLUICtrl>("checkbox uniform")->setValue((BOOL)gSavedSettings.getBOOL("ScaleUniform")); - mCheckStretchTexture = getChild<LLCheckBoxCtrl>("checkbox stretch textures"); - getChild<LLUICtrl>("checkbox stretch textures")->setValue((BOOL)gSavedSettings.getBOOL("ScaleStretchTextures")); - mComboGridMode = getChild<LLComboBox>("combobox grid mode"); - - // - // Create Buttons - // - - for(size_t t=0; t<LL_ARRAY_SIZE(toolNames); ++t) - { - LLButton *found = getChild<LLButton>(toolNames[t]); - if(found) - { - found->setClickedCallback(boost::bind(&LLFloaterTools::setObjectType, toolData[t])); - mButtons.push_back( found ); - }else{ - LL_WARNS() << "Tool button not found! DOA Pending." << LL_ENDL; - } - } - mCheckCopySelection = getChild<LLCheckBoxCtrl>("checkbox copy selection"); - getChild<LLUICtrl>("checkbox copy selection")->setValue((BOOL)gSavedSettings.getBOOL("CreateToolCopySelection")); - mCheckSticky = getChild<LLCheckBoxCtrl>("checkbox sticky"); - getChild<LLUICtrl>("checkbox sticky")->setValue((BOOL)gSavedSettings.getBOOL("CreateToolKeepSelected")); - mCheckCopyCenters = getChild<LLCheckBoxCtrl>("checkbox copy centers"); - getChild<LLUICtrl>("checkbox copy centers")->setValue((BOOL)gSavedSettings.getBOOL("CreateToolCopyCenters")); - mCheckCopyRotates = getChild<LLCheckBoxCtrl>("checkbox copy rotates"); - getChild<LLUICtrl>("checkbox copy rotates")->setValue((BOOL)gSavedSettings.getBOOL("CreateToolCopyRotates")); - - mRadioGroupLand = getChild<LLRadioGroup>("land_radio_group"); - mBtnApplyToSelection = getChild<LLButton>("button apply to selection"); - mSliderDozerSize = getChild<LLSlider>("slider brush size"); - getChild<LLUICtrl>("slider brush size")->setValue(gSavedSettings.getF32("LandBrushSize")); - mSliderDozerForce = getChild<LLSlider>("slider force"); - // the setting stores the actual force multiplier, but the slider is logarithmic, so we convert here - getChild<LLUICtrl>("slider force")->setValue(log10(gSavedSettings.getF32("LandBrushForce"))); - - mCostTextBorder = getChild<LLViewBorder>("cost_text_border"); - - mTab = getChild<LLTabContainer>("Object Info Tabs"); - if(mTab) - { - mTab->setFollows(FOLLOWS_TOP | FOLLOWS_LEFT); - mTab->setBorderVisible(FALSE); - mTab->selectFirstTab(); - } - - mStatusText["rotate"] = getString("status_rotate"); - mStatusText["scale"] = getString("status_scale"); - mStatusText["move"] = getString("status_move"); - mStatusText["modifyland"] = getString("status_modifyland"); - mStatusText["camera"] = getString("status_camera"); - mStatusText["grab"] = getString("status_grab"); - mStatusText["place"] = getString("status_place"); - mStatusText["selectland"] = getString("status_selectland"); - - sShowObjectCost = gSavedSettings.getBOOL("ShowObjectRenderingCost"); - - return TRUE; + LL_PCODE_CUBE, + LL_PCODE_PRISM, + LL_PCODE_PYRAMID, + LL_PCODE_TETRAHEDRON, + LL_PCODE_CYLINDER, + LL_PCODE_CYLINDER_HEMI, + LL_PCODE_CONE, + LL_PCODE_CONE_HEMI, + LL_PCODE_SPHERE, + LL_PCODE_SPHERE_HEMI, + LL_PCODE_TORUS, + LLViewerObject::LL_VO_SQUARE_TORUS, + LLViewerObject::LL_VO_TRIANGLE_TORUS, + LL_PCODE_LEGACY_TREE, + LL_PCODE_LEGACY_GRASS}; + +BOOL LLFloaterTools::postBuild() +{ + // Hide until tool selected + setVisible(FALSE); + + // Since we constantly show and hide this during drags, don't + // make sounds on visibility changes. + setSoundFlags(LLView::SILENT); + + getDragHandle()->setEnabled( !gSavedSettings.getBOOL("ToolboxAutoMove") ); + + LLRect rect; + mBtnFocus = getChild<LLButton>("button focus");//btn; + mBtnMove = getChild<LLButton>("button move"); + mBtnEdit = getChild<LLButton>("button edit"); + mBtnCreate = getChild<LLButton>("button create"); + mBtnLand = getChild<LLButton>("button land" ); + mTextStatus = getChild<LLTextBox>("text status"); + mRadioGroupFocus = getChild<LLRadioGroup>("focus_radio_group"); + mRadioGroupMove = getChild<LLRadioGroup>("move_radio_group"); + mRadioGroupEdit = getChild<LLRadioGroup>("edit_radio_group"); + mBtnGridOptions = getChild<LLButton>("Options..."); + mBtnLink = getChild<LLButton>("link_btn"); + mBtnUnlink = getChild<LLButton>("unlink_btn"); + + mCheckSelectIndividual = getChild<LLCheckBoxCtrl>("checkbox edit linked parts"); + getChild<LLUICtrl>("checkbox edit linked parts")->setValue((BOOL)gSavedSettings.getBOOL("EditLinkedParts")); + mCheckSnapToGrid = getChild<LLCheckBoxCtrl>("checkbox snap to grid"); + getChild<LLUICtrl>("checkbox snap to grid")->setValue((BOOL)gSavedSettings.getBOOL("SnapEnabled")); + mCheckStretchUniform = getChild<LLCheckBoxCtrl>("checkbox uniform"); + getChild<LLUICtrl>("checkbox uniform")->setValue((BOOL)gSavedSettings.getBOOL("ScaleUniform")); + mCheckStretchTexture = getChild<LLCheckBoxCtrl>("checkbox stretch textures"); + getChild<LLUICtrl>("checkbox stretch textures")->setValue((BOOL)gSavedSettings.getBOOL("ScaleStretchTextures")); + mComboGridMode = getChild<LLComboBox>("combobox grid mode"); + + // + // Create Buttons + // + + for(size_t t=0; t<LL_ARRAY_SIZE(toolNames); ++t) + { + LLButton *found = getChild<LLButton>(toolNames[t]); + if(found) + { + found->setClickedCallback(boost::bind(&LLFloaterTools::setObjectType, toolData[t])); + mButtons.push_back( found ); + }else{ + LL_WARNS() << "Tool button not found! DOA Pending." << LL_ENDL; + } + } + mCheckCopySelection = getChild<LLCheckBoxCtrl>("checkbox copy selection"); + getChild<LLUICtrl>("checkbox copy selection")->setValue((BOOL)gSavedSettings.getBOOL("CreateToolCopySelection")); + mCheckSticky = getChild<LLCheckBoxCtrl>("checkbox sticky"); + getChild<LLUICtrl>("checkbox sticky")->setValue((BOOL)gSavedSettings.getBOOL("CreateToolKeepSelected")); + mCheckCopyCenters = getChild<LLCheckBoxCtrl>("checkbox copy centers"); + getChild<LLUICtrl>("checkbox copy centers")->setValue((BOOL)gSavedSettings.getBOOL("CreateToolCopyCenters")); + mCheckCopyRotates = getChild<LLCheckBoxCtrl>("checkbox copy rotates"); + getChild<LLUICtrl>("checkbox copy rotates")->setValue((BOOL)gSavedSettings.getBOOL("CreateToolCopyRotates")); + + mRadioGroupLand = getChild<LLRadioGroup>("land_radio_group"); + mBtnApplyToSelection = getChild<LLButton>("button apply to selection"); + mSliderDozerSize = getChild<LLSlider>("slider brush size"); + getChild<LLUICtrl>("slider brush size")->setValue(gSavedSettings.getF32("LandBrushSize")); + mSliderDozerForce = getChild<LLSlider>("slider force"); + // the setting stores the actual force multiplier, but the slider is logarithmic, so we convert here + getChild<LLUICtrl>("slider force")->setValue(log10(gSavedSettings.getF32("LandBrushForce"))); + + mCostTextBorder = getChild<LLViewBorder>("cost_text_border"); + + mTab = getChild<LLTabContainer>("Object Info Tabs"); + if(mTab) + { + mTab->setFollows(FOLLOWS_TOP | FOLLOWS_LEFT); + mTab->setBorderVisible(FALSE); + mTab->selectFirstTab(); + } + + mStatusText["rotate"] = getString("status_rotate"); + mStatusText["scale"] = getString("status_scale"); + mStatusText["move"] = getString("status_move"); + mStatusText["modifyland"] = getString("status_modifyland"); + mStatusText["camera"] = getString("status_camera"); + mStatusText["grab"] = getString("status_grab"); + mStatusText["place"] = getString("status_place"); + mStatusText["selectland"] = getString("status_selectland"); + + sShowObjectCost = gSavedSettings.getBOOL("ShowObjectRenderingCost"); + + return TRUE; } // Create the popupview with a dummy center. It will be moved into place // during LLViewerWindow's per-frame hover processing. LLFloaterTools::LLFloaterTools(const LLSD& key) -: LLFloater(key), - mBtnFocus(NULL), - mBtnMove(NULL), - mBtnEdit(NULL), - mBtnCreate(NULL), - mBtnLand(NULL), - mTextStatus(NULL), - - mRadioGroupFocus(NULL), - mRadioGroupMove(NULL), - mRadioGroupEdit(NULL), - - mCheckSelectIndividual(NULL), - - mCheckSnapToGrid(NULL), - mBtnGridOptions(NULL), - mComboGridMode(NULL), - mCheckStretchUniform(NULL), - mCheckStretchTexture(NULL), - mCheckStretchUniformLabel(NULL), - - mBtnRotateLeft(NULL), - mBtnRotateReset(NULL), - mBtnRotateRight(NULL), - - mBtnLink(NULL), - mBtnUnlink(NULL), - - mBtnDelete(NULL), - mBtnDuplicate(NULL), - mBtnDuplicateInPlace(NULL), - - mCheckSticky(NULL), - mCheckCopySelection(NULL), - mCheckCopyCenters(NULL), - mCheckCopyRotates(NULL), - mRadioGroupLand(NULL), - mSliderDozerSize(NULL), - mSliderDozerForce(NULL), - mBtnApplyToSelection(NULL), - - mTab(NULL), - mPanelPermissions(NULL), - mPanelObject(NULL), - mPanelVolume(NULL), - mPanelContents(NULL), - mPanelFace(NULL), - mPanelLandInfo(NULL), - - mCostTextBorder(NULL), - mTabLand(NULL), - - mLandImpactsObserver(NULL), - - mDirty(TRUE), - mHasSelection(TRUE) +: LLFloater(key), + mBtnFocus(NULL), + mBtnMove(NULL), + mBtnEdit(NULL), + mBtnCreate(NULL), + mBtnLand(NULL), + mTextStatus(NULL), + + mRadioGroupFocus(NULL), + mRadioGroupMove(NULL), + mRadioGroupEdit(NULL), + + mCheckSelectIndividual(NULL), + + mCheckSnapToGrid(NULL), + mBtnGridOptions(NULL), + mComboGridMode(NULL), + mCheckStretchUniform(NULL), + mCheckStretchTexture(NULL), + mCheckStretchUniformLabel(NULL), + + mBtnRotateLeft(NULL), + mBtnRotateReset(NULL), + mBtnRotateRight(NULL), + + mBtnLink(NULL), + mBtnUnlink(NULL), + + mBtnDelete(NULL), + mBtnDuplicate(NULL), + mBtnDuplicateInPlace(NULL), + + mCheckSticky(NULL), + mCheckCopySelection(NULL), + mCheckCopyCenters(NULL), + mCheckCopyRotates(NULL), + mRadioGroupLand(NULL), + mSliderDozerSize(NULL), + mSliderDozerForce(NULL), + mBtnApplyToSelection(NULL), + + mTab(NULL), + mPanelPermissions(NULL), + mPanelObject(NULL), + mPanelVolume(NULL), + mPanelContents(NULL), + mPanelFace(NULL), + mPanelLandInfo(NULL), + + mCostTextBorder(NULL), + mTabLand(NULL), + + mLandImpactsObserver(NULL), + + mDirty(TRUE), + mHasSelection(TRUE) { - gFloaterTools = this; - - setAutoFocus(FALSE); - mFactoryMap["General"] = LLCallbackMap(createPanelPermissions, this);//LLPanelPermissions - mFactoryMap["Object"] = LLCallbackMap(createPanelObject, this);//LLPanelObject - mFactoryMap["Features"] = LLCallbackMap(createPanelVolume, this);//LLPanelVolume - mFactoryMap["Texture"] = LLCallbackMap(createPanelFace, this);//LLPanelFace - mFactoryMap["Contents"] = LLCallbackMap(createPanelContents, this);//LLPanelContents - mFactoryMap["land info panel"] = LLCallbackMap(createPanelLandInfo, this);//LLPanelLandInfo - - mCommitCallbackRegistrar.add("BuildTool.setTool", boost::bind(&LLFloaterTools::setTool,this, _2)); - mCommitCallbackRegistrar.add("BuildTool.commitZoom", boost::bind(&commit_slider_zoom, _1)); - mCommitCallbackRegistrar.add("BuildTool.commitRadioFocus", boost::bind(&commit_radio_group_focus, _1)); - mCommitCallbackRegistrar.add("BuildTool.commitRadioMove", boost::bind(&commit_radio_group_move,_1)); - mCommitCallbackRegistrar.add("BuildTool.commitRadioEdit", boost::bind(&commit_radio_group_edit,_1)); - - mCommitCallbackRegistrar.add("BuildTool.gridMode", boost::bind(&commit_grid_mode,_1)); - mCommitCallbackRegistrar.add("BuildTool.selectComponent", boost::bind(&commit_select_component, this)); - mCommitCallbackRegistrar.add("BuildTool.gridOptions", boost::bind(&LLFloaterTools::onClickGridOptions,this)); - mCommitCallbackRegistrar.add("BuildTool.applyToSelection", boost::bind(&click_apply_to_selection, this)); - mCommitCallbackRegistrar.add("BuildTool.commitRadioLand", boost::bind(&commit_radio_group_land,_1)); - mCommitCallbackRegistrar.add("BuildTool.LandBrushForce", boost::bind(&commit_slider_dozer_force,_1)); - - mCommitCallbackRegistrar.add("BuildTool.LinkObjects", boost::bind(&LLSelectMgr::linkObjects, LLSelectMgr::getInstance())); - mCommitCallbackRegistrar.add("BuildTool.UnlinkObjects", boost::bind(&LLSelectMgr::unlinkObjects, LLSelectMgr::getInstance())); - - mLandImpactsObserver = new LLLandImpactsObserver(); - LLViewerParcelMgr::getInstance()->addObserver(mLandImpactsObserver); + gFloaterTools = this; + + setAutoFocus(FALSE); + mFactoryMap["General"] = LLCallbackMap(createPanelPermissions, this);//LLPanelPermissions + mFactoryMap["Object"] = LLCallbackMap(createPanelObject, this);//LLPanelObject + mFactoryMap["Features"] = LLCallbackMap(createPanelVolume, this);//LLPanelVolume + mFactoryMap["Texture"] = LLCallbackMap(createPanelFace, this);//LLPanelFace + mFactoryMap["Contents"] = LLCallbackMap(createPanelContents, this);//LLPanelContents + mFactoryMap["land info panel"] = LLCallbackMap(createPanelLandInfo, this);//LLPanelLandInfo + + mCommitCallbackRegistrar.add("BuildTool.setTool", boost::bind(&LLFloaterTools::setTool,this, _2)); + mCommitCallbackRegistrar.add("BuildTool.commitZoom", boost::bind(&commit_slider_zoom, _1)); + mCommitCallbackRegistrar.add("BuildTool.commitRadioFocus", boost::bind(&commit_radio_group_focus, _1)); + mCommitCallbackRegistrar.add("BuildTool.commitRadioMove", boost::bind(&commit_radio_group_move,_1)); + mCommitCallbackRegistrar.add("BuildTool.commitRadioEdit", boost::bind(&commit_radio_group_edit,_1)); + + mCommitCallbackRegistrar.add("BuildTool.gridMode", boost::bind(&commit_grid_mode,_1)); + mCommitCallbackRegistrar.add("BuildTool.selectComponent", boost::bind(&commit_select_component, this)); + mCommitCallbackRegistrar.add("BuildTool.gridOptions", boost::bind(&LLFloaterTools::onClickGridOptions,this)); + mCommitCallbackRegistrar.add("BuildTool.applyToSelection", boost::bind(&click_apply_to_selection, this)); + mCommitCallbackRegistrar.add("BuildTool.commitRadioLand", boost::bind(&commit_radio_group_land,_1)); + mCommitCallbackRegistrar.add("BuildTool.LandBrushForce", boost::bind(&commit_slider_dozer_force,_1)); + + mCommitCallbackRegistrar.add("BuildTool.LinkObjects", boost::bind(&LLSelectMgr::linkObjects, LLSelectMgr::getInstance())); + mCommitCallbackRegistrar.add("BuildTool.UnlinkObjects", boost::bind(&LLSelectMgr::unlinkObjects, LLSelectMgr::getInstance())); + + mLandImpactsObserver = new LLLandImpactsObserver(); + LLViewerParcelMgr::getInstance()->addObserver(mLandImpactsObserver); } LLFloaterTools::~LLFloaterTools() { - // children automatically deleted - gFloaterTools = NULL; + // children automatically deleted + gFloaterTools = NULL; - LLViewerParcelMgr::getInstance()->removeObserver(mLandImpactsObserver); - delete mLandImpactsObserver; + LLViewerParcelMgr::getInstance()->removeObserver(mLandImpactsObserver); + delete mLandImpactsObserver; } void LLFloaterTools::setStatusText(const std::string& text) { - std::map<std::string, std::string>::iterator iter = mStatusText.find(text); - if (iter != mStatusText.end()) - { - mTextStatus->setText(iter->second); - } - else - { - mTextStatus->setText(text); - } + std::map<std::string, std::string>::iterator iter = mStatusText.find(text); + if (iter != mStatusText.end()) + { + mTextStatus->setText(iter->second); + } + else + { + mTextStatus->setText(text); + } } void LLFloaterTools::refresh() { - const S32 INFO_WIDTH = getRect().getWidth(); - const S32 INFO_HEIGHT = 384; - LLRect object_info_rect(0, 0, INFO_WIDTH, -INFO_HEIGHT); - BOOL all_volume = LLSelectMgr::getInstance()->selectionAllPCode( LL_PCODE_VOLUME ); + const S32 INFO_WIDTH = getRect().getWidth(); + const S32 INFO_HEIGHT = 384; + LLRect object_info_rect(0, 0, INFO_WIDTH, -INFO_HEIGHT); + BOOL all_volume = LLSelectMgr::getInstance()->selectionAllPCode( LL_PCODE_VOLUME ); - S32 idx_features = mTab->getPanelIndexByTitle(PANEL_NAMES[PANEL_FEATURES]); - S32 idx_face = mTab->getPanelIndexByTitle(PANEL_NAMES[PANEL_FACE]); - S32 idx_contents = mTab->getPanelIndexByTitle(PANEL_NAMES[PANEL_CONTENTS]); + S32 idx_features = mTab->getPanelIndexByTitle(PANEL_NAMES[PANEL_FEATURES]); + S32 idx_face = mTab->getPanelIndexByTitle(PANEL_NAMES[PANEL_FACE]); + S32 idx_contents = mTab->getPanelIndexByTitle(PANEL_NAMES[PANEL_CONTENTS]); - S32 selected_index = mTab->getCurrentPanelIndex(); + S32 selected_index = mTab->getCurrentPanelIndex(); - if (!all_volume && (selected_index == idx_features || selected_index == idx_face || - selected_index == idx_contents)) - { - mTab->selectFirstTab(); - } + if (!all_volume && (selected_index == idx_features || selected_index == idx_face || + selected_index == idx_contents)) + { + mTab->selectFirstTab(); + } - mTab->enableTabButton(idx_features, all_volume); - mTab->enableTabButton(idx_face, all_volume); - mTab->enableTabButton(idx_contents, all_volume); + mTab->enableTabButton(idx_features, all_volume); + mTab->enableTabButton(idx_face, all_volume); + mTab->enableTabButton(idx_contents, all_volume); - // Refresh object and prim count labels - LLLocale locale(LLLocale::USER_LOCALE); + // Refresh object and prim count labels + LLLocale locale(LLLocale::USER_LOCALE); #if 0 - if (!gMeshRepo.meshRezEnabled()) - { - std::string obj_count_string; - LLResMgr::getInstance()->getIntegerString(obj_count_string, LLSelectMgr::getInstance()->getSelection()->getRootObjectCount()); - getChild<LLUICtrl>("selection_count")->setTextArg("[OBJ_COUNT]", obj_count_string); - std::string prim_count_string; - LLResMgr::getInstance()->getIntegerString(prim_count_string, LLSelectMgr::getInstance()->getSelection()->getObjectCount()); - getChild<LLUICtrl>("selection_count")->setTextArg("[PRIM_COUNT]", prim_count_string); - - // calculate selection rendering cost - if (sShowObjectCost) - { - std::string prim_cost_string; - S32 render_cost = LLSelectMgr::getInstance()->getSelection()->getSelectedObjectRenderCost(); - LLResMgr::getInstance()->getIntegerString(prim_cost_string, render_cost); - getChild<LLUICtrl>("RenderingCost")->setTextArg("[COUNT]", prim_cost_string); - } - - // disable the object and prim counts if nothing selected - bool have_selection = ! LLSelectMgr::getInstance()->getSelection()->isEmpty(); - getChildView("obj_count")->setEnabled(have_selection); - getChildView("prim_count")->setEnabled(have_selection); - getChildView("RenderingCost")->setEnabled(have_selection && sShowObjectCost); - } - else + if (!gMeshRepo.meshRezEnabled()) + { + std::string obj_count_string; + LLResMgr::getInstance()->getIntegerString(obj_count_string, LLSelectMgr::getInstance()->getSelection()->getRootObjectCount()); + getChild<LLUICtrl>("selection_count")->setTextArg("[OBJ_COUNT]", obj_count_string); + std::string prim_count_string; + LLResMgr::getInstance()->getIntegerString(prim_count_string, LLSelectMgr::getInstance()->getSelection()->getObjectCount()); + getChild<LLUICtrl>("selection_count")->setTextArg("[PRIM_COUNT]", prim_count_string); + + // calculate selection rendering cost + if (sShowObjectCost) + { + std::string prim_cost_string; + S32 render_cost = LLSelectMgr::getInstance()->getSelection()->getSelectedObjectRenderCost(); + LLResMgr::getInstance()->getIntegerString(prim_cost_string, render_cost); + getChild<LLUICtrl>("RenderingCost")->setTextArg("[COUNT]", prim_cost_string); + } + + // disable the object and prim counts if nothing selected + bool have_selection = ! LLSelectMgr::getInstance()->getSelection()->isEmpty(); + getChildView("obj_count")->setEnabled(have_selection); + getChildView("prim_count")->setEnabled(have_selection); + getChildView("RenderingCost")->setEnabled(have_selection && sShowObjectCost); + } + else #endif - { + { LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection(); F32 link_cost = selection->getSelectedLinksetCost(); S32 link_count = selection->getRootObjectCount(); @@ -529,33 +529,33 @@ void LLFloaterTools::refresh() && LLToolFace::getInstance() == LLToolMgr::getInstance()->getCurrentTool(); getChildView("selection_faces")->setVisible(show_faces); - LLStringUtil::format_map_t selection_args; - selection_args["OBJ_COUNT"] = llformat("%.1d", link_count); - selection_args["LAND_IMPACT"] = llformat("%.1d", (S32)link_cost); + LLStringUtil::format_map_t selection_args; + selection_args["OBJ_COUNT"] = llformat("%.1d", link_count); + selection_args["LAND_IMPACT"] = llformat("%.1d", (S32)link_cost); - std::ostringstream selection_info; + std::ostringstream selection_info; - selection_info << getString("status_selectcount", selection_args); + selection_info << getString("status_selectcount", selection_args); - getChild<LLTextBox>("selection_count")->setText(selection_info.str()); - } + getChild<LLTextBox>("selection_count")->setText(selection_info.str()); + } - // Refresh child tabs - mPanelPermissions->refresh(); - mPanelObject->refresh(); - mPanelVolume->refresh(); - mPanelFace->refresh(); + // Refresh child tabs + mPanelPermissions->refresh(); + mPanelObject->refresh(); + mPanelVolume->refresh(); + mPanelFace->refresh(); mPanelFace->refreshMedia(); - mPanelContents->refresh(); - mPanelLandInfo->refresh(); - - // Refresh the advanced weights floater - LLFloaterObjectWeights* object_weights_floater = LLFloaterReg::findTypedInstance<LLFloaterObjectWeights>("object_weights"); - if(object_weights_floater && object_weights_floater->getVisible()) - { - object_weights_floater->refresh(); - } + mPanelContents->refresh(); + mPanelLandInfo->refresh(); + + // Refresh the advanced weights floater + LLFloaterObjectWeights* object_weights_floater = LLFloaterReg::findTypedInstance<LLFloaterObjectWeights>("object_weights"); + if(object_weights_floater && object_weights_floater->getVisible()) + { + object_weights_floater->refresh(); + } } void LLFloaterTools::draw() @@ -568,374 +568,374 @@ void LLFloaterTools::draw() mHasSelection = has_selection; if (mDirty) - { - refresh(); - mDirty = FALSE; - } + { + refresh(); + mDirty = FALSE; + } - // mCheckSelectIndividual->set(gSavedSettings.getBOOL("EditLinkedParts")); - LLFloater::draw(); + // mCheckSelectIndividual->set(gSavedSettings.getBOOL("EditLinkedParts")); + LLFloater::draw(); } void LLFloaterTools::dirty() { - mDirty = TRUE; - LLFloaterOpenObject* instance = LLFloaterReg::findTypedInstance<LLFloaterOpenObject>("openobject"); - if (instance) instance->dirty(); + mDirty = TRUE; + LLFloaterOpenObject* instance = LLFloaterReg::findTypedInstance<LLFloaterOpenObject>("openobject"); + if (instance) instance->dirty(); } // Clean up any tool state that should not persist when the // floater is closed. void LLFloaterTools::resetToolState() { - gCameraBtnZoom = TRUE; - gCameraBtnOrbit = FALSE; - gCameraBtnPan = FALSE; + gCameraBtnZoom = TRUE; + gCameraBtnOrbit = FALSE; + gCameraBtnPan = FALSE; - gGrabBtnSpin = FALSE; - gGrabBtnVertical = FALSE; + gGrabBtnSpin = FALSE; + gGrabBtnVertical = FALSE; } void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask) { - LLTool *tool = LLToolMgr::getInstance()->getCurrentTool(); - - // HACK to allow seeing the buttons when you have the app in a window. - // Keep the visibility the same as it - if (tool == gToolNull) - { - return; - } - - if ( isMinimized() ) - { // SL looks odd if we draw the tools while the window is minimized - return; - } - - // Focus buttons - BOOL focus_visible = ( tool == LLToolCamera::getInstance() ); - - mBtnFocus ->setToggleState( focus_visible ); - - mRadioGroupFocus->setVisible( focus_visible ); - getChildView("slider zoom")->setVisible( focus_visible); - getChildView("slider zoom")->setEnabled(gCameraBtnZoom); - - if (!gCameraBtnOrbit && - !gCameraBtnPan && - !(mask == MASK_ORBIT) && - !(mask == (MASK_ORBIT | MASK_ALT)) && - !(mask == MASK_PAN) && - !(mask == (MASK_PAN | MASK_ALT)) ) - { - mRadioGroupFocus->setValue("radio zoom"); - } - else if ( gCameraBtnOrbit || - (mask == MASK_ORBIT) || - (mask == (MASK_ORBIT | MASK_ALT)) ) - { - mRadioGroupFocus->setValue("radio orbit"); - } - else if ( gCameraBtnPan || - (mask == MASK_PAN) || - (mask == (MASK_PAN | MASK_ALT)) ) - { - mRadioGroupFocus->setValue("radio pan"); - } - - // multiply by correction factor because volume sliders go [0, 0.5] - getChild<LLUICtrl>("slider zoom")->setValue(gAgentCamera.getCameraZoomFraction() * 0.5f); - - // Move buttons - BOOL move_visible = (tool == LLToolGrab::getInstance()); - - if (mBtnMove) mBtnMove ->setToggleState( move_visible ); - - // HACK - highlight buttons for next click - mRadioGroupMove->setVisible(move_visible); - if (!(gGrabBtnSpin || - gGrabBtnVertical || - (mask == MASK_VERTICAL) || - (mask == MASK_SPIN))) - { - mRadioGroupMove->setValue("radio move"); - } - else if ((mask == MASK_VERTICAL) || - (gGrabBtnVertical && (mask != MASK_SPIN))) - { - mRadioGroupMove->setValue("radio lift"); - } - else if ((mask == MASK_SPIN) || - (gGrabBtnSpin && (mask != MASK_VERTICAL))) - { - mRadioGroupMove->setValue("radio spin"); - } - - // Edit buttons - BOOL edit_visible = tool == LLToolCompTranslate::getInstance() || - tool == LLToolCompRotate::getInstance() || - tool == LLToolCompScale::getInstance() || - tool == LLToolFace::getInstance() || - tool == LLToolIndividual::getInstance() || - tool == LLToolPipette::getInstance(); - - mBtnEdit ->setToggleState( edit_visible ); - mRadioGroupEdit->setVisible( edit_visible ); - //bool linked_parts = gSavedSettings.getBOOL("EditLinkedParts"); - //getChildView("RenderingCost")->setVisible( !linked_parts && (edit_visible || focus_visible || move_visible) && sShowObjectCost); - - mBtnLink->setVisible(edit_visible); - mBtnUnlink->setVisible(edit_visible); - - mBtnLink->setEnabled(LLSelectMgr::instance().enableLinkObjects()); - mBtnUnlink->setEnabled(LLSelectMgr::instance().enableUnlinkObjects()); - - if (mCheckSelectIndividual) - { - mCheckSelectIndividual->setVisible(edit_visible); - //mCheckSelectIndividual->set(gSavedSettings.getBOOL("EditLinkedParts")); - } - - if ( tool == LLToolCompTranslate::getInstance() ) - { - mRadioGroupEdit->setValue("radio position"); - } - else if ( tool == LLToolCompRotate::getInstance() ) - { - mRadioGroupEdit->setValue("radio rotate"); - } - else if ( tool == LLToolCompScale::getInstance() ) - { - mRadioGroupEdit->setValue("radio stretch"); - } - else if ( tool == LLToolFace::getInstance() ) - { - mRadioGroupEdit->setValue("radio select face"); - } - - if (mComboGridMode) - { - mComboGridMode->setVisible( edit_visible ); - S32 index = mComboGridMode->getCurrentIndex(); - mComboGridMode->removeall(); - - switch (mObjectSelection->getSelectType()) - { - case SELECT_TYPE_HUD: - mComboGridMode->add(getString("grid_screen_text")); - mComboGridMode->add(getString("grid_local_text")); - break; - case SELECT_TYPE_WORLD: - mComboGridMode->add(getString("grid_world_text")); - mComboGridMode->add(getString("grid_local_text")); - mComboGridMode->add(getString("grid_reference_text")); - break; - case SELECT_TYPE_ATTACHMENT: - mComboGridMode->add(getString("grid_attachment_text")); - mComboGridMode->add(getString("grid_local_text")); - mComboGridMode->add(getString("grid_reference_text")); - break; - } - - mComboGridMode->setCurrentByIndex(index); - } - - // Snap to grid disabled for grab tool - very confusing - if (mCheckSnapToGrid) mCheckSnapToGrid->setVisible( edit_visible /* || tool == LLToolGrab::getInstance() */ ); - if (mBtnGridOptions) mBtnGridOptions->setVisible( edit_visible /* || tool == LLToolGrab::getInstance() */ ); - - //mCheckSelectLinked ->setVisible( edit_visible ); - if (mCheckStretchUniform) mCheckStretchUniform->setVisible( edit_visible ); - if (mCheckStretchTexture) mCheckStretchTexture->setVisible( edit_visible ); - if (mCheckStretchUniformLabel) mCheckStretchUniformLabel->setVisible( edit_visible ); - - // Create buttons - BOOL create_visible = (tool == LLToolCompCreate::getInstance()); - - mBtnCreate ->setToggleState( tool == LLToolCompCreate::getInstance() ); - - if (mCheckCopySelection - && mCheckCopySelection->get()) - { - // don't highlight any placer button - for (std::vector<LLButton*>::size_type i = 0; i < mButtons.size(); i++) - { - mButtons[i]->setToggleState(FALSE); - mButtons[i]->setVisible( create_visible ); - } - } - else - { - // Highlight the correct placer button - for( S32 t = 0; t < (S32)mButtons.size(); t++ ) - { - LLPCode pcode = LLToolPlacer::getObjectType(); - LLPCode button_pcode = toolData[t]; - BOOL state = (pcode == button_pcode); - mButtons[t]->setToggleState( state ); - mButtons[t]->setVisible( create_visible ); - } - } - - if (mCheckSticky) mCheckSticky ->setVisible( create_visible ); - if (mCheckCopySelection) mCheckCopySelection ->setVisible( create_visible ); - if (mCheckCopyCenters) mCheckCopyCenters ->setVisible( create_visible ); - if (mCheckCopyRotates) mCheckCopyRotates ->setVisible( create_visible ); - - if (mCheckCopyCenters && mCheckCopySelection) mCheckCopyCenters->setEnabled( mCheckCopySelection->get() ); - if (mCheckCopyRotates && mCheckCopySelection) mCheckCopyRotates->setEnabled( mCheckCopySelection->get() ); - - // Land buttons - BOOL land_visible = (tool == LLToolBrushLand::getInstance() || tool == LLToolSelectLand::getInstance() ); - - mCostTextBorder->setVisible(!land_visible); - - if (mBtnLand) mBtnLand ->setToggleState( land_visible ); - - mRadioGroupLand->setVisible( land_visible ); - if ( tool == LLToolSelectLand::getInstance() ) - { - mRadioGroupLand->setValue("radio select land"); - } - else if ( tool == LLToolBrushLand::getInstance() ) - { - S32 dozer_mode = gSavedSettings.getS32("RadioLandBrushAction"); - switch(dozer_mode) - { - case 0: - mRadioGroupLand->setValue("radio flatten"); - break; - case 1: - mRadioGroupLand->setValue("radio raise"); - break; - case 2: - mRadioGroupLand->setValue("radio lower"); - break; - case 3: - mRadioGroupLand->setValue("radio smooth"); - break; - case 4: - mRadioGroupLand->setValue("radio noise"); - break; - case 5: - mRadioGroupLand->setValue("radio revert"); - break; - default: - break; - } - } - - if (mBtnApplyToSelection) - { - mBtnApplyToSelection->setVisible( land_visible ); - mBtnApplyToSelection->setEnabled( land_visible && !LLViewerParcelMgr::getInstance()->selectionEmpty() && tool != LLToolSelectLand::getInstance()); - } - if (mSliderDozerSize) - { - mSliderDozerSize ->setVisible( land_visible ); - getChildView("Bulldozer:")->setVisible( land_visible); - getChildView("Dozer Size:")->setVisible( land_visible); - } - if (mSliderDozerForce) - { - mSliderDozerForce ->setVisible( land_visible ); - getChildView("Strength:")->setVisible( land_visible); - } - - bool have_selection = !LLSelectMgr::getInstance()->getSelection()->isEmpty(); - - getChildView("selection_count")->setVisible(!land_visible && have_selection); + LLTool *tool = LLToolMgr::getInstance()->getCurrentTool(); + + // HACK to allow seeing the buttons when you have the app in a window. + // Keep the visibility the same as it + if (tool == gToolNull) + { + return; + } + + if ( isMinimized() ) + { // SL looks odd if we draw the tools while the window is minimized + return; + } + + // Focus buttons + BOOL focus_visible = ( tool == LLToolCamera::getInstance() ); + + mBtnFocus ->setToggleState( focus_visible ); + + mRadioGroupFocus->setVisible( focus_visible ); + getChildView("slider zoom")->setVisible( focus_visible); + getChildView("slider zoom")->setEnabled(gCameraBtnZoom); + + if (!gCameraBtnOrbit && + !gCameraBtnPan && + !(mask == MASK_ORBIT) && + !(mask == (MASK_ORBIT | MASK_ALT)) && + !(mask == MASK_PAN) && + !(mask == (MASK_PAN | MASK_ALT)) ) + { + mRadioGroupFocus->setValue("radio zoom"); + } + else if ( gCameraBtnOrbit || + (mask == MASK_ORBIT) || + (mask == (MASK_ORBIT | MASK_ALT)) ) + { + mRadioGroupFocus->setValue("radio orbit"); + } + else if ( gCameraBtnPan || + (mask == MASK_PAN) || + (mask == (MASK_PAN | MASK_ALT)) ) + { + mRadioGroupFocus->setValue("radio pan"); + } + + // multiply by correction factor because volume sliders go [0, 0.5] + getChild<LLUICtrl>("slider zoom")->setValue(gAgentCamera.getCameraZoomFraction() * 0.5f); + + // Move buttons + BOOL move_visible = (tool == LLToolGrab::getInstance()); + + if (mBtnMove) mBtnMove ->setToggleState( move_visible ); + + // HACK - highlight buttons for next click + mRadioGroupMove->setVisible(move_visible); + if (!(gGrabBtnSpin || + gGrabBtnVertical || + (mask == MASK_VERTICAL) || + (mask == MASK_SPIN))) + { + mRadioGroupMove->setValue("radio move"); + } + else if ((mask == MASK_VERTICAL) || + (gGrabBtnVertical && (mask != MASK_SPIN))) + { + mRadioGroupMove->setValue("radio lift"); + } + else if ((mask == MASK_SPIN) || + (gGrabBtnSpin && (mask != MASK_VERTICAL))) + { + mRadioGroupMove->setValue("radio spin"); + } + + // Edit buttons + BOOL edit_visible = tool == LLToolCompTranslate::getInstance() || + tool == LLToolCompRotate::getInstance() || + tool == LLToolCompScale::getInstance() || + tool == LLToolFace::getInstance() || + tool == LLToolIndividual::getInstance() || + tool == LLToolPipette::getInstance(); + + mBtnEdit ->setToggleState( edit_visible ); + mRadioGroupEdit->setVisible( edit_visible ); + //bool linked_parts = gSavedSettings.getBOOL("EditLinkedParts"); + //getChildView("RenderingCost")->setVisible( !linked_parts && (edit_visible || focus_visible || move_visible) && sShowObjectCost); + + mBtnLink->setVisible(edit_visible); + mBtnUnlink->setVisible(edit_visible); + + mBtnLink->setEnabled(LLSelectMgr::instance().enableLinkObjects()); + mBtnUnlink->setEnabled(LLSelectMgr::instance().enableUnlinkObjects()); + + if (mCheckSelectIndividual) + { + mCheckSelectIndividual->setVisible(edit_visible); + //mCheckSelectIndividual->set(gSavedSettings.getBOOL("EditLinkedParts")); + } + + if ( tool == LLToolCompTranslate::getInstance() ) + { + mRadioGroupEdit->setValue("radio position"); + } + else if ( tool == LLToolCompRotate::getInstance() ) + { + mRadioGroupEdit->setValue("radio rotate"); + } + else if ( tool == LLToolCompScale::getInstance() ) + { + mRadioGroupEdit->setValue("radio stretch"); + } + else if ( tool == LLToolFace::getInstance() ) + { + mRadioGroupEdit->setValue("radio select face"); + } + + if (mComboGridMode) + { + mComboGridMode->setVisible( edit_visible ); + S32 index = mComboGridMode->getCurrentIndex(); + mComboGridMode->removeall(); + + switch (mObjectSelection->getSelectType()) + { + case SELECT_TYPE_HUD: + mComboGridMode->add(getString("grid_screen_text")); + mComboGridMode->add(getString("grid_local_text")); + break; + case SELECT_TYPE_WORLD: + mComboGridMode->add(getString("grid_world_text")); + mComboGridMode->add(getString("grid_local_text")); + mComboGridMode->add(getString("grid_reference_text")); + break; + case SELECT_TYPE_ATTACHMENT: + mComboGridMode->add(getString("grid_attachment_text")); + mComboGridMode->add(getString("grid_local_text")); + mComboGridMode->add(getString("grid_reference_text")); + break; + } + + mComboGridMode->setCurrentByIndex(index); + } + + // Snap to grid disabled for grab tool - very confusing + if (mCheckSnapToGrid) mCheckSnapToGrid->setVisible( edit_visible /* || tool == LLToolGrab::getInstance() */ ); + if (mBtnGridOptions) mBtnGridOptions->setVisible( edit_visible /* || tool == LLToolGrab::getInstance() */ ); + + //mCheckSelectLinked ->setVisible( edit_visible ); + if (mCheckStretchUniform) mCheckStretchUniform->setVisible( edit_visible ); + if (mCheckStretchTexture) mCheckStretchTexture->setVisible( edit_visible ); + if (mCheckStretchUniformLabel) mCheckStretchUniformLabel->setVisible( edit_visible ); + + // Create buttons + BOOL create_visible = (tool == LLToolCompCreate::getInstance()); + + mBtnCreate ->setToggleState( tool == LLToolCompCreate::getInstance() ); + + if (mCheckCopySelection + && mCheckCopySelection->get()) + { + // don't highlight any placer button + for (std::vector<LLButton*>::size_type i = 0; i < mButtons.size(); i++) + { + mButtons[i]->setToggleState(FALSE); + mButtons[i]->setVisible( create_visible ); + } + } + else + { + // Highlight the correct placer button + for( S32 t = 0; t < (S32)mButtons.size(); t++ ) + { + LLPCode pcode = LLToolPlacer::getObjectType(); + LLPCode button_pcode = toolData[t]; + BOOL state = (pcode == button_pcode); + mButtons[t]->setToggleState( state ); + mButtons[t]->setVisible( create_visible ); + } + } + + if (mCheckSticky) mCheckSticky ->setVisible( create_visible ); + if (mCheckCopySelection) mCheckCopySelection ->setVisible( create_visible ); + if (mCheckCopyCenters) mCheckCopyCenters ->setVisible( create_visible ); + if (mCheckCopyRotates) mCheckCopyRotates ->setVisible( create_visible ); + + if (mCheckCopyCenters && mCheckCopySelection) mCheckCopyCenters->setEnabled( mCheckCopySelection->get() ); + if (mCheckCopyRotates && mCheckCopySelection) mCheckCopyRotates->setEnabled( mCheckCopySelection->get() ); + + // Land buttons + BOOL land_visible = (tool == LLToolBrushLand::getInstance() || tool == LLToolSelectLand::getInstance() ); + + mCostTextBorder->setVisible(!land_visible); + + if (mBtnLand) mBtnLand ->setToggleState( land_visible ); + + mRadioGroupLand->setVisible( land_visible ); + if ( tool == LLToolSelectLand::getInstance() ) + { + mRadioGroupLand->setValue("radio select land"); + } + else if ( tool == LLToolBrushLand::getInstance() ) + { + S32 dozer_mode = gSavedSettings.getS32("RadioLandBrushAction"); + switch(dozer_mode) + { + case 0: + mRadioGroupLand->setValue("radio flatten"); + break; + case 1: + mRadioGroupLand->setValue("radio raise"); + break; + case 2: + mRadioGroupLand->setValue("radio lower"); + break; + case 3: + mRadioGroupLand->setValue("radio smooth"); + break; + case 4: + mRadioGroupLand->setValue("radio noise"); + break; + case 5: + mRadioGroupLand->setValue("radio revert"); + break; + default: + break; + } + } + + if (mBtnApplyToSelection) + { + mBtnApplyToSelection->setVisible( land_visible ); + mBtnApplyToSelection->setEnabled( land_visible && !LLViewerParcelMgr::getInstance()->selectionEmpty() && tool != LLToolSelectLand::getInstance()); + } + if (mSliderDozerSize) + { + mSliderDozerSize ->setVisible( land_visible ); + getChildView("Bulldozer:")->setVisible( land_visible); + getChildView("Dozer Size:")->setVisible( land_visible); + } + if (mSliderDozerForce) + { + mSliderDozerForce ->setVisible( land_visible ); + getChildView("Strength:")->setVisible( land_visible); + } + + bool have_selection = !LLSelectMgr::getInstance()->getSelection()->isEmpty(); + + getChildView("selection_count")->setVisible(!land_visible && have_selection); getChildView("selection_faces")->setVisible(LLToolFace::getInstance() == LLToolMgr::getInstance()->getCurrentTool() && LLSelectMgr::getInstance()->getSelection()->getObjectCount() == 1); - getChildView("selection_empty")->setVisible(!land_visible && !have_selection); - - mTab->setVisible(!land_visible); - mPanelLandInfo->setVisible(land_visible); + getChildView("selection_empty")->setVisible(!land_visible && !have_selection); + + mTab->setVisible(!land_visible); + mPanelLandInfo->setVisible(land_visible); } // virtual BOOL LLFloaterTools::canClose() { - // don't close when quitting, so camera will stay put - return !LLApp::isExiting(); + // don't close when quitting, so camera will stay put + return !LLApp::isExiting(); } // virtual void LLFloaterTools::onOpen(const LLSD& key) { - mParcelSelection = LLViewerParcelMgr::getInstance()->getFloatingParcelSelection(); - mObjectSelection = LLSelectMgr::getInstance()->getEditSelection(); - - std::string panel = key.asString(); - if (!panel.empty()) - { - mTab->selectTabByName(panel); - } - - LLTool* tool = LLToolMgr::getInstance()->getCurrentTool(); - if (tool == LLToolCompInspect::getInstance() - || tool == LLToolDragAndDrop::getInstance()) - { - // Something called floater up while it was supressed (during drag n drop, inspect), - // so it won't be getting any layout or visibility updates, update once - // further updates will come from updateLayout() - LLCoordGL select_center_screen; - MASK mask = gKeyboard->currentMask(TRUE); - updatePopup(select_center_screen, mask); - } - - //gMenuBarView->setItemVisible("BuildTools", TRUE); + mParcelSelection = LLViewerParcelMgr::getInstance()->getFloatingParcelSelection(); + mObjectSelection = LLSelectMgr::getInstance()->getEditSelection(); + + std::string panel = key.asString(); + if (!panel.empty()) + { + mTab->selectTabByName(panel); + } + + LLTool* tool = LLToolMgr::getInstance()->getCurrentTool(); + if (tool == LLToolCompInspect::getInstance() + || tool == LLToolDragAndDrop::getInstance()) + { + // Something called floater up while it was supressed (during drag n drop, inspect), + // so it won't be getting any layout or visibility updates, update once + // further updates will come from updateLayout() + LLCoordGL select_center_screen; + MASK mask = gKeyboard->currentMask(TRUE); + updatePopup(select_center_screen, mask); + } + + //gMenuBarView->setItemVisible("BuildTools", TRUE); } // virtual void LLFloaterTools::onClose(bool app_quitting) { - mTab->setVisible(FALSE); + mTab->setVisible(FALSE); - LLViewerJoystick::getInstance()->moveAvatar(false); + LLViewerJoystick::getInstance()->moveAvatar(false); - // destroy media source used to grab media title - mPanelFace->unloadMedia(); + // destroy media source used to grab media title + mPanelFace->unloadMedia(); - // Different from handle_reset_view in that it doesn't actually - // move the camera if EditCameraMovement is not set. - gAgentCamera.resetView(gSavedSettings.getBOOL("EditCameraMovement")); - - // exit component selection mode - LLSelectMgr::getInstance()->promoteSelectionToRoot(); - gSavedSettings.setBOOL("EditLinkedParts", FALSE); + // Different from handle_reset_view in that it doesn't actually + // move the camera if EditCameraMovement is not set. + gAgentCamera.resetView(gSavedSettings.getBOOL("EditCameraMovement")); - gViewerWindow->showCursor(); + // exit component selection mode + LLSelectMgr::getInstance()->promoteSelectionToRoot(); + gSavedSettings.setBOOL("EditLinkedParts", FALSE); - resetToolState(); + gViewerWindow->showCursor(); - mParcelSelection = NULL; - mObjectSelection = NULL; + resetToolState(); - // Switch back to basic toolset - LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset); - // we were already in basic toolset, using build tools - // so manually reset tool to default (pie menu tool) - LLToolMgr::getInstance()->getCurrentToolset()->selectFirstTool(); + mParcelSelection = NULL; + mObjectSelection = NULL; - //gMenuBarView->setItemVisible("BuildTools", FALSE); - LLFloaterReg::hideInstance("media_settings"); + // Switch back to basic toolset + LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset); + // we were already in basic toolset, using build tools + // so manually reset tool to default (pie menu tool) + LLToolMgr::getInstance()->getCurrentToolset()->selectFirstTool(); - // hide the advanced object weights floater - LLFloaterReg::hideInstance("object_weights"); + //gMenuBarView->setItemVisible("BuildTools", FALSE); + LLFloaterReg::hideInstance("media_settings"); + + // hide the advanced object weights floater + LLFloaterReg::hideInstance("object_weights"); // hide gltf material editor LLFloaterReg::hideInstance("live_material_editor"); - // prepare content for next call - mPanelContents->clearContents(); + // prepare content for next call + mPanelContents->clearContents(); - if(sPreviousFocusOnAvatar) - { - sPreviousFocusOnAvatar = false; - gAgentCamera.setAllowChangeToFollow(TRUE); - } + if(sPreviousFocusOnAvatar) + { + sPreviousFocusOnAvatar = false; + gAgentCamera.setAllowChangeToFollow(TRUE); + } } void click_popup_info(void*) @@ -944,227 +944,227 @@ void click_popup_info(void*) void click_popup_done(void*) { - handle_reset_view(); + handle_reset_view(); } void commit_radio_group_move(LLUICtrl* ctrl) { - LLRadioGroup* group = (LLRadioGroup*)ctrl; - std::string selected = group->getValue().asString(); - if (selected == "radio move") - { - gGrabBtnVertical = FALSE; - gGrabBtnSpin = FALSE; - } - else if (selected == "radio lift") - { - gGrabBtnVertical = TRUE; - gGrabBtnSpin = FALSE; - } - else if (selected == "radio spin") - { - gGrabBtnVertical = FALSE; - gGrabBtnSpin = TRUE; - } + LLRadioGroup* group = (LLRadioGroup*)ctrl; + std::string selected = group->getValue().asString(); + if (selected == "radio move") + { + gGrabBtnVertical = FALSE; + gGrabBtnSpin = FALSE; + } + else if (selected == "radio lift") + { + gGrabBtnVertical = TRUE; + gGrabBtnSpin = FALSE; + } + else if (selected == "radio spin") + { + gGrabBtnVertical = FALSE; + gGrabBtnSpin = TRUE; + } } void commit_radio_group_focus(LLUICtrl* ctrl) { - LLRadioGroup* group = (LLRadioGroup*)ctrl; - std::string selected = group->getValue().asString(); - if (selected == "radio zoom") - { - gCameraBtnZoom = TRUE; - gCameraBtnOrbit = FALSE; - gCameraBtnPan = FALSE; - } - else if (selected == "radio orbit") - { - gCameraBtnZoom = FALSE; - gCameraBtnOrbit = TRUE; - gCameraBtnPan = FALSE; - } - else if (selected == "radio pan") - { - gCameraBtnZoom = FALSE; - gCameraBtnOrbit = FALSE; - gCameraBtnPan = TRUE; - } + LLRadioGroup* group = (LLRadioGroup*)ctrl; + std::string selected = group->getValue().asString(); + if (selected == "radio zoom") + { + gCameraBtnZoom = TRUE; + gCameraBtnOrbit = FALSE; + gCameraBtnPan = FALSE; + } + else if (selected == "radio orbit") + { + gCameraBtnZoom = FALSE; + gCameraBtnOrbit = TRUE; + gCameraBtnPan = FALSE; + } + else if (selected == "radio pan") + { + gCameraBtnZoom = FALSE; + gCameraBtnOrbit = FALSE; + gCameraBtnPan = TRUE; + } } void commit_slider_zoom(LLUICtrl *ctrl) { - // renormalize value, since max "volume" level is 0.5 for some reason - F32 zoom_level = (F32)ctrl->getValue().asReal() * 2.f; // / 0.5f; - gAgentCamera.setCameraZoomFraction(zoom_level); + // renormalize value, since max "volume" level is 0.5 for some reason + F32 zoom_level = (F32)ctrl->getValue().asReal() * 2.f; // / 0.5f; + gAgentCamera.setCameraZoomFraction(zoom_level); } void commit_slider_dozer_force(LLUICtrl *ctrl) { - // the slider is logarithmic, so we exponentiate to get the actual force multiplier - F32 dozer_force = pow(10.f, (F32)ctrl->getValue().asReal()); - gSavedSettings.setF32("LandBrushForce", dozer_force); + // the slider is logarithmic, so we exponentiate to get the actual force multiplier + F32 dozer_force = pow(10.f, (F32)ctrl->getValue().asReal()); + gSavedSettings.setF32("LandBrushForce", dozer_force); } void click_apply_to_selection(void*) { - LLToolBrushLand::getInstance()->modifyLandInSelectionGlobal(); + LLToolBrushLand::getInstance()->modifyLandInSelectionGlobal(); } void commit_radio_group_edit(LLUICtrl *ctrl) { - S32 show_owners = gSavedSettings.getBOOL("ShowParcelOwners"); - - LLRadioGroup* group = (LLRadioGroup*)ctrl; - std::string selected = group->getValue().asString(); - if (selected == "radio position") - { - LLFloaterTools::setEditTool( LLToolCompTranslate::getInstance() ); - } - else if (selected == "radio rotate") - { - LLFloaterTools::setEditTool( LLToolCompRotate::getInstance() ); - } - else if (selected == "radio stretch") - { - LLFloaterTools::setEditTool( LLToolCompScale::getInstance() ); - } - else if (selected == "radio select face") - { - LLFloaterTools::setEditTool( LLToolFace::getInstance() ); - } - gSavedSettings.setBOOL("ShowParcelOwners", show_owners); + S32 show_owners = gSavedSettings.getBOOL("ShowParcelOwners"); + + LLRadioGroup* group = (LLRadioGroup*)ctrl; + std::string selected = group->getValue().asString(); + if (selected == "radio position") + { + LLFloaterTools::setEditTool( LLToolCompTranslate::getInstance() ); + } + else if (selected == "radio rotate") + { + LLFloaterTools::setEditTool( LLToolCompRotate::getInstance() ); + } + else if (selected == "radio stretch") + { + LLFloaterTools::setEditTool( LLToolCompScale::getInstance() ); + } + else if (selected == "radio select face") + { + LLFloaterTools::setEditTool( LLToolFace::getInstance() ); + } + gSavedSettings.setBOOL("ShowParcelOwners", show_owners); } void commit_radio_group_land(LLUICtrl* ctrl) { - LLRadioGroup* group = (LLRadioGroup*)ctrl; - std::string selected = group->getValue().asString(); - if (selected == "radio select land") - { - LLFloaterTools::setEditTool( LLToolSelectLand::getInstance() ); - } - else - { - LLFloaterTools::setEditTool( LLToolBrushLand::getInstance() ); - S32 dozer_mode = gSavedSettings.getS32("RadioLandBrushAction"); - if (selected == "radio flatten") - dozer_mode = 0; - else if (selected == "radio raise") - dozer_mode = 1; - else if (selected == "radio lower") - dozer_mode = 2; - else if (selected == "radio smooth") - dozer_mode = 3; - else if (selected == "radio noise") - dozer_mode = 4; - else if (selected == "radio revert") - dozer_mode = 5; - gSavedSettings.setS32("RadioLandBrushAction", dozer_mode); - } + LLRadioGroup* group = (LLRadioGroup*)ctrl; + std::string selected = group->getValue().asString(); + if (selected == "radio select land") + { + LLFloaterTools::setEditTool( LLToolSelectLand::getInstance() ); + } + else + { + LLFloaterTools::setEditTool( LLToolBrushLand::getInstance() ); + S32 dozer_mode = gSavedSettings.getS32("RadioLandBrushAction"); + if (selected == "radio flatten") + dozer_mode = 0; + else if (selected == "radio raise") + dozer_mode = 1; + else if (selected == "radio lower") + dozer_mode = 2; + else if (selected == "radio smooth") + dozer_mode = 3; + else if (selected == "radio noise") + dozer_mode = 4; + else if (selected == "radio revert") + dozer_mode = 5; + gSavedSettings.setS32("RadioLandBrushAction", dozer_mode); + } } void commit_select_component(void *data) { - LLFloaterTools* floaterp = (LLFloaterTools*)data; - - //forfeit focus - if (gFocusMgr.childHasKeyboardFocus(floaterp)) - { - gFocusMgr.setKeyboardFocus(NULL); - } - - BOOL select_individuals = floaterp->mCheckSelectIndividual->get(); - gSavedSettings.setBOOL("EditLinkedParts", select_individuals); - floaterp->dirty(); - - if (select_individuals) - { - LLSelectMgr::getInstance()->demoteSelectionToIndividuals(); - } - else - { - LLSelectMgr::getInstance()->promoteSelectionToRoot(); - } + LLFloaterTools* floaterp = (LLFloaterTools*)data; + + //forfeit focus + if (gFocusMgr.childHasKeyboardFocus(floaterp)) + { + gFocusMgr.setKeyboardFocus(NULL); + } + + BOOL select_individuals = floaterp->mCheckSelectIndividual->get(); + gSavedSettings.setBOOL("EditLinkedParts", select_individuals); + floaterp->dirty(); + + if (select_individuals) + { + LLSelectMgr::getInstance()->demoteSelectionToIndividuals(); + } + else + { + LLSelectMgr::getInstance()->promoteSelectionToRoot(); + } } -// static +// static void LLFloaterTools::setObjectType( LLPCode pcode ) { - LLToolPlacer::setObjectType( pcode ); - gSavedSettings.setBOOL("CreateToolCopySelection", FALSE); - gFocusMgr.setMouseCapture(NULL); + LLToolPlacer::setObjectType( pcode ); + gSavedSettings.setBOOL("CreateToolCopySelection", FALSE); + gFocusMgr.setMouseCapture(NULL); } void commit_grid_mode(LLUICtrl *ctrl) { - LLComboBox* combo = (LLComboBox*)ctrl; + LLComboBox* combo = (LLComboBox*)ctrl; - LLSelectMgr::getInstance()->setGridMode((EGridMode)combo->getCurrentIndex()); + LLSelectMgr::getInstance()->setGridMode((EGridMode)combo->getCurrentIndex()); } // static void LLFloaterTools::setGridMode(S32 mode) { - LLFloaterTools* tools_floater = LLFloaterReg::getTypedInstance<LLFloaterTools>("build"); - if (!tools_floater || !tools_floater->mComboGridMode) - { - return; - } + LLFloaterTools* tools_floater = LLFloaterReg::getTypedInstance<LLFloaterTools>("build"); + if (!tools_floater || !tools_floater->mComboGridMode) + { + return; + } - tools_floater->mComboGridMode->setCurrentByIndex(mode); + tools_floater->mComboGridMode->setCurrentByIndex(mode); } void LLFloaterTools::onClickGridOptions() { - LLFloater* floaterp = LLFloaterReg::showInstance("build_options"); - // position floater next to build tools, not over - floaterp->setShape(gFloaterView->findNeighboringPosition(this, floaterp), true); + LLFloater* floaterp = LLFloaterReg::showInstance("build_options"); + // position floater next to build tools, not over + floaterp->setShape(gFloaterView->findNeighboringPosition(this, floaterp), true); } // static void LLFloaterTools::setEditTool(void* tool_pointer) { - LLTool *tool = (LLTool *)tool_pointer; - LLToolMgr::getInstance()->getCurrentToolset()->selectTool( tool ); + LLTool *tool = (LLTool *)tool_pointer; + LLToolMgr::getInstance()->getCurrentToolset()->selectTool( tool ); } void LLFloaterTools::setTool(const LLSD& user_data) { - std::string control_name = user_data.asString(); - if(control_name == "Focus") - LLToolMgr::getInstance()->getCurrentToolset()->selectTool((LLTool *) LLToolCamera::getInstance() ); - else if (control_name == "Move" ) - LLToolMgr::getInstance()->getCurrentToolset()->selectTool( (LLTool *)LLToolGrab::getInstance() ); - else if (control_name == "Edit" ) - LLToolMgr::getInstance()->getCurrentToolset()->selectTool( (LLTool *) LLToolCompTranslate::getInstance()); - else if (control_name == "Create" ) - LLToolMgr::getInstance()->getCurrentToolset()->selectTool( (LLTool *) LLToolCompCreate::getInstance()); - else if (control_name == "Land" ) - LLToolMgr::getInstance()->getCurrentToolset()->selectTool( (LLTool *) LLToolSelectLand::getInstance()); - else - LL_WARNS()<<" no parameter name "<<control_name<<" found!! No Tool selected!!"<< LL_ENDL; + std::string control_name = user_data.asString(); + if(control_name == "Focus") + LLToolMgr::getInstance()->getCurrentToolset()->selectTool((LLTool *) LLToolCamera::getInstance() ); + else if (control_name == "Move" ) + LLToolMgr::getInstance()->getCurrentToolset()->selectTool( (LLTool *)LLToolGrab::getInstance() ); + else if (control_name == "Edit" ) + LLToolMgr::getInstance()->getCurrentToolset()->selectTool( (LLTool *) LLToolCompTranslate::getInstance()); + else if (control_name == "Create" ) + LLToolMgr::getInstance()->getCurrentToolset()->selectTool( (LLTool *) LLToolCompCreate::getInstance()); + else if (control_name == "Land" ) + LLToolMgr::getInstance()->getCurrentToolset()->selectTool( (LLTool *) LLToolSelectLand::getInstance()); + else + LL_WARNS()<<" no parameter name "<<control_name<<" found!! No Tool selected!!"<< LL_ENDL; } void LLFloaterTools::onFocusReceived() { - LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset); - LLFloater::onFocusReceived(); + LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset); + LLFloater::onFocusReceived(); } void LLFloaterTools::updateLandImpacts() { - LLParcel *parcel = mParcelSelection->getParcel(); - if (!parcel) - { - return; - } - - // Update land impacts info in the weights floater - LLFloaterObjectWeights* object_weights_floater = LLFloaterReg::findTypedInstance<LLFloaterObjectWeights>("object_weights"); - if(object_weights_floater) - { - object_weights_floater->updateLandImpacts(parcel); - } + LLParcel *parcel = mParcelSelection->getParcel(); + if (!parcel) + { + return; + } + + // Update land impacts info in the weights floater + LLFloaterObjectWeights* object_weights_floater = LLFloaterReg::findTypedInstance<LLFloaterObjectWeights>("object_weights"); + if(object_weights_floater) + { + object_weights_floater->updateLandImpacts(parcel); + } } |