CHANGED: #1471 CCtrlBaseButton action handlers will now be retrievable, even if the action handler couldn't be found at the time of parsing.

This commit is contained in:
dfighter1985 2012-08-20 01:29:49 +02:00
parent 2458968643
commit dc93bf28a9
3 changed files with 81 additions and 12 deletions

View file

@ -175,6 +175,11 @@ namespace NLGUI
void convertTooltipHotSpot(const char *prop, THotSpot &parentHS, THotSpot &childHS);
static std::string TooltipHotSpotToString( THotSpot parent, THotSpot child );
void mapAHString( const std::string &key, const std::string &value );
std::string getAHString( const std::string &key ) const;
static std::map< std::string, std::map< std::string, std::string > > AHCache;
bool resizer;
};

View file

@ -26,6 +26,7 @@ using namespace NLMISC;
namespace NLGUI
{
std::map< std::string, std::map< std::string, std::string > > CCtrlBase::AHCache;
// ***************************************************************************
CCtrlBase::~CCtrlBase()
@ -453,5 +454,32 @@ namespace NLGUI
return depth + getDeltaDepth();
}
void CCtrlBase::mapAHString( const std::string &key, const std::string &value )
{
std::map< std::string, std::map< std::string, std::string > >::iterator itr = AHCache.find( getId() );
if( itr == AHCache.end() )
{
AHCache[ getId() ];
itr = AHCache.find( getId() );
}
std::map< std::string, std::string > &AHMap = itr->second;
AHMap[ key ] = value;
}
std::string CCtrlBase::getAHString( const stlpx_std::string &key ) const
{
std::map< std::string, std::map< std::string, std::string > >::const_iterator itr = AHCache.find( getId() );
if( itr == AHCache.end() )
return "";
std::map< std::string, std::string >::const_iterator itr2 = itr->second.find( key );
if( itr2 == itr->second.end() )
return "";
else
return itr2->second;
}
}

View file

@ -116,7 +116,7 @@ namespace NLGUI
else
if( name == "onover" )
{
return _getActionOnOver();
return getAHString( "onover" );
}
else
if( name == "params_over" )
@ -126,7 +126,7 @@ namespace NLGUI
else
if( name == "onclick_l" )
{
return _getActionOnLeftClick();
return getAHString( "onclick_l" );
}
else
if( name == "params_l" )
@ -136,7 +136,7 @@ namespace NLGUI
else
if( name == "ondblclick_l" )
{
return _getActionOnDblLeftClick();
return getAHString( "ondblclick_l" );
}
else
if( name == "params_dblclick_l" )
@ -146,7 +146,7 @@ namespace NLGUI
else
if( name == "onlongclick_l" )
{
return _getActionOnLeftLongClick();
return getAHString( "onlongclick_l" );
}
else
if( name == "params_longclick_l" )
@ -156,7 +156,7 @@ namespace NLGUI
else
if( name == "onclick_r" )
{
return _getActionOnRightClick();
return getAHString( "onclick_r" );
}
else
if( name == "params_r" )
@ -166,7 +166,7 @@ namespace NLGUI
else
if( name == "onclock_tick" )
{
return _getActionOnClockTick();
return getAHString( "onclock_tick" );
}
else
if( name == "params_clock_tick" )
@ -283,6 +283,7 @@ namespace NLGUI
if( name == "onover" )
{
_AHOnOver = CAHManager::getInstance()->getAH( value, std::string() );
mapAHString( "onover", value );
return;
}
else
@ -295,6 +296,7 @@ namespace NLGUI
if( name == "onclick_l" )
{
_AHOnLeftClick = CAHManager::getInstance()->getAH( value, std::string() );
mapAHString( "onclick_l", value );
return;
}
else
@ -307,6 +309,7 @@ namespace NLGUI
if( name == "ondblclick_l" )
{
_AHOnLeftDblClick = CAHManager::getInstance()->getAH( value, std::string() );
mapAHString( "ondblclick_l", value );
return;
}
else
@ -319,6 +322,7 @@ namespace NLGUI
if( name == "onlongclick_l" )
{
_AHOnLeftLongClick = CAHManager::getInstance()->getAH( value, std::string() );
mapAHString( "onlongclick_l", value );
return;
}
else
@ -331,6 +335,7 @@ namespace NLGUI
if( name == "onclick_r" )
{
_AHOnRightClick = CAHManager::getInstance()->getAH( value, std::string() );
mapAHString( "onclick_r", value );
return;
}
else
@ -343,6 +348,7 @@ namespace NLGUI
if( name == "onclock_tick" )
{
_AHOnClockTick = CAHManager::getInstance()->getAH( value, std::string() );
mapAHString( "onclock_tick", value );
return;
}
else
@ -407,18 +413,21 @@ namespace NLGUI
xmlNewProp( node, BAD_CAST "global_color_normal", BAD_CAST toString( _ModulateGlobalColorNormal ).c_str() );
xmlNewProp( node, BAD_CAST "global_color_pushed", BAD_CAST toString( _ModulateGlobalColorPushed ).c_str() );
xmlNewProp( node, BAD_CAST "global_color_over", BAD_CAST toString( _ModulateGlobalColorOver ).c_str() );
xmlNewProp( node, BAD_CAST "onover", BAD_CAST _getActionOnOver().c_str() );
xmlNewProp( node, BAD_CAST "onover", BAD_CAST getAHString( "onover" ).c_str() );
xmlNewProp( node, BAD_CAST "params_over", BAD_CAST _getParamsOnOver().c_str() );
xmlNewProp( node, BAD_CAST "onclick_l", BAD_CAST _getActionOnLeftClick().c_str() );
xmlNewProp( node, BAD_CAST "onclick_l", BAD_CAST getAHString( "onclick_l" ).c_str() );
xmlNewProp( node, BAD_CAST "params_l", BAD_CAST _getParamsOnLeftClick().c_str() );
xmlNewProp( node, BAD_CAST "ondblclick_l", BAD_CAST _getActionOnDblLeftClick().c_str() );
xmlNewProp( node, BAD_CAST "ondblclick_l", BAD_CAST getAHString( "ondblclick_l" ).c_str() );
xmlNewProp( node, BAD_CAST "params_dblclick_l", BAD_CAST _AHLeftDblClickParams.toString().c_str() );
xmlNewProp( node, BAD_CAST "onlongclick_l", BAD_CAST _getActionOnLeftLongClick().c_str() );
xmlNewProp( node, BAD_CAST "onlongclick_l", BAD_CAST getAHString( "onlongclick_l" ).c_str() );
xmlNewProp( node, BAD_CAST "params_longclick_l", BAD_CAST _AHLeftLongClickParams.toString().c_str() );
xmlNewProp( node, BAD_CAST "onclick_r", BAD_CAST _getActionOnRightClick().c_str() );
xmlNewProp( node, BAD_CAST "onclick_r", BAD_CAST getAHString( "onclick_r" ).c_str() );
xmlNewProp( node, BAD_CAST "params_r", BAD_CAST _AHRightClickParams.toString().c_str() );
xmlNewProp( node, BAD_CAST "onclock_tick", BAD_CAST _getActionOnClockTick().c_str() );
xmlNewProp( node, BAD_CAST "onclock_tick", BAD_CAST getAHString( "onclock_tick" ).c_str() );
xmlNewProp( node, BAD_CAST "params_clock_tick", BAD_CAST _AHClockTickParams.toString().c_str() );
xmlNewProp( node, BAD_CAST "menu_l", BAD_CAST _ListMenuLeft.toString().c_str() );
xmlNewProp( node, BAD_CAST "menu_r", BAD_CAST _ListMenuRight.toString().c_str() );
@ -509,6 +518,33 @@ namespace NLGUI
CAHManager::getInstance()->parseAH(cur, "onlongclick_l", "params_longclick_l", _AHOnLeftLongClick, _AHLeftLongClickParams);
CAHManager::getInstance()->parseAH(cur, "onclock_tick", "params_clock_tick", _AHOnClockTick, _AHClockTickParams);
if( editorMode )
{
prop = (char*) xmlGetProp( cur, BAD_CAST "onover" );
if( prop != NULL )
mapAHString( "onover", std::string( prop ) );
prop = (char*) xmlGetProp( cur, BAD_CAST "onclick_l" );
if( prop != NULL )
mapAHString( "onclick_l", std::string( prop ) );
prop = (char*) xmlGetProp( cur, BAD_CAST "ondblclick_l" );
if( prop != NULL )
mapAHString( "ondblclick_l", std::string( prop ) );
prop = (char*) xmlGetProp( cur, BAD_CAST "onclick_r" );
if( prop != NULL )
mapAHString( "onclick_r", std::string( prop ) );
prop = (char*) xmlGetProp( cur, BAD_CAST "onlongclick_l" );
if( prop != NULL )
mapAHString( "onlongclick_l", std::string( prop ) );
prop = (char*) xmlGetProp( cur, BAD_CAST "onclock_tick" );
if( prop != NULL )
mapAHString( "onclock_tick", std::string( prop ) );
}
// Context menu association
prop = (char*) xmlGetProp( cur, (xmlChar*)"menu_l" );
if (prop)