Krita Source Code Documentation
Loading...
Searching...
No Matches
KisMultiSensorsModel Class Reference

#include <KisMultiSensorsModel.h>

+ Inheritance diagram for KisMultiSensorsModel:

Classes

struct  Private
 

Public Types

using MultiSensorData = std::vector<SensorData>
 
using SensorData = std::pair<KoID, bool>
 

Public Member Functions

QVariant data (const QModelIndex &index, int role=Qt::DisplayRole) const override
 
Qt::ItemFlags flags (const QModelIndex &index) const override
 
QString getSensorId (const QModelIndex &index)
 
 KisMultiSensorsModel (lager::cursor< MultiSensorData > sensorsData, QObject *parent=0)
 
int rowCount (const QModelIndex &parent=QModelIndex()) const override
 
QModelIndex sensorIndex (const QString &id)
 
bool setData (const QModelIndex &index, const QVariant &value, int role=Qt::EditRole) override
 
 ~KisMultiSensorsModel () override
 

Private Member Functions

void slotSensorModelChanged ()
 

Private Attributes

QScopedPointer< Privatem_d
 

Detailed Description

Definition at line 20 of file KisMultiSensorsModel.h.

Member Typedef Documentation

◆ MultiSensorData

Definition at line 25 of file KisMultiSensorsModel.h.

◆ SensorData

using KisMultiSensorsModel::SensorData = std::pair<KoID, bool>

Definition at line 24 of file KisMultiSensorsModel.h.

Constructor & Destructor Documentation

◆ KisMultiSensorsModel()

KisMultiSensorsModel::KisMultiSensorsModel ( lager::cursor< MultiSensorData > sensorsData,
QObject * parent = 0 )
explicit

Definition at line 20 of file KisMultiSensorsModel.cpp.

22 : QAbstractListModel(parent),
23 m_d(new Private(sensorsData))
24{
25 m_d->sensorsData.bind(std::bind(&KisMultiSensorsModel::slotSensorModelChanged, this));
26}
QScopedPointer< Private > m_d

References m_d, and slotSensorModelChanged().

◆ ~KisMultiSensorsModel()

KisMultiSensorsModel::~KisMultiSensorsModel ( )
override

Definition at line 28 of file KisMultiSensorsModel.cpp.

29{
30}

Member Function Documentation

◆ data()

QVariant KisMultiSensorsModel::data ( const QModelIndex & index,
int role = Qt::DisplayRole ) const
override

Definition at line 37 of file KisMultiSensorsModel.cpp.

38{
39 if (!index.isValid()) return QVariant();
40
41 if (role == Qt::DisplayRole) {
42 return m_d->sensorsData->at(index.row()).first.name();
43 }
44 else if (role == Qt::CheckStateRole) {
45 return m_d->sensorsData->at(index.row()).second ? Qt::Checked : Qt::Unchecked;
46 }
47 return QVariant();
48}

References m_d.

◆ flags()

Qt::ItemFlags KisMultiSensorsModel::flags ( const QModelIndex & index) const
override

Definition at line 74 of file KisMultiSensorsModel.cpp.

75{
76 return Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled;
77}

◆ getSensorId()

QString KisMultiSensorsModel::getSensorId ( const QModelIndex & index)

Definition at line 79 of file KisMultiSensorsModel.cpp.

80{
81 if (!index.isValid()) return 0;
82 return m_d->sensorsData->at(index.row()).first.id();
83}

References m_d.

◆ rowCount()

int KisMultiSensorsModel::rowCount ( const QModelIndex & parent = QModelIndex()) const
override

Definition at line 32 of file KisMultiSensorsModel.cpp.

33{
34 return m_d->sensorsData->size();
35}

References m_d.

◆ sensorIndex()

QModelIndex KisMultiSensorsModel::sensorIndex ( const QString & id)

Create an index that correspond to the sensor given in argument.

Definition at line 85 of file KisMultiSensorsModel.cpp.

86{
87 const size_t foundIndex =
88 std::distance(m_d->sensorsData->begin(),
89 std::find_if(m_d->sensorsData->begin(), m_d->sensorsData->end(),
90 [id] (const SensorData &sensor) {
91 return sensor.first.id() == id;
92 }));
93
94 return foundIndex < m_d->sensorsData->size() ?
95 index(foundIndex) : QModelIndex();
96}
std::pair< KoID, bool > SensorData

References m_d.

◆ setData()

bool KisMultiSensorsModel::setData ( const QModelIndex & index,
const QVariant & value,
int role = Qt::EditRole )
override

Definition at line 50 of file KisMultiSensorsModel.cpp.

51{
52 bool result = false;
53
54 if (role == Qt::CheckStateRole) {
55 const bool checked = (value.toInt() == Qt::Checked);
56
57 m_d->sensorsData.update([index, checked] (MultiSensorData sensors) {
58 const int numActiveSensors =
59 std::count_if(sensors.begin(), sensors.end(),
60 std::mem_fn(&SensorData::second));
61
62 // we don't allow unchecking of the last sensor (but why?)
63 if (checked || numActiveSensors > 1 ) {
64 sensors[index.row()].second = checked;
65 }
66 return sensors;
67 });
68 result = true;
69 }
70
71 return result;
72}
float value(const T *src, size_t ch)
std::vector< SensorData > MultiSensorData
std::vector< SensorData * > sensors(Data *data)

References m_d, and value().

◆ slotSensorModelChanged()

void KisMultiSensorsModel::slotSensorModelChanged ( )
private

Definition at line 98 of file KisMultiSensorsModel.cpp.

99{
100 Q_EMIT dataChanged(index(0), index(rowCount() - 1));
101}
int rowCount(const QModelIndex &parent=QModelIndex()) const override

References rowCount().

Member Data Documentation

◆ m_d

QScopedPointer<Private> KisMultiSensorsModel::m_d
private

Definition at line 52 of file KisMultiSensorsModel.h.


The documentation for this class was generated from the following files: