Files
cbh/ElaWidgetTools/DeveloperComponents/ElaBreadcrumbBarModel.cpp
2025-09-19 22:40:52 +08:00

113 lines
2.5 KiB
C++

#include "ElaBreadcrumbBarModel.h"
ElaBreadcrumbBarModel::ElaBreadcrumbBarModel(QObject* parent)
: QAbstractListModel{parent}
{
}
ElaBreadcrumbBarModel::~ElaBreadcrumbBarModel()
{
}
int ElaBreadcrumbBarModel::rowCount(const QModelIndex& parent) const
{
if (!_breadcrumbList.isEmpty())
{
return _breadcrumbList.count() * 2 - 1;
}
return 0;
}
QVariant ElaBreadcrumbBarModel::data(const QModelIndex& index, int role) const
{
if (role == Qt::DisplayRole)
{
if (index.row() % 2 == 0)
{
return _breadcrumbList[index.row() / 2];
}
else
{
return ">";
}
}
else if (role == Qt::UserRole)
{
if (index.row() == _breadcrumbList.count() * 2 - 2 || index.row() == _breadcrumbList.count() * 2 - 3)
{
return QString("LastBreadcrumb");
}
}
return QVariant();
}
void ElaBreadcrumbBarModel::appendBreadcrumb(QString breadcrumb)
{
if (!breadcrumb.isEmpty())
{
if (_breadcrumbList.count() && _breadcrumbList.last() == breadcrumb)
{
return;
}
if (_breadcrumbList.count() >= 2 && _breadcrumbList[_breadcrumbList.count() - 2] == breadcrumb)
{
beginResetModel();
_breadcrumbList.removeLast();
endResetModel();
return;
}
beginResetModel();
_breadcrumbList.append(breadcrumb);
endResetModel();
}
}
void ElaBreadcrumbBarModel::removeBreadcrumb(QString breadcrumb)
{
if (_breadcrumbList.contains(breadcrumb))
{
beginResetModel();
_breadcrumbList.removeAt(_breadcrumbList.lastIndexOf(breadcrumb));
endResetModel();
}
}
void ElaBreadcrumbBarModel::removeBreadcrumb(int index)
{
if (index >= _breadcrumbList.count())
{
return;
}
beginResetModel();
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
_breadcrumbList.remove(index, _breadcrumbList.count() - index);
#else
for (int i = _breadcrumbList.count() - 1; i >= 0; i--)
{
if (i < index)
{
break;
}
_breadcrumbList.removeAt(i);
}
#endif
endResetModel();
}
void ElaBreadcrumbBarModel::setBreadcrumbList(QStringList breadcrumbList)
{
beginResetModel();
this->_breadcrumbList = breadcrumbList;
endResetModel();
}
int ElaBreadcrumbBarModel::getBreadcrumbListCount()
{
return _breadcrumbList.count();
}
QStringList ElaBreadcrumbBarModel::getBreadcrumbList()
{
return _breadcrumbList;
}