У меня есть панель Flex в InDesign, из которой я перетаскиваю URL. Если я добавлю этот URL-адрес в текстовый редактор или веб-браузер, он будет работать. Но когда я пытаюсь добавить его в свой документ InDesign, это становится немного сложнее.
Я реализовал подкласс CDragDropTargetFlavorHelper. Капля отлично работает на Windows. Но на Mac у меня есть проблемы в методе CouldAcceptTypes:
DragDrop::TargetResponse AutocatDNDCustomFlavorHelper::CouldAcceptTypes(const DragDropTarget* target, DataObjectIterator* dataIter, const IDragDropSource* fromSource, const IDragDropController* controller) const
{
if (0 != dataIter && 0 != target)
{
DataExchangeResponse response = dataIter->FlavorExistsWithPriorityInAllObjects(kURLDExternalFlavor);
if (response.CanDo())
{
...
}
}
}
Проблема в том, что response.canDo () отвечает kTrue в Windows, но kFalse в Mac. Я пытался изучить содержимое dataIter, но вызов dataIter-> First () возвращает ноль. Я пытался контроллер-> GetItemCount (), который возвращает 1. Но если я пытаюсь контроллер-> GetDragItem (1), я получаю нулевой указатель. У меня есть впечатление, что нет пункта. Тем не менее, как я уже сказал, падение работает на другом приложении, кроме InDesign.
Это проблема интернализации? Или что-то другое ? Это позволило мне высохнуть.
Заранее спасибо
-------------------------- РЕДАКТИРОВАТЬ -------------------- ---------------
Я решил эту проблему, но обнаружил другую. Аромат, отправленный гибкой панелью, был изменен, так что теперь это текстовый, а не URL-адрес. Мой метод canAcceptType теперь работает:
DragDrop::TargetResponse AutocatDNDCustomFlavorHelper::CouldAcceptTypes(const DragDropTarget* target, DataObjectIterator* dataIter, const IDragDropSource* fromSource, const IDragDropController* controller) const
{
if (0 != dataIter && 0 != target)
{
// Check for URL Flavor in the drag
DataExchangeResponse response = dataIter->FlavorExistsWithPriorityInAllObjects(kTEXTExternalFlavor);
if (response.CanDo())
{
return DragDrop::TargetResponse(response, DragDrop::kDropWillCopy);
}
}
return DragDrop::kWontAcceptTargetResponse;
}
Проблема теперь в методе ProcessDragDropCommand. Вот код:
ErrorCode AutocatDNDCustomFlavorHelper::ProcessDragDropCommand(IDragDropTarget* target, IDragDropController* controller, DragDrop::eCommandType action)
{
// retrieve drop data
IPMDataObject* dragDataObject = controller->GetDragItem(1);
uint32 dataSize = dragDataObject->GetSizeOfFlavorData(kTEXTExternalFlavor) ;
...
}
Проблема в том, что получаемый IMPDataObject равен нулю. Там нет элемента в контроллере. Однако в методе CouldAcceptTypes, в DataObjectIterator, были элементы. Итак, где мои вещи?
Я пытался использовать пользовательский CDataExchangeHandlerFor, но не мог понять, для чего его использование. Это все равно не сработало.
У кого-нибудь есть идеи?
С уважением,
Рэй