mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-29 00:03:59 -04:00
[FEATURE] Make symbol levels dialog a style dock panel widget
This commit is contained in:
parent
5e7dadd575
commit
fe8b751eb5
python/gui/symbology
src
@ -9,31 +9,40 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
class QgsSymbolLevelsDialog : QDialog
|
class QgsSymbolLevelsWidget : QgsPanelWidget
|
||||||
{
|
{
|
||||||
|
%Docstring
|
||||||
|
A widget which allows the user to modify the rendering order of symbol layers.
|
||||||
|
.. seealso:: QgsSymbolLevelsDialog
|
||||||
|
.. versionadded:: 3.0
|
||||||
|
%End
|
||||||
|
|
||||||
%TypeHeaderCode
|
%TypeHeaderCode
|
||||||
#include "qgssymbollevelsdialog.h"
|
#include "qgssymbollevelsdialog.h"
|
||||||
%End
|
%End
|
||||||
public:
|
public:
|
||||||
QgsSymbolLevelsDialog( QgsFeatureRenderer *renderer, bool usingSymbolLevels, QWidget *parent = 0 );
|
QgsSymbolLevelsWidget( QgsFeatureRenderer *renderer, bool usingSymbolLevels, QWidget *parent /TransferThis/ = 0 );
|
||||||
%Docstring
|
%Docstring
|
||||||
Constructor for QgsSymbolLevelsDialog
|
Constructor for QgsSymbolLevelsWidget
|
||||||
%End
|
%End
|
||||||
|
|
||||||
~QgsSymbolLevelsDialog();
|
|
||||||
|
|
||||||
bool usingLevels() const;
|
bool usingLevels() const;
|
||||||
%Docstring
|
%Docstring
|
||||||
|
Returns whether the level ordering is enabled
|
||||||
:rtype: bool
|
:rtype: bool
|
||||||
%End
|
%End
|
||||||
|
|
||||||
void setForceOrderingEnabled( bool enabled );
|
void setForceOrderingEnabled( bool enabled );
|
||||||
|
%Docstring
|
||||||
|
Sets whether the level ordering is always forced on and hide the checkbox (used by rule-based renderer)
|
||||||
|
\param enabled toggle level ordering
|
||||||
|
%End
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void updateUi();
|
void apply();
|
||||||
|
%Docstring
|
||||||
void renderingPassChanged( int row, int column );
|
Apply button
|
||||||
|
%End
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
@ -41,7 +50,28 @@ Constructor for QgsSymbolLevelsDialog
|
|||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QgsSymbolLevelsDialog();
|
QgsSymbolLevelsWidget();
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
class QgsSymbolLevelsDialog : QDialog
|
||||||
|
{
|
||||||
|
%Docstring
|
||||||
|
A dialog which allows the user to modify the rendering order of symbol layers.
|
||||||
|
.. seealso:: QgsSymbolLevelsWidget
|
||||||
|
%End
|
||||||
|
|
||||||
|
%TypeHeaderCode
|
||||||
|
#include "qgssymbollevelsdialog.h"
|
||||||
|
%End
|
||||||
|
public:
|
||||||
|
|
||||||
|
QgsSymbolLevelsDialog( QgsFeatureRenderer *renderer, bool usingSymbolLevels, QWidget *parent /TransferThis/ = 0 );
|
||||||
|
%Docstring
|
||||||
|
Constructor for QgsSymbolLevelsDialog.
|
||||||
|
%End
|
||||||
|
|
||||||
|
void setForceOrderingEnabled( bool enabled );
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -251,7 +251,18 @@ void QgsRendererWidget::changeSymbolAngle()
|
|||||||
|
|
||||||
void QgsRendererWidget::showSymbolLevelsDialog( QgsFeatureRenderer *r )
|
void QgsRendererWidget::showSymbolLevelsDialog( QgsFeatureRenderer *r )
|
||||||
{
|
{
|
||||||
QgsSymbolLevelsDialog dlg( r, r->usingSymbolLevels(), this );
|
QgsPanelWidget *panel = QgsPanelWidget::findParentPanel( this );
|
||||||
|
if ( panel && panel->dockMode() )
|
||||||
|
{
|
||||||
|
QgsSymbolLevelsWidget *widget = new QgsSymbolLevelsWidget( r, r->usingSymbolLevels(), panel );
|
||||||
|
widget->setPanelTitle( tr( "Symbol Levels" ) );
|
||||||
|
connect( widget, &QgsPanelWidget::widgetChanged, widget, &QgsSymbolLevelsWidget::apply );
|
||||||
|
connect( widget, &QgsPanelWidget::widgetChanged, this, &QgsPanelWidget::widgetChanged );
|
||||||
|
panel->openPanel( widget );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QgsSymbolLevelsDialog dlg( r, r->usingSymbolLevels(), panel );
|
||||||
if ( dlg.exec() )
|
if ( dlg.exec() )
|
||||||
{
|
{
|
||||||
emit widgetChanged();
|
emit widgetChanged();
|
||||||
|
@ -396,7 +396,19 @@ void QgsRuleBasedRendererWidget::keyPressEvent( QKeyEvent *event )
|
|||||||
|
|
||||||
void QgsRuleBasedRendererWidget::setRenderingOrder()
|
void QgsRuleBasedRendererWidget::setRenderingOrder()
|
||||||
{
|
{
|
||||||
QgsSymbolLevelsDialog dlg( mRenderer, true, this );
|
QgsPanelWidget *panel = QgsPanelWidget::findParentPanel( this );
|
||||||
|
if ( panel && panel->dockMode() )
|
||||||
|
{
|
||||||
|
QgsSymbolLevelsWidget *widget = new QgsSymbolLevelsWidget( mRenderer, true, panel );
|
||||||
|
widget->setForceOrderingEnabled( true );
|
||||||
|
widget->setPanelTitle( tr( "Symbol Levels" ) );
|
||||||
|
connect( widget, &QgsPanelWidget::widgetChanged, widget, &QgsSymbolLevelsWidget::apply );
|
||||||
|
connect( widget, &QgsPanelWidget::widgetChanged, this, &QgsPanelWidget::widgetChanged );
|
||||||
|
panel->openPanel( widget );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QgsSymbolLevelsDialog dlg( mRenderer, true, panel );
|
||||||
dlg.setForceOrderingEnabled( true );
|
dlg.setForceOrderingEnabled( true );
|
||||||
if ( dlg.exec() )
|
if ( dlg.exec() )
|
||||||
{
|
{
|
||||||
|
@ -23,28 +23,23 @@
|
|||||||
#include <QTableWidgetItem>
|
#include <QTableWidgetItem>
|
||||||
#include <QItemDelegate>
|
#include <QItemDelegate>
|
||||||
#include <QSpinBox>
|
#include <QSpinBox>
|
||||||
|
#include <QDialogButtonBox>
|
||||||
|
|
||||||
|
|
||||||
////////////////
|
////////////////
|
||||||
|
|
||||||
QgsSymbolLevelsDialog::QgsSymbolLevelsDialog( QgsFeatureRenderer *renderer, bool usingSymbolLevels, QWidget *parent )
|
QgsSymbolLevelsWidget::QgsSymbolLevelsWidget( QgsFeatureRenderer *renderer, bool usingSymbolLevels, QWidget *parent )
|
||||||
: QDialog( parent )
|
: QgsPanelWidget( parent )
|
||||||
, mRenderer( renderer )
|
, mRenderer( renderer )
|
||||||
, mForceOrderingEnabled( false )
|
, mForceOrderingEnabled( false )
|
||||||
{
|
{
|
||||||
setupUi( this );
|
setupUi( this );
|
||||||
|
|
||||||
QgsSettings settings;
|
|
||||||
restoreGeometry( settings.value( QStringLiteral( "Windows/symbolLevelsDlg/geometry" ) ).toByteArray() );
|
|
||||||
|
|
||||||
tableLevels->setItemDelegate( new SpinBoxDelegate( this ) );
|
tableLevels->setItemDelegate( new SpinBoxDelegate( this ) );
|
||||||
|
|
||||||
chkEnable->setChecked( usingSymbolLevels );
|
chkEnable->setChecked( usingSymbolLevels );
|
||||||
|
|
||||||
connect( chkEnable, &QAbstractButton::clicked, this, &QgsSymbolLevelsDialog::updateUi );
|
connect( chkEnable, &QAbstractButton::clicked, this, &QgsSymbolLevelsWidget::updateUi );
|
||||||
connect( buttonBox, &QDialogButtonBox::accepted, this, &QgsSymbolLevelsDialog::apply );
|
|
||||||
connect( buttonBox, &QDialogButtonBox::helpRequested, this, &QgsSymbolLevelsDialog::showHelp );
|
|
||||||
|
|
||||||
if ( mRenderer )
|
if ( mRenderer )
|
||||||
{
|
{
|
||||||
@ -89,16 +84,10 @@ QgsSymbolLevelsDialog::QgsSymbolLevelsDialog( QgsFeatureRenderer *renderer, bool
|
|||||||
|
|
||||||
populateTable();
|
populateTable();
|
||||||
|
|
||||||
connect( tableLevels, &QTableWidget::cellChanged, this, &QgsSymbolLevelsDialog::renderingPassChanged );
|
connect( tableLevels, &QTableWidget::cellChanged, this, &QgsSymbolLevelsWidget::renderingPassChanged );
|
||||||
}
|
}
|
||||||
|
|
||||||
QgsSymbolLevelsDialog::~QgsSymbolLevelsDialog()
|
void QgsSymbolLevelsWidget::populateTable()
|
||||||
{
|
|
||||||
QgsSettings settings;
|
|
||||||
settings.setValue( QStringLiteral( "Windows/symbolLevelsDlg/geometry" ), saveGeometry() );
|
|
||||||
}
|
|
||||||
|
|
||||||
void QgsSymbolLevelsDialog::populateTable()
|
|
||||||
{
|
{
|
||||||
for ( int row = 0; row < mList.count(); row++ )
|
for ( int row = 0; row < mList.count(); row++ )
|
||||||
{
|
{
|
||||||
@ -128,12 +117,13 @@ void QgsSymbolLevelsDialog::populateTable()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void QgsSymbolLevelsDialog::updateUi()
|
void QgsSymbolLevelsWidget::updateUi()
|
||||||
{
|
{
|
||||||
tableLevels->setEnabled( chkEnable->isChecked() );
|
tableLevels->setEnabled( chkEnable->isChecked() );
|
||||||
|
emit widgetChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
void QgsSymbolLevelsDialog::apply()
|
void QgsSymbolLevelsWidget::apply()
|
||||||
{
|
{
|
||||||
for ( int i = 0; i < mList.count(); i++ )
|
for ( int i = 0; i < mList.count(); i++ )
|
||||||
{
|
{
|
||||||
@ -147,7 +137,7 @@ void QgsSymbolLevelsDialog::apply()
|
|||||||
mRenderer->setUsingSymbolLevels( usingLevels() );
|
mRenderer->setUsingSymbolLevels( usingLevels() );
|
||||||
}
|
}
|
||||||
|
|
||||||
void QgsSymbolLevelsDialog::setDefaultLevels()
|
void QgsSymbolLevelsWidget::setDefaultLevels()
|
||||||
{
|
{
|
||||||
for ( int i = 0; i < mList.count(); i++ )
|
for ( int i = 0; i < mList.count(); i++ )
|
||||||
{
|
{
|
||||||
@ -159,12 +149,12 @@ void QgsSymbolLevelsDialog::setDefaultLevels()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QgsSymbolLevelsDialog::usingLevels() const
|
bool QgsSymbolLevelsWidget::usingLevels() const
|
||||||
{
|
{
|
||||||
return chkEnable->isChecked();
|
return chkEnable->isChecked();
|
||||||
}
|
}
|
||||||
|
|
||||||
void QgsSymbolLevelsDialog::renderingPassChanged( int row, int column )
|
void QgsSymbolLevelsWidget::renderingPassChanged( int row, int column )
|
||||||
{
|
{
|
||||||
if ( row < 0 || row >= mList.count() )
|
if ( row < 0 || row >= mList.count() )
|
||||||
return;
|
return;
|
||||||
@ -172,9 +162,11 @@ void QgsSymbolLevelsDialog::renderingPassChanged( int row, int column )
|
|||||||
if ( column < 0 || column > sym->symbolLayerCount() )
|
if ( column < 0 || column > sym->symbolLayerCount() )
|
||||||
return;
|
return;
|
||||||
sym->symbolLayer( column - 1 )->setRenderingPass( tableLevels->item( row, column )->text().toInt() );
|
sym->symbolLayer( column - 1 )->setRenderingPass( tableLevels->item( row, column )->text().toInt() );
|
||||||
|
|
||||||
|
emit widgetChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
void QgsSymbolLevelsDialog::setForceOrderingEnabled( bool enabled )
|
void QgsSymbolLevelsWidget::setForceOrderingEnabled( bool enabled )
|
||||||
{
|
{
|
||||||
mForceOrderingEnabled = enabled;
|
mForceOrderingEnabled = enabled;
|
||||||
if ( enabled )
|
if ( enabled )
|
||||||
@ -186,11 +178,24 @@ void QgsSymbolLevelsDialog::setForceOrderingEnabled( bool enabled )
|
|||||||
chkEnable->show();
|
chkEnable->show();
|
||||||
}
|
}
|
||||||
|
|
||||||
void QgsSymbolLevelsDialog::showHelp()
|
QgsSymbolLevelsDialog::QgsSymbolLevelsDialog( QgsFeatureRenderer *renderer, bool usingSymbolLevels, QWidget *parent )
|
||||||
|
: QDialog( parent )
|
||||||
{
|
{
|
||||||
QgsHelp::openHelp( QStringLiteral( "working_with_vector/vector_properties.html#symbols-levels" ) );
|
QVBoxLayout *vLayout = new QVBoxLayout();
|
||||||
|
mWidget = new QgsSymbolLevelsWidget( renderer, usingSymbolLevels );
|
||||||
|
vLayout->addWidget( mWidget );
|
||||||
|
QDialogButtonBox *bbox = new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal );
|
||||||
|
connect( bbox, &QDialogButtonBox::accepted, mWidget, &QgsSymbolLevelsWidget::apply );
|
||||||
|
connect( bbox, &QDialogButtonBox::accepted, this, &QgsSymbolLevelsDialog::accept );
|
||||||
|
connect( bbox, &QDialogButtonBox::rejected, this, &QgsSymbolLevelsDialog::reject );
|
||||||
|
vLayout->addWidget( bbox );
|
||||||
|
setLayout( vLayout );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QgsSymbolLevelsDialog::setForceOrderingEnabled( bool enabled )
|
||||||
|
{
|
||||||
|
mWidget->setForceOrderingEnabled( enabled );
|
||||||
|
}
|
||||||
|
|
||||||
/// @cond PRIVATE
|
/// @cond PRIVATE
|
||||||
|
|
||||||
|
@ -21,38 +21,41 @@
|
|||||||
#include <QItemDelegate>
|
#include <QItemDelegate>
|
||||||
|
|
||||||
#include "qgshelp.h"
|
#include "qgshelp.h"
|
||||||
|
#include "qgspanelwidget.h"
|
||||||
#include "qgsrenderer.h"
|
#include "qgsrenderer.h"
|
||||||
|
|
||||||
#include "ui_qgssymbollevelsdialogbase.h"
|
#include "ui_qgssymbollevelsdialogbase.h"
|
||||||
#include "qgis_gui.h"
|
#include "qgis_gui.h"
|
||||||
|
|
||||||
/** \ingroup gui
|
/** \class QgsSymbolLevelsWidget
|
||||||
* \class QgsSymbolLevelsDialog
|
* \ingroup gui
|
||||||
|
* A widget which allows the user to modify the rendering order of symbol layers.
|
||||||
|
* \see QgsSymbolLevelsDialog
|
||||||
|
* \since QGIS 3.0
|
||||||
*/
|
*/
|
||||||
class GUI_EXPORT QgsSymbolLevelsDialog : public QDialog, private Ui::QgsSymbolLevelsDialogBase
|
class GUI_EXPORT QgsSymbolLevelsWidget : public QgsPanelWidget, private Ui::QgsSymbolLevelsDialogBase
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
//! Constructor for QgsSymbolLevelsDialog
|
//! Constructor for QgsSymbolLevelsWidget
|
||||||
QgsSymbolLevelsDialog( QgsFeatureRenderer *renderer, bool usingSymbolLevels, QWidget *parent = nullptr );
|
QgsSymbolLevelsWidget( QgsFeatureRenderer *renderer, bool usingSymbolLevels, QWidget *parent SIP_TRANSFERTHIS = 0 );
|
||||||
|
|
||||||
~QgsSymbolLevelsDialog();
|
|
||||||
|
|
||||||
|
//! Returns whether the level ordering is enabled
|
||||||
bool usingLevels() const;
|
bool usingLevels() const;
|
||||||
|
|
||||||
// used by rule-based renderer (to hide checkbox to enable/disable ordering)
|
/** Sets whether the level ordering is always forced on and hide the checkbox (used by rule-based renderer)
|
||||||
|
* \param enabled toggle level ordering
|
||||||
|
*/
|
||||||
void setForceOrderingEnabled( bool enabled );
|
void setForceOrderingEnabled( bool enabled );
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void updateUi();
|
|
||||||
|
|
||||||
void renderingPassChanged( int row, int column );
|
|
||||||
|
|
||||||
private slots:
|
|
||||||
//! Apply button
|
//! Apply button
|
||||||
void apply();
|
void apply();
|
||||||
|
|
||||||
void showHelp();
|
private slots:
|
||||||
|
void updateUi();
|
||||||
|
|
||||||
|
void renderingPassChanged( int row, int column );
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
//! \note not available in Python bindings
|
//! \note not available in Python bindings
|
||||||
@ -71,11 +74,33 @@ class GUI_EXPORT QgsSymbolLevelsDialog : public QDialog, private Ui::QgsSymbolLe
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
#ifdef SIP_RUN
|
#ifdef SIP_RUN
|
||||||
QgsSymbolLevelsDialog();
|
QgsSymbolLevelsWidget();
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** \class QgsSymbolLevelsDialog
|
||||||
|
* \ingroup gui
|
||||||
|
* A dialog which allows the user to modify the rendering order of symbol layers.
|
||||||
|
* \see QgsSymbolLevelsWidget
|
||||||
|
*/
|
||||||
|
class GUI_EXPORT QgsSymbolLevelsDialog : public QDialog
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
|
||||||
|
//! Constructor for QgsSymbolLevelsDialog.
|
||||||
|
QgsSymbolLevelsDialog( QgsFeatureRenderer *renderer, bool usingSymbolLevels, QWidget *parent SIP_TRANSFERTHIS = 0 );
|
||||||
|
|
||||||
|
// used by rule-based renderer (to hide checkbox to enable/disable ordering)
|
||||||
|
void setForceOrderingEnabled( bool enabled );
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
QgsSymbolLevelsWidget *mWidget = nullptr;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
#ifndef SIP_RUN
|
#ifndef SIP_RUN
|
||||||
///@cond PRIVATE
|
///@cond PRIVATE
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<ui version="4.0">
|
<ui version="4.0">
|
||||||
<class>QgsSymbolLevelsDialogBase</class>
|
<class>QgsSymbolLevelsDialogBase</class>
|
||||||
<widget class="QDialog" name="QgsSymbolLevelsDialogBase">
|
<widget class="QgsPanelWidget" name="QgsSymbolLevelsDialogBase">
|
||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
@ -41,51 +41,14 @@
|
|||||||
</attribute>
|
</attribute>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="3" column="0">
|
|
||||||
<widget class="QDialogButtonBox" name="buttonBox">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
<property name="standardButtons">
|
|
||||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Help|QDialogButtonBox::Ok</set>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
|
<customwidgets>
|
||||||
|
<customwidget>
|
||||||
|
<class>QgsPanelWidget</class>
|
||||||
|
<extends>QWidget</extends>
|
||||||
|
<header>qgspanelwidget.h</header>
|
||||||
|
</customwidget>
|
||||||
|
</customwidgets>
|
||||||
<resources/>
|
<resources/>
|
||||||
<connections>
|
|
||||||
<connection>
|
|
||||||
<sender>buttonBox</sender>
|
|
||||||
<signal>accepted()</signal>
|
|
||||||
<receiver>QgsSymbolLevelsDialogBase</receiver>
|
|
||||||
<slot>accept()</slot>
|
|
||||||
<hints>
|
|
||||||
<hint type="sourcelabel">
|
|
||||||
<x>248</x>
|
|
||||||
<y>254</y>
|
|
||||||
</hint>
|
|
||||||
<hint type="destinationlabel">
|
|
||||||
<x>157</x>
|
|
||||||
<y>274</y>
|
|
||||||
</hint>
|
|
||||||
</hints>
|
|
||||||
</connection>
|
|
||||||
<connection>
|
|
||||||
<sender>buttonBox</sender>
|
|
||||||
<signal>rejected()</signal>
|
|
||||||
<receiver>QgsSymbolLevelsDialogBase</receiver>
|
|
||||||
<slot>reject()</slot>
|
|
||||||
<hints>
|
|
||||||
<hint type="sourcelabel">
|
|
||||||
<x>316</x>
|
|
||||||
<y>260</y>
|
|
||||||
</hint>
|
|
||||||
<hint type="destinationlabel">
|
|
||||||
<x>286</x>
|
|
||||||
<y>274</y>
|
|
||||||
</hint>
|
|
||||||
</hints>
|
|
||||||
</connection>
|
|
||||||
</connections>
|
|
||||||
</ui>
|
</ui>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user