QGIS API Documentation 3.41.0-Master (fda2aa46e9a)
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#include "moc_qgsmeshvariablestrokewidthwidget.cpp"
18
19#include <QDialog>
20#include <QDialogButtonBox>
21#include <QPointer>
22
23#include "qgssettings.h"
24
26 const QgsInterpolatedLineWidth &variableStrokeWidth,
27 double defaultMinimumvalue,
28 double defaultMaximumValue,
29 QWidget *parent ):
30 QgsPanelWidget( parent ),
31 mDefaultMinimumValue( defaultMinimumvalue ),
32 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{
92 updateText();
93 connect( this, &QPushButton::clicked, this, &QgsMeshVariableStrokeWidthButton::openWidget );
94}
95
100
102{
103 mVariableStrokeWidth = variableStrokeWidth;
104 updateText();
105}
106
107void QgsMeshVariableStrokeWidthButton::openWidget()
108{
111 new QgsMeshVariableStrokeWidthWidget( mVariableStrokeWidth,
112 mMinimumDefaultValue,
113 mMaximumDefaultValue,
114 panel );
115
116 if ( panel && panel->dockMode() )
117 {
118 connect( widget, &QgsMeshVariableStrokeWidthWidget::widgetChanged, this, [this, widget]
119 {
120 // Update strokeWidth toward button
122 this->emit widgetChanged();
123 } );
124
125 panel->openPanel( widget );
126 return;
127 }
128 else
129 {
130 // Show the dialog version if not in a panel
131 QDialog *dlg = new QDialog( this );
132 const QString key = QStringLiteral( "/UI/paneldialog/%1" ).arg( widget->panelTitle() );
133 QgsSettings settings;
134 dlg->restoreGeometry( settings.value( key ).toByteArray() );
135 dlg->setWindowTitle( widget->panelTitle() );
136 dlg->setLayout( new QVBoxLayout() );
137 dlg->layout()->addWidget( widget );
138 QDialogButtonBox *buttonBox = new QDialogButtonBox( QDialogButtonBox::Cancel | QDialogButtonBox::Ok );
139 connect( buttonBox, &QDialogButtonBox::accepted, dlg, &QDialog::accept );
140 connect( buttonBox, &QDialogButtonBox::rejected, dlg, &QDialog::reject );
141 dlg->layout()->addWidget( buttonBox );
142
143 if ( dlg->exec() == QDialog::Accepted )
144 {
146 emit widgetChanged();
147 }
148 settings.setValue( key, dlg->saveGeometry() );
149 }
150}
151
152void QgsMeshVariableStrokeWidthButton::updateText()
153{
154 setText( QString( "%1 - %2" ).
155 arg( QLocale().toString( mVariableStrokeWidth.minimumWidth(), 'g', 3 ),
156 QLocale().toString( mVariableStrokeWidth.maximumWidth(), 'g', 3 ) ) );
157}
158
159double QgsMeshVariableStrokeWidthWidget::lineEditValue( const QgsDoubleSpinBox *lineEdit ) const
160{
161 if ( lineEdit->value() == lineEdit->clearValue() )
162 {
163 return std::numeric_limits<double>::quiet_NaN();
164 }
165
166 return lineEdit->value();
167}
168
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 than can vary depending on values.
void setUseAbsoluteValue(bool useAbsoluteValue)
Sets whether absolute value are used as input.
double minimumValue() const
Returns the minimum value used to defined the variable width.
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.
bool useAbsoluteValue() const
Returns whether absolute value are used as input.
void setMinimumValue(double minimumValue)
Sets the minimum value used to defined the variable width.
double maximumWidth() const
Returns the maximum width used to defined the variable width.
void setMaximumWidth(double maximumWidth)
Sets the maximum width used to defined the variable width.
double maximumValue() const
Returns the maximum value used to defined the variable width.
void setMinimumWidth(double minimumWidth)
Sets the minimum width used to defined the variable width.
bool ignoreOutOfRange() const
Returns whether the variable width ignores out of range value.
double minimumWidth() const
Returns 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 a inline 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 ...
QString panelTitle()
The title of the 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.
bool dockMode()
Returns the dock mode state.
This class is a composition of two QSettings instances:
Definition qgssettings.h:64
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:5821