diff options
Diffstat (limited to '')
-rw-r--r-- | lspackagemodel.cpp | 163 |
1 files changed, 0 insertions, 163 deletions
diff --git a/lspackagemodel.cpp b/lspackagemodel.cpp deleted file mode 100644 index 9580e91..0000000 --- a/lspackagemodel.cpp +++ /dev/null @@ -1,163 +0,0 @@ -#include "lspackagemodel.h" - -struct ContentKind { - LYTPackageBase::ItemType type; - QString name; -}; - -static const ContentKind ContentKinds[4] = { - {LYTPackageBase::Layout, "Layouts"}, - {LYTPackageBase::Animation, "Animations"}, - {LYTPackageBase::Texture, "Textures"}, - {LYTPackageBase::Font, "Fonts"}, -}; -const int ContentKindCount = 4; - -static int ContentKindForType(LYTPackageBase::ItemType type) { - switch (type) { - case LYTPackageBase::Layout: return 0; - case LYTPackageBase::Animation: return 1; - case LYTPackageBase::Texture: return 2; - case LYTPackageBase::Font: return 3; - } - return -1; -} - -LSPackageModel::LSPackageModel(LYTPackageBase *pkg, QObject *parent) : - QAbstractItemModel(parent) -{ - m_package = pkg; - - m_caches = new QStringList[ContentKindCount]; - for (int i = 0; i < ContentKindCount; i++) { - m_caches[i] = pkg->list(ContentKinds[i].type); - m_caches[i].sort(); - } - - connect(pkg, SIGNAL(fileWasAdded(LYTPackageBase::ItemType,QString)), SLOT(handleFileWasAdded(LYTPackageBase::ItemType,QString))); - //connect(pkg, SIGNAL(fileWasModified(LYTPackageBase::ItemType,QString)), SLOT(handleFileWasModified(LYTPackageBase::ItemType,QString))); - connect(pkg, SIGNAL(fileWasRemoved(LYTPackageBase::ItemType,QString)), SLOT(handleFileWasRemoved(LYTPackageBase::ItemType,QString))); - connect(pkg, SIGNAL(fileWasRenamed(LYTPackageBase::ItemType,QString,QString)), SLOT(handleFileWasRenamed(LYTPackageBase::ItemType,QString,QString))); -} - -LSPackageModel::~LSPackageModel() { - delete[] m_caches; -} - - -QModelIndex LSPackageModel::index(int row, int column, const QModelIndex &parent) const { - if (!hasIndex(row, column, parent)) - return QModelIndex(); - - if (!parent.isValid()) - return createIndex(row, column, 0); - - return createIndex(row, column, parent.row() + 1); -} - -QModelIndex LSPackageModel::parent(const QModelIndex &child) const { - if (!child.isValid()) - return QModelIndex(); - - if (child.internalId() > 0) - return createIndex(child.internalId() - 1, 0, 0); - else - return QModelIndex(); -} - -int LSPackageModel::rowCount(const QModelIndex &parent) const { - if (!parent.isValid()) - return ContentKindCount; - else if (parent.internalId() > 0) - return 0; // an actual item - else - return m_caches[parent.row()].count(); -} - -int LSPackageModel::columnCount(const QModelIndex &parent) const { - return 1; -} - -QVariant LSPackageModel::data(const QModelIndex &index, int role) const { - if (!index.isValid()) - return QVariant(); - if (role != Qt::DisplayRole) - return QVariant(); - - int whatIs = index.internalId(); - if (whatIs == 0) - return ContentKinds[index.row()].name; - else - return m_caches[whatIs - 1].at(index.row()); -} - - -void LSPackageModel::handleFileWasAdded(LYTPackageBase::ItemType type, QString name) { - int kind = ContentKindForType(type); - - QStringList newCache = m_caches[kind]; - newCache.append(name); - newCache.sort(); - - // where was this added? - int idx = newCache.indexOf(name); - beginInsertRows(createIndex(kind, 0, 0), idx, idx); - m_caches[kind] = newCache; - endInsertRows(); -} - -void LSPackageModel::handleFileWasRemoved(LYTPackageBase::ItemType type, QString name) { - int kind = ContentKindForType(type); - - int idx = m_caches[kind].indexOf(name); - beginRemoveRows(createIndex(kind, 0, 0), idx, idx); - m_caches[kind].removeAt(idx); - endRemoveRows(); -} - -void LSPackageModel::handleFileWasRenamed(LYTPackageBase::ItemType type, QString from, QString to) { - int kind = ContentKindForType(type); - - QStringList newCache = m_caches[kind]; - int fromIdx = newCache.indexOf(from); - - // this is really a mess, but I cannot think of a better way to do it - // first, make a new cache, but don't store it to m_caches yet... - newCache[fromIdx] = to; - newCache.sort(); - - // and now, get the to Index... - int toIdx = newCache.indexOf(to); - // if the new index is less than the old one, then leave it that way - // if the new index is the same as the old one, that's fine, do nothing - // if the new index is more than the old one... add 1 to it to take into - // account that the old one is no longer around when it was computed BUT Qt - // expects it to be - // did that make sense? probably not, oh well - if (toIdx > fromIdx) - toIdx++; - - QModelIndex whatChanged = createIndex(fromIdx, 0, kind + 1); - emit dataChanged(whatChanged, whatChanged); - - QModelIndex parent = createIndex(kind, 0, 0); - - if (toIdx != fromIdx) - beginMoveRows(parent, fromIdx, fromIdx, parent, toIdx); - m_caches[kind] = newCache; - if (toIdx != fromIdx) - endMoveRows(); -} - - -QString LSPackageModel::itemNameForIndex(const QModelIndex &index) const { - if (index.internalId() > 0) - return m_caches[index.internalId() - 1].at(index.row()); - return QString(); -} - -LYTPackageBase::ItemType LSPackageModel::itemTypeForIndex(const QModelIndex &index) const { - if (index.internalId() > 0) - return ContentKinds[index.internalId() - 1].type; - return (LYTPackageBase::ItemType)-1; -} |