You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
o3de/Code/Editor/Util/ColumnGroupProxyModel.cpp

110 lines
2.7 KiB
C++

/*
* Copyright (c) Contributors to the Open 3D Engine Project.
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
*
*/
#include "EditorDefs.h"
#include "ColumnGroupProxyModel.h"
// Editor
#include "Util/ColumnSortProxyModel.h"
#include "Util/AbstractSortModel.h"
ColumnGroupProxyModel::ColumnGroupProxyModel(QObject* parent)
: AbstractGroupProxyModel(parent)
, m_sortModel(new ColumnSortProxyModel(this))
, m_freeSortColumn(-1)
{
AbstractGroupProxyModel::setSourceModel(m_sortModel);
connect(m_sortModel, &ColumnSortProxyModel::SortChanged, this, &ColumnGroupProxyModel::SortChanged);
}
void ColumnGroupProxyModel::sort(int column, Qt::SortOrder order)
{
if (m_freeSortColumn != -1)
{
m_sortModel->RemoveColumnWithoutSorting(m_freeSortColumn);
m_freeSortColumn = -1;
}
if (!m_groups.contains(column))
{
m_freeSortColumn = column;
}
m_sortModel->sort(column, order);
}
void ColumnGroupProxyModel::setSourceModel(QAbstractItemModel* sourceModel)
{
Q_ASSERT(qobject_cast<AbstractSortModel*>(sourceModel));
m_sortModel->setSourceModel(sourceModel);
RebuildTree();
}
void ColumnGroupProxyModel::AddGroup(int column)
{
if (!m_groups.contains(column))
{
m_groups.push_back(column);
sort(column);
Q_EMIT GroupsChanged();
}
}
void ColumnGroupProxyModel::RemoveGroup(int column)
{
if (m_groups.contains(column))
{
m_groups.remove(m_groups.indexOf(column));
m_sortModel->RemoveColumn(column);
Q_EMIT GroupsChanged();
}
}
void ColumnGroupProxyModel::SetGroups(const QVector<int>& columns)
{
m_groups.clear();
foreach(int col, columns)
{
m_groups.push_back(col);
m_sortModel->AddColumnWithoutSorting(col);
}
m_sortModel->SortModel();
Q_EMIT GroupsChanged();
}
void ColumnGroupProxyModel::ClearGroups()
{
m_groups.clear();
m_sortModel->ClearColumns();
Q_EMIT GroupsChanged();
}
QVector<int> ColumnGroupProxyModel::Groups() const
{
return m_groups;
}
bool ColumnGroupProxyModel::IsColumnSorted(int col) const
{
return m_sortModel->IsColumnSorted(col);
}
Qt::SortOrder ColumnGroupProxyModel::SortOrder(int col) const
{
return m_sortModel->SortOrder(col);
}
QStringList ColumnGroupProxyModel::GroupForSourceIndex(const QModelIndex& sourceIndex) const
{
QStringList group;
foreach(int column, m_groups)
group.push_back(QString::fromLatin1("%1: %2").arg(headerData(column, Qt::Horizontal).toString(), sourceIndex.sibling(sourceIndex.row(), column).data().toString()));
return group;
}
#include <Util/moc_ColumnGroupProxyModel.cpp>