Skip to content

Commit f8f701c

Browse files
committedFeb 11, 2019
[ui] Harmonize CAD panel by using toolbar (fixes hidpi et cie)
1 parent 69e5415 commit f8f701c

File tree

3 files changed

+151
-199
lines changed

3 files changed

+151
-199
lines changed
 

‎src/gui/qgsadvanceddigitizingdockwidget.cpp

Lines changed: 24 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -56,19 +56,11 @@ QgsAdvancedDigitizingDockWidget::QgsAdvancedDigitizingDockWidget( QgsMapCanvas *
5656
mXLineEdit->installEventFilter( this );
5757
mYLineEdit->installEventFilter( this );
5858

59-
// this action is also used in the advanced digitizing tool bar
60-
mEnableAction = new QAction( this );
61-
mEnableAction->setText( tr( "Enable advanced digitizing tools" ) );
62-
mEnableAction->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/cadtools/cad.svg" ) ) );
63-
mEnableAction->setCheckable( true );
64-
mEnabledButton->addAction( mEnableAction );
65-
mEnabledButton->setDefaultAction( mEnableAction );
66-
6759
// Connect the UI to the event filter to update constraints
6860
connect( mEnableAction, &QAction::triggered, this, &QgsAdvancedDigitizingDockWidget::activateCad );
69-
connect( mConstructionModeButton, &QAbstractButton::clicked, this, &QgsAdvancedDigitizingDockWidget::setConstructionMode );
70-
connect( mParallelButton, &QAbstractButton::clicked, this, &QgsAdvancedDigitizingDockWidget::additionalConstraintClicked );
71-
connect( mPerpendicularButton, &QAbstractButton::clicked, this, &QgsAdvancedDigitizingDockWidget::additionalConstraintClicked );
61+
connect( mConstructionModeAction, &QAction::triggered, this, &QgsAdvancedDigitizingDockWidget::setConstructionMode );
62+
connect( mParallelAction, &QAction::triggered, this, &QgsAdvancedDigitizingDockWidget::additionalConstraintClicked );
63+
connect( mPerpendicularAction, &QAction::triggered, this, &QgsAdvancedDigitizingDockWidget::additionalConstraintClicked );
7264
connect( mLockAngleButton, &QAbstractButton::clicked, this, &QgsAdvancedDigitizingDockWidget::lockConstraint );
7365
connect( mLockDistanceButton, &QAbstractButton::clicked, this, &QgsAdvancedDigitizingDockWidget::lockConstraint );
7466
connect( mLockXButton, &QAbstractButton::clicked, this, &QgsAdvancedDigitizingDockWidget::lockConstraint );
@@ -124,11 +116,12 @@ QgsAdvancedDigitizingDockWidget::QgsAdvancedDigitizingDockWidget( QgsMapCanvas *
124116
mCommonAngleActions.insert( action, it->first );
125117
}
126118

127-
mSettingsButton->setMenu( menu );
128-
connect( mSettingsButton, SIGNAL( triggered( QAction * ) ), this, SLOT( settingsButtonTriggered( QAction * ) ) );
119+
qobject_cast< QToolButton *>( mToolbar->widgetForAction( mSettingsAction ) )->setPopupMode( QToolButton::InstantPopup );
120+
mSettingsAction->setMenu( menu );
121+
connect( menu, &QMenu::triggered, this, &QgsAdvancedDigitizingDockWidget::settingsButtonTriggered );
129122

130123
// set tooltips
131-
mConstructionModeButton->setToolTip( "<b>" + tr( "Construction mode" ) + "</b><br>(" + tr( "press c to toggle on/off" ) + ")" );
124+
mConstructionModeAction->setToolTip( "<b>" + tr( "Construction mode" ) + "</b><br>(" + tr( "press c to toggle on/off" ) + ")" );
132125
mDistanceLineEdit->setToolTip( "<b>" + tr( "Distance" ) + "</b><br>(" + tr( "press d for quick access" ) + ")" );
133126
mLockDistanceButton->setToolTip( "<b>" + tr( "Lock distance" ) + "</b><br>(" + tr( "press Ctrl + d for quick access" ) + ")" );
134127
mRepeatingLockDistanceButton->setToolTip( "<b>" + tr( "Continuously lock distance" ) + "</b>" );
@@ -166,7 +159,10 @@ void QgsAdvancedDigitizingDockWidget::setCadEnabled( bool enabled )
166159
{
167160
mCadEnabled = enabled;
168161
mEnableAction->setChecked( enabled );
169-
mCadButtons->setEnabled( enabled );
162+
mConstructionModeAction->setEnabled( enabled );
163+
mParallelAction->setEnabled( enabled );
164+
mPerpendicularAction->setEnabled( enabled );
165+
mSettingsAction->setEnabled( enabled );
170166
mInputWidgets->setEnabled( enabled );
171167

172168
clear();
@@ -193,11 +189,11 @@ void QgsAdvancedDigitizingDockWidget::additionalConstraintClicked( bool activate
193189
{
194190
lockAdditionalConstraint( NoConstraint );
195191
}
196-
if ( sender() == mParallelButton )
192+
if ( sender() == mParallelAction )
197193
{
198194
lockAdditionalConstraint( Parallel );
199195
}
200-
else if ( sender() == mPerpendicularButton )
196+
else if ( sender() == mPerpendicularAction )
201197
{
202198
lockAdditionalConstraint( Perpendicular );
203199
}
@@ -242,7 +238,7 @@ void QgsAdvancedDigitizingDockWidget::setConstraintRepeatingLock( bool activate
242238
void QgsAdvancedDigitizingDockWidget::setConstructionMode( bool enabled )
243239
{
244240
mConstructionMode = enabled;
245-
mConstructionModeButton->setChecked( enabled );
241+
mConstructionModeAction->setChecked( enabled );
246242
}
247243

248244
void QgsAdvancedDigitizingDockWidget::settingsButtonTriggered( QAction *action )
@@ -421,8 +417,8 @@ void QgsAdvancedDigitizingDockWidget::constraintFocusOut()
421417
void QgsAdvancedDigitizingDockWidget::lockAdditionalConstraint( AdditionalConstraint constraint )
422418
{
423419
mAdditionalConstraint = constraint;
424-
mPerpendicularButton->setChecked( constraint == Perpendicular );
425-
mParallelButton->setChecked( constraint == Parallel );
420+
mPerpendicularAction->setChecked( constraint == Perpendicular );
421+
mParallelAction->setChecked( constraint == Parallel );
426422
}
427423

428424
void QgsAdvancedDigitizingDockWidget::updateCapacity( bool updateUIwithoutChange )
@@ -451,19 +447,19 @@ void QgsAdvancedDigitizingDockWidget::updateCapacity( bool updateUIwithoutChange
451447
bool absoluteAngle = mCadEnabled && newCapacities.testFlag( AbsoluteAngle );
452448
bool relativeCoordinates = mCadEnabled && newCapacities.testFlag( RelativeCoordinates );
453449

454-
mPerpendicularButton->setEnabled( absoluteAngle && snappingEnabled );
455-
mParallelButton->setEnabled( absoluteAngle && snappingEnabled );
450+
mPerpendicularAction->setEnabled( absoluteAngle && snappingEnabled );
451+
mParallelAction->setEnabled( absoluteAngle && snappingEnabled );
456452

457453
//update tooltips on buttons
458454
if ( !snappingEnabled )
459455
{
460-
mPerpendicularButton->setToolTip( tr( "Snapping must be enabled to utilize perpendicular mode" ) );
461-
mParallelButton->setToolTip( tr( "Snapping must be enabled to utilize parallel mode" ) );
456+
mPerpendicularAction->setToolTip( tr( "Snapping must be enabled to utilize perpendicular mode" ) );
457+
mParallelAction->setToolTip( tr( "Snapping must be enabled to utilize parallel mode" ) );
462458
}
463459
else
464460
{
465-
mPerpendicularButton->setToolTip( "<b>" + tr( "Perpendicular" ) + "</b><br>(" + tr( "press p to switch between perpendicular, parallel and normal mode" ) + ")" );
466-
mParallelButton->setToolTip( "<b>" + tr( "Parallel" ) + "</b><br>(" + tr( "press p to switch between perpendicular, parallel and normal mode" ) + ")" );
461+
mPerpendicularAction->setToolTip( "<b>" + tr( "Perpendicular" ) + "</b><br>(" + tr( "press p to switch between perpendicular, parallel and normal mode" ) + ")" );
462+
mParallelAction->setToolTip( "<b>" + tr( "Parallel" ) + "</b><br>(" + tr( "press p to switch between perpendicular, parallel and normal mode" ) + ")" );
467463
}
468464

469465

@@ -930,8 +926,8 @@ bool QgsAdvancedDigitizingDockWidget::filterKeyPress( QKeyEvent *e )
930926
{
931927
if ( type == QEvent::KeyPress )
932928
{
933-
bool parallel = mParallelButton->isChecked();
934-
bool perpendicular = mPerpendicularButton->isChecked();
929+
bool parallel = mParallelAction->isChecked();
930+
bool perpendicular = mPerpendicularAction->isChecked();
935931

936932
if ( !parallel && !perpendicular )
937933
{
@@ -972,7 +968,6 @@ void QgsAdvancedDigitizingDockWidget::enable()
972968
mEnableAction->setEnabled( true );
973969
mErrorLabel->hide();
974970
mCadWidget->show();
975-
setMaximumHeight( 220 );
976971

977972
mCurrentMapToolSupportsCad = true;
978973

@@ -992,7 +987,6 @@ void QgsAdvancedDigitizingDockWidget::disable()
992987
mErrorLabel->setText( tr( "CAD tools are not enabled for the current map tool" ) );
993988
mErrorLabel->show();
994989
mCadWidget->hide();
995-
setMaximumHeight( 80 );
996990

997991
mCurrentMapToolSupportsCad = false;
998992

‎src/gui/qgsadvanceddigitizingdockwidget.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -492,7 +492,6 @@ class GUI_EXPORT QgsAdvancedDigitizingDockWidget : public QgsDockWidget, private
492492
std::unique_ptr<QgsMessageBarItem> mErrorMessage;
493493

494494
// UI
495-
QAction *mEnableAction = nullptr;
496495
QMap< QAction *, double > mCommonAngleActions; // map the common angle actions with their angle values
497496

498497
// Snap indicator

‎src/ui/qgsadvanceddigitizingdockwidgetbase.ui

Lines changed: 127 additions & 168 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,24 @@
66
<rect>
77
<x>0</x>
88
<y>0</y>
9-
<width>228</width>
9+
<width>208</width>
1010
<height>220</height>
1111
</rect>
1212
</property>
1313
<property name="maximumSize">
1414
<size>
1515
<width>524287</width>
16-
<height>220</height>
16+
<height>500</height>
1717
</size>
1818
</property>
1919
<property name="windowTitle">
2020
<string>Advanced Digitizing</string>
2121
</property>
2222
<widget class="QWidget" name="dockWidgetContents">
23-
<layout class="QGridLayout" name="gridLayout">
23+
<layout class="QVBoxLayout" name="parentLayout">
24+
<property name="spacing">
25+
<number>0</number>
26+
</property>
2427
<property name="leftMargin">
2528
<number>0</number>
2629
</property>
@@ -33,7 +36,27 @@
3336
<property name="bottomMargin">
3437
<number>0</number>
3538
</property>
36-
<item row="0" column="0">
39+
<item>
40+
<widget class="QToolBar" name="mToolbar">
41+
<property name="iconSize">
42+
<size>
43+
<width>16</width>
44+
<height>16</height>
45+
</size>
46+
</property>
47+
<property name="floatable">
48+
<bool>false</bool>
49+
</property>
50+
<addaction name="mEnableAction"/>
51+
<addaction name="separator"/>
52+
<addaction name="mConstructionModeAction"/>
53+
<addaction name="mParallelAction"/>
54+
<addaction name="mPerpendicularAction"/>
55+
<addaction name="separator"/>
56+
<addaction name="mSettingsAction"/>
57+
</widget>
58+
</item>
59+
<item>
3760
<layout class="QVBoxLayout" name="mLayout">
3861
<item>
3962
<widget class="QLabel" name="mErrorLabel">
@@ -69,152 +92,6 @@
6992
<property name="bottomMargin">
7093
<number>0</number>
7194
</property>
72-
<item>
73-
<layout class="QHBoxLayout" name="mButtonsLayout">
74-
<item>
75-
<widget class="QToolButton" name="mEnabledButton">
76-
<property name="toolTip">
77-
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
78-
</property>
79-
<property name="text">
80-
<string>…</string>
81-
</property>
82-
<property name="iconSize">
83-
<size>
84-
<width>24</width>
85-
<height>24</height>
86-
</size>
87-
</property>
88-
<property name="checkable">
89-
<bool>true</bool>
90-
</property>
91-
</widget>
92-
</item>
93-
<item>
94-
<widget class="QWidget" name="mCadButtons" native="true">
95-
<property name="sizePolicy">
96-
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
97-
<horstretch>0</horstretch>
98-
<verstretch>0</verstretch>
99-
</sizepolicy>
100-
</property>
101-
<layout class="QGridLayout" name="gridLayout_2">
102-
<property name="leftMargin">
103-
<number>0</number>
104-
</property>
105-
<property name="topMargin">
106-
<number>0</number>
107-
</property>
108-
<property name="rightMargin">
109-
<number>0</number>
110-
</property>
111-
<property name="bottomMargin">
112-
<number>0</number>
113-
</property>
114-
<property name="spacing">
115-
<number>3</number>
116-
</property>
117-
<item row="0" column="2">
118-
<widget class="QToolButton" name="mParallelButton">
119-
<property name="toolTip">
120-
<string/>
121-
</property>
122-
<property name="text">
123-
<string>…</string>
124-
</property>
125-
<property name="icon">
126-
<iconset resource="../../images/images.qrc">
127-
<normaloff>:/images/themes/default/cadtools/parallel.svg</normaloff>:/images/themes/default/cadtools/parallel.svg</iconset>
128-
</property>
129-
<property name="iconSize">
130-
<size>
131-
<width>24</width>
132-
<height>24</height>
133-
</size>
134-
</property>
135-
<property name="checkable">
136-
<bool>true</bool>
137-
</property>
138-
</widget>
139-
</item>
140-
<item row="0" column="1">
141-
<widget class="QToolButton" name="mPerpendicularButton">
142-
<property name="toolTip">
143-
<string/>
144-
</property>
145-
<property name="text">
146-
<string>…</string>
147-
</property>
148-
<property name="icon">
149-
<iconset resource="../../images/images.qrc">
150-
<normaloff>:/images/themes/default/cadtools/perpendicular.svg</normaloff>:/images/themes/default/cadtools/perpendicular.svg</iconset>
151-
</property>
152-
<property name="iconSize">
153-
<size>
154-
<width>24</width>
155-
<height>24</height>
156-
</size>
157-
</property>
158-
<property name="checkable">
159-
<bool>true</bool>
160-
</property>
161-
</widget>
162-
</item>
163-
<item row="0" column="0">
164-
<widget class="QToolButton" name="mConstructionModeButton">
165-
<property name="toolTip">
166-
<string/>
167-
</property>
168-
<property name="text">
169-
<string>…</string>
170-
</property>
171-
<property name="icon">
172-
<iconset resource="../../images/images.qrc">
173-
<normaloff>:/images/themes/default/cadtools/construction.svg</normaloff>:/images/themes/default/cadtools/construction.svg</iconset>
174-
</property>
175-
<property name="iconSize">
176-
<size>
177-
<width>24</width>
178-
<height>24</height>
179-
</size>
180-
</property>
181-
<property name="checkable">
182-
<bool>true</bool>
183-
</property>
184-
</widget>
185-
</item>
186-
<item row="0" column="3">
187-
<spacer name="horizontalSpacer">
188-
<property name="orientation">
189-
<enum>Qt::Horizontal</enum>
190-
</property>
191-
<property name="sizeHint" stdset="0">
192-
<size>
193-
<width>40</width>
194-
<height>20</height>
195-
</size>
196-
</property>
197-
</spacer>
198-
</item>
199-
<item row="0" column="4">
200-
<widget class="QToolButton" name="mSettingsButton">
201-
<property name="text">
202-
<string>…</string>
203-
</property>
204-
<property name="icon">
205-
<iconset resource="../../images/images.qrc">
206-
<normaloff>:/images/themes/default/propertyicons/settings.svg</normaloff>:/images/themes/default/propertyicons/settings.svg</iconset>
207-
</property>
208-
<property name="popupMode">
209-
<enum>QToolButton::InstantPopup</enum>
210-
</property>
211-
</widget>
212-
</item>
213-
</layout>
214-
</widget>
215-
</item>
216-
</layout>
217-
</item>
21895
<item>
21996
<widget class="QWidget" name="mInputWidgets" native="true">
22097
<layout class="QGridLayout" name="mInputLayout">
@@ -262,6 +139,9 @@
262139
<property name="checkable">
263140
<bool>true</bool>
264141
</property>
142+
<property name="autoRaise">
143+
<bool>true</bool>
144+
</property>
265145
</widget>
266146
</item>
267147
<item row="2" column="3">
@@ -279,6 +159,9 @@
279159
<property name="checkable">
280160
<bool>true</bool>
281161
</property>
162+
<property name="autoRaise">
163+
<bool>true</bool>
164+
</property>
282165
</widget>
283166
</item>
284167
<item row="3" column="0">
@@ -296,6 +179,9 @@
296179
<property name="checkable">
297180
<bool>true</bool>
298181
</property>
182+
<property name="autoRaise">
183+
<bool>true</bool>
184+
</property>
299185
</widget>
300186
</item>
301187
<item row="1" column="3">
@@ -313,6 +199,9 @@
313199
<property name="checkable">
314200
<bool>true</bool>
315201
</property>
202+
<property name="autoRaise">
203+
<bool>true</bool>
204+
</property>
316205
</widget>
317206
</item>
318207
<item row="2" column="2">
@@ -347,6 +236,9 @@
347236
<property name="checked">
348237
<bool>true</bool>
349238
</property>
239+
<property name="autoRaise">
240+
<bool>true</bool>
241+
</property>
350242
</widget>
351243
</item>
352244
<item row="1" column="2">
@@ -385,6 +277,9 @@
385277
<property name="checkable">
386278
<bool>true</bool>
387279
</property>
280+
<property name="autoRaise">
281+
<bool>true</bool>
282+
</property>
388283
</widget>
389284
</item>
390285
<item row="0" column="2">
@@ -409,6 +304,9 @@
409304
<property name="checkable">
410305
<bool>true</bool>
411306
</property>
307+
<property name="autoRaise">
308+
<bool>true</bool>
309+
</property>
412310
</widget>
413311
</item>
414312
<item row="0" column="4">
@@ -426,6 +324,9 @@
426324
<property name="checkable">
427325
<bool>true</bool>
428326
</property>
327+
<property name="autoRaise">
328+
<bool>true</bool>
329+
</property>
429330
</widget>
430331
</item>
431332
<item row="1" column="4">
@@ -443,6 +344,9 @@
443344
<property name="checkable">
444345
<bool>true</bool>
445346
</property>
347+
<property name="autoRaise">
348+
<bool>true</bool>
349+
</property>
446350
</widget>
447351
</item>
448352
<item row="2" column="4">
@@ -460,6 +364,9 @@
460364
<property name="checkable">
461365
<bool>true</bool>
462366
</property>
367+
<property name="autoRaise">
368+
<bool>true</bool>
369+
</property>
463370
</widget>
464371
</item>
465372
<item row="3" column="4">
@@ -477,8 +384,24 @@
477384
<property name="checkable">
478385
<bool>true</bool>
479386
</property>
387+
<property name="autoRaise">
388+
<bool>true</bool>
389+
</property>
480390
</widget>
481391
</item>
392+
<item row="4" column="0">
393+
<spacer name="verticalSpacer">
394+
<property name="orientation">
395+
<enum>Qt::Vertical</enum>
396+
</property>
397+
<property name="sizeHint" stdset="0">
398+
<size>
399+
<width>20</width>
400+
<height>40</height>
401+
</size>
402+
</property>
403+
</spacer>
404+
</item>
482405
</layout>
483406
</widget>
484407
</item>
@@ -487,20 +410,61 @@
487410
</item>
488411
</layout>
489412
</item>
490-
<item row="1" column="0">
491-
<spacer name="verticalSpacer">
492-
<property name="orientation">
493-
<enum>Qt::Vertical</enum>
494-
</property>
495-
<property name="sizeHint" stdset="0">
496-
<size>
497-
<width>20</width>
498-
<height>40</height>
499-
</size>
500-
</property>
501-
</spacer>
502-
</item>
503413
</layout>
414+
<action name="mEnableAction">
415+
<property name="toolTip">
416+
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Enable advanced digitizing tools&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
417+
</property>
418+
<property name="icon">
419+
<iconset resource="../../images/images.qrc">
420+
<normaloff>:/images/themes/default/cadtools/cad.svg</normaloff>:/images/themes/default/cadtools/cad.svg</iconset>
421+
</property>
422+
<property name="checkable">
423+
<bool>true</bool>
424+
</property>
425+
</action>
426+
<action name="mConstructionModeAction">
427+
<property name="toolTip">
428+
<string/>
429+
</property>
430+
<property name="icon">
431+
<iconset resource="../../images/images.qrc">
432+
<normaloff>:/images/themes/default/cadtools/construction.svg</normaloff>:/images/themes/default/cadtools/construction.svg</iconset>
433+
</property>
434+
<property name="checkable">
435+
<bool>true</bool>
436+
</property>
437+
</action>
438+
<action name="mParallelAction">
439+
<property name="toolTip">
440+
<string/>
441+
</property>
442+
<property name="icon">
443+
<iconset resource="../../images/images.qrc">
444+
<normaloff>:/images/themes/default/cadtools/parallel.svg</normaloff>:/images/themes/default/cadtools/parallel.svg</iconset>
445+
</property>
446+
<property name="checkable">
447+
<bool>true</bool>
448+
</property>
449+
</action>
450+
<action name="mPerpendicularAction">
451+
<property name="toolTip">
452+
<string/>
453+
</property>
454+
<property name="icon">
455+
<iconset resource="../../images/images.qrc">
456+
<normaloff>:/images/themes/default/cadtools/perpendicular.svg</normaloff>:/images/themes/default/cadtools/perpendicular.svg</iconset>
457+
</property>
458+
<property name="checkable">
459+
<bool>true</bool>
460+
</property>
461+
</action>
462+
<action name="mSettingsAction">
463+
<property name="icon">
464+
<iconset resource="../../images/images.qrc">
465+
<normaloff>:/images/themes/default/propertyicons/settings.svg</normaloff>:/images/themes/default/propertyicons/settings.svg</iconset>
466+
</property>
467+
</action>
504468
</widget>
505469
</widget>
506470
<customwidgets>
@@ -512,11 +476,6 @@
512476
</customwidget>
513477
</customwidgets>
514478
<tabstops>
515-
<tabstop>mEnabledButton</tabstop>
516-
<tabstop>mConstructionModeButton</tabstop>
517-
<tabstop>mPerpendicularButton</tabstop>
518-
<tabstop>mParallelButton</tabstop>
519-
<tabstop>mSettingsButton</tabstop>
520479
<tabstop>mDistanceLineEdit</tabstop>
521480
<tabstop>mLockDistanceButton</tabstop>
522481
<tabstop>mRepeatingLockDistanceButton</tabstop>

0 commit comments

Comments
 (0)
Please sign in to comment.