summaryrefslogtreecommitdiffstats
path: root/mappingtreemodel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'mappingtreemodel.cpp')
-rw-r--r--mappingtreemodel.cpp72
1 files changed, 56 insertions, 16 deletions
diff --git a/mappingtreemodel.cpp b/mappingtreemodel.cpp
index a56f543..78e4802 100644
--- a/mappingtreemodel.cpp
+++ b/mappingtreemodel.cpp
@@ -204,27 +204,32 @@ bool MappingTreeModel::deleteChild(const QModelIndex &idx){
return false;
}
-MappingData MappingTreeModel::mappingDataFromIndex(QModelIndex &idx) const{
+MappingData MappingTreeModel::mappingDataFromItem(SmTreeItem *item) const{
MappingData retval;
- if(!idx.isValid()){
- return retval;
- }
- retval.mappingId = idx.data(MappingTreeModel::MappingIdRole).toInt();
- retval.descId = idx.data(MappingTreeModel::DescIdRole).toInt();
- retval.name = idx.data(MappingTreeModel::NameRole).toString();
- retval.parents << idx.data(MappingTreeModel::MappingIdRole).toInt();
- retval.path << idx.data(MappingTreeModel::NameRole).toString();
- QModelIndex pIdx = idx.parent();
- while(pIdx.isValid()){
- retval.parents << pIdx.data(MappingTreeModel::MappingIdRole).toInt();
- retval.path << pIdx.data(MappingTreeModel::NameRole).toString();
- pIdx = pIdx.parent();
+ retval.mappingId = item->data(MappingTreeModel::MappingId).toInt();
+ retval.descId = item->data(MappingTreeModel::DescId).toInt();
+ retval.name = item->data(MappingTreeModel::Name).toString();
+ retval.parents << item->data(MappingTreeModel::MappingId).toInt();
+ retval.path << item->data(MappingTreeModel::Name).toString();
+ SmTreeItem *pItem = item->parent();
+ while(pItem->parent()){
+ retval.parents << pItem->data(MappingTreeModel::MappingId).toInt();
+ retval.path << pItem->data(MappingTreeModel::Name).toString();
+ pItem = pItem->parent();
}
std::reverse(retval.parents.begin(), retval.parents.end());
std::reverse(retval.path.begin(), retval.path.end());
return retval;
}
+MappingData MappingTreeModel::mappingDataFromIndex(QModelIndex &idx) const{
+ if(!idx.isValid()){
+ return MappingData();
+ }
+ SmTreeItem *item = static_cast<SmTreeItem*>(idx.internalPointer());
+ return mappingDataFromItem(item);
+}
+
void MappingTreeModel::populate(){
if(mType == -1){
return;
@@ -371,7 +376,9 @@ int MappingTreeModel::lowerBound(SmTreeItem *item, const QVariant &value, int co
return item->childCount();
}
-MappingTreeResultModel::MappingTreeResultModel(const QStringList &headers, QObject *parent) : SmTreeModel(headers, parent) { }
+MappingTreeResultModel::MappingTreeResultModel(const QStringList &headers, QObject *parent) : SmTreeModel(headers, parent) {
+ mSourceModel = static_cast<MappingTreeModel*>(SmGlobals::instance()->model("MappingTree"));
+}
Qt::ItemFlags MappingTreeResultModel::flags(const QModelIndex &index) const {
Q_UNUSED(index);
@@ -421,8 +428,14 @@ bool MappingTreeResultModel::setData(const QModelIndex &index, const QVariant &v
void MappingTreeResultModel::addItem(const MappingData &data){
QList<int> pPath = data.parents;
+
+ if(!mCurrentData.contains(data)){
+ mCurrentData << data;
+ }
+
QList<int> curPath;
std::reverse(pPath.begin(), pPath.end());
+
MappingTreeModel *mapModel = qobject_cast<MappingTreeModel*>(SmGlobals::instance()->model("MappingTree"));
QModelIndex curIdx = QModelIndex();
int curId = -1;
@@ -465,11 +478,13 @@ void MappingTreeResultModel::removeItem(const QModelIndex &idx){
if(!idx.isValid()){
return;
}
- beginResetModel();
SmTreeItem *curItem = static_cast<SmTreeItem*>(idx.internalPointer());
+ MappingData rmData = mSourceModel->mappingDataFromItem(curItem);
+ beginResetModel();
int row = curItem->row();
SmTreeItem *parent = curItem->parent();
parent->removeChild(row);
+ mCurrentData.removeAll(rmData);
endResetModel();
}
@@ -521,6 +536,31 @@ QList<QVariant> MappingTreeResultModel::columnValuesRecursive(SmTreeItem *parent
MappingData::MappingData() : mappingId(-1), descId(-1) {}
+bool MappingData::operator ==(const MappingData &other){
+ bool retval = (
+ mappingId == other.mappingId &&
+ descId == other.descId &&
+ name == other.name &&
+ parents == other.parents &&
+ path == other.path
+ );
+ return retval;
+}
+
+QDataStream &operator <<(QDataStream &out, const MappingData &v){
+ out << v.mappingId << v.descId << v.name << v.parents << v.path;
+ return out;
+}
+
+QDataStream &operator >>(QDataStream &in, MappingData &v){
+ in >> v.mappingId;
+ in >> v.descId;
+ in >> v.name;
+ in >> v.parents;
+ in >> v.path;
+ return in;
+}
+
bool MappingData::isValid(){
return !(mappingId == -1 && descId == -1);
}