mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-22 01:34:21 +00:00
New class StringPool. Removed the class var::identifier from its parent class, and renamed it "Identifier" - I've left a typedef in var to allow old code to still work, but I'll remove this at some point, so please switch to using the new classname directly. Jucer development.
This commit is contained in:
parent
ed97872c1a
commit
b46e94cffd
90 changed files with 2839 additions and 1733 deletions
|
|
@ -3879,6 +3879,62 @@ END_JUCE_NAMESPACE
|
|||
/*** End of inlined file: juce_PropertySet.cpp ***/
|
||||
|
||||
|
||||
/*** Start of inlined file: juce_Identifier.cpp ***/
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
|
||||
class Identifier::Pool : public DeletedAtShutdown
|
||||
{
|
||||
public:
|
||||
Pool() {}
|
||||
~Pool() {}
|
||||
|
||||
StringPool pool;
|
||||
|
||||
juce_DeclareSingleton_SingleThreaded_Minimal (Pool);
|
||||
};
|
||||
|
||||
juce_ImplementSingleton_SingleThreaded (Identifier::Pool);
|
||||
|
||||
Identifier::Identifier() throw()
|
||||
: name (0)
|
||||
{
|
||||
}
|
||||
|
||||
Identifier::Identifier (const Identifier& other) throw()
|
||||
: name (other.name)
|
||||
{
|
||||
}
|
||||
|
||||
Identifier& Identifier::operator= (const Identifier& other) throw()
|
||||
{
|
||||
name = other.name;
|
||||
return *this;
|
||||
}
|
||||
|
||||
Identifier::Identifier (const String& name_)
|
||||
: name (Identifier::Pool::getInstance()->pool.getPooledString (name_))
|
||||
{
|
||||
/* An Identifier string must be suitable for use as a script variable or XML
|
||||
attribute, so it can only contain this limited set of characters.. */
|
||||
jassert (name_.containsOnly ("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_") && name_.isNotEmpty());
|
||||
}
|
||||
|
||||
Identifier::Identifier (const char* const name_)
|
||||
: name (Identifier::Pool::getInstance()->pool.getPooledString (name_))
|
||||
{
|
||||
/* An Identifier string must be suitable for use as a script variable or XML
|
||||
attribute, so it can only contain this limited set of characters.. */
|
||||
jassert (toString().containsOnly ("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_") && toString().isNotEmpty());
|
||||
}
|
||||
|
||||
Identifier::~Identifier()
|
||||
{
|
||||
}
|
||||
|
||||
END_JUCE_NAMESPACE
|
||||
/*** End of inlined file: juce_Identifier.cpp ***/
|
||||
|
||||
|
||||
/*** Start of inlined file: juce_Variant.cpp ***/
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
|
||||
|
|
@ -4129,7 +4185,7 @@ const var var::readFromStream (InputStream& input)
|
|||
return var::null;
|
||||
}
|
||||
|
||||
const var var::operator[] (const var::identifier& propertyName) const
|
||||
const var var::operator[] (const Identifier& propertyName) const
|
||||
{
|
||||
if (type == objectType && value.objectValue != 0)
|
||||
return value.objectValue->getProperty (propertyName);
|
||||
|
|
@ -4137,7 +4193,7 @@ const var var::operator[] (const var::identifier& propertyName) const
|
|||
return var::null;
|
||||
}
|
||||
|
||||
const var var::invoke (const var::identifier& method, const var* arguments, int numArguments) const
|
||||
const var var::invoke (const Identifier& method, const var* arguments, int numArguments) const
|
||||
{
|
||||
if (type == objectType && value.objectValue != 0)
|
||||
return value.objectValue->invokeMethod (method, arguments, numArguments);
|
||||
|
|
@ -4158,67 +4214,40 @@ const var var::invoke (const var& targetObject, const var* arguments, int numArg
|
|||
return var::null;
|
||||
}
|
||||
|
||||
const var var::call (const var::identifier& method) const
|
||||
const var var::call (const Identifier& method) const
|
||||
{
|
||||
return invoke (method, 0, 0);
|
||||
}
|
||||
|
||||
const var var::call (const var::identifier& method, const var& arg1) const
|
||||
const var var::call (const Identifier& method, const var& arg1) const
|
||||
{
|
||||
return invoke (method, &arg1, 1);
|
||||
}
|
||||
|
||||
const var var::call (const var::identifier& method, const var& arg1, const var& arg2) const
|
||||
const var var::call (const Identifier& method, const var& arg1, const var& arg2) const
|
||||
{
|
||||
var args[] = { arg1, arg2 };
|
||||
return invoke (method, args, 2);
|
||||
}
|
||||
|
||||
const var var::call (const var::identifier& method, const var& arg1, const var& arg2, const var& arg3)
|
||||
const var var::call (const Identifier& method, const var& arg1, const var& arg2, const var& arg3)
|
||||
{
|
||||
var args[] = { arg1, arg2, arg3 };
|
||||
return invoke (method, args, 3);
|
||||
}
|
||||
|
||||
const var var::call (const var::identifier& method, const var& arg1, const var& arg2, const var& arg3, const var& arg4) const
|
||||
const var var::call (const Identifier& method, const var& arg1, const var& arg2, const var& arg3, const var& arg4) const
|
||||
{
|
||||
var args[] = { arg1, arg2, arg3, arg4 };
|
||||
return invoke (method, args, 4);
|
||||
}
|
||||
|
||||
const var var::call (const var::identifier& method, const var& arg1, const var& arg2, const var& arg3, const var& arg4, const var& arg5) const
|
||||
const var var::call (const Identifier& method, const var& arg1, const var& arg2, const var& arg3, const var& arg4, const var& arg5) const
|
||||
{
|
||||
var args[] = { arg1, arg2, arg3, arg4, arg5 };
|
||||
return invoke (method, args, 5);
|
||||
}
|
||||
|
||||
var::identifier::identifier() throw()
|
||||
: hashCode (0)
|
||||
{
|
||||
}
|
||||
|
||||
var::identifier::identifier (const String& name_)
|
||||
: name (name_),
|
||||
hashCode (name_.hashCode())
|
||||
{
|
||||
/* An identifier string must be suitable for use as a script variable or XML
|
||||
attribute, so it can only contain this limited set of characters.. */
|
||||
jassert (name.containsOnly ("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_") && name.isNotEmpty());
|
||||
}
|
||||
|
||||
var::identifier::identifier (const char* const name_)
|
||||
: name (name_),
|
||||
hashCode (name.hashCode())
|
||||
{
|
||||
/* An identifier string must be suitable for use as a script variable or XML
|
||||
attribute, so it can only contain this limited set of characters.. */
|
||||
jassert (name.containsOnly ("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_") && name.isNotEmpty());
|
||||
}
|
||||
|
||||
var::identifier::~identifier()
|
||||
{
|
||||
}
|
||||
|
||||
END_JUCE_NAMESPACE
|
||||
/*** End of inlined file: juce_Variant.cpp ***/
|
||||
|
||||
|
|
@ -4230,7 +4259,7 @@ NamedValueSet::NamedValue::NamedValue() throw()
|
|||
{
|
||||
}
|
||||
|
||||
inline NamedValueSet::NamedValue::NamedValue (const var::identifier& name_, const var& value_)
|
||||
inline NamedValueSet::NamedValue::NamedValue (const Identifier& name_, const var& value_)
|
||||
: name (name_), value (value_)
|
||||
{
|
||||
}
|
||||
|
|
@ -4259,7 +4288,7 @@ int NamedValueSet::size() const throw()
|
|||
return values.size();
|
||||
}
|
||||
|
||||
const var& NamedValueSet::operator[] (const var::identifier& name) const
|
||||
const var& NamedValueSet::operator[] (const Identifier& name) const
|
||||
{
|
||||
for (int i = values.size(); --i >= 0;)
|
||||
{
|
||||
|
|
@ -4272,13 +4301,13 @@ const var& NamedValueSet::operator[] (const var::identifier& name) const
|
|||
return var::null;
|
||||
}
|
||||
|
||||
const var NamedValueSet::getWithDefault (const var::identifier& name, const var& defaultReturnValue) const
|
||||
const var NamedValueSet::getWithDefault (const Identifier& name, const var& defaultReturnValue) const
|
||||
{
|
||||
const var* v = getItem (name);
|
||||
return v != 0 ? *v : defaultReturnValue;
|
||||
}
|
||||
|
||||
var* NamedValueSet::getItem (const var::identifier& name) const
|
||||
var* NamedValueSet::getItem (const Identifier& name) const
|
||||
{
|
||||
for (int i = values.size(); --i >= 0;)
|
||||
{
|
||||
|
|
@ -4291,7 +4320,7 @@ var* NamedValueSet::getItem (const var::identifier& name) const
|
|||
return 0;
|
||||
}
|
||||
|
||||
bool NamedValueSet::set (const var::identifier& name, const var& newValue)
|
||||
bool NamedValueSet::set (const Identifier& name, const var& newValue)
|
||||
{
|
||||
for (int i = values.size(); --i >= 0;)
|
||||
{
|
||||
|
|
@ -4311,12 +4340,12 @@ bool NamedValueSet::set (const var::identifier& name, const var& newValue)
|
|||
return true;
|
||||
}
|
||||
|
||||
bool NamedValueSet::contains (const var::identifier& name) const
|
||||
bool NamedValueSet::contains (const Identifier& name) const
|
||||
{
|
||||
return getItem (name) != 0;
|
||||
}
|
||||
|
||||
bool NamedValueSet::remove (const var::identifier& name)
|
||||
bool NamedValueSet::remove (const Identifier& name)
|
||||
{
|
||||
for (int i = values.size(); --i >= 0;)
|
||||
{
|
||||
|
|
@ -4330,7 +4359,7 @@ bool NamedValueSet::remove (const var::identifier& name)
|
|||
return false;
|
||||
}
|
||||
|
||||
const var::identifier NamedValueSet::getName (const int index) const
|
||||
const Identifier NamedValueSet::getName (const int index) const
|
||||
{
|
||||
jassert (((unsigned int) index) < (unsigned int) values.size());
|
||||
return values [index].name;
|
||||
|
|
@ -4362,40 +4391,40 @@ DynamicObject::~DynamicObject()
|
|||
{
|
||||
}
|
||||
|
||||
bool DynamicObject::hasProperty (const var::identifier& propertyName) const
|
||||
bool DynamicObject::hasProperty (const Identifier& propertyName) const
|
||||
{
|
||||
var* const v = properties.getItem (propertyName);
|
||||
return v != 0 && ! v->isMethod();
|
||||
}
|
||||
|
||||
const var DynamicObject::getProperty (const var::identifier& propertyName) const
|
||||
const var DynamicObject::getProperty (const Identifier& propertyName) const
|
||||
{
|
||||
return properties [propertyName];
|
||||
}
|
||||
|
||||
void DynamicObject::setProperty (const var::identifier& propertyName, const var& newValue)
|
||||
void DynamicObject::setProperty (const Identifier& propertyName, const var& newValue)
|
||||
{
|
||||
properties.set (propertyName, newValue);
|
||||
}
|
||||
|
||||
void DynamicObject::removeProperty (const var::identifier& propertyName)
|
||||
void DynamicObject::removeProperty (const Identifier& propertyName)
|
||||
{
|
||||
properties.remove (propertyName);
|
||||
}
|
||||
|
||||
bool DynamicObject::hasMethod (const var::identifier& methodName) const
|
||||
bool DynamicObject::hasMethod (const Identifier& methodName) const
|
||||
{
|
||||
return getProperty (methodName).isMethod();
|
||||
}
|
||||
|
||||
const var DynamicObject::invokeMethod (const var::identifier& methodName,
|
||||
const var DynamicObject::invokeMethod (const Identifier& methodName,
|
||||
const var* parameters,
|
||||
int numParameters)
|
||||
{
|
||||
return properties [methodName].invoke (var (this), parameters, numParameters);
|
||||
}
|
||||
|
||||
void DynamicObject::setMethod (const var::identifier& name,
|
||||
void DynamicObject::setMethod (const Identifier& name,
|
||||
var::MethodFunction methodFunction)
|
||||
{
|
||||
properties.set (name, var (methodFunction));
|
||||
|
|
@ -6673,6 +6702,39 @@ bool File::replaceWithText (const String& textToWrite,
|
|||
return tempFile.overwriteTargetFileWithTemporary();
|
||||
}
|
||||
|
||||
bool File::hasIdenticalContentTo (const File& other) const
|
||||
{
|
||||
if (other == *this)
|
||||
return true;
|
||||
|
||||
if (getSize() == other.getSize() && existsAsFile() && other.existsAsFile())
|
||||
{
|
||||
FileInputStream in1 (*this), in2 (other);
|
||||
|
||||
const int bufferSize = 4096;
|
||||
HeapBlock <char> buffer1, buffer2;
|
||||
buffer1.malloc (bufferSize);
|
||||
buffer2.malloc (bufferSize);
|
||||
|
||||
for (;;)
|
||||
{
|
||||
const int num1 = in1.read (buffer1, bufferSize);
|
||||
const int num2 = in2.read (buffer2, bufferSize);
|
||||
|
||||
if (num1 != num2)
|
||||
break;
|
||||
|
||||
if (num1 <= 0)
|
||||
return true;
|
||||
|
||||
if (memcmp (buffer1, buffer2, num1) != 0)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
const String File::createLegalPathName (const String& original)
|
||||
{
|
||||
String s (original);
|
||||
|
|
@ -10079,12 +10141,17 @@ bool CharacterFunctions::isLetterOrDigit (const juce_wchar character) throw()
|
|||
|
||||
int CharacterFunctions::getHexDigitValue (const juce_wchar digit) throw()
|
||||
{
|
||||
if (digit >= '0' && digit <= '9')
|
||||
return digit - '0';
|
||||
else if (digit >= 'a' && digit <= 'f')
|
||||
return digit - ('a' - 10);
|
||||
else if (digit >= 'A' && digit <= 'F')
|
||||
return digit - ('A' - 10);
|
||||
unsigned int d = digit - '0';
|
||||
if (d < (unsigned int) 10)
|
||||
return (int) d;
|
||||
|
||||
d += '0' - 'a';
|
||||
if (d < (unsigned int) 6)
|
||||
return (int) d + 10;
|
||||
|
||||
d += 'a' - 'A';
|
||||
if (d < (unsigned int) 6)
|
||||
return (int) d + 10;
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
|
@ -12955,6 +13022,84 @@ END_JUCE_NAMESPACE
|
|||
/*** End of inlined file: juce_StringPairArray.cpp ***/
|
||||
|
||||
|
||||
/*** Start of inlined file: juce_StringPool.cpp ***/
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
|
||||
StringPool::StringPool() throw() {}
|
||||
StringPool::~StringPool() {}
|
||||
|
||||
template <class StringType>
|
||||
static const juce_wchar* getPooledStringFromArray (Array<String>& strings, StringType newString)
|
||||
{
|
||||
int start = 0;
|
||||
int end = strings.size();
|
||||
|
||||
for (;;)
|
||||
{
|
||||
if (start >= end)
|
||||
{
|
||||
jassert (start <= end);
|
||||
strings.insert (start, newString);
|
||||
return strings.getReference (start);
|
||||
}
|
||||
else
|
||||
{
|
||||
const String& startString = strings.getReference (start);
|
||||
|
||||
if (startString == newString)
|
||||
return startString;
|
||||
|
||||
const int halfway = (start + end) >> 1;
|
||||
|
||||
if (halfway == start)
|
||||
{
|
||||
if (startString.compare (newString) < 0)
|
||||
++start;
|
||||
|
||||
strings.insert (start, newString);
|
||||
return strings.getReference (start);
|
||||
}
|
||||
|
||||
const int comp = strings.getReference (halfway).compare (newString);
|
||||
|
||||
if (comp == 0)
|
||||
return strings.getReference (halfway);
|
||||
else if (comp < 0)
|
||||
start = halfway;
|
||||
else
|
||||
end = halfway;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const juce_wchar* StringPool::getPooledString (const String& s)
|
||||
{
|
||||
if (s.isEmpty())
|
||||
return String::empty;
|
||||
|
||||
return getPooledStringFromArray (strings, s);
|
||||
}
|
||||
|
||||
const juce_wchar* StringPool::getPooledString (const char* const s)
|
||||
{
|
||||
if (s == 0 || *s == 0)
|
||||
return String::empty;
|
||||
|
||||
return getPooledStringFromArray (strings, s);
|
||||
}
|
||||
|
||||
const juce_wchar* StringPool::getPooledString (const juce_wchar* const s)
|
||||
{
|
||||
if (s == 0 || *s == 0)
|
||||
return String::empty;
|
||||
|
||||
return getPooledStringFromArray (strings, s);
|
||||
}
|
||||
|
||||
END_JUCE_NAMESPACE
|
||||
/*** End of inlined file: juce_StringPool.cpp ***/
|
||||
|
||||
|
||||
/*** Start of inlined file: juce_XmlDocument.cpp ***/
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
|
||||
|
|
@ -15811,7 +15956,7 @@ BEGIN_JUCE_NAMESPACE
|
|||
class ValueTree::SetPropertyAction : public UndoableAction
|
||||
{
|
||||
public:
|
||||
SetPropertyAction (const SharedObjectPtr& target_, const var::identifier& name_,
|
||||
SetPropertyAction (const SharedObjectPtr& target_, const Identifier& name_,
|
||||
const var& newValue_, const var& oldValue_,
|
||||
const bool isAddingNewProperty_, const bool isDeletingProperty_)
|
||||
: target (target_), name (name_), newValue (newValue_), oldValue (oldValue_),
|
||||
|
|
@ -15866,7 +16011,7 @@ public:
|
|||
|
||||
private:
|
||||
const SharedObjectPtr target;
|
||||
const var::identifier name;
|
||||
const Identifier name;
|
||||
const var newValue;
|
||||
var oldValue;
|
||||
const bool isAddingNewProperty : 1, isDeletingProperty : 1;
|
||||
|
|
@ -15979,7 +16124,7 @@ private:
|
|||
MoveChildAction& operator= (const MoveChildAction&);
|
||||
};
|
||||
|
||||
ValueTree::SharedObject::SharedObject (const String& type_)
|
||||
ValueTree::SharedObject::SharedObject (const Identifier& type_)
|
||||
: type (type_), parent (0)
|
||||
{
|
||||
}
|
||||
|
|
@ -16008,7 +16153,7 @@ ValueTree::SharedObject::~SharedObject()
|
|||
}
|
||||
}
|
||||
|
||||
void ValueTree::SharedObject::sendPropertyChangeMessage (ValueTree& tree, const var::identifier& property)
|
||||
void ValueTree::SharedObject::sendPropertyChangeMessage (ValueTree& tree, const Identifier& property)
|
||||
{
|
||||
for (int i = valueTreesWithListeners.size(); --i >= 0;)
|
||||
{
|
||||
|
|
@ -16018,7 +16163,7 @@ void ValueTree::SharedObject::sendPropertyChangeMessage (ValueTree& tree, const
|
|||
}
|
||||
}
|
||||
|
||||
void ValueTree::SharedObject::sendPropertyChangeMessage (const var::identifier& property)
|
||||
void ValueTree::SharedObject::sendPropertyChangeMessage (const Identifier& property)
|
||||
{
|
||||
ValueTree tree (this);
|
||||
ValueTree::SharedObject* t = this;
|
||||
|
|
@ -16072,17 +16217,17 @@ void ValueTree::SharedObject::sendParentChangeMessage()
|
|||
}
|
||||
}
|
||||
|
||||
const var& ValueTree::SharedObject::getProperty (const var::identifier& name) const
|
||||
const var& ValueTree::SharedObject::getProperty (const Identifier& name) const
|
||||
{
|
||||
return properties [name];
|
||||
}
|
||||
|
||||
const var ValueTree::SharedObject::getProperty (const var::identifier& name, const var& defaultReturnValue) const
|
||||
const var ValueTree::SharedObject::getProperty (const Identifier& name, const var& defaultReturnValue) const
|
||||
{
|
||||
return properties.getWithDefault (name, defaultReturnValue);
|
||||
}
|
||||
|
||||
void ValueTree::SharedObject::setProperty (const var::identifier& name, const var& newValue, UndoManager* const undoManager)
|
||||
void ValueTree::SharedObject::setProperty (const Identifier& name, const var& newValue, UndoManager* const undoManager)
|
||||
{
|
||||
if (undoManager == 0)
|
||||
{
|
||||
|
|
@ -16105,12 +16250,12 @@ void ValueTree::SharedObject::setProperty (const var::identifier& name, const va
|
|||
}
|
||||
}
|
||||
|
||||
bool ValueTree::SharedObject::hasProperty (const var::identifier& name) const
|
||||
bool ValueTree::SharedObject::hasProperty (const Identifier& name) const
|
||||
{
|
||||
return properties.contains (name);
|
||||
}
|
||||
|
||||
void ValueTree::SharedObject::removeProperty (const var::identifier& name, UndoManager* const undoManager)
|
||||
void ValueTree::SharedObject::removeProperty (const Identifier& name, UndoManager* const undoManager)
|
||||
{
|
||||
if (undoManager == 0)
|
||||
{
|
||||
|
|
@ -16130,7 +16275,7 @@ void ValueTree::SharedObject::removeAllProperties (UndoManager* const undoManage
|
|||
{
|
||||
while (properties.size() > 0)
|
||||
{
|
||||
const var::identifier name (properties.getName (properties.size() - 1));
|
||||
const Identifier name (properties.getName (properties.size() - 1));
|
||||
properties.remove (name);
|
||||
sendPropertyChangeMessage (name);
|
||||
}
|
||||
|
|
@ -16142,7 +16287,7 @@ void ValueTree::SharedObject::removeAllProperties (UndoManager* const undoManage
|
|||
}
|
||||
}
|
||||
|
||||
ValueTree ValueTree::SharedObject::getChildWithName (const String& typeToMatch) const
|
||||
ValueTree ValueTree::SharedObject::getChildWithName (const Identifier& typeToMatch) const
|
||||
{
|
||||
for (int i = 0; i < children.size(); ++i)
|
||||
if (children.getUnchecked(i)->type == typeToMatch)
|
||||
|
|
@ -16151,7 +16296,7 @@ ValueTree ValueTree::SharedObject::getChildWithName (const String& typeToMatch)
|
|||
return ValueTree::invalid;
|
||||
}
|
||||
|
||||
ValueTree ValueTree::SharedObject::getChildWithProperty (const var::identifier& propertyName, const var& propertyValue) const
|
||||
ValueTree ValueTree::SharedObject::getChildWithProperty (const Identifier& propertyName, const var& propertyValue) const
|
||||
{
|
||||
for (int i = 0; i < children.size(); ++i)
|
||||
if (children.getUnchecked(i)->getProperty (propertyName) == propertyValue)
|
||||
|
|
@ -16277,10 +16422,10 @@ ValueTree::ValueTree() throw()
|
|||
|
||||
const ValueTree ValueTree::invalid;
|
||||
|
||||
ValueTree::ValueTree (const String& type_)
|
||||
ValueTree::ValueTree (const Identifier& type_)
|
||||
: object (new ValueTree::SharedObject (type_))
|
||||
{
|
||||
jassert (type_.isNotEmpty()); // All objects should be given a sensible type name!
|
||||
jassert (type_.toString().isNotEmpty()); // All objects should be given a sensible type name!
|
||||
}
|
||||
|
||||
ValueTree::ValueTree (SharedObject* const object_)
|
||||
|
|
@ -16330,14 +16475,14 @@ ValueTree ValueTree::createCopy() const
|
|||
return ValueTree (object != 0 ? new SharedObject (*object) : 0);
|
||||
}
|
||||
|
||||
bool ValueTree::hasType (const String& typeName) const
|
||||
bool ValueTree::hasType (const Identifier& typeName) const
|
||||
{
|
||||
return object != 0 && object->type == typeName;
|
||||
}
|
||||
|
||||
const String ValueTree::getType() const
|
||||
{
|
||||
return object != 0 ? object->type : String::empty;
|
||||
return object != 0 ? object->type.toString() : String::empty;
|
||||
}
|
||||
|
||||
ValueTree ValueTree::getParent() const
|
||||
|
|
@ -16345,35 +16490,35 @@ ValueTree ValueTree::getParent() const
|
|||
return ValueTree (object != 0 ? object->parent : (SharedObject*) 0);
|
||||
}
|
||||
|
||||
const var& ValueTree::operator[] (const var::identifier& name) const
|
||||
const var& ValueTree::operator[] (const Identifier& name) const
|
||||
{
|
||||
return object == 0 ? var::null : object->getProperty (name);
|
||||
}
|
||||
|
||||
const var& ValueTree::getProperty (const var::identifier& name) const
|
||||
const var& ValueTree::getProperty (const Identifier& name) const
|
||||
{
|
||||
return object == 0 ? var::null : object->getProperty (name);
|
||||
}
|
||||
|
||||
const var ValueTree::getProperty (const var::identifier& name, const var& defaultReturnValue) const
|
||||
const var ValueTree::getProperty (const Identifier& name, const var& defaultReturnValue) const
|
||||
{
|
||||
return object == 0 ? defaultReturnValue : object->getProperty (name, defaultReturnValue);
|
||||
}
|
||||
|
||||
void ValueTree::setProperty (const var::identifier& name, const var& newValue, UndoManager* const undoManager)
|
||||
void ValueTree::setProperty (const Identifier& name, const var& newValue, UndoManager* const undoManager)
|
||||
{
|
||||
jassert (name.name.isNotEmpty());
|
||||
jassert (name.toString().isNotEmpty());
|
||||
|
||||
if (object != 0 && name.name.isNotEmpty())
|
||||
if (object != 0 && name.toString().isNotEmpty())
|
||||
object->setProperty (name, newValue, undoManager);
|
||||
}
|
||||
|
||||
bool ValueTree::hasProperty (const var::identifier& name) const
|
||||
bool ValueTree::hasProperty (const Identifier& name) const
|
||||
{
|
||||
return object != 0 && object->hasProperty (name);
|
||||
}
|
||||
|
||||
void ValueTree::removeProperty (const var::identifier& name, UndoManager* const undoManager)
|
||||
void ValueTree::removeProperty (const Identifier& name, UndoManager* const undoManager)
|
||||
{
|
||||
if (object != 0)
|
||||
object->removeProperty (name, undoManager);
|
||||
|
|
@ -16390,9 +16535,9 @@ int ValueTree::getNumProperties() const
|
|||
return object == 0 ? 0 : object->properties.size();
|
||||
}
|
||||
|
||||
const var::identifier ValueTree::getPropertyName (const int index) const
|
||||
const Identifier ValueTree::getPropertyName (const int index) const
|
||||
{
|
||||
return object == 0 ? var::identifier()
|
||||
return object == 0 ? Identifier()
|
||||
: object->properties.getName (index);
|
||||
}
|
||||
|
||||
|
|
@ -16401,7 +16546,7 @@ class ValueTreePropertyValueSource : public Value::ValueSource,
|
|||
{
|
||||
public:
|
||||
ValueTreePropertyValueSource (const ValueTree& tree_,
|
||||
const var::identifier& property_,
|
||||
const Identifier& property_,
|
||||
UndoManager* const undoManager_)
|
||||
: tree (tree_),
|
||||
property (property_),
|
||||
|
|
@ -16425,7 +16570,7 @@ public:
|
|||
tree.setProperty (property, newValue, undoManager);
|
||||
}
|
||||
|
||||
void valueTreePropertyChanged (ValueTree& treeWhosePropertyHasChanged, const var::identifier& changedProperty)
|
||||
void valueTreePropertyChanged (ValueTree& treeWhosePropertyHasChanged, const Identifier& changedProperty)
|
||||
{
|
||||
if (tree == treeWhosePropertyHasChanged && property == changedProperty)
|
||||
sendChangeMessage (false);
|
||||
|
|
@ -16436,13 +16581,13 @@ public:
|
|||
|
||||
private:
|
||||
ValueTree tree;
|
||||
const var::identifier property;
|
||||
const Identifier property;
|
||||
UndoManager* const undoManager;
|
||||
|
||||
ValueTreePropertyValueSource& operator= (const ValueTreePropertyValueSource&);
|
||||
};
|
||||
|
||||
Value ValueTree::getPropertyAsValue (const var::identifier& name, UndoManager* const undoManager) const
|
||||
Value ValueTree::getPropertyAsValue (const Identifier& name, UndoManager* const undoManager) const
|
||||
{
|
||||
return Value (new ValueTreePropertyValueSource (*this, name, undoManager));
|
||||
}
|
||||
|
|
@ -16457,12 +16602,12 @@ ValueTree ValueTree::getChild (int index) const
|
|||
return ValueTree (object != 0 ? (SharedObject*) object->children [index] : (SharedObject*) 0);
|
||||
}
|
||||
|
||||
ValueTree ValueTree::getChildWithName (const String& type) const
|
||||
ValueTree ValueTree::getChildWithName (const Identifier& type) const
|
||||
{
|
||||
return object != 0 ? object->getChildWithName (type) : ValueTree::invalid;
|
||||
}
|
||||
|
||||
ValueTree ValueTree::getChildWithProperty (const var::identifier& propertyName, const var& propertyValue) const
|
||||
ValueTree ValueTree::getChildWithProperty (const Identifier& propertyName, const var& propertyValue) const
|
||||
{
|
||||
return object != 0 ? object->getChildWithProperty (propertyName, propertyValue) : ValueTree::invalid;
|
||||
}
|
||||
|
|
@ -16528,17 +16673,17 @@ void ValueTree::removeListener (Listener* listener)
|
|||
|
||||
XmlElement* ValueTree::SharedObject::createXml() const
|
||||
{
|
||||
XmlElement* xml = new XmlElement (type);
|
||||
XmlElement* xml = new XmlElement (type.toString());
|
||||
|
||||
int i;
|
||||
for (i = 0; i < properties.size(); ++i)
|
||||
{
|
||||
var::identifier name (properties.getName(i));
|
||||
Identifier name (properties.getName(i));
|
||||
const var& v = properties [name];
|
||||
|
||||
jassert (! v.isObject()); // DynamicObjects can't be stored as XML!
|
||||
|
||||
xml->setAttribute (name.name, v.toString());
|
||||
xml->setAttribute (name.toString(), v.toString());
|
||||
}
|
||||
|
||||
for (i = 0; i < children.size(); ++i)
|
||||
|
|
@ -16579,8 +16724,8 @@ void ValueTree::writeToStream (OutputStream& output)
|
|||
int i;
|
||||
for (i = 0; i < numProps; ++i)
|
||||
{
|
||||
const var::identifier name (getPropertyName(i));
|
||||
output.writeString (name.name);
|
||||
const Identifier name (getPropertyName(i));
|
||||
output.writeString (name.toString());
|
||||
getProperty(name).writeToStream (output);
|
||||
}
|
||||
|
||||
|
|
@ -39985,7 +40130,7 @@ void Component::sendLookAndFeelChange()
|
|||
}
|
||||
}
|
||||
|
||||
static const var::identifier getColourPropertyId (const int colourId)
|
||||
static const Identifier getColourPropertyId (const int colourId)
|
||||
{
|
||||
String s;
|
||||
s.preallocateStorage (18);
|
||||
|
|
@ -40029,9 +40174,9 @@ void Component::copyAllExplicitColoursTo (Component& target) const
|
|||
|
||||
for (int i = properties.size(); --i >= 0;)
|
||||
{
|
||||
const var::identifier name (properties.getName(i));
|
||||
const Identifier name (properties.getName(i));
|
||||
|
||||
if (name.name.startsWith ("jcclr_"))
|
||||
if (name.toString().startsWith ("jcclr_"))
|
||||
if (target.properties.set (name, properties [name]))
|
||||
changed = true;
|
||||
}
|
||||
|
|
@ -50357,7 +50502,7 @@ public:
|
|||
{
|
||||
jassert (row >= 0);
|
||||
|
||||
const var::identifier tagPropertyName ("_tableLastUseNum");
|
||||
const Identifier tagPropertyName ("_tableLastUseNum");
|
||||
const int newTag = Random::getSystemRandom().nextInt();
|
||||
|
||||
const TableHeaderComponent* const header = owner.getHeader();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue