113 lines
2.5 KiB
C++
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;
|
|
}
|