QGIS API Documentation 3.99.0-Master (21b3aa880ba)
Loading...
Searching...
No Matches
qgsmeshvariablestrokewidthwidget.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsmeshvariablestrokewidthtwidget.cpp
3 -------------------------------------
4 begin : April 2020
5 copyright : (C) 2020 by Vincent Cloarec
6 email : vcloarec at gmail dot com
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15
17
18#include "qgssettings.h"
19
20#include <QDialog>
21#include <QDialogButtonBox>
22#include <QPointer>
23
24#include "moc_qgsmeshvariablestrokewidthwidget.cpp"
25
28 double defaultMinimumvalue,
29 double defaultMaximumValue,
30 QWidget *parent
31)
32 : QgsPanelWidget( parent ), mDefaultMinimumValue( defaultMinimumvalue ), mDefaultMaximumValue( defaultMaximumValue )
33{
34 setupUi( this );
35
36 mValueMinimumSpinBox->setSpecialValueText( QString() );
37 mValueMinimumSpinBox->setClearValueMode( QgsDoubleSpinBox::ClearValueMode::MinimumValue );
38 mValueMaximumSpinBox->setSpecialValueText( QString() );
39 mValueMaximumSpinBox->setClearValueMode( QgsDoubleSpinBox::ClearValueMode::MinimumValue );
40
41 setPanelTitle( tr( "Variable Stroke Width" ) );
42
44
45 connect( mDefaultMinMaxButton, &QPushButton::clicked, this, &QgsMeshVariableStrokeWidthWidget::defaultMinMax );
46
47 connect( mValueMinimumSpinBox, &QgsDoubleSpinBox::editingFinished, this, &QgsMeshVariableStrokeWidthWidget::widgetChanged );
48 connect( mValueMaximumSpinBox, &QgsDoubleSpinBox::editingFinished, this, &QgsMeshVariableStrokeWidthWidget::widgetChanged );
49 connect( mWidthMinimumSpinBox, &QgsDoubleSpinBox::editingFinished, this, &QgsMeshVariableStrokeWidthWidget::widgetChanged );
50 connect( mWidthMaximumSpinBox, &QgsDoubleSpinBox::editingFinished, this, &QgsMeshVariableStrokeWidthWidget::widgetChanged );
51 connect( mIgnoreOutOfRangecheckBox, &QCheckBox::toggled, this, &QgsMeshVariableStrokeWidthWidget::widgetChanged );
52 connect( mUseAbsoluteValueCheckBox, &QCheckBox::toggled, this, &QgsMeshVariableStrokeWidthWidget::widgetChanged );
53}
54
56{
57 whileBlocking( mValueMinimumSpinBox )->setValue( variableStrokeWidth.minimumValue() );
58 whileBlocking( mValueMaximumSpinBox )->setValue( variableStrokeWidth.maximumValue() );
59 whileBlocking( mWidthMinimumSpinBox )->setValue( variableStrokeWidth.minimumWidth() );
60 whileBlocking( mWidthMaximumSpinBox )->setValue( variableStrokeWidth.maximumWidth() );
61 whileBlocking( mIgnoreOutOfRangecheckBox )->setChecked( variableStrokeWidth.ignoreOutOfRange() );
62 whileBlocking( mUseAbsoluteValueCheckBox )->setChecked( variableStrokeWidth.useAbsoluteValue() );
63}
64
65void QgsMeshVariableStrokeWidthButton::setDefaultMinMaxValue( double minimum, double maximum )
66{
67 mMinimumDefaultValue = minimum;
68 mMaximumDefaultValue = maximum;
69}
70
72{
73 QgsInterpolatedLineWidth strokeWidth;
74 strokeWidth.setMinimumValue( lineEditValue( mValueMinimumSpinBox ) );
75 strokeWidth.setMaximumValue( lineEditValue( mValueMaximumSpinBox ) );
76 strokeWidth.setMinimumWidth( mWidthMinimumSpinBox->value() );
77 strokeWidth.setMaximumWidth( mWidthMaximumSpinBox->value() );
78 strokeWidth.setIgnoreOutOfRange( mIgnoreOutOfRangecheckBox->isChecked() );
79 strokeWidth.setUseAbsoluteValue( mUseAbsoluteValueCheckBox->isChecked() );
80 return strokeWidth;
81}
82
83void QgsMeshVariableStrokeWidthWidget::defaultMinMax()
84{
85 whileBlocking( mValueMinimumSpinBox )->setValue( mDefaultMinimumValue );
86 whileBlocking( mValueMaximumSpinBox )->setValue( mDefaultMaximumValue );
87 emit widgetChanged();
88}
89
91 : QPushButton( parent )
92{
93 updateText();
94 connect( this, &QPushButton::clicked, this, &QgsMeshVariableStrokeWidthButton::openWidget );
95}
96
101
107
108void QgsMeshVariableStrokeWidthButton::openWidget()
109{
111 QgsMeshVariableStrokeWidthWidget *widget = new QgsMeshVariableStrokeWidthWidget( mVariableStrokeWidth, mMinimumDefaultValue, mMaximumDefaultValue, panel );
112
113 if ( panel && panel->dockMode() )
114 {
115 connect( widget, &QgsMeshVariableStrokeWidthWidget::widgetChanged, this, [this, widget] {
116 // Update strokeWidth toward button
118 this->emit widgetChanged();
119 } );
120
121 panel->openPanel( widget );
122 return;
123 }
124 else
125 {
126 // Show the dialog version if not in a panel
127 QDialog *dlg = new QDialog( this );
128 const QString key = QStringLiteral( "/UI/paneldialog/%1" ).arg( widget->panelTitle() );
129 QgsSettings settings;
130 dlg->restoreGeometry( settings.value( key ).toByteArray() );
131 dlg->setWindowTitle( widget->panelTitle() );
132 dlg->setLayout( new QVBoxLayout() );
133 dlg->layout()->addWidget( widget );
134 QDialogButtonBox *buttonBox = new QDialogButtonBox( QDialogButtonBox::Cancel | QDialogButtonBox::Ok );
135 connect( buttonBox, &QDialogButtonBox::accepted, dlg, &QDialog::accept );
136 connect( buttonBox, &QDialogButtonBox::rejected, dlg, &QDialog::reject );
137 dlg->layout()->addWidget( buttonBox );
138
139 if ( dlg->exec() == QDialog::Accepted )
140 {
142 emit widgetChanged();
143 }
144 settings.setValue( key, dlg->saveGeometry() );
145 }
146}
147
148void QgsMeshVariableStrokeWidthButton::updateText()
149{
150 setText( QString( "%1 - %2" ).arg( QLocale().toString( mVariableStrokeWidth.minimumWidth(), 'g', 3 ), QLocale().toString( mVariableStrokeWidth.maximumWidth(), 'g', 3 ) ) );
151}
152
153double QgsMeshVariableStrokeWidthWidget::lineEditValue( const QgsDoubleSpinBox *lineEdit ) const
154{
155 if ( lineEdit->value() == lineEdit->clearValue() )
156 {
157 return std::numeric_limits<double>::quiet_NaN();
158 }
159
160 return lineEdit->value();
161}
The QgsSpinBox is a spin box with a clear button that will set the value to the defined clear value.
@ MinimumValue
Reset value to minimum().
Represents a width that can vary depending on values.
void setUseAbsoluteValue(bool useAbsoluteValue)
Sets whether absolute value are used as input.
void setIgnoreOutOfRange(bool ignoreOutOfRange)
Sets whether the variable width ignores out of range value.
void setMaximumValue(double maximumValue)
Sets the maximum value used to defined the variable width.
void setMinimumValue(double minimumValue)
Sets the minimum value used to defined the variable width.
void setMaximumWidth(double maximumWidth)
Sets the maximum width used to defined the variable width.
void setMinimumWidth(double minimumWidth)
Sets the minimum width used to defined the variable width.
void setDefaultMinMaxValue(double minimum, double maximum)
Sets the default min/max values that will be reload if needed.
QgsMeshVariableStrokeWidthButton(QWidget *parent=nullptr)
Constructor.
void setVariableStrokeWidth(const QgsInterpolatedLineWidth &variableStrokeWidth)
Sets the variable stroke width.
QgsInterpolatedLineWidth variableStrokeWidth() const
Returns the variable stroke width.
A widget to set parameters of variable stroke width.
QgsMeshVariableStrokeWidthWidget(const QgsInterpolatedLineWidth &variableStrokeWidth, double defaultMinimumvalue, double defaultMaximumValue, QWidget *parent=nullptr)
Constructor.
QgsInterpolatedLineWidth variableStrokeWidth() const
Returns the variable stroke width.
void setVariableStrokeWidth(const QgsInterpolatedLineWidth &variableStrokeWidth)
Sets the variable stroke width.
Base class for any widget that can be shown as an inline panel.
QString panelTitle() const
The title of the panel.
void openPanel(QgsPanelWidget *panel)
Open a panel or dialog depending on dock mode setting If dock mode is true this method will emit the ...
bool dockMode() const
Returns the dock mode state.
QgsPanelWidget(QWidget *parent=nullptr)
Base class for any widget that can be shown as an inline panel.
void widgetChanged()
Emitted when the widget state changes.
static QgsPanelWidget * findParentPanel(QWidget *widget)
Traces through the parents of a widget to find if it is contained within a QgsPanelWidget widget.
void setPanelTitle(const QString &panelTitle)
Set the title of the panel when shown in the interface.
QVariant value(const QString &key, const QVariant &defaultValue=QVariant(), Section section=NoSection) const
Returns the value for setting key.
void setValue(const QString &key, const QVariant &value, QgsSettings::Section section=QgsSettings::NoSection)
Sets the value of setting key to value.
QgsSignalBlocker< Object > whileBlocking(Object *object)
Temporarily blocks signals from a QObject while calling a single method from the object.
Definition qgis.h:6511