From 3cb8ec89b6fe26fe167bd00a40a2f12863ba6128 Mon Sep 17 00:00:00 2001 From: Don Gagne Date: Sun, 23 Aug 2015 15:02:53 -0700 Subject: [PATCH] Add support for queued modeless messages --- src/ui/toolbar/MainToolBar.cc | 41 ++++++++++++++++++++++++++++++++++ src/ui/toolbar/MainToolBar.h | 8 ++++++- src/ui/toolbar/MainToolBar.qml | 27 +++++++++++++--------- 3 files changed, 65 insertions(+), 11 deletions(-) diff --git a/src/ui/toolbar/MainToolBar.cc b/src/ui/toolbar/MainToolBar.cc index 8048875cf..13eb84979 100644 --- a/src/ui/toolbar/MainToolBar.cc +++ b/src/ui/toolbar/MainToolBar.cc @@ -56,6 +56,7 @@ MainToolBar::MainToolBar(QWidget* parent) , _telemetryRRSSI(0) , _telemetryLRSSI(0) , _rollDownMessages(0) + , _toolbarMessageVisible(false) { setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); setObjectName("MainToolBar"); @@ -404,3 +405,43 @@ void MainToolBar::_heightChanged(double height) setMinimumHeight(height); setMaximumHeight(height); } + +void MainToolBar::showToolBarMessage(const QString& message) +{ + _toolbarMessageQueueMutex.lock(); + + if (_toolbarMessageQueue.count() == 0 && !_toolbarMessageVisible) { + QTimer::singleShot(500, this, &MainToolBar::_delayedShowToolBarMessage); + } + + _toolbarMessageQueue += message; + + _toolbarMessageQueueMutex.unlock(); +} + +void MainToolBar::_delayedShowToolBarMessage(void) +{ + QString messages; + + if (!_toolbarMessageVisible) { + _toolbarMessageQueueMutex.lock(); + + foreach (QString message, _toolbarMessageQueue) { + messages += message + "\n"; + } + _toolbarMessageQueue.clear(); + + _toolbarMessageQueueMutex.unlock(); + + if (!messages.isEmpty()) { + _toolbarMessageVisible = true; + emit showMessage(messages); + } + } +} + +void MainToolBar::onToolBarMessageClosed(void) +{ + _toolbarMessageVisible = false; + _delayedShowToolBarMessage(); +} \ No newline at end of file diff --git a/src/ui/toolbar/MainToolBar.h b/src/ui/toolbar/MainToolBar.h index a3f4a1575..c6e2b4ce2 100644 --- a/src/ui/toolbar/MainToolBar.h +++ b/src/ui/toolbar/MainToolBar.h @@ -68,6 +68,7 @@ public: Q_INVOKABLE void onConnect(QString conf); Q_INVOKABLE void onDisconnect(QString conf); Q_INVOKABLE void onEnterMessageArea(int x, int y); + Q_INVOKABLE void onToolBarMessageClosed(void); Q_PROPERTY(double height MEMBER _toolbarHeight NOTIFY heightChanged) Q_PROPERTY(ViewType_t currentView MEMBER _currentView NOTIFY currentViewChanged) @@ -91,7 +92,7 @@ public: int telemetryLRSSI () { return _telemetryLRSSI; } int connectionCount () { return _connectionCount; } - void showToolBarMessage(const QString& message) { emit showMessage(message); } + void showToolBarMessage(const QString& message); signals: void connectionCountChanged (int count); @@ -123,6 +124,7 @@ private slots: void _remoteControlRSSIChanged (uint8_t rssi); void _telemetryChanged (LinkInterface* link, unsigned rxerrors, unsigned fixed, unsigned rssi, unsigned remrssi, unsigned txbuf, unsigned noise, unsigned remnoise); void _heightChanged (double height); + void _delayedShowToolBarMessage (void); private: void _updateConnection (LinkInterface *disconnectedLink = NULL); @@ -148,6 +150,10 @@ private: double _toolbarHeight; UASMessageViewRollDown* _rollDownMessages; + + bool _toolbarMessageVisible; + QStringList _toolbarMessageQueue; + QMutex _toolbarMessageQueueMutex; }; #endif // MAINTOOLBAR_H diff --git a/src/ui/toolbar/MainToolBar.qml b/src/ui/toolbar/MainToolBar.qml index 1b0211fef..9bca0b274 100644 --- a/src/ui/toolbar/MainToolBar.qml +++ b/src/ui/toolbar/MainToolBar.qml @@ -68,7 +68,11 @@ Rectangle { onShowMessage: { toolBarMessage.text = message - mainToolBar.height = toolBarHeight + toolBarMessage.contentHeight + verticalMargins + if (toolBarMessage.contentHeight > toolBarMessageCloseButton.height) { + mainToolBar.height = toolBarHeight + toolBarMessage.contentHeight + (verticalMargins * 2) + } else { + mainToolBar.height = toolBarHeight + toolBarMessageCloseButton.height + (verticalMargins * 2) + } toolBarMessageArea.visible = true } } @@ -771,14 +775,17 @@ Rectangle { // Toolbar message area Rectangle { - id: toolBarMessageArea - anchors.margins: horizontalMargins - anchors.top: progressBar.bottom - anchors.bottom: parent.bottom - anchors.left: parent.left - anchors.right: parent.right - color: qgcPal.windowShadeDark - visible: false + id: toolBarMessageArea + anchors.leftMargin: horizontalMargins + anchors.rightMargin: horizontalMargins + anchors.topMargin: verticalMargins + anchors.bottomMargin: verticalMargins + anchors.top: progressBar.bottom + anchors.bottom: parent.bottom + anchors.left: parent.left + anchors.right: parent.right + color: qgcPal.windowShadeDark + visible: false QGCLabel { id: toolBarMessage @@ -790,7 +797,6 @@ Rectangle { QGCButton { id: toolBarMessageCloseButton anchors.rightMargin: horizontalMargins - anchors.topMargin: verticalMargins anchors.top: parent.top anchors.right: parent.right primary: true @@ -799,6 +805,7 @@ Rectangle { onClicked: { parent.visible = false mainToolBar.height = toolBarHeight + mainToolBar.onToolBarMessageClosed() } } } -- 2.22.0