QVariant RemoteDeckList_TreeModel::data(const QModelIndex &index, int role) const
{
    if (!index.isValid())
        return QVariant();
    if (index.column() >= 3)
        return QVariant();

    Node *temp = static_cast<Node *>(index.internalPointer());
    FileNode *file = dynamic_cast<FileNode *>(temp);
    if (!file) {
        DirectoryNode *node = dynamic_cast<DirectoryNode *>(temp);
        switch (role) {
        case Qt::DisplayRole: {
            switch (index.column()) {
            case 0:
                return node->getName();
            default:
                return QVariant();
            }
        }
        case Qt::DecorationRole:
            return index.column() == 0 ? dirIcon : QVariant();
        default:
            return QVariant();
        }
    } else {
        switch (role) {
        case Qt::DisplayRole: {
            switch (index.column()) {
            case 0:
                return file->getName();
            case 1:
                return file->getId();
            case 2:
                return file->getUploadTime();
            default:
                return QVariant();
            }
        }
        case Qt::DecorationRole:
            return index.column() == 0 ? fileIcon : QVariant();
        case Qt::TextAlignmentRole:
            return index.column() == 1 ? Qt::AlignRight : Qt::AlignLeft;
        default:
            return QVariant();
        }
    }
}