示例#1
0
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;
}
示例#2
0
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;
}
示例#3
0
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;
}
示例#4
0
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());
}
示例#5
0
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;
}
示例#6
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;
}