QGIS API Documentation 3.37.0-Master (fdefdf9c27f)
qgsstatusbar.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsstatusbar.cpp
3 ----------------
4 begin : May 2017
5 copyright : (C) 2017 by Nyall Dawson
6 email : nyall dot dawson at gmail dot com
7 ***************************************************************************/
8
9/***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 ***************************************************************************/
17
18#include "qgsstatusbar.h"
19#include <QLayout>
20#include <QLineEdit>
21#include <QPalette>
22#include <QTimer>
23#include <QEvent>
24#include <QStatusBar>
25
27 : QWidget( parent )
28{
29 mLayout = new QHBoxLayout();
30 mLayout->setContentsMargins( 2, 0, 2, 0 );
31 mLayout->setSpacing( 6 );
32
33 mLineEdit = new QLineEdit( QString() );
34 mLineEdit->setDisabled( true );
35 mLineEdit->setFrame( false );
36 mLineEdit->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Minimum );
37 QPalette pal = mLineEdit->palette();
38 pal.setColor( QPalette::Disabled, QPalette::Text, palette().color( QPalette::WindowText ) );
39 mLineEdit->setPalette( pal );
40 mLineEdit->setStyleSheet( QStringLiteral( "* { border: 0; background-color: rgba(0, 0, 0, 0); color: %1; }" ).arg( palette().color( QPalette::WindowText ).name() ) );
41 mLayout->addWidget( mLineEdit, 10 );
42 setLayout( mLayout );
43}
44
45void QgsStatusBar::addPermanentWidget( QWidget *widget, int stretch, Anchor anchor )
46{
47 switch ( anchor )
48 {
49 case AnchorLeft:
50 mLayout->insertWidget( 0, widget, stretch, Qt::AlignLeft );
51 break;
52
53 case AnchorRight:
54 mLayout->addWidget( widget, stretch, Qt::AlignLeft );
55 break;
56 }
57}
58
59void QgsStatusBar::removeWidget( QWidget *widget )
60{
61 mLayout->removeWidget( widget );
62 widget->hide();
63}
64
66{
67 return mLineEdit->text();
68}
69
70void QgsStatusBar::showMessage( const QString &text, int timeout )
71{
72 mLineEdit->setText( text );
73 mLineEdit->setCursorPosition( 0 );
74 if ( timeout > 0 )
75 {
76 if ( !mTempMessageTimer )
77 {
78 mTempMessageTimer = new QTimer( this );
79 connect( mTempMessageTimer, &QTimer::timeout, this, &QgsStatusBar::clearMessage );
80 mTempMessageTimer->setSingleShot( true );
81 }
82 mTempMessageTimer->start( timeout );
83 }
84 else if ( mTempMessageTimer )
85 {
86 delete mTempMessageTimer;
87 mTempMessageTimer = nullptr;
88 }
89}
90
92{
93 mLineEdit->setText( QString() );
94}
95
96void QgsStatusBar::setParentStatusBar( QStatusBar *statusBar )
97{
98 if ( mParentStatusBar )
99 QStatusBar::disconnect( mShowMessageConnection );
100
101 mParentStatusBar = statusBar;
102
103 if ( mParentStatusBar )
104 mShowMessageConnection = connect( mParentStatusBar, &QStatusBar::messageChanged, this, [this]( const QString & message ) { showMessage( message ); } );
105}
106
107void QgsStatusBar::changeEvent( QEvent *event )
108{
109 QWidget::changeEvent( event );
110
111 if ( event->type() == QEvent::FontChange )
112 {
113 mLineEdit->setFont( font() );
114 }
115}
Anchor
Placement anchor for widgets.
Definition: qgsstatusbar.h:53
@ AnchorLeft
Anchor widget to left of status bar.
Definition: qgsstatusbar.h:54
@ AnchorRight
Anchor widget to right of status bar.
Definition: qgsstatusbar.h:55
void clearMessage()
Removes any temporary message being shown.
void removeWidget(QWidget *widget)
Removes a widget from the status bar.
QgsStatusBar(QWidget *parent=nullptr)
Constructor for QgsStatusBar.
void changeEvent(QEvent *event) override
void addPermanentWidget(QWidget *widget, int stretch=0, Anchor anchor=AnchorRight)
Adds the given widget permanently to this status bar, reparenting the widget if it isn't already a ch...
QString currentMessage() const
Returns the current message shown in the status bar.
void setParentStatusBar(QStatusBar *statusBar)
Sets the parent status bar.
void showMessage(const QString &message, int timeout=0)
Displays the given message for the specified number of milli-seconds (timeout).