CmHString.h 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #pragma once
  2. #include <boost/signals.hpp>
  3. namespace CamelotFramework
  4. {
  5. /**
  6. * @brief String handle. Provides a wrapper around an Unicode string, primarily
  7. * for localization purposes.
  8. *
  9. * Actual value for this string is looked up in a global string table based
  10. * on the provided identifier string and currently active language. If such value
  11. * doesn't exist then the identifier is used as is.
  12. */
  13. class CM_UTILITY_EXPORT HString
  14. {
  15. public:
  16. class CM_UTILITY_EXPORT StringData
  17. {
  18. public:
  19. StringData();
  20. ~StringData();
  21. mutable boost::signal<void()> onStringModified;
  22. private:
  23. friend class HString;
  24. LocalizedStringData* mStringData;
  25. WString* mParameters;
  26. boost::signals::connection mUpdateConn;
  27. mutable bool mIsDirty;
  28. mutable WString mCachedString;
  29. mutable WString* mStringPtr;
  30. void updateString();
  31. };
  32. explicit HString(const WString& identifierString);
  33. HString();
  34. HString(const HString& copy);
  35. ~HString();
  36. operator const WString& () const;
  37. void setParameter(UINT32 idx, const WString& value);
  38. boost::signals::connection addOnStringModifiedCallback(boost::function<void()> callback) const;
  39. private:
  40. std::shared_ptr<StringData> mData;
  41. };
  42. }