Commit 25f07764423af70cf3f4daa2590969f8595613f6

Authored by Peter M. Groen
1 parent 1dce31e3

Implementing the memorymodel

src/CMakeLists.txt
@@ -14,11 +14,13 @@ include(compiler) @@ -14,11 +14,13 @@ include(compiler)
14 set( SRC_LIST 14 set( SRC_LIST
15 ${CMAKE_CURRENT_SOURCE_DIR}/tablemodel/tablemodel.cpp 15 ${CMAKE_CURRENT_SOURCE_DIR}/tablemodel/tablemodel.cpp
16 ${CMAKE_CURRENT_SOURCE_DIR}/tablemodel/modeldataitem.cpp 16 ${CMAKE_CURRENT_SOURCE_DIR}/tablemodel/modeldataitem.cpp
  17 + ${CMAKE_CURRENT_SOURCE_DIR}/memorymodel/memorymodel.cpp
17 ) 18 )
18 19
19 include(qtmoc) 20 include(qtmoc)
20 create_mocs( SRC_LIST MOC_LIST 21 create_mocs( SRC_LIST MOC_LIST
21 ${CMAKE_CURRENT_SOURCE_DIR}/tablemodel/tablemodel.h 22 ${CMAKE_CURRENT_SOURCE_DIR}/tablemodel/tablemodel.h
  23 + ${CMAKE_CURRENT_SOURCE_DIR}/memorymodel/memorymodel.h
22 ) 24 )
23 25
24 link_directories( 26 link_directories(
src/memorymodel/memorymodel.cpp 0 → 100644
  1 +#include "memorymodel.h"
  2 +
  3 +MemoryModel::MemoryModel(int segments, int registers_per_segment, QObject *parent)
  4 + : QAbstractItemModel(parent)
  5 + , m_memoryData()
  6 +{
  7 + for(int nCount = 0; nCount < segments; nCount++)
  8 + {
  9 + m_memoryData.insert( nCount, QVector<uint16_t>(registers_per_segment, 0x00) );
  10 + }
  11 +}
  12 +
  13 +int MemoryModel::columnCount(const QModelIndex &parent) const
  14 +{
  15 + if(rowCount(parent) > 0)
  16 + {
  17 + return m_memoryData.value(0).count();
  18 + }
  19 + return 0;
  20 +}
  21 +
  22 +QVariant MemoryModel::data(const QModelIndex &index, int role) const
  23 +{
  24 + int segment = index.row();
  25 + int reg = index.column();
  26 +
  27 + switch(role)
  28 + {
  29 + case Qt::DisplayRole:
  30 + return QVariant(m_memoryData.value(segment).at(reg));
  31 +
  32 + default:
  33 + return QVariant();
  34 + }
  35 +}
  36 +
  37 +QVariant MemoryModel::headerData(int section, Qt::Orientation orientation, int role) const
  38 +{
  39 + // Make sure we stay within the header boundaries...
  40 + // ColumnNames
  41 + if(role == Qt::DisplayRole && orientation == Qt::Horizontal && section < m_headers.size())
  42 + {
  43 + return m_headers.at(section);
  44 + }
  45 + return QVariant();
  46 +}
  47 +
  48 +QModelIndex MemoryModel::index(int row, int column, const QModelIndex &parent) const
  49 +{
  50 +
  51 +}
  52 +
  53 +QModelIndex MemoryModel::parent(const QModelIndex &index) const
  54 +{
  55 + Q_UNUSED(index)
  56 + return QModelIndex();
  57 +}
  58 +
  59 +int MemoryModel::rowCount(const QModelIndex &parent) const
  60 +{
  61 + return m_memoryData.count();
  62 +}
  63 +
  64 +bool MemoryModel::setData(const QModelIndex &index, const QVariant &value, int role)
  65 +{
  66 +
  67 +}
  68 +
  69 +bool MemoryModel::setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role)
  70 +{
  71 +
  72 +}
src/memorymodel/memorymodel.h 0 → 100644
  1 +#pragma once
  2 +
  3 +#include <QAbstractItemModel>
  4 +#include <QVector>
  5 +#include <QHash>
  6 +
  7 +class MemoryModel : public QAbstractItemModel
  8 +{
  9 + Q_OBJECT
  10 +
  11 +public:
  12 + explicit MemoryModel(int segments = 10, int registers_per_segment = 10, QObject *parent = nullptr);
  13 + virtual ~MemoryModel() override {}
  14 +
  15 + virtual int columnCount(const QModelIndex &parent = QModelIndex()) const override;
  16 + virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
  17 + virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
  18 + virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override;
  19 + virtual QModelIndex parent(const QModelIndex &index) const override;
  20 + virtual int rowCount(const QModelIndex &parent = QModelIndex()) const override;
  21 + virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override;
  22 + virtual bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole) override;
  23 +
  24 +private:
  25 + QHash<int, QVector<uint16_t>> m_memoryData;
  26 + QStringList m_headers;
  27 +};