lluistring.cpp
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:4k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file lluistring.cpp
  3.  * @brief LLUIString implementation.
  4.  *
  5.  * $LicenseInfo:firstyear=2006&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2006-2010, Linden Research, Inc.
  8.  * 
  9.  * Second Life Viewer Source Code
  10.  * The source code in this file ("Source Code") is provided by Linden Lab
  11.  * to you under the terms of the GNU General Public License, version 2.0
  12.  * ("GPL"), unless you have obtained a separate licensing agreement
  13.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  14.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  15.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  16.  * 
  17.  * There are special exceptions to the terms and conditions of the GPL as
  18.  * it is applied to this Source Code. View the full text of the exception
  19.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  20.  * online at
  21.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  22.  * 
  23.  * By copying, modifying or distributing this software, you acknowledge
  24.  * that you have read and understood your obligations described above,
  25.  * and agree to abide by those obligations.
  26.  * 
  27.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  28.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  29.  * COMPLETENESS OR PERFORMANCE.
  30.  * $/LicenseInfo$
  31.  */
  32. #include "linden_common.h"
  33. #include "lluistring.h"
  34. #include "llsd.h"
  35. #include "lltrans.h"
  36. LLFastTimer::DeclareTimer FTM_UI_STRING("UI String");
  37. LLUIString::LLUIString(const std::string& instring, const LLStringUtil::format_map_t& args)
  38. : mOrig(instring),
  39. mArgs(args)
  40. {
  41. dirty();
  42. }
  43. void LLUIString::assign(const std::string& s)
  44. {
  45. mOrig = s;
  46. dirty();
  47. }
  48. void LLUIString::setArgList(const LLStringUtil::format_map_t& args)
  49. {
  50. mArgs = args;
  51. dirty();
  52. }
  53. void LLUIString::setArgs(const LLSD& sd)
  54. {
  55. LLFastTimer timer(FTM_UI_STRING);
  56. if (!sd.isMap()) return;
  57. for(LLSD::map_const_iterator sd_it = sd.beginMap();
  58. sd_it != sd.endMap();
  59. ++sd_it)
  60. {
  61. setArg(sd_it->first, sd_it->second.asString());
  62. }
  63. dirty();
  64. }
  65. void LLUIString::setArg(const std::string& key, const std::string& replacement)
  66. {
  67. mArgs[key] = replacement;
  68. dirty();
  69. }
  70. void LLUIString::truncate(S32 maxchars)
  71. {
  72. if (getUpdatedWResult().size() > (size_t)maxchars)
  73. {
  74. LLWStringUtil::truncate(getUpdatedWResult(), maxchars);
  75. mResult = wstring_to_utf8str(getUpdatedWResult());
  76. }
  77. }
  78. void LLUIString::erase(S32 charidx, S32 len)
  79. {
  80. getUpdatedWResult().erase(charidx, len);
  81. mResult = wstring_to_utf8str(getUpdatedWResult());
  82. }
  83. void LLUIString::insert(S32 charidx, const LLWString& wchars)
  84. {
  85. getUpdatedWResult().insert(charidx, wchars);
  86. mResult = wstring_to_utf8str(getUpdatedWResult());
  87. }
  88. void LLUIString::replace(S32 charidx, llwchar wc)
  89. {
  90. getUpdatedWResult()[charidx] = wc;
  91. mResult = wstring_to_utf8str(getUpdatedWResult());
  92. }
  93. void LLUIString::clear()
  94. {
  95. // Keep Args
  96. mOrig.clear();
  97. mResult.clear();
  98. mWResult.clear();
  99. }
  100. void LLUIString::dirty()
  101. {
  102. mNeedsResult = true;
  103. mNeedsWResult = true;
  104. }
  105. void LLUIString::updateResult() const
  106. {
  107. mNeedsResult = false;
  108. LLFastTimer timer(FTM_UI_STRING);
  109. // optimize for empty strings (don't attempt string replacement)
  110. if (mOrig.empty())
  111. {
  112. mResult.clear();
  113. mWResult.clear();
  114. return;
  115. }
  116. mResult = mOrig;
  117. // get the defailt args + local args
  118. LLStringUtil::format_map_t combined_args = LLTrans::getDefaultArgs();
  119. combined_args.insert(mArgs.begin(), mArgs.end());
  120. LLStringUtil::format(mResult, combined_args);
  121. }
  122. void LLUIString::updateWResult() const
  123. {
  124. mNeedsWResult = false;
  125. mWResult = utf8str_to_wstring(getUpdatedResult());
  126. }