Merged in nimetu/ryzomcore/misc-patches (pull request #44)

misc patches - cherry pick whats useful
This commit is contained in:
Cédric OCHS 2014-01-04 00:02:02 +01:00
commit 8f5495ec88
12 changed files with 62 additions and 66 deletions

View file

@ -74,7 +74,7 @@ namespace NLGUI
REFLECT_SINT32("rollover_container_alpha", getRolloverAlphaContainerAsSInt32, setRolloverAlphaContainer);
REFLECT_BOOL("use_global_alpha_settings", isUsingGlobalAlpha, setUseGlobalAlpha);
REFLECT_STRING("on_alpha_settings_changed", getAHOnAlphaSettingsChanged, setAHOnAlphaSettingsChanged);
REFLECT_STRING("on_alpha_settings_changed_aparams", getAHOnAlphaSettingsChangedParams, setAHOnAlphaSettingsChangedParams);
REFLECT_STRING("on_alpha_settings_changed_params", getAHOnAlphaSettingsChangedParams, setAHOnAlphaSettingsChangedParams);
REFLECT_EXPORT_END
virtual bool isMoving() const{ return false; }

View file

@ -408,7 +408,6 @@ namespace NLGUI
splitString(tooltipInfos, "@", tooltipInfosList);
texName = tooltipInfosList[0];
tooltip = tooltipInfosList[1];
nlinfo(tooltip.c_str());
setString(ucstring(tooltip));
CViewRenderer &rVR = *CViewRenderer::getInstance();
sint32 texId = rVR.getTextureIdFromName (texName);

View file

@ -1094,7 +1094,10 @@ namespace NLGUI
bool updateCoordCalled= false;
// updateCoords the window only if the master group is his parent and if need it
// do it until updateCoords() no more invalidate coordinates!!
while (pIG->getParent()==rMG.Group && (pIG->getInvalidCoords()>0))
// add deadlock counter to prevent endless loop (Issue #73: web browser long scroll lockup)
int deadlock = 10;
while (--deadlock > 0 && pIG->getParent()==rMG.Group && (pIG->getInvalidCoords()>0))
{
bRecomputeCtrlUnderPtr = true;
// Update as many pass wanted (3 time for complex resizing, 1 for scroll for example)

View file

@ -529,36 +529,18 @@ void CContinentManager::serialUserLandMarks(NLMISC::IStream &f)
f.serialCont(dummy);
}
}
// The number of stored landmarks is not checked at this time, but if we receive a
// lower value in the server database, we will cut down using checkNumberOfUserLandmarks()
}
}
//-----------------------------------------------
// checkNumberOfLandmarks
// updateUserLandMarks
//-----------------------------------------------
void CContinentManager::checkNumberOfUserLandmarks( uint maxNumber )
void CContinentManager::updateUserLandMarks()
{
for ( TContinents::iterator it=_Continents.begin(); it!=_Continents.end(); ++it )
{
CContinent *cont = (*it).second;
if ( cont->UserLandMarks.size() > maxNumber )
{
// Just cut down the last landmarks (in case of hacked file)
if ( cont == _Current )
{
CGroupMap *pMap = dynamic_cast<CGroupMap*>(CWidgetManager::getInstance()->getElementFromId("ui:interface:map:content:map_content:actual_map"));
if ( pMap )
pMap->removeExceedingUserLandMarks( maxNumber );
}
else
{
cont->UserLandMarks.resize( maxNumber );
}
}
}
pMap->updateUserLandMarks();
}

View file

@ -112,8 +112,8 @@ public:
// load / saves all user landMarks
void serialUserLandMarks(NLMISC::IStream &f);
// ensure the number of landmarks per continent does not exceed maxNumber
void checkNumberOfUserLandmarks( uint maxNumber );
// rebuild visible landmarks on current map
void updateUserLandMarks();
// load / saves all fow maps
void serialFOWMaps();

View file

@ -84,6 +84,8 @@ CDBGroupListSheet::CDBGroupListSheet(const TCtorParam &param)
_CacheAnimalStatus= -1;
_ListLeaveSpace= false;
_Draggable = false;
}
// ***************************************************************************
@ -227,6 +229,10 @@ bool CDBGroupListSheet::parse (xmlNodePtr cur, CInterfaceGroup *parentGroup)
_AnimalStatus= NLGUI::CDBManager::getInstance()->getDbProp((const char*)prop, false);
}
// issue #78: dragable is not parsed by _CtrlInfo, need to do it here.
prop = (char*) xmlGetProp( cur, (xmlChar*)"dragable" );
if (prop) _Draggable = convertBool(prop);
return true;
}
@ -864,6 +870,7 @@ void CDBGroupListSheet::setup()
ctrl->setToolTipParent(getToolTipParent());
ctrl->setToolTipParentPosRef(getToolTipParentPosRef());
ctrl->setToolTipPosRef(getToolTipPosRef());
ctrl->setDraggable(_Draggable);
// link on the element i+_StartDbIdx
if (_DisplayEmptySlot)
{

View file

@ -171,6 +171,7 @@ protected:
bool _Squarify : 1;
bool _CanDrop : 1;
bool _Draggable : 1;
// Children
bool _Setuped;

View file

@ -69,6 +69,7 @@ CDBGroupListSheetText::CDBGroupListSheetText(const TCtorParam &param)
_AnimalStatus= NULL;
_CacheAnimalStatus= -1;
_CanDrop= false;
_Draggable= false;
for(uint i=0;i<CHARACTERISTICS::NUM_CHARACTERISTICS;i++)
_LastPlayerCharac[i]= 0;
@ -214,6 +215,10 @@ bool CDBGroupListSheetText::parse (xmlNodePtr cur, CInterfaceGroup *parentGroup)
_AnimalStatus= NLGUI::CDBManager::getInstance()->getDbProp((const char*)prop, false);
}
// issue #78: dragable is not parsed by _CtrlInfo, need to do it here.
prop = (char*) xmlGetProp( cur, (xmlChar*)"dragable" );
if (prop) _Draggable = convertBool(prop);
return true;
}
@ -855,6 +860,7 @@ void CDBGroupListSheetText::setup()
ctrl->setParamsOnLeftClick(toString(i));
ctrl->setActionOnRightClick("lst_rclick");
ctrl->setParamsOnRightClick(toString(i));
ctrl->setDraggable(_Draggable);
// Add it to the list.
_List->addCtrl(ctrl);

View file

@ -224,6 +224,7 @@ protected:
bool _GrayTextWithCtrlState;
bool _CanDrop;
bool _Draggable;
// Common Info for ctrl and group
CCtrlSheetInfo _CtrlInfo;

View file

@ -2390,8 +2390,9 @@ void CGroupMap::createContinentLandMarks()
// Continent Landmarks
createLMWidgets(_CurContinent->ContLandMarks);
uint nbUserLandMarks = std::min( uint(_CurContinent->UserLandMarks.size()), CContinent::getMaxNbUserLandMarks());
// User Landmarks
for(k = 0; k < _CurContinent->UserLandMarks.size(); ++k)
for(k = 0; k < nbUserLandMarks; ++k)
{
NLMISC::CVector2f mapPos;
worldToMap(mapPos, _CurContinent->UserLandMarks[k].Pos);
@ -2429,7 +2430,8 @@ void CGroupMap::updateUserLandMarks()
removeLandMarks(_UserLM);
// Re create User Landmarks
for(k = 0; k < _CurContinent->UserLandMarks.size(); ++k)
uint nbUserLandMarks = std::min( uint(_CurContinent->UserLandMarks.size()), CContinent::getMaxNbUserLandMarks());
for(k = 0; k < nbUserLandMarks; ++k)
{
NLMISC::CVector2f mapPos;
worldToMap(mapPos, _CurContinent->UserLandMarks[k].Pos);
@ -2520,7 +2522,7 @@ CCtrlButton *CGroupMap::addUserLandMark(const NLMISC::CVector2f &pos, const ucst
void CGroupMap::removeUserLandMark(CCtrlButton *button)
{
if (_CurContinent == NULL) return;
nlassert(_CurContinent->UserLandMarks.size() == _UserLM.size());
nlassert(_CurContinent->UserLandMarks.size() >= _UserLM.size());
for(uint k = 0; k < _UserLM.size(); ++k)
{
if (_UserLM[k] == button)
@ -2528,6 +2530,13 @@ void CGroupMap::removeUserLandMark(CCtrlButton *button)
delCtrl(_UserLM[k]);
_UserLM.erase(_UserLM.begin() + k);
_CurContinent->UserLandMarks.erase(_CurContinent->UserLandMarks.begin() + k);
if (_CurContinent->UserLandMarks.size() > _UserLM.size())
{
// if user has over the limit landmarks, then rebuild visible markers
updateUserLandMarks();
}
return;
}
}
@ -2537,7 +2546,7 @@ void CGroupMap::removeUserLandMark(CCtrlButton *button)
void CGroupMap::updateUserLandMark(CCtrlButton *button, const ucstring &newTitle, const CUserLandMark::EUserLandMarkType lmType)
{
if (_CurContinent == NULL) return;
nlassert(_CurContinent->UserLandMarks.size() == _UserLM.size());
nlassert(_CurContinent->UserLandMarks.size() >= _UserLM.size());
for(uint k = 0; k < _UserLM.size(); ++k)
{
if (_UserLM[k] == button)
@ -2557,7 +2566,7 @@ CUserLandMark CGroupMap::getUserLandMark(CCtrlButton *button) const
{
CUserLandMark ulm;
if (_CurContinent == NULL) return ulm;
nlassert(_CurContinent->UserLandMarks.size() == _UserLM.size());
nlassert(_CurContinent->UserLandMarks.size() >= _UserLM.size());
for(uint k = 0; k < _UserLM.size(); ++k)
{
if (_UserLM[k] == button)
@ -2569,15 +2578,6 @@ CUserLandMark CGroupMap::getUserLandMark(CCtrlButton *button) const
return ulm;
}
//============================================================================================================
void CGroupMap::removeExceedingUserLandMarks(uint maxNumber)
{
while (_UserLM.size() > maxNumber)
{
removeUserLandMark(_UserLM.back());
}
}
//============================================================================================================
uint CGroupMap::getNumUserLandMarks() const

View file

@ -171,8 +171,6 @@ public:
void targetLandmark(CCtrlButton *lm);
// get the world position of a landmark or return vector Null if not found
void getLandmarkPosition(const CCtrlButton *lm, NLMISC::CVector2f &worldPos);
// remove some landmarks if there are too many
void removeExceedingUserLandMarks(uint maxNumber);
//Remove and re-create UserLandMarks
void updateUserLandMarks();

View file

@ -1810,8 +1810,7 @@ bool CInterfaceManager::loadConfig (const string &filename)
// ------------------------------------------------------------------------------------------------
void CInterfaceManager::CDBLandmarkObs::update(ICDBNode *node)
{
uint nbBonusLandmarks = ((CCDBNodeLeaf*)node)->getValue32();
ContinentMngr.checkNumberOfUserLandmarks( STANDARD_NUM_USER_LANDMARKS + nbBonusLandmarks );
ContinentMngr.updateUserLandMarks();
}