QWidget* QgsAttributeTableView::createActionWidget( QgsFeatureId fid ) { QgsAttributeTableConfig attributeTableConfig = mFilterModel->layer()->attributeTableConfig(); QgsActionManager* actions = mFilterModel->layer()->actions(); QToolButton* toolButton = nullptr; QWidget* container = nullptr; if ( attributeTableConfig.actionWidgetStyle() == QgsAttributeTableConfig::DropDown ) { toolButton = new QToolButton( this ); toolButton->setPopupMode( QToolButton::MenuButtonPopup ); container = toolButton; } else { container = new QWidget( this ); container->setLayout( new QHBoxLayout() ); container->layout()->setMargin( 0 ); } for ( int i = 0; i < actions->size(); ++i ) { const QgsAction& action = actions->at( i ); if ( !action.showInAttributeTable() ) continue; QAction* act = new QAction( action.icon(), action.shortTitle().isEmpty() ? action.name() : action.shortTitle(), toolButton ); act->setToolTip( action.name() ); act->setData( i ); act->setProperty( "fid", fid ); connect( act, SIGNAL( triggered( bool ) ), this, SLOT( actionTriggered() ) ); if ( attributeTableConfig.actionWidgetStyle() == QgsAttributeTableConfig::DropDown ) { toolButton->addAction( act ); if ( actions->defaultAction() == i ) toolButton->setDefaultAction( act ); container = toolButton; } else { QToolButton* btn = new QToolButton; btn->setDefaultAction( act ); container->layout()->addWidget( btn ); } } if ( toolButton && !toolButton->actions().isEmpty() && actions->defaultAction() == -1 ) toolButton->setDefaultAction( toolButton->actions().first() ); return container; }
void QgsAttributeActionDialog::init( const QgsActionManager& actions, const QgsAttributeTableConfig& attributeTableConfig ) { // Start from a fresh slate. mAttributeActionTable->setRowCount( 0 ); int i = 0; // Populate with our actions. Q_FOREACH ( const QgsAction& action, actions.listActions() ) { insertRow( i++, action ); } updateButtons(); QgsAttributeTableConfig::ColumnConfig visibleActionWidgetConfig = QgsAttributeTableConfig::ColumnConfig(); visibleActionWidgetConfig.type = QgsAttributeTableConfig::Action; visibleActionWidgetConfig.hidden = false; mShowInAttributeTable->setChecked( attributeTableConfig.actionWidgetVisible() ); mAttributeTableWidgetType->setCurrentIndex( attributeTableConfig.actionWidgetStyle() ); }
QWidget *QgsAttributeTableView::createActionWidget( QgsFeatureId fid ) { QgsAttributeTableConfig attributeTableConfig = mFilterModel->layer()->attributeTableConfig(); QToolButton *toolButton = nullptr; QWidget *container = nullptr; if ( attributeTableConfig.actionWidgetStyle() == QgsAttributeTableConfig::DropDown ) { toolButton = new QToolButton(); toolButton->setToolButtonStyle( Qt::ToolButtonTextBesideIcon ); toolButton->setPopupMode( QToolButton::MenuButtonPopup ); container = toolButton; } else { container = new QWidget(); container->setLayout( new QHBoxLayout() ); container->layout()->setMargin( 0 ); } QList< QAction * > actionList; QAction *defaultAction = nullptr; // first add user created layer actions QList<QgsAction> actions = mFilterModel->layer()->actions()->actions( QStringLiteral( "Feature" ) ); Q_FOREACH ( const QgsAction &action, actions ) { QString actionTitle = !action.shortTitle().isEmpty() ? action.shortTitle() : action.icon().isNull() ? action.name() : QLatin1String( "" ); QAction *act = new QAction( action.icon(), actionTitle, container ); act->setToolTip( action.name() ); act->setData( "user_action" ); act->setProperty( "fid", fid ); act->setProperty( "action_id", action.id() ); connect( act, &QAction::triggered, this, &QgsAttributeTableView::actionTriggered ); actionList << act; if ( mFilterModel->layer()->actions()->defaultAction( QStringLiteral( "AttributeTableRow" ) ).id() == action.id() ) defaultAction = act; }