diff options
Diffstat (limited to 'indra/llui/llviewmodel.cpp')
| -rw-r--r-- | indra/llui/llviewmodel.cpp | 61 | 
1 files changed, 36 insertions, 25 deletions
| diff --git a/indra/llui/llviewmodel.cpp b/indra/llui/llviewmodel.cpp index a400eb70c0..93106b344f 100644 --- a/indra/llui/llviewmodel.cpp +++ b/indra/llui/llviewmodel.cpp @@ -3,25 +3,25 @@   * @author Nat Goodspeed   * @date   2008-08-08   * @brief  Implementation for llviewmodel. - *  + *   * $LicenseInfo:firstyear=2008&license=viewerlgpl$   * Second Life Viewer Source Code   * Copyright (C) 2010, Linden Research, Inc. - *  + *   * This library is free software; you can redistribute it and/or   * modify it under the terms of the GNU Lesser General Public   * License as published by the Free Software Foundation;   * version 2.1 of the License only. - *  + *   * This library is distributed in the hope that it will be useful,   * but WITHOUT ANY WARRANTY; without even the implied warranty of   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU   * Lesser General Public License for more details. - *  + *   * You should have received a copy of the GNU Lesser General Public   * License along with this library; if not, write to the Free Software   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA - *  + *   * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA   * $/LicenseInfo$   */ @@ -37,13 +37,13 @@  ///  LLViewModel::LLViewModel() -:	mDirty(false) +:   mDirty(false)  {  }  /// Instantiate an LLViewModel with an existing data value  LLViewModel::LLViewModel(const LLSD& value) -:	mDirty(false) +:   mDirty(false)  {      setValue(value);  } @@ -65,23 +65,23 @@ LLSD LLViewModel::getValue() const  ///  LLTextViewModel::LLTextViewModel()    : LLViewModel(false), -	mUpdateFromDisplay(false) +    mUpdateFromDisplay(false)  {  }  /// Instantiate an LLViewModel with an existing data value  LLTextViewModel::LLTextViewModel(const LLSD& value)    : LLViewModel(value), -	mUpdateFromDisplay(false) +    mUpdateFromDisplay(false)  {  }  /// Update the stored value  void LLTextViewModel::setValue(const LLSD& value)  { -	// approximate LLSD storage usage -	LLViewModel::setValue(value); -    mDisplay = utf8str_to_wstring(value.asString()); +    // approximate LLSD storage usage +    LLViewModel::setValue(value); +    mDisplay = utf8str_to_wstring(mStringValue = value.asString());      // mDisplay and mValue agree      mUpdateFromDisplay = false; @@ -93,31 +93,42 @@ void LLTextViewModel::setDisplay(const LLWString& value)      // and do the utf8str_to_wstring() to get the corresponding mDisplay      // value. But a text editor might want to edit the display string      // directly, then convert back to UTF8 on commit. -	mDisplay = value; -	mDirty = true; +    mDisplay = value; +    mDirty = true;      // Don't immediately convert to UTF8 -- do it lazily -- we expect many      // more setDisplay() calls than getValue() calls. Just flag that it needs      // doing.      mUpdateFromDisplay = true;  } -LLSD LLTextViewModel::getValue() const +inline void updateFromDisplayIfNeeded(const LLTextViewModel* model)  { -    // Has anyone called setDisplay() since the last setValue()? If so, have -    // to convert mDisplay back to UTF8. -    if (mUpdateFromDisplay) +    // Has anyone called setDisplay() since the last setValue()? +    // If so, have to convert mDisplay back to UTF8. +    if (model->mUpdateFromDisplay)      { -        // The fact that we're lazily updating fields in this object should be -        // transparent to clients, which is why this method is left -        // conventionally const. Nor do we particularly want to make these -        // members mutable. Just cast away constness in this one place. -        LLTextViewModel* nthis = const_cast<LLTextViewModel*>(this); +        // The fact that we're lazily updating fields +        // in this object should be transparent to clients, +        // which is why this method is left conventionally const. +        // Nor do we particularly want to make these members mutable. +        // Just cast away constness in this one place. +        LLTextViewModel* nthis = const_cast<LLTextViewModel*>(model);          nthis->mUpdateFromDisplay = false; -        nthis->mValue = wstring_to_utf8str(mDisplay); +        nthis->mValue = nthis->mStringValue = wstring_to_utf8str(model->mDisplay);      } -    return LLViewModel::getValue();  } +LLSD LLTextViewModel::getValue() const +{ +    updateFromDisplayIfNeeded(this); +    return mValue; +} + +const std::string& LLTextViewModel::getStringValue() const +{ +    updateFromDisplayIfNeeded(this); +    return mStringValue; +}  //////////////////////////////////////////////////////////////////////////// | 
