23#include <QDialogButtonBox>
24#include <QItemDelegate>
27#include <QTableWidgetItem>
29#include "moc_qgssymbollevelsdialog.cpp"
31using namespace Qt::StringLiterals;
46 tableLevels->setItemDelegate(
new SpinBoxDelegate(
this ) );
48 chkEnable->setChecked( usingSymbolLevels );
50 connect( chkEnable, &QAbstractButton::clicked,
this, &QgsSymbolLevelsWidget::updateUi );
56 mLegendSymbols << item;
61 tableLevels->setRowCount( mLegendSymbols.count() );
62 for (
int i = 0; i < mLegendSymbols.count(); i++ )
64 QgsSymbol *sym = mLegendSymbols.at( i ).symbol();
68 tableLevels->setVerticalHeaderItem( i,
new QTableWidgetItem( icon, QString() ) );
72 if ( layers > maxLayers )
76 tableLevels->setColumnCount( maxLayers + 1 );
77 tableLevels->setHorizontalHeaderItem( 0,
new QTableWidgetItem( QString() ) );
78 for (
int i = 0; i < maxLayers; i++ )
80 QString name = tr(
"Layer %1" ).arg( i );
81 tableLevels->setHorizontalHeaderItem( i + 1,
new QTableWidgetItem( name ) );
84 mMaxLayers = maxLayers;
88 if ( !usingSymbolLevels )
93 connect( tableLevels, &QTableWidget::cellChanged,
this, &QgsSymbolLevelsWidget::renderingPassChanged );
97void QgsSymbolLevelsWidget::populateTable()
100 for (
int row = 0; row < mLegendSymbols.count(); row++ )
102 QgsSymbol *sym = mLegendSymbols.at( row ).symbol();
103 const QString label = mLegendSymbols.at( row ).label();
104 QTableWidgetItem *itemLabel =
new QTableWidgetItem( label );
105 itemLabel->setFlags( itemLabel->flags() ^ Qt::ItemIsEditable );
106 tableLevels->setItem( row, 0, itemLabel );
107 for (
int layer = 0; layer < mMaxLayers; layer++ )
109 QTableWidgetItem *item =
nullptr;
112 item =
new QTableWidgetItem();
113 item->setFlags( Qt::ItemFlags() );
117 const QgsSymbolLayer *sl = sym->
symbolLayer( layer );
119 item =
new QTableWidgetItem( icon, QString::number( sl->
renderingPass() ) );
121 tableLevels->setItem( row, layer + 1, item );
122 tableLevels->resizeColumnToContents( 0 );
127void QgsSymbolLevelsWidget::updateUi()
129 tableLevels->setEnabled( chkEnable->isChecked() );
143 mRenderer->setLegendSymbolItem( legendSymbol.ruleKey(), sym->
clone() );
150void QgsSymbolLevelsWidget::setDefaultLevels()
164 return chkEnable->isChecked();
169 return mLegendSymbols;
172void QgsSymbolLevelsWidget::renderingPassChanged(
int row,
int column )
174 if ( row < 0 || row >= mLegendSymbols.count() )
176 QgsSymbol *sym = mLegendSymbols.at( row ).symbol();
186 mForceOrderingEnabled = enabled;
189 chkEnable->setChecked(
true );
204 QVBoxLayout *vLayout =
new QVBoxLayout();
206 vLayout->addWidget( mWidget );
207 QDialogButtonBox *bbox =
new QDialogButtonBox( QDialogButtonBox::Cancel | QDialogButtonBox::Help | QDialogButtonBox::Ok, Qt::Horizontal );
208 connect( bbox, &QDialogButtonBox::accepted,
this, &QgsSymbolLevelsDialog::accept );
209 connect( bbox, &QDialogButtonBox::rejected,
this, &QgsSymbolLevelsDialog::reject );
210 connect( bbox, &QDialogButtonBox::helpRequested,
this, &QgsSymbolLevelsDialog::showHelp );
211 vLayout->addWidget( bbox );
212 setLayout( vLayout );
213 setWindowTitle( tr(
"Symbol Levels" ) );
218 mWidget->setForceOrderingEnabled( enabled );
223 return mWidget->usingLevels();
228 return mWidget->symbolLevels();
231void QgsSymbolLevelsDialog::showHelp()
233 QgsHelp::openHelp( u
"working_with_vector/vector_properties.html#symbols-levels"_s );
238QWidget *SpinBoxDelegate::createEditor( QWidget *parent,
const QStyleOptionViewItem &,
const QModelIndex & )
const
240 QSpinBox *editor =
new QSpinBox( parent );
241 editor->setMinimum( 0 );
242 editor->setMaximum( 999 );
246void SpinBoxDelegate::setEditorData( QWidget *editor,
const QModelIndex &index )
const
248 int value = index.model()->data( index, Qt::EditRole ).toInt();
249 QSpinBox *spinBox =
static_cast<QSpinBox *
>( editor );
250 spinBox->setValue( value );
253void SpinBoxDelegate::setModelData( QWidget *editor, QAbstractItemModel *model,
const QModelIndex &index )
const
255 QSpinBox *spinBox =
static_cast<QSpinBox *
>( editor );
256 spinBox->interpretText();
257 int value = spinBox->value();
259 model->setData( index, value, Qt::EditRole );
262void SpinBoxDelegate::updateEditorGeometry( QWidget *editor,
const QStyleOptionViewItem &option,
const QModelIndex & )
const
264 editor->setGeometry( option.rect );
@ Millimeters
Millimeters.
Abstract base class for all 2D vector feature renderers.
static void openHelp(const QString &key)
Opens help topic for the given help key using default system web browser.
Stores information about one class/rule of a vector layer renderer in a unified way that can be used ...
Stores properties relating to a screen.
static QIcon symbolLayerPreviewIcon(const QgsSymbolLayer *layer, Qgis::RenderUnit u, QSize size, const QgsMapUnitScale &scale=QgsMapUnitScale(), Qgis::SymbolType parentSymbolType=Qgis::SymbolType::Hybrid, QgsMapLayer *mapLayer=nullptr, const QgsScreenProperties &screen=QgsScreenProperties())
Draws a symbol layer preview to an icon.
static QIcon symbolPreviewIcon(const QgsSymbol *symbol, QSize size, int padding=0, QgsLegendPatchShape *shape=nullptr, const QgsScreenProperties &screen=QgsScreenProperties())
Returns an icon preview for a color ramp.
void setRenderingPass(int renderingPass)
Specifies the rendering pass in which this symbol layer should be rendered.
int renderingPass() const
Specifies the rendering pass in which this symbol layer should be rendered.
QgsLegendSymbolList symbolLevels() const
Returns the current legend symbols with rendering passes set, as defined in the widget.
QgsSymbolLevelsDialog(QgsFeatureRenderer *renderer, bool usingSymbolLevels, QWidget *parent=nullptr)
Constructor for QgsSymbolLevelsDialog.
bool usingLevels() const
Returns whether the level ordering is enabled.
void setForceOrderingEnabled(bool enabled)
Abstract base class for all rendered symbols.
QgsSymbolLayer * symbolLayer(int layer)
Returns the symbol layer at the specified index.
virtual QgsSymbol * clone() const =0
Returns a deep copy of this symbol.
int symbolLayerCount() const
Returns the total number of symbol layers contained in the symbol.
Qgis::SymbolType type() const
Returns the symbol's type.
int scaleIconSize(int standardSize)
Scales an icon size to compensate for display pixel density, making the icon size hi-dpi friendly,...
QList< QgsLegendSymbolItem > QgsLegendSymbolList