Skip to content

Commit 54d6fdd

Browse files
committedMar 12, 2013
Add function to collapsible group box's to fix visual issues during collapse and expand
- Update QgsCollapsibleGroupBox for basic Mac style
1 parent 3a1c54a commit 54d6fdd

File tree

3 files changed

+235
-181
lines changed

3 files changed

+235
-181
lines changed
 

‎src/gui/qgscollapsiblegroupbox.cpp

Lines changed: 68 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -316,7 +316,7 @@ void QgsCollapsibleGroupBoxBasic::updateStyle()
316316
int marginLeft = 20; // title margin for disclosure triangle
317317
int marginRight = 5; // a little bit of space on the right, to match space on the left
318318
int offsetLeft = 0; // offset for oxygen theme
319-
int offsetStyle = QApplication::style()->objectName().contains( "macintosh" ) ? 1 : 0;
319+
int offsetStyle = QApplication::style()->objectName().contains( "macintosh" ) ? ( usingQgsStyle ? 1 : 8 ) : 0;
320320
int topBuffer = ( usingQgsStyle ? 3 : 1 ) + offsetStyle; // space between top of title or triangle and widget above
321321
int offsetTop = topBuffer;
322322
int offsetTopTri = topBuffer; // offset for triangle
@@ -378,6 +378,10 @@ void QgsCollapsibleGroupBoxBasic::updateStyle()
378378
ss += QString( " margin-right: %1px;" ).arg( marginRight );
379379
ss += QString( " left: %1px;" ).arg( offsetLeft );
380380
ss += QString( " top: %1px;" ).arg( offsetTop );
381+
if ( QApplication::style()->objectName().contains( "macintosh" ) )
382+
{
383+
ss += " background-color: rgba(0,0,0,0)";
384+
}
381385
ss += "}";
382386
setStyleSheet( ss );
383387

@@ -410,30 +414,8 @@ void QgsCollapsibleGroupBoxBasic::setCollapsed( bool collapse )
410414
// TODO: find another means of avoiding the X11 flicker
411415
// QApplication::processEvents();
412416

413-
// handle QPushButtons in form layouts that stay visible on collapse (Qt bug)
414-
// set flat on collapse for fix, but preserve button's flat value when expanding
415-
if ( collapse )
416-
{
417-
foreach ( QPushButton* pBtn, findChildren<QPushButton *>() )
418-
{
419-
if ( ! pBtn->isFlat() )
420-
{
421-
if ( ! pBtn->property( "PushButtonFlat" ).isValid() )
422-
pBtn->setProperty( "PushButtonFlat", QVariant( false ) );
423-
424-
pBtn->setFlat( true );
425-
}
426-
}
427-
}
428-
else
429-
{
430-
foreach ( QPushButton* pBtn, findChildren<QPushButton *>() )
431-
{
432-
// restore any previous flat value
433-
if ( pBtn->property( "PushButtonFlat" ).isValid() )
434-
pBtn->setFlat( false );
435-
}
436-
}
417+
// handle visual fixes for collapsing/expanding
418+
collapseExpandFixes();
437419

438420
// set maximum height to hide contents - does this work in all envs?
439421
// setMaximumHeight( collapse ? 25 : 16777215 );
@@ -451,6 +433,67 @@ void QgsCollapsibleGroupBoxBasic::setCollapsed( bool collapse )
451433
emit collapsedStateChanged( isCollapsed() );
452434
}
453435

436+
void QgsCollapsibleGroupBoxBasic::collapseExpandFixes()
437+
{
438+
if ( QApplication::style()->objectName().contains( "macintosh" ) )
439+
{
440+
// handle QPushButtons in form layouts that stay partly visible on collapse (Qt bug?)
441+
// hide on collapse for fix, but only show buttons that were specifically hidden when expanding
442+
// key hiding off of this group box's object name so it does not affect child group boxes
443+
const QByteArray objKey = QString( "CollGrpBxHiddenButton_%1" ).arg( objectName() ).toUtf8();
444+
const char* pbHideKey = objKey.constData();
445+
446+
// handle child group box widgets that don't hide their frames on collapse of parent
447+
const char* gbHideKey = "CollGrpBxHideGrpBx";
448+
449+
if ( mCollapsed )
450+
{
451+
// first hide all child group boxes, regardless of whether they are collapsible
452+
foreach ( QGroupBox* gbx, findChildren<QGroupBox *>() )
453+
{
454+
if ( gbx->isVisible() && !gbx->property( gbHideKey ).isValid() )
455+
{
456+
gbx->setProperty( gbHideKey, QVariant( true ) );
457+
gbx->hide();
458+
}
459+
}
460+
461+
// hide still visible push buttons belonging to this group box
462+
foreach ( QPushButton* pBtn, findChildren<QPushButton *>() )
463+
{
464+
if ( pBtn->isVisible() && !pBtn->property( pbHideKey ).isValid() )
465+
{
466+
pBtn->setProperty( pbHideKey, QVariant( true ) );
467+
pBtn->hide();
468+
}
469+
}
470+
}
471+
else // on expand
472+
{
473+
// first show push buttons belonging to this group box
474+
foreach ( QPushButton* pBtn, findChildren<QPushButton *>() )
475+
{
476+
if ( pBtn->property( pbHideKey ).isValid() ) // don't have to check bool value
477+
{
478+
pBtn->setProperty( pbHideKey, QVariant() ); // remove property
479+
pBtn->show();
480+
}
481+
}
482+
483+
// show all hidden child group boxes
484+
foreach ( QGroupBox* gbx, findChildren<QGroupBox *>() )
485+
{
486+
if ( gbx->property( gbHideKey ).isValid() ) // don't have to check bool value
487+
{
488+
gbx->setProperty( gbHideKey, QVariant() ); // remove property
489+
gbx->show();
490+
}
491+
}
492+
}
493+
}
494+
}
495+
496+
454497
// ----
455498

456499
QgsCollapsibleGroupBox::QgsCollapsibleGroupBox( QWidget *parent, QSettings* settings )

‎src/gui/qgscollapsiblegroupbox.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,10 @@ class GUI_EXPORT QgsCollapsibleGroupBoxBasic : public QGroupBox
100100

101101
protected:
102102
void init();
103+
104+
/** Visual fixes for when group box is collapsed/expanded */
105+
void collapseExpandFixes();
106+
103107
void showEvent( QShowEvent *event );
104108
void mousePressEvent( QMouseEvent *event );
105109
void mouseReleaseEvent( QMouseEvent *event );

‎src/ui/qgscomposermapwidgetbase.ui

Lines changed: 163 additions & 156 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,9 @@
5454
<property name="geometry">
5555
<rect>
5656
<x>0</x>
57-
<y>0</y>
58-
<width>439</width>
59-
<height>1277</height>
57+
<y>-202</y>
58+
<width>440</width>
59+
<height>1310</height>
6060
</rect>
6161
</property>
6262
<property name="sizePolicy">
@@ -268,182 +268,189 @@
268268
<property name="collapsed" stdset="0">
269269
<bool>true</bool>
270270
</property>
271-
<layout class="QFormLayout">
272-
<property name="fieldGrowthPolicy">
273-
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
274-
</property>
275-
<property name="labelAlignment">
276-
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
277-
</property>
278-
<item row="0" column="0">
279-
<widget class="QLabel" name="mGridTypeLabel">
280-
<property name="accessibleName">
281-
<string extracomment="Hello translotor"/>
282-
</property>
283-
<property name="text">
284-
<string>Grid &amp;type</string>
285-
</property>
286-
<property name="wordWrap">
287-
<bool>false</bool>
288-
</property>
289-
<property name="buddy">
290-
<cstring>mGridTypeComboBox</cstring>
291-
</property>
292-
</widget>
293-
</item>
294-
<item row="0" column="1">
295-
<widget class="QComboBox" name="mGridTypeComboBox"/>
296-
</item>
297-
<item row="1" column="0">
298-
<widget class="QLabel" name="mIntervalXLabel">
299-
<property name="text">
300-
<string>Interval</string>
301-
</property>
302-
<property name="wordWrap">
303-
<bool>false</bool>
304-
</property>
305-
<property name="buddy">
306-
<cstring>mIntervalXSpinBox</cstring>
307-
</property>
308-
</widget>
309-
</item>
310-
<item row="1" column="1">
311-
<layout class="QVBoxLayout" name="verticalLayout_7">
312-
<item>
313-
<widget class="QDoubleSpinBox" name="mIntervalYSpinBox">
314-
<property name="prefix">
315-
<string>X </string>
271+
<layout class="QVBoxLayout" name="verticalLayout">
272+
<item>
273+
<layout class="QFormLayout" name="formLayout_2">
274+
<property name="fieldGrowthPolicy">
275+
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
276+
</property>
277+
<property name="labelAlignment">
278+
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
279+
</property>
280+
<property name="bottomMargin">
281+
<number>6</number>
282+
</property>
283+
<item row="0" column="0">
284+
<widget class="QLabel" name="mGridTypeLabel">
285+
<property name="accessibleName">
286+
<string extracomment="Hello translotor"/>
316287
</property>
317-
<property name="decimals">
318-
<number>5</number>
288+
<property name="text">
289+
<string>Grid &amp;type</string>
319290
</property>
320-
<property name="maximum">
321-
<double>9999999.000000000000000</double>
291+
<property name="wordWrap">
292+
<bool>false</bool>
293+
</property>
294+
<property name="buddy">
295+
<cstring>mGridTypeComboBox</cstring>
322296
</property>
323297
</widget>
324298
</item>
325-
<item>
326-
<widget class="QDoubleSpinBox" name="mIntervalXSpinBox">
327-
<property name="prefix">
328-
<string>Y </string>
299+
<item row="0" column="1">
300+
<widget class="QComboBox" name="mGridTypeComboBox"/>
301+
</item>
302+
<item row="1" column="0">
303+
<widget class="QLabel" name="mIntervalXLabel">
304+
<property name="text">
305+
<string>Interval</string>
329306
</property>
330-
<property name="decimals">
331-
<number>5</number>
307+
<property name="wordWrap">
308+
<bool>false</bool>
332309
</property>
333-
<property name="maximum">
334-
<double>9999999.000000000000000</double>
310+
<property name="buddy">
311+
<cstring>mIntervalXSpinBox</cstring>
335312
</property>
336313
</widget>
337314
</item>
338-
</layout>
339-
</item>
340-
<item row="2" column="0">
341-
<widget class="QLabel" name="mOffsetXLabel">
342-
<property name="text">
343-
<string>Offset X</string>
344-
</property>
345-
<property name="wordWrap">
346-
<bool>false</bool>
347-
</property>
348-
<property name="buddy">
349-
<cstring>mOffsetXSpinBox</cstring>
350-
</property>
351-
</widget>
352-
</item>
353-
<item row="2" column="1">
354-
<layout class="QVBoxLayout" name="verticalLayout_8">
355-
<item>
356-
<widget class="QDoubleSpinBox" name="mOffsetXSpinBox">
357-
<property name="prefix">
358-
<string>X </string>
315+
<item row="1" column="1">
316+
<layout class="QVBoxLayout" name="verticalLayout_7">
317+
<item>
318+
<widget class="QDoubleSpinBox" name="mIntervalYSpinBox">
319+
<property name="prefix">
320+
<string>X </string>
321+
</property>
322+
<property name="decimals">
323+
<number>5</number>
324+
</property>
325+
<property name="maximum">
326+
<double>9999999.000000000000000</double>
327+
</property>
328+
</widget>
329+
</item>
330+
<item>
331+
<widget class="QDoubleSpinBox" name="mIntervalXSpinBox">
332+
<property name="prefix">
333+
<string>Y </string>
334+
</property>
335+
<property name="decimals">
336+
<number>5</number>
337+
</property>
338+
<property name="maximum">
339+
<double>9999999.000000000000000</double>
340+
</property>
341+
</widget>
342+
</item>
343+
</layout>
344+
</item>
345+
<item row="2" column="0">
346+
<widget class="QLabel" name="mOffsetXLabel">
347+
<property name="text">
348+
<string>Offset X</string>
359349
</property>
360-
<property name="decimals">
361-
<number>5</number>
350+
<property name="wordWrap">
351+
<bool>false</bool>
362352
</property>
363-
<property name="maximum">
364-
<double>9999999.000000000000000</double>
353+
<property name="buddy">
354+
<cstring>mOffsetXSpinBox</cstring>
365355
</property>
366356
</widget>
367357
</item>
368-
<item>
369-
<widget class="QDoubleSpinBox" name="mOffsetYSpinBox">
370-
<property name="prefix">
371-
<string>Y </string>
358+
<item row="2" column="1">
359+
<layout class="QVBoxLayout" name="verticalLayout_8">
360+
<item>
361+
<widget class="QDoubleSpinBox" name="mOffsetXSpinBox">
362+
<property name="prefix">
363+
<string>X </string>
364+
</property>
365+
<property name="decimals">
366+
<number>5</number>
367+
</property>
368+
<property name="maximum">
369+
<double>9999999.000000000000000</double>
370+
</property>
371+
</widget>
372+
</item>
373+
<item>
374+
<widget class="QDoubleSpinBox" name="mOffsetYSpinBox">
375+
<property name="prefix">
376+
<string>Y </string>
377+
</property>
378+
<property name="decimals">
379+
<number>5</number>
380+
</property>
381+
<property name="maximum">
382+
<double>9999999.000000000000000</double>
383+
</property>
384+
</widget>
385+
</item>
386+
</layout>
387+
</item>
388+
<item row="3" column="0">
389+
<widget class="QLabel" name="mCrossWidthLabel">
390+
<property name="text">
391+
<string>Cross width</string>
392+
</property>
393+
<property name="wordWrap">
394+
<bool>false</bool>
372395
</property>
396+
<property name="buddy">
397+
<cstring>mCrossWidthSpinBox</cstring>
398+
</property>
399+
</widget>
400+
</item>
401+
<item row="3" column="1">
402+
<widget class="QDoubleSpinBox" name="mCrossWidthSpinBox">
373403
<property name="decimals">
374404
<number>5</number>
375405
</property>
376-
<property name="maximum">
377-
<double>9999999.000000000000000</double>
406+
</widget>
407+
</item>
408+
<item row="4" column="0">
409+
<widget class="QLabel" name="mFrameStyleLabel">
410+
<property name="text">
411+
<string>Frame style</string>
412+
</property>
413+
<property name="wordWrap">
414+
<bool>false</bool>
415+
</property>
416+
</widget>
417+
</item>
418+
<item row="4" column="1">
419+
<widget class="QComboBox" name="mFrameStyleComboBox"/>
420+
</item>
421+
<item row="5" column="0">
422+
<widget class="QLabel" name="mFrameWidthLabel">
423+
<property name="text">
424+
<string>Frame width</string>
425+
</property>
426+
<property name="wordWrap">
427+
<bool>false</bool>
428+
</property>
429+
</widget>
430+
</item>
431+
<item row="5" column="1">
432+
<widget class="QDoubleSpinBox" name="mFrameWidthSpinBox"/>
433+
</item>
434+
<item row="6" column="0">
435+
<widget class="QLabel" name="mLineStyleLabel">
436+
<property name="text">
437+
<string>Line style</string>
438+
</property>
439+
<property name="wordWrap">
440+
<bool>false</bool>
441+
</property>
442+
</widget>
443+
</item>
444+
<item row="6" column="1">
445+
<widget class="QPushButton" name="mGridLineStyleButton">
446+
<property name="text">
447+
<string>change...</string>
378448
</property>
379449
</widget>
380450
</item>
381451
</layout>
382452
</item>
383-
<item row="3" column="0">
384-
<widget class="QLabel" name="mCrossWidthLabel">
385-
<property name="text">
386-
<string>Cross width</string>
387-
</property>
388-
<property name="wordWrap">
389-
<bool>false</bool>
390-
</property>
391-
<property name="buddy">
392-
<cstring>mCrossWidthSpinBox</cstring>
393-
</property>
394-
</widget>
395-
</item>
396-
<item row="3" column="1">
397-
<widget class="QDoubleSpinBox" name="mCrossWidthSpinBox">
398-
<property name="decimals">
399-
<number>5</number>
400-
</property>
401-
</widget>
402-
</item>
403-
<item row="4" column="0">
404-
<widget class="QLabel" name="mFrameStyleLabel">
405-
<property name="text">
406-
<string>Frame style</string>
407-
</property>
408-
<property name="wordWrap">
409-
<bool>false</bool>
410-
</property>
411-
</widget>
412-
</item>
413-
<item row="4" column="1">
414-
<widget class="QComboBox" name="mFrameStyleComboBox"/>
415-
</item>
416-
<item row="5" column="0">
417-
<widget class="QLabel" name="mFrameWidthLabel">
418-
<property name="text">
419-
<string>Frame width</string>
420-
</property>
421-
<property name="wordWrap">
422-
<bool>false</bool>
423-
</property>
424-
</widget>
425-
</item>
426-
<item row="5" column="1">
427-
<widget class="QDoubleSpinBox" name="mFrameWidthSpinBox"/>
428-
</item>
429-
<item row="6" column="0">
430-
<widget class="QLabel" name="mLineStyleLabel">
431-
<property name="text">
432-
<string>Line style</string>
433-
</property>
434-
<property name="wordWrap">
435-
<bool>false</bool>
436-
</property>
437-
</widget>
438-
</item>
439-
<item row="6" column="1">
440-
<widget class="QPushButton" name="mGridLineStyleButton">
441-
<property name="text">
442-
<string>change...</string>
443-
</property>
444-
</widget>
445-
</item>
446-
<item row="7" column="0" colspan="2">
453+
<item>
447454
<widget class="QgsCollapsibleGroupBoxBasic" name="mDrawAnnotationCheckableGroupBox">
448455
<property name="enabled">
449456
<bool>false</bool>
@@ -458,7 +465,7 @@
458465
<bool>true</bool>
459466
</property>
460467
<property name="syncGroup" stdset="0">
461-
<string notr="true">composeritem</string>
468+
<string/>
462469
</property>
463470
<property name="collapsed" stdset="0">
464471
<bool>true</bool>

0 commit comments

Comments
 (0)
Please sign in to comment.