rahulch

Untitled

Oct 30th, 2019
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #ifndef PERSONDISPLAYDETAILSMODEL_H
  2. #define PERSONDISPLAYDETAILSMODEL_H
  3.  
  4. #include <QAbstractListModel>
  5.  
  6. #include "persondisplaydetails.h"
  7.  
  8. class PersonDisplayDetailsModel : public QAbstractListModel
  9. {
  10.     Q_OBJECT
  11.  
  12. public:
  13.  
  14.     enum PersonDisplayDetailsRoles {
  15.         XCoordRole = Qt::UserRole + 1,
  16.         YCoordRole,
  17.         HeightRole,
  18.         WidthRole,
  19.         FRIDRole,
  20.         DisplayTextRole,
  21.         FaceStatusColor
  22.     };
  23.  
  24.     explicit PersonDisplayDetailsModel(QObject* parent = nullptr);
  25.  
  26.     virtual QHash<int, QByteArray> roleNames() const override;
  27.  
  28.     virtual QVariant data(const QModelIndex& index, int role = PersonDisplayDetailsRoles::XCoordRole) const override;
  29.  
  30.     Q_INVOKABLE virtual int rowCount(const QModelIndex& parent = QModelIndex()) const override;
  31.  
  32.     void updateModelData(const QVector<PersonDisplayDetails>& personDisplayDetailsList = QVector<PersonDisplayDetails>());
  33.  
  34. private:
  35.     QVector<PersonDisplayDetails> m_personDisplayDetailsList;
  36. };
  37.  
  38. #endif // PERSONDISPLAYDETAILSMODEL_H
  39.  
  40.  
  41.  
  42.  
  43. #include "persondisplaydetailsmodel.h"
  44.  
  45. #include <QDebug>
  46.  
  47. PersonDisplayDetailsModel::PersonDisplayDetailsModel(QObject* parent)
  48.                          : QAbstractListModel(parent)
  49. {
  50. }
  51.  
  52. QHash<int, QByteArray> PersonDisplayDetailsModel::roleNames() const
  53. {
  54.     QHash<int, QByteArray> roles;
  55.  
  56.     roles[XCoordRole] = "xCoord";
  57.     roles[YCoordRole] = "yCoord";
  58.     roles[HeightRole] = "faceHeight";
  59.     roles[WidthRole] = "faceWidth";
  60.     roles[FRIDRole] = "frID";
  61.     roles[DisplayTextRole] = "displayText";
  62.     roles[FaceStatusColor] = "faceStatusColor";
  63.  
  64.     return roles;
  65. }
  66.  
  67. QVariant PersonDisplayDetailsModel::data(const QModelIndex& index, int role) const
  68. {
  69.     if (!index.isValid()) {
  70.         return QVariant();
  71.     }
  72.  
  73.     if (index.row() >= this->m_personDisplayDetailsList.count()) {
  74.         return QVariant();
  75.     }
  76.  
  77.     const PersonDisplayDetails& personDisplayDetails = this->m_personDisplayDetailsList.at(index.row());
  78.     switch (role) {
  79.         case XCoordRole:
  80.             return personDisplayDetails.getFaceBoundaryBox().getNLoc_X();
  81.         case YCoordRole:
  82.             return personDisplayDetails.getFaceBoundaryBox().getNLoc_Y();
  83.         case HeightRole:
  84.             return personDisplayDetails.getFaceBoundaryBox().getNHeight();
  85.         case WidthRole:
  86.             return personDisplayDetails.getFaceBoundaryBox().getNWidth();
  87.         case FRIDRole:
  88.             return personDisplayDetails.getFRID();
  89.         case DisplayTextRole:
  90.             return personDisplayDetails.getDisplayText();
  91.         case FaceStatusColor:
  92.             return personDisplayDetails.getFaceStatusColor();
  93.         default:
  94.             return QVariant();
  95.     }
  96. }
  97.  
  98. Q_INVOKABLE int PersonDisplayDetailsModel::rowCount(const QModelIndex& parent) const
  99. {
  100.     if (parent.isValid()) {
  101.         return 0;
  102.     }
  103.     return this->m_personDisplayDetailsList.count();
  104. }
  105.  
  106. void PersonDisplayDetailsModel::updateModelData(const QVector<PersonDisplayDetails>& personDisplayDetails)
  107. {
  108.     int i;
  109.     for (i = 0; i < personDisplayDetails.size(); ++i) {
  110.         if (i >= this->m_personDisplayDetailsList.size()) {
  111.             beginInsertRows(QModelIndex(), rowCount(), rowCount());
  112.             this->m_personDisplayDetailsList.append(personDisplayDetails[i]);
  113.             endInsertRows();
  114.         } else {
  115.             this->m_personDisplayDetailsList[i] = personDisplayDetails[i];
  116.             QModelIndex r1 = index(i);
  117.             QModelIndex r2 = index(i);
  118.             emit dataChanged(r1, r2);
  119.         }
  120.     }
  121.  
  122.     if (i < this->m_personDisplayDetailsList.size()) {
  123.         beginRemoveRows(QModelIndex(), i, this->m_personDisplayDetailsList.size() - 1);
  124.         for (; i < this->m_personDisplayDetailsList.size(); ++i) {
  125.             this->m_personDisplayDetailsList.removeAt(i);
  126.         }
  127.         endRemoveRows();
  128.     }
  129. }
Add Comment
Please, Sign In to add comment