164 lines
3.8 KiB
C++
164 lines
3.8 KiB
C++
|
|
|
|
|
|
#include "LogViewTelegramEditModel.hpp"
|
|
#include <algorithm>
|
|
|
|
namespace N_LogView
|
|
{
|
|
|
|
|
|
int TelegramEditModel::rowCount(const QModelIndex &parent) const
|
|
{
|
|
return parent.isValid() ? 0 : m_telegrams.size();
|
|
}
|
|
|
|
|
|
int TelegramEditModel::columnCount(const QModelIndex &parent) const
|
|
{
|
|
return parent.isValid() ? 0 : 3;
|
|
}
|
|
|
|
|
|
QVariant TelegramEditModel::data(const QModelIndex &index, int role) const
|
|
{
|
|
if (index.isValid() && index.row() < m_telegrams.size())
|
|
{
|
|
if (role == Qt::DisplayRole)
|
|
{
|
|
const QSharedPointer<LogViewTelegram> telegram = m_telegrams.at(index.row());
|
|
switch (index.column())
|
|
{
|
|
case 0:
|
|
return telegram->getName();
|
|
case 1:
|
|
return telegram->getParticipantId();
|
|
case 2:
|
|
return telegram->getWaitTime();
|
|
}
|
|
}
|
|
else if (role == Qt::ToolTipRole)
|
|
{
|
|
const QSharedPointer<LogViewTelegram> telegram = m_telegrams.at(index.row());
|
|
if (telegram->isJsonTelegram())
|
|
return telegram->getData(QJsonDocument::JsonFormat::Indented);
|
|
}
|
|
}
|
|
return QVariant();
|
|
}
|
|
|
|
|
|
QVariant TelegramEditModel::headerData(int section,
|
|
Qt::Orientation orientation,
|
|
int role) const
|
|
{
|
|
if (orientation == Qt::Horizontal && role == Qt::DisplayRole)
|
|
{
|
|
switch (section)
|
|
{
|
|
case 0:
|
|
return tr("Description");
|
|
case 1:
|
|
return tr("Equip. No.");
|
|
case 2:
|
|
return tr("Wait Time");
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
return QAbstractTableModel::headerData(section, orientation, role);
|
|
}
|
|
|
|
|
|
void TelegramEditModel::clearTelegrams()
|
|
{
|
|
beginResetModel();
|
|
m_telegrams.clear();
|
|
endResetModel();
|
|
}
|
|
|
|
|
|
void TelegramEditModel::appendTelegrams(const QVector<QSharedPointer<LogViewTelegram> > &telegrams)
|
|
{
|
|
if (telegrams.isEmpty())
|
|
return;
|
|
beginInsertRows(QModelIndex(), m_telegrams.size(), m_telegrams.size() + telegrams.size() - 1);
|
|
m_telegrams += telegrams;
|
|
endInsertRows();
|
|
}
|
|
|
|
|
|
int TelegramEditModel::appendTelegram(const QSharedPointer<LogViewTelegram> &telegram)
|
|
{
|
|
beginInsertRows(QModelIndex(), m_telegrams.size(), m_telegrams.size());
|
|
m_telegrams.push_back(telegram);
|
|
telegram->rebuildJsonString();
|
|
endInsertRows();
|
|
return m_telegrams.size() - 1;
|
|
}
|
|
|
|
|
|
QSharedPointer<LogViewTelegram> TelegramEditModel::telegram(int row) const
|
|
{
|
|
if (row >= 0 && row < m_telegrams.size())
|
|
return m_telegrams.at(row);
|
|
return QSharedPointer<LogViewTelegram>();
|
|
}
|
|
|
|
|
|
bool TelegramEditModel::moveUp(int row)
|
|
{
|
|
if (row <= 0 || row >= m_telegrams.size())
|
|
return false;
|
|
beginMoveRows(QModelIndex(), row, row, QModelIndex(), row - 1);
|
|
std::swap(m_telegrams[row], m_telegrams[row - 1]);
|
|
endMoveRows();
|
|
return true;
|
|
}
|
|
|
|
|
|
bool TelegramEditModel::moveDown(int row)
|
|
{
|
|
if (row >= (m_telegrams.size() - 1))
|
|
return false;
|
|
beginMoveRows(QModelIndex(), row, row, QModelIndex(), row + 1);
|
|
std::swap(m_telegrams[row], m_telegrams[row + 1]);
|
|
endMoveRows();
|
|
return true;
|
|
}
|
|
|
|
|
|
void TelegramEditModel::emitDataChanged(int row)
|
|
{
|
|
QModelIndex top = createIndex(row, 0);
|
|
QModelIndex bottom = createIndex(row, columnCount() - 1);
|
|
emit dataChanged(top, bottom, {Qt::DisplayRole, Qt::ToolTipRole});
|
|
}
|
|
|
|
|
|
void TelegramEditModel::removeTelegrams(const QSet<int> &rows)
|
|
{
|
|
QList<int> rowList = rows.values();
|
|
std::sort(rowList.begin(), rowList.end());
|
|
|
|
for (int i = rowList.size() - 1 ; i >= 0; --i)
|
|
{
|
|
int row = rowList.at(i);
|
|
beginRemoveRows(QModelIndex(), row, row);
|
|
m_telegrams.remove(row);
|
|
endRemoveRows();
|
|
}
|
|
}
|
|
|
|
|
|
void TelegramEditModel::pasteRows(int row, const QSharedPointer<LogViewTelegram> &tele)
|
|
{
|
|
if (row < 0 || row > m_telegrams.size())
|
|
return;
|
|
beginInsertRows(QModelIndex(), row, row);
|
|
m_telegrams.insert(row, QSharedPointer<LogViewTelegram>(new LogViewTelegram(*tele.data())));
|
|
endInsertRows();
|
|
}
|
|
|
|
}
|