Exemplo n.º 1
0
void LLControlVariable::setValue(const LLSD& new_value, bool saved_value)
{
    if ((*mValidateSignal)(this, new_value) == false)
    {
        // can not set new value, exit
        return;
    }

    LLSD storable_value = getComparableValue(new_value);
    bool value_changed = llsd_compare(getValue(), storable_value) == FALSE;
    if(saved_value)
    {
        // If we're going to save this value, return to default but don't fire
        resetToDefault(false);
        if (llsd_compare(mValues.back(), storable_value) == FALSE)
        {
            mValues.push_back(storable_value);
        }
    }
    else
    {
        // This is a unsaved value. Its needs to reside at
        // mValues[2] (or greater). It must not affect
        // the result of getSaveValue()
        if (llsd_compare(mValues.back(), storable_value) == FALSE)
        {
            while(mValues.size() > 2)
            {
                // Remove any unsaved values.
                mValues.pop_back();
            }

            if(mValues.size() < 2)
            {
                // Add the default to the 'save' value.
                mValues.push_back(mValues[0]);
            }

            // Add the 'un-save' value.
            mValues.push_back(storable_value);
        }
    }


    if(value_changed)
    {
        if(getCOAActive() == this)
            (*mCommitSignal)(this,storable_value);
    }
}
bool LLControlVariable::isSane()
{
	if (mSanityType <= 0)
	{
		return true;
	}

	// it's the default value, or we can't check sanity, assume it's sane
	if (mValues.size() < 2 || !mValues[1] || mValues[1].isUndefined())
	{
		return true;
	}

	bool sanity = false;

	switch (mSanityType)
	{
		case SANITY_TYPE_EQUALS:
			sanity = llsd_compare(mValues[1], mSanityValues[0]);
			break;
		case SANITY_TYPE_NOT_EQUALS:
			sanity = !llsd_compare(mValues[1], mSanityValues[0]);
			break;
		case SANITY_TYPE_LESS_THAN:
			sanity = (mValues[1].asReal() < mSanityValues[0].asReal());
			break;
		case SANITY_TYPE_GREATER_THAN:
			sanity = (mValues[1].asReal() > mSanityValues[0].asReal());
			break;
		case SANITY_TYPE_LESS_THAN_EQUALS:
			sanity = (mValues[1].asReal() <= mSanityValues[0].asReal());
			break;
		case SANITY_TYPE_GREATER_THAN_EQUALS:
			sanity = (mValues[1].asReal() >= mSanityValues[0].asReal());
			break;
		case SANITY_TYPE_BETWEEN:
			sanity = (mValues[1].asReal() >= mSanityValues[0].asReal() && mValues[1].asReal() <= mSanityValues[1].asReal());
			break;
		case SANITY_TYPE_NOT_BETWEEN:
			sanity = (mValues[1].asReal() <= mSanityValues[0].asReal() || mValues[1].asReal() >= mSanityValues[1].asReal());
			break;
		case SANITY_TYPE_NONE:
			sanity = true;
			break;
		default:
			sanity = false;
	}

	return sanity;
}
Exemplo n.º 3
0
void LLControlVariable::setDefaultValue(const LLSD& value)
{
	// Set the control variables value and make it 
	// the default value. If the active value is changed,
	// send the signal.
	// *NOTE: Default values are not saved, only read.

	LLSD comparable_value = getComparableValue(value);
	bool value_changed = (llsd_compare(getValue(), comparable_value) == FALSE);
	resetToDefault(false);
	mValues[0] = comparable_value;
	if(value_changed)
	{
		firePropertyChanged();
	}
}
Exemplo n.º 4
0
bool LLControlVariable::shouldSave(bool nondefault_only)
{
	// This method is used to decide whether we should save a given
	// variable. Two of the three values of mPersist are easy.
	if (mPersist == PERSIST_NO)
		return false;

	if (mPersist == PERSIST_ALWAYS)
		return true;

	// PERSIST_NONDFT
	// If caller doesn't need us to filter, just save.
	if (! nondefault_only)
		return true;

	// PERSIST_NONDFT: caller only wants us to save this variable if its value
	// differs from default.
	if (isDefault())                // never been altered
		return false;

	// We've set at least one other value: compare it to default. Save only if
	// they differ.
	return ! llsd_compare(getSaveValue(), getDefault());
}
Exemplo n.º 5
0
bool LLControlVariable::isSaveValueDefault()
{
    return (mValues.size() ==  1)
           || ((mValues.size() > 1) && llsd_compare(mValues[1], mValues[0]));
}