summaryrefslogtreecommitdiffstats
path: root/pokemodr/PokemodTreeModel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'pokemodr/PokemodTreeModel.cpp')
-rw-r--r--pokemodr/PokemodTreeModel.cpp133
1 files changed, 133 insertions, 0 deletions
diff --git a/pokemodr/PokemodTreeModel.cpp b/pokemodr/PokemodTreeModel.cpp
new file mode 100644
index 00000000..c2abd9a3
--- /dev/null
+++ b/pokemodr/PokemodTreeModel.cpp
@@ -0,0 +1,133 @@
+/*
+ * Copyright 2008 Ben Boeckel <MathStuf@gmail.com>
+ *
+ * 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 3 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, see <http://www.gnu.org/licenses/>.
+ */
+
+// Header include
+#include "PokemodTreeModel.h"
+
+PokemodTreeModel::PokemodTreeModel(const QStringList& pokemods, QObject* parent) :
+ QAbstractItemModel(parent)
+{
+ // TODO: construct
+}
+
+PokemodTreeModel::~PokemodTreeModel()
+{
+ delete m_root;
+}
+
+QVariant PokemodTreeModel::data(const QModelIndex& index, int role) const
+{
+ if (!index.isValid())
+ return QVariant();
+ BaseModel* object = static_cast<BaseModel*>(index.internalPointer());
+ return object->data(role);
+}
+
+QModelIndex PokemodTreeModel::index(int row, int /*column*/, const QModelIndex& parent) const
+{
+ if (!parent.isValid())
+ return QModelIndex();
+ BaseModel* object = getItem(parent)->childItem(row);
+ if (object)
+ return createIndex(row, 0, object);
+ else
+ return QModelIndex();
+}
+
+QModelIndex PokemodTreeModel::parent(const QModelIndex& index) const
+{
+ if (!index.isValid())
+ return QModelIndex();
+ BaseModel* object = static_cast<BaseModel*>(index.internalPointer());
+ BaseModel* parent = object->parent();
+ if (parent == m_root)
+ return QModelIndex();
+ return createIndex(parent->indexNumber(), 0, parent);
+}
+
+int PokemodTreeModel::rowCount(const QModelIndex& parent) const
+{
+ if (!parent.isValid())
+ return 0;
+ BaseModel* object = static_cast<BaseModel*>(parent.internalPointer());
+ return object->rowCount();
+}
+int PokemodTreeModel::columnCount(const QModelIndex& /*parent*/) const
+{
+ return 1;
+}
+
+Qt::ItemFlags PokemodTreeModel::flags(const QModelIndex& index) const
+{
+ if (!index.isValid())
+ return 0;
+ BaseModel* object = static_cast<BaseModel*>(index.internalPointer());
+ return object->flags();
+}
+
+bool PokemodTreeModel::setData(const QModelIndex& index, const QVariant& value, int role)
+{
+ if (!index.isValid())
+ return false;
+ BaseModel* object = static_cast<BaseModel*>(index.internalPointer());
+ return object->setData(value, role);
+}
+
+bool PokemodTreeModel::insertColumns(int /*position*/, int /*columns*/, const QModelIndex& /*parent*/)
+{
+ return false;
+}
+
+bool PokemodTreeModel::removeColumns(int /*position*/, int /*columns*/, const QModelIndex& /*parent*/)
+{
+ return false;
+}
+
+bool PokemodTreeModel::insertRows(int /*position*/, int rows, const QModelIndex& parent)
+{
+ BaseModel* object = getItem(parent);
+ if (!object->canInsertRows())
+ return false;
+ emit(beginInsertRows(parent, object->rowCount(), object->rowCount() + rows - 1));
+ bool success = object->insertRows(rows);
+ emit(endInsertRows());
+ return success;
+}
+
+bool PokemodTreeModel::removeRows(int position, int rows, const QModelIndex& parent)
+{
+ BaseModel* object = getItem(parent);
+ if (!object->canRemoveRows())
+ return false;
+ emit(beginRemoveRows(parent, position, position + rows - 1));
+ bool success = object->removeRows(position, rows);
+ emit(endRemoveRows());
+ return success;
+}
+
+BaseModel* PokemodTreeModel::getItem(const QModelIndex& index) const
+{
+ if (index.isValid())
+ {
+ BaseModel* object = static_cast<BaseModel*>(index.internalPointer());
+ if (object)
+ return object;
+ }
+ return m_root;
+}
+
+