QModelIndex InventoryItemModel::parent(const QModelIndex &index) const { if (!index.isValid()) return QModelIndex(); AbstractInventoryItem *childItem = GetItem(index); assert(childItem); InventoryFolder *parentItem = static_cast<InventoryFolder *>(childItem->GetParent()); if (parentItem == static_cast<InventoryFolder *>(dataModel_->GetRoot())) return QModelIndex(); return createIndex(parentItem->Row(), 0, reinterpret_cast<void *>(static_cast<AbstractInventoryItem*>(parentItem))); /* if (!index.isValid()) return QModelIndex(); TreeItem *childItem = getItem(index); TreeItem *parentItem = childItem->parent(); if (parentItem == rootItem) return QModelIndex(); return createIndex(parentItem->childNumber(), 0, parentItem); */ }
void InventoryTreeView::dragMoveEvent(QDragMoveEvent *event) { if (event->mimeData()->hasFormat("application/vnd.inventory.item")) { if (event->source() == this) { InventoryItemModel *itemModel = checked_static_cast<InventoryItemModel *>(model()); assert(itemModel); AbstractInventoryItem *draggedItem = itemModel->GetItem(selectionModel()->currentIndex()); assert(draggedItem); QModelIndex destIndex = indexAt(event->pos()); if (!destIndex.isValid()) { event->ignore(); return; } AbstractInventoryItem *destItem = 0; if (itemModel->GetItem(destIndex)->GetItemType() == AbstractInventoryItem::Type_Asset) destItem = itemModel->GetItem(destIndex)->GetParent(); else destItem = itemModel->GetItem(destIndex); if (!destItem || destItem->IsLibraryItem() || (draggedItem->GetParent() == destItem)) { event->ignore(); return; } if (draggedItem ->IsLibraryItem()) event->setDropAction(Qt::CopyAction); else event->setDropAction(Qt::MoveAction); event->accept(); } else event->acceptProposedAction(); } else if(event->mimeData()->hasUrls()) event->accept(); else event->ignore(); }