Skip to content

Commit

Permalink
Fix further recursive findChild stalls from environment panel
Browse files Browse the repository at this point in the history
  • Loading branch information
RyeMutt committed Jul 25, 2024
1 parent a067f93 commit 66d2c84
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 19 deletions.
38 changes: 21 additions & 17 deletions indra/newview/llpanelenvironment.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,10 @@ bool LLPanelEnvironmentInfo::postBuild()

for (U32 idx = 0; idx < ALTITUDE_PREFIXERS_COUNT; idx++)
{
mAltitudePrefixers[idx] = findChild<LLSettingsDropTarget>("sdt_" + alt_prefixes[idx]);
mAltitudeDropTarget[idx] = findChild<LLSettingsDropTarget>("sdt_" + alt_prefixes[idx]);
mAltitudeLabels[idx] = findChild<LLTextBox>("txt_" + alt_prefixes[idx]);
mAltitudeEditor[idx] = findChild<LLLineEditor>("edt_invname_" + alt_prefixes[idx]);
mAltitudePanels[idx] = findChild<LLView>("pnl_" + alt_prefixes[idx]);
}

for (U32 idx = 0; idx < ALTITUDE_SLIDER_COUNT; idx++)
Expand All @@ -224,11 +227,12 @@ bool LLPanelEnvironmentInfo::postBuild()
{
drop_target->setPanel(this, alt_sliders[idx]);
}

// set initial values to prevent [ALTITUDE] from displaying
updateAltLabel(alt_prefixes[idx], idx + 2, (F32)(idx * 1000));
updateAltLabel(idx, idx + 2, (F32)(idx * 1000));
}
getChild<LLSettingsDropTarget>("sdt_" + alt_prefixes[3])->setPanel(this, alt_prefixes[3]);
getChild<LLSettingsDropTarget>("sdt_" + alt_prefixes[4])->setPanel(this, alt_prefixes[4]);
mAltitudeDropTarget[3]->setPanel(this, alt_prefixes[3]);
mAltitudeDropTarget[4]->setPanel(this, alt_prefixes[4]);

return true;
}
Expand Down Expand Up @@ -344,7 +348,7 @@ void LLPanelEnvironmentInfo::refresh()
// Something is very very wrong
LL_WARNS_ONCE("ENVPANEL") << "Failed to set up altitudes for parcel id " << getParcelId() << LL_ENDL;
}
updateAltLabel(alt_prefixes[idx], idx + 2, altitude);
updateAltLabel(idx, idx + 2, altitude);
mAltitudes[alt_sliders[idx]] = AltitudeData(idx + 2, idx, altitude);
}
if (mMultiSliderAltitudes->getCurNumSliders() != ALTITUDE_SLIDER_COUNT)
Expand All @@ -355,8 +359,8 @@ void LLPanelEnvironmentInfo::refresh()
mMultiSliderAltitudes->resetCurSlider();
}

updateAltLabel(alt_prefixes[3], 1, 0); // ground
updateAltLabel(alt_prefixes[4], 0, 0); // water
updateAltLabel(3, 1, 0); // ground
updateAltLabel(4, 0, 0); // water

}

Expand Down Expand Up @@ -552,9 +556,9 @@ bool LLPanelEnvironmentInfo::setControlsEnabled(bool enabled)

for (U32 idx = 0; idx < ALTITUDE_PREFIXERS_COUNT; idx++)
{
if (mAltitudePrefixers[idx])
if (mAltitudeDropTarget[idx])
{
mAltitudePrefixers[idx]->setDndEnabled(can_enable);
mAltitudeDropTarget[idx]->setDndEnabled(can_enable);
}
}

Expand All @@ -571,7 +575,7 @@ void LLPanelEnvironmentInfo::clearDirtyFlag(U32 flag)
mDirtyFlag &= ~flag;
}

void LLPanelEnvironmentInfo::updateAltLabel(const std::string &alt_prefix, U32 sky_index, F32 alt_value)
void LLPanelEnvironmentInfo::updateAltLabel(U32 alt_index, U32 sky_index, F32 alt_value)
{
LLRect sld_rect = mMultiSliderAltitudes->getRect();
S32 sld_range = sld_rect.getHeight();
Expand All @@ -580,9 +584,9 @@ void LLPanelEnvironmentInfo::updateAltLabel(const std::string &alt_prefix, U32 s
S32 pos = (S32)((sld_range - sld_offset) * ((alt_value - 100) / (4000 - 100)));

// get related views
LLTextBox* text = findChild<LLTextBox>("txt_" + alt_prefix);
LLLineEditor *field = findChild<LLLineEditor>("edt_invname_" + alt_prefix);
LLView *alt_panel = findChild<LLView>("pnl_" + alt_prefix);
LLTextBox* text = mAltitudeLabels[alt_index];
LLLineEditor* field = mAltitudeEditor[alt_index];
LLView* alt_panel = mAltitudePanels[alt_index];

if (text && (sky_index > 1))
{
Expand Down Expand Up @@ -628,7 +632,7 @@ void LLPanelEnvironmentInfo::readjustAltLabels()
// Find the middle one
for (U32 i = 0; i < ALTITUDE_SLIDER_COUNT; i++)
{
LLView* cmp_view = findChild<LLView>(alt_panels[i], true);
LLView* cmp_view = mAltitudePanels[i];
if (!cmp_view) return;
LLRect cmp_rect = cmp_view->getRect();
S32 pos = 0;
Expand All @@ -639,7 +643,7 @@ void LLPanelEnvironmentInfo::readjustAltLabels()
{
if (i != j)
{
LLView* intr_view = findChild<LLView>(alt_panels[j], true);
LLView* intr_view = mAltitudePanels[j];
if (!intr_view) return;
LLRect intr_rect = intr_view->getRect();
if (cmp_rect.mBottom >= intr_rect.mBottom)
Expand Down Expand Up @@ -687,7 +691,7 @@ void LLPanelEnvironmentInfo::readjustAltLabels()
{
if (i != midle_ind)
{
LLView* trn_view = findChild<LLView>(alt_panels[i], true);
LLView* trn_view = mAltitudePanels[i];
LLRect trn_rect = trn_view->getRect();

if (trn_rect.mBottom <= midle_rect.mTop && trn_rect.mBottom >= midle_rect.mBottom)
Expand Down Expand Up @@ -807,7 +811,7 @@ void LLPanelEnvironmentInfo::onAltSliderCallback(LLUICtrl *cntrl, const LLSD &da
}
iter->second.mTrackIndex = new_index;

updateAltLabel(alt_prefixes[iter->second.mLabelIndex], iter->second.mTrackIndex, iter->second.mAltitude);
updateAltLabel(iter->second.mLabelIndex, iter->second.mTrackIndex, iter->second.mAltitude);
iter++;
}

Expand Down
8 changes: 6 additions & 2 deletions indra/newview/llpanelenvironment.h
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ class LLPanelEnvironmentInfo : public LLPanel
bool getIsDirty() const { return (mDirtyFlag != 0); }
bool getIsDirtyFlag(U32 flag) const { return ((mDirtyFlag & flag) != 0); }
U32 getDirtyFlag() const { return mDirtyFlag; }
void updateAltLabel(const std::string &alt_prefix, U32 sky_index, F32 alt_value);
void updateAltLabel(U32 alt_index, U32 sky_index, F32 alt_value);
void readjustAltLabels();

void onSldDayLengthChanged(F32 value);
Expand Down Expand Up @@ -198,7 +198,11 @@ class LLPanelEnvironmentInfo : public LLPanel
LLIconCtrl* mIconWater = nullptr;

std::array<LLUICtrl*, ALTITUDE_MARKERS_COUNT> mAltitudeMarkers;
std::array<LLSettingsDropTarget*, ALTITUDE_PREFIXERS_COUNT> mAltitudePrefixers;
std::array<LLSettingsDropTarget*, ALTITUDE_PREFIXERS_COUNT> mAltitudeDropTarget;

std::array<LLTextBox*, ALTITUDE_PREFIXERS_COUNT> mAltitudeLabels;
std::array<LLLineEditor*, ALTITUDE_PREFIXERS_COUNT> mAltitudeEditor;
std::array<LLView*, ALTITUDE_PREFIXERS_COUNT> mAltitudePanels;

protected:
typedef boost::signals2::connection connection_t;
Expand Down

0 comments on commit 66d2c84

Please sign in to comment.