diff options
Diffstat (limited to 'indra/newview')
| -rw-r--r-- | indra/newview/llenvironment.cpp | 1 | ||||
| -rw-r--r-- | indra/newview/llfloaterregioninfo.cpp | 44 | ||||
| -rw-r--r-- | indra/newview/llfloaterregioninfo.h | 3 | ||||
| -rw-r--r-- | indra/newview/llpanelenvironment.cpp | 10 | 
4 files changed, 43 insertions, 15 deletions
| diff --git a/indra/newview/llenvironment.cpp b/indra/newview/llenvironment.cpp index 20021fb075..d8095ad2ce 100644 --- a/indra/newview/llenvironment.cpp +++ b/indra/newview/llenvironment.cpp @@ -364,6 +364,7 @@ void LLEnvironment::initSingleton()      //TODO: This frequently results in one more request than we need.  It isn't breaking, but should be nicer.      // We need to know new env version to fix this, without it we can only do full re-request +    // Happens: on updates, on opening LLFloaterRegionInfo, on region crossing if info floater is open      LLRegionInfoModel::instance().setUpdateCallback([this]() { requestRegion(); });      gAgent.addRegionChangedCallback([this]() { onRegionChange(); }); diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index d7d114ca41..fcaa7d2bf9 100644 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -226,7 +226,8 @@ LLUUID LLFloaterRegionInfo::sRequestInvoice;  LLFloaterRegionInfo::LLFloaterRegionInfo(const LLSD& seed)  	: LLFloater(seed), -    mEnvironmentPanel(NULL) +    mEnvironmentPanel(NULL), +    mRegionChangedCallback()  {}  BOOL LLFloaterRegionInfo::postBuild() @@ -285,13 +286,18 @@ BOOL LLFloaterRegionInfo::postBuild()  		&processEstateOwnerRequest);  	// Request region info when agent region changes. -	gAgent.addRegionChangedCallback(boost::bind(&LLFloaterRegionInfo::requestRegionInfo, this)); +	mRegionChangedCallback = gAgent.addRegionChangedCallback(boost::bind(&LLFloaterRegionInfo::onRegionChanged, this));  	return TRUE;  }  LLFloaterRegionInfo::~LLFloaterRegionInfo() -{} +{ +    if (mRegionChangedCallback.connected()) +    { +        mRegionChangedCallback.disconnect(); +    } +}  void LLFloaterRegionInfo::onOpen(const LLSD& key)  { @@ -304,15 +310,24 @@ void LLFloaterRegionInfo::onOpen(const LLSD& key)  	requestMeshRezInfo();  } -// static -void LLFloaterRegionInfo::requestRegionInfo() +void LLFloaterRegionInfo::onRegionChanged()  { -	LLTabContainer* tab = getChild<LLTabContainer>("region_panels"); +    if (getVisible()) //otherwise onOpen will do request +    { +        requestRegionInfo(); +    } +} -	tab->getChild<LLPanel>("General")->setCtrlsEnabled(FALSE); -	tab->getChild<LLPanel>("Debug")->setCtrlsEnabled(FALSE); -	tab->getChild<LLPanel>("Terrain")->setCtrlsEnabled(FALSE); -	tab->getChild<LLPanel>("Estate")->setCtrlsEnabled(FALSE); +void LLFloaterRegionInfo::requestRegionInfo() +{ +	LLTabContainer* tab = findChild<LLTabContainer>("region_panels"); +	if (tab) +	{ +		tab->getChild<LLPanel>("General")->setCtrlsEnabled(FALSE); +		tab->getChild<LLPanel>("Debug")->setCtrlsEnabled(FALSE); +		tab->getChild<LLPanel>("Terrain")->setCtrlsEnabled(FALSE); +		tab->getChild<LLPanel>("Estate")->setCtrlsEnabled(FALSE); +	}  	// Must allow anyone to request the RegionInfo data  	// so non-owners/non-gods can see the values.  @@ -483,9 +498,12 @@ void LLFloaterRegionInfo::processRegionInfo(LLMessageSystem* msg)  	panel->setCtrlsEnabled(allow_modify); -	// Note: region info also causes LLRegionInfoModel::instance().update(msg); -> requestRegion(); -> changed message -	// we need to know env version here and in update(msg) to know when to request and when not to, when to filter 'changed' -	floater->refreshFromRegion( gAgent.getRegion() ); +	if (floater->getVisible()) +	{ +		// Note: region info also causes LLRegionInfoModel::instance().update(msg); -> requestRegion(); -> changed message +		// we need to know env version here and in update(msg) to know when to request and when not to, when to filter 'changed' +		floater->refreshFromRegion(gAgent.getRegion()); +	} // else will rerequest on onOpen either way  }  // static diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h index 6d64ae1d60..0566c4b2ce 100644 --- a/indra/newview/llfloaterregioninfo.h +++ b/indra/newview/llfloaterregioninfo.h @@ -96,6 +96,7 @@ public:  	// from LLPanel  	virtual void refresh(); +	void onRegionChanged();  	void requestRegionInfo();  	void requestMeshRezInfo();  	void enableTopButtons(); @@ -120,6 +121,8 @@ protected:      LLPanelRegionEnvironment *mEnvironmentPanel;  	//static S32 sRequestSerial;	// serial # of last EstateOwnerRequest  	static LLUUID sRequestInvoice; +private: +    boost::signals2::connection mRegionChangedCallback;  }; diff --git a/indra/newview/llpanelenvironment.cpp b/indra/newview/llpanelenvironment.cpp index 04f281a40c..7abb05b6fb 100644 --- a/indra/newview/llpanelenvironment.cpp +++ b/indra/newview/llpanelenvironment.cpp @@ -255,13 +255,19 @@ void LLPanelEnvironmentInfo::refresh()      LLEnvironment::altitude_list_t altitudes = LLEnvironment::instance().getRegionAltitudes();      if (altitudes.size() > 0)      { +        LLMultiSliderCtrl *sld = getChild<LLMultiSliderCtrl>(SLD_ALTITUDES); +        sld->clear(); +          for (S32 idx = 0; idx < ALTITUDE_SLIDER_COUNT; ++idx)          { -            LLMultiSliderCtrl *sld = getChild<LLMultiSliderCtrl>(SLD_ALTITUDES); -            sld->setSliderValue(alt_sliders[idx], altitudes[idx+1], FALSE); +            sld->addSlider(altitudes[idx + 1], alt_sliders[idx]);              updateAltLabel(alt_labels[idx], idx + 2, altitudes[idx+1]);              mAltitudes[alt_sliders[idx]] = AltitudeData(idx+1, idx, altitudes[idx+1]);          } +        if (sld->getCurNumSliders() != ALTITUDE_SLIDER_COUNT) +        { +            LL_WARNS("ENVPANEL") << "Failed to add altitude sliders!" << LL_ENDL; +        }          readjustAltLabels();      } | 
