Skip to content

Commit 0fc7fc7

Browse files
committed
New flag to disable checkboxes for legend nodes in layer tree model
1 parent 8dba8af commit 0fc7fc7

File tree

3 files changed

+11
-2
lines changed

3 files changed

+11
-2
lines changed

python/core/layertree/qgslayertreemodel.sip

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ class QgsLayerTreeModel : QAbstractItemModel
5757
AllowNodeReorder, //!< Allow reordering with drag'n'drop
5858
AllowNodeRename, //!< Allow renaming of groups and layers
5959
AllowNodeChangeVisibility, //!< Allow user to set node visibility with a check box
60+
AllowSymbologyChangeState, //!< Allow check boxes for symbology items (if supported by layer's legend)
6061
};
6162
typedef QFlags<QgsLayerTreeModel::Flag> Flags;
6263

src/core/layertree/qgslayertreemodel.cpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
QgsLayerTreeModel::QgsLayerTreeModel( QgsLayerTreeGroup* rootNode, QObject *parent )
3434
: QAbstractItemModel( parent )
3535
, mRootNode( rootNode )
36-
, mFlags( ShowSymbology )
36+
, mFlags( ShowSymbology | AllowSymbologyChangeState )
3737
, mAutoCollapseSymNodesCount( -1 )
3838
{
3939
Q_ASSERT( mRootNode );
@@ -166,6 +166,8 @@ QVariant QgsLayerTreeModel::data( const QModelIndex &index, int role ) const
166166

167167
if ( QgsLayerTreeModelLegendNode* sym = index2symnode( index ) )
168168
{
169+
if ( role == Qt::CheckStateRole && !testFlag( AllowSymbologyChangeState ) )
170+
return QVariant();
169171
return sym->data( role );
170172
}
171173

@@ -289,7 +291,10 @@ Qt::ItemFlags QgsLayerTreeModel::flags( const QModelIndex& index ) const
289291

290292
if ( QgsLayerTreeModelLegendNode* symn = index2symnode( index ) )
291293
{
292-
return symn->flags();
294+
Qt::ItemFlags f = symn->flags();
295+
if ( !testFlag( AllowSymbologyChangeState ) )
296+
f &= ~Qt::ItemIsUserCheckable;
297+
return f;
293298
}
294299

295300
Qt::ItemFlags f = Qt::ItemIsEnabled | Qt::ItemIsSelectable;
@@ -321,6 +326,8 @@ bool QgsLayerTreeModel::setData( const QModelIndex& index, const QVariant& value
321326
QgsLayerTreeModelLegendNode *sym = index2symnode( index );
322327
if ( sym )
323328
{
329+
if ( role == Qt::CheckStateRole && !testFlag( AllowSymbologyChangeState ) )
330+
return false;
324331
bool res = sym->setData( value, role );
325332
if ( res )
326333
emit dataChanged( index, index );

src/core/layertree/qgslayertreemodel.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ class CORE_EXPORT QgsLayerTreeModel : public QAbstractItemModel
7777
AllowNodeReorder = 0x1000, //!< Allow reordering with drag'n'drop
7878
AllowNodeRename = 0x2000, //!< Allow renaming of groups and layers
7979
AllowNodeChangeVisibility = 0x4000, //!< Allow user to set node visibility with a check box
80+
AllowSymbologyChangeState = 0x8000, //!< Allow check boxes for symbology items (if supported by layer's legend)
8081
};
8182
Q_DECLARE_FLAGS( Flags, Flag )
8283

0 commit comments

Comments
 (0)