Allow message bar items to be dismissed from QgsMessageBarItem

This commit is contained in:
Nyall Dawson 2018-10-25 08:31:24 +10:00
parent 0a02432b0c
commit 124f738188
4 changed files with 37 additions and 0 deletions

View File

@ -82,6 +82,17 @@ returns the duration in second of the message
QString getStyleSheet(); QString getStyleSheet();
%Docstring %Docstring
returns the styleSheet 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 %End
signals: signals:

View File

@ -267,6 +267,9 @@ void QgsMessageBar::showItem( QgsMessageBarItem *item )
void QgsMessageBar::pushItem( QgsMessageBarItem *item ) void QgsMessageBar::pushItem( QgsMessageBarItem *item )
{ {
resetCountdown(); resetCountdown();
item->mMessageBar = this;
// avoid duplicated widget // avoid duplicated widget
popWidget( item ); popWidget( item );
showItem( item ); showItem( item );

View File

@ -269,6 +269,14 @@ QgsMessageBarItem *QgsMessageBarItem::setDuration( int duration )
return this; return this;
} }
void QgsMessageBarItem::dismiss()
{
if ( !mMessageBar )
return;
mMessageBar->popWidget( this );
}
void QgsMessageBarItem::urlClicked( const QUrl &url ) void QgsMessageBarItem::urlClicked( const QUrl &url )
{ {
QFileInfo file( url.toLocalFile() ); QFileInfo file( url.toLocalFile() );

View File

@ -27,6 +27,7 @@
class QTextBrowser; class QTextBrowser;
class QLabel; class QLabel;
class QgsMessageBar;
/** /**
* \ingroup gui * \ingroup gui
@ -91,6 +92,17 @@ class GUI_EXPORT QgsMessageBarItem : public QWidget
//! returns the styleSheet //! returns the styleSheet
QString getStyleSheet() { return mStyleSheet; } 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: signals:
//! emitted when the message level has changed //! emitted when the message level has changed
void styleChanged( const QString &styleSheet ); void styleChanged( const QString &styleSheet );
@ -112,6 +124,9 @@ class GUI_EXPORT QgsMessageBarItem : public QWidget
QLabel *mLblIcon = nullptr; QLabel *mLblIcon = nullptr;
QString mStyleSheet; QString mStyleSheet;
QTextBrowser *mTextBrowser = nullptr; QTextBrowser *mTextBrowser = nullptr;
QgsMessageBar *mMessageBar = nullptr;
friend class QgsMessageBar;
}; };
#endif // qgsmessagebaritem_H #endif // qgsmessagebaritem_H