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
60d75808
Commit
60d75808
authored
Apr 07, 2020
by
DoinLakeFlyer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
parent
edf69f88
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
1038 additions
and
220 deletions
+1038
-220
qgcresources.qrc
qgcresources.qrc
+2
-0
LockClosed.svg
resources/LockClosed.svg
+136
-0
LockOpen.svg
resources/LockOpen.svg
+136
-0
ValuePageWidget.qml
src/FlightMap/Widgets/ValuePageWidget.qml
+207
-166
ValuesWidgetController.cc
src/FlightMap/Widgets/ValuesWidgetController.cc
+400
-22
ValuesWidgetController.h
src/FlightMap/Widgets/ValuesWidgetController.h
+102
-20
QGCApplication.cc
src/QGCApplication.cc
+2
-0
PageView.qml
src/QmlControls/PageView.qml
+12
-2
QGCLabel.qml
src/QmlControls/QGCLabel.qml
+4
-5
QGCCorePlugin.cc
src/api/QGCCorePlugin.cc
+34
-3
QGCCorePlugin.h
src/api/QGCCorePlugin.h
+3
-2
No files found.
qgcresources.qrc
View file @
60d75808
...
@@ -25,6 +25,8 @@
...
@@ -25,6 +25,8 @@
<file alias="JoystickBezel.png">resources/JoystickBezel.png</file>
<file alias="JoystickBezel.png">resources/JoystickBezel.png</file>
<file alias="JoystickBezelLight.png">resources/JoystickBezelLight.png</file>
<file alias="JoystickBezelLight.png">resources/JoystickBezelLight.png</file>
<file alias="land.svg">resources/land.svg</file>
<file alias="land.svg">resources/land.svg</file>
<file alias="LockClosed.svg">resources/LockClosed.svg</file>
<file alias="LockOpen.svg">resources/LockOpen.svg</file>
<file alias="notile.png">resources/notile.png</file>
<file alias="notile.png">resources/notile.png</file>
<file alias="Pause.svg">resources/Pause.svg</file>
<file alias="Pause.svg">resources/Pause.svg</file>
<file alias="pause-mission.svg">resources/pause-mission.svg</file>
<file alias="pause-mission.svg">resources/pause-mission.svg</file>
...
...
resources/LockClosed.svg
0 → 100644
View file @
60d75808
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:rdf=
"http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns=
"http://www.w3.org/2000/svg"
xmlns:cc=
"http://web.resource.org/cc/"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
xmlns:dc=
"http://purl.org/dc/elements/1.1/"
xmlns:svg=
"http://www.w3.org/2000/svg"
xmlns:inkscape=
"http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi=
"http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:ns1=
"http://sozi.baierouge.fr"
id=
"svg2064"
viewBox=
"0 0 150 150"
version=
"1.0"
y=
"0"
x=
"0"
>
<g
id=
"layer1"
>
<g
id=
"g2061"
transform=
"translate(10.641 12.191)"
>
<path
id=
"rect2723"
style=
"fill-rule:evenodd;fill:#282828"
d=
"m64.359 2c-20.072 0-36.231 16.159-36.231 36.231v40.256h10.064v-40.256c0-14.497 11.671-26.167 26.167-26.167s26.167 11.67 26.167 26.167v40.256h10.064v-40.256c0-20.072-16.159-36.231-36.231-36.231z"
/>
<rect
id=
"rect1941"
style=
"fill-rule:evenodd;fill:#000000"
rx=
"0.5"
ry=
".5"
height=
"66.259"
width=
"85.603"
y=
"57.359"
x=
"21.558"
/>
</g
>
</g
>
<metadata
>
<rdf:RDF
>
<cc:Work
>
<dc:format
>
image/svg+xml
</dc:format
>
<dc:type
rdf:resource=
"http://purl.org/dc/dcmitype/StillImage"
/>
<cc:license
rdf:resource=
"http://creativecommons.org/licenses/publicdomain/"
/>
<dc:publisher
>
<cc:Agent
rdf:about=
"http://openclipart.org/"
>
<dc:title
>
Openclipart
</dc:title
>
</cc:Agent
>
</dc:publisher
>
<dc:title
>
padlock silhouette a.j. 01
</dc:title
>
<dc:date
>
2011-01-20T20:53:10
</dc:date
>
<dc:description
>
Originally uploaded by AJ Ashton for OCAL 0.18
</dc:description
>
<dc:source
>
https://openclipart.org/detail/105751/padlock-silhouette-a.j.--01-by-anonymous
</dc:source
>
<dc:creator
>
<cc:Agent
>
<dc:title
>
Anonymous
</dc:title
>
</cc:Agent
>
</dc:creator
>
<dc:subject
>
<rdf:Bag
>
<rdf:li
>
fix
</rdf:li
>
<rdf:li
>
keyword
</rdf:li
>
<rdf:li
>
librarians
</rdf:li
>
<rdf:li
>
tag
</rdf:li
>
</rdf:Bag
>
</dc:subject
>
</cc:Work
>
<cc:License
rdf:about=
"http://creativecommons.org/licenses/publicdomain/"
>
<cc:permits
rdf:resource=
"http://creativecommons.org/ns#Reproduction"
/>
<cc:permits
rdf:resource=
"http://creativecommons.org/ns#Distribution"
/>
<cc:permits
rdf:resource=
"http://creativecommons.org/ns#DerivativeWorks"
/>
</cc:License
>
</rdf:RDF
>
</metadata
>
</svg
>
resources/LockOpen.svg
0 → 100644
View file @
60d75808
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:rdf=
"http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns=
"http://www.w3.org/2000/svg"
xmlns:cc=
"http://web.resource.org/cc/"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
xmlns:dc=
"http://purl.org/dc/elements/1.1/"
xmlns:svg=
"http://www.w3.org/2000/svg"
xmlns:inkscape=
"http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi=
"http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:ns1=
"http://sozi.baierouge.fr"
id=
"svg2064"
viewBox=
"0 0 150 150"
version=
"1.0"
y=
"0"
x=
"0"
>
<g
id=
"layer1"
>
<g
id=
"g2096"
transform=
"translate(-2.9648 2.5)"
>
<path
id=
"rect2723"
style=
"fill-rule:evenodd;fill:#282828"
d=
"m112.5 4.1909c-20.072 0-36.231 16.159-36.231 36.231v40.256h10.064v-40.256c0-14.497 11.671-26.167 26.167-26.167 14.5 0 26.17 11.67 26.17 26.167v27.756h10.06v-27.756c0-20.072-16.16-36.231-36.23-36.231z"
/>
<rect
id=
"rect1941"
style=
"fill-rule:evenodd;fill:#000000"
rx=
"0.5"
ry=
".5"
height=
"66.259"
width=
"85.603"
y=
"74.55"
x=
"7.1987"
/>
</g
>
</g
>
<metadata
>
<rdf:RDF
>
<cc:Work
>
<dc:format
>
image/svg+xml
</dc:format
>
<dc:type
rdf:resource=
"http://purl.org/dc/dcmitype/StillImage"
/>
<cc:license
rdf:resource=
"http://creativecommons.org/licenses/publicdomain/"
/>
<dc:publisher
>
<cc:Agent
rdf:about=
"http://openclipart.org/"
>
<dc:title
>
Openclipart
</dc:title
>
</cc:Agent
>
</dc:publisher
>
<dc:title
>
padlock unlocked silhou 01
</dc:title
>
<dc:date
>
2011-01-20T20:53:10
</dc:date
>
<dc:description
>
Originally uploaded by AJ Ashton for OCAL 0.18
</dc:description
>
<dc:source
>
https://openclipart.org/detail/105745/padlock-unlocked-silhou-01-by-anonymous
</dc:source
>
<dc:creator
>
<cc:Agent
>
<dc:title
>
Anonymous
</dc:title
>
</cc:Agent
>
</dc:creator
>
<dc:subject
>
<rdf:Bag
>
<rdf:li
>
fix
</rdf:li
>
<rdf:li
>
keyword
</rdf:li
>
<rdf:li
>
librarians
</rdf:li
>
<rdf:li
>
tag
</rdf:li
>
</rdf:Bag
>
</dc:subject
>
</cc:Work
>
<cc:License
rdf:about=
"http://creativecommons.org/licenses/publicdomain/"
>
<cc:permits
rdf:resource=
"http://creativecommons.org/ns#Reproduction"
/>
<cc:permits
rdf:resource=
"http://creativecommons.org/ns#Distribution"
/>
<cc:permits
rdf:resource=
"http://creativecommons.org/ns#DerivativeWorks"
/>
</cc:License
>
</rdf:RDF
>
</metadata
>
</svg
>
src/FlightMap/Widgets/ValuePageWidget.qml
View file @
60d75808
...
@@ -10,6 +10,8 @@
...
@@ -10,6 +10,8 @@
import
QtQuick
2.3
import
QtQuick
2.3
import
QtQuick
.
Dialogs
1.2
import
QtQuick
.
Dialogs
1.2
import
QtQuick
.
Layouts
1.2
import
QtQuick
.
Layouts
1.2
import
QtQuick
.
Controls
2.5
import
QtQml
2.12
import
QGroundControl
.
Controls
1.0
import
QGroundControl
.
Controls
1.0
import
QGroundControl
.
ScreenTools
1.0
import
QGroundControl
.
ScreenTools
1.0
...
@@ -21,23 +23,32 @@ import QGroundControl 1.0
...
@@ -21,23 +23,32 @@ import QGroundControl 1.0
/// Value page for InstrumentPanel PageView
/// Value page for InstrumentPanel PageView
Column
{
Column
{
id
:
_
largeColumn
id
:
_
root
width
:
pageWidth
width
:
pageWidth
spacing
:
_margins
spacing
:
ScreenTools
.
defaultFontPixelHeight
/
2
property
bool
showSettingsIcon
:
true
property
bool
showSettingsIcon
:
true
property
bool
showLockIcon
:
true
property
var
_activeVehicle
:
QGroundControl
.
multiVehicleManager
.
activeVehicle
?
QGroundControl
.
multiVehicleManager
.
activeVehicle
:
QGroundControl
.
multiVehicleManager
.
offlineEditingVehicle
property
real
_margins
:
ScreenTools
.
defaultFontPixelWidth
/
2
property
var
_activeVehicle
:
QGroundControl
.
multiVehicleManager
.
activeVehicle
?
QGroundControl
.
multiVehicleManager
.
activeVehicle
:
QGroundControl
.
multiVehicleManager
.
offlineEditingVehicle
property
real
_margins
:
ScreenTools
.
defaultFontPixelWidth
/
2
property
int
_colMax
:
4
property
bool
_settingsUnlocked
:
false
property
var
_valuePickerInstrumentValue
:
null
property
int
_valuePickerRowIndex
:
0
property
var
_rgFontSizes
:
[
ScreenTools
.
defaultFontPointSize
,
ScreenTools
.
smallFontPointSize
,
ScreenTools
.
mediumFontPointSize
,
ScreenTools
.
largeFontPointSize
]
property
real
_blankEntryHeight
:
ScreenTools
.
defaultFontPixelHeight
*
2
property
real
_columnButtonWidth
:
ScreenTools
.
minTouchPixels
/
2
property
real
_columnButtonHeight
:
ScreenTools
.
minTouchPixels
property
real
_columnButtonSpacing
:
2
property
real
_columnButtonsTotalHeight
:
(
_columnButtonHeight
*
2
)
+
_columnButtonSpacing
QGCPalette
{
id
:
qgcPal
;
colorGroupEnabled
:
true
}
QGCPalette
{
id
:
qgcPal
;
colorGroupEnabled
:
true
}
ValuesWidgetController
{
ValuesWidgetController
{
id
:
controller
}
id
:
controller
}
function
showSettings
()
{
function
showSettings
(
settingsUnlocked
)
{
mainWindow
.
showComponentDialog
(
propertyPicker
,
qsTr
(
"
Value Widget Setup
"
),
mainWindow
.
showDialogDefaultWidth
,
StandardButton
.
Ok
)
_settingsUnlocked
=
settingsUnlocked
}
}
function
listContains
(
list
,
value
)
{
function
listContains
(
list
,
value
)
{
...
@@ -49,88 +60,166 @@ Column {
...
@@ -49,88 +60,166 @@ Column {
return
false
return
false
}
}
Repeater
{
ButtonGroup
{
id
:
factRadioGroup
}
model
:
_activeVehicle
?
controller
.
largeValues
:
0
Loader
{
sourceComponent
:
fact
?
largeValue
:
undefined
property
Fact
fact
:
_activeVehicle
.
getFact
(
modelData
.
replace
(
"
Vehicle.
"
,
""
))
}
}
// Repeater - Large
Flow
{
id
:
_smallFlow
width
:
parent
.
width
layoutDirection
:
Qt
.
LeftToRight
spacing
:
_margins
Repeater
{
model
:
_activeVehicle
?
controller
.
smallValues
:
0
Loader
{
sourceComponent
:
fact
?
smallValue
:
undefined
property
Fact
fact
:
_activeVehicle
.
getFact
(
modelData
.
replace
(
"
Vehicle.
"
,
""
))
}
}
// Repeater - Small
}
// Flow
Component
{
Component
{
id
:
largeValue
id
:
valueItemMouseAreaComponent
Column
{
MouseArea
{
width
:
_largeColumn
.
width
anchors.centerIn
:
parent
property
bool
largeValue
:
listContains
(
controller
.
altitudeProperties
,
fact
.
name
)
width
:
parent
.
width
height
:
_columnButtonsTotalHeight
QGCLabel
{
visible
:
_settingsUnlocked
width
:
parent
.
width
horizontalAlignment
:
Text
.
AlignHCenter
property
var
instrumentValue
wrapMode
:
Text
.
WordWrap
property
int
rowIndex
text
:
fact
.
shortDescription
+
(
fact
.
units
?
"
(
"
+
fact
.
units
+
"
)
"
:
""
)
}
onClicked
:
{
QGCLabel
{
_valuePickerInstrumentValue
=
instrumentValue
width
:
parent
.
width
_valuePickerRowIndex
=
rowIndex
horizontalAlignment
:
Text
.
AlignHCenter
mainWindow
.
showComponentDialog
(
valuePickerDialog
,
qsTr
(
"
Select Value
"
),
mainWindow
.
showDialogDefaultWidth
,
StandardButton
.
Ok
)
font.pointSize
:
ScreenTools
.
mediumFontPointSize
*
(
largeValue
?
1.3
:
1.0
)
font.family
:
largeValue
?
ScreenTools
.
demiboldFontFamily
:
ScreenTools
.
normalFontFamily
fontSizeMode
:
Text
.
HorizontalFit
text
:
fact
.
enumOrValueString
}
}
}
}
}
}
Component
{
Repeater
{
id
:
smallValue
id
:
rowRepeater
model
:
controller
.
valuesModel
Column
{
Column
{
width
:
(
pageWidth
/
2
)
-
(
_margins
/
2
)
-
0.1
id
:
rowRepeaterLayout
clip
:
true
spacing
:
1
QGCLabel
{
property
int
rowIndex
:
index
width
:
parent
.
width
wrapMode
:
Text
.
WordWrap
Row
{
horizontalAlignment
:
Text
.
AlignHCenter
id
:
columnRow
font.pointSize
:
ScreenTools
.
isTinyScreen
?
ScreenTools
.
smallFontPointSize
*
0.75
:
ScreenTools
.
smallFontPointSize
spacing
:
1
text
:
fact
.
shortDescription
}
Repeater
{
QGCLabel
{
id
:
columnRepeater
width
:
parent
.
width
model
:
object
horizontalAlignment
:
Text
.
AlignHCenter
fontSizeMode
:
Text
.
HorizontalFit
property
real
_interColumnSpacing
:
(
columnRepeater
.
count
-
(
_settingsUnlocked
?
0
:
1
))
*
columnRow
.
spacing
text
:
fact
.
enumOrValueString
property
real
columnWidth
:
(
pageWidth
-
(
_settingsUnlocked
?
_columnButtonWidth
:
0
)
-
_interColumnSpacing
)
/
columnRepeater
.
count
}
QGCLabel
{
onItemAdded
:
valueItemMouseAreaComponent
.
createObject
(
item
,
{
"
instrumentValue
"
:
object
.
get
(
index
),
"
rowIndex
"
:
index
})
width
:
parent
.
width
horizontalAlignment
:
Text
.
AlignHCenter
Item
{
font.pointSize
:
ScreenTools
.
isTinyScreen
?
ScreenTools
.
smallFontPointSize
*
0.75
:
ScreenTools
.
smallFontPointSize
width
:
columnRepeater
.
columnWidth
fontSizeMode
:
Text
.
HorizontalFit
height
:
value
.
y
+
value
.
height
text
:
fact
.
units
anchors.verticalCenter
:
_settingsUnlocked
?
parent
.
verticalCenter
:
undefined
anchors.bottom
:
_settingsUnlocked
?
undefined
:
parent
.
bottom
QGCLabel
{
width
:
columnRepeater
.
columnWidth
height
:
_columnButtonsTotalHeight
font.pointSize
:
ScreenTools
.
smallFontPointSize
text
:
_settingsUnlocked
?
qsTr
(
"
BLANK
"
)
:
""
horizontalAlignment
:
Text
.
AlignHCenter
verticalAlignment
:
Text
.
AlignVCenter
visible
:
!
object
.
fact
}
QGCLabel
{
id
:
label
width
:
columnRepeater
.
columnWidth
font.pointSize
:
ScreenTools
.
smallFontPointSize
text
:
object
.
label
.
toUpperCase
()
horizontalAlignment
:
Text
.
AlignHCenter
visible
:
object
.
fact
&&
object
.
label
}
QGCLabel
{
id
:
value
anchors.topMargin
:
label
.
visible
?
2
:
0
anchors.top
:
label
.
visible
?
label
.
bottom
:
parent
.
top
width
:
columnRepeater
.
columnWidth
font.pointSize
:
_rgFontSizes
[
object
.
fontSize
]
text
:
visible
?
(
object
.
fact
.
enumOrValueString
+
(
object
.
showUnits
?
object
.
fact
.
units
:
""
))
:
""
horizontalAlignment
:
Text
.
AlignHCenter
visible
:
object
.
fact
}
}
}
// Repeater - columns
ColumnLayout
{
id
:
columnsButtonsLayout
width
:
_columnButtonWidth
spacing
:
_columnButtonSpacing
visible
:
_settingsUnlocked
QGCButton
{
Layout.fillHeight
:
true
Layout.minimumHeight
:
ScreenTools
.
minTouchPixels
Layout.preferredWidth
:
parent
.
width
text
:
qsTr
(
"
+
"
)
onClicked
:
controller
.
appendColumn
(
rowRepeaterLayout
.
rowIndex
)
}
QGCButton
{
Layout.fillHeight
:
true
Layout.minimumHeight
:
ScreenTools
.
minTouchPixels
Layout.preferredWidth
:
parent
.
width
text
:
qsTr
(
"
-
"
)
enabled
:
index
!==
0
||
columnRepeater
.
count
!==
1
onClicked
:
controller
.
deleteLastColumn
(
rowRepeaterLayout
.
rowIndex
)
}
}
}
// RowLayout
RowLayout
{
width
:
parent
.
width
height
:
ScreenTools
.
defaultFontPixelWidth
*
2
spacing
:
1
visible
:
_settingsUnlocked
QGCButton
{
Layout.fillWidth
:
true
Layout.preferredHeight
:
ScreenTools
.
defaultFontPixelWidth
*
2
text
:
qsTr
(
"
+
"
)
onClicked
:
controller
.
insertRow
(
index
)
}
QGCButton
{
Layout.fillWidth
:
true
Layout.preferredHeight
:
ScreenTools
.
defaultFontPixelWidth
*
2
text
:
qsTr
(
"
-
"
)
enabled
:
index
!==
0
onClicked
:
controller
.
deleteRow
(
index
)
}
}
}
}
}
}
// Repeater - rows
QGCButton
{
anchors.left
:
parent
.
left
anchors.right
:
parent
.
right
text
:
qsTr
(
"
Reset To Defaults
"
)
visible
:
_settingsUnlocked
onClicked
:
controller
.
resetToDefaults
()
}
}
Component
{
Component
{
id
:
propertyPicker
id
:
valuePickerDialog
QGCViewDialog
{
QGCViewDialog
{
id
:
_propertyPickerDialog
function
accept
()
{
if
(
factRadioGroup
.
checkedButton
)
{
_valuePickerInstrumentValue
.
setFact
(
factRadioGroup
.
checkedButton
.
radioFactGroupName
,
factRadioGroup
.
checkedButton
.
radioFact
.
name
,
labelTextField
.
text
,
fontSizeCombo
.
currentIndex
)
}
else
{
_valuePickerInstrumentValue
.
clearFact
()
}
hideDialog
()
}
Connections
{
target
:
factRadioGroup
onCheckedButtonChanged
:
labelTextField
.
text
=
factRadioGroup
.
checkedButton
.
radioFact
.
shortDescription
}
ButtonGroup
{
id
:
fontRadioGroup
}
QGCFlickable
{
QGCFlickable
{
anchors.fill
:
parent
anchors.fill
:
parent
...
@@ -138,39 +227,50 @@ Column {
...
@@ -138,39 +227,50 @@ Column {
flickableDirection
:
Flickable
.
VerticalFlick
flickableDirection
:
Flickable
.
VerticalFlick
clip
:
true
clip
:
true
Column
{
Column
Layout
{
id
:
column
id
:
column
anchors.left
:
parent
.
left
anchors.left
:
parent
.
left
anchors.right
:
parent
.
right
anchors.right
:
parent
.
right
spacing
:
_margins
spacing
:
_margins
/*
RowLayout
{
Leaving this here for now just in case
Layout.fillWidth
:
true
FactCheckBox {
spacing
:
ScreenTools
.
defaultFontPixelWidth
text: qsTr("Show large compass")
fact: _showLargeCompass
QGCLabel
{
text
:
qsTr
(
"
Label
"
)
}
visible: _showLargeCompass.visible
QGCTextField
{
id
:
labelTextField
Layout.fillWidth
:
true
text
:
_valuePickerInstrumentValue
.
label
}
}
property Fact _showLargeCompass: QGroundControl.settingsManager.appSettings.showLargeCompass
RowLayout
{
spacing
:
ScreenTools
.
defaultFontPixelWidth
QGCLabel
{
text
:
qsTr
(
"
Font Size (for whole row)
"
)
}
QGCComboBox
{
id
:
fontSizeCombo
model
:
[
qsTr
(
"
Default
"
),
qsTr
(
"
Small
"
),
qsTr
(
"
Medium
"
),
qsTr
(
"
Large
"
)
]
currentIndex
:
_valuePickerInstrumentValue
.
fontSize
sizeToContents
:
true
onActivated
:
_valuePickerInstrumentValue
.
fontSize
=
index
}
}
}
*/
Item
{
QGCCheckBox
{
width
:
1
text
:
qsTr
(
"
Show Units
"
)
height
:
_margins
checked
:
_valuePickerInstrumentValue
.
showUnits
onClicked
:
_valuePickerInstrumentValue
.
showUnits
=
checked
}
}
QGCLabel
{
QGCButton
{
id
:
_label
text
:
qsTr
(
"
Blank Entry
"
)
anchors.left
:
parent
.
left
onClicked
:
{
_valuePickerInstrumentValue
.
clearFact
();
hideDialog
()
}
anchors.right
:
parent
.
right
wrapMode
:
Text
.
WordWrap
text
:
qsTr
(
"
Select the values you want to display:
"
)
}
}
Loader
{
Loader
{
anchors.left
:
parent
.
left
Layout.fillWidth
:
true
anchors.right
:
parent
.
right
sourceComponent
:
factGroupList
sourceComponent
:
factGroupList
property
var
factGroup
:
_activeVehicle
property
var
factGroup
:
_activeVehicle
...
@@ -181,14 +281,12 @@ Column {
...
@@ -181,14 +281,12 @@ Column {
model
:
_activeVehicle
.
factGroupNames
model
:
_activeVehicle
.
factGroupNames
Loader
{
Loader
{
anchors.left
:
parent
.
left
Layout.fillWidth
:
true
anchors.right
:
parent
.
right
sourceComponent
:
factGroupList
sourceComponent
:
factGroupList
property
var
factGroup
:
_activeVehicle
.
getFactGroup
(
modelData
)
property
var
factGroup
:
_activeVehicle
.
getFactGroup
(
modelData
)
property
string
factGroupName
:
modelData
property
string
factGroupName
:
modelData
}
}
}
}
}
}
}
}
...
@@ -203,8 +301,6 @@ Column {
...
@@ -203,8 +301,6 @@ Column {
// property string factGroupName
// property string factGroupName
Column
{
Column
{
spacing
:
_margins
SectionHeader
{
SectionHeader
{
id
:
header
id
:
header
anchors.left
:
parent
.
left
anchors.left
:
parent
.
left
...
@@ -214,78 +310,23 @@ Column {
...
@@ -214,78 +310,23 @@ Column {
}
}
Column
{
Column
{
spacing
:
_margins
visible
:
header
.
checked
visible
:
header
.
checked
Repeater
{
Repeater
{
model
:
factGroup
?
factGroup
.
factNames
:
0
model
:
factGroup
?
factGroup
.
factNames
:
0
RowLayout
{
QGCRadioButton
{
spacing
:
_margins
text
:
radioFact
.
shortDescription
visible
:
factGroup
.
getFact
(
modelData
).
shortDescription
!==
""
ButtonGroup.group
:
factRadioGroup
checked
:
radioFactGroupName
==
_valuePickerInstrumentValue
.
factGroupName
&&
radioFact
==
_valuePickerInstrumentValue
.
fact
property
string
propertyName
:
factGroupName
+
"
.
"
+
modelData
function
removeFromList
(
list
,
value
)
{
property
string
radioFactGroupName
:
factGroupName
var
newList
=
[]
property
var
radioFact
:
factGroup
.
getFact
(
modelData
)
for
(
var
i
=
0
;
i
<
list
.
length
;
i
++
)
{
if
(
list
[
i
]
!==
value
)
{
newList
.
push
(
list
[
i
])
}
}
return
newList
}
function
addToList
(
list
,
value
)
{
Component.onCompleted
:
{
var
found
=
false
if
(
checked
)
{
for
(
var
i
=
0
;
i
<
list
.
length
;
i
++
)
{
header
.
checked
=
true
if
(
list
[
i
]
===
value
)
{
found
=
true
break
}
}
}
if
(
!
found
)
{
list
.
push
(
value
)
}
return
list
}
function
updateValues
()
{
if
(
_addCheckBox
.
checked
)
{
if
(
_largeCheckBox
.
checked
)
{
controller
.
largeValues
=
addToList
(
controller
.
largeValues
,
propertyName
)
controller
.
smallValues
=
removeFromList
(
controller
.
smallValues
,
propertyName
)
}
else
{
controller
.
smallValues
=
addToList
(
controller
.
smallValues
,
propertyName
)
controller
.
largeValues
=
removeFromList
(
controller
.
largeValues
,
propertyName
)
}
}
else
{
controller
.
largeValues
=
removeFromList
(
controller
.
largeValues
,
propertyName
)
controller
.
smallValues
=
removeFromList
(
controller
.
smallValues
,
propertyName
)
}
}
QGCCheckBox
{
id
:
_addCheckBox
text
:
factGroup
.
getFact
(
modelData
).
shortDescription
checked
:
listContains
(
controller
.
smallValues
,
propertyName
)
||
_largeCheckBox
.
checked
onClicked
:
updateValues
()
Layout.fillWidth
:
true
Layout.minimumWidth
:
ScreenTools
.
defaultFontPixelWidth
*
20
Component.onCompleted
:
{
if
(
checked
)
{
header
.
checked
=
true
}
}
}
QGCCheckBox
{
id
:
_largeCheckBox
text
:
qsTr
(
"
Large
"
)
checked
:
listContains
(
controller
.
largeValues
,
propertyName
)
enabled
:
_addCheckBox
.
checked
onClicked
:
updateValues
()
}
}
}
}
}
}
...
...
src/FlightMap/Widgets/ValuesWidgetController.cc
View file @
60d75808
...
@@ -14,51 +14,429 @@
...
@@ -14,51 +14,429 @@
#include <QSettings>
#include <QSettings>
const
char
*
ValuesWidgetController
::
_groupKey
=
"ValuesWidget"
;
const
char
*
ValuesWidgetController
::
_groupKey
=
"ValuesWidget
2
"
;
const
char
*
ValuesWidgetController
::
_
largeValuesKey
=
"large
"
;
const
char
*
ValuesWidgetController
::
_
rowsKey
=
"rows
"
;
const
char
*
ValuesWidgetController
::
_
smallValuesKey
=
"small
"
;
const
char
*
ValuesWidgetController
::
_
columnsKey
=
"columns
"
;
ValuesWidgetController
::
ValuesWidgetController
(
void
)
const
char
*
ValuesWidgetController
::
_deprecatedGroupKey
=
"ValuesWidget"
;
const
char
*
ValuesWidgetController
::
_deprecatedLargeValuesKey
=
"large"
;
const
char
*
ValuesWidgetController
::
_deprecatedSmallValuesKey
=
"small"
;
const
char
*
InstrumentValue
::
_factGroupNameKey
=
"groupName"
;
const
char
*
InstrumentValue
::
_factNameKey
=
"factName"
;
const
char
*
InstrumentValue
::
_labelKey
=
"label"
;
const
char
*
InstrumentValue
::
_fontSizeKey
=
"fontSize"
;
const
char
*
InstrumentValue
::
_showUnitsKey
=
"showUnits"
;
ValuesWidgetController
::
ValuesWidgetController
(
bool
forDefaultSettingsCreation
)
:
_valuesModel
(
new
QmlObjectListModel
(
this
))
{
{
QSettings
settings
;
QSettings
settings
;
settings
.
beginGroup
(
_groupKey
);
settings
.
beginGroup
(
_groupKey
);
QStringList
largeDefaults
,
smallDefaults
;
_multiVehicleMgr
=
qgcApp
()
->
toolbox
()
->
multiVehicleManager
();
qgcApp
()
->
toolbox
()
->
corePlugin
()
->
valuesWidgetDefaultSettings
(
largeDefaults
,
smallDefaults
);
connect
(
_multiVehicleMgr
,
&
MultiVehicleManager
::
activeVehicleChanged
,
this
,
&
ValuesWidgetController
::
_activeVehicleChanged
);
if
(
!
forDefaultSettingsCreation
)
{
_loadSettings
();
}
}
InstrumentValue
*
ValuesWidgetController
::
_createNewInstrumentValueWorker
(
Vehicle
*
activeVehicle
,
int
fontSize
,
QmlObjectListModel
*
rowModel
)
{
InstrumentValue
*
newValue
=
new
InstrumentValue
(
activeVehicle
,
fontSize
,
rowModel
);
connect
(
newValue
,
&
InstrumentValue
::
factChanged
,
this
,
&
ValuesWidgetController
::
_saveSettings
);
connect
(
newValue
,
&
InstrumentValue
::
factGroupNameChanged
,
this
,
&
ValuesWidgetController
::
_saveSettings
);
connect
(
newValue
,
&
InstrumentValue
::
labelChanged
,
this
,
&
ValuesWidgetController
::
_saveSettings
);
connect
(
newValue
,
&
InstrumentValue
::
fontSizeChanged
,
this
,
&
ValuesWidgetController
::
_saveSettings
);
connect
(
newValue
,
&
InstrumentValue
::
showUnitsChanged
,
this
,
&
ValuesWidgetController
::
_saveSettings
);
return
newValue
;
}
_largeValues
=
settings
.
value
(
_largeValuesKey
,
largeDefaults
).
toStringList
();
_smallValues
=
settings
.
value
(
_smallValuesKey
,
smallDefaults
).
toStringList
();
_altitudeProperties
<<
"altitudeRelative"
<<
"altitudeAMSL"
;
InstrumentValue
*
ValuesWidgetController
::
appendColumn
(
int
rowIndex
)
{
InstrumentValue
*
newValue
=
nullptr
;
// Keep back compat for removed WGS84 value
if
(
rowIndex
>=
0
&&
rowIndex
<
_valuesModel
->
count
())
{
if
(
_largeValues
.
contains
(
"Vehicle.altitudeWGS84"
))
{
QmlObjectListModel
*
row
=
_valuesModel
->
value
<
QmlObjectListModel
*>
(
rowIndex
);
setLargeValues
(
_largeValues
.
replaceInStrings
(
"Vehicle.altitudeWGS84"
,
"Vehicle.altitudeRelative"
));
int
fontSize
=
InstrumentValue
::
DefaultFontSize
;
if
(
row
->
count
())
{
fontSize
=
row
->
value
<
InstrumentValue
*>
(
0
)
->
fontSize
();
}
newValue
=
_createNewInstrumentValueWorker
(
_currentActiveVehicle
(),
fontSize
,
row
);
row
->
append
(
newValue
);
}
}
if
(
_smallValues
.
contains
(
"Vehicle.altitudeWGS84"
))
{
_saveSettings
();
setSmallValues
(
_largeValues
.
replaceInStrings
(
"Vehicle.altitudeWGS84"
,
"Vehicle.altitudeRelative"
));
return
newValue
;
}
void
ValuesWidgetController
::
deleteLastColumn
(
int
rowIndex
)
{
if
(
rowIndex
>=
0
&&
rowIndex
<
_valuesModel
->
count
())
{
QmlObjectListModel
*
row
=
_valuesModel
->
value
<
QmlObjectListModel
*>
(
rowIndex
);
if
(
rowIndex
!=
0
||
row
->
count
()
>
1
)
{
row
->
removeAt
(
row
->
count
()
-
1
);
}
if
(
row
->
count
()
==
0
)
{
// Last column was deleted, delete the row as well
_valuesModel
->
removeAt
(
rowIndex
);
}
}
}
_saveSettings
();
}
}
void
ValuesWidgetController
::
setLargeValues
(
const
QStringList
&
values
)
QmlObjectListModel
*
ValuesWidgetController
::
appendRow
(
bool
addBlanksColumn
)
{
{
QmlObjectListModel
*
newRow
=
new
QmlObjectListModel
(
_valuesModel
);
_valuesModel
->
append
(
newRow
);
int
rowIndex
=
_valuesModel
->
count
()
-
1
;
if
(
addBlanksColumn
)
{
appendColumn
(
rowIndex
);
}
_saveSettings
();
return
newRow
;
}
QmlObjectListModel
*
ValuesWidgetController
::
insertRow
(
int
atIndex
,
bool
addBlanksColumn
)
{
QmlObjectListModel
*
newRow
=
nullptr
;
if
(
atIndex
>=
0
&&
atIndex
<
_valuesModel
->
count
()
+
1
)
{
QmlObjectListModel
*
newRow
=
new
QmlObjectListModel
(
_valuesModel
);
_valuesModel
->
insert
(
atIndex
,
newRow
);
if
(
addBlanksColumn
)
{
appendColumn
(
atIndex
);
}
_saveSettings
();
}
return
newRow
;
}
void
ValuesWidgetController
::
deleteRow
(
int
rowIndex
)
{
if
(
rowIndex
>=
0
&&
rowIndex
<
_valuesModel
->
count
())
{
if
(
_valuesModel
->
count
()
>
1
)
{
_valuesModel
->
removeAt
(
rowIndex
);
}
_saveSettings
();
}
}
Vehicle
*
ValuesWidgetController
::
_currentActiveVehicle
(
void
)
{
Vehicle
*
activeVehicle
=
_multiVehicleMgr
->
activeVehicle
();
if
(
!
activeVehicle
)
{
activeVehicle
=
_multiVehicleMgr
->
offlineEditingVehicle
();
}
return
activeVehicle
;
}
void
ValuesWidgetController
::
_activeVehicleChanged
(
Vehicle
*
activeVehicle
)
{
if
(
!
activeVehicle
)
{
activeVehicle
=
_currentActiveVehicle
();
}
for
(
int
rowIndex
=
0
;
rowIndex
<
_valuesModel
->
count
();
rowIndex
++
)
{
QmlObjectListModel
*
rowModel
=
_valuesModel
->
value
<
QmlObjectListModel
*>
(
rowIndex
);
for
(
int
colIndex
=
0
;
colIndex
<
rowModel
->
count
();
colIndex
++
)
{
rowModel
->
value
<
InstrumentValue
*>
(
colIndex
)
->
activeVehicleChanged
(
activeVehicle
);
}
}
}
bool
ValuesWidgetController
::
_validRowIndex
(
int
rowIndex
)
{
return
rowIndex
>=
0
&&
rowIndex
<
_valuesModel
->
count
();
}
int
ValuesWidgetController
::
fontSizeForRow
(
int
rowIndex
)
{
return
_validRowIndex
(
rowIndex
)
?
_rgFontSizeByRow
[
rowIndex
].
toInt
()
:
_rgFontSizeByRow
[
0
].
toInt
();
}
void
ValuesWidgetController
::
setFontSizeForRow
(
int
rowIndex
,
int
fontSize
)
{
if
(
_validRowIndex
(
rowIndex
))
{
_rgFontSizeByRow
[
rowIndex
]
=
fontSize
;
}
}
void
ValuesWidgetController
::
_saveSettings
(
void
)
{
if
(
_preventSaveSettings
)
{
return
;
}
QSettings
settings
;
QSettings
settings
;
settings
.
beginGroup
(
_groupKey
);
settings
.
beginGroup
(
_groupKey
);
settings
.
setValue
(
_largeValuesKey
,
values
);
settings
.
remove
(
QStringLiteral
(
""
));
settings
.
beginWriteArray
(
_rowsKey
);
for
(
int
rowIndex
=
0
;
rowIndex
<
_valuesModel
->
count
();
rowIndex
++
)
{
QmlObjectListModel
*
colValuesModel
=
_valuesModel
->
value
<
QmlObjectListModel
*>
(
rowIndex
);
settings
.
setArrayIndex
(
rowIndex
);
settings
.
beginWriteArray
(
_columnsKey
);
for
(
int
colIndex
=
0
;
colIndex
<
colValuesModel
->
count
();
colIndex
++
)
{
settings
.
setArrayIndex
(
colIndex
);
colValuesModel
->
value
<
InstrumentValue
*>
(
colIndex
)
->
saveToSettings
(
settings
);
}
settings
.
endArray
();
}
settings
.
endArray
();
}
void
ValuesWidgetController
::
_loadSettings
(
void
)
{
QSettings
settings
;
_valuesModel
->
deleteLater
();
_valuesModel
=
new
QmlObjectListModel
(
this
);
emit
valuesModelChanged
(
_valuesModel
);
if
(
settings
.
childGroups
().
contains
(
_deprecatedGroupKey
))
{
settings
.
beginGroup
(
_deprecatedGroupKey
);
QStringList
largeValues
=
settings
.
value
(
_deprecatedLargeValuesKey
).
toStringList
();
QStringList
smallValues
=
settings
.
value
(
_deprecatedSmallValuesKey
).
toStringList
();
QStringList
altitudeProperties
=
{
"altitudeRelative"
,
"altitudeAMSL"
};
int
rowIndex
=
-
1
;
int
valueCount
=
0
;
QmlObjectListModel
*
rowModel
=
nullptr
;
for
(
const
QString
&
largeValue
:
largeValues
)
{
QStringList
parts
=
largeValue
.
split
(
"."
);
rowModel
=
appendRow
(
false
/* addBlankColumn */
);
rowIndex
++
;
InstrumentValue
*
colValue
=
appendColumn
(
rowIndex
);
colValue
->
setFact
(
parts
[
0
],
parts
[
1
],
QString
());
colValue
->
setLabel
(
colValue
->
fact
()
->
shortDescription
());
colValue
->
setShowUnits
(
true
);
colValue
->
setFontSize
(
altitudeProperties
.
contains
(
parts
[
1
])
?
InstrumentValue
::
LargeFontSize
:
InstrumentValue
::
DefaultFontSize
);
}
_largeValues
=
values
;
valueCount
=
0
;
emit
largeValuesChanged
(
values
);
rowModel
=
nullptr
;
for
(
const
QString
&
smallValue
:
smallValues
)
{
QStringList
parts
=
smallValue
.
split
(
"."
);
if
(
!
(
valueCount
++
&
1
))
{
rowModel
=
appendRow
(
false
/* addBlankColumn */
);
rowIndex
++
;
}
InstrumentValue
*
colValue
=
appendColumn
(
rowIndex
);
colValue
->
setFact
(
parts
[
0
],
parts
[
1
],
QString
());
colValue
->
setLabel
(
colValue
->
fact
()
->
shortDescription
());
colValue
->
setShowUnits
(
true
);
colValue
->
setFontSize
(
InstrumentValue
::
SmallFontSize
);
}
settings
.
endGroup
();
settings
.
remove
(
_deprecatedGroupKey
);
}
else
{
_preventSaveSettings
=
true
;
settings
.
beginGroup
(
_groupKey
);
int
cRows
=
settings
.
beginReadArray
(
_rowsKey
);
for
(
int
rowIndex
=
0
;
rowIndex
<
cRows
;
rowIndex
++
)
{
appendRow
(
false
/* addBlankColumns */
);
settings
.
setArrayIndex
(
rowIndex
);
int
cCols
=
settings
.
beginReadArray
(
_columnsKey
);
for
(
int
colIndex
=
0
;
colIndex
<
cCols
;
colIndex
++
)
{
settings
.
setArrayIndex
(
colIndex
);
appendColumn
(
rowIndex
)
->
readFromSettings
(
settings
);
}
settings
.
endArray
();
}
settings
.
endArray
();
_preventSaveSettings
=
false
;
}
// Use defaults if nothing there
if
(
_valuesModel
->
count
()
==
0
)
{
_valuesModel
->
deleteLater
();
_valuesModel
=
qgcApp
()
->
toolbox
()
->
corePlugin
()
->
valuesWidgetDefaultSettings
(
this
);
emit
valuesModelChanged
(
_valuesModel
);
}
}
}
void
ValuesWidgetController
::
setSmallValues
(
const
QStringList
&
values
)
void
ValuesWidgetController
::
resetToDefaults
(
void
)
{
{
QSettings
settings
;
QSettings
settings
;
settings
.
beginGroup
(
_groupKey
);
settings
.
beginGroup
(
_groupKey
);
settings
.
setValue
(
_smallValuesKey
,
values
);
settings
.
remove
(
""
);
_loadSettings
();
}
void
ValuesWidgetController
::
setPreventSaveSettings
(
bool
preventSaveSettings
)
{
_preventSaveSettings
=
preventSaveSettings
;
}
InstrumentValue
::
InstrumentValue
(
Vehicle
*
activeVehicle
,
int
fontSize
,
QmlObjectListModel
*
rowModel
)
:
QObject
(
rowModel
)
,
_activeVehicle
(
activeVehicle
)
,
_rowModel
(
rowModel
)
,
_fontSize
(
fontSize
)
{
}
void
InstrumentValue
::
activeVehicleChanged
(
Vehicle
*
activeVehicle
)
{
_activeVehicle
=
activeVehicle
;
if
(
_fact
)
{
_fact
=
nullptr
;
FactGroup
*
factGroup
=
nullptr
;
QString
factName
;
if
(
_factGroupName
==
QStringLiteral
(
"Vehicle"
))
{
factGroup
=
_activeVehicle
;
}
else
{
factGroup
=
_activeVehicle
->
getFactGroup
(
_factGroupName
);
}
if
(
factGroup
)
{
_fact
=
factGroup
->
getFact
(
factName
);
}
emit
factChanged
(
_fact
);
}
}
void
InstrumentValue
::
setFact
(
QString
factGroupName
,
QString
factName
,
QString
label
)
{
if
(
_fact
)
{
_fact
=
nullptr
;
}
FactGroup
*
factGroup
=
nullptr
;
if
(
factGroupName
==
QStringLiteral
(
"Vehicle"
))
{
factGroup
=
_activeVehicle
;
}
else
{
factGroup
=
_activeVehicle
->
getFactGroup
(
factGroupName
);
}
if
(
factGroup
)
{
_fact
=
factGroup
->
getFact
(
factName
);
}
if
(
_fact
)
{
_factGroupName
=
factGroupName
;
_label
=
label
;
}
else
{
_factGroupName
.
clear
();
_label
.
clear
();
}
emit
labelChanged
(
_label
);
emit
factChanged
(
_fact
);
emit
factGroupNameChanged
(
_factGroupName
);
}
void
InstrumentValue
::
_setFontSize
(
int
fontSize
)
{
if
(
fontSize
!=
_fontSize
)
{
_fontSize
=
fontSize
;
emit
fontSizeChanged
(
fontSize
);
}
}
void
InstrumentValue
::
setFontSize
(
int
fontSize
)
{
_setFontSize
(
fontSize
);
// All other items in row must change to match
for
(
int
i
=
0
;
i
<
_rowModel
->
count
();
i
++
)
{
InstrumentValue
*
instrumentValue
=
_rowModel
->
value
<
InstrumentValue
*>
(
i
);
if
(
instrumentValue
!=
this
)
{
instrumentValue
->
_setFontSize
(
fontSize
);
}
}
}
void
InstrumentValue
::
saveToSettings
(
QSettings
&
settings
)
const
{
if
(
_fact
)
{
settings
.
setValue
(
_factGroupNameKey
,
_factGroupName
);
settings
.
setValue
(
_factNameKey
,
_fact
->
name
());
}
else
{
settings
.
setValue
(
_factGroupNameKey
,
""
);
settings
.
setValue
(
_factNameKey
,
""
);
}
settings
.
setValue
(
_labelKey
,
_label
);
settings
.
setValue
(
_fontSizeKey
,
_fontSize
);
settings
.
setValue
(
_showUnitsKey
,
_showUnits
);
}
void
InstrumentValue
::
readFromSettings
(
const
QSettings
&
settings
)
{
_factGroupName
=
settings
.
value
(
_factGroupNameKey
).
toString
();
_label
=
settings
.
value
(
_labelKey
).
toString
();
_fontSize
=
settings
.
value
(
_fontSizeKey
).
toInt
();
_showUnits
=
settings
.
value
(
_showUnitsKey
).
toBool
();
QString
factName
=
settings
.
value
(
_factNameKey
).
toString
();
if
(
!
factName
.
isEmpty
())
{
setFact
(
_factGroupName
,
factName
,
_label
);
}
emit
factChanged
(
_fact
);
emit
factGroupNameChanged
(
_factGroupName
);
emit
labelChanged
(
_label
);
emit
fontSizeChanged
(
_fontSize
);
emit
showUnitsChanged
(
_showUnits
);
}
void
InstrumentValue
::
setLabel
(
const
QString
&
label
)
{
if
(
label
!=
_label
)
{
_label
=
label
;
emit
labelChanged
(
label
);
}
}
void
InstrumentValue
::
setShowUnits
(
bool
showUnits
)
{
if
(
showUnits
!=
_showUnits
)
{
_showUnits
=
showUnits
;
emit
showUnitsChanged
(
showUnits
);
}
}
void
InstrumentValue
::
clearFact
(
void
)
{
_fact
=
nullptr
;
_factGroupName
.
clear
();
_label
.
clear
();
_showUnits
=
true
;
_smallValues
=
values
;
emit
factChanged
(
_fact
);
emit
smallValuesChanged
(
values
);
emit
factGroupNameChanged
(
_factGroupName
);
emit
labelChanged
(
_label
);
emit
showUnitsChanged
(
_showUnits
);
}
}
src/FlightMap/Widgets/ValuesWidgetController.h
View file @
60d75808
...
@@ -7,42 +7,124 @@
...
@@ -7,42 +7,124 @@
*
*
****************************************************************************/
****************************************************************************/
#pragma once
#ifndef ValuesWidgetController_H
#include "FactSystem.h"
#define ValuesWidgetController_H
#include "QmlObjectListModel.h"
#include "QGCApplication.h"
#include <QObject>
#include <QObject>
class
ValuesWidgetController
;
class
InstrumentValue
:
public
QObject
{
Q_OBJECT
public:
enum
FontSize
{
DefaultFontSize
=
0
,
SmallFontSize
,
MediumFontSize
,
LargeFontSize
};
InstrumentValue
(
Vehicle
*
activeVehicle
,
int
fontSize
,
QmlObjectListModel
*
rowModel
);
Q_PROPERTY
(
QString
factGroupName
MEMBER
_factGroupName
NOTIFY
factGroupNameChanged
)
Q_PROPERTY
(
Fact
*
fact
READ
fact
NOTIFY
factChanged
)
Q_PROPERTY
(
QString
label
READ
label
WRITE
setLabel
NOTIFY
labelChanged
)
Q_PROPERTY
(
int
fontSize
READ
fontSize
WRITE
setFontSize
NOTIFY
fontSizeChanged
)
Q_PROPERTY
(
bool
showUnits
READ
showUnits
WRITE
setShowUnits
NOTIFY
showUnitsChanged
)
Q_INVOKABLE
void
setFact
(
QString
factGroupName
,
QString
factName
,
QString
label
);
Q_INVOKABLE
void
clearFact
(
void
);
Fact
*
fact
(
void
)
{
return
_fact
;
}
int
fontSize
(
void
)
const
{
return
_fontSize
;
}
QString
label
(
void
)
const
{
return
_label
;
}
bool
showUnits
(
void
)
const
{
return
_showUnits
;
}
void
setFontSize
(
int
fontSize
);
void
setLabel
(
const
QString
&
label
);
void
setShowUnits
(
bool
showUnits
);
void
activeVehicleChanged
(
Vehicle
*
activeVehicle
);
void
saveToSettings
(
QSettings
&
settings
)
const
;
void
readFromSettings
(
const
QSettings
&
settings
);
signals:
void
factChanged
(
Fact
*
fact
);
void
factGroupNameChanged
(
QString
factGroup
);
void
labelChanged
(
QString
label
);
void
fontSizeChanged
(
int
fontSize
);
void
showUnitsChanged
(
bool
showUnits
);
private
slots
:
private:
void
_setFontSize
(
int
fontSize
);
Vehicle
*
_activeVehicle
=
nullptr
;
QmlObjectListModel
*
_rowModel
=
nullptr
;
Fact
*
_fact
=
nullptr
;
QString
_factGroupName
;
QString
_label
;
bool
_showUnits
=
true
;
int
_fontSize
=
DefaultFontSize
;
static
const
char
*
_factGroupNameKey
;
static
const
char
*
_factNameKey
;
static
const
char
*
_labelKey
;
static
const
char
*
_fontSizeKey
;
static
const
char
*
_showUnitsKey
;
};
class
ValuesWidgetController
:
public
QObject
class
ValuesWidgetController
:
public
QObject
{
{
Q_OBJECT
Q_OBJECT
public:
public:
ValuesWidgetController
(
void
);
ValuesWidgetController
(
bool
forDefaultSettingsCreation
=
false
);
Q_PROPERTY
(
QStringList
largeValues
READ
largeValues
WRITE
setLargeValues
NOTIFY
largeValuesChanged
)
Q_PROPERTY
(
QmlObjectListModel
*
valuesModel
READ
valuesModel
NOTIFY
valuesModelChanged
)
Q_PROPERTY
(
QStringList
smallValues
READ
smallValues
WRITE
setSmallValues
NOTIFY
smallValuesChanged
)
Q_PROPERTY
(
QStringList
altitudeProperties
READ
altitudeProperties
CONSTANT
)
Q_INVOKABLE
InstrumentValue
*
appendColumn
(
int
rowIndex
);
Q_INVOKABLE
void
deleteLastColumn
(
int
rowIndex
);
Q_INVOKABLE
QmlObjectListModel
*
appendRow
(
bool
addBlanksColumn
=
true
);
Q_INVOKABLE
QmlObjectListModel
*
insertRow
(
int
atIndex
,
bool
addBlanksColumn
=
true
);
Q_INVOKABLE
void
deleteRow
(
int
rowIndex
);
Q_INVOKABLE
int
fontSizeForRow
(
int
rowIndex
);
Q_INVOKABLE
void
setFontSizeForRow
(
int
rowIndex
,
int
fontSize
);
Q_INVOKABLE
void
resetToDefaults
(
void
);
QStringList
largeValues
(
void
)
const
{
return
_largeValues
;
}
QmlObjectListModel
*
valuesModel
(
void
)
{
return
_valuesModel
;
}
QStringList
smallValues
(
void
)
const
{
return
_smallValues
;
}
void
setLargeValues
(
const
QStringList
&
values
);
/// Turn on/off saving changes to QSettings
void
setSmallValues
(
const
QStringList
&
values
);
void
setPreventSaveSettings
(
bool
preventSaveSettings
);
QStringList
altitudeProperties
(
void
)
const
{
return
_altitudeProperties
;
}
signals:
signals:
void
largeValuesChanged
(
QStringList
values
);
void
valuesModelChanged
(
QmlObjectListModel
*
valuesModel
);
void
smallValuesChanged
(
QStringList
values
);
private
slots
:
void
_activeVehicleChanged
(
Vehicle
*
activeVehicle
);
Vehicle
*
_currentActiveVehicle
(
void
);
void
_saveSettings
(
void
);
private:
private:
QStringList
_largeValues
;
bool
_validRowIndex
(
int
rowIndex
);
QStringList
_smallValues
;
InstrumentValue
*
_createNewInstrumentValueWorker
(
Vehicle
*
activeVehicle
,
int
fontSize
,
QmlObjectListModel
*
rowModel
);
QStringList
_altitudeProperties
;
void
_loadSettings
(
void
);
MultiVehicleManager
*
_multiVehicleMgr
=
nullptr
;
QmlObjectListModel
*
_valuesModel
=
nullptr
;
QVariantList
_rgFontSizeByRow
;
bool
_preventSaveSettings
=
false
;
static
const
char
*
_groupKey
;
static
const
char
*
_groupKey
;
static
const
char
*
_largeValuesKey
;
static
const
char
*
_rowsKey
;
static
const
char
*
_smallValuesKey
;
static
const
char
*
_columnsKey
;
};
static
const
char
*
_deprecatedGroupKey
;
static
const
char
*
_deprecatedLargeValuesKey
;
static
const
char
*
_deprecatedSmallValuesKey
;
#endif
};
src/QGCApplication.cc
View file @
60d75808
...
@@ -100,6 +100,7 @@
...
@@ -100,6 +100,7 @@
#include "LogReplayLink.h"
#include "LogReplayLink.h"
#include "VehicleObjectAvoidance.h"
#include "VehicleObjectAvoidance.h"
#include "TrajectoryPoints.h"
#include "TrajectoryPoints.h"
#include "ValuesWidgetController.h"
#if defined(QGC_ENABLE_PAIRING)
#if defined(QGC_ENABLE_PAIRING)
#include "PairingManager.h"
#include "PairingManager.h"
...
@@ -523,6 +524,7 @@ void QGCApplication::_initCommon()
...
@@ -523,6 +524,7 @@ void QGCApplication::_initCommon()
qmlRegisterUncreatableType
<
QGCMapPolygon
>
(
"QGroundControl.FlightMap"
,
1
,
0
,
"QGCMapPolygon"
,
kRefOnly
);
qmlRegisterUncreatableType
<
QGCMapPolygon
>
(
"QGroundControl.FlightMap"
,
1
,
0
,
"QGCMapPolygon"
,
kRefOnly
);
qmlRegisterUncreatableType
<
QGCGeoBoundingCube
>
(
"QGroundControl.FlightMap"
,
1
,
0
,
"QGCGeoBoundingCube"
,
kRefOnly
);
qmlRegisterUncreatableType
<
QGCGeoBoundingCube
>
(
"QGroundControl.FlightMap"
,
1
,
0
,
"QGCGeoBoundingCube"
,
kRefOnly
);
qmlRegisterUncreatableType
<
TrajectoryPoints
>
(
"QGroundControl.FlightMap"
,
1
,
0
,
"TrajectoryPoints"
,
kRefOnly
);
qmlRegisterUncreatableType
<
TrajectoryPoints
>
(
"QGroundControl.FlightMap"
,
1
,
0
,
"TrajectoryPoints"
,
kRefOnly
);
qmlRegisterUncreatableType
<
InstrumentValue
>
(
kQGCControllers
,
1
,
0
,
"InstrumentValue"
,
kRefOnly
);
qmlRegisterType
<
QGCMapCircle
>
(
"QGroundControl.FlightMap"
,
1
,
0
,
"QGCMapCircle"
);
qmlRegisterType
<
QGCMapCircle
>
(
"QGroundControl.FlightMap"
,
1
,
0
,
"QGCMapCircle"
);
...
...
src/QmlControls/PageView.qml
View file @
60d75808
...
@@ -17,6 +17,7 @@ Rectangle {
...
@@ -17,6 +17,7 @@ Rectangle {
property
real
_margins
:
ScreenTools
.
defaultFontPixelWidth
/
2
property
real
_margins
:
ScreenTools
.
defaultFontPixelWidth
/
2
property
real
_pageWidth
:
_root
.
width
property
real
_pageWidth
:
_root
.
width
property
var
_instrumentPages
:
QGroundControl
.
corePlugin
.
instrumentPages
property
var
_instrumentPages
:
QGroundControl
.
corePlugin
.
instrumentPages
property
bool
_settingsUnlocked
:
false
QGCPalette
{
id
:
qgcPal
;
colorGroupEnabled
:
parent
.
enabled
}
QGCPalette
{
id
:
qgcPal
;
colorGroupEnabled
:
parent
.
enabled
}
...
@@ -29,11 +30,13 @@ Rectangle {
...
@@ -29,11 +30,13 @@ Rectangle {
centeredLabel
:
true
centeredLabel
:
true
font.pointSize
:
ScreenTools
.
smallFontPointSize
font.pointSize
:
ScreenTools
.
smallFontPointSize
onCurrentIndexChanged
:
_settingsUnlocked
=
false
QGCColoredImage
{
QGCColoredImage
{
anchors.leftMargin
:
_margins
anchors.leftMargin
:
_margins
anchors.left
:
parent
.
left
anchors.left
:
parent
.
left
anchors.verticalCenter
:
parent
.
verticalCenter
anchors.verticalCenter
:
parent
.
verticalCenter
source
:
"
/res/gear-black.svg
"
source
:
pageWidgetLoader
.
item
.
showLockIcon
?
(
_settingsUnlocked
?
"
/res/LockOpen.svg
"
:
"
/res/LockClosed.svg
"
)
:
"
/res/gear-black.svg
"
mipmap
:
true
mipmap
:
true
height
:
parent
.
height
*
0.7
height
:
parent
.
height
*
0.7
width
:
height
width
:
height
...
@@ -44,7 +47,14 @@ Rectangle {
...
@@ -44,7 +47,14 @@ Rectangle {
QGCMouseArea
{
QGCMouseArea
{
fillItem
:
parent
fillItem
:
parent
onClicked
:
pageWidgetLoader
.
item
.
showSettings
()
onClicked
:
{
if
(
pageWidgetLoader
.
item
.
showLockIcon
)
{
_settingsUnlocked
=
!
_settingsUnlocked
pageWidgetLoader
.
item
.
showSettings
(
_settingsUnlocked
)
}
else
{
pageWidgetLoader
.
item
.
showSettings
()
}
}
}
}
}
}
}
}
...
...
src/QmlControls/QGCLabel.qml
View file @
60d75808
import
QtQuick
2.3
import
QtQuick
2.12
import
QtQuick
.
Controls
1.2
import
QtQuick
.
Controls
2.12
import
QtQuick
.
Controls
.
Styles
1.4
import
QGroundControl
.
Palette
1.0
import
QGroundControl
.
Palette
1.0
import
QGroundControl
.
ScreenTools
1.0
import
QGroundControl
.
ScreenTools
1.0
Text
{
Text
{
font.pointSize
:
ScreenTools
.
defaultFontPointSize
font.pointSize
:
ScreenTools
.
defaultFontPointSize
...
...
src/api/QGCCorePlugin.cc
View file @
60d75808
...
@@ -22,6 +22,7 @@
...
@@ -22,6 +22,7 @@
#endif
#endif
#include "QGCLoggingCategory.h"
#include "QGCLoggingCategory.h"
#include "QGCCameraManager.h"
#include "QGCCameraManager.h"
#include "ValuesWidgetController.h"
#include <QtQml>
#include <QtQml>
#include <QQmlEngine>
#include <QQmlEngine>
...
@@ -406,10 +407,40 @@ QString QGCCorePlugin::showAdvancedUIMessage() const
...
@@ -406,10 +407,40 @@ QString QGCCorePlugin::showAdvancedUIMessage() const
"Are you sure you want to enable Advanced Mode?"
);
"Are you sure you want to enable Advanced Mode?"
);
}
}
void
QGCCorePlugin
::
valuesWidgetDefaultSettings
(
QStringList
&
largeValues
,
QStringList
&
smallValues
)
QmlObjectListModel
*
QGCCorePlugin
::
valuesWidgetDefaultSettings
(
QObject
*
valuesModelParent
)
{
{
Q_UNUSED
(
smallValues
);
ValuesWidgetController
controller
(
true
/* forDefaultSettingsCreation */
);
largeValues
<<
"Vehicle.altitudeRelative"
<<
"Vehicle.groundSpeed"
<<
"Vehicle.flightTime"
;
// We don't want these to get written out to settings. This way if the user doesn't modify them
// they will get new changes to default settings from newer builds automatically on next run.
controller
.
setPreventSaveSettings
(
true
);
QmlObjectListModel
*
columnModel
=
controller
.
appendRow
();
InstrumentValue
*
colValue
=
columnModel
->
value
<
InstrumentValue
*>
(
0
);
colValue
->
setFact
(
"Vehicle"
,
"altitudeRelative"
,
QString
());
colValue
->
setLabel
(
colValue
->
fact
()
->
shortDescription
());
colValue
->
setShowUnits
(
true
);
colValue
->
setFontSize
(
InstrumentValue
::
LargeFontSize
);
columnModel
=
controller
.
appendRow
();
colValue
=
columnModel
->
value
<
InstrumentValue
*>
(
0
);
colValue
->
setFact
(
"Vehicle"
,
"groundSpeed"
,
QString
());
colValue
->
setLabel
(
colValue
->
fact
()
->
shortDescription
());
colValue
->
setShowUnits
(
true
);
colValue
->
setFontSize
(
InstrumentValue
::
DefaultFontSize
);
columnModel
=
controller
.
appendRow
();
colValue
=
columnModel
->
value
<
InstrumentValue
*>
(
0
);
colValue
->
setFact
(
"Vehicle"
,
"flightTime"
,
QString
());
colValue
->
setLabel
(
colValue
->
fact
()
->
shortDescription
());
colValue
->
setShowUnits
(
false
);
colValue
->
setFontSize
(
InstrumentValue
::
DefaultFontSize
);
controller
.
setPreventSaveSettings
(
false
);
controller
.
valuesModel
()
->
setParent
(
valuesModelParent
);
return
controller
.
valuesModel
();
}
}
QQmlApplicationEngine
*
QGCCorePlugin
::
createRootWindow
(
QObject
*
parent
)
QQmlApplicationEngine
*
QGCCorePlugin
::
createRootWindow
(
QObject
*
parent
)
...
...
src/api/QGCCorePlugin.h
View file @
60d75808
...
@@ -105,8 +105,9 @@ public:
...
@@ -105,8 +105,9 @@ public:
/// Allows a plugin to override the specified color name from the palette
/// Allows a plugin to override the specified color name from the palette
virtual
void
paletteOverride
(
QString
colorName
,
QGCPalette
::
PaletteColorInfo_t
&
colorInfo
);
virtual
void
paletteOverride
(
QString
colorName
,
QGCPalette
::
PaletteColorInfo_t
&
colorInfo
);
/// Allows the plugin to override the default settings for the Values Widget large and small values
/// Return the default Intrument Value model for the Values Widget. The returned model will be
virtual
void
valuesWidgetDefaultSettings
(
QStringList
&
largeValues
,
QStringList
&
smallValues
);
/// re-parented to valuesModelParent for ownership.
virtual
QmlObjectListModel
*
valuesWidgetDefaultSettings
(
QObject
*
valuesModelParent
);
/// Allows the plugin to override the creation of the root (native) window.
/// Allows the plugin to override the creation of the root (native) window.
virtual
QQmlApplicationEngine
*
createRootWindow
(
QObject
*
parent
);
virtual
QQmlApplicationEngine
*
createRootWindow
(
QObject
*
parent
);
...
...
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