void OpenWithPoseView::CreatePoses(Model **models, PoseInfo *poseInfoArray, int32 count, BPose **resultingPoses, bool insertionSort, int32 *lastPoseIndexPtr, BRect *boundsPtr, bool forceDraw) { // overridden to try to select the preferred handling app _inherited::CreatePoses(models, poseInfoArray, count, resultingPoses, insertionSort, lastPoseIndexPtr, boundsPtr, forceDraw); if (resultingPoses) for (int32 index = 0; index < count; index++) if (resultingPoses[index] && fHaveCommonPreferredApp && *(models[index]->EntryRef()) == fPreferredRef) // this is our preferred app, select it's pose SelectPose(resultingPoses[index], IndexOfPose(resultingPoses[index])); }
bool BPoseView::GetProperty(BMessage *_SCRIPTING_ONLY(specifier), int32 _SCRIPTING_ONLY(form), const char *_SCRIPTING_ONLY(property), BMessage *_SCRIPTING_ONLY(reply)) { #if _SUPPORTS_FEATURE_SCRIPTING // PRINT(("GetProperty %s\n", property)); bool handled = false; status_t error = B_OK; if (strcmp(property, kPropertyPath) == 0) { if (form == B_DIRECT_SPECIFIER) { handled = true; if (!TargetModel()) error = B_NOT_A_DIRECTORY; else reply->AddRef("result", TargetModel()->EntryRef()); } } else if (strcmp(property, kPropertySelection) == 0) { int32 count = fSelectionList->CountItems(); switch (form) { case B_DIRECT_SPECIFIER: // return entries of all poses in selection for (int32 index = 0; index < count; index++) reply->AddRef("result", fSelectionList->ItemAt(index)-> TargetModel()->EntryRef()); handled = true; break; case kPreviousSpecifier: case kNextSpecifier: { // return entry and index of selected pose before or after // specified pose entry_ref ref; if (specifier->FindRef("data", &ref) != B_OK) break; int32 poseIndex; BPose *pose = FindPose(&ref, &poseIndex); for (;;) { if (form == (int32)kPreviousSpecifier) pose = PoseAtIndex(--poseIndex); else if (form == (int32)kNextSpecifier) pose = PoseAtIndex(++poseIndex); if (!pose) { error = B_ENTRY_NOT_FOUND; break; } if (pose->IsSelected()) { reply->AddRef("result", pose->TargetModel()->EntryRef()); reply->AddInt32("index", IndexOfPose(pose)); break; } } handled = true; break; } } } else if (strcmp(property, kPropertyEntry) == 0) { int32 count = fPoseList->CountItems(); switch (form) { case B_DIRECT_SPECIFIER: // return all entries of all poses in PoseView for (int32 index = 0; index < count; index++) reply->AddRef("result", PoseAtIndex(index)->TargetModel()->EntryRef()); handled = true; break; case B_INDEX_SPECIFIER: { // return entry at index int32 index; if (specifier->FindInt32("index", &index) != B_OK) break; if (!PoseAtIndex(index)) { error = B_BAD_INDEX; handled = true; break; } reply->AddRef("result", PoseAtIndex(index)->TargetModel()->EntryRef()); handled = true; break; } case kPreviousSpecifier: case kNextSpecifier: { // return entry and index of pose before or after specified pose entry_ref ref; if (specifier->FindRef("data", &ref) != B_OK) break; int32 tmp; BPose *pose = FindPose(&ref, form, &tmp); if (!pose) { error = B_ENTRY_NOT_FOUND; handled = true; break; } reply->AddRef("result", pose->TargetModel()->EntryRef()); reply->AddInt32("index", IndexOfPose(pose)); handled = true; break; } } } if (error != B_OK) reply->AddInt32("error", error); return handled; #else return false; #endif }