CmHString.cpp 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #include "CmHString.h"
  2. #include "CmStringTable.h"
  3. namespace CamelotFramework
  4. {
  5. HString::HString(const WString& identifierString)
  6. :mParameters(nullptr)
  7. {
  8. mStringData = &StringTable::instance().getStringData(identifierString);
  9. mParameters = cm_newN<WString>(mStringData->numParameters);
  10. mUpdateConn = mStringData->commonData->onStringDataModified.connect(boost::bind(&HString::updateString, this, _1));
  11. updateString(identifierString);
  12. }
  13. HString::~HString()
  14. {
  15. mUpdateConn.disconnect();
  16. if(mParameters != nullptr)
  17. cm_deleteN(mParameters, mStringData->numParameters);
  18. }
  19. void HString::setParameter(UINT32 idx, const WString& value)
  20. {
  21. mParameters[idx] = value;
  22. }
  23. void HString::updateString(const WString& identifierString)
  24. {
  25. LocalizedStringData* stringData = &StringTable::instance().getStringData(identifierString);
  26. // If common data changed re-apply the connections
  27. if(stringData->commonData != mStringData->commonData)
  28. {
  29. mUpdateConn.disconnect();
  30. mUpdateConn = stringData->commonData->onStringDataModified.connect(boost::bind(&HString::updateString, this, _1));
  31. }
  32. mStringData = stringData;
  33. mCachedString = mStringData->concatenateString(mParameters, mStringData->numParameters);
  34. }
  35. }