/** * @RDE_HEADER@ * some models for LogViewGui * $Id$ * $HeadURL$ * $Author$ */ #include "LogViewTelegramEditModel.hpp" #include 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 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 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 > &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 &telegram) { beginInsertRows(QModelIndex(), m_telegrams.size(), m_telegrams.size()); m_telegrams.push_back(telegram); telegram->rebuildJsonString(); endInsertRows(); return m_telegrams.size() - 1; // row } // --------------------------------------------------------------- QSharedPointer TelegramEditModel::telegram(int row) const { if (row >= 0 && row < m_telegrams.size()) return m_telegrams.at(row); return QSharedPointer(); } // --------------------------------------------------------------- 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 &rows) { QList rowList = rows.values(); std::sort(rowList.begin(), rowList.end()); // von oben her löschen um ein Verschieben der Indizes zu vermeiden 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 &tele) { if (row < 0 || row > m_telegrams.size()) return; beginInsertRows(QModelIndex(), row, row); m_telegrams.insert(row, QSharedPointer(new LogViewTelegram(*tele.data()))); endInsertRows(); } } // namespace N_LogView