18#ifndef QGSPALETTEDRENDERERWIDGET_H
19#define QGSPALETTEDRENDERERWIDGET_H
21#include "ui_qgspalettedrendererwidgetbase.h"
30#include <QSortFilterProxyModel>
34class QgsLocaleAwareNumericLineEditDelegate;
43class QgsPalettedRendererClassGatherer :
public QThread
56 mFeedbackMutex.lock();
59 mFeedbackMutex.unlock();
65 bool wasCanceled()
const {
return mWasCanceled; }
74 void collectedClasses();
80 void progressChanged(
double progress );
83 std::unique_ptr<QgsRasterDataProvider> mProvider;
85 std::unique_ptr<QgsColorRamp> mRamp;
88 QgsRasterBlockFeedback *mFeedback =
nullptr;
89 QMutex mFeedbackMutex;
90 bool mWasCanceled =
false;
93class QgsPalettedRendererModel :
public QAbstractItemModel
105 QgsPalettedRendererModel( QObject *parent =
nullptr );
110 QgsPalettedRasterRenderer::Class classAtIndex(
const QModelIndex &index )
const {
return mData.at( index.row() ); }
112 QModelIndex index(
int row,
int column,
const QModelIndex &parent = QModelIndex() )
const override;
113 QModelIndex parent(
const QModelIndex &index )
const override;
114 int columnCount(
const QModelIndex &parent = QModelIndex() )
const override;
115 int rowCount(
const QModelIndex &parent = QModelIndex() )
const override;
116 QVariant data(
const QModelIndex &index,
int role = Qt::DisplayRole )
const override;
117 QVariant headerData(
int section, Qt::Orientation orientation,
int role )
const override;
118 bool setData(
const QModelIndex &index,
const QVariant &value,
int role = Qt::EditRole )
override;
119 Qt::ItemFlags flags(
const QModelIndex &index )
const override;
120 bool removeRows(
int row,
int count,
const QModelIndex &parent = QModelIndex() )
override;
121 bool insertRows(
int row,
int count,
const QModelIndex &parent = QModelIndex() )
override;
122 Qt::DropActions supportedDropActions()
const override;
123 QStringList mimeTypes()
const override;
124 QMimeData *mimeData(
const QModelIndexList &indexes )
const override;
125 bool dropMimeData(
const QMimeData *data, Qt::DropAction action,
int row,
int column,
const QModelIndex &parent )
override;
127 QModelIndex addEntry(
const QColor &color );
135 void classesChanged();
141class QgsPalettedRendererProxyModel :
public QSortFilterProxyModel
146 QgsPalettedRendererProxyModel( QObject *parent =
nullptr )
147 : QSortFilterProxyModel( parent )
155 bool lessThan(
const QModelIndex &left,
const QModelIndex &right )
const override
157 const QModelIndex lv { left.model()->index( left.row(),
static_cast<int>( QgsPalettedRendererModel::Column::ValueColumn ), left.parent() ) };
158 const QModelIndex rv { right.model()->index( right.row(),
static_cast<int>( QgsPalettedRendererModel::Column::ValueColumn ), right.parent() ) };
159 const double leftData { sourceModel()->data( lv ).toDouble() };
160 const double rightData { sourceModel()->data( rv ).toDouble() };
161 return leftData < rightData;
195 QMenu *mContextMenu =
nullptr;
196 QMenu *mAdvancedMenu =
nullptr;
197 QgsPalettedRendererModel *mModel =
nullptr;
198 QgsPalettedRendererProxyModel *mProxyModel =
nullptr;
201 QgsPalettedRendererClassGatherer *mGatherer =
nullptr;
205 QgsLocaleAwareNumericLineEditDelegate *mValueDelegate =
nullptr;
207 void setSelectionColor( const QItemSelection &selection, const QColor &color );
214 void changeOpacity();
216 void applyColorRamp();
217 void loadColorTable();
218 void saveColorTable();
220 void loadFromLayer();
221 void bandChanged(
int band );
223 void gatheredClasses();
224 void gathererThreadFinished();
Base class for all map layer types.
QList< QgsPalettedRasterRenderer::Class > ClassData
Map of value to class properties.
Represents a raster layer.
Raster renderer pipe that applies colors to a raster.
A rectangle specified with double values.