Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 10 additions & 5 deletions panels/dock/taskmanager/rolecombinemodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -126,25 +126,30 @@ RoleCombineModel::RoleCombineModel(QAbstractItemModel* major, QAbstractItemModel

// create minor role map
auto minorRolenames = m_minor->roleNames();
auto thisRoleNames = roleNames();
std::for_each(minorRolenames.constBegin(), minorRolenames.constEnd(), [&minorRolenames, &thisRoleNames, this](auto &roleName){
m_minorRolesMap.insert(thisRoleNames.key(roleName), minorRolenames.key(roleName));
m_roleNames = createRoleNames();
std::for_each(minorRolenames.constBegin(), minorRolenames.constEnd(), [&minorRolenames, this](auto &roleName) {
m_minorRolesMap.insert(m_roleNames.key(roleName), minorRolenames.key(roleName));
});
}

QHash<int, QByteArray> RoleCombineModel::roleNames() const
QHash<int, QByteArray> RoleCombineModel::createRoleNames() const
{
auto roleNames = sourceModel()->roleNames();
auto keys = sourceModel()->roleNames().keys();
auto lastRole = *(std::max_element(keys.constBegin(), keys.constEnd()));
auto minorRoleNames = m_minor->roleNames().values();
std::for_each(minorRoleNames.constBegin(), minorRoleNames.constEnd(), [&lastRole, &roleNames, this](auto &roleName){
std::for_each(minorRoleNames.constBegin(), minorRoleNames.constEnd(), [&lastRole, &roleNames, this](auto &roleName) {
roleNames.insert(++lastRole, roleName);
});

return roleNames;
}

QHash<int, QByteArray> RoleCombineModel::roleNames() const
{
return m_roleNames;
}

int RoleCombineModel::rowCount(const QModelIndex &parent) const
{
return sourceModel()->rowCount();
Expand Down
5 changes: 5 additions & 0 deletions panels/dock/taskmanager/rolecombinemodel.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,16 @@ class RoleCombineModel : public QAbstractProxyModel
QModelIndex mapToSource(const QModelIndex &proxyIndex) const override;
QModelIndex mapFromSource(const QModelIndex &sourceIndex) const override;

private:
QHash<int, QByteArray> createRoleNames() const;

private:
QAbstractItemModel* m_minor;

// Hash table used to map this QModelIndex row & column 2 origin QModelIndex row & column.
QMap<QPair<int, int> ,QPair<int, int>> m_indexMap;
// Hash table map role in this model to role in origin model.
QHash<int, int> m_minorRolesMap;

QHash<int, QByteArray> m_roleNames;
};
3 changes: 3 additions & 0 deletions panels/dock/taskmanager/rolegroupmodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,9 @@ void RoleGroupModel::setSourceModel(QAbstractItemModel *model)

int RoleGroupModel::rowCount(const QModelIndex &parent) const
{
if (!sourceModel()) {
return 0;
}
if (parent.isValid()) {
auto list = m_rowMap.value(parent.row(), nullptr);
return nullptr == list ? 0 : list->size();
Expand Down