From 7dd3f5db0b7da458a49df8ae2f40138a83021dec Mon Sep 17 00:00:00 2001 From: Rye Mutt Date: Tue, 23 Jul 2024 21:41:58 -0400 Subject: Fix getChild calls during draw in LLFloaterWorldMap --- indra/newview/llfloaterworldmap.cpp | 122 +++++++++++++++++++++--------------- indra/newview/llfloaterworldmap.h | 30 ++++++++- 2 files changed, 102 insertions(+), 50 deletions(-) diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp index 2a72a361d6..d459716fc4 100755 --- a/indra/newview/llfloaterworldmap.cpp +++ b/indra/newview/llfloaterworldmap.cpp @@ -39,6 +39,8 @@ #include "llbutton.h" #include "llcallingcard.h" #include "llcombobox.h" +#include "llcheckboxctrl.h" +#include "llsliderctrl.h" #include "llviewercontrol.h" #include "llcommandhandler.h" #include "lldraghandle.h" @@ -317,15 +319,36 @@ bool LLFloaterWorldMap::postBuild() mMapView = dynamic_cast(getChild("objects_mapview")); mMapView->setPan(0, 0, true); + mTeleportButton = getChild("Teleport"); + mShowDestinationButton = getChild("Show Destination"); + mCopySlurlButton = getChild("copy_slurl"); + mGoHomeButton = getChild("Go Home"); + + mPeopleCheck = getChild("people_chk"); + mInfohubCheck = getChild("infohub_chk"); + mTelehubCheck = getChild("telehub_chk"); + mLandSaleCheck = getChild("land_for_sale_chk"); + mEventsCheck = getChild("event_chk"); + mEventsMatureCheck = getChild("events_mature_chk"); + mEventsAdultCheck = getChild("events_adult_chk"); + + mAvatarIcon = getChild("avatar_icon"); + mLandmarkIcon = getChild("landmark_icon"); + mLocationIcon = getChild("location_icon"); + + mTeleportCoordSpinX = getChild("teleport_coordinate_x"); + mTeleportCoordSpinY = getChild("teleport_coordinate_y"); + mTeleportCoordSpinZ = getChild("teleport_coordinate_z"); + LLComboBox *avatar_combo = getChild("friend combo"); avatar_combo->selectFirstItem(); avatar_combo->setPrearrangeCallback( boost::bind(&LLFloaterWorldMap::onAvatarComboPrearrange, this) ); avatar_combo->setTextChangedCallback( boost::bind(&LLFloaterWorldMap::onComboTextEntry, this) ); mListFriendCombo = dynamic_cast(avatar_combo); - LLSearchEditor *location_editor = getChild("location"); - location_editor->setFocusChangedCallback(boost::bind(&LLFloaterWorldMap::onLocationFocusChanged, this, _1)); - location_editor->setTextChangedCallback( boost::bind(&LLFloaterWorldMap::onSearchTextEntry, this)); + mLocationEditor = getChild("location"); + mLocationEditor->setFocusChangedCallback(boost::bind(&LLFloaterWorldMap::onLocationFocusChanged, this, _1)); + mLocationEditor->setTextChangedCallback( boost::bind(&LLFloaterWorldMap::onSearchTextEntry, this)); getChild("search_results")->setDoubleClickCallback( boost::bind(&LLFloaterWorldMap::onClickTeleportBtn, this)); mListSearchResults = childGetListInterface("search_results"); @@ -336,8 +359,9 @@ bool LLFloaterWorldMap::postBuild() landmark_combo->setTextChangedCallback( boost::bind(&LLFloaterWorldMap::onComboTextEntry, this) ); mListLandmarkCombo = dynamic_cast(landmark_combo); + mZoomSlider = getChild("zoom slider"); F32 slider_zoom = mMapView->getZoom(); - getChild("zoom slider")->setValue(slider_zoom); + mZoomSlider->setValue(slider_zoom); getChild("expand_btn_panel")->setMouseDownCallback(boost::bind(&LLFloaterWorldMap::onExpandCollapseBtn, this)); @@ -414,7 +438,7 @@ void LLFloaterWorldMap::onOpen(const LLSD& key) const LLUUID landmark_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK); LLInventoryModelBackgroundFetch::instance().start(landmark_folder_id); - getChild("location")->setFocus( true); + mLocationEditor->setFocus( true); gFocusMgr.triggerFocusFlash(); buildAvatarIDList(); @@ -452,9 +476,9 @@ bool LLFloaterWorldMap::handleScrollWheel(S32 x, S32 y, S32 clicks) S32 map_y = y - mMapView->getRect().mBottom; if (mMapView->pointInView(map_x, map_y)) { - F32 old_slider_zoom = (F32) getChild("zoom slider")->getValue().asReal(); + F32 old_slider_zoom = (F32) mZoomSlider->getValue().asReal(); F32 slider_zoom = old_slider_zoom + ((F32) clicks * -0.3333f); - getChild("zoom slider")->setValue(LLSD(slider_zoom)); + mZoomSlider->setValue(LLSD(slider_zoom)); mMapView->zoomWithPivot(slider_zoom, map_x, map_y); return true; } @@ -483,32 +507,32 @@ void LLFloaterWorldMap::draw() LLViewerRegion* regionp = gAgent.getRegion(); bool agent_on_prelude = (regionp && regionp->isPrelude()); bool enable_go_home = gAgent.isGodlike() || !agent_on_prelude; - getChildView("Go Home")->setEnabled(enable_go_home); + mGoHomeButton->setEnabled(enable_go_home); updateLocation(); LLTracker::ETrackingStatus tracking_status = LLTracker::getTrackingStatus(); if (LLTracker::TRACKING_AVATAR == tracking_status) { - getChild("avatar_icon")->setColor( map_track_color); + mAvatarIcon->setColor( map_track_color); } else { - getChild("avatar_icon")->setColor( map_track_disabled_color); + mAvatarIcon->setColor( map_track_disabled_color); } if (LLTracker::TRACKING_LANDMARK == tracking_status) { - getChild("landmark_icon")->setColor( map_track_color); + mLandmarkIcon->setColor( map_track_color); } else { - getChild("landmark_icon")->setColor( map_track_disabled_color); + mLandmarkIcon->setColor( map_track_disabled_color); } if (LLTracker::TRACKING_LOCATION == tracking_status) { - getChild("location_icon")->setColor( map_track_color); + mLocationIcon->setColor( map_track_color); } else { @@ -518,11 +542,11 @@ void LLFloaterWorldMap::draw() double value = fmod(seconds, 2); value = 0.5 + 0.5*cos(value * F_PI); LLColor4 loading_color(0.0, F32(value/2), F32(value), 1.0); - getChild("location_icon")->setColor( loading_color); + mLocationIcon->setColor( loading_color); } else { - getChild("location_icon")->setColor( map_track_disabled_color); + mLocationIcon->setColor( map_track_disabled_color); } } @@ -532,27 +556,27 @@ void LLFloaterWorldMap::draw() centerOnTarget(true); } - getChildView("Teleport")->setEnabled((bool)tracking_status); + mTeleportButton->setEnabled((bool)tracking_status); // getChildView("Clear")->setEnabled((bool)tracking_status); - getChildView("Show Destination")->setEnabled((bool)tracking_status || LLWorldMap::getInstance()->isTracking()); - getChildView("copy_slurl")->setEnabled((mSLURL.isValid()) ); + mShowDestinationButton->setEnabled((bool)tracking_status || LLWorldMap::getInstance()->isTracking()); + mCopySlurlButton->setEnabled((mSLURL.isValid()) ); setMouseOpaque(true); getDragHandle()->setMouseOpaque(true); - mMapView->zoom((F32)getChild("zoom slider")->getValue().asReal()); + mMapView->zoom((F32)mZoomSlider->getValue().asReal()); // Enable/disable checkboxes depending on the zoom level // If above threshold level (i.e. low res) -> Disable all checkboxes // If under threshold level (i.e. high res) -> Enable all checkboxes bool enable = mMapView->showRegionInfo(); - getChildView("people_chk")->setEnabled(enable); - getChildView("infohub_chk")->setEnabled(enable); - getChildView("telehub_chk")->setEnabled(enable); - getChildView("land_for_sale_chk")->setEnabled(enable); - getChildView("event_chk")->setEnabled(enable); - getChildView("events_mature_chk")->setEnabled(enable); - getChildView("events_adult_chk")->setEnabled(enable); + mPeopleCheck->setEnabled(enable); + mInfohubCheck->setEnabled(enable); + mTelehubCheck->setEnabled(enable); + mLandSaleCheck->setEnabled(enable); + mEventsCheck->setEnabled(enable); + mEventsMatureCheck->setEnabled(enable); + mEventsAdultCheck->setEnabled(enable); LLFloater::draw(); } @@ -576,7 +600,7 @@ void LLFloaterWorldMap::trackAvatar( const LLUUID& avatar_id, const std::string& // convenience. if(gAgent.isGodlike()) { - getChild("teleport_coordinate_z")->setValue(LLSD(200.f)); + mTeleportCoordSpinZ->setValue(LLSD(200.f)); } // Don't re-request info if we already have it or we won't have it in time to teleport if (mTrackedStatus != LLTracker::TRACKING_AVATAR || avatar_id != mTrackedAvatarID) @@ -711,9 +735,9 @@ void LLFloaterWorldMap::trackLocation(const LLVector3d& pos_global) // enable/disable teleport destination coordinates void LLFloaterWorldMap::enableTeleportCoordsDisplay( bool enabled ) { - childSetEnabled("teleport_coordinate_x", enabled ); - childSetEnabled("teleport_coordinate_y", enabled ); - childSetEnabled("teleport_coordinate_z", enabled ); + mTeleportCoordSpinX->setEnabled(enabled); + mTeleportCoordSpinY->setEnabled(enabled); + mTeleportCoordSpinZ->setEnabled(enabled); } // update display of teleport destination coordinates - pos is in global coordinates @@ -728,9 +752,9 @@ void LLFloaterWorldMap::updateTeleportCoordsDisplay( const LLVector3d& pos ) F32 region_local_z = (F32)llclamp( pos.mdV[VZ], 0.0, (F64)REGION_HEIGHT_METERS ); // write in the values - childSetValue("teleport_coordinate_x", region_local_x ); - childSetValue("teleport_coordinate_y", region_local_y ); - childSetValue("teleport_coordinate_z", region_local_z ); + mTeleportCoordSpinX->setValue(region_local_x); + mTeleportCoordSpinY->setValue(region_local_y); + mTeleportCoordSpinZ->setValue(region_local_z); } void LLFloaterWorldMap::updateLocation() @@ -757,7 +781,7 @@ void LLFloaterWorldMap::updateLocation() mSetToUserPosition = false; // Fill out the location field - getChild("location")->setValue(agent_sim_name); + mLocationEditor->setValue(agent_sim_name); // update the coordinate display with location of avatar in region updateTeleportCoordsDisplay( agentPos ); @@ -790,7 +814,7 @@ void LLFloaterWorldMap::updateLocation() } } - getChild("location")->setValue(sim_name); + mLocationEditor->setValue(sim_name); // refresh coordinate display to reflect where user clicked. LLVector3d coord_pos = LLTracker::getTrackedPositionGlobal(); @@ -825,17 +849,17 @@ void LLFloaterWorldMap::trackURL(const std::string& region_name, S32 x_coord, S3 else { // fill in UI based on URL - gFloaterWorldMap->getChild("location")->setValue(region_name); + mLocationEditor->setValue(region_name); // Save local coords to highlight position after region global // position is returned. - gFloaterWorldMap->mCompletingRegionPos.set( + mCompletingRegionPos.set( (F32)x_coord, (F32)y_coord, (F32)z_coord); // pass sim name to combo box - gFloaterWorldMap->mCompletingRegionName = region_name; + mCompletingRegionName = region_name; LLWorldMapMessage::getInstance()->sendNamedRegionRequest(region_name); - LLStringUtil::toLower(gFloaterWorldMap->mCompletingRegionName); + LLStringUtil::toLower(mCompletingRegionName); LLWorldMap::getInstance()->setTrackingCommit(); } } @@ -1067,7 +1091,7 @@ void LLFloaterWorldMap::adjustZoomSliderBounds() F32 min_power = log(pixels_per_region/256.f)/log(2.f); - getChild("zoom slider")->setMinValue(min_power); + mZoomSlider->setMinValue(min_power); } @@ -1229,7 +1253,7 @@ void LLFloaterWorldMap::onLocationFocusChanged( LLFocusableElement* focus ) void LLFloaterWorldMap::updateSearchEnabled() { if (childHasKeyboardFocus("location") && - getChild("location")->getValue().asString().length() > 0) + mLocationEditor->getValue().asString().length() > 0) { setDefaultBtn("DoSearch"); } @@ -1250,14 +1274,14 @@ void LLFloaterWorldMap::onLocationCommit() mCompletingRegionName = ""; mLastRegionName = ""; - std::string str = getChild("location")->getValue().asString(); + std::string str = mLocationEditor->getValue().asString(); // Trim any leading and trailing spaces in the search target std::string saved_str = str; LLStringUtil::trim( str ); if ( str != saved_str ) { // Set the value in the UI if any spaces were removed - getChild("location")->setValue(str); + mLocationEditor->setValue(str); } // Don't try completing empty name (STORM-1427). @@ -1287,11 +1311,11 @@ void LLFloaterWorldMap::onCoordinatesCommit() return; } - S32 x_coord = (S32)childGetValue("teleport_coordinate_x").asReal(); - S32 y_coord = (S32)childGetValue("teleport_coordinate_y").asReal(); - S32 z_coord = (S32)childGetValue("teleport_coordinate_z").asReal(); + S32 x_coord = (S32)mTeleportCoordSpinX->getValue().asReal(); + S32 y_coord = (S32)mTeleportCoordSpinY->getValue().asReal(); + S32 z_coord = (S32)mTeleportCoordSpinZ->getValue().asReal(); - const std::string region_name = childGetValue("location").asString(); + const std::string region_name = mLocationEditor->getValue().asString(); trackURL( region_name, x_coord, y_coord, z_coord ); } @@ -1420,7 +1444,7 @@ void LLFloaterWorldMap::teleport() && av_tracker.haveTrackingInfo() ) { pos_global = av_tracker.getGlobalPos(); - pos_global.mdV[VZ] = getChild("teleport_coordinate_z")->getValue(); + pos_global.mdV[VZ] = mTeleportCoordSpinZ->getValue(); } else if ( LLTracker::TRACKING_LANDMARK == tracking_status) { @@ -1654,7 +1678,7 @@ void LLFloaterWorldMap::onCommitSearchResult() pos_global.mdV[VY] += (F64)pos_local.mV[VY]; pos_global.mdV[VZ] = (F64)pos_local.mV[VZ]; - getChild("location")->setValue(sim_name); + mLocationEditor->setValue(sim_name); trackLocation(pos_global); setDefaultBtn("Teleport"); break; diff --git a/indra/newview/llfloaterworldmap.h b/indra/newview/llfloaterworldmap.h index 6765157e55..269b231e37 100644 --- a/indra/newview/llfloaterworldmap.h +++ b/indra/newview/llfloaterworldmap.h @@ -45,6 +45,11 @@ class LLItemInfo; class LLLineEditor; class LLTabContainer; class LLWorldMapView; +class LLButton; +class LLCheckBoxCtrl; +class LLSliderCtrl; +class LLSpinCtrl; +class LLSearchEditor; class LLFloaterWorldMap : public LLFloater { @@ -142,7 +147,6 @@ protected: void buildLandmarkIDLists(); void flyToLandmark(); void teleportToLandmark(); - void setLandmarkVisited(); void buildAvatarIDList(); void flyToAvatar(); @@ -195,6 +199,30 @@ private: LLCtrlListInterface * mListLandmarkCombo; LLCtrlListInterface * mListSearchResults; + LLButton* mTeleportButton = nullptr; + LLButton* mShowDestinationButton = nullptr; + LLButton* mCopySlurlButton = nullptr; + LLButton* mGoHomeButton = nullptr; + + LLCheckBoxCtrl* mPeopleCheck = nullptr; + LLCheckBoxCtrl* mInfohubCheck = nullptr; + LLCheckBoxCtrl* mTelehubCheck = nullptr; + LLCheckBoxCtrl* mLandSaleCheck = nullptr; + LLCheckBoxCtrl* mEventsCheck = nullptr; + LLCheckBoxCtrl* mEventsMatureCheck = nullptr; + LLCheckBoxCtrl* mEventsAdultCheck = nullptr; + + LLUICtrl* mAvatarIcon = nullptr; + LLUICtrl* mLandmarkIcon = nullptr; + LLUICtrl* mLocationIcon = nullptr; + + LLSearchEditor* mLocationEditor = nullptr; + LLUICtrl* mTeleportCoordSpinX = nullptr; + LLUICtrl* mTeleportCoordSpinY = nullptr; + LLUICtrl* mTeleportCoordSpinZ = nullptr; + + LLSliderCtrl* mZoomSlider = nullptr; + boost::signals2::connection mTeleportFinishConnection; }; -- cgit v1.2.3