00001
00008 #include <QtGui>
00009 #include "jobpropertymodel.h"
00010 #include "jobpropertyitem.h"
00011 #include <QDebug>
00012
00018 JobPropertyModel::JobPropertyModel(QObject *parent)
00019 : QAbstractItemModel(parent),
00020 _layoutAboutToBeChanged(false)
00021 {
00022 QVector<QVariant> data;
00023 rootItem = new JobPropertyItemRoot(this);
00024 }
00025
00029 JobPropertyModel::~JobPropertyModel()
00030 {
00031 delete rootItem;
00032 }
00033
00039 int JobPropertyModel::columnCount(const QModelIndex &parent) const
00040 {
00041 Q_UNUSED(parent);
00042 return rootItem->columnCount();
00043 }
00044
00051 QVariant JobPropertyModel::data(const QModelIndex &index, int role) const
00052 {
00053 if (!index.isValid())
00054 return QVariant();
00055
00056 if (role != Qt::DisplayRole && role != Qt::EditRole)
00057 return QVariant();
00058
00059 JobPropertyItem *item = getItem(index);
00060
00061 return item->data(index.column());
00062 }
00063
00069 Qt::ItemFlags JobPropertyModel::flags(const QModelIndex &index) const
00070 {
00071 if (!index.isValid())
00072 return Qt::ItemIsEnabled;
00073
00074 return Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable;
00075 }
00076
00082 JobPropertyItem *JobPropertyModel::getItem(const QModelIndex &index) const
00083 {
00084 if (index.isValid())
00085 return static_cast<JobPropertyItem*>(index.internalPointer());
00086 return rootItem;
00087 }
00088
00096 QVariant JobPropertyModel::headerData(int section, Qt::Orientation orientation,
00097 int role) const
00098 {
00099 if (orientation == Qt::Horizontal && role == Qt::DisplayRole)
00100 return rootItem->data(section);
00101
00102 return QVariant();
00103 }
00104
00112 QModelIndex JobPropertyModel::index(int row, int column, const QModelIndex &parent) const
00113 {
00114 if (parent.isValid() && parent.column() != 0)
00115 return QModelIndex();
00116
00117 JobPropertyItem *parentItem = getItem(parent);
00118 JobPropertyItem *childItem = parentItem->child(row);
00119
00120 if (childItem)
00121 return createIndex(row, column, childItem);
00122 else
00123 return QModelIndex();
00124 }
00125
00131 QModelIndex JobPropertyModel::parent(const QModelIndex &index) const
00132 {
00133 if (!index.isValid())
00134 return QModelIndex();
00135
00136 JobPropertyItem * childItem = getItem(index);
00137 if (childItem)
00138 {
00139 JobPropertyItem *parentItem = childItem->parent();
00140 if (parentItem == rootItem)
00141 return QModelIndex();
00142 return createIndex(parentItem->childNumber(), 0, parentItem);
00143 } else {
00144 return QModelIndex();
00145 }
00146 }
00147
00153 int JobPropertyModel::rowCount(const QModelIndex &parent) const
00154 {
00155 JobPropertyItem *parentItem = getItem(parent);
00156
00157 return parentItem->childCount();
00158 }
00159
00168 bool JobPropertyModel::setData(const QModelIndex &index, const QVariant &value,
00169 int role)
00170 {
00171 if (role != Qt::EditRole)
00172 return false;
00173
00174 JobPropertyItem *item = getItem(index);
00175
00176 return item->setData(index.column(), value);
00177 }
00178
00187 bool JobPropertyModel::setHeaderData(int section, Qt::Orientation orientation,
00188 const QVariant &value, int role)
00189 {
00190 if (role != Qt::EditRole || orientation != Qt::Horizontal)
00191 return false;
00192
00193 return rootItem->setData(section, value);
00194 }
00195
00199 void JobPropertyModel::emitLayoutAboutToBeChanged()
00200 {
00201 if (!_layoutAboutToBeChanged)
00202 {
00203 _layoutAboutToBeChanged = true;
00204 emit layoutAboutToBeChanged();
00205 }
00206 }
00207
00211 void JobPropertyModel::emitLayoutChanged()
00212 {
00213 emit layoutChanged();
00214 _layoutAboutToBeChanged = false;
00215 }
00216
00224 bool JobPropertyModel::removeRows ( int row, int count, const QModelIndex & parent )
00225 {
00226 beginRemoveRows(parent, row, row+count-1);
00227 JobPropertyItem * item = getItem(parent);
00228 for(int i=0; i<count; i++)
00229 item->deleteChild(row);
00230 endRemoveRows();
00231 return true;
00232 }