CmHString.h 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  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. void updateString();
  30. };
  31. explicit HString(const WString& identifierString);
  32. HString();
  33. HString(const HString& copy);
  34. ~HString();
  35. operator const WString& () const;
  36. void setParameter(UINT32 idx, const WString& value);
  37. boost::signals::connection addOnStringModifiedCallback(boost::function<void()> callback) const;
  38. private:
  39. std::shared_ptr<StringData> mData;
  40. };
  41. }