diff options
Diffstat (limited to 'Swift/QtUI')
-rw-r--r-- | Swift/QtUI/ChattablesModel.cpp | 19 | ||||
-rw-r--r-- | Swift/QtUI/ChattablesModel.h | 6 |
2 files changed, 21 insertions, 4 deletions
diff --git a/Swift/QtUI/ChattablesModel.cpp b/Swift/QtUI/ChattablesModel.cpp index d1257b9..67d0579 100644 --- a/Swift/QtUI/ChattablesModel.cpp +++ b/Swift/QtUI/ChattablesModel.cpp @@ -17,6 +17,17 @@ namespace Swift { ChattablesModel::ChattablesModel(Chattables& chattables, QObject* parent) : QAbstractListModel(parent), chattables_(chattables) { - //FIXME: scoped connections, do it properly not reset. - chattables_.onAdded.connect([this](const JID& /*jid*/) {beginResetModel(); endResetModel();}); - chattables_.onRemoved.connect([this](const JID& /*jid*/) {beginResetModel(); endResetModel();}); - chattables_.onChanged.connect([this](const JID& /*jid*/) {beginResetModel(); endResetModel();}); + using scoped_connection = boost::signals2::scoped_connection; + connectionList_.emplace_back(std::make_unique<scoped_connection>( + chattables_.onBeginAdd.connect([this](int index) {beginInsertRows(QModelIndex(), index, index);}) + )); + connectionList_.emplace_back(std::make_unique<scoped_connection>( + chattables_.onAdded.connect([this]() {endInsertRows();}) + )); + connectionList_.emplace_back(std::make_unique<scoped_connection>( + chattables_.onChanged.connect( + [this](const JID& jid, int index) { + auto modelIndex = createIndex(index, 0, const_cast<JID*>(&jid)); + dataChanged(modelIndex, modelIndex, {}); + } + ) + )); } diff --git a/Swift/QtUI/ChattablesModel.h b/Swift/QtUI/ChattablesModel.h index 57073aa..6617d97 100644 --- a/Swift/QtUI/ChattablesModel.h +++ b/Swift/QtUI/ChattablesModel.h @@ -8,2 +8,7 @@ +#include <memory> +#include <vector> + +#include <boost/signals2/connection.hpp> + #include <QAbstractListModel> @@ -25,2 +30,3 @@ class ChattablesModel : public QAbstractListModel { Chattables& chattables_; + std::vector<std::unique_ptr<boost::signals2::scoped_connection>> connectionList_; }; |