Skip to content

Commit a2ef677

Browse files
committed
Add method to toggle user visibility of QgsDockWidgets
1 parent c95e1c6 commit a2ef677

File tree

4 files changed

+79
-0
lines changed

4 files changed

+79
-0
lines changed

python/gui/auto_generated/qgsdockwidget.sip.in

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ Returns true if the dock is both opened and raised to the front (ie not hidden b
4545
any other tabs.
4646

4747
.. seealso:: :py:func:`setUserVisible`
48+
49+
.. seealso:: :py:func:`toggleUserVisible`
4850
%End
4951

5052
public slots:
@@ -64,6 +66,21 @@ Sets the dock widget as visible to a user, ie both shown and raised to the front
6466
- hiding a dock which is closed has no effect and raises no signals
6567

6668
.. seealso:: :py:func:`isUserVisible`
69+
70+
.. seealso:: :py:func:`toggleUserVisible`
71+
%End
72+
73+
void toggleUserVisible();
74+
%Docstring
75+
Toggles whether the dock is user visible. If the dock is not currently user
76+
visible (i.e. opened and activated as a tab) then the dock will be opened
77+
and raised. If it is currently user visible it will be closed.
78+
79+
.. seealso:: :py:func:`setUserVisible`
80+
81+
.. seealso:: :py:func:`isUserVisible`
82+
83+
.. versionadded:: 3.2
6784
%End
6885

6986
protected:

src/gui/qgsdockwidget.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@ void QgsDockWidget::setUserVisible( bool visible )
4747
}
4848
}
4949

50+
void QgsDockWidget::toggleUserVisible()
51+
{
52+
setUserVisible( !isUserVisible() );
53+
}
54+
5055
bool QgsDockWidget::isUserVisible() const
5156
{
5257
return mVisibleAndActive;

src/gui/qgsdockwidget.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ class GUI_EXPORT QgsDockWidget : public QDockWidget
5353
* Returns true if the dock is both opened and raised to the front (ie not hidden by
5454
* any other tabs.
5555
* \see setUserVisible()
56+
* \see toggleUserVisible()
5657
*/
5758
bool isUserVisible() const;
5859

@@ -70,9 +71,21 @@ class GUI_EXPORT QgsDockWidget : public QDockWidget
7071
* be closed
7172
* - hiding a dock which is closed has no effect and raises no signals
7273
* \see isUserVisible()
74+
* \see toggleUserVisible()
7375
*/
7476
void setUserVisible( bool visible );
7577

78+
/**
79+
* Toggles whether the dock is user visible. If the dock is not currently user
80+
* visible (i.e. opened and activated as a tab) then the dock will be opened
81+
* and raised. If it is currently user visible it will be closed.
82+
*
83+
* \see setUserVisible()
84+
* \see isUserVisible()
85+
* \since QGIS 3.2
86+
*/
87+
void toggleUserVisible();
88+
7689
protected:
7790

7891
void closeEvent( QCloseEvent * ) override;

tests/src/gui/testqgsdockwidget.cpp

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ class TestQgsDockWidget: public QObject
3232
void testSignals();
3333
void testUserVisible();
3434
void testSetUserVisible();
35+
void testToggleUserVisible();
3536

3637
private:
3738

@@ -176,5 +177,48 @@ void TestQgsDockWidget::testSetUserVisible()
176177

177178
}
178179

180+
void TestQgsDockWidget::testToggleUserVisible()
181+
{
182+
QMainWindow *w = new QMainWindow();
183+
QApplication::setActiveWindow( w ); //required for focus events
184+
QgsDockWidget *d1 = new QgsDockWidget( w );
185+
QgsDockWidget *d2 = new QgsDockWidget( w );
186+
w->addDockWidget( Qt::RightDockWidgetArea, d1 );
187+
w->addDockWidget( Qt::RightDockWidgetArea, d2 );
188+
w->tabifyDockWidget( d1, d2 );
189+
w->show();
190+
191+
QVERIFY( d2->isUserVisible() );
192+
QVERIFY( !d1->isUserVisible() );
193+
194+
d1->toggleUserVisible();
195+
QVERIFY( !d2->isUserVisible() );
196+
QVERIFY( d2->isVisible() );
197+
QVERIFY( d1->isUserVisible() );
198+
QVERIFY( d1->isVisible() );
199+
200+
d2->hide();
201+
d2->toggleUserVisible();
202+
QVERIFY( d2->isUserVisible() );
203+
QVERIFY( d2->isVisible() );
204+
QVERIFY( !d1->isUserVisible() );
205+
QVERIFY( d1->isVisible() );
206+
207+
d2->hide();
208+
d1->raise(); //shouldn't be necessary outside of tests
209+
QVERIFY( !d2->isUserVisible() );
210+
QVERIFY( !d2->isVisible() );
211+
QVERIFY( d1->isUserVisible() );
212+
QVERIFY( d1->isVisible() );
213+
214+
d1->toggleUserVisible();
215+
QVERIFY( !d2->isVisible() );
216+
QVERIFY( !d1->isUserVisible() );
217+
QVERIFY( !d1->isVisible() );
218+
219+
delete w;
220+
221+
}
222+
179223
QGSTEST_MAIN( TestQgsDockWidget )
180224
#include "testqgsdockwidget.moc"

0 commit comments

Comments
 (0)