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 );
120 item =
new QTableWidgetItem( icon, QString::number( sl->
renderingPass() ) );
122 tableLevels->setItem( row, layer + 1, item );
123 tableLevels->resizeColumnToContents( 0 );
128void QgsSymbolLevelsWidget::updateUi()
130 tableLevels->setEnabled( chkEnable->isChecked() );
144 mRenderer->setLegendSymbolItem( legendSymbol.ruleKey(), sym->
clone() );
151void QgsSymbolLevelsWidget::setDefaultLevels()
165 return chkEnable->isChecked();
170 return mLegendSymbols;
173void QgsSymbolLevelsWidget::renderingPassChanged(
int row,
int column )
175 if ( row < 0 || row >= mLegendSymbols.count() )
177 QgsSymbol *sym = mLegendSymbols.at( row ).symbol();
187 mForceOrderingEnabled = enabled;
190 chkEnable->setChecked(
true );
205 QVBoxLayout *vLayout =
new QVBoxLayout();
207 vLayout->addWidget( mWidget );
208 QDialogButtonBox *bbox =
new QDialogButtonBox( QDialogButtonBox::Cancel | QDialogButtonBox::Help | QDialogButtonBox::Ok, Qt::Horizontal );
209 connect( bbox, &QDialogButtonBox::accepted,
this, &QgsSymbolLevelsDialog::accept );
210 connect( bbox, &QDialogButtonBox::rejected,
this, &QgsSymbolLevelsDialog::reject );
211 connect( bbox, &QDialogButtonBox::helpRequested,
this, &QgsSymbolLevelsDialog::showHelp );
212 vLayout->addWidget( bbox );
213 setLayout( vLayout );
214 setWindowTitle( tr(
"Symbol Levels" ) );
219 mWidget->setForceOrderingEnabled( enabled );
224 return mWidget->usingLevels();
229 return mWidget->symbolLevels();
232void QgsSymbolLevelsDialog::showHelp()
234 QgsHelp::openHelp( u
"working_with_vector/vector_properties.html#symbols-levels"_s );
239QWidget *SpinBoxDelegate::createEditor( QWidget *parent,
const QStyleOptionViewItem &,
const QModelIndex & )
const
241 QSpinBox *editor =
new QSpinBox( parent );
242 editor->setMinimum( 0 );
243 editor->setMaximum( 999 );
247void SpinBoxDelegate::setEditorData( QWidget *editor,
const QModelIndex &index )
const
249 int value = index.model()->data( index, Qt::EditRole ).toInt();
250 QSpinBox *spinBox =
static_cast<QSpinBox *
>( editor );
251 spinBox->setValue( value );
254void SpinBoxDelegate::setModelData( QWidget *editor, QAbstractItemModel *model,
const QModelIndex &index )
const
256 QSpinBox *spinBox =
static_cast<QSpinBox *
>( editor );
257 spinBox->interpretText();
258 int value = spinBox->value();
260 model->setData( index, value, Qt::EditRole );
263void SpinBoxDelegate::updateEditorGeometry( QWidget *editor,
const QStyleOptionViewItem &option,
const QModelIndex & )
const
265 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