aheinecke@404: /* Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik aheinecke@404: * Software engineering by Intevation GmbH aheinecke@404: * aheinecke@404: * This file is Free Software under the GNU GPL (v>=2) aheinecke@404: * and comes with ABSOLUTELY NO WARRANTY! aheinecke@404: * See LICENSE.txt for details. aheinecke@404: */ rrenkert@334: #include "certificatetablemodel.h" rrenkert@334: rrenkert@397: #include rrenkert@397: rrenkert@334: CertificateTabelModel::CertificateTabelModel(QObject *parent) rrenkert@334: : QAbstractTableModel(parent) rrenkert@334: { rrenkert@342: header.append(""); andre@380: header.append(tr("Subject CN")); andre@380: header.append(tr("Subject O")); rrenkert@416: header.append(tr("Valid from")); rrenkert@416: header.append(tr("Valid to")); emanuel@661: header.append(tr("Fingerprint (SHA1)")); rrenkert@334: rrenkert@334: } rrenkert@334: rrenkert@358: void CertificateTabelModel::addCertificate(const Certificate& certificate, rrenkert@358: bool editable) rrenkert@334: { rrenkert@342: beginInsertRows(QModelIndex(), rowCount(), rowCount()); aheinecke@463: mCertificates.append(certificate); aheinecke@463: mCertificates.last().setEditable(editable); rrenkert@342: endInsertRows(); rrenkert@334: } rrenkert@334: rrenkert@376: bool CertificateTabelModel::removeRows(int row, int count, rrenkert@376: const QModelIndex &index) rrenkert@376: { rrenkert@376: beginRemoveRows(QModelIndex(), row, row + count - 1); andre@1316: if (count < 0 || row < 0 || (row + count) > mCertificates.size()) { rrenkert@376: return false; rrenkert@376: } andre@1316: for (int i = 0; i < count; ++i) { andre@1316: mCertificates.removeAt(row); rrenkert@376: } rrenkert@376: endRemoveRows(); rrenkert@376: return true; rrenkert@376: } rrenkert@376: rrenkert@396: bool CertificateTabelModel::removeAll() rrenkert@396: { aheinecke@463: return removeRows(0, mCertificates.size(), QModelIndex()); rrenkert@396: } rrenkert@396: rrenkert@334: QVariant CertificateTabelModel::data(const QModelIndex &index, rrenkert@334: int role) const rrenkert@334: { aheinecke@463: if (index.row() > mCertificates.size() || index.row() < 0) { rrenkert@334: return QVariant(); rrenkert@334: } rrenkert@334: rrenkert@342: if (role == Qt::DisplayRole) { aheinecke@463: Certificate cert = mCertificates.at(index.row()); rrenkert@342: QVariant ret; rrenkert@342: switch(index.column()) { rrenkert@342: case 0: ret = cert.isInstallCert(); break; rrenkert@342: case 1: ret = cert.subjectCN(); break; andre@380: case 2: ret = cert.subjectO(); break; emanuel@661: case 3: ret = cert.validFrom(); break; emanuel@661: case 4: ret = cert.validTo(); break; emanuel@661: case 5: ret = cert.fingerprint(); break; rrenkert@342: default: ; rrenkert@342: } rrenkert@342: return ret; rrenkert@334: } rrenkert@358: if (role == Qt::UserRole) { aheinecke@463: Certificate cert = mCertificates.at(index.row()); rrenkert@358: return cert.isEditable(); rrenkert@358: } rrenkert@397: if (role == Qt::FontRole && index.column() == 7) { rrenkert@397: QFont block("DejaVu Sans Mono"); rrenkert@397: return block; rrenkert@397: } rrenkert@334: rrenkert@334: return QVariant(); rrenkert@334: } rrenkert@334: rrenkert@348: bool CertificateTabelModel::setData(const QModelIndex &index, rrenkert@348: const QVariant &value, int role) rrenkert@348: { aheinecke@463: if (index.row() > mCertificates.size() || index.row() < 0) { rrenkert@353: return false; rrenkert@353: } rrenkert@353: rrenkert@353: bool newValue = value.toBool(); aheinecke@463: Certificate &cert = mCertificates[index.row()]; rrenkert@358: if (!cert.isEditable()) { rrenkert@358: return false; rrenkert@358: } rrenkert@353: cert.setInstallCert(newValue); rrenkert@353: rrenkert@353: emit dataChanged(index, index); rrenkert@353: rrenkert@348: return true; rrenkert@348: } rrenkert@348: rrenkert@334: QVariant CertificateTabelModel::headerData(int section, rrenkert@334: Qt::Orientation orientation, int role) const rrenkert@334: { rrenkert@334: if (orientation == Qt::Horizontal && role == Qt::DisplayRole) { rrenkert@342: return header.at(section); rrenkert@334: } rrenkert@334: return QVariant(); rrenkert@334: } rrenkert@334: rrenkert@334: int CertificateTabelModel::rowCount(const QModelIndex&) const rrenkert@334: { aheinecke@463: return mCertificates.size(); rrenkert@334: } rrenkert@334: rrenkert@334: int CertificateTabelModel::columnCount(const QModelIndex&) const rrenkert@334: { rrenkert@342: return header.size(); rrenkert@334: } rrenkert@334: rrenkert@348: Qt::ItemFlags CertificateTabelModel::flags(const QModelIndex &index) const rrenkert@348: { rrenkert@348: if (!index.isValid ()) rrenkert@348: return Qt::ItemIsSelectable; rrenkert@334: rrenkert@348: if (index.column() == 0) { rrenkert@348: return QAbstractTableModel::flags(index) | Qt::ItemIsEditable; rrenkert@348: } rrenkert@348: rrenkert@348: return QAbstractTableModel::flags(index); rrenkert@348: }