removed requirement for specializing ParamCompare on boost::function types

eliminated usage of iterator_range from LLInitParam
made LLTextEditor::addChar consistent with truncate in counting text bytes (not including null terminator)
EXT-1494 - Avatar profile description text truncated to 255 characters

reviewed by Leyla
master
Richard Nelson 2009-10-15 19:56:45 +00:00
parent 56fed69c4a
commit 5edb4f2171
16 changed files with 71 additions and 178 deletions

View File

@ -2514,20 +2514,3 @@ LLWString LLLineEditor::getConvertedText() const
}
return text;
}
namespace LLInitParam
{
template<>
bool ParamCompare<LLLinePrevalidateFunc>::equals(const LLLinePrevalidateFunc &a, const LLLinePrevalidateFunc &b)
{
return false;
}
template<>
bool ParamCompare<boost::function<void (LLLineEditor *)> >::equals(
const boost::function<void (LLLineEditor *)> &a,
const boost::function<void (LLLineEditor *)> &b)
{
return false;
}
}

View File

@ -391,15 +391,4 @@ private:
}; // end class LLLineEditor
namespace LLInitParam
{
template<>
bool ParamCompare<LLLinePrevalidateFunc>::equals(
const LLLinePrevalidateFunc &a, const LLLinePrevalidateFunc &b);
template<>
bool ParamCompare<boost::function<void (LLLineEditor *)> >::equals(
const boost::function<void (LLLineEditor *)> &a, const boost::function<void (LLLineEditor *)> &b);
}
#endif // LL_LINEEDITOR_

View File

@ -640,15 +640,3 @@ void LLScrollbar::onLineDownBtnPressed( const LLSD& data )
{
changeLine( mStepSize, TRUE );
}
namespace LLInitParam
{
template<>
bool ParamCompare<boost::function<void (S32, LLScrollbar*)> >::equals(
const boost::function<void (S32, LLScrollbar*)> &a,
const boost::function<void (S32, LLScrollbar*)> &b)
{
return false;
}
}

View File

@ -167,11 +167,4 @@ private:
};
namespace LLInitParam
{
template<>
bool ParamCompare<boost::function<void (S32, LLScrollbar*)> >::equals(
const boost::function<void (S32, LLScrollbar*)> &a, const boost::function<void (S32, LLScrollbar*)> &b);
}
#endif // LL_SCROLLBAR_H

View File

@ -990,7 +990,7 @@ void LLTextEditor::removeChar()
// Add a single character to the text
S32 LLTextEditor::addChar(S32 pos, llwchar wc)
{
if ( (wstring_utf8_length( getWText() ) + wchar_utf8_length( wc )) >= mMaxTextByteLength)
if ( (wstring_utf8_length( getWText() ) + wchar_utf8_length( wc )) > mMaxTextByteLength)
{
make_ui_sound("UISndBadKeystroke");
return 0;

View File

@ -1918,16 +1918,11 @@ namespace LLInitParam
declare("blue", LLColor4::blue);
}
template<>
class ParamCompare<const LLFontGL*>
bool ParamCompare<const LLFontGL*, boost::false_type>::equals(const LLFontGL* a, const LLFontGL* b)
{
public:
static bool equals(const LLFontGL* a, const LLFontGL* b)
{
return !(a->getFontDesc() < b->getFontDesc())
&& !(b->getFontDesc() < a->getFontDesc());
}
};
return !(a->getFontDesc() < b->getFontDesc())
&& !(b->getFontDesc() < a->getFontDesc());
}
TypedParam<const LLFontGL*>::TypedParam(BlockDescriptor& descriptor, const char* _name, const LLFontGL*const value, ParamDescriptor::validation_func_t func, S32 min_count, S32 max_count)
: super_t(descriptor, _name, value, func, min_count, max_count),

View File

@ -436,6 +436,13 @@ namespace LLInitParam
static void declareValues();
};
template<>
struct ParamCompare<const LLFontGL*, boost::false_type>
{
static bool equals(const LLFontGL* a, const LLFontGL* b);
};
template<>
class TypedParam<LLCoordGL>
: public BlockValue<LLCoordGL>

View File

@ -849,24 +849,3 @@ BOOL LLUICtrl::getTentative() const
// virtual
void LLUICtrl::setColor(const LLColor4& color)
{ }
namespace LLInitParam
{
template<>
bool ParamCompare<LLUICtrl::commit_callback_t>::equals(
const LLUICtrl::commit_callback_t &a,
const LLUICtrl::commit_callback_t &b)
{
return false;
}
template<>
bool ParamCompare<LLUICtrl::enable_callback_t>::equals(
const LLUICtrl::enable_callback_t &a,
const LLUICtrl::enable_callback_t &b)
{
return false;
}
}

View File

@ -327,21 +327,4 @@ private:
class DefaultTabGroupFirstSorter;
};
namespace LLInitParam
{
template<>
bool ParamCompare<LLUICtrl::commit_callback_t>::equals(
const LLUICtrl::commit_callback_t &a,
const LLUICtrl::commit_callback_t &b);
template<>
bool ParamCompare<LLUICtrl::enable_callback_t>::equals(
const LLUICtrl::enable_callback_t &a,
const LLUICtrl::enable_callback_t &b);
template<>
bool ParamCompare<LLLazyValue<LLColor4> >::equals(
const LLLazyValue<LLColor4> &a, const LLLazyValue<LLColor4> &b);
}
#endif // LL_LLUICTRL_H

View File

@ -152,8 +152,7 @@ namespace LLInitParam
}
template<>
bool ParamCompare<LLUIImage*>::equals(
bool ParamCompare<LLUIImage*, boost::false_type>::equals(
LLUIImage* const &a,
LLUIImage* const &b)
{

View File

@ -108,8 +108,10 @@ namespace LLInitParam
// Need custom comparison function for our test app, which only loads
// LLUIImage* as NULL.
template<>
bool ParamCompare<LLUIImage*>::equals(
LLUIImage* const &a, LLUIImage* const &b);
struct ParamCompare<LLUIImage*, boost::false_type>
{
static bool equals(LLUIImage* const &a, LLUIImage* const &b);
};
}
typedef LLPointer<LLUIImage> LLUIImagePtr;

View File

@ -127,7 +127,7 @@ namespace LLInitParam
bool BaseBlock::submitValue(const Parser::name_stack_t& name_stack, Parser& p, bool silent)
{
if (!deserializeBlock(p, boost::make_iterator_range(name_stack.begin(), name_stack.end())))
if (!deserializeBlock(p, std::make_pair(name_stack.begin(), name_stack.end())))
{
if (!silent)
{
@ -304,11 +304,11 @@ namespace LLInitParam
bool BaseBlock::deserializeBlock(Parser& p, Parser::name_stack_range_t name_stack)
{
BlockDescriptor& block_data = getBlockDescriptor();
bool names_left = !name_stack.empty();
bool names_left = name_stack.first != name_stack.second;
if (names_left)
{
const std::string& top_name = name_stack.front().first;
const std::string& top_name = name_stack.first->first;
ParamDescriptor::deserialize_func_t deserialize_func = NULL;
Param* paramp = NULL;
@ -331,10 +331,11 @@ namespace LLInitParam
}
}
Parser::name_stack_range_t new_name_stack(++name_stack.begin(), name_stack.end());
Parser::name_stack_range_t new_name_stack(name_stack.first, name_stack.second);
++new_name_stack.first;
if (deserialize_func)
{
return deserialize_func(*paramp, p, new_name_stack, name_stack.empty() ? -1 : name_stack.front().second);
return deserialize_func(*paramp, p, new_name_stack, name_stack.first == name_stack.second ? -1 : name_stack.first->second);
}
}
@ -346,7 +347,7 @@ namespace LLInitParam
Param* paramp = getParamFromHandle((*it)->mParamHandle);
ParamDescriptor::deserialize_func_t deserialize_func = (*it)->mDeserializeFunc;
if (deserialize_func && deserialize_func(*paramp, p, name_stack, name_stack.empty() ? -1 : name_stack.front().second))
if (deserialize_func && deserialize_func(*paramp, p, name_stack, name_stack.first == name_stack.second ? -1 : name_stack.first->second))
{
mLastChangedParam = (*it)->mParamHandle;
return true;
@ -499,33 +500,7 @@ namespace LLInitParam
return param_changed;
}
template<>
bool ParamCompare<boost::function<void (const std::string &,void *)> >::equals(
const boost::function<void (const std::string &,void *)> &a,
const boost::function<void (const std::string &,void *)> &b)
{
return false;
}
template<>
bool ParamCompare<boost::function<void (const LLSD &,const LLSD &)> >::equals(
const boost::function<void (const LLSD &,const LLSD &)> &a,
const boost::function<void (const LLSD &,const LLSD &)> &b)
{
return false;
}
template<>
bool ParamCompare<boost::function<void (void)> >::equals(
const boost::function<void (void)> &a,
const boost::function<void (void)> &b)
{
return false;
}
template<>
bool ParamCompare<LLSD>::equals(const LLSD &a, const LLSD &b)
bool ParamCompare<LLSD, boost::false_type>::equals(const LLSD &a, const LLSD &b)
{
return false;
}

View File

@ -39,25 +39,31 @@
#include <stddef.h>
#include <boost/function.hpp>
#include <boost/bind.hpp>
#include <boost/range/iterator_range.hpp>
#include <boost/type_traits/is_convertible.hpp>
#include "llregistry.h"
#include "llmemory.h"
namespace LLInitParam
{
template <typename T>
class ParamCompare {
public:
static bool equals(const T &a, const T &b);
template <typename T, typename IS_BOOST_FUNCTION = boost::is_convertible<T, boost::function_base>::type >
struct ParamCompare
{
static bool equals(const T &a, const T &b)
{
return a == b;
}
};
template<class T>
bool ParamCompare<T>::equals(const T &a, const T&b)
{
return a == b;
}
// boost function types are not comparable
template<typename T>
struct ParamCompare<T, boost::true_type>
{
static bool equals(const T&a, const T &b)
{
return false;
}
};
// default constructor adaptor for InitParam Values
// constructs default instances of the given type, returned by const reference
@ -192,7 +198,7 @@ namespace LLInitParam
};
typedef std::vector<std::pair<std::string, S32> > name_stack_t;
typedef boost::iterator_range<name_stack_t::const_iterator> name_stack_range_t;
typedef std::pair<name_stack_t::const_iterator, name_stack_t::const_iterator> name_stack_range_t;
typedef std::vector<std::string> possible_values_t;
typedef boost::function<bool (void*)> parser_read_func_t;
@ -535,7 +541,7 @@ namespace LLInitParam
{
self_t& typed_param = static_cast<self_t&>(param);
// no further names in stack, attempt to parse value now
if (name_stack.empty())
if (name_stack.first == name_stack.second)
{
if (parser.readValue<T>(typed_param.mData.mValue))
{
@ -886,7 +892,7 @@ namespace LLInitParam
self_t& typed_param = static_cast<self_t&>(param);
value_t value;
// no further names in stack, attempt to parse value now
if (name_stack.empty())
if (name_stack.first == name_stack.second)
{
// attempt to read value directly
if (parser.readValue<value_t>(value))
@ -1541,7 +1547,7 @@ namespace LLInitParam
static bool deserializeParam(Param& param, Parser& parser, const Parser::name_stack_range_t& name_stack, S32 generation)
{
if (name_stack.empty())
if (name_stack.first == name_stack.second)
{
//std::string message = llformat("Deprecated value %s ignored", getName().c_str());
//parser.parserWarning(message);
@ -1600,7 +1606,7 @@ namespace LLInitParam
{
self_t& typed_param = static_cast<self_t&>(param);
// type to apply parse direct value T
if (name_stack.empty())
if (name_stack.first == name_stack.second)
{
if(parser.readValue<T>(typed_param.mData.mValue))
{
@ -1811,24 +1817,11 @@ namespace LLInitParam
}
};
template<>
bool ParamCompare<boost::function<void (const std::string &,void *)> >::equals(
const boost::function<void (const std::string &,void *)> &a,
const boost::function<void (const std::string &,void *)> &b);
template<>
bool ParamCompare<boost::function<void (const LLSD &,const LLSD &)> >::equals(
const boost::function<void (const LLSD &,const LLSD &)> &a,
const boost::function<void (const LLSD &,const LLSD &)> &b);
template<>
bool ParamCompare<boost::function<void (void)> >::equals(
const boost::function<void (void)> &a,
const boost::function<void (void)> &b);
template<>
bool ParamCompare<LLSD>::equals(const LLSD &a, const LLSD &b);
template<>
struct ParamCompare<LLSD, boost::false_type>
{
static bool equals(const LLSD &a, const LLSD &b);
};
}
#endif // LL_LLPARAM_H

View File

@ -58,14 +58,9 @@ bool LLUIColor::isReference() const
namespace LLInitParam
{
// used to detect equivalence with default values on export
template<>
class ParamCompare<LLUIColor>
bool ParamCompare<LLUIColor, boost::false_type>::equals(const LLUIColor &a, const LLUIColor &b)
{
public:
static bool equals(const LLUIColor &a, const LLUIColor &b)
{
// do not detect value equivalence, treat pointers to colors as distinct from color values
return (a.mColorPtr == NULL && b.mColorPtr == NULL ? a.mColor == b.mColor : a.mColorPtr == b.mColorPtr);
}
};
// do not detect value equivalence, treat pointers to colors as distinct from color values
return (a.mColorPtr == NULL && b.mColorPtr == NULL ? a.mColor == b.mColor : a.mColorPtr == b.mColorPtr);
}
}

View File

@ -11,11 +11,12 @@
#define LL_LLUICOLOR_H_
#include "v4color.h"
#include <boost/type_traits/integral_constant.hpp> // for boost::false_type
namespace LLInitParam
{
template<typename T>
class ParamCompare;
template<typename T, typename IS_BOOST_FUNCTION>
struct ParamCompare;
}
class LLUIColor
@ -36,10 +37,19 @@ public:
bool isReference() const;
private:
friend class LLInitParam::ParamCompare<LLUIColor>;
friend struct LLInitParam::ParamCompare<LLUIColor, boost::false_type>;
const LLColor4* mColorPtr;
LLColor4 mColor;
};
namespace LLInitParam
{
template<>
struct ParamCompare<class LLUIColor, boost::false_type>
{
static bool equals(const class LLUIColor& a, const class LLUIColor& b);
};
}
#endif

View File

@ -139,6 +139,7 @@
layout="topleft"
left="120"
top="30"
max_length="511"
name="sl_description_edit"
width="115"
word_wrap="true">
@ -194,6 +195,7 @@
layout="topleft"
left="120"
top="195"
max_length="254"
name="fl_description_edit"
width="115"
word_wrap="true">