#include <Debug.h>
#include "PoseList.h"
BPose*
PoseList::FindPose(const node_ref* node, int32* resultingIndex) const
{
int32 count = CountItems();
for (int32 index = 0; index < count; index++) {
BPose* pose = ItemAt(index);
ASSERT(pose->TargetModel());
if (*pose->TargetModel()->NodeRef() == *node) {
if (resultingIndex != NULL)
*resultingIndex = index;
return pose;
}
}
return NULL;
}
BPose*
PoseList::FindPose(const entry_ref* entry, int32* resultingIndex) const
{
int32 count = CountItems();
for (int32 index = 0; index < count; index++) {
BPose* pose = ItemAt(index);
ASSERT(pose->TargetModel());
if (*pose->TargetModel()->EntryRef() == *entry) {
if (resultingIndex != NULL)
*resultingIndex = index;
return pose;
}
}
return NULL;
}
BPose*
PoseList::FindPose(const Model* model, int32* resultingIndex) const
{
return FindPose(model->NodeRef(), resultingIndex);
}
BPose*
PoseList::DeepFindPose(const node_ref* node, int32* resultingIndex) const
{
int32 count = CountItems();
for (int32 index = 0; index < count; index++) {
BPose* pose = ItemAt(index);
Model* model = pose->TargetModel();
if (*model->NodeRef() == *node) {
if (resultingIndex != NULL)
*resultingIndex = index;
return pose;
}
if (model->IsSymLink()) {
model = model->LinkTo();
if (model != NULL && *model->NodeRef() == *node) {
if (resultingIndex != NULL)
*resultingIndex = index;
return pose;
}
}
}
return NULL;
}
PoseList*
PoseList::FindAllPoses(const node_ref* node) const
{
int32 count = CountItems();
PoseList *result = new PoseList(5);
for (int32 index = 0; index < count; index++) {
BPose *pose = ItemAt(index);
Model *model = pose->TargetModel();
if (*model->NodeRef() == *node) {
result->AddItem(pose, 0);
continue;
}
if (!model->IsSymLink())
continue;
model = model->LinkTo();
if (model != NULL && *model->NodeRef() == *node) {
result->AddItem(pose);
continue;
}
if (model == NULL) {
Model model(pose->TargetModel()->EntryRef(), true);
if (*model.NodeRef() == *node)
result->AddItem(pose);
}
}
return result;
}
BPose*
PoseList::FindPoseByFileName(const char* name, int32* _index) const
{
int32 count = CountItems();
for (int32 index = 0; index < count; index++) {
BPose* pose = ItemAt(index);
ASSERT(pose->TargetModel());
if (strcmp(pose->TargetModel()->EntryRef()->name, name) == 0) {
if (_index != NULL)
*_index = index;
return pose;
}
}
return NULL;
}