20
20
21
21
QgsUserInputDockWidget::QgsUserInputDockWidget ( QWidget *parent )
22
22
: QDockWidget( tr( " User input" ), parent )
23
- , mDockArea( Qt::BottomDockWidgetArea )
23
+ , mLayoutHorizontal( true )
24
24
{
25
25
QWidget* w = new QWidget ( this );
26
26
mLayout = new QBoxLayout ( QBoxLayout::LeftToRight, this );
27
27
mLayout ->setAlignment ( Qt::AlignLeft | Qt::AlignTop );
28
28
w->setLayout ( mLayout );
29
29
setWidget ( w );
30
30
31
- connect ( this , SIGNAL ( dockLocationChanged ( Qt::DockWidgetArea ) ), this , SLOT ( areaChanged ( Qt::DockWidgetArea ) ) );
31
+ QPalette pal = palette ();
32
+ pal.setColor ( QPalette::Background, QColor ( 231 , 245 , 254 ) );
33
+ setPalette ( pal );
34
+ setAutoFillBackground ( true );
32
35
36
+ connect ( this , SIGNAL ( dockLocationChanged ( Qt::DockWidgetArea ) ), this , SLOT ( areaChanged ( Qt::DockWidgetArea ) ) );
37
+ connect ( this , SIGNAL ( topLevelChanged ( bool ) ), this , SLOT ( floatingChanged ( bool ) ) );
33
38
hide ();
34
39
}
35
40
@@ -44,7 +49,7 @@ void QgsUserInputDockWidget::addUserInputWidget( QWidget *widget )
44
49
{
45
50
line = new QFrame ( this );
46
51
line->setFrameShadow ( QFrame::Sunken );
47
- line->setFrameShape ( isLayoutHorizontal () ? QFrame::VLine : QFrame::HLine );
52
+ line->setFrameShape ( mLayoutHorizontal ? QFrame::VLine : QFrame::HLine );
48
53
mLayout ->addWidget ( line );
49
54
}
50
55
mLayout ->addWidget ( widget );
@@ -53,8 +58,8 @@ void QgsUserInputDockWidget::addUserInputWidget( QWidget *widget )
53
58
54
59
mWidgetList .insert ( widget, line );
55
60
56
- adjustSize ();
57
61
show ();
62
+ adjustSize ();
58
63
}
59
64
60
65
void QgsUserInputDockWidget::widgetDestroyed ( QObject *obj )
@@ -73,48 +78,57 @@ void QgsUserInputDockWidget::widgetDestroyed( QObject *obj )
73
78
++i;
74
79
}
75
80
}
76
- if ( mWidgetList .count () == 0 )
81
+ }
82
+
83
+ void QgsUserInputDockWidget::areaChanged ( Qt::DockWidgetArea area )
84
+ {
85
+ bool newLayoutHorizontal = area & Qt::BottomDockWidgetArea || area & Qt::TopDockWidgetArea;
86
+ if ( mLayoutHorizontal == newLayoutHorizontal )
77
87
{
78
- hide ();
88
+ // no change
89
+ adjustSize ();
90
+ return ;
79
91
}
92
+ mLayoutHorizontal = newLayoutHorizontal;
93
+ updateLayoutDirection ();
80
94
}
81
95
82
- void QgsUserInputDockWidget::areaChanged ( Qt::DockWidgetArea area )
96
+ void QgsUserInputDockWidget::floatingChanged ( bool floating )
83
97
{
84
- mDockArea = area;
98
+ if ( mLayoutHorizontal == floating )
99
+ {
100
+ adjustSize ();
101
+ return ;
102
+ }
103
+ mLayoutHorizontal = floating;
104
+ updateLayoutDirection ();
105
+ }
85
106
86
- mLayout ->setDirection ( isLayoutHorizontal () ? QBoxLayout::LeftToRight : QBoxLayout::TopToBottom );
107
+ void QgsUserInputDockWidget::updateLayoutDirection ()
108
+ {
109
+ mLayout ->setDirection ( mLayoutHorizontal ? QBoxLayout::LeftToRight : QBoxLayout::TopToBottom );
87
110
88
111
QMap<QWidget*, QFrame*>::iterator i = mWidgetList .begin ();
89
112
while ( i != mWidgetList .end () )
90
113
{
91
114
if ( i.value () )
92
115
{
93
- i.value ()->setFrameShape ( isLayoutHorizontal () ? QFrame::VLine : QFrame::HLine );
116
+ i.value ()->setFrameShape ( mLayoutHorizontal ? QFrame::VLine : QFrame::HLine );
94
117
}
95
118
++i;
96
119
}
97
120
98
121
adjustSize ();
99
122
}
100
123
101
- bool QgsUserInputDockWidget::isLayoutHorizontal ()
102
- {
103
- if ( mDockArea & Qt::BottomDockWidgetArea || mDockArea & Qt::TopDockWidgetArea || mDockArea & Qt::NoDockWidgetArea )
104
- {
105
- return true ;
106
- }
107
- else
108
- {
109
- return false ;
110
- }
111
- }
112
-
113
124
void QgsUserInputDockWidget::paintEvent ( QPaintEvent * event )
114
125
{
115
- QDockWidget::paintEvent ( event );
116
126
if ( mWidgetList .count () == 0 )
117
127
{
118
128
hide ();
119
129
}
130
+ else
131
+ {
132
+ QDockWidget::paintEvent ( event );
133
+ }
120
134
}
0 commit comments