Skip to content

Commit

Permalink
When a successful gps connection occurs, clear away any outdated exis…
Browse files Browse the repository at this point in the history
…ting

"failed to connect" message bar warnings

And show success message in message bar, instead of status bar
  • Loading branch information
nyalldawson committed Nov 4, 2022
1 parent 0ba80bd commit 40440c3
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 4 deletions.
33 changes: 29 additions & 4 deletions src/app/gps/qgsappgpsconnection.cpp
Expand Up @@ -193,7 +193,7 @@ void QgsAppGpsConnection::onConnected( QgsGpsConnection *conn )

emit connected();
emit statusChanged( Qgis::GpsConnectionStatus::Connected );
showStatusBarMessage( tr( "Connected to GPS device." ) );
showMessage( Qgis::MessageLevel::Success, tr( "Connected to GPS device." ) );
}

void QgsAppGpsConnection::showStatusBarMessage( const QString &msg )
Expand All @@ -203,12 +203,37 @@ void QgsAppGpsConnection::showStatusBarMessage( const QString &msg )

void QgsAppGpsConnection::showGpsConnectFailureWarning( const QString &message )
{
QgsMessageBarItem *item = QgisApp::instance()->messageBar()->createMessage( QString(), message );
if ( mConnectionMessageItem )
{
// delete old connection message item, so that we don't stack up multiple outdated connection
// related messages
QgisApp::instance()->messageBar()->popWidget( mConnectionMessageItem );
mConnectionMessageItem = nullptr;
}

QgisApp::instance()->statusBarIface()->clearMessage();
mConnectionMessageItem = QgisApp::instance()->messageBar()->createMessage( QString(), message );
QPushButton *configureButton = new QPushButton( tr( "Configure Device…" ) );
connect( configureButton, &QPushButton::clicked, configureButton, [ = ]
{
QgisApp::instance()->showOptionsDialog( QgisApp::instance(), QStringLiteral( "mGpsOptions" ) );
} );
item->layout()->addWidget( configureButton );
QgisApp::instance()->messageBar()->pushWidget( item, Qgis::MessageLevel::Critical );
mConnectionMessageItem->layout()->addWidget( configureButton );
QgisApp::instance()->messageBar()->pushWidget( mConnectionMessageItem, Qgis::MessageLevel::Critical );
}

void QgsAppGpsConnection::showMessage( Qgis::MessageLevel level, const QString &message )
{
if ( mConnectionMessageItem )
{
// delete old connection message item, so that we don't stack up multiple outdated connection
// related messages
QgisApp::instance()->messageBar()->popWidget( mConnectionMessageItem );
mConnectionMessageItem = nullptr;
}

QgisApp::instance()->statusBarIface()->clearMessage();

mConnectionMessageItem = QgisApp::instance()->messageBar()->createMessage( QString(), message );
QgisApp::instance()->messageBar()->pushWidget( mConnectionMessageItem, level, QgsMessageBar::defaultMessageTimeout( level ) );
}
4 changes: 4 additions & 0 deletions src/app/gps/qgsappgpsconnection.h
Expand Up @@ -19,10 +19,12 @@
#include "qgis.h"

#include <QObject>
#include <QPointer>

class QgsGpsConnection;
class QgsGpsInformation;
class QgsPoint;
class QgsMessageBarItem;

/**
* Manages a single "canonical" GPS connection for use in the QGIS app, eg for displaying GPS
Expand Down Expand Up @@ -141,8 +143,10 @@ class APP_EXPORT QgsAppGpsConnection : public QObject
void showStatusBarMessage( const QString &msg );

void showGpsConnectFailureWarning( const QString &message );
void showMessage( Qgis::MessageLevel level, const QString &message );

QgsGpsConnection *mConnection = nullptr;
QPointer< QgsMessageBarItem > mConnectionMessageItem;
};


Expand Down

0 comments on commit 40440c3

Please sign in to comment.