diff options
author | Petr Mrázek <peterix@gmail.com> | 2016-12-19 00:34:03 +0100 |
---|---|---|
committer | Petr Mrázek <peterix@gmail.com> | 2016-12-19 00:35:57 +0100 |
commit | 92bb0017878c11cc09376fae12279d401db707e3 (patch) | |
tree | 81bccda75d912c386159ae551fa500488b968721 /application/groupview | |
parent | 03d2858c62764230a52a242e7adf45f73f20878e (diff) | |
download | MultiMC-92bb0017878c11cc09376fae12279d401db707e3.tar MultiMC-92bb0017878c11cc09376fae12279d401db707e3.tar.gz MultiMC-92bb0017878c11cc09376fae12279d401db707e3.tar.lz MultiMC-92bb0017878c11cc09376fae12279d401db707e3.tar.xz MultiMC-92bb0017878c11cc09376fae12279d401db707e3.zip |
NOISSUE fix crash caused by missing instance view layout updates
Layout wasn't updated in some cases while deleting instances.
Diffstat (limited to 'application/groupview')
-rw-r--r-- | application/groupview/GroupView.cpp | 38 | ||||
-rw-r--r-- | application/groupview/GroupView.h | 1 | ||||
-rw-r--r-- | application/groupview/VisualGroup.cpp | 5 |
3 files changed, 22 insertions, 22 deletions
diff --git a/application/groupview/GroupView.cpp b/application/groupview/GroupView.cpp index 5a380318..a6844102 100644 --- a/application/groupview/GroupView.cpp +++ b/application/groupview/GroupView.cpp @@ -45,6 +45,7 @@ void GroupView::setModel(QAbstractItemModel *model) { QAbstractItemView::setModel(model); connect(model, &QAbstractItemModel::modelReset, this, &GroupView::modelReset); + connect(model, &QAbstractItemModel::rowsRemoved, this, &GroupView::rowsRemoved); } void GroupView::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, @@ -62,6 +63,16 @@ void GroupView::rowsAboutToBeRemoved(const QModelIndex &parent, int start, int e scheduleDelayedItemsLayout(); } +void GroupView::modelReset() +{ + scheduleDelayedItemsLayout(); +} + +void GroupView::rowsRemoved() +{ + scheduleDelayedItemsLayout(); +} + class LocaleString : public QString { public: @@ -87,35 +98,28 @@ void GroupView::updateGeometries() for (int i = 0; i < model()->rowCount(); ++i) { - const QString groupName = - model()->index(i, 0).data(GroupViewRoles::GroupRole).toString(); + const QString groupName = model()->index(i, 0).data(GroupViewRoles::GroupRole).toString(); if (!cats.contains(groupName)) { VisualGroup *old = this->category(groupName); if (old) { - cats.insert(groupName, new VisualGroup(old)); + auto cat = new VisualGroup(old); + cats.insert(groupName, cat); + cat->update(); } else { - cats.insert(groupName, new VisualGroup(groupName, this)); + auto cat = new VisualGroup(groupName, this); + cats.insert(groupName, cat); + cat->update(); } } } - /*if (m_editedCategory) - { - m_editedCategory = cats[m_editedCategory->text]; - }*/ - qDeleteAll(m_groups); m_groups = cats.values(); - for (auto cat : m_groups) - { - cat->update(); - } - if (m_groups.isEmpty()) { verticalScrollBar()->setRange(0, 0); @@ -152,12 +156,6 @@ void GroupView::updateGeometries() viewport()->update(); } -void GroupView::modelReset() -{ - scheduleDelayedItemsLayout(); - executeDelayedItemsLayout(); -} - bool GroupView::isIndexHidden(const QModelIndex &index) const { VisualGroup *cat = category(index); diff --git a/application/groupview/GroupView.h b/application/groupview/GroupView.h index a3863b6d..e0ff1cd9 100644 --- a/application/groupview/GroupView.h +++ b/application/groupview/GroupView.h @@ -60,6 +60,7 @@ protected slots: virtual void rowsInserted(const QModelIndex &parent, int start, int end) override; virtual void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end) override; void modelReset(); + void rowsRemoved(); protected: virtual bool isIndexHidden(const QModelIndex &index) const override; diff --git a/application/groupview/VisualGroup.cpp b/application/groupview/VisualGroup.cpp index 560fc9ca..235ca023 100644 --- a/application/groupview/VisualGroup.cpp +++ b/application/groupview/VisualGroup.cpp @@ -4,6 +4,7 @@ #include <QPainter> #include <QtMath> #include <QApplication> +#include <QDebug> #include "GroupView.h" @@ -53,7 +54,6 @@ void VisualGroup::update() QPair<int, int> VisualGroup::positionOf(const QModelIndex &index) const { - int x = 0; int y = 0; for (auto & row: rows) { @@ -66,7 +66,8 @@ QPair<int, int> VisualGroup::positionOf(const QModelIndex &index) const } y++; } - return qMakePair(x, y); + qWarning() << "Item" << index.row() << index.data(Qt::DisplayRole).toString() << "not found in visual group" << text; + return qMakePair(0, 0); } int VisualGroup::rowTopOf(const QModelIndex &index) const |