From 809d29c8d8e2af5c86a58a8dc0f86ecf6503a938 Mon Sep 17 00:00:00 2001 From: Don Gagne Date: Wed, 17 Feb 2016 17:01:32 -0800 Subject: [PATCH] In progress indicator for vehicle sync --- src/MissionManager/MissionController.cc | 7 +++++ src/MissionManager/MissionController.h | 3 ++ src/QmlControls/DropButton.qml | 41 ++++++++----------------- src/QmlControls/RoundButton.qml | 18 +++++++++++ 4 files changed, 41 insertions(+), 28 deletions(-) diff --git a/src/MissionManager/MissionController.cc b/src/MissionManager/MissionController.cc index 7ca188d19..dddcfdd0e 100644 --- a/src/MissionManager/MissionController.cc +++ b/src/MissionManager/MissionController.cc @@ -762,6 +762,7 @@ void MissionController::_autoSyncSend(void) void MissionController::_inProgressChanged(bool inProgress) { + emit syncInProgressChanged(inProgress); if (!inProgress && _queuedSend) { _autoSyncSend(); } @@ -891,3 +892,9 @@ QStringList MissionController::getMobileMissionFiles(void) return missionFiles; } + +bool MissionController::syncInProgress(void) +{ + qDebug() << _activeVehicle->missionManager()->inProgress(); + return _activeVehicle->missionManager()->inProgress(); +} diff --git a/src/MissionManager/MissionController.h b/src/MissionManager/MissionController.h index 5d73c480e..dcee758f7 100644 --- a/src/MissionManager/MissionController.h +++ b/src/MissionManager/MissionController.h @@ -43,6 +43,7 @@ public: Q_PROPERTY(QmlObjectListModel* missionItems READ missionItems NOTIFY missionItemsChanged) Q_PROPERTY(QmlObjectListModel* waypointLines READ waypointLines NOTIFY waypointLinesChanged) Q_PROPERTY(bool autoSync READ autoSync WRITE setAutoSync NOTIFY autoSyncChanged) + Q_PROPERTY(bool syncInProgress READ syncInProgress NOTIFY syncInProgressChanged) Q_INVOKABLE void start(bool editMode); Q_INVOKABLE void getMissionItems(void); @@ -64,12 +65,14 @@ public: QmlObjectListModel* waypointLines(void) { return &_waypointLines; } bool autoSync(void) { return _autoSync; } void setAutoSync(bool autoSync); + bool syncInProgress(void); signals: void missionItemsChanged(void); void waypointLinesChanged(void); void autoSyncChanged(bool autoSync); void newItemsFromVehicle(void); + void syncInProgressChanged(bool syncInProgress); private slots: void _newMissionItemsAvailableFromVehicle(); diff --git a/src/QmlControls/DropButton.qml b/src/QmlControls/DropButton.qml index 281ff7ed8..03b7a12dd 100644 --- a/src/QmlControls/DropButton.qml +++ b/src/QmlControls/DropButton.qml @@ -9,7 +9,8 @@ Item { id: _root signal clicked() - property alias buttonImage: button.source + property alias buttonImage: roundButton.buttonImage + property alias rotateImage: roundButton.rotateImage property real radius: ScreenTools.defaultFontPixelHeight * 1.5 property int dropDirection: dropDown property alias dropDownComponent: dropDownLoader.sourceComponent @@ -38,7 +39,7 @@ Item { // Set up ExclusiveGroup support. We use the checked property to drive visibility of drop down. - property bool checked: false + property alias checked: roundButton.checked property ExclusiveGroup exclusiveGroup: null onExclusiveGroupChanged: { @@ -77,7 +78,7 @@ Item { dropItemHolderRect.y = 0 } else { - dropDownItem.y = button.height + _dropMargin + dropDownItem.y = roundButton.height + _dropMargin dropItemHolderRect.y = _arrowPointHeight } @@ -87,7 +88,7 @@ Item { dropDownItem.x = Math.min(dropDownItem.x + dropDownItem.width, _viewportMaxRight) - dropDownItem.width // Arrow points - arrowCanvas.arrowPoint.x = (button.x + radius) - dropDownItem.x + arrowCanvas.arrowPoint.x = (roundButton.x + radius) - dropDownItem.x if (dropDirection == dropUp) { arrowCanvas.arrowPoint.y = dropDownItem.height arrowCanvas.arrowBase1.x = arrowCanvas.arrowPoint.x - (_arrowBaseWidth / 2) @@ -113,7 +114,7 @@ Item { dropItemHolderRect.x = 0 } else { - dropDownItem.x = button.width + _dropMargin + dropDownItem.x = roundButton.width + _dropMargin dropItemHolderRect.x = _arrowPointHeight } @@ -123,7 +124,7 @@ Item { dropDownItem.y = Math.min(dropDownItem.y + dropDownItem.height, _viewportMaxBottom) - dropDownItem.height // Arrow points - arrowCanvas.arrowPoint.y = (button.y + radius) - dropDownItem.y + arrowCanvas.arrowPoint.y = (roundButton.y + radius) - dropDownItem.y if (dropDirection == dropLeft) { arrowCanvas.arrowPoint.x = dropDownItem.width arrowCanvas.arrowBase1.x = arrowCanvas.arrowPoint.x - _arrowPointHeight @@ -155,29 +156,13 @@ Item { } } - // Button - Rectangle { - anchors.fill: parent - radius: width / 2 - border.width: ScreenTools.defaultFontPixelHeight * 0.0625 - border.color: "white" - color: checked ? qgcPal.mapButtonHighlight : qgcPal.mapButton + RoundButton { + id: roundButton + radius: parent.width / 2 - Image { - id: button - anchors.fill: parent - fillMode: Image.PreserveAspectFit - mipmap: true - smooth: true - - MouseArea { - anchors.fill: parent - onClicked: { - checked = !checked - _root.clicked() - } - } - } // Image - button + onClicked: { + _root.clicked() + } } Item { diff --git a/src/QmlControls/RoundButton.qml b/src/QmlControls/RoundButton.qml index c2a4867b1..ad1d2e200 100644 --- a/src/QmlControls/RoundButton.qml +++ b/src/QmlControls/RoundButton.qml @@ -11,6 +11,7 @@ Item { signal clicked() property alias buttonImage: button.source property real radius: ScreenTools.defaultFontPixelHeight * 1.5 + property bool rotateImage: false width: radius * 2 height: radius * 2 @@ -26,6 +27,15 @@ Item { } } + onRotateImageChanged: { + if (rotateImage) { + imageRotation.running = true + } else { + imageRotation.running = false + button.rotation = 0 + } + } + Rectangle { anchors.fill: parent radius: width / 2 @@ -39,6 +49,14 @@ Item { fillMode: Image.PreserveAspectFit mipmap: true smooth: true + RotationAnimation on rotation { + id: imageRotation + loops: Animation.Infinite + from: 0 + to: 360 + duration: 500 + running: false + } MouseArea { anchors.fill: parent -- 2.22.0