bool InventoryItemModel::Open(const QModelIndex &index) { AbstractInventoryItem *item = GetItem(index); if (item->GetItemType() == AbstractInventoryItem::Type_Folder) { fetchMore(index); return canFetchMore(index); } if (item->GetItemType() == AbstractInventoryItem::Type_Asset) return dataModel_->OpenItem(item); return false; }
Qt::ItemFlags InventoryItemModel::flags(const QModelIndex &index) const { Qt::ItemFlags flags = Qt::ItemIsEnabled; if (!index.isValid()) return flags; AbstractInventoryItem *item = GetItem(index); AbstractInventoryItem::InventoryItemType type = item->GetItemType(); if (type == AbstractInventoryItem::Type_Asset) { if (!item->IsLibraryItem()) flags |= Qt::ItemIsDropEnabled; flags |= Qt::ItemIsDragEnabled; } if (type == AbstractInventoryItem::Type_Folder) if (!item->IsLibraryItem()) flags |= Qt::ItemIsDropEnabled; if (!item->IsEditable()) return flags; flags |= Qt::ItemIsSelectable; if (type == AbstractInventoryItem::Type_Folder) flags |= Qt::ItemIsDragEnabled; flags |= Qt::ItemIsEditable; return flags; }
bool InventoryItemModel::canFetchMore(const QModelIndex & parent) const { AbstractInventoryItem *item = GetItem(parent); if (item && item->GetItemType() == AbstractInventoryItem::Type_Folder) { InventoryFolder *folder = dynamic_cast<InventoryFolder*>(item); if (folder) return folder->IsDirty(); } return false; }
QVariant InventoryItemModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) return QVariant(); AbstractInventoryItem *item = GetItem(index); if (role == Qt::DecorationRole) { if (item->GetItemType() == AbstractInventoryItem::Type_Folder) return QIcon(":images/iconFolderClosed.png"); if (item->GetItemType() == AbstractInventoryItem::Type_Asset) return QIcon(":images/iconResource.png"); } if (role != Qt::DisplayRole) return QVariant(); return QVariant(item->GetName()); }
int InventoryItemModel::rowCount(const QModelIndex &parent) const { if (parent.column() > 0 || !dataModel_->GetRoot()) return 0; if (!parent.isValid()) dynamic_cast<InventoryFolder *>(dataModel_->GetRoot())->ChildCount(); AbstractInventoryItem *item = GetItem(parent); if (item->GetItemType() == AbstractInventoryItem::Type_Folder) { InventoryFolder *parentFolder = static_cast<InventoryFolder *>(item); return parentFolder->ChildCount(); } return 0; }
bool InventoryItemModel::removeRows(int position, int rows, const QModelIndex &parent) { InventoryFolder *parentFolder = dynamic_cast<InventoryFolder *>(GetItem(parent)); if (!parentFolder) return false; AbstractInventoryItem *childItem = parentFolder->Child(position); if (!childItem) return false; if (childItem->GetItemType() == AbstractInventoryItem::Type_Folder) if (!static_cast<InventoryFolder *>(childItem)->IsEditable()) return false; bool removeRow = false; if (itemMoveFlag_) { // We don't want to notify server if we're just moving (i.e. deleting temporarily from one location). int idx = itemsToBeMoved_.indexOf(childItem->GetID()); if (idx != -1) { // Do not remove library items from the model. if (!childItem->IsLibraryItem()) removeRow = true; itemsToBeMoved_.remove(idx); } } //else if(!itemMoveFlag_ && itemsToBeMoved_.size() == 0) else { removeRow = true; if(useTrash_) { // When deleting items, we move them first to the Trash folder. InventoryFolder *trashFolder = static_cast<InventoryFolder *>(dataModel_->GetTrashFolder()); if (parentFolder == trashFolder) { // If the folder is already in the trash folder, delete it for good. dataModel_->NotifyServerAboutItemRemove(childItem); } else { // Move to the Trash folder. dataModel_->NotifyServerAboutItemMove(childItem); InsertExistingItem(position, trashFolder, childItem); } } else dataModel_->NotifyServerAboutItemRemove(childItem); } if (itemsToBeMoved_.size() <= 0) itemMoveFlag_ = false; if (removeRow) { beginRemoveRows(parent, position, position + rows - 1); bool success = parentFolder->RemoveChildren(position, rows); endRemoveRows(); return success; } return false; }