[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [okteta] kasten/controllers/view/structures/datatypes: structures: fix model getting corrupted when
From:       Alex Richardson <arichardson.kde () googlemail ! com>
Date:       2013-06-30 20:57:52
Message-ID: E1UtOgy-0004kc-Ib () scm ! kde ! org
[Download RAW message or body]

Git commit 717c58b0ae7e7bccdcc3e9c028c8c68bf7be2f9a by Alex Richardson.
Committed on 21/03/2013 at 13:53.
Pushed by arichardson into branch 'master'.

structures: fix model getting corrupted when tagged union changes type

M  +12   -0    kasten/controllers/view/structures/datatypes/taggeduniondatainformation.cpp

http://commits.kde.org/okteta/717c58b0ae7e7bccdcc3e9c028c8c68bf7be2f9a

diff --git a/kasten/controllers/view/structures/datatypes/taggeduniondatainformation.cpp \
b/kasten/controllers/view/structures/datatypes/taggeduniondatainformation.cpp index be9790c..dfff695 \
                100644
--- a/kasten/controllers/view/structures/datatypes/taggeduniondatainformation.cpp
+++ b/kasten/controllers/view/structures/datatypes/taggeduniondatainformation.cpp
@@ -151,11 +151,23 @@ qint64 TaggedUnionDataInformation::readData(Okteta::AbstractByteArrayModel *inpu
     TopLevelDataInformation* top = topLevelDataInformation();
     Q_CHECK_PTR(top);
 
+    const QVector<DataInformation*>& oldChildren = currentChildren();
+
     qint64 readBits = 0;
     mWasAbleToRead = StructureDataInformation::readChildren(mChildren,
             input, address, bitsRemaining, bitOffset, &readBits, top);
     mLastIndex = determineSelection(top);
     const QVector<DataInformation*>& others = currentChildren();
+    //check whether we have different children now, if yes we have to emit child count changed
+    if (oldChildren != others) {
+        const int fixedSize = mChildren.size();
+        //tell the model that all children have changed by setting to 0 and then to new size
+        top->_childCountAboutToChange(this, fixedSize + oldChildren.size(), fixedSize);
+        top->_childCountChanged(this, fixedSize + oldChildren.size(), fixedSize);
+        top->_childCountAboutToChange(this, fixedSize, fixedSize + others.size());
+        top->_childCountChanged(this, fixedSize, fixedSize + others.size());
+    }
+
     //this is important since the remaining children might have changed since before the read
     //where beginRead was called on the children at that time
     for (int i = 0; i < others.size(); i++)


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic