CmHString.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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. const WString& getValue() const;
  38. void setParameter(UINT32 idx, const WString& value);
  39. boost::signals::connection addOnStringModifiedCallback(boost::function<void()> callback) const;
  40. static const HString& dummy();
  41. private:
  42. std::shared_ptr<StringData> mData;
  43. };
  44. }