Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Q
qgroundcontrol
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Valentin Platzgummer
qgroundcontrol
Commits
fa4e7a2c
Commit
fa4e7a2c
authored
Sep 07, 2015
by
Don Gagne
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1847 from DonLakeFlyer/ControlReorg
Restructure map controls for better reusability
parents
4719c514
d1285c18
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
192 additions
and
271 deletions
+192
-271
FlightDisplayView.qml
src/FlightDisplay/FlightDisplayView.qml
+66
-4
FlightMap.qml
src/FlightMap/FlightMap.qml
+122
-264
VehicleMapItem.qml
src/FlightMap/MapItems/VehicleMapItem.qml
+3
-3
Vehicle.cc
src/Vehicle/Vehicle.cc
+1
-0
No files found.
src/FlightDisplay/FlightDisplayView.qml
View file @
fa4e7a2c
...
...
@@ -25,12 +25,13 @@ import QtQuick 2.4
import
QtQuick
.
Controls
1.3
import
QtQuick
.
Controls
.
Styles
1.2
import
QtQuick
.
Dialogs
1.2
import
QtLocation
5.3
import
QGroundControl
.
FlightMap
1.0
import
QGroundControl
.
ScreenTools
1.0
import
QGroundControl
.
Controls
1.0
import
QGroundControl
.
Palette
1.0
import
QGroundControl
.
Vehicle
1.0
/// Flight Display View
Item
{
...
...
@@ -76,9 +77,70 @@ Item {
mapName
:
"
FlightDisplayView
"
latitude
:
parent
.
_latitude
longitude
:
parent
.
_longitude
z
:
10
showVehicles
:
true
showMissionItems
:
true
// Add the vehicles to the map
MapItemView
{
model
:
multiVehicleManager
.
vehicles
delegate
:
VehicleMapItem
{
vehicle
:
object
coordinate
:
object
.
coordinate
isSatellite
:
flightMap
.
isSatelliteMap
}
}
// Add the mission items to the map
MapItemView
{
model
:
multiVehicleManager
.
activeVehicle
?
multiVehicleManager
.
activeVehicle
.
missionItems
:
0
delegate
:
MissionMapItem
{
missionItem
:
object
}
}
// Vehicle GPS lock display
Column
{
id
:
gpsLockColumn
y
:
(
parent
.
height
-
height
)
/
2
width
:
parent
.
width
Repeater
{
model
:
multiVehicleManager
.
vehicles
delegate
:
QGCLabel
{
width
:
gpsLockColumn
.
width
horizontalAlignment
:
Text
.
AlignHCenter
visible
:
object
.
satelliteLock
<
2
text
:
"
No GPS Lock for Vehicle #
"
+
object
.
id
}
}
}
// Mission item list
ListView
{
id
:
missionItemSummaryList
anchors.margins
:
ScreenTools
.
defaultFontPixelWidth
anchors.left
:
parent
.
left
anchors.right
:
flightMap
.
mapWidgets
.
left
anchors.bottom
:
parent
.
bottom
height
:
ScreenTools
.
defaultFontPixelHeight
*
7
spacing
:
ScreenTools
.
defaultFontPixelWidth
/
2
opacity
:
0.75
orientation
:
ListView
.
Horizontal
model
:
multiVehicleManager
.
activeVehicle
?
multiVehicleManager
.
activeVehicle
.
missionItems
:
0
property
real
_maxItemHeight
:
0
delegate
:
MissionItemSummary
{
opacity
:
0.75
missionItem
:
object
}
}
// ListView - Mission item list
}
QGCCompassWidget
{
...
...
src/FlightMap/FlightMap.qml
View file @
fa4e7a2c
...
...
@@ -39,256 +39,30 @@ import QGroundControl.MultiVehicleManager 1.0
import
QGroundControl
.
Vehicle
1.0
import
QGroundControl
.
Mavlink
1.0
Item
{
id
:
root
clip
:
true
Map
{
id
:
_map
property
real
latitude
:
0
property
real
longitude
:
0
property
real
zoomLevel
:
18
property
real
heading
:
0
property
bool
interactive
:
true
property
string
mapName
:
'
defaultMap
'
property
alias
mapItem
:
map
property
alias
mapMenu
:
mapTypeMenu
property
bool
showVehicles
:
false
property
bool
showMissionItems
:
false
property
alias
mapWidgets
:
controlWidgets
property
bool
isSatelliteMap
:
false
property
real
lon
:
(
longitude
>=
-
180
&&
longitude
<=
180
)
?
longitude
:
0
property
real
lat
:
(
latitude
>=
-
90
&&
latitude
<=
90
)
?
latitude
:
0
Component.onCompleted
:
{
map
.
zoomLevel
=
18
mapTypeMenu
.
update
();
}
//-- Menu to select supported map types
Menu
{
id
:
mapTypeMenu
title
:
"
Map Type...
"
enabled
:
root
.
visible
ExclusiveGroup
{
id
:
currMapType
}
function
setCurrentMap
(
mapID
)
{
for
(
var
i
=
0
;
i
<
map
.
supportedMapTypes
.
length
;
i
++
)
{
if
(
mapID
===
map
.
supportedMapTypes
[
i
].
name
)
{
map
.
activeMapType
=
map
.
supportedMapTypes
[
i
]
multiVehicleManager
.
saveSetting
(
root
.
mapName
+
"
/currentMapType
"
,
mapID
);
return
;
}
}
}
function
addMap
(
mapID
,
checked
)
{
var
mItem
=
mapTypeMenu
.
addItem
(
mapID
);
mItem
.
checkable
=
true
mItem
.
checked
=
checked
mItem
.
exclusiveGroup
=
currMapType
var
menuSlot
=
function
()
{
setCurrentMap
(
mapID
);};
mItem
.
triggered
.
connect
(
menuSlot
);
}
function
update
()
{
clear
()
var
mapID
=
''
if
(
map
.
supportedMapTypes
.
length
>
0
)
mapID
=
map
.
activeMapType
.
name
;
mapID
=
multiVehicleManager
.
loadSetting
(
root
.
mapName
+
"
/currentMapType
"
,
mapID
);
for
(
var
i
=
0
;
i
<
map
.
supportedMapTypes
.
length
;
i
++
)
{
var
name
=
map
.
supportedMapTypes
[
i
].
name
;
addMap
(
name
,
mapID
===
name
);
}
if
(
mapID
!=
''
)
setCurrentMap
(
mapID
);
}
}
function
adjustSize
()
{
if
(
root
.
visible
)
{
if
(
true
/*alwaysNorth*/
)
{
map
.
width
=
root
.
width
;
map
.
height
=
root
.
height
;
}
else
{
var
diag
=
Math
.
ceil
(
Math
.
sqrt
((
root
.
width
*
root
.
width
)
+
(
root
.
height
*
root
.
height
)));
map
.
width
=
diag
;
map
.
height
=
diag
;
}
}
else
{
map
.
width
=
1
;
map
.
height
=
1
;
}
}
/*
function formatDistance(meters)
{
var dist = Math.round(meters)
if (dist > 1000 ){
if (dist > 100000){
dist = Math.round(dist / 1000)
}
else{
dist = Math.round(dist / 100)
dist = dist / 10
}
dist = dist + " km"
}
else{
dist = dist + " m"
}
return dist
}
*/
Plugin
{
id
:
mapPlugin
name
:
"
QGroundControl
"
}
Map
{
id
:
map
property
real
lon
:
(
longitude
>=
-
180
&&
longitude
<=
180
)
?
longitude
:
0
property
real
lat
:
(
latitude
>=
-
90
&&
latitude
<=
90
)
?
latitude
:
0
property
int
currentMarker
property
int
pressX
:
-
1
property
int
pressY
:
-
1
property
bool
changed
:
false
property
variant
scaleLengths
:
[
5
,
10
,
25
,
50
,
100
,
150
,
250
,
500
,
1000
,
2000
,
5000
,
10000
,
20000
,
50000
,
100000
,
200000
,
500000
,
1000000
,
2000000
]
plugin
:
mapPlugin
width
:
1
height
:
1
zoomLevel
:
root
.
zoomLevel
anchors.centerIn
:
parent
center
:
QtPositioning
.
coordinate
(
lat
,
lon
)
gesture.flickDeceleration
:
3000
gesture.enabled
:
root
.
interactive
// Add the vehicles to the map
MapItemView
{
model
:
showVehicles
?
multiVehicleManager
.
vehicles
:
0
delegate
:
VehicleMapItem
{
vehicle
:
object
isSatellite
:
root
.
isSatelliteMap
}
}
// Add the mission items to the map
MapItemView
{
model
:
showMissionItems
?
(
multiVehicleManager
.
activeVehicle
?
multiVehicleManager
.
activeVehicle
.
missionItems
:
0
)
:
0
delegate
:
MissionMapItem
{
missionItem
:
object
}
}
/*
onWidthChanged: {
scaleTimer.restart()
}
onHeightChanged: {
scaleTimer.restart()
}
onZoomLevelChanged:{
scaleTimer.restart()
}
*/
MouseArea
{
anchors.fill
:
parent
onDoubleClicked
:
{
var
coord
=
map
.
toCoordinate
(
Qt
.
point
(
mouse
.
x
,
mouse
.
y
));
map
.
addMarker
(
coord
,
polyLine
.
path
.
length
);
polyLine
.
addCoordinate
(
coord
);
map
.
changed
=
true
;
}
}
/*
function calculateScale() {
var coord1, coord2, dist, text, f
f = 0
coord1 = map.toCoordinate(Qt.point(0,scale.y))
coord2 = map.toCoordinate(Qt.point(0+scaleImage.sourceSize.width,scale.y))
dist = Math.round(coord1.distanceTo(coord2))
if (dist === 0) {
// not visible
} else {
for (var i = 0; i < scaleLengths.length-1; i++) {
if (dist < (scaleLengths[i] + scaleLengths[i+1]) / 2 ) {
f = scaleLengths[i] / dist
dist = scaleLengths[i]
break;
}
}
if (f === 0) {
f = dist / scaleLengths[i]
dist = scaleLengths[i]
}
}
text = formatDistance(dist)
scaleImage.width = (scaleImage.sourceSize.width * f) - 2 * scaleImageLeft.sourceSize.width
scaleText.text = text
}
*/
}
// Vehicle GPS lock display
Column
{
id
:
gpsLockColumn
y
:
(
parent
.
height
-
height
)
/
2
width
:
parent
.
width
Repeater
{
model
:
multiVehicleManager
.
vehicles
delegate
:
QGCLabel
{
width
:
gpsLockColumn
.
width
horizontalAlignment
:
Text
.
AlignHCenter
visible
:
object
.
satelliteLock
<
2
text
:
"
No GPS Lock for Vehicle #
"
+
object
.
id
}
}
}
// Mission item list
ListView
{
id
:
missionItemSummaryList
anchors.margins
:
ScreenTools
.
defaultFontPixelWidth
anchors.left
:
parent
.
left
anchors.right
:
controlWidgets
.
left
anchors.bottom
:
parent
.
bottom
height
:
ScreenTools
.
defaultFontPixelHeight
*
7
spacing
:
ScreenTools
.
defaultFontPixelWidth
/
2
opacity
:
0.75
orientation
:
ListView
.
Horizontal
model
:
multiVehicleManager
.
activeVehicle
?
multiVehicleManager
.
activeVehicle
.
missionItems
:
0
anchors.fill
:
parent
zoomLevel
:
18
center
:
QtPositioning
.
coordinate
(
lat
,
lon
)
gesture.flickDeceleration
:
3000
gesture.enabled
:
interactive
property
real
_maxItemHeight
:
0
plugin
:
Plugin
{
name
:
"
QGroundControl
"
}
delegate
:
MissionItemSummary
{
opacity
:
0.75
missionItem
:
object
}
}
// This is used to determine the height of a horizontal scroll bar
ScrollView
{
id
:
scrollBarHeight
x
:
10000
y
:
10000
width
:
100
height
:
100
Rectangle
{
height
:
50
width
:
200
}
}
Component.onCompleted
:
mapTypeMenu
.
update
()
/// Map control widgets
Column
{
...
...
@@ -298,6 +72,44 @@ Item {
anchors.bottom
:
parent
.
bottom
spacing
:
ScreenTools
.
defaultFontPixelWidth
/
2
//-- Menu to select supported map types
Menu
{
id
:
mapTypeMenu
title
:
"
Map Type...
"
enabled
:
root
.
visible
ExclusiveGroup
{
id
:
currMapType
}
function
setCurrentMap
(
mapID
)
{
for
(
var
i
=
0
;
i
<
_map
.
supportedMapTypes
.
length
;
i
++
)
{
if
(
mapID
===
_map
.
supportedMapTypes
[
i
].
name
)
{
_map
.
activeMapType
=
_map
.
supportedMapTypes
[
i
]
multiVehicleManager
.
saveSetting
(
root
.
mapName
+
"
/currentMapType
"
,
mapID
);
return
;
}
}
}
function
addMap
(
mapID
,
checked
)
{
var
mItem
=
mapTypeMenu
.
addItem
(
mapID
);
mItem
.
checkable
=
true
mItem
.
checked
=
checked
mItem
.
exclusiveGroup
=
currMapType
var
menuSlot
=
function
()
{
setCurrentMap
(
mapID
);};
mItem
.
triggered
.
connect
(
menuSlot
);
}
function
update
()
{
clear
()
var
mapID
=
''
if
(
_map
.
supportedMapTypes
.
length
>
0
)
mapID
=
_map
.
activeMapType
.
name
;
mapID
=
multiVehicleManager
.
loadSetting
(
root
.
mapName
+
"
/currentMapType
"
,
mapID
);
for
(
var
i
=
0
;
i
<
_map
.
supportedMapTypes
.
length
;
i
++
)
{
var
name
=
_map
.
supportedMapTypes
[
i
].
name
;
addMap
(
name
,
mapID
===
name
);
}
if
(
mapID
!=
''
)
setCurrentMap
(
mapID
);
}
}
QGCButton
{
id
:
optionsButton
text
:
"
Options
"
...
...
@@ -317,7 +129,7 @@ Item {
property
real
startZoom
property
real
endZoom
target
:
map
target
:
_
map
properties
:
"
zoomLevel
"
from
:
startZoom
to
:
endZoom
...
...
@@ -334,11 +146,11 @@ Item {
text
:
"
+
"
onClicked
:
{
var
endZoomLevel
=
map
.
zoomLevel
+
parent
.
_zoomIncrement
if
(
endZoomLevel
>
map
.
maximumZoomLevel
)
{
endZoomLevel
=
map
.
maximumZoomLevel
var
endZoomLevel
=
_
map
.
zoomLevel
+
parent
.
_zoomIncrement
if
(
endZoomLevel
>
_
map
.
maximumZoomLevel
)
{
endZoomLevel
=
_
map
.
maximumZoomLevel
}
animateZoom
.
startZoom
=
map
.
zoomLevel
animateZoom
.
startZoom
=
_
map
.
zoomLevel
animateZoom
.
endZoom
=
endZoomLevel
animateZoom
.
start
()
}
...
...
@@ -349,22 +161,80 @@ Item {
text
:
"
-
"
onClicked
:
{
var
endZoomLevel
=
map
.
zoomLevel
-
parent
.
_zoomIncrement
if
(
endZoomLevel
<
map
.
minimumZoomLevel
)
{
endZoomLevel
=
map
.
minimumZoomLevel
var
endZoomLevel
=
_
map
.
zoomLevel
-
parent
.
_zoomIncrement
if
(
endZoomLevel
<
_
map
.
minimumZoomLevel
)
{
endZoomLevel
=
_
map
.
minimumZoomLevel
}
animateZoom
.
startZoom
=
map
.
zoomLevel
animateZoom
.
startZoom
=
_
map
.
zoomLevel
animateZoom
.
endZoom
=
endZoomLevel
animateZoom
.
start
()
}
}
}
// Row - +/- buttons
}
// Column - Map control widgets
/*
The slider and scale display are commented out for now to try to save real estate - DonLakeFlyer
Not sure if I'll bring them back or not. Need room for waypoint list at bottom
property variant scaleLengths: [5, 10, 25, 50, 100, 150, 250, 500, 1000, 2000, 5000, 10000, 20000, 50000, 100000, 200000, 500000, 1000000, 2000000]
function formatDistance(meters)
{
var dist = Math.round(meters)
if (dist > 1000 ){
if (dist > 100000){
dist = Math.round(dist / 1000)
}
else{
dist = Math.round(dist / 100)
dist = dist / 10
}
dist = dist + " km"
}
else{
dist = dist + " m"
}
return dist
}
/*
onWidthChanged: {
scaleTimer.restart()
}
The slider and scale display are commented out for now to try to save real estate - DonLakeFlyer
Not sure if I'll bring them back or not. Need room for waypoint list at bottom
onHeightChanged: {
scaleTimer.restart()
}
onZoomLevelChanged:{
scaleTimer.restart()
}
function calculateScale() {
var coord1, coord2, dist, text, f
f = 0
coord1 = map.toCoordinate(Qt.point(0,scale.y))
coord2 = map.toCoordinate(Qt.point(0+scaleImage.sourceSize.width,scale.y))
dist = Math.round(coord1.distanceTo(coord2))
if (dist === 0) {
// not visible
} else {
for (var i = 0; i < scaleLengths.length-1; i++) {
if (dist < (scaleLengths[i] + scaleLengths[i+1]) / 2 ) {
f = scaleLengths[i] / dist
dist = scaleLengths[i]
break;
}
}
if (f === 0) {
f = dist / scaleLengths[i]
dist = scaleLengths[i]
}
}
text = formatDistance(dist)
scaleImage.width = (scaleImage.sourceSize.width * f) - 2 * scaleImageLeft.sourceSize.width
scaleText.text = text
}
QGCSlider {
id: zoomSlider;
...
...
@@ -445,16 +315,4 @@ Not sure if I'll bring them back or not. Need room for waypoint list at bottom
}
}
*/
onVisibleChanged
:
{
adjustSize
();
}
onWidthChanged
:
{
adjustSize
();
}
onHeightChanged
:
{
adjustSize
();
}
}
}
// Map
src/FlightMap/MapItems/VehicleMapItem.qml
View file @
fa4e7a2c
...
...
@@ -24,8 +24,9 @@ This file is part of the QGROUNDCONTROL project
/// @file
/// @author Don Gagne <don@thegagnes.com>
import
QtQuick
2.4
import
QtLocation
5.3
import
QtQuick
2.4
import
QtLocation
5.3
import
QtPositioning
5.3
import
QGroundControl
.
ScreenTools
1.0
import
QGroundControl
.
Vehicle
1.0
...
...
@@ -37,7 +38,6 @@ MapQuickItem {
anchorPoint.x
:
vehicleIcon
.
width
/
2
anchorPoint.y
:
vehicleIcon
.
height
/
2
coordinate
:
vehicle
.
coordinate
visible
:
vehicle
.
satelliteLock
>=
2
// 2D lock
sourceItem
:
Image
{
...
...
src/Vehicle/Vehicle.cc
View file @
fa4e7a2c
...
...
@@ -729,6 +729,7 @@ void Vehicle::_waypointViewOnlyListChanged()
for
(
int
i
=
0
;
i
<
newMisionItems
.
count
();
i
++
)
{
MissionItem
*
itemToCopy
=
newMisionItems
[
i
];
MissionItem
*
item
=
new
MissionItem
(
*
itemToCopy
);
item
->
setParent
(
this
);
_missionItems
.
append
(
item
);
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment