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
fa793fe4
Commit
fa793fe4
authored
Apr 23, 2019
by
Stefan Dunca
Committed by
Gus Grubba
Apr 25, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
New toolstrip based on QGCHoverButton
parent
a08427a3
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
121 additions
and
244 deletions
+121
-244
FlightDisplayView.qml
src/FlightDisplay/FlightDisplayView.qml
+4
-4
PlanView.qml
src/PlanView/PlanView.qml
+57
-58
DropPanel.qml
src/QmlControls/DropPanel.qml
+1
-1
ToolStrip.qml
src/QmlControls/ToolStrip.qml
+59
-181
No files found.
src/FlightDisplay/FlightDisplayView.qml
View file @
fa793fe4
...
...
@@ -561,16 +561,16 @@ Item {
ToolStrip
{
visible
:
(
activeVehicle
?
activeVehicle
.
guidedModeSupported
:
true
)
&&
!
QGroundControl
.
videoManager
.
fullScreen
id
:
toolStrip
anchors.leftMargin
:
isInstrumentRight
()
?
ScreenTools
.
defaultFontPixelWidth
:
undefined
anchors.leftMargin
:
isInstrumentRight
()
?
ScreenTools
.
defaultFontPixelWidth
*
2
:
undefined
anchors.left
:
isInstrumentRight
()
?
_mapAndVideo
.
left
:
undefined
anchors.rightMargin
:
isInstrumentRight
()
?
undefined
:
ScreenTools
.
defaultFontPixelWidth
anchors.right
:
isInstrumentRight
()
?
undefined
:
_mapAndVideo
.
right
anchors.topMargin
:
ScreenTools
.
toolbarHeight
+
(
_margins
*
2
)
anchors.topMargin
:
ScreenTools
.
toolbarHeight
+
anchors
.
leftMargin
anchors.top
:
_mapAndVideo
.
top
z
:
_mapAndVideo
.
z
+
4
title
:
qsTr
(
"
Fly
"
)
maxHeight
:
(
_flightVideo
.
visible
?
_flightVideo
.
y
:
parent
.
height
)
-
toolStrip
.
y
buttonVisible
:
[
_useChecklist
,
_guidedController
.
showTakeoff
||
!
_guidedController
.
showLand
,
_guidedController
.
showLand
&&
!
_guidedController
.
showTakeoff
,
true
,
true
,
tru
e
]
buttonVisible
:
[
_useChecklist
,
_guidedController
.
showTakeoff
||
!
_guidedController
.
showLand
,
_guidedController
.
showLand
&&
!
_guidedController
.
showTakeoff
,
true
,
_guidedController
.
showPause
,
!
_guidedController
.
showPaus
e
]
buttonEnabled
:
[
_useChecklist
&&
activeVehicle
,
_guidedController
.
showTakeoff
,
_guidedController
.
showLand
,
_guidedController
.
showRTL
,
_guidedController
.
showPause
,
_anyActionAvailable
]
property
bool
_anyActionAvailable
:
_guidedController
.
showStartMission
||
_guidedController
.
showResumeMission
||
_guidedController
.
showChangeAlt
||
_guidedController
.
showLandAbort
...
...
src/PlanView/PlanView.qml
View file @
fa793fe4
...
...
@@ -286,7 +286,7 @@ Item {
var
sequenceNumber
=
_missionController
.
insertROIMissionItem
(
coordinate
,
index
)
_missionController
.
setCurrentPlanViewIndex
(
sequenceNumber
,
true
)
_addROIOnClick
=
false
toolStrip
.
uncheckAll
()
toolStrip
.
lastClickedButton
.
checked
=
false
}
property
int
_moveDialogMissionItemIndex
...
...
@@ -533,15 +533,16 @@ Item {
border.width
:
object
.
lineWidth
}
}
}
//-----------------------------------------------------------
// Left tool strip
ToolStrip
{
id
:
toolStrip
anchors.leftMargin
:
ScreenTools
.
defaultFontPixelWidth
anchors.leftMargin
:
ScreenTools
.
defaultFontPixelWidth
*
2
anchors.left
:
parent
.
left
anchors.topMargin
:
_toolButtonTop
Margin
anchors.topMargin
:
_toolButtonTopMargin
+
anchors
.
left
Margin
anchors.top
:
parent
.
top
color
:
qgcPal
.
window
title
:
qsTr
(
"
Plan
"
)
z
:
QGroundControl
.
zOrderWidgets
showAlternateIcon
:
[
_planMasterController
.
dirty
,
false
,
false
,
false
,
false
,
false
,
false
]
rotateImage
:
[
_planMasterController
.
syncInProgress
,
false
,
false
,
false
,
false
,
false
,
false
]
...
...
@@ -549,7 +550,6 @@ Item {
buttonEnabled
:
[
!
_planMasterController
.
syncInProgress
,
true
,
true
,
true
,
true
,
true
,
true
]
buttonVisible
:
[
true
,
true
,
_waypointsOnlyMode
,
true
,
true
,
_showZoom
,
_showZoom
]
maxHeight
:
mapScale
.
y
-
toolStrip
.
y
property
bool
_showZoom
:
!
ScreenTools
.
isMobile
model
:
[
...
...
@@ -613,7 +613,6 @@ Item {
}
}
}
}
//-----------------------------------------------------------
// Right pane for mission editing controls
...
...
src/QmlControls/DropPanel.qml
View file @
fa793fe4
...
...
@@ -63,7 +63,7 @@ Item {
if
(
visible
)
{
visible
=
false
_dropDownComponent
=
undefined
toolStrip
.
uncheckAll
()
toolStrip
.
lastClickedButton
.
checked
=
false
}
}
...
...
src/QmlControls/ToolStrip.qml
View file @
fa793fe4
...
...
@@ -8,217 +8,95 @@
****************************************************************************/
import
QtQuick
2.11
import
QtQuick
.
Controls
1.4
import
QtQuick
.
Controls
2.2
import
QGroundControl
.
ScreenTools
1.0
import
QGroundControl
.
Palette
1.0
import
QGroundControl
.
Controls
1.0
Rectangle
{
id
:
_root
color
:
qgcPal
.
window
width
:
ScreenTools
.
isMobile
?
ScreenTools
.
minTouchPixels
:
ScreenTools
.
defaultFontPixelWidth
*
7
color
:
qgcPal
.
window
Shade
width
:
_idealWidth
<
repeater
.
contentWidth
?
repeater
.
contentWidth
:
_idealWidth
height
:
toolStripColumn
.
height
+
(
toolStripColumn
.
anchors
.
margins
*
2
)
radius
:
_radius
border.width
:
1
border.color
:
qgcPal
.
globalTheme
===
QGCPalette
.
Light
?
Qt
.
rgba
(
0
,
0
,
0
,
0.35
)
:
Qt
.
rgba
(
1
,
1
,
1
,
0.35
)
radius
:
ScreenTools
.
defaultFontPixelWidth
/
2
property
string
title
:
"
Title
"
property
alias
model
:
repeater
.
model
property
var
showAlternateIcon
///< List of bool values, one for each button in strip - true: show alternate icon, false: show normal icon
property
var
rotateImage
///< List of bool values, one for each button in strip - true: animation rotation, false: static image
property
var
animateImage
///< List of bool values, one for each button in strip - true: animate image, false: static image
property
var
buttonEnabled
///< List of bool values, one for each button in strip - true: button enabled, false: button disabled
property
var
buttonVisible
///< List of bool values, one for each button in strip - true: button visible, false: button invisible
property
real
maxHeight
///< Maximum height for control, determines whether text is hidden to make control shorter
property
var
showAlternateIcon
///< List of bool values, one for each button in strip - true: show alternate icon, false: show normal icon
signal
clicked
(
int
index
,
bool
checked
)
property
AbstractButton
lastClickedButton
:
null
readonly
property
real
_radius
:
ScreenTools
.
defaultFontPixelWidth
/
2
readonly
property
real
_margin
:
ScreenTools
.
defaultFontPixelWidth
/
2
readonly
property
real
_buttonSpacing
:
ScreenTools
.
defaultFontPixelHeight
/
4
// Ensure we don't get lower than
property
real
_idealWidth
:
(
ScreenTools
.
isMobile
?
ScreenTools
.
minTouchPixels
:
ScreenTools
.
defaultFontPixelWidth
*
10
)
+
toolStripColumn
.
anchors
.
margins
*
2
QGCPalette
{
id
:
qgcPal
}
ExclusiveGroup
{
id
:
dropButtonsExclusiveGroup
}
function
uncheckAll
()
{
dropButtonsExclusiveGroup
.
current
=
null
// Signal all toggles as off
for
(
var
i
=
0
;
i
<
model
.
length
;
i
++
)
{
if
(
model
[
i
].
toggle
===
true
)
{
_root
.
clicked
(
i
,
false
)
}
}
}
signal
clicked
(
int
index
,
bool
checked
)
DeadMouseArea
{
anchors.fill
:
parent
QGCPalette
{
id
:
qgcPal
}
ButtonGroup
{
id
:
buttonGroup
exclusive
:
false
}
Column
{
id
:
toolStripColumn
anchors.margins
:
ScreenTools
.
defaultFontPixelWidth
/
2
anchors.margins
:
ScreenTools
.
defaultFontPixelWidth
*
0.8
anchors.top
:
parent
.
top
anchors.left
:
parent
.
left
anchors.right
:
parent
.
right
spacing
:
_buttonSpacing
QGCLabel
{
anchors.horizontalCenter
:
parent
.
horizontalCenter
text
:
title
font.pointSize
:
ScreenTools
.
mobile
?
ScreenTools
.
smallFontPointSize
:
ScreenTools
.
defaultFontPointSize
}
Repeater
{
id
:
repeater
Rectangle
{
anchors.left
:
parent
.
left
anchors.right
:
parent
.
right
height
:
1
color
:
qgcPal
.
text
}
QGCHoverButton
{
id
:
buttonTemplate
Column
{
anchors.left
:
parent
.
left
anchors.right
:
parent
.
right
spacing
:
_buttonSpacing
color
:
_root
.
color
Repeater
{
id
:
repeater
anchors.left
:
toolStripColumn
.
left
anchors.right
:
toolStripColumn
.
right
height
:
width
radius
:
ScreenTools
.
defaultFontPixelWidth
/
2
fontPointSize
:
ScreenTools
.
isMobile
?
ScreenTools
.
smallFontPointSize
:
ScreenTools
.
mediumFontPointSize
delegate
:
FocusScope
{
id
:
scope
width
:
toolStripColumn
.
width
height
:
buttonRect
.
height
enabled
:
_root
.
buttonEnabled
?
_root
.
buttonEnabled
[
index
]
:
true
visible
:
_root
.
buttonVisible
?
_root
.
buttonVisible
[
index
]
:
true
imageSource
:
(
_root
.
showAlternateIcon
&&
_root
.
showAlternateIcon
[
index
])
?
_alternateIconSource
:
_iconSource
text
:
modelData
.
name
property
bool
checked
:
false
property
ExclusiveGroup
exclusiveGroup
:
dropButtonsExclusiveGroup
property
bool
_buttonEnabled
:
_root
.
buttonEnabled
?
_root
.
buttonEnabled
[
index
]
:
true
property
var
_iconSource
:
modelData
.
iconSource
property
var
_alternateIconSource
:
modelData
.
alternateIconSource
property
var
_source
:
(
_root
.
showAlternateIcon
&&
_root
.
showAlternateIcon
[
index
])
?
_alternateIconSource
:
_iconSource
property
bool
rotateImage
:
_root
.
rotateImage
?
_root
.
rotateImage
[
index
]
:
false
property
bool
animateImage
:
_root
.
animateImage
?
_root
.
animateImage
[
index
]
:
false
property
bool
_hovered
:
false
property
bool
_showHighlight
:
checked
||
(
_buttonEnabled
&&
_hovered
)
QGCPalette
{
id
:
_repeaterPal
;
colorGroupEnabled
:
_buttonEnabled
}
onExclusiveGroupChanged
:
{
if
(
exclusiveGroup
)
{
exclusiveGroup
.
bindCheckable
(
scope
)
}
}
ButtonGroup.group
:
buttonGroup
// Only drop pannel and toggleable are checkable
checkable
:
modelData
.
dropPanelComponent
!==
undefined
||
(
modelData
.
toggle
!==
undefined
&&
modelData
.
toggle
)
onRotateImageChanged
:
{
if
(
rotateImage
)
{
imageRotation
.
running
=
true
}
else
{
imageRotation
.
running
=
false
buttonImage
.
rotation
=
0
}
}
onAnimateImageChanged
:
{
if
(
animateImage
)
{
opacityAnimation
.
running
=
true
}
else
{
opacityAnimation
.
running
=
false
buttonImage
.
opacity
=
1
}
}
Rectangle
{
id
:
buttonRect
anchors.left
:
parent
.
left
anchors.right
:
parent
.
right
height
:
buttonColumn
.
height
color
:
_showHighlight
?
_repeaterPal
.
buttonHighlight
:
_repeaterPal
.
window
Column
{
id
:
buttonColumn
anchors.left
:
parent
.
left
anchors.right
:
parent
.
right
spacing
:
-
buttonImage
.
height
/
8
QGCColoredImage
{
id
:
buttonImage
anchors.left
:
parent
.
left
anchors.right
:
parent
.
right
height
:
width
*
0.8
//anchors.centerIn: parent
source
:
_source
sourceSize.height
:
height
fillMode
:
Image
.
PreserveAspectFit
mipmap
:
true
smooth
:
true
color
:
_showHighlight
?
_repeaterPal
.
buttonHighlightText
:
_repeaterPal
.
text
RotationAnimation
on
rotation
{
id
:
imageRotation
loops
:
Animation
.
Infinite
from
:
0
to
:
360
duration
:
500
running
:
false
}
onClicked
:
{
dropPanel
.
hide
()
// DropPanel will call hide on "lastClickedButton"
NumberAnimation
on
opacity
{
id
:
opacityAnimation
running
:
false
from
:
0
to
:
1.0
loops
:
Animation
.
Infinite
duration
:
2000
// Uncheck other checked buttons
// TODO: Implement ButtonGroup exclusive with checkable and uncheckable and get rid of this workaround
for
(
var
i
=
0
;
i
<
buttonGroup
.
buttons
.
length
;
i
++
)
{
var
b
=
buttonGroup
.
buttons
[
i
]
if
(
b
!==
buttonTemplate
)
{
b
.
checked
=
false
;
}
}
QGCLabel
{
id
:
buttonLabel
anchors.horizontalCenter
:
parent
.
horizontalCenter
font.pointSize
:
ScreenTools
.
smallFontPointSize
text
:
modelData
.
name
color
:
_showHighlight
?
_repeaterPal
.
buttonHighlightText
:
_repeaterPal
.
text
enabled
:
_buttonEnabled
}
}
// Column
QGCMouseArea
{
anchors.fill
:
parent
visible
:
_buttonEnabled
hoverEnabled
:
true
preventStealing
:
true
onContainsMouseChanged
:
_hovered
=
containsMouse
onContainsPressChanged
:
_hovered
=
containsPress
onClicked
:
{
scope
.
focus
=
true
if
(
modelData
.
dropPanelComponent
===
undefined
)
{
dropPanel
.
hide
()
if
(
modelData
.
toggle
===
true
)
{
checked
=
!
checked
}
else
{
// dropPanel.hide above will close panel, but we need to do this to clear toggles
uncheckAll
()
}
_root
.
clicked
(
index
,
checked
)
}
else
{
if
(
checked
)
{
dropPanel
.
hide
()
// hide affects checked, so this needs to be duplicated inside not outside if
}
else
{
dropPanel
.
hide
()
// hide affects checked, so this needs to be duplicated inside not outside if
uncheckAll
()
checked
=
true
}
else
if
(
checked
)
{
var
panelEdgeTopPoint
=
mapToItem
(
_root
,
width
,
0
)
dropPanel
.
show
(
panelEdgeTopPoint
,
height
,
modelData
.
dropPanelComponent
)
}
lastClickedButton
=
buttonTemplate
}
}
}
}
// Rectangle
}
// FocusScope
}
}
}
DropPanel
{
...
...
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