PObject * PObjectBroker::MakeObject(const char *type, BMessage *msg) { if (!type) return NULL; if (pApp && BString(type).ICompare("PApplication") == 0) return pApp; PObjectInfo *info = NULL; for (int32 i = 0; i < fObjInfoList->CountItems(); i++) { PObjectInfo *temp = fObjInfoList->ItemAt(i); if (temp->type.ICompare(type) == 0) { info = temp; break; } } if (info) { PObject *obj = msg ? (PObject*)info->arcfunc(msg) : info->createfunc(); fObjectList->AddItem(obj); if (!pApp && obj->GetType().Compare("PApplication") == 0) pApp = obj; return obj; } return NULL; }
int32_t PTextViewCut(void *pobject, void *in, void *out, void *extraData) { if (!pobject || !in || !out) return B_ERROR; PView *parent = static_cast<PView*>(pobject); if (!parent) return B_BAD_TYPE; BTextView *backend = (BTextView*)parent->GetView(); PArgs *inArgs = static_cast<PArgs*>(in); uint64 id = 0; if (inArgs->FindInt64("clipid", (int64*)&id) != B_OK) return B_ERROR; PObject *obj = BROKER->FindObject(id); if (!obj || obj->GetType().ICompare("PClipboard") != 0) return B_BAD_DATA; PClipboard *clip = dynamic_cast<PClipboard*>(obj); if (backend->Window()) backend->Window()->Lock(); backend->Cut(clip->GetBackend()); if (backend->Window()) backend->Window()->Unlock(); return B_OK; }