QGIS API Documentation  master-6227475
src/gui/qgscollapsiblegroupbox.h
Go to the documentation of this file.
00001 /***************************************************************************
00002                           qgscollapsiblegroupbox.h
00003                              -------------------
00004     begin                : August 2012
00005     copyright            : (C) 2012 by Etienne Tourigny
00006     email                : etourigny dot dev at gmail dot com
00007  ***************************************************************************/
00008 
00009 /***************************************************************************
00010  *                                                                         *
00011  *   This program is free software; you can redistribute it and/or modify  *
00012  *   it under the terms of the GNU General Public License as published by  *
00013  *   the Free Software Foundation; either version 2 of the License, or     *
00014  *   (at your option) any later version.                                   *
00015  *                                                                         *
00016  ***************************************************************************/
00017 
00018 #ifndef QGSCOLLAPSIBLEGROUPBOX_H
00019 #define QGSCOLLAPSIBLEGROUPBOX_H
00020 
00021 #include "qgisgui.h"
00022 
00023 #include <QGroupBox>
00024 #include <QSettings>
00025 #include <QPointer>
00026 #include <QToolButton>
00027 #include <QMouseEvent>
00028 
00029 class QToolButton;
00030 class QScrollArea;
00031 
00032 class QgsGroupBoxCollapseButton: public QToolButton
00033 {
00034     Q_OBJECT
00035 
00036   public:
00037     QgsGroupBoxCollapseButton( QWidget *parent = 0 )
00038         : QToolButton( parent ), mAltDown( false ), mShiftDown( false ) {}
00039 
00040     ~QgsGroupBoxCollapseButton() {}
00041 
00042     bool altDown() const { return mAltDown; }
00043     void setAltDown( bool updown ) { mAltDown = updown; }
00044 
00045     bool shiftDown() const { return mShiftDown; }
00046     void setShiftDown( bool shiftdown ) { mShiftDown = shiftdown; }
00047 
00048   protected:
00049     void mouseReleaseEvent( QMouseEvent *event )
00050     {
00051       mAltDown = ( event->modifiers() & ( Qt::AltModifier | Qt::ControlModifier ) );
00052       mShiftDown = ( event->modifiers() & Qt::ShiftModifier );
00053       QToolButton::mouseReleaseEvent( event );
00054     }
00055 
00056   private:
00057     bool mAltDown;
00058     bool mShiftDown;
00059 };
00060 
00071 class GUI_EXPORT QgsCollapsibleGroupBoxBasic : public QGroupBox
00072 {
00073     Q_OBJECT
00074 
00075     Q_PROPERTY( bool collapsed READ isCollapsed WRITE setCollapsed USER true )
00076     Q_PROPERTY( QString syncGroup READ syncGroup WRITE setSyncGroup )
00077 
00078   public:
00079     QgsCollapsibleGroupBoxBasic( QWidget *parent = 0 );
00080     QgsCollapsibleGroupBoxBasic( const QString &title, QWidget *parent = 0 );
00081     ~QgsCollapsibleGroupBoxBasic();
00082 
00083     bool isCollapsed() const { return mCollapsed; }
00084     void setCollapsed( bool collapse );
00085 
00087     QString syncGroup() const { return mSyncGroup; }
00088     void setSyncGroup( QString grp );
00089 
00091     void setScrollOnExpand( bool scroll ) { mScrollOnExpand = scroll; }
00092 
00093   signals:
00095     void collapsedStateChanged( bool collapsed );
00096 
00097   public slots:
00098     void checkToggled( bool ckd );
00099     void checkClicked( bool ckd );
00100     void toggleCollapsed();
00101 
00102   protected:
00103     void init();
00104 
00106     void collapseExpandFixes();
00107 
00108     void showEvent( QShowEvent *event );
00109     void mousePressEvent( QMouseEvent *event );
00110     void mouseReleaseEvent( QMouseEvent *event );
00111     void changeEvent( QEvent *event );
00112 
00113     void updateStyle();
00114     QRect titleRect() const;
00115     void clearModifiers();
00116 
00117     bool mCollapsed;
00118     bool mInitFlat;
00119     bool mInitFlatChecked;
00120     bool mScrollOnExpand;
00121     bool mShown;
00122     QScrollArea* mParentScrollArea;
00123     QgsGroupBoxCollapseButton* mCollapseButton;
00124     QWidget* mSyncParent;
00125     QString mSyncGroup;
00126     bool mAltDown;
00127     bool mShiftDown;
00128     bool mTitleClicked;
00129 
00130     static QIcon mCollapseIcon;
00131     static QIcon mExpandIcon;
00132 };
00133 
00145 class GUI_EXPORT QgsCollapsibleGroupBox : public QgsCollapsibleGroupBoxBasic
00146 {
00147     Q_OBJECT
00148 
00149     Q_PROPERTY( bool collapsed READ isCollapsed WRITE setCollapsed USER true )
00150     Q_PROPERTY( bool saveCollapsedState READ saveCollapsedState WRITE setSaveCollapsedState )
00151     Q_PROPERTY( bool saveCheckedState READ saveCheckedState WRITE setSaveCheckedState )
00152     Q_PROPERTY( QString syncGroup READ syncGroup WRITE setSyncGroup )
00153 
00154   public:
00155     QgsCollapsibleGroupBox( QWidget *parent = 0, QSettings* settings = 0 );
00156     QgsCollapsibleGroupBox( const QString &title, QWidget *parent = 0, QSettings* settings = 0 );
00157     ~QgsCollapsibleGroupBox();
00158 
00159     // set custom QSettings pointer if group box was already created from QtDesigner promotion
00160     void setSettings( QSettings* settings );
00161 
00163     void setSaveCollapsedState( bool save ) { mSaveCollapsedState = save; }
00167     void setSaveCheckedState( bool save ) { mSaveCheckedState = save; }
00168     bool saveCollapsedState() { return mSaveCollapsedState; }
00169     bool saveCheckedState() { return mSaveCheckedState; }
00170 
00172     void setSettingGroup( const QString &group ) { mSettingGroup = group; }
00173     QString settingGroup() const { return mSettingGroup; }
00174 
00175   protected slots:
00176     void loadState();
00177     void saveState();
00178 
00179   protected:
00180     void init();
00181     void showEvent( QShowEvent *event );
00182     QString saveKey() const;
00183 
00184     // pointer to app or custom, external QSettings
00185     // QPointer in case custom settings obj gets deleted while groupbox's dialog is open
00186     QPointer<QSettings> mSettings;
00187     bool mDelSettings;
00188 
00189     bool mSaveCollapsedState;
00190     bool mSaveCheckedState;
00191     QString mSettingGroup;
00192 };
00193 
00194 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines