QGIS API Documentation 3.37.0-Master (fdefdf9c27f)
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 <QDialog>
19#include <QDialogButtonBox>
20#include <QPointer>
21
22#include "qgssettings.h"
23
25 const QgsInterpolatedLineWidth &variableStrokeWidth,
26 double defaultMinimumvalue,
27 double defaultMaximumValue,
28 QWidget *parent ):
29 QgsPanelWidget( parent ),
30 mDefaultMinimumValue( defaultMinimumvalue ),
31 mDefaultMaximumValue( defaultMaximumValue )
32{
33 setupUi( this );
34
35 mValueMinimumSpinBox->setSpecialValueText( QString( ) );
36 mValueMinimumSpinBox->setClearValueMode( QgsDoubleSpinBox::ClearValueMode::MinimumValue );
37 mValueMaximumSpinBox->setSpecialValueText( QString( ) );
38 mValueMaximumSpinBox->setClearValueMode( QgsDoubleSpinBox::ClearValueMode::MinimumValue );
39
40 setPanelTitle( tr( "Variable Stroke Width" ) );
41
43
44 connect( mDefaultMinMaxButton, &QPushButton::clicked, this, &QgsMeshVariableStrokeWidthWidget::defaultMinMax );
45
46 connect( mValueMinimumSpinBox, &QgsDoubleSpinBox::editingFinished, this, &QgsMeshVariableStrokeWidthWidget::widgetChanged );
47 connect( mValueMaximumSpinBox, &QgsDoubleSpinBox::editingFinished, this, &QgsMeshVariableStrokeWidthWidget::widgetChanged );
48 connect( mWidthMinimumSpinBox, &QgsDoubleSpinBox::editingFinished, this, &QgsMeshVariableStrokeWidthWidget::widgetChanged );
49 connect( mWidthMaximumSpinBox, &QgsDoubleSpinBox::editingFinished, this, &QgsMeshVariableStrokeWidthWidget::widgetChanged );
50 connect( mIgnoreOutOfRangecheckBox, &QCheckBox::toggled, this, &QgsMeshVariableStrokeWidthWidget::widgetChanged );
51 connect( mUseAbsoluteValueCheckBox, &QCheckBox::toggled, this, &QgsMeshVariableStrokeWidthWidget::widgetChanged );
52}
53
55{
56 whileBlocking( mValueMinimumSpinBox )->setValue( variableStrokeWidth.minimumValue() );
57 whileBlocking( mValueMaximumSpinBox )->setValue( variableStrokeWidth.maximumValue() );
58 whileBlocking( mWidthMinimumSpinBox )->setValue( variableStrokeWidth.minimumWidth() );
59 whileBlocking( mWidthMaximumSpinBox )->setValue( variableStrokeWidth.maximumWidth() );
60 whileBlocking( mIgnoreOutOfRangecheckBox )->setChecked( variableStrokeWidth.ignoreOutOfRange() );
61 whileBlocking( mUseAbsoluteValueCheckBox )->setChecked( variableStrokeWidth.useAbsoluteValue() );
62}
63
64void QgsMeshVariableStrokeWidthButton::setDefaultMinMaxValue( double minimum, double maximum )
65{
66 mMinimumDefaultValue = minimum;
67 mMaximumDefaultValue = maximum;
68}
69
71{
72 QgsInterpolatedLineWidth strokeWidth;
73 strokeWidth.setMinimumValue( lineEditValue( mValueMinimumSpinBox ) );
74 strokeWidth.setMaximumValue( lineEditValue( mValueMaximumSpinBox ) );
75 strokeWidth.setMinimumWidth( mWidthMinimumSpinBox->value() );
76 strokeWidth.setMaximumWidth( mWidthMaximumSpinBox->value() );
77 strokeWidth.setIgnoreOutOfRange( mIgnoreOutOfRangecheckBox->isChecked() );
78 strokeWidth.setUseAbsoluteValue( mUseAbsoluteValueCheckBox->isChecked() );
79 return strokeWidth;
80}
81
82void QgsMeshVariableStrokeWidthWidget::defaultMinMax()
83{
84 whileBlocking( mValueMinimumSpinBox )->setValue( mDefaultMinimumValue );
85 whileBlocking( mValueMaximumSpinBox )->setValue( mDefaultMaximumValue );
86 emit widgetChanged();
87}
88
90{
91 updateText();
92 connect( this, &QPushButton::clicked, this, &QgsMeshVariableStrokeWidthButton::openWidget );
93}
94
96{
97 return mVariableStrokeWidth;
98}
99
101{
102 mVariableStrokeWidth = variableStrokeWidth;
103 updateText();
104}
105
106void QgsMeshVariableStrokeWidthButton::openWidget()
107{
110 new QgsMeshVariableStrokeWidthWidget( mVariableStrokeWidth,
111 mMinimumDefaultValue,
112 mMaximumDefaultValue,
113 panel );
114
115 if ( panel && panel->dockMode() )
116 {
117 connect( widget, &QgsMeshVariableStrokeWidthWidget::widgetChanged, this, [this, widget]
118 {
119 // Update strokeWidth toward button
121 this->emit widgetChanged();
122 } );
123
124 panel->openPanel( widget );
125 return;
126 }
127 else
128 {
129 // Show the dialog version if not in a panel
130 QDialog *dlg = new QDialog( this );
131 const QString key = QStringLiteral( "/UI/paneldialog/%1" ).arg( widget->panelTitle() );
132 QgsSettings settings;
133 dlg->restoreGeometry( settings.value( key ).toByteArray() );
134 dlg->setWindowTitle( widget->panelTitle() );
135 dlg->setLayout( new QVBoxLayout() );
136 dlg->layout()->addWidget( widget );
137 QDialogButtonBox *buttonBox = new QDialogButtonBox( QDialogButtonBox::Cancel | QDialogButtonBox::Ok );
138 connect( buttonBox, &QDialogButtonBox::accepted, dlg, &QDialog::accept );
139 connect( buttonBox, &QDialogButtonBox::rejected, dlg, &QDialog::reject );
140 dlg->layout()->addWidget( buttonBox );
141
142 if ( dlg->exec() == QDialog::Accepted )
143 {
145 emit widgetChanged();
146 }
147 settings.setValue( key, dlg->saveGeometry() );
148 }
149}
150
151void QgsMeshVariableStrokeWidthButton::updateText()
152{
153 setText( QString( "%1 - %2" ).
154 arg( QLocale().toString( mVariableStrokeWidth.minimumWidth(), 'g', 3 ),
155 QLocale().toString( mVariableStrokeWidth.maximumWidth(), 'g', 3 ) ) );
156}
157
158double QgsMeshVariableStrokeWidthWidget::lineEditValue( const QgsDoubleSpinBox *lineEdit ) const
159{
160 if ( lineEdit->value() == lineEdit->clearValue() )
161 {
162 return std::numeric_limits<double>::quiet_NaN();
163 }
164
165 return lineEdit->value();
166}
167
The QgsSpinBox is a spin box with a clear button that will set the value to the defined clear value.
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:5111