CHANGED: #1471 CInterfaceGroup::InvalidateTexts is now implemented with a visitor, method removed. Also added CInterfaceGroup::visitGroupAndChildren, that only visits the group and it's sub-groups.
This commit is contained in:
parent
7686107df8
commit
8f562baf72
6 changed files with 55 additions and 45 deletions
|
@ -15,9 +15,10 @@
|
||||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
#include "stdpch.h"
|
#include "stdpch.h"*/
|
||||||
#include "interface_manager.h"
|
#include "interface_manager.h"
|
||||||
|
#include "widget_manager.h"
|
||||||
#include "ctrl_scroll.h"
|
#include "ctrl_scroll.h"
|
||||||
#include "nel/misc/xml_auto_ptr.h"
|
#include "nel/misc/xml_auto_ptr.h"
|
||||||
#include "group_menu.h"
|
#include "group_menu.h"
|
||||||
|
@ -68,7 +69,6 @@ void CCtrlScroll::runAH(const std::string &name, const std::string ¶ms)
|
||||||
{
|
{
|
||||||
if (name.empty()) return;
|
if (name.empty()) return;
|
||||||
if (_CallingAH) return; // avoid infinite loop
|
if (_CallingAH) return; // avoid infinite loop
|
||||||
CInterfaceManager *pIM = CInterfaceManager::getInstance();
|
|
||||||
_CallingAH = true;
|
_CallingAH = true;
|
||||||
CAHManager::getInstance()->runActionHandler(name, this, params);
|
CAHManager::getInstance()->runActionHandler(name, this, params);
|
||||||
_CallingAH = false;
|
_CallingAH = false;
|
||||||
|
@ -166,7 +166,6 @@ bool CCtrlScroll::parse(xmlNodePtr node, CInterfaceGroup * parentGroup)
|
||||||
prop = (char*) xmlGetProp( node, (xmlChar*)"target" );
|
prop = (char*) xmlGetProp( node, (xmlChar*)"target" );
|
||||||
if (prop)
|
if (prop)
|
||||||
{
|
{
|
||||||
CInterfaceManager *pIM= CInterfaceManager::getInstance();
|
|
||||||
CInterfaceGroup *group = dynamic_cast<CInterfaceGroup*>(CWidgetManager::getInstance()->getElementFromId(prop));
|
CInterfaceGroup *group = dynamic_cast<CInterfaceGroup*>(CWidgetManager::getInstance()->getElementFromId(prop));
|
||||||
if(group == NULL)
|
if(group == NULL)
|
||||||
group = dynamic_cast<CInterfaceGroup*>(CWidgetManager::getInstance()->getElementFromId(this->getId(), prop));
|
group = dynamic_cast<CInterfaceGroup*>(CWidgetManager::getInstance()->getElementFromId(this->getId(), prop));
|
||||||
|
@ -209,7 +208,6 @@ int CCtrlScroll::luaSetTarget(CLuaState &ls)
|
||||||
CLuaIHM::checkArgType(ls, funcName, 1, LUA_TSTRING);
|
CLuaIHM::checkArgType(ls, funcName, 1, LUA_TSTRING);
|
||||||
std::string targetId = ls.toString(1);
|
std::string targetId = ls.toString(1);
|
||||||
|
|
||||||
CInterfaceManager *pIM= CInterfaceManager::getInstance();
|
|
||||||
CInterfaceGroup *group = dynamic_cast<CInterfaceGroup*>(CWidgetManager::getInstance()->getElementFromId(targetId));
|
CInterfaceGroup *group = dynamic_cast<CInterfaceGroup*>(CWidgetManager::getInstance()->getElementFromId(targetId));
|
||||||
if(group != NULL)
|
if(group != NULL)
|
||||||
{
|
{
|
||||||
|
@ -226,7 +224,6 @@ void CCtrlScroll::updateCoords()
|
||||||
// update only if visible
|
// update only if visible
|
||||||
if (_Target->getActive())
|
if (_Target->getActive())
|
||||||
{
|
{
|
||||||
CInterfaceManager *pIM = CInterfaceManager::getInstance();
|
|
||||||
CViewRenderer &rVR = *CViewRenderer::getInstance();
|
CViewRenderer &rVR = *CViewRenderer::getInstance();
|
||||||
sint32 w, h;
|
sint32 w, h;
|
||||||
rVR.getTextureSizeFromId (_TxIdB, w, h);
|
rVR.getTextureSizeFromId (_TxIdB, w, h);
|
||||||
|
@ -409,9 +406,8 @@ void CCtrlScroll::updateCoords()
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
void CCtrlScroll::draw()
|
void CCtrlScroll::draw()
|
||||||
{
|
{
|
||||||
CInterfaceManager *pIM = CInterfaceManager::getInstance();
|
|
||||||
CViewRenderer &rVR = *CViewRenderer::getInstance();
|
CViewRenderer &rVR = *CViewRenderer::getInstance();
|
||||||
CRGBA col = pIM->getGlobalColorForContent();
|
CRGBA col = CInterfaceManager::getInstance()->getGlobalColorForContent();
|
||||||
|
|
||||||
if (_Target)
|
if (_Target)
|
||||||
{
|
{
|
||||||
|
@ -693,7 +689,6 @@ sint32 CCtrlScroll::moveTrackY (sint32 dy)
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
void CCtrlScroll::setTextureBottomOrLeft (const std::string &txName)
|
void CCtrlScroll::setTextureBottomOrLeft (const std::string &txName)
|
||||||
{
|
{
|
||||||
CInterfaceManager *pIM = CInterfaceManager::getInstance();
|
|
||||||
CViewRenderer &rVR = *CViewRenderer::getInstance();
|
CViewRenderer &rVR = *CViewRenderer::getInstance();
|
||||||
_TxIdB = rVR.getTextureIdFromName(txName);
|
_TxIdB = rVR.getTextureIdFromName(txName);
|
||||||
}
|
}
|
||||||
|
@ -701,7 +696,6 @@ void CCtrlScroll::setTextureBottomOrLeft (const std::string &txName)
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
void CCtrlScroll::setTextureMiddle (const std::string &txName)
|
void CCtrlScroll::setTextureMiddle (const std::string &txName)
|
||||||
{
|
{
|
||||||
CInterfaceManager *pIM = CInterfaceManager::getInstance();
|
|
||||||
CViewRenderer &rVR = *CViewRenderer::getInstance();
|
CViewRenderer &rVR = *CViewRenderer::getInstance();
|
||||||
_TxIdM = rVR.getTextureIdFromName(txName);
|
_TxIdM = rVR.getTextureIdFromName(txName);
|
||||||
}
|
}
|
||||||
|
@ -709,7 +703,6 @@ void CCtrlScroll::setTextureMiddle (const std::string &txName)
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
void CCtrlScroll::setTextureTopOrRight (const std::string &txName)
|
void CCtrlScroll::setTextureTopOrRight (const std::string &txName)
|
||||||
{
|
{
|
||||||
CInterfaceManager *pIM = CInterfaceManager::getInstance();
|
|
||||||
CViewRenderer &rVR = *CViewRenderer::getInstance();
|
CViewRenderer &rVR = *CViewRenderer::getInstance();
|
||||||
_TxIdT = rVR.getTextureIdFromName(txName);
|
_TxIdT = rVR.getTextureIdFromName(txName);
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,10 +17,7 @@
|
||||||
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
#include "stdpch.h"
|
|
||||||
|
|
||||||
#include "ctrl_tooltip.h"
|
#include "ctrl_tooltip.h"
|
||||||
#include "interface_manager.h"
|
|
||||||
#include "nel/misc/xml_auto_ptr.h"
|
#include "nel/misc/xml_auto_ptr.h"
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
|
@ -26,7 +26,6 @@ namespace NLGUI
|
||||||
{
|
{
|
||||||
class CEventDescriptor;
|
class CEventDescriptor;
|
||||||
}
|
}
|
||||||
class CInterfaceManager;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \author Matthieu 'Mr TRAP' Besson
|
* \author Matthieu 'Mr TRAP' Besson
|
||||||
|
|
|
@ -22,7 +22,6 @@
|
||||||
|
|
||||||
#include "interface_group.h"
|
#include "interface_group.h"
|
||||||
#include "interface_link.h"
|
#include "interface_link.h"
|
||||||
#include "view_text.h"
|
|
||||||
#include "ctrl_scroll.h"
|
#include "ctrl_scroll.h"
|
||||||
#include "widget_manager.h"
|
#include "widget_manager.h"
|
||||||
#include "group_container.h"
|
#include "group_container.h"
|
||||||
|
@ -1007,29 +1006,6 @@ void CInterfaceGroup::evalChildrenBBox(bool resizeFromChildW, bool resizeFromChi
|
||||||
height = yMax - yMin;
|
height = yMax - yMin;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
|
||||||
void CInterfaceGroup::invalidateTexts (bool resetTextIndex)
|
|
||||||
{
|
|
||||||
vector<CInterfaceGroup*>::const_iterator itg;
|
|
||||||
for (itg = _ChildrenGroups.begin() ; itg != _ChildrenGroups.end(); itg++)
|
|
||||||
{
|
|
||||||
CInterfaceGroup *pIG = *itg;
|
|
||||||
pIG->invalidateTexts(resetTextIndex);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (vector<CViewBase*>::const_iterator itv = _Views.begin() ; itv != _Views.end(); itv++)
|
|
||||||
{
|
|
||||||
CViewBase *pVB = *itv;
|
|
||||||
CViewText *pVT = dynamic_cast<CViewText*>(pVB);
|
|
||||||
if (pVT != NULL)
|
|
||||||
{
|
|
||||||
if (resetTextIndex)
|
|
||||||
pVT->resetTextIndex();
|
|
||||||
pVT->updateTextContext ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
CInterfaceElement* CInterfaceGroup::getElement (const std::string &id)
|
CInterfaceElement* CInterfaceGroup::getElement (const std::string &id)
|
||||||
{
|
{
|
||||||
|
@ -1716,6 +1692,19 @@ void CInterfaceGroup::visit(CInterfaceElementVisitor *visitor)
|
||||||
CInterfaceElement::visit(visitor);
|
CInterfaceElement::visit(visitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
void CInterfaceGroup::visitGroupAndChildren( CInterfaceElementVisitor *visitor )
|
||||||
|
{
|
||||||
|
nlassert( visitor != 0 );
|
||||||
|
for( uint i = 0; i < _ChildrenGroups.size(); i++ )
|
||||||
|
{
|
||||||
|
_ChildrenGroups[ i ]->visitGroupAndChildren( visitor );
|
||||||
|
}
|
||||||
|
|
||||||
|
visitor->visitGroup( this );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
void CInterfaceGroup::setUseCursor(bool use)
|
void CInterfaceGroup::setUseCursor(bool use)
|
||||||
|
|
|
@ -109,7 +109,6 @@ public:
|
||||||
*/
|
*/
|
||||||
virtual void checkCoords();
|
virtual void checkCoords();
|
||||||
virtual void updateCoords();
|
virtual void updateCoords();
|
||||||
void invalidateTexts (bool resetTextIndex); // Needed for static text to be reconstructed on screen size change
|
|
||||||
|
|
||||||
/// remove all views
|
/// remove all views
|
||||||
virtual void clearViews();
|
virtual void clearViews();
|
||||||
|
@ -272,7 +271,10 @@ public:
|
||||||
virtual void dumpSize(uint depth = 0) const;
|
virtual void dumpSize(uint depth = 0) const;
|
||||||
|
|
||||||
// From CInterfaceElement
|
// From CInterfaceElement
|
||||||
virtual void visit(CInterfaceElementVisitor *visitor);
|
virtual void visit(CInterfaceElementVisitor *visitor);
|
||||||
|
|
||||||
|
/// Visits only this group's sub-groups and then the group itself
|
||||||
|
virtual void visitGroupAndChildren( CInterfaceElementVisitor *visitor );
|
||||||
|
|
||||||
// Check cursor
|
// Check cursor
|
||||||
void setUseCursor(bool use);
|
void setUseCursor(bool use);
|
||||||
|
|
|
@ -3083,6 +3083,33 @@ void CInterfaceManager::moveAllWindowsToNewScreenSize(sint32 newScreenW, sint32
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class InvalidateTextVisitor : public CInterfaceElementVisitor
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
InvalidateTextVisitor( bool reset )
|
||||||
|
{
|
||||||
|
this->reset = reset;
|
||||||
|
}
|
||||||
|
|
||||||
|
void visitGroup( CInterfaceGroup *group )
|
||||||
|
{
|
||||||
|
const std::vector< CViewBase* > &vs = group->getViews();
|
||||||
|
for( std::vector< CViewBase* >::const_iterator itr = vs.begin(); itr != vs.end(); ++itr )
|
||||||
|
{
|
||||||
|
CViewText *vt = dynamic_cast< CViewText* >( *itr );
|
||||||
|
if( vt != NULL )
|
||||||
|
{
|
||||||
|
if( reset )
|
||||||
|
vt->resetTextIndex();
|
||||||
|
vt->updateTextContext();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool reset;
|
||||||
|
};
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
void CInterfaceManager::updateAllLocalisedElements()
|
void CInterfaceManager::updateAllLocalisedElements()
|
||||||
{
|
{
|
||||||
|
@ -3114,7 +3141,9 @@ void CInterfaceManager::updateAllLocalisedElements()
|
||||||
{
|
{
|
||||||
CWidgetManager::SMasterGroup &rMG = _MasterGroups[nMasterGroup];
|
CWidgetManager::SMasterGroup &rMG = _MasterGroups[nMasterGroup];
|
||||||
|
|
||||||
rMG.Group->invalidateTexts (false);
|
InvalidateTextVisitor inv( false );
|
||||||
|
|
||||||
|
rMG.Group->visitGroupAndChildren( &inv );
|
||||||
rMG.Group->invalidateCoords ();
|
rMG.Group->invalidateCoords ();
|
||||||
for (uint8 nPriority = 0; nPriority < WIN_PRIORITY_MAX; nPriority++)
|
for (uint8 nPriority = 0; nPriority < WIN_PRIORITY_MAX; nPriority++)
|
||||||
{
|
{
|
||||||
|
@ -3123,7 +3152,7 @@ void CInterfaceManager::updateAllLocalisedElements()
|
||||||
for (itw = rList.begin(); itw != rList.end(); itw++)
|
for (itw = rList.begin(); itw != rList.end(); itw++)
|
||||||
{
|
{
|
||||||
CInterfaceGroup *pIG = *itw;
|
CInterfaceGroup *pIG = *itw;
|
||||||
pIG->invalidateTexts (false);
|
pIG->visitGroupAndChildren( &inv );
|
||||||
pIG->invalidateCoords ();
|
pIG->invalidateCoords ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4592,7 +4621,8 @@ void CInterfaceManager::resetTextIndex()
|
||||||
{
|
{
|
||||||
CWidgetManager::SMasterGroup &rMG = _MasterGroups[nMasterGroup];
|
CWidgetManager::SMasterGroup &rMG = _MasterGroups[nMasterGroup];
|
||||||
|
|
||||||
rMG.Group->invalidateTexts (true);
|
InvalidateTextVisitor inv( true );
|
||||||
|
rMG.Group->visitGroupAndChildren( &inv );
|
||||||
for (uint8 nPriority = 0; nPriority < WIN_PRIORITY_MAX; nPriority++)
|
for (uint8 nPriority = 0; nPriority < WIN_PRIORITY_MAX; nPriority++)
|
||||||
{
|
{
|
||||||
list<CInterfaceGroup*> &rList = rMG.PrioritizedWindows[nPriority];
|
list<CInterfaceGroup*> &rList = rMG.PrioritizedWindows[nPriority];
|
||||||
|
@ -4600,7 +4630,7 @@ void CInterfaceManager::resetTextIndex()
|
||||||
for (itw = rList.begin(); itw != rList.end(); itw++)
|
for (itw = rList.begin(); itw != rList.end(); itw++)
|
||||||
{
|
{
|
||||||
CInterfaceGroup *pIG = *itw;
|
CInterfaceGroup *pIG = *itw;
|
||||||
pIG->invalidateTexts (true);
|
pIG->visitGroupAndChildren( &inv );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue