[symbology] resurrect symbol levels dialog (fixes #16996)

This commit is contained in:
nirvn 2017-09-12 17:08:40 +07:00
parent 5796783e04
commit 5e7dadd575
5 changed files with 49 additions and 14 deletions

View File

@ -8,6 +8,7 @@
class QgsSymbolLevelsDialog : QDialog
{
@ -15,6 +16,10 @@ class QgsSymbolLevelsDialog : QDialog
#include "qgssymbollevelsdialog.h"
%End
public:
QgsSymbolLevelsDialog( QgsFeatureRenderer *renderer, bool usingSymbolLevels, QWidget *parent = 0 );
%Docstring
Constructor for QgsSymbolLevelsDialog
%End
~QgsSymbolLevelsDialog();
@ -33,8 +38,11 @@ class QgsSymbolLevelsDialog : QDialog
protected:
private:
QgsSymbolLevelsDialog();
};

View File

@ -251,11 +251,9 @@ void QgsRendererWidget::changeSymbolAngle()
void QgsRendererWidget::showSymbolLevelsDialog( QgsFeatureRenderer *r )
{
QgsSymbolLevelsDialog dlg( r->legendSymbolItems(), r->usingSymbolLevels(), this );
QgsSymbolLevelsDialog dlg( r, r->usingSymbolLevels(), this );
if ( dlg.exec() )
{
r->setUsingSymbolLevels( dlg.usingLevels() );
emit widgetChanged();
}
}

View File

@ -396,10 +396,12 @@ void QgsRuleBasedRendererWidget::keyPressEvent( QKeyEvent *event )
void QgsRuleBasedRendererWidget::setRenderingOrder()
{
QgsSymbolLevelsDialog dlg( mRenderer->legendSymbolItems(), true, this );
QgsSymbolLevelsDialog dlg( mRenderer, true, this );
dlg.setForceOrderingEnabled( true );
dlg.exec();
if ( dlg.exec() )
{
emit widgetChanged();
}
}
void QgsRuleBasedRendererWidget::saveSectionWidth( int section, int oldSize, int newSize )

View File

@ -28,8 +28,9 @@
////////////////
QgsSymbolLevelsDialog::QgsSymbolLevelsDialog( const QgsLegendSymbolList &list, bool usingSymbolLevels, QWidget *parent )
QgsSymbolLevelsDialog::QgsSymbolLevelsDialog( QgsFeatureRenderer *renderer, bool usingSymbolLevels, QWidget *parent )
: QDialog( parent )
, mRenderer( renderer )
, mForceOrderingEnabled( false )
{
setupUi( this );
@ -42,13 +43,17 @@ QgsSymbolLevelsDialog::QgsSymbolLevelsDialog( const QgsLegendSymbolList &list, b
chkEnable->setChecked( usingSymbolLevels );
connect( chkEnable, &QAbstractButton::clicked, this, &QgsSymbolLevelsDialog::updateUi );
connect( buttonBox, &QDialogButtonBox::accepted, this, &QgsSymbolLevelsDialog::apply );
connect( buttonBox, &QDialogButtonBox::helpRequested, this, &QgsSymbolLevelsDialog::showHelp );
// only consider entries with symbols
Q_FOREACH ( const QgsLegendSymbolItem &item, list )
if ( mRenderer )
{
if ( item.symbol() )
mList << item;
// only consider entries with symbols
Q_FOREACH ( const QgsLegendSymbolItem &item, mRenderer->legendSymbolItems() )
{
if ( item.symbol() )
mList << item;
}
}
int maxLayers = 0;
@ -128,6 +133,20 @@ void QgsSymbolLevelsDialog::updateUi()
tableLevels->setEnabled( chkEnable->isChecked() );
}
void QgsSymbolLevelsDialog::apply()
{
for ( int i = 0; i < mList.count(); i++ )
{
QgsSymbol *sym = mList.at( i ).symbol();
for ( int layer = 0; layer < sym->symbolLayerCount(); layer++ )
{
mRenderer->setLegendSymbolItem( mList.at( i ).ruleKey(), sym->clone() );
}
}
mRenderer->setUsingSymbolLevels( usingLevels() );
}
void QgsSymbolLevelsDialog::setDefaultLevels()
{
for ( int i = 0; i < mList.count(); i++ )

View File

@ -20,8 +20,9 @@
#include <QList>
#include <QItemDelegate>
#include "qgsrenderer.h"
#include "qgshelp.h"
#include "qgsrenderer.h"
#include "ui_qgssymbollevelsdialogbase.h"
#include "qgis_gui.h"
@ -32,8 +33,8 @@ class GUI_EXPORT QgsSymbolLevelsDialog : public QDialog, private Ui::QgsSymbolLe
{
Q_OBJECT
public:
//! \note not available in Python bindings
QgsSymbolLevelsDialog( const QgsLegendSymbolList &list, bool usingSymbolLevels, QWidget *parent = nullptr ) SIP_SKIP;
//! Constructor for QgsSymbolLevelsDialog
QgsSymbolLevelsDialog( QgsFeatureRenderer *renderer, bool usingSymbolLevels, QWidget *parent = nullptr );
~QgsSymbolLevelsDialog();
@ -48,6 +49,9 @@ class GUI_EXPORT QgsSymbolLevelsDialog : public QDialog, private Ui::QgsSymbolLe
void renderingPassChanged( int row, int column );
private slots:
//! Apply button
void apply();
void showHelp();
protected:
@ -58,13 +62,17 @@ class GUI_EXPORT QgsSymbolLevelsDialog : public QDialog, private Ui::QgsSymbolLe
//! maximal number of layers from all symbols
int mMaxLayers;
QgsFeatureRenderer *mRenderer;
QgsLegendSymbolList mList;
//! whether symbol layers always should be used (default false)
bool mForceOrderingEnabled;
private:
#ifdef SIP_RUN
QgsSymbolLevelsDialog();
#endif
};