Skip to content

Commit 402b7e4

Browse files
signedavnyalldawson
authored andcommitted
hide instead of disable
and use mode for identify - not to show the actions with isEnabledOnlyWhenEditable is active
1 parent 87a6fe1 commit 402b7e4

10 files changed

+24
-32
lines changed

src/app/qgisapp.cpp

+2-4
Original file line numberDiff line numberDiff line change
@@ -6464,12 +6464,11 @@ void QgisApp::refreshFeatureActions()
64646464
QList<QgsAction> actions = vlayer->actions()->actions( QStringLiteral( "Canvas" ) );
64656465
Q_FOREACH ( const QgsAction &action, actions )
64666466
{
6467-
if( vlayer->readOnly() && action.isEnabledOnlyWhenEditable() )
6467+
if ( !vlayer->isEditable() && action.isEnabledOnlyWhenEditable() )
64686468
continue;
64696469

64706470
QString actionTitle = !action.shortTitle().isEmpty() ? action.shortTitle() : action.icon().isNull() ? action.name() : QStringLiteral( "" );
64716471
QAction *qAction = new QAction( action.icon(), actionTitle, mFeatureActionMenu );
6472-
qAction->setEnabled( !action.isEnabledOnlyWhenEditable() || vlayer->isEditable() );
64736472
qAction->setData( QVariant::fromValue<QgsAction>( action ) );
64746473
mFeatureActionMenu->addAction( qAction );
64756474

@@ -6489,10 +6488,9 @@ void QgisApp::refreshFeatureActions()
64896488

64906489
for ( int i = 0; i < registeredActions.size(); i++ )
64916490
{
6492-
if( vlayer->readOnly() && registeredActions.at( i )->isEnabledOnlyWhenEditable() )
6491+
if ( !vlayer->isEditable() && registeredActions.at( i )->isEnabledOnlyWhenEditable() )
64936492
continue;
64946493

6495-
registeredActions.at( i )->setEnabled( !registeredActions.at( i )->isEnabledOnlyWhenEditable() || vlayer->isEditable() );
64966494
mFeatureActionMenu->addAction( registeredActions.at( i ) );
64976495
if ( registeredActions.at( i ) == QgsGui::mapLayerActionRegistry()->defaultActionForLayer( vlayer ) )
64986496
{

src/app/qgsattributeactiondialog.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ class APP_EXPORT QgsAttributeActionDialog: public QWidget, private Ui::QgsAttrib
7171

7272
private:
7373
void insertRow( int row, const QgsAction &action );
74-
void insertRow( int row, QgsAction::ActionType type, const QString &name, const QString &actionText, const QString &iconPath, bool capture, const QString &shortTitle, const QSet<QString> &actionScopes, const QString &notificationMessage, const bool isEnabledOnlyWhenEditable=false );
74+
void insertRow( int row, QgsAction::ActionType type, const QString &name, const QString &actionText, const QString &iconPath, bool capture, const QString &shortTitle, const QSet<QString> &actionScopes, const QString &notificationMessage, const bool isEnabledOnlyWhenEditable = false );
7575
void swapRows( int row1, int row2 );
7676
QgsAction rowToAction( int row ) const;
7777

src/app/qgsattributetabledialog.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -850,11 +850,10 @@ void QgsAttributeTableDialog::editingToggled()
850850
QMenu *actionMenu = new QMenu();
851851
Q_FOREACH ( const QgsAction &action, actions )
852852
{
853-
if( mLayer->readOnly() && action.isEnabledOnlyWhenEditable() )
853+
if ( !mLayer->isEditable() && action.isEnabledOnlyWhenEditable() )
854854
continue;
855855

856856
QAction *qAction = actionMenu->addAction( action.icon(), action.shortTitle() );
857-
qAction->setEnabled( !action.isEnabledOnlyWhenEditable() || mLayer->isEditable() );
858857
qAction->setToolTip( action.name() );
859858
qAction->setData( QVariant::fromValue<QgsAction>( action ) );
860859
connect( qAction, &QAction::triggered, this, &QgsAttributeTableDialog::layerActionTriggered );

src/app/qgsfeatureaction.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -82,12 +82,11 @@ QgsAttributeDialog *QgsFeatureAction::newDialog( bool cloneFeature )
8282
if ( !action.runable() )
8383
continue;
8484

85-
if( mLayer->readOnly() && action.isEnabledOnlyWhenEditable() )
85+
if ( !mLayer->isEditable() && action.isEnabledOnlyWhenEditable() )
8686
continue;
8787

8888
QgsFeature &feat = const_cast<QgsFeature &>( *dialog->feature() );
8989
QgsFeatureAction *a = new QgsFeatureAction( action.name(), feat, mLayer, action.id(), -1, dialog );
90-
a->setEnabled( !action.isEnabledOnlyWhenEditable() || mLayer->isEditable() );
9190
dialog->addAction( a );
9291
connect( a, &QAction::triggered, a, &QgsFeatureAction::execute );
9392

src/app/qgsidentifyresultsdialog.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -511,7 +511,7 @@ void QgsIdentifyResultsDialog::addFeature( QgsVectorLayer *vlayer, const QgsFeat
511511
if ( !action.runable() )
512512
continue;
513513

514-
if( action.isEnabledOnlyWhenEditable() )
514+
if ( action.isEnabledOnlyWhenEditable() )
515515
continue;
516516

517517
QTreeWidgetItem *twi = new QTreeWidgetItem( QStringList() << QLatin1String( "" ) << action.name() );
@@ -524,7 +524,7 @@ void QgsIdentifyResultsDialog::addFeature( QgsVectorLayer *vlayer, const QgsFeat
524524
//add actions from QgsMapLayerActionRegistry
525525
for ( int i = 0; i < registeredActions.size(); i++ )
526526
{
527-
if( registeredActions.at( i )->isEnabledOnlyWhenEditable() )
527+
if ( registeredActions.at( i )->isEnabledOnlyWhenEditable() )
528528
continue;
529529

530530
QgsMapLayerAction *action = registeredActions.at( i );
@@ -1098,7 +1098,7 @@ void QgsIdentifyResultsDialog::contextMenuEvent( QContextMenuEvent *event )
10981098
if ( !action.runable() )
10991099
continue;
11001100

1101-
if( action.isEnabledOnlyWhenEditable() )
1101+
if ( action.isEnabledOnlyWhenEditable() )
11021102
continue;
11031103

11041104
QgsFeatureAction *a = new QgsFeatureAction( action.name(), mFeatures[ featIdx ], vlayer, action.id(), idx, this );
@@ -1122,7 +1122,7 @@ void QgsIdentifyResultsDialog::contextMenuEvent( QContextMenuEvent *event )
11221122
QList<QgsMapLayerAction *>::const_iterator actionIt;
11231123
for ( actionIt = registeredActions.begin(); actionIt != registeredActions.end(); ++actionIt )
11241124
{
1125-
if( ( *actionIt )->isEnabledOnlyWhenEditable() )
1125+
if ( ( *actionIt )->isEnabledOnlyWhenEditable() )
11261126
continue;
11271127

11281128
QgsIdentifyResultsDialogMapLayerAction *a = new QgsIdentifyResultsDialogMapLayerAction( ( *actionIt )->text(), this, ( *actionIt ), vlayer, &( mFeatures[ featIdx ] ) );

src/gui/attributetable/qgsattributetableview.cpp

+2-4
Original file line numberDiff line numberDiff line change
@@ -180,12 +180,11 @@ QWidget *QgsAttributeTableView::createActionWidget( QgsFeatureId fid )
180180
QList<QgsAction> actions = mFilterModel->layer()->actions()->actions( QStringLiteral( "Feature" ) );
181181
Q_FOREACH ( const QgsAction &action, actions )
182182
{
183-
if( mFilterModel->layer()->readOnly() && action.isEnabledOnlyWhenEditable() )
183+
if ( !mFilterModel->layer()->isEditable() && action.isEnabledOnlyWhenEditable() )
184184
continue;
185185

186186
QString actionTitle = !action.shortTitle().isEmpty() ? action.shortTitle() : action.icon().isNull() ? action.name() : QLatin1String( "" );
187187
QAction *act = new QAction( action.icon(), actionTitle, container );
188-
act->setEnabled( !action.isEnabledOnlyWhenEditable() || mFilterModel->layer()->isEditable() );
189188
act->setToolTip( action.name() );
190189
act->setData( "user_action" );
191190
act->setProperty( "fid", fid );
@@ -202,11 +201,10 @@ QWidget *QgsAttributeTableView::createActionWidget( QgsFeatureId fid )
202201
QgsGui::mapLayerActionRegistry()->mapLayerActions( mFilterModel->layer(),
203202
QgsMapLayerAction::SingleFeature ) )
204203
{
205-
if( mFilterModel->layer()->readOnly() && mapLayerAction->isEnabledOnlyWhenEditable() )
204+
if ( !mFilterModel->layer()->isEditable() && mapLayerAction->isEnabledOnlyWhenEditable() )
206205
continue;
207206

208207
QAction *action = new QAction( mapLayerAction->icon(), mapLayerAction->text(), container );
209-
action->setEnabled( !mapLayerAction->isEnabledOnlyWhenEditable() || mFilterModel->layer()->isEditable() );
210208
action->setData( "map_layer_action" );
211209
action->setToolTip( mapLayerAction->text() );
212210
action->setProperty( "fid", fid );

src/gui/attributetable/qgsdualview.cpp

+6-8
Original file line numberDiff line numberDiff line change
@@ -571,16 +571,15 @@ void QgsDualView::viewWillShowContextMenu( QMenu *menu, const QModelIndex &atInd
571571
if ( !action.runable() )
572572
continue;
573573

574-
if( vl->readOnly() && action.isEnabledOnlyWhenEditable() )
574+
if ( !vl->isEditable() && action.isEnabledOnlyWhenEditable() )
575575
continue;
576576

577577
QgsAttributeTableAction *a = new QgsAttributeTableAction( action.name(), this, action.id(), sourceIndex );
578578
#if QT_VERSION < QT_VERSION_CHECK(5, 6, 0)
579-
QAction *ma = menu->addAction( action.name(), a, SLOT( execute() ) );
579+
menu->addAction( action.name(), a, SLOT( execute() ) );
580580
#else
581-
QAction *ma = menu->addAction( action.name(), a, &QgsAttributeTableAction::execute );
581+
menu->addAction( action.name(), a, &QgsAttributeTableAction::execute );
582582
#endif
583-
ma->setEnabled( !action.isEnabledOnlyWhenEditable() || vl->isEditable() );
584583
}
585584
}
586585

@@ -593,16 +592,15 @@ void QgsDualView::viewWillShowContextMenu( QMenu *menu, const QModelIndex &atInd
593592

594593
Q_FOREACH ( QgsMapLayerAction *action, registeredActions )
595594
{
596-
if( vl->readOnly() && action->isEnabledOnlyWhenEditable() )
595+
if ( !vl->isEditable() && action->isEnabledOnlyWhenEditable() )
597596
continue;
598597

599598
QgsAttributeTableMapLayerAction *a = new QgsAttributeTableMapLayerAction( action->text(), this, action, sourceIndex );
600599
#if QT_VERSION < QT_VERSION_CHECK(5, 6, 0)
601-
QAction *ma = menu->addAction( action->text(), a, SLOT( execut() ) );
600+
menu->addAction( action->text(), a, SLOT( execut() ) );
602601
#else
603-
QAction *ma = menu->addAction( action->text(), a, &QgsAttributeTableMapLayerAction::execute );
602+
menu->addAction( action->text(), a, &QgsAttributeTableMapLayerAction::execute );
604603
#endif
605-
ma->setEnabled( !action->isEnabledOnlyWhenEditable() || vl->isEditable() );
606604
}
607605
}
608606

src/gui/qgsactionmenu.cpp

+5-7
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ void QgsActionMenu::setFeature( const QgsFeature &feature )
6868

6969
void QgsActionMenu::setMode( const QgsAttributeForm::Mode mode )
7070
{
71-
mMode=mode;
71+
mMode = mode;
7272
reloadActions();
7373
}
7474

@@ -116,17 +116,16 @@ void QgsActionMenu::reloadActions()
116116

117117
Q_FOREACH ( const QgsAction &action, mActions )
118118
{
119-
if( mLayer->readOnly() && action.isEnabledOnlyWhenEditable() )
119+
if ( !mLayer->isEditable() && action.isEnabledOnlyWhenEditable() )
120120
continue;
121121

122-
if( action.isEnabledOnlyWhenEditable() && mMode==QgsAttributeForm::AddFeatureMode )
122+
if ( action.isEnabledOnlyWhenEditable() && ( mMode==QgsAttributeForm::AddFeatureMode || mMode==QgsAttributeForm::IdentifyMode ) )
123123
continue;
124124

125125
QgsAction act( action );
126126
act.setExpressionContextScope( mExpressionContextScope );
127127

128128
QAction *qAction = new QAction( action.icon(), action.name(), this );
129-
qAction->setEnabled( !action.isEnabledOnlyWhenEditable() || mLayer->isEditable() );
130129
qAction->setData( QVariant::fromValue<ActionData>( ActionData( act, mFeatureId, mLayer ) ) );
131130
qAction->setIcon( action.icon() );
132131

@@ -155,14 +154,13 @@ void QgsActionMenu::reloadActions()
155154
{
156155
QgsMapLayerAction *qaction = mapLayerActions.at( i );
157156

158-
if( mLayer->readOnly() && qaction->isEnabledOnlyWhenEditable() )
157+
if ( !mLayer->isEditable() && qaction->isEnabledOnlyWhenEditable() )
159158
continue;
160159

161-
if( qaction->isEnabledOnlyWhenEditable() && mMode==QgsAttributeForm::AddFeatureMode )
160+
if ( qaction->isEnabledOnlyWhenEditable() && ( mMode==QgsAttributeForm::AddFeatureMode || mMode==QgsAttributeForm::IdentifyMode ) )
162161
continue;
163162

164163
QAction *qAction = new QAction( qaction->icon(), qaction->text(), this );
165-
qAction->setEnabled( !qaction->isEnabledOnlyWhenEditable() || mLayer->isEditable() );
166164
qAction->setData( QVariant::fromValue<ActionData>( ActionData( qaction, mFeatureId, mLayer ) ) );
167165
addAction( qAction );
168166
connect( qAction, &QAction::triggered, this, &QgsActionMenu::triggerAction );

src/gui/qgsattributeform.h

+1
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ class GUI_EXPORT QgsAttributeForm : public QWidget
5555
MultiEditMode, //!< Multi edit mode, for editing fields of multiple features at once
5656
SearchMode, //!< Form values are used for searching/filtering the layer
5757
AggregateSearchMode, //!< Form is in aggregate search mode, show each widget in this mode \since QGIS 3.0
58+
IdentifyMode //!< Identify the feature \since QGIS 3.0
5859
};
5960

6061
//! Filter types

src/gui/qgsidentifymenu.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,7 @@ void QgsIdentifyMenu::addVectorLayer( QgsVectorLayer *layer, const QList<QgsMapT
260260
if ( !createMenu && mShowFeatureActions )
261261
{
262262
QgsActionMenu *featureActionMenu = new QgsActionMenu( layer, results[0].mFeature, QStringLiteral( "Feature" ), this );
263+
featureActionMenu->setMode( QgsAttributeForm::IdentifyMode );
263264
createMenu = !featureActionMenu->actions().isEmpty();
264265
delete featureActionMenu;
265266
}

0 commit comments

Comments
 (0)