forked from DonLakeFlyer/qgroundcontrol
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add frame configuration page for ArduSub
- Loading branch information
Showing
15 changed files
with
348 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
/**************************************************************************** | ||
* | ||
* (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org> | ||
* | ||
* QGroundControl is licensed according to the terms in the file | ||
* COPYING.md in the root of the source code directory. | ||
* | ||
****************************************************************************/ | ||
|
||
|
||
/// @file | ||
/// @author Don Gagne <[email protected]> | ||
/// @author Jacob Walser <[email protected]> | ||
|
||
#include "APMSubFrameComponent.h" | ||
#include "QGCQmlWidgetHolder.h" | ||
#include "APMAutoPilotPlugin.h" | ||
#include "APMAirframeComponent.h" | ||
|
||
APMSubFrameComponent::APMSubFrameComponent(Vehicle* vehicle, AutoPilotPlugin* autopilot, QObject* parent) | ||
: VehicleComponent(vehicle, autopilot, parent) | ||
, _name(tr("Frame")) | ||
{ | ||
} | ||
|
||
QString APMSubFrameComponent::name(void) const | ||
{ | ||
return _name; | ||
} | ||
|
||
QString APMSubFrameComponent::description(void) const | ||
{ | ||
return tr("Frame setup allows you to choose your vehicle's motor configuration. Install clockwise" \ | ||
"\npropellers on the green thrusters and counter-clockwise propellers on the blue thrusters" \ | ||
"\n(or vice-versa). The flight controller will need to be rebooted to apply changes."); | ||
} | ||
|
||
QString APMSubFrameComponent::iconResource(void) const | ||
{ | ||
return QStringLiteral("/qmlimages/SubFrameComponentIcon.png"); | ||
} | ||
|
||
bool APMSubFrameComponent::requiresSetup(void) const | ||
{ | ||
return false; | ||
} | ||
|
||
bool APMSubFrameComponent::setupComplete(void) const | ||
{ | ||
return true; | ||
} | ||
|
||
QStringList APMSubFrameComponent::setupCompleteChangedTriggerList(void) const | ||
{ | ||
return QStringList(); | ||
} | ||
|
||
QUrl APMSubFrameComponent::setupSource(void) const | ||
{ | ||
return QUrl::fromUserInput(QStringLiteral("qrc:/qml/APMSubFrameComponent.qml")); | ||
} | ||
|
||
QUrl APMSubFrameComponent::summaryQmlSource(void) const | ||
{ | ||
return QUrl::fromUserInput(QStringLiteral("qrc:/qml/APMSubFrameComponentSummary.qml")); | ||
} | ||
|
||
QString APMSubFrameComponent::prerequisiteSetup(void) const | ||
{ | ||
APMAutoPilotPlugin* plugin = dynamic_cast<APMAutoPilotPlugin*>(_autopilot); | ||
Q_ASSERT(plugin); | ||
|
||
if (!plugin->airframeComponent()->setupComplete()) { | ||
return plugin->airframeComponent()->name(); | ||
} | ||
|
||
return QString(); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
/**************************************************************************** | ||
* | ||
* (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org> | ||
* | ||
* QGroundControl is licensed according to the terms in the file | ||
* COPYING.md in the root of the source code directory. | ||
* | ||
****************************************************************************/ | ||
|
||
|
||
#ifndef APMSubFrameComponent_H | ||
#define APMSubFrameComponent_H | ||
|
||
#include "VehicleComponent.h" | ||
|
||
class APMSubFrameComponent : public VehicleComponent | ||
{ | ||
Q_OBJECT | ||
|
||
public: | ||
APMSubFrameComponent(Vehicle* vehicle, AutoPilotPlugin* autopilot, QObject* parent = NULL); | ||
|
||
// Virtuals from VehicleComponent | ||
QStringList setupCompleteChangedTriggerList(void) const final; | ||
|
||
// Virtuals from VehicleComponent | ||
QString name(void) const final; | ||
QString description(void) const final; | ||
QString iconResource(void) const final; | ||
bool requiresSetup(void) const final; | ||
bool setupComplete(void) const final; | ||
QUrl setupSource(void) const final; | ||
QUrl summaryQmlSource(void) const final; | ||
QString prerequisiteSetup(void) const final; | ||
|
||
private: | ||
const QString _name; | ||
}; | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,151 @@ | ||
/**************************************************************************** | ||
* | ||
* (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org> | ||
* | ||
* QGroundControl is licensed according to the terms in the file | ||
* COPYING.md in the root of the source code directory. | ||
* | ||
****************************************************************************/ | ||
|
||
|
||
import QtQuick 2.5 | ||
import QtQuick.Controls 1.2 | ||
|
||
import QGroundControl.FactSystem 1.0 | ||
import QGroundControl.FactControls 1.0 | ||
import QGroundControl.Palette 1.0 | ||
import QGroundControl.Controls 1.0 | ||
import QGroundControl.ScreenTools 1.0 | ||
|
||
SetupPage { | ||
id: subFramePage | ||
pageComponent: subFramePageComponent | ||
|
||
Component { | ||
id: subFramePageComponent | ||
|
||
Column { | ||
id: mainColumn | ||
width: availableWidth | ||
|
||
FactPanelController { id: controller; factPanel: subFramePage.viewPanel } | ||
|
||
QGCPalette { id: palette; colorGroupEnabled: true } | ||
|
||
property Fact _frameConfig: controller.getParameterFact(-1, "FRAME_CONFIG") | ||
|
||
function setFrameConfig(frame) { | ||
_frameConfig.value = frame; | ||
} | ||
|
||
property real _minW: ScreenTools.defaultFontPixelWidth * 30 | ||
property real _boxWidth: _minW | ||
property real _boxSpace: ScreenTools.defaultFontPixelWidth | ||
|
||
onWidthChanged: { | ||
computeDimensions() | ||
} | ||
|
||
Component.onCompleted: computeDimensions() | ||
|
||
function computeDimensions() { | ||
var sw = 0 | ||
var rw = 0 | ||
var idx = Math.floor(mainColumn.width / (_minW + ScreenTools.defaultFontPixelWidth)) | ||
if(idx < 1) { | ||
_boxWidth = mainColumn.width | ||
_boxSpace = 0 | ||
} else { | ||
_boxSpace = 0 | ||
if(idx > 1) { | ||
_boxSpace = ScreenTools.defaultFontPixelWidth | ||
sw = _boxSpace * (idx - 1) | ||
} | ||
rw = mainColumn.width - sw | ||
_boxWidth = rw / idx | ||
} | ||
} | ||
|
||
ListModel { | ||
id: subFrameModel | ||
|
||
ListElement { | ||
name: "BlueROV1" | ||
resource: "qrc:///qmlimages/Frames/BlueROV1.png" | ||
paramValue: 0 | ||
} | ||
|
||
ListElement { | ||
name: "BlueROV2/Vectored" | ||
resource: "qrc:///qmlimages/Frames/Vectored.png" | ||
paramValue: 1 | ||
} | ||
|
||
ListElement { | ||
name: "Vectored-6DOF" | ||
resource: "qrc:///qmlimages/Frames/Vectored6DOF.png" | ||
paramValue: 2 | ||
} | ||
|
||
ListElement { | ||
name: "SimpleROV-3" | ||
resource: "qrc:///qmlimages/Frames/SimpleROV-3.png" | ||
paramValue: 4 | ||
} | ||
|
||
ListElement { | ||
name: "SimpleROV-4" | ||
resource: "qrc:///qmlimages/Frames/SimpleROV-4.png" | ||
paramValue: 5 | ||
} | ||
} | ||
|
||
Flow { | ||
id: flowView | ||
width: parent.width | ||
spacing: _boxSpace | ||
|
||
Repeater { | ||
model: subFrameModel | ||
|
||
Rectangle { | ||
width: _boxWidth | ||
height: ScreenTools.defaultFontPixelHeight * 14 | ||
color: qgcPal.window | ||
|
||
QGCLabel { | ||
id: title | ||
text: subFrameModel.get(index).name | ||
} | ||
|
||
Rectangle { | ||
anchors.topMargin: ScreenTools.defaultFontPixelHeight / 2 | ||
anchors.top: title.bottom | ||
anchors.bottom: parent.bottom | ||
anchors.left: parent.left | ||
anchors.right: parent.right | ||
color: subFrameModel.get(index).paramValue == _frameConfig.value ? qgcPal.buttonHighlight: qgcPal.windowShade | ||
|
||
Image { | ||
anchors.margins: ScreenTools.defaultFontPixelWidth | ||
anchors.top: parent.top | ||
anchors.bottom: parent.bottom | ||
anchors.left: parent.left | ||
anchors.right: parent.right | ||
fillMode: Image.PreserveAspectFit | ||
smooth: true | ||
mipmap: true | ||
source: subFrameModel.get(index).resource | ||
} | ||
|
||
MouseArea { | ||
anchors.fill: parent | ||
onClicked: setFrameConfig(subFrameModel.get(index).paramValue) | ||
} | ||
} | ||
} | ||
}// Repeater | ||
}// Flow | ||
} // Column | ||
} // Component | ||
} // SetupPage |
Oops, something went wrong.