parentItem = rootItem;
qDebug() << "debug_rowsAboutToBeRemoved" << parent << parentItem << parent.data().toString() << rowCount(parent) << start << end;
+ // Make sure model is valid first
+ if (!parent.model()) {
+ qDebug() << "Parent model is not valid!" << end;
+ return;
+ }
+
QModelIndex child;
for (int i = end; i >= start; i--) {
child = parent.model()->index(i, 0, parent);
parentItem = rootItem;
qDebug() << "debug_rowsInserted:" << parent << parentItem << parent.data().toString() << rowCount(parent) << start << end;
+ // Make sure model is valid first
+ if (!parent.model()) {
+ qDebug() << "Parent model is not valid!" << end;
+ return;
+ }
+
QModelIndex child;
for (int i = start; i <= end; i++) {
child = parent.model()->index(i, 0, parent);
}
else {
// check if there are explicitly buffers removed
+ // Make sure model is valid first
+ if (!parent.model()) {
+ return;
+ }
for (int i = start; i <= end; i++) {
QVariant variant = parent.model()->index(i, 0, parent).data(NetworkModel::BufferIdRole);
if (!variant.isValid())
QModelIndex newParent = currentIndex.sibling(currentIndex.row() - 1, 0);
if (currentIndex.row() == 0)
newParent = lastNetIndex;
- if (model()->hasChildren(newParent))
- resultingIndex = newParent.model()->index(model()->rowCount(newParent) - 1, 0, newParent);
+ if (model()->hasChildren(newParent)) {
+ // Treat an invalid QAbstractItemModel as an invalid QModelIndex
+ resultingIndex = (newParent.model() ? newParent.model()->index(model()->rowCount(newParent) - 1, 0, newParent) : QModelIndex());
+ }
else
resultingIndex = newParent;
}
else {
- if (model()->hasChildren(currentIndex))
- resultingIndex = currentIndex.model()->index(0, 0, currentIndex);
+ if (model()->hasChildren(currentIndex)) {
+ // Treat an invalid QAbstractItemModel as an invalid QModelIndex
+ resultingIndex = (currentIndex.model() ? currentIndex.model()->index(0, 0, currentIndex) : QModelIndex());
+ }
else
resultingIndex = currentIndex.sibling(currentIndex.row() + 1, 0);
}
if (!resultingIndex.isValid()) {
if (direction == Forward)
resultingIndex = model()->index(0, 0, QModelIndex());
- else
+ else {
+ // Assume model is valid
resultingIndex = lastNetIndex.model()->index(model()->rowCount(lastNetIndex) - 1, 0, lastNetIndex);
+ }
}
selectionModel()->setCurrentIndex(resultingIndex, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows);
bool NickViewFilter::filterAcceptsRow(int source_row, const QModelIndex& source_parent) const
{
// root node, networkindexes, the bufferindex of the buffer this filter is active for and it's children are accepted
- if (!source_parent.isValid())
+ if (!(source_parent.isValid() && source_parent.model()))
return true;
QModelIndex source_child = source_parent.model()->index(source_row, 0, source_parent);