AbstractXmlItemObject * FoldersModel::newItem()
{
    Folder *newItem = new Folder(this);
    connect(newItem, SIGNAL(idChanged()), this, SLOT(itemDataChanged()));
    connect(newItem, SIGNAL(additionalDataChanged()), this, SLOT(itemDataChanged()));

    connect(newItem, SIGNAL(nameChanged()), this, SLOT(itemDataChanged()));
    newItem->filesModel()->setItemAdditionalData(m_fileAdditionalData);
    return newItem;
}
void FoldersModel::setFileAdditionalData(QQmlComponent *fileAdditionalData)
{
    if (m_fileAdditionalData != fileAdditionalData) {
        m_fileAdditionalData = fileAdditionalData;

        //Установим новые дополнительные данные для всех существующих объектов
        for (int i = 0; i < rowCount(); i++) {
            Folder *folder = qobject_cast<Folder* >(get(i));
            if (folder)
                folder->filesModel()->setItemAdditionalData(fileAdditionalData);
        }

        emit fileAdditionalDataChanged();
    }
}
QVariant FoldersModel::data(const QModelIndex &index, int role) const
{
    Folder * item = qobject_cast<Folder *>(get(index.row()));
    if (!item)
        return QVariant();

    switch (role) {
    case Id:
        return item->id();
        break;
    case Name:
        return item->name();
        break;
    case AdditionalData:
        return QVariant::fromValue(item->additionalData());
        break;
    case FilesModel:
        return QVariant::fromValue(item->filesModel());
        break;
    }

    return QVariant();
}