Exemple #1
0
QString DirViewItem::fullName() const
{
    QString fn = m_name;
    DirViewItem *item = parent();
    while (item && item->type() != DirViewItem::Type_Root) {
        fn.prepend("/");
        fn.prepend(item->name());
        item = item->parent();
    }
    return fn;
}
Exemple #2
0
DirViewItemRoot * MPDParseUtils::parseDirViewItems(const QByteArray * const data)
{
	QList<QByteArray> lines = data->split('\n');

	DirViewItemRoot * rootItem = new DirViewItemRoot("");
	DirViewItem * currentDir = rootItem;
	QStringList currentDirList;

	int amountOfLines = lines.size();
	for (int i = 0; i < amountOfLines; i++) {
		QString line(lines.at(i));

		if (line.startsWith("file: ")) {
			line.remove(0, 6);
			QStringList parts = line.split("/");

			if (currentDir->type() == DirViewItem::Type_Root)
				static_cast<DirViewItemRoot *>(currentDir)->insertFile(parts.at(parts.size()-1));
			else
				static_cast<DirViewItemDir *>(currentDir)->insertFile(parts.at(parts.size()-1));
		} else if (line.startsWith("directory: ")) {
			line.remove(0, 11);
			QStringList parts = line.split("/");

			/* Check how much matches */
			int depth = 0;
			for (int j = 0; j < currentDirList.size() && j < parts.size(); j++) {
				if (currentDirList.at(j) != parts.at(j))
					break;
				depth++;
			}

			for (int j = currentDirList.size(); j > depth; j--) {
				currentDir = currentDir->parent();
			}

			if (currentDir->type() == DirViewItem::Type_Root)
				currentDir = static_cast<DirViewItemRoot *>(currentDir)->createDirectory(parts.at(parts.size()-1));
			else
				currentDir = static_cast<DirViewItemDir *>(currentDir)->createDirectory(parts.at(parts.size()-1));

			currentDirList = parts;
		}
	}

	return rootItem;
}
bool DirViewProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const
{
    if (!filterEnabled) {
        return true;
    }
    if (!isChildOfRoot(sourceParent)) {
        return true;
    }

    const QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent);
    DirViewItem *item = static_cast<DirViewItem *>(index.internalPointer());
    QModelIndex idx=index.parent();
    QStringList strings;

    // Traverse back up tree, so we get parent strings...
    while (idx.isValid()) {
        DirViewItem *i = static_cast<DirViewItem *>(idx.internalPointer());
        if (DirViewItem::Type_Dir!=i->type()) {
            break;
        }
        strings << i->data();
        idx=idx.parent();
    }

    if (DirViewItem::Type_Dir==item->type()) {
        // Check *all* children...
        if (filterAcceptsDirViewItem(item, strings)) {
            return true;
        }
    } else {
        strings << item->data();
        return matchesFilter(strings);
    }

    return false;
}