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

#include <channelmodel.h>

+ Inheritance diagram for ChannelModel:

Public Slots

void rowActivated (const QModelIndex &index)
 
void slotColorSpaceChanged (const KoColorSpace *colorSpace)
 

Signals

void channelFlagsChanged ()
 

Public Member Functions

 ChannelModel (QObject *parent=0)
 
int columnCount (const QModelIndex &parent=QModelIndex()) const override
 
QVariant data (const QModelIndex &index, int role=Qt::DisplayRole) const override
 
Qt::ItemFlags flags (const QModelIndex &index) const override
 
QVariant headerData (int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const override
 
int rowCount (const QModelIndex &parent=QModelIndex()) const override
 
void setCanvas (KisCanvas2 *canvas)
 
void setChannelThumbnails (const QVector< QImage > &channels, const KoColorSpace *cs)
 
bool setData (const QModelIndex &index, const QVariant &value, int role=Qt::EditRole) override
 
void setThumbnailSizeLimit (QSize size)
 
QSize thumbnailSizeLimit () const
 
 ~ChannelModel () override
 

Private Attributes

QPointer< KisCanvas2m_canvas
 
KisSignalAutoConnectionsStore m_canvasConnections
 
int m_channelCount
 
int m_oversampleRatio
 
QVector< QImage > m_thumbnails
 
QSize m_thumbnailSizeLimit
 

Detailed Description

Definition at line 21 of file channelmodel.h.

Constructor & Destructor Documentation

◆ ChannelModel()

ChannelModel::ChannelModel ( QObject * parent = 0)

Definition at line 22 of file channelmodel.cpp.

22 :
23 QAbstractTableModel(parent),
24 m_canvas(nullptr),
27{
28 setThumbnailSizeLimit(QSize(64, 64));
29}
QPointer< KisCanvas2 > m_canvas
int m_oversampleRatio
void setThumbnailSizeLimit(QSize size)

References setThumbnailSizeLimit().

◆ ~ChannelModel()

ChannelModel::~ChannelModel ( )
override

Definition at line 31 of file channelmodel.cpp.

32{
33}

Member Function Documentation

◆ channelFlagsChanged

void ChannelModel::channelFlagsChanged ( )
signal

◆ columnCount()

int ChannelModel::columnCount ( const QModelIndex & parent = QModelIndex()) const
override

Definition at line 93 of file channelmodel.cpp.

94{
95 if (!m_canvas) return 0;
96
97 //columns are: checkbox, thumbnail, channel name
98 return 3;
99}

References m_canvas.

◆ data()

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

Definition at line 35 of file channelmodel.cpp.

36{
37 if (m_canvas && m_canvas->image() && index.isValid()) {
38 KisGroupLayerSP rootLayer = m_canvas->image()->rootLayer();
39 const KoColorSpace *cs = rootLayer->colorSpace();
40 if (cs->channelCount() != m_channelCount) return QVariant();
41
42 const QList<KoChannelInfo*> channels = cs->channels();
43
44 int channelIndex = index.row();
45
46 if (index.row() < cs->channelCount()) {
47
48 switch (role) {
49 case Qt::DisplayRole: {
50 if (index.column() == 2) {
51 return channels.at(channelIndex)->name();
52 }
53 return QVariant();
54 }
55 case Qt::DecorationRole: {
56 if (index.column() == 1 &&
57 !m_thumbnails.isEmpty() &&
58 index.row() < m_thumbnails.size()) {
59
60 return QVariant(m_thumbnails.at(index.row()));
61 }
62 return QVariant();
63 }
64 case Qt::CheckStateRole: {
65 Q_ASSERT(index.row() < rowCount());
66 Q_ASSERT(index.column() < columnCount());
67
68 if (index.column() == 0) {
69 QBitArray flags = rootLayer->channelFlags();
70 return (flags.isEmpty() || flags.testBit(channelIndex)) ? Qt::Checked : Qt::Unchecked;
71 }
72 return QVariant();
73 }
74 }
75 }
76 }
77 return QVariant();
78}
QVector< QImage > m_thumbnails
int columnCount(const QModelIndex &parent=QModelIndex()) const override
Qt::ItemFlags flags(const QModelIndex &index) const override
int rowCount(const QModelIndex &parent=QModelIndex()) const override
QList< KoChannelInfo * > channels
virtual quint32 channelCount() const =0
const KoColorSpace * colorSpace() const override
QBitArray channelFlags
Definition kis_layer.cc:167

References KoColorSpace::channelCount(), KisLayer::channelFlags, KoColorSpace::channels, KisGroupLayer::colorSpace(), columnCount(), flags(), m_canvas, m_channelCount, m_thumbnails, and rowCount().

◆ flags()

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

Definition at line 161 of file channelmodel.cpp.

162{
163 Qt::ItemFlags flags = Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsUserCheckable;
164 return flags;
165}

References flags().

◆ headerData()

QVariant ChannelModel::headerData ( int section,
Qt::Orientation orientation,
int role = Qt::DisplayRole ) const
override

Definition at line 80 of file channelmodel.cpp.

81{
82 Q_UNUSED(section); Q_UNUSED(orientation); Q_UNUSED(role);
83 return QVariant();
84}

◆ rowActivated

void ChannelModel::rowActivated ( const QModelIndex & index)
slot

Definition at line 132 of file channelmodel.cpp.

133{
134 if (m_canvas && m_canvas->image()) {
135 KisGroupLayerWSP rootLayer = m_canvas->image()->rootLayer();
136 const KoColorSpace* cs = rootLayer->colorSpace();
137 if (cs->channelCount() != m_channelCount) return;
138
139 const QList<KoChannelInfo*> channels = cs->channels();
140 Q_ASSERT(index.row() <= channels.count());
141
142 int channelIndex = index.row();
143
144 QBitArray flags = rootLayer->channelFlags();
145 flags = flags.isEmpty() ? cs->channelFlags(true, true) : flags;
146 Q_ASSERT(!flags.isEmpty());
147
148 for (int i = 0; i < channels.count(); ++i) {
149 if (channels[i]->channelType() != KoChannelInfo::ALPHA) {
150 flags.setBit(i, (i == channelIndex));
151 }
152 }
153
154 rootLayer->setChannelFlags(flags);
155
156 Q_EMIT channelFlagsChanged();
157 Q_EMIT dataChanged(this->index(0, 0), this->index(channels.count(), 0));
158 }
159}
void channelFlagsChanged()
@ ALPHA
The channel represents the opacity of a pixel.
QBitArray channelFlags(bool color=true, bool alpha=false) const

References KoChannelInfo::ALPHA, KoColorSpace::channelCount(), KoColorSpace::channelFlags(), channelFlagsChanged(), KoColorSpace::channels, flags(), m_canvas, and m_channelCount.

◆ rowCount()

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

Definition at line 86 of file channelmodel.cpp.

87{
88 if (!m_canvas || !m_canvas->image()) return 0;
89
90 return m_channelCount;
91}

References m_canvas, and m_channelCount.

◆ setCanvas()

void ChannelModel::setCanvas ( KisCanvas2 * canvas)

Definition at line 167 of file channelmodel.cpp.

168{
170
171 m_canvas = canvas;
172
173 if (m_canvas) {
175 SIGNAL(sigColorSpaceChanged(const KoColorSpace*)),
176 this,
177 SLOT(slotColorSpaceChanged(const KoColorSpace*)));
178 }
179}
void slotColorSpaceChanged(const KoColorSpace *colorSpace)
KisSignalAutoConnectionsStore m_canvasConnections
void addConnection(Sender sender, Signal signal, Receiver receiver, Method method, Qt::ConnectionType type=Qt::AutoConnection)

References KisSignalAutoConnectionsStore::addConnection(), KisSignalAutoConnectionsStore::clear(), m_canvas, m_canvasConnections, and slotColorSpaceChanged().

◆ setChannelThumbnails()

void ChannelModel::setChannelThumbnails ( const QVector< QImage > & channels,
const KoColorSpace * cs )

Definition at line 181 of file channelmodel.cpp.

182{
183 if (m_canvas) {
184 KisGroupLayerWSP rootLayer = m_canvas->image()->rootLayer();
185
186 if (!cs || *rootLayer->colorSpace() == *cs) {
187 const int newChannelCount = cs ? cs->channelCount() : 0;
188
189
190 if (newChannelCount != m_channelCount) {
191 beginResetModel();
192 m_thumbnails = channels;
193 m_channelCount = newChannelCount;
194 endResetModel();
195 } else {
196 m_thumbnails = channels;
197 Q_EMIT dataChanged(this->index(0, 0), this->index(channels.count(), this->columnCount()));
198 }
199 }
200 }
201}

References KoColorSpace::channelCount(), m_canvas, m_channelCount, and m_thumbnails.

◆ setData()

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

Definition at line 101 of file channelmodel.cpp.

102{
103 if (m_canvas && m_canvas->image()) {
104 KisGroupLayerSP rootLayer = m_canvas->image()->rootLayer();
105 const KoColorSpace *cs = rootLayer->colorSpace();
106 if (cs->channelCount() != m_channelCount) return false;
107
108 const QList<KoChannelInfo*> channels = cs->channels();
109 KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(index.row() <= channels.count(), false);
110
111 int channelIndex = index.row();
112
113 if (role == Qt::CheckStateRole) {
114 QBitArray flags = rootLayer->channelFlags();
115 flags = flags.isEmpty() ? cs->channelFlags(true, true) : flags;
116 Q_ASSERT(!flags.isEmpty());
117
118 flags.setBit(channelIndex, value.toInt() == Qt::Checked);
119 rootLayer->setChannelFlags(flags);
120
121 Q_EMIT channelFlagsChanged();
122 Q_EMIT dataChanged(this->index(0, 0), this->index(channels.count(), 0));
123 return true;
124 }
125 }
126 return false;
127}
float value(const T *src, size_t ch)
#define KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(cond, val)
Definition kis_assert.h:129
virtual void setChannelFlags(const QBitArray &channelFlags)
Definition kis_layer.cc:342

References KoColorSpace::channelCount(), KisLayer::channelFlags, KoColorSpace::channelFlags(), channelFlagsChanged(), KoColorSpace::channels, KisGroupLayer::colorSpace(), flags(), KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE, m_canvas, m_channelCount, KisLayer::setChannelFlags(), and value().

◆ setThumbnailSizeLimit()

void ChannelModel::setThumbnailSizeLimit ( QSize size)

Definition at line 208 of file channelmodel.cpp.

209{
211}
QSize m_thumbnailSizeLimit
int size(const Forest< T > &forest)
Definition KisForest.h:1232

References m_thumbnailSizeLimit.

◆ slotColorSpaceChanged

void ChannelModel::slotColorSpaceChanged ( const KoColorSpace * colorSpace)
slot

Definition at line 203 of file channelmodel.cpp.

204{
205 setChannelThumbnails({}, colorSpace);
206}
void setChannelThumbnails(const QVector< QImage > &channels, const KoColorSpace *cs)

References setChannelThumbnails().

◆ thumbnailSizeLimit()

QSize ChannelModel::thumbnailSizeLimit ( ) const

Definition at line 213 of file channelmodel.cpp.

214{
216}

References m_thumbnailSizeLimit.

Member Data Documentation

◆ m_canvas

QPointer<KisCanvas2> ChannelModel::m_canvas
private

Definition at line 50 of file channelmodel.h.

◆ m_canvasConnections

KisSignalAutoConnectionsStore ChannelModel::m_canvasConnections
private

Definition at line 55 of file channelmodel.h.

◆ m_channelCount

int ChannelModel::m_channelCount
private

Definition at line 56 of file channelmodel.h.

◆ m_oversampleRatio

int ChannelModel::m_oversampleRatio
private

Definition at line 54 of file channelmodel.h.

◆ m_thumbnails

QVector<QImage> ChannelModel::m_thumbnails
private

Definition at line 51 of file channelmodel.h.

◆ m_thumbnailSizeLimit

QSize ChannelModel::m_thumbnailSizeLimit
private

Definition at line 53 of file channelmodel.h.


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