void ExtensionListView::MessageReceived(BMessage* message) { if (message->WasDropped() && AcceptsDrag(message)) { // create extension list BList list; entry_ref ref; for (int32 index = 0; message->FindRef("refs", index++, &ref) == B_OK; ) { const char* point = strchr(ref.name, '.'); if (point != NULL && point[1]) list.AddItem(strdup(++point)); } merge_extensions(fType, list); // delete extension list for (int32 index = list.CountItems(); index-- > 0;) { free(list.ItemAt(index)); } } else DropTargetListView::MessageReceived(message); }
void SupportedTypeListView::MessageReceived(BMessage* message) { if (message->WasDropped() && AcceptsDrag(message)) { // Add unique types entry_ref ref; for (int32 index = 0; message->FindRef("refs", index++, &ref) == B_OK; ) { BNode node(&ref); BNodeInfo info(&node); if (node.InitCheck() != B_OK || info.InitCheck() != B_OK) continue; // TODO: we could identify the file in case it doesn't have a type... char type[B_MIME_TYPE_LENGTH]; if (info.GetType(type) != B_OK) continue; // check if that type is already in our list bool found = false; for (int32 i = CountItems(); i-- > 0;) { SupportedTypeItem* item = (SupportedTypeItem*)ItemAt(i); if (!strcmp(item->Text(), type)) { found = true; break; } } if (!found) { // add type AddItem(new SupportedTypeItem(type)); } } SortItems(&SupportedTypeItem::Compare); } else DropTargetListView::MessageReceived(message); }