23#include "moc_qgstoolbuttonaction.cpp"
26 : QWidgetAction( parent )
29 connect(
this, &QAction::changed,
this, &QgsToolButtonAction::updateButtons );
34 mAutoRaise = autoRaise;
36 const QList< QWidget * > widgets( createdWidgets() );
37 for ( QWidget *widget : std::as_const( widgets ) )
39 if (
auto *button = qobject_cast<QToolButton *>( widget ) )
41 button->setAutoRaise( autoRaise );
50 const QList< QWidget * > widgets( createdWidgets() );
51 for ( QWidget *widget : std::as_const( widgets ) )
53 if (
auto *button = qobject_cast<QToolButton *>( widget ) )
55 button->setPopupMode( mode );
62 mToolButtonStyle = style;
64 const QList< QWidget * > widgets( createdWidgets() );
65 for ( QWidget *widget : std::as_const( widgets ) )
67 if (
auto *button = qobject_cast<QToolButton *>( widget ) )
69 button->setToolButtonStyle( style );
78 const QList< QWidget * > widgets( createdWidgets() );
79 for ( QWidget *widget : std::as_const( widgets ) )
81 if (
auto *button = qobject_cast<QToolButton *>( widget ) )
83 button->setMenu( menu );
90 for ( QAction *action : std::as_const( actions ) )
92 mButtonActions.append( action );
95 const QList< QWidget * > widgets( createdWidgets() );
96 for ( QWidget *widget : std::as_const( widgets ) )
98 if (
auto *button = qobject_cast<QToolButton *>( widget ) )
100 button->addActions( actions );
112 mDefaultAction = action;
114 const QList< QWidget * > widgets( createdWidgets() );
115 for ( QWidget *widget : std::as_const( widgets ) )
117 if (
auto *button = qobject_cast<QToolButton *>( widget ) )
119 button->setDefaultAction( action );
126 return mDefaultAction;
131 QToolButton *button =
new QToolButton( parent );
132 button->setAutoRaise( mAutoRaise );
133 button->setPopupMode( mPopupMode );
134 button->setToolButtonStyle( mToolButtonStyle );
136 bool isInExtensionPopup =
false;
137 for ( QWidget *w = parent; w; w = w->parentWidget() )
139 if ( qobject_cast< QMenu * >( w ) )
141 isInExtensionPopup =
true;
146 if ( isInExtensionPopup )
148 button->setToolButtonStyle( Qt::ToolButtonStyle::ToolButtonTextBesideIcon );
152 button->setToolButtonStyle( mToolButtonStyle );
155 if ( QToolBar *toolBar = qobject_cast< QToolBar * >( parent ) )
157 button->setIconSize( toolBar->iconSize() );
158 connect( toolBar, &QToolBar::iconSizeChanged, button, &QToolButton::setIconSize );
160 if ( !isInExtensionPopup )
162 button->setToolButtonStyle( toolBar->toolButtonStyle() );
163 connect( toolBar, &QToolBar::toolButtonStyleChanged, button, &QToolButton::setToolButtonStyle );
169 button->setMenu( mMenu );
172 if ( !mButtonActions.isEmpty() )
174 button->addActions( mButtonActions );
177 if ( mDefaultAction )
179 button->setDefaultAction( mDefaultAction );
183 applyState( button );
184 connect( button, &QToolButton::clicked,
this, &QAction::trigger );
190void QgsToolButtonAction::applyState( QToolButton *button )
const
192 button->setEnabled( isEnabled() );
194 if ( !mDefaultAction )
196 button->setIcon( icon() );
197 button->setText( text() );
198 button->setToolTip( toolTip() );
202void QgsToolButtonAction::updateButtons()
204 const QList< QWidget * > widgets( createdWidgets() );
205 for ( QWidget *widget : std::as_const( widgets ) )
207 if (
auto *button = qobject_cast<QToolButton *>( widget ) )
209 applyState( button );