diff --git a/python/gui/auto_generated/qgsmessagebaritem.sip.in b/python/gui/auto_generated/qgsmessagebaritem.sip.in index 22b6f5e122b..c49e19f1fce 100644 --- a/python/gui/auto_generated/qgsmessagebaritem.sip.in +++ b/python/gui/auto_generated/qgsmessagebaritem.sip.in @@ -82,6 +82,17 @@ returns the duration in second of the message QString getStyleSheet(); %Docstring returns the styleSheet +%End + + public slots: + + void dismiss(); +%Docstring +Dismisses the item, removing it from the message bar and deleting +it. Calling this on items which have not been added to a message bar +has no effect. + +.. versionadded:: 3.4 %End signals: diff --git a/src/gui/qgsmessagebar.cpp b/src/gui/qgsmessagebar.cpp index dfb25133fdf..1ab991236f8 100644 --- a/src/gui/qgsmessagebar.cpp +++ b/src/gui/qgsmessagebar.cpp @@ -267,6 +267,9 @@ void QgsMessageBar::showItem( QgsMessageBarItem *item ) void QgsMessageBar::pushItem( QgsMessageBarItem *item ) { resetCountdown(); + + item->mMessageBar = this; + // avoid duplicated widget popWidget( item ); showItem( item ); diff --git a/src/gui/qgsmessagebaritem.cpp b/src/gui/qgsmessagebaritem.cpp index 44a0ff1a8eb..44df4474259 100644 --- a/src/gui/qgsmessagebaritem.cpp +++ b/src/gui/qgsmessagebaritem.cpp @@ -269,6 +269,14 @@ QgsMessageBarItem *QgsMessageBarItem::setDuration( int duration ) return this; } +void QgsMessageBarItem::dismiss() +{ + if ( !mMessageBar ) + return; + + mMessageBar->popWidget( this ); +} + void QgsMessageBarItem::urlClicked( const QUrl &url ) { QFileInfo file( url.toLocalFile() ); diff --git a/src/gui/qgsmessagebaritem.h b/src/gui/qgsmessagebaritem.h index 3405bbc42e4..b7d238fc2df 100644 --- a/src/gui/qgsmessagebaritem.h +++ b/src/gui/qgsmessagebaritem.h @@ -27,6 +27,7 @@ class QTextBrowser; class QLabel; +class QgsMessageBar; /** * \ingroup gui @@ -91,6 +92,17 @@ class GUI_EXPORT QgsMessageBarItem : public QWidget //! returns the styleSheet QString getStyleSheet() { return mStyleSheet; } + public slots: + + /** + * Dismisses the item, removing it from the message bar and deleting + * it. Calling this on items which have not been added to a message bar + * has no effect. + * + * \since QGIS 3.4 + */ + void dismiss(); + signals: //! emitted when the message level has changed void styleChanged( const QString &styleSheet ); @@ -112,6 +124,9 @@ class GUI_EXPORT QgsMessageBarItem : public QWidget QLabel *mLblIcon = nullptr; QString mStyleSheet; QTextBrowser *mTextBrowser = nullptr; + QgsMessageBar *mMessageBar = nullptr; + + friend class QgsMessageBar; }; #endif // qgsmessagebaritem_H