|
QGIS API Documentation
master-6227475
|
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