9 #ifndef DISABLE_NODELIB
11 #include "TTFoundationAPI.h"
12 #include "TTAddressItem.h"
14 TTAddressItem::TTAddressItem(
TTSymbol aSymbol, TTAddressItemPtr aParent,
TTBoolean aSelection):
21 this->symbol = aSymbol;
23 this->symbol = kTTSymEmpty;
25 this->parent = aParent;
26 this->options =
new TTList();
27 this->selection = aSelection;
30 TTAddressItem::~TTAddressItem()
36 void TTAddressItem::setSelection(
const TTBoolean newSelectionState,
TTBoolean recursively)
39 if (newSelectionState != this->selection)
40 this->selection = newSelectionState;
44 for (this->begin(); this->end(); this->next())
45 this->current()->setSelection(newSelectionState, recursively);
48 if (newSelectionState && this->parent)
49 this->parent->setSelection(newSelectionState, NO);
52 void TTAddressItem::setParent(
const TTAddressItemPtr newParent)
54 this->parent = newParent;
62 TTAddressItemPtr TTAddressItem::getParent()
67 TTListPtr TTAddressItem::getOptions()
74 return this->selection;
77 TTAddressItemPtr TTAddressItem::getItem(
TTSymbol aSymbol)
79 TTAddressItemPtr anItem = NULL;
82 TTErr err = ((TTListPtr)
this)->find(&TTAddressItemFind, aSymbol.
rawpointer(), found);
85 anItem = TTAddressItemPtr((
TTPtr)found[0]);
90 void TTAddressItem::clear()
93 for (this->begin(); this->end(); this->next())
94 delete this->current();
96 ((TTListPtr)
this)->clear();
98 this->options->clear();
101 TTErr TTAddressItem::append(
TTAddress addressToAppend, TTAddressItemPtr *returnedItem)
103 TTAddressItemPtr anItem =
this;
104 TTAddressItemPtr nextItem;
105 TTList nameInstanceList;
110 for (nameInstanceList.begin(); nameInstanceList.end(); nameInstanceList.next()) {
111 nameInstance = nameInstanceList.current()[0];
113 nextItem = anItem->getItem(nameInstance);
116 nextItem =
new TTAddressItem(nameInstance, anItem);
117 ((TTListPtr)anItem)->append((
TTPtr)nextItem);
123 anItem->options->appendUnique(addressToAppend.
getAttribute());
125 *returnedItem = anItem;
131 TTAddressItemPtr anItem, parentItem;
134 if (!this->find(addressToRemove, &anItem)) {
137 anItem->options->remove(addressToRemove.
getAttribute());
140 if (anItem->options->isEmpty()) {
145 parentItem = anItem->getParent();
146 ((TTListPtr)parentItem)->remove((
TTPtr)anItem);
151 }
while (anItem->isEmpty()) ;
160 TTErr TTAddressItem::find(
TTAddress addressToFind, TTAddressItemPtr *returnedItem)
162 TTAddressItemPtr anItem =
this;
163 TTAddressItemPtr nextItem;
164 TTList nameInstanceList;
170 if (nameInstanceList.isEmpty())
173 for (nameInstanceList.begin(); nameInstanceList.end(); nameInstanceList.next()) {
175 nameInstance = nameInstanceList.current()[0];
177 nextItem = anItem->getItem(nameInstance);
185 if (anItem->options->isEmpty() && addressToFind.
getAttribute() == NO_ATTRIBUTE) {
186 *returnedItem = anItem;
190 if (!anItem->options->findEquals(addressToFind.
getAttribute(), v)) {
192 *returnedItem = anItem;
199 TTAddressItemPtr TTAddressItem::current()
201 TTAddressItemPtr anItem;
203 anItem = TTAddressItemPtr((
TTPtr) ((TTListPtr)
this)->current()[0]);
208 TTErr TTAddressItem::merge(
const TTAddressItemPtr anItemToMerge)
210 TTAddressItemPtr anItem;
216 anItem = this->getItem(anItemToMerge->symbol);
219 anItemToMerge->copy(&anItem);
220 ((TTListPtr)
this)->append((
TTPtr)anItem);
221 anItem->setParent(
this);
222 anItem->options->merge(*this->options);
225 for (anItemToMerge->begin(); anItemToMerge->end(); anItemToMerge->next())
226 anItem->merge(anItemToMerge->current());
231 TTErr TTAddressItem::destroy(
const TTAddressItemPtr anItemToRemove)
233 TTAddressItemPtr anItem;
239 anItem = this->getItem(anItemToRemove->symbol);
243 for (anItem->begin(); anItem->end(); anItem->next())
244 anItem->destroy(anItem->current());
246 if (anItem->isEmpty()) {
247 ((TTListPtr)
this)->remove((
TTPtr)anItem);
257 TTBoolean TTAddressItem::exist(TTAddressItemPtr anItemToCheck, TTAddressItemPtr *returnedItem)
259 TTAddressItemPtr anItem;
260 TTBoolean same = anItemToCheck->getSymbol() == this->symbol;
264 if (anItemToCheck->isEmpty()) {
265 *returnedItem =
this;
269 *returnedItem = NULL;
270 for (anItemToCheck->begin(); anItemToCheck->end(); anItemToCheck->next()) {
271 for (this->begin(); this->end(); this->next()) {
273 same = this->current()->exist(anItemToCheck->current(), &anItem);
281 *returnedItem = anItem;
289 TTErr TTAddressItem::copy(TTAddressItemPtr *anItemCopy)
291 TTAddressItemPtr anItem;
294 *anItemCopy =
new TTAddressItem(this->symbol, NULL, this->selection);
296 for (this->begin(); this->end(); this->next()) {
299 this->current()->copy(&anItem);
301 anItem->setParent(*anItemCopy);
303 (*anItemCopy)->merge(anItem);
308 void TTAddressItem::registerHandler(
TTObject& anObject)
310 this->handlers.appendUnique(anObject);
313 void TTAddressItem::unregisterHandler(
TTObject& anObject)
315 this->handlers.remove(anObject);
318 void TTAddressItem::iterateHandlersSendingMessage(
TTSymbol& messageName)
320 this->handlers.iterateObjectsSendingMessage(messageName);
323 void TTAddressItem::iterateHandlersSendingMessage(
TTSymbol& messageName,
TTValue& aValue)
325 this->handlers.iterateObjectsSendingMessage(messageName, aValue);
330 #pragma mark Some Methods
336 TTAddressItemPtr anItem;
338 anItem = TTAddressItemPtr((
TTPtr)itemValue[0]);
340 found = anItem->getSymbol() ==
TTSymbol(aSymbolBaseToMatch);
bool TTBoolean
Boolean flag, same as Boolean on the Mac.
The TTAddress class is used to represent a string and efficiently pass and compare that string...
Create and use Jamoma object instances.
void * TTPtr
A generic pointer.
TTPtr rawpointer() const
Get the value of the raw pointer into the symbol table.
The TTSymbol class is used to represent a string and efficiently pass and compare that string...
TTErr listNameInstance(TTList &nameInstanceList)
A parsing tool : return a list containing all name.instance part (without any S_SEPARATOR) ...
TTSymbol & getAttribute()
Get the attribute part.
A value was not found when doing a look up for it (in a TTHash, TTList, or other class).
Something went wrong, but what exactly is not known. Typically used for context-specific problems...
TTErr
Jamoma Error Codes Enumeration of error codes that might be returned by any of the TTBlue functions a...
[doxygenAppendixC_copyExample]