25#include <QDesktopServices>
29#include <QTextBrowser>
31#include "moc_qgsmessagebaritem.cpp"
59 , mUserIcon( QIcon() )
70 , mUserIcon( QIcon() )
76void QgsMessageBarItem::writeContent()
83 mLayout =
new QHBoxLayout(
this );
84 mLayout->setContentsMargins( 0, 0, 0, 0 );
85 mTextBrowser =
nullptr;
92 mLblIcon =
new QLabel(
this );
93 mLayout->addWidget( mLblIcon );
96 if ( !mUserIcon.isNull() )
102 QString msgIcon( QStringLiteral(
"/mIconInfo.svg" ) );
106 msgIcon = QStringLiteral(
"/mIconCritical.svg" );
109 msgIcon = QStringLiteral(
"/mIconWarning.svg" );
112 msgIcon = QStringLiteral(
"/mIconSuccess.svg" );
119 const int iconSize = std::max( 24.0, fontMetrics().height() * 1.2 );
120 mLblIcon->setPixmap(
icon.pixmap( iconSize ) );
124 QString contentStyleSheet;
127 mStyleSheet = QStringLiteral(
"QgsMessageBar { background-color: #dff0d8; border: 1px solid #8e998a; } "
128 "QLabel,QTextEdit { color: black; } " );
129 contentStyleSheet = QStringLiteral(
"<style> a, a:visited, a:hover { color:#268300; } </style>" );
133 mStyleSheet = QStringLiteral(
"QgsMessageBar { background-color: #d65253; border: 1px solid #9b3d3d; } "
134 "QLabel,QTextEdit { color: white; } " );
135 contentStyleSheet = QStringLiteral(
"<style>a, a:visited, a:hover { color:#4e0001; }</style>" );
139 mStyleSheet = QStringLiteral(
"QgsMessageBar { background-color: #ffc800; border: 1px solid #e0aa00; } "
140 "QLabel,QTextEdit { color: black; } " );
141 contentStyleSheet = QStringLiteral(
"<style>a, a:visited, a:hover { color:#945a00; }</style>" );
145 mStyleSheet = QStringLiteral(
"QgsMessageBar { background-color: #e7f5fe; border: 1px solid #b9cfe4; } "
146 "QLabel,QTextEdit { color: #2554a1; } " );
147 contentStyleSheet = QStringLiteral(
"<style>a, a:visited, a:hover { color:#3bb2fe; }</style>" );
149 mStyleSheet += QLatin1String(
"QLabel#mItemCount { font-style: italic; }" );
152 if ( mTitle.isEmpty() && mText.isEmpty() )
157 mTextBrowser =
nullptr;
164 mTextBrowser =
new QTextBrowser(
this );
165 mTextBrowser->setObjectName( QStringLiteral(
"textEdit" ) );
166 mTextBrowser->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Maximum );
167 mTextBrowser->setReadOnly(
true );
168 mTextBrowser->setOpenLinks(
false );
169 connect( mTextBrowser, &QTextBrowser::anchorClicked,
this, &QgsMessageBarItem::urlClicked );
171 mTextBrowser->setFrameShape( QFrame::NoFrame );
174 mTextBrowser->setStyleSheet(
"QTextEdit { background-color: rgba(0,0,0,0); margin-top: 0.25em; max-height: 1.75em; min-height: 1.75em; } "
175 "QScrollBar { background-color: rgba(0,0,0,0); } "
176 "QScrollBar::add-page,QScrollBar::sub-page,QScrollBar::handle { background-color: rgba(0,0,0,0); color: rgba(0,0,0,0); } "
177 "QScrollBar::up-arrow,QScrollBar::down-arrow { color: rgb(0,0,0); } " );
178 mLayout->addWidget( mTextBrowser );
180 QString content = mText;
181 if ( !mTitle.isEmpty() )
184 QString t = mTitle.trimmed();
185 if ( !content.isEmpty() && !t.endsWith(
':' ) && !t.endsWith( QLatin1String(
": " ) ) )
186 t += QLatin1String(
": " );
187 content.prepend( QStringLiteral(
"<b>" ) + t +
" </b>" );
189 content.prepend( contentStyleSheet );
190 mTextBrowser->setText( content );
196 QLayoutItem *item = mLayout->itemAt( 2 );
197 if ( !item || item->widget() != mWidget )
199 mLayout->addWidget( mWidget );
230 if (
level != mLevel )
249 QLayoutItem *item =
nullptr;
250 item = mLayout->itemAt( 2 );
251 if ( item->widget() == mWidget )
253 delete item->widget();
289 mMessageBar->popWidget(
this );
292void QgsMessageBarItem::urlClicked(
const QUrl &url )
294 const QFileInfo file( url.toLocalFile() );
295 if ( file.exists() && !file.isDir() )
298 QDesktopServices::openUrl( url );
MessageLevel
Level for messages This will be used both for message log and message bar in application.
@ Warning
Warning message.
@ Critical
Critical/error message.
@ Info
Information message.
@ Success
Used for reporting a successful operation.
static QIcon getThemeIcon(const QString &name, const QColor &fillColor=QColor(), const QColor &strokeColor=QColor())
Helper to get a theme icon.
static QgsNative * nativePlatformInterface()
Returns the global native interface, which offers abstraction to the host OS's underlying public inte...
void styleChanged(const QString &styleSheet)
Emitted when the item's message level has changed and the message bar style will need to be updated a...
QIcon icon() const
Returns the icon for the message.
QgsMessageBarItem * setLevel(Qgis::MessageLevel level)
Sets the message level for the item, which controls how the message bar is styled when the item is di...
int duration() const
Returns the duration (in seconds) of the message.
QgsMessageBarItem * setText(const QString &text)
Sets the message text to show in the item.
QgsMessageBarItem * setIcon(const QIcon &icon)
Sets the icon associated with the message.
QString text() const
Returns the text for the message.
QWidget * widget() const
Returns the widget for the message.
QgsMessageBarItem(const QString &text, Qgis::MessageLevel level=Qgis::MessageLevel::Info, int duration=0, QWidget *parent=nullptr)
Constructor for QgsMessageBarItem, containing a message with the specified text to be displayed on th...
QString title() const
Returns the title for the message.
QgsMessageBarItem * setTitle(const QString &title)
Sets the title for in the item.
Qgis::MessageLevel level() const
Returns the message level for the message.
QgsMessageBarItem * setDuration(int duration)
Sets the duration (in seconds) to show the message for.
QgsMessageBarItem * setWidget(QWidget *widget)
Sets a custom widget to show in the item.
void dismiss()
Dismisses the item, removing it from the message bar and deleting it.
static int defaultMessageTimeout(Qgis::MessageLevel level=Qgis::MessageLevel::NoLevel)
Returns the default timeout in seconds for timed messages of the specified level.
QSize iconSize(bool dockableToolbar)
Returns the user-preferred size of a window's toolbar icons.