summaryrefslogtreecommitdiffstats
path: root/smtreemodel.cpp
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2010-06-06 16:26:58 +0200
committerArno <am@disconnect.de>2010-06-06 16:26:58 +0200
commite710b1ff68c29f5a2331cc36b5fdf6d67f4b1c63 (patch)
tree6005881d064e1912a253831a98ab4961fa7c6574 /smtreemodel.cpp
parent4d78abefd76d7d828a4ac078b80e8891ddb975e6 (diff)
downloadSheMov-e710b1ff68c29f5a2331cc36b5fdf6d67f4b1c63.tar.gz
SheMov-e710b1ff68c29f5a2331cc36b5fdf6d67f4b1c63.tar.bz2
SheMov-e710b1ff68c29f5a2331cc36b5fdf6d67f4b1c63.zip
Finished SmTreeModel, started SmUberModel
kinda finished the treemodel. Don't really know if it's complete yet. More programming will show :)
Diffstat (limited to 'smtreemodel.cpp')
-rw-r--r--smtreemodel.cpp144
1 files changed, 144 insertions, 0 deletions
diff --git a/smtreemodel.cpp b/smtreemodel.cpp
index 60cc977..2c7a2d6 100644
--- a/smtreemodel.cpp
+++ b/smtreemodel.cpp
@@ -16,3 +16,147 @@ SmTreeModel::SmTreeModel(const QStringList &headers, QObject *parent) : QAbstrac
SmTreeModel::~SmTreeModel(){
delete mRootItem;
}
+
+int SmTreeModel::rowCount(const QModelIndex &parent) const{
+ SmTreeItem *parentItem = itemAt(parent);
+ return parentItem->childCount();
+}
+
+int SmTreeModel::columnCount(const QModelIndex &parent) const{
+ Q_UNUSED(parent);
+ return mRootItem->columnCount();
+}
+
+QModelIndex SmTreeModel::index(int row, int column, const QModelIndex &parent) const{
+ if(parent.isValid() && (parent.column() != 0)){
+ return QModelIndex();
+ }
+ SmTreeItem *parentItem = itemAt(parent);
+ SmTreeItem *childItem = parentItem->child(row);
+ if(childItem){
+ return createIndex(row, column, childItem);
+ }
+ return QModelIndex();
+}
+
+Qt::ItemFlags SmTreeModel::flags(const QModelIndex &index) const{
+ if(!index.isValid()){
+ return 0;
+ }
+ return Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable;
+}
+
+QVariant SmTreeModel::headerData(int section, Qt::Orientation orientation, int role) const{
+ if((orientation == Qt::Horizontal) && (role == Qt::DisplayRole)){
+ return mRootItem->data(section);
+ }
+ return QVariant();
+}
+
+bool SmTreeModel::setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role){
+ if((orientation == Qt::Horizontal) && (role == Qt::DisplayRole)){
+ mRootItem->setData(section, value);
+ emit headerDataChanged(orientation, section, section);
+ return true;
+ }
+ return false;
+}
+
+QVariant SmTreeModel::data(const QModelIndex &index, int role) const{
+ if(!index.isValid()){
+ return QVariant();
+ }
+ SmTreeItem *item = itemAt(index);
+ if(role == Qt::DisplayRole){
+ return item->data(index.column());
+ }
+ if(role == Qt::EditRole){
+ return item->data(index.column());
+ }
+ return QVariant();
+}
+
+bool SmTreeModel::setData(const QModelIndex &index, const QVariant &value, int role){
+ if(role != Qt::EditRole){
+ return false;
+ }
+ SmTreeItem *item = itemAt(index);
+ item->setData(index.column(), value);
+ emit dataChanged(index, index);
+ return true;
+}
+
+bool SmTreeModel::setRoot(SmTreeItem *rootItem){
+ if(mRootItem){
+ beginResetModel();
+ delete mRootItem;
+ mRootItem = rootItem;
+ endResetModel();
+ return true;
+ }
+ return false;
+}
+
+bool SmTreeModel::insertRows(int row, int count, const QModelIndex &parent){
+ SmTreeItem *parentItem = itemAt(parent);
+ bool retval;
+
+ if(row > parentItem->childCount()){
+ return false;
+ }
+
+ beginInsertRows(parent, row, row + count - 1);
+ for(int i = row; i < row + count; ++i){
+ SmTreeItem *newItem = new SmTreeItem(mRootItem->columnCount());
+ retval = parentItem->insertChild(i, newItem);
+ }
+ endInsertRows();
+ return retval;
+}
+
+bool SmTreeModel::removeRows(int row, int count, const QModelIndex &parent){
+ SmTreeItem *parentItem = itemAt(parent);
+ bool retval;
+
+ if(row > parentItem->childCount()){
+ return false;
+ }
+
+ beginRemoveRows(parent, row, row + count - 1);
+ for(int i = row + count; i > row; --i){
+ retval = parentItem->removeChild(i);
+
+ }
+ endRemoveRows();
+ return retval;
+}
+
+bool SmTreeModel::addRow(const QList<QVariant> &data, const QModelIndex &parent){
+ if(data.count() != mRootItem->columnCount()){
+ return false;
+ }
+
+ SmTreeItem *parentItem = itemAt(parent);
+
+ if(insertRows(parentItem->childCount(), 1, parent)){
+ SmTreeItem *child = parentItem->child(parentItem->childCount());
+ delete child;
+ SmTreeItem *newChild = new SmTreeItem(data, parentItem);
+ child = newChild;
+ QModelIndex start = index(parentItem->childCount() - 1, 0, parent);
+ QModelIndex end = index(parentItem->childCount() - 1, parentItem->columnCount() - 1, parent);
+ emit dataChanged(start, end);
+ return true;
+ }
+ return false;
+}
+
+SmTreeItem *SmTreeModel::itemAt(const QModelIndex &index) const{
+ if(index.isValid()){
+ SmTreeItem *item = static_cast<SmTreeItem*>(index.internalPointer());
+ if(item){
+ return item;
+ }
+ }
+ return mRootItem;
+}