100 lines
3.7 KiB
C++
100 lines
3.7 KiB
C++
/***************************************************************************
|
|
* Copyright (C) 2008 by Oliver Groß *
|
|
* z.o.gross@gmx.de *
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
* This program is distributed in the hope that it will be useful, *
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
* GNU General Public License for more details. *
|
|
* *
|
|
* You should have received a copy of the GNU General Public License *
|
|
* along with this program; if not, write to the *
|
|
* Free Software Foundation, Inc., *
|
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
|
***************************************************************************/
|
|
#include <QDir>
|
|
#include "ccrosspackage.h"
|
|
#include "cnonogram.h"
|
|
#include "ccrosspackagelistmodel.h"
|
|
|
|
namespace libqnono {
|
|
//public:
|
|
CCrossPackageListModel::CCrossPackageListModel(QString dataPath, QString dataFilter, QObject * parent) : QAbstractItemModel(parent),
|
|
m_DataPath(dataPath), m_DataFilter(dataFilter) {
|
|
update();
|
|
}
|
|
|
|
CCrossPackageListModel::~CCrossPackageListModel() {
|
|
foreach (CCrossPackage * i, m_PackageList)
|
|
delete i;
|
|
}
|
|
|
|
void CCrossPackageListModel::update() {
|
|
foreach (CCrossPackage * i, m_PackageList)
|
|
delete i;
|
|
|
|
m_PackageList.clear();
|
|
|
|
CCrossPackage * newPackage;
|
|
|
|
QDir workDir(m_DataPath);
|
|
QStringList fileNames = workDir.entryList(QStringList(m_DataFilter), QDir::Files | QDir::NoDotAndDotDot, QDir::Name);
|
|
foreach (QString fileName, fileNames) {
|
|
newPackage = new CCrossPackage(workDir.filePath(fileName));
|
|
newPackage->open();
|
|
if (newPackage->readHeader())
|
|
m_PackageList << newPackage;
|
|
else
|
|
delete newPackage;
|
|
newPackage->close();
|
|
}
|
|
|
|
reset();
|
|
}
|
|
|
|
QModelIndex CCrossPackageListModel::index(int row, int column, const QModelIndex & /*parent*/) const {
|
|
return (column > 0) || (row < 0) || (row >= m_PackageList.size()) ?
|
|
QModelIndex() :
|
|
createIndex(row, column, static_cast<void *>(m_PackageList[row]));
|
|
}
|
|
|
|
QVariant CCrossPackageListModel::data(const QModelIndex & index, int role) const {
|
|
if (!index.isValid())
|
|
return QVariant();
|
|
|
|
if (role == Qt::DisplayRole)
|
|
return static_cast<CCrossPackage *>(index.internalPointer())->name();
|
|
else
|
|
return QVariant();
|
|
}
|
|
|
|
int CCrossPackageListModel::rowCount(const QModelIndex & /*parent*/) const {
|
|
return m_PackageList.size();
|
|
}
|
|
|
|
int CCrossPackageListModel::columnCount(const QModelIndex & /*parent*/) const {
|
|
return 1;
|
|
}
|
|
|
|
QVariant CCrossPackageListModel::headerData(int /*section*/, Qt::Orientation /*orientation*/, int /*role*/) const {
|
|
return QVariant();
|
|
}
|
|
|
|
// Qt::ItemFlags CCrossPackageListModel::flags(const QModelIndex & index) const {
|
|
// return QAbstractItemModel::flags(index) | Qt::ItemIsEditable;
|
|
// }
|
|
|
|
QModelIndex CCrossPackageListModel::parent(const QModelIndex &) const {
|
|
return QModelIndex();
|
|
}
|
|
|
|
bool CCrossPackageListModel::hasChildren(const QModelIndex & parent) const {
|
|
return !parent.isValid();
|
|
}
|
|
}
|