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
26b3b8d0
Commit
26b3b8d0
authored
Sep 21, 2017
by
Gus Grubba
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add camera control (and settings) to CameraPageView.
parent
93627497
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
263 additions
and
472 deletions
+263
-472
qgcresources.qrc
qgcresources.qrc
+0
-1
qgroundcontrol.qrc
qgroundcontrol.qrc
+0
-1
CameraControl.qml
src/Camera/CameraControl.qml
+0
-341
QGCCameraManager.cc
src/Camera/QGCCameraManager.cc
+0
-7
QGCCameraManager.h
src/Camera/QGCCameraManager.h
+0
-4
camera_settings.svg
src/Camera/images/camera_settings.svg
+0
-102
FlightDisplayViewVideo.qml
src/FlightDisplay/FlightDisplayViewVideo.qml
+0
-9
CameraPageWidget.qml
src/FlightMap/Widgets/CameraPageWidget.qml
+263
-7
No files found.
qgcresources.qrc
View file @
26b3b8d0
...
...
@@ -48,7 +48,6 @@
<file alias="arrow-down.png">src/QmlControls/arrow-down.png</file>
<file alias="camera.svg">resources/camera.svg</file>
<file alias="camera_photo.svg">src/Camera/images/camera_photo.svg</file>
<file alias="camera_settings.svg">src/Camera/images/camera_settings.svg</file>
<file alias="camera_video.svg">src/Camera/images/camera_video.svg</file>
<file alias="check.png">src/QmlControls/check.png</file>
<file alias="FirmwareUpgradeIcon.png">src/VehicleSetup/FirmwareUpgradeIcon.png</file>
...
...
qgroundcontrol.qrc
View file @
26b3b8d0
...
...
@@ -21,7 +21,6 @@
<file alias="BluetoothSettings.qml">src/ui/preferences/BluetoothSettings.qml</file>
<file alias="CameraComponent.qml">src/AutoPilotPlugins/PX4/CameraComponent.qml</file>
<file alias="CameraComponentSummary.qml">src/AutoPilotPlugins/PX4/CameraComponentSummary.qml</file>
<file alias="CameraControl.qml">src/Camera/CameraControl.qml</file>
<file alias="CustomCommandWidget.qml">src/ViewWidgets/CustomCommandWidget.qml</file>
<file alias="DebugWindow.qml">src/ui/preferences/DebugWindow.qml</file>
<file alias="ESP8266Component.qml">src/AutoPilotPlugins/Common/ESP8266Component.qml</file>
...
...
src/Camera/CameraControl.qml
deleted
100644 → 0
View file @
93627497
/****************************************************************************
*
* (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.3
import
QtQuick
.
Controls
1.2
import
QtQuick
.
Dialogs
1.2
import
QtGraphicalEffects
1.0
import
QGroundControl
1.0
import
QGroundControl
.
ScreenTools
1.0
import
QGroundControl
.
Controls
1.0
import
QGroundControl
.
Palette
1.0
import
QGroundControl
.
Vehicle
1.0
import
QGroundControl
.
Controllers
1.0
import
QGroundControl
.
FactSystem
1.0
import
QGroundControl
.
FactControls
1.0
Rectangle
{
id
:
mainRect
height
:
mainRow
.
height
+
(
ScreenTools
.
defaultFontPixelWidth
*
2
)
width
:
mainRow
.
width
+
(
ScreenTools
.
defaultFontPixelWidth
*
2
)
radius
:
ScreenTools
.
defaultFontPixelWidth
*
0.5
color
:
qgcPal
.
globalTheme
===
QGCPalette
.
Light
?
Qt
.
rgba
(
1
,
1
,
1
,
0.95
)
:
Qt
.
rgba
(
0
,
0
,
0
,
0.75
)
border.width
:
1
border.color
:
qgcPal
.
globalTheme
===
QGCPalette
.
Light
?
Qt
.
rgba
(
0
,
0
,
0
,
0.35
)
:
Qt
.
rgba
(
1
,
1
,
1
,
0.35
)
QGCPalette
{
id
:
qgcPal
;
colorGroupEnabled
:
true
}
property
var
_activeVehicle
:
QGroundControl
.
multiVehicleManager
.
activeVehicle
property
var
_dynamicCameras
:
_activeVehicle
?
_activeVehicle
.
dynamicCameras
:
null
property
bool
_isCamera
:
_dynamicCameras
?
_dynamicCameras
.
cameras
.
count
>
0
:
false
property
bool
_cameraModeUndefined
:
_isCamera
?
_dynamicCameras
.
cameras
.
get
(
0
).
cameraMode
===
QGCCameraControl
.
CAMERA_MODE_UNDEFINED
:
true
property
bool
_cameraVideoMode
:
_isCamera
?
_dynamicCameras
.
cameras
.
get
(
0
).
cameraMode
===
QGCCameraControl
.
CAMERA_MODE_VIDEO
:
false
property
bool
_cameraPhotoMode
:
_isCamera
?
_dynamicCameras
.
cameras
.
get
(
0
).
cameraMode
===
QGCCameraControl
.
CAMERA_MODE_PHOTO
:
false
property
var
_camera
:
_isCamera
?
_dynamicCameras
.
cameras
.
get
(
0
)
:
null
// Single camera support for the time being
property
real
_spacers
:
ScreenTools
.
defaultFontPixelHeight
*
0.5
property
real
_labelFieldWidth
:
ScreenTools
.
defaultFontPixelWidth
*
30
property
real
_editFieldWidth
:
ScreenTools
.
defaultFontPixelWidth
*
30
property
bool
_communicationLost
:
_activeVehicle
?
_activeVehicle
.
connectionLost
:
false
property
bool
_hasModes
:
_isCamera
&&
_camera
&&
_camera
.
hasModes
MouseArea
{
anchors.fill
:
parent
onWheel
:
{
wheel
.
accepted
=
true
;
}
onPressed
:
{
mouse
.
accepted
=
true
;
}
onReleased
:
{
mouse
.
accepted
=
true
;
}
}
Connections
{
target
:
QGroundControl
.
multiVehicleManager
.
activeVehicle
onConnectionLostChanged
:
{
if
(
_communicationLost
)
{
if
(
rootLoader
.
sourceComponent
===
cameraSettingsComponent
)
{
rootLoader
.
sourceComponent
=
null
}
}
}
}
Row
{
id
:
mainRow
spacing
:
_spacers
anchors.centerIn
:
parent
Column
{
spacing
:
_spacers
anchors.verticalCenter
:
parent
.
verticalCenter
//-----------------------------------------------------------------
QGCLabel
{
id
:
cameraLabel
text
:
_isCamera
?
_dynamicCameras
.
cameras
.
get
(
0
).
modelName
:
qsTr
(
"
Camera
"
)
font.pointSize
:
ScreenTools
.
smallFontPointSize
anchors.horizontalCenter
:
parent
.
horizontalCenter
}
//-- Camera Mode (visible only if camera has modes)
Rectangle
{
width
:
_hasModes
?
ScreenTools
.
defaultFontPixelWidth
*
12
:
0
height
:
_hasModes
?
ScreenTools
.
defaultFontPixelWidth
*
4
:
0
color
:
qgcPal
.
window
radius
:
height
*
0.5
visible
:
_hasModes
anchors.horizontalCenter
:
parent
.
horizontalCenter
//-- Video Mode
Rectangle
{
width
:
parent
.
height
*
0.9
height
:
parent
.
height
*
0.9
color
:
qgcPal
.
windowShadeDark
radius
:
height
*
0.5
anchors.left
:
parent
.
left
anchors.leftMargin
:
4
anchors.verticalCenter
:
parent
.
verticalCenter
QGCColoredImage
{
anchors.fill
:
parent
source
:
"
/qmlimages/camera_video.svg
"
fillMode
:
Image
.
PreserveAspectFit
sourceSize.height
:
height
color
:
_cameraVideoMode
?
qgcPal
.
colorGreen
:
qgcPal
.
text
MouseArea
{
anchors.fill
:
parent
enabled
:
_cameraPhotoMode
onClicked
:
{
_camera
.
setVideoMode
()
}
}
}
}
//-- Photo Mode
Rectangle
{
width
:
parent
.
height
*
0.9
height
:
parent
.
height
*
0.9
color
:
qgcPal
.
window
radius
:
height
*
0.5
anchors.right
:
parent
.
right
anchors.rightMargin
:
4
anchors.verticalCenter
:
parent
.
verticalCenter
QGCColoredImage
{
anchors.fill
:
parent
source
:
"
/qmlimages/camera_photo.svg
"
fillMode
:
Image
.
PreserveAspectFit
sourceSize.height
:
height
color
:
_cameraPhotoMode
?
qgcPal
.
colorGreen
:
qgcPal
.
text
MouseArea
{
anchors.fill
:
parent
enabled
:
_cameraVideoMode
onClicked
:
{
_camera
.
setPhotoMode
()
}
}
}
}
}
//-- Settings
QGCColoredImage
{
width
:
ScreenTools
.
defaultFontPixelWidth
*
3
height
:
width
sourceSize.width
:
width
source
:
"
/qmlimages/camera_settings.svg
"
fillMode
:
Image
.
PreserveAspectFit
color
:
_cameraModeUndefined
?
qgcPal
.
colorGrey
:
qgcPal
.
text
anchors.horizontalCenter
:
parent
.
horizontalCenter
MouseArea
{
anchors.fill
:
parent
enabled
:
!
_cameraModeUndefined
onClicked
:
{
if
(
rootLoader
.
sourceComponent
===
null
)
{
rootLoader
.
sourceComponent
=
cameraSettingsComponent
}
else
{
rootLoader
.
sourceComponent
=
null
}
}
}
}
}
//-- Shutter
Rectangle
{
color
:
Qt
.
rgba
(
0
,
0
,
0
,
0
)
width
:
ScreenTools
.
defaultFontPixelWidth
*
6
height
:
width
radius
:
width
*
0.5
border.color
:
qgcPal
.
buttonText
border.width
:
3
anchors.verticalCenter
:
parent
.
verticalCenter
Rectangle
{
width
:
parent
.
width
*
0.75
height
:
width
radius
:
width
*
0.5
color
:
_cameraModeUndefined
?
qgcPal
.
colorGrey
:
qgcPal
.
colorRed
anchors.centerIn
:
parent
}
MouseArea
{
anchors.fill
:
parent
enabled
:
!
_cameraModeUndefined
onClicked
:
{
if
(
_cameraVideoMode
)
{
//-- Start/Stop Video
}
else
{
_camera
.
takePhoto
()
}
}
}
}
}
Component
{
id
:
cameraSettingsComponent
Item
{
id
:
cameraSettingsRect
width
:
mainWindow
.
width
height
:
mainWindow
.
height
anchors.centerIn
:
parent
MouseArea
{
anchors.fill
:
parent
onClicked
:
{
rootLoader
.
sourceComponent
=
null
}
}
Rectangle
{
id
:
camSettingsRect
width
:
_labelFieldWidth
+
_editFieldWidth
+
(
ScreenTools
.
defaultFontPixelWidth
*
8
)
height
:
Math
.
max
(
mainWindow
.
height
*
0.65
,
ScreenTools
.
defaultFontPixelHeight
*
20
)
radius
:
ScreenTools
.
defaultFontPixelWidth
color
:
qgcPal
.
globalTheme
===
QGCPalette
.
Light
?
Qt
.
rgba
(
1
,
1
,
1
,
0.95
)
:
Qt
.
rgba
(
0
,
0
,
0
,
0.75
)
border.width
:
1
border.color
:
qgcPal
.
globalTheme
===
QGCPalette
.
Light
?
Qt
.
rgba
(
0
,
0
,
0
,
0.35
)
:
Qt
.
rgba
(
1
,
1
,
1
,
0.35
)
anchors.centerIn
:
parent
QGCLabel
{
id
:
cameraSettingsLabel
text
:
_cameraVideoMode
?
qsTr
(
"
Video Settings
"
)
:
qsTr
(
"
Camera Settings
"
)
font.family
:
ScreenTools
.
demiboldFontFamily
font.pointSize
:
ScreenTools
.
mediumFontPointSize
anchors.margins
:
ScreenTools
.
defaultFontPixelHeight
*
0.5
anchors.top
:
parent
.
top
anchors.left
:
parent
.
left
}
QGCFlickable
{
clip
:
true
anchors.top
:
cameraSettingsLabel
.
bottom
anchors.topMargin
:
ScreenTools
.
defaultFontPixelHeight
anchors.bottom
:
parent
.
bottom
width
:
cameraSettingsCol
.
width
contentHeight
:
cameraSettingsCol
.
height
contentWidth
:
cameraSettingsCol
.
width
anchors.horizontalCenter
:
parent
.
horizontalCenter
Column
{
id
:
cameraSettingsCol
spacing
:
ScreenTools
.
defaultFontPixelHeight
*
0.5
width
:
camSettingsRect
.
width
anchors.margins
:
ScreenTools
.
defaultFontPixelHeight
//-------------------------------------------
//-- Camera Settings
Repeater
{
model
:
_camera
?
_camera
.
activeSettings
:
[]
Row
{
spacing
:
ScreenTools
.
defaultFontPixelWidth
anchors.horizontalCenter
:
parent
.
horizontalCenter
QGCLabel
{
text
:
_camera
.
getFact
(
modelData
).
shortDescription
width
:
_labelFieldWidth
anchors.verticalCenter
:
parent
.
verticalCenter
}
FactComboBox
{
width
:
_editFieldWidth
fact
:
_camera
.
getFact
(
modelData
)
indexModel
:
false
visible
:
!
_camera
.
getFact
(
modelData
).
typeIsBool
anchors.verticalCenter
:
parent
.
verticalCenter
}
Item
{
width
:
_editFieldWidth
height
:
factSwitch
.
height
visible
:
_camera
.
getFact
(
modelData
).
typeIsBool
anchors.verticalCenter
:
parent
.
verticalCenter
Switch
{
id
:
factSwitch
anchors.left
:
parent
.
left
checked
:
fact
?
fact
.
value
:
false
onClicked
:
fact
.
value
=
checked
?
1
:
0
property
var
fact
:
_camera
.
getFact
(
modelData
)
}
}
}
}
//-------------------------------------------
//-- Reset Camera
Row
{
spacing
:
ScreenTools
.
defaultFontPixelWidth
anchors.horizontalCenter
:
parent
.
horizontalCenter
QGCLabel
{
text
:
qsTr
(
"
Reset Camera Defaults
"
)
width
:
_labelFieldWidth
anchors.verticalCenter
:
parent
.
verticalCenter
}
QGCButton
{
text
:
qsTr
(
"
Reset
"
)
onClicked
:
resetPrompt
.
open
()
width
:
_editFieldWidth
anchors.verticalCenter
:
parent
.
verticalCenter
MessageDialog
{
id
:
resetPrompt
title
:
qsTr
(
"
Reset Camera to Factory Settings
"
)
text
:
qsTr
(
"
Confirm resetting all settings?
"
)
standardButtons
:
StandardButton
.
Yes
|
StandardButton
.
No
onNo
:
resetPrompt
.
close
()
onYes
:
{
// TODO
resetPrompt
.
close
()
}
}
}
}
//-------------------------------------------
//-- Format Storage
Row
{
spacing
:
ScreenTools
.
defaultFontPixelWidth
anchors.horizontalCenter
:
parent
.
horizontalCenter
QGCLabel
{
text
:
qsTr
(
"
Storage
"
)
width
:
_labelFieldWidth
anchors.verticalCenter
:
parent
.
verticalCenter
}
QGCButton
{
text
:
qsTr
(
"
Format
"
)
enabled
:
false
onClicked
:
formatPrompt
.
open
()
width
:
_editFieldWidth
anchors.verticalCenter
:
parent
.
verticalCenter
MessageDialog
{
id
:
formatPrompt
title
:
qsTr
(
"
Format Camera Storage
"
)
text
:
qsTr
(
"
Confirm erasing all files?
"
)
standardButtons
:
StandardButton
.
Yes
|
StandardButton
.
No
onNo
:
formatPrompt
.
close
()
onYes
:
{
// TODO
formatPrompt
.
close
()
}
}
}
}
}
}
}
Component.onCompleted
:
{
rootLoader
.
width
=
cameraSettingsRect
.
width
rootLoader
.
height
=
cameraSettingsRect
.
height
}
Keys.onBackPressed
:
{
rootLoader
.
sourceComponent
=
null
}
Keys.onEscapePressed
:
{
rootLoader
.
sourceComponent
=
null
}
}
}
}
src/Camera/QGCCameraManager.cc
View file @
26b3b8d0
...
...
@@ -27,13 +27,6 @@ QGCCameraManager::~QGCCameraManager()
{
}
//-----------------------------------------------------------------------------
QString
QGCCameraManager
::
controllerSource
()
{
return
QStringLiteral
(
"/qml/CameraControl.qml"
);
}
//-----------------------------------------------------------------------------
void
QGCCameraManager
::
_vehicleReady
(
bool
ready
)
...
...
src/Camera/QGCCameraManager.h
View file @
26b3b8d0
...
...
@@ -26,16 +26,12 @@ public:
virtual
~
QGCCameraManager
();
Q_PROPERTY
(
QmlObjectListModel
*
cameras
READ
cameras
NOTIFY
camerasChanged
)
Q_PROPERTY
(
QString
controllerSource
READ
controllerSource
NOTIFY
controllerSourceChanged
)
//-- Return a list of cameras provided by this vehicle
virtual
QmlObjectListModel
*
cameras
()
{
return
&
_cameras
;
}
//-- Camera controller source (QML)
virtual
QString
controllerSource
();
signals:
void
camerasChanged
();
void
controllerSourceChanged
();
protected
slots
:
void
_vehicleReady
(
bool
ready
);
...
...
src/Camera/images/camera_settings.svg
deleted
100644 → 0
View file @
93627497
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg
version=
"1.1"
id=
"Layer_1"
xmlns=
"http://www.w3.org/2000/svg"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
x=
"0px"
y=
"0px"
width=
"72px"
height=
"72px"
viewBox=
"0 0 72 72"
style=
"enable-background:new 0 0 72 72;"
xml:space=
"preserve"
>
<style
type=
"text/css"
>
.st0{display:none;}
.st1{display:inline;}
.st2{display:inline;stroke:#FFFFFF;stroke-width:1.1959;stroke-miterlimit:10;}
.st3{display:inline;fill:none;stroke:#FFFFFF;stroke-width:9.567;stroke-miterlimit:10;}
.st4{display:inline;stroke:#FFFFFF;stroke-width:0.9229;stroke-miterlimit:10;}
.st5{display:inline;fill:none;stroke:#FFFFFF;stroke-width:9.2289;stroke-miterlimit:10;}
.st6{display:inline;stroke:#FFFFFF;stroke-width:1.3383;stroke-miterlimit:10;}
.st7{display:inline;fill:#FFFFFF;}
.st8{display:inline;opacity:0.7;stroke:#FFFFFF;stroke-width:1.494;stroke-miterlimit:10;enable-background:new ;}
.st9{display:inline;opacity:0.7;stroke:#FFFFFF;stroke-width:0.9492;stroke-miterlimit:10;enable-background:new ;}
.st10{display:inline;fill:none;stroke:#000000;stroke-width:23.0795;stroke-miterlimit:10;}
.st11{enable-background:new ;}
.st12{fill:none;stroke:#000000;stroke-miterlimit:10;}
.st13{display:inline;fill:#FFFFFF;stroke:#000000;stroke-miterlimit:10;}
.st14{display:inline;stroke:#000000;stroke-width:19.9759;stroke-miterlimit:10;}
.st15{display:inline;stroke:#000000;stroke-width:20.4762;stroke-miterlimit:10;}
.st16{display:inline;stroke:#000000;stroke-miterlimit:10;}
.st17{fill:#FFFFFF;}
</style>
<g
id=
"Media_play_icon"
class=
"st0"
>
<polygon
class=
"st1"
points=
"275.5,-149.9 24.1,-4.8 24.1,-295 "
/>
</g>
<g
id=
"Document_icon"
class=
"st0"
>
<rect
x=
"39.8"
y=
"-291.1"
class=
"st2"
width=
"219.9"
height=
"282.3"
/>
<line
class=
"st3"
x1=
"80.1"
y1=
"-249.2"
x2=
"220"
y2=
"-249.2"
/>
<line
class=
"st3"
x1=
"80.1"
y1=
"-223.2"
x2=
"183.3"
y2=
"-223.2"
/>
<line
class=
"st3"
x1=
"80.1"
y1=
"-197.2"
x2=
"196.8"
y2=
"-197.2"
/>
<line
class=
"st3"
x1=
"80.1"
y1=
"-171.1"
x2=
"220"
y2=
"-171.1"
/>
<line
class=
"st3"
x1=
"80.1"
y1=
"-145.1"
x2=
"138.4"
y2=
"-145.1"
/>
<line
class=
"st3"
x1=
"80.1"
y1=
"-119"
x2=
"183.3"
y2=
"-119"
/>
<line
class=
"st3"
x1=
"80.1"
y1=
"-93"
x2=
"196.8"
y2=
"-93"
/>
</g>
<g
id=
"Contact_icon"
class=
"st0"
>
<rect
x=
"7.1"
y=
"-258.8"
class=
"st4"
width=
"285.8"
height=
"217.9"
/>
<polyline
class=
"st5"
points=
"281.7,-248.9 150,-146.2 19,-248.9 "
/>
</g>
<g
id=
"Image_icon"
class=
"st0"
>
<rect
x=
"12.4"
y=
"-291.4"
class=
"st6"
width=
"274.7"
height=
"283"
/>
<rect
x=
"39"
y=
"-262.5"
class=
"st7"
width=
"220.5"
height=
"220.5"
/>
<polygon
class=
"st8"
points=
"185.9,-55.5 48.5,-55.7 117.4,-174.6 "
/>
<polygon
class=
"st9"
points=
"238.6,-56.1 151.3,-56.2 195,-131.8 "
/>
<circle
class=
"st9"
cx=
"182.9"
cy=
"-198.5"
r=
"23.9"
/>
</g>
<g
id=
"Map_icon"
class=
"st0"
>
<circle
class=
"st1"
cx=
"149.8"
cy=
"-196.1"
r=
"99.2"
/>
<polygon
class=
"st1"
points=
"149.8,-4 77.3,-129.6 222.3,-129.6 "
/>
<circle
class=
"st7"
cx=
"149.8"
cy=
"-197"
r=
"34.3"
/>
</g>
<g
id=
"Calendar_icon"
class=
"st0"
>
<rect
x=
"29.3"
y=
"-268.8"
class=
"st10"
width=
"241.3"
height=
"248.6"
/>
<text
transform=
"matrix(1 0 0 1 50.4731 -72.7944)"
class=
"st1"
style=
"font-family:'Futura-Medium'; font-size:172.5264px;"
>
31
</text>
<text
transform=
"matrix(1 0 0 1 50.4731 -72.7944)"
style=
"display:inline;fill:none;stroke:#000000;stroke-miterlimit:10; font-family:'Futura-Medium'; font-size:172.5264px;"
>
31
</text>
<polyline
class=
"st1"
points=
"192.1,-38.2 250.8,-38.2 250.8,-96.9 "
/>
<rect
x=
"18"
y=
"-291"
class=
"st1"
width=
"263.7"
height=
"66.4"
/>
<circle
class=
"st13"
cx=
"98.4"
cy=
"-256"
r=
"11.9"
/>
<circle
class=
"st13"
cx=
"199.1"
cy=
"-257.8"
r=
"11.9"
/>
</g>
<g
id=
"Company_icon"
class=
"st0"
>
<circle
class=
"st14"
cx=
"149.8"
cy=
"-221.3"
r=
"51.5"
/>
<path
class=
"st15"
d=
"M59.4-13.1c0-81.1,40.5-146.9,90.4-146.9s90.4,65.8,90.4,146.9"
/>
<polygon
class=
"st16"
points=
"88.7,-12.9 102.3,-12.8 95.9,-69.5 "
/>
<polygon
class=
"st16"
points=
"201.6,-12.8 215.2,-12.7 208.7,-69.3 "
/>
</g>
<g
id=
"Layer_8"
>
<g
id=
"BOOUm1.tif"
>
<g>
<path
class=
"st17"
d=
"M27,18.4c1.5,0,3,0,4.5,0c1,0.8,1.5,1.9,1.7,3.2c0.2,1.2,0.9,1.9,2,2.4c0.8,0.3,1.6,0.6,2.3,1
c1.8,1.1,3.5,0.6,5.2-0.4c1.7-1,2.2-1,3.6,0.4c0.4,0.4,0.7,0.7,1.1,1.1c1.5,1.5,1.6,2.5,0.4,4.3c-0.5,0.7-1,1.4-0.8,2.2
c0.5,1.9,1.1,3.8,2.2,5.4c0.8,1.1,2.2,1.3,3.5,1.6c1.4,0.3,1.8,1.4,1.7,2.6c-0.1,1.7,0.7,3.8-1.3,5c-0.3,0.2-0.7,0.2-1.1,0.3
c-1,0.3-2,0.6-2.8,1.3c-2,2.1-2.4,5.8-0.8,8.3c0.7,1.1,0.6,2-0.2,2.9c-0.4,0.5-0.8,0.9-1.3,1.3c-1.7,1.7-2.6,1.8-4.6,0.5
c-1.2-0.8-2.3-0.9-3.6-0.3c-0.6,0.3-1.2,0.6-1.8,0.7c-2.3,0.6-3.4,2.1-3.7,4.3c-0.2,1.3-1,1.9-2.3,2c-0.6,0-1.1,0-1.7,0
c-2.5,0-3.3-0.6-3.7-3c-0.1-0.7-0.3-1.3-0.9-1.7c-1.6-1.2-3.6-1.9-5.5-2.4c-1.3-0.3-2.4,0.6-3.5,1.3c-1,0.7-1.9,0.5-2.8-0.2
c-0.5-0.4-0.9-0.8-1.3-1.3c-1.8-1.8-1.9-2.6-0.5-4.7c0.7-1.1,0.8-2.2,0.4-3.3c-0.3-0.7-0.6-1.4-0.8-2.1c-0.6-2.3-2.2-3.3-4.3-3.7
c-0.6-0.1-1.2-0.3-1.5-0.9c-1.5-2.4-0.2-6.1,2.6-6.8c1.3-0.3,2.2-1,2.6-2.3c0.2-0.6,0.4-1.3,0.8-1.8c1.2-2,0.9-3.9-0.5-5.8
c-0.8-1.1-0.6-2,0.2-2.9c0.4-0.5,0.8-0.9,1.3-1.3c1.7-1.6,2.6-1.8,4.6-0.5c1.1,0.8,2.2,0.9,3.4,0.4c0.7-0.3,1.4-0.7,2.1-0.8
c2.2-0.5,3.2-2.1,3.6-4.2C25.6,19.4,26.1,18.8,27,18.4z M29.3,52.2c5,0,8.9-3.9,8.9-8.9c0-4.8-4.1-8.8-8.9-8.8
c-4.8,0-8.7,4-8.7,8.8C20.6,48.3,24.4,52.2,29.3,52.2z"
/>
</g>
</g>
<g
id=
"BOOUm1.tif_1_"
>
<g>
<path
class=
"st17"
d=
"M51.6,4.3c0.7-0.2,1.3-0.5,2-0.7c0.6,0.2,1,0.6,1.2,1.1c0.3,0.5,0.7,0.7,1.2,0.7c0.4,0,0.8,0,1.2,0
c1,0.2,1.6-0.3,2.2-1C60,3.7,60.2,3.7,61,4c0.2,0.1,0.4,0.2,0.7,0.3c0.9,0.4,1.1,0.8,0.9,1.8c-0.1,0.4-0.2,0.8,0,1.1
c0.5,0.8,1.1,1.5,1.9,2c0.5,0.4,1.2,0.2,1.8,0.1c0.6-0.1,1,0.3,1.2,0.8c0.2,0.8,0.9,1.5,0.2,2.4c-0.1,0.1-0.3,0.2-0.4,0.3
c-0.4,0.3-0.8,0.6-1,1c-0.5,1.2-0.1,2.9,1,3.7c0.5,0.4,0.6,0.8,0.4,1.3c-0.1,0.3-0.2,0.5-0.3,0.8c-0.5,1-0.8,1.2-1.9,1
c-0.6-0.1-1.2,0-1.6,0.4c-0.2,0.2-0.4,0.4-0.7,0.6c-0.9,0.6-1.1,1.4-0.9,2.5c0.1,0.6-0.1,1-0.7,1.2c-0.2,0.1-0.5,0.2-0.7,0.3
c-1.1,0.4-1.5,0.3-2.1-0.7c-0.2-0.3-0.4-0.5-0.7-0.6c-0.9-0.3-1.9-0.3-2.8-0.1c-0.6,0.1-1,0.6-1.3,1.1c-0.3,0.5-0.8,0.5-1.3,0.4
c-0.3-0.1-0.5-0.2-0.8-0.3c-1.1-0.5-1.2-0.8-1-1.9c0.1-0.6,0-1.1-0.4-1.5c-0.2-0.3-0.5-0.5-0.7-0.8c-0.6-0.9-1.5-1.1-2.5-0.9
c-0.3,0.1-0.6,0.1-0.8-0.1c-1.1-0.8-1.1-2.6,0-3.4c0.5-0.3,0.8-0.8,0.8-1.4c0-0.3,0-0.6,0-0.9c0.2-1.1-0.3-1.9-1.1-2.4
c-0.5-0.3-0.6-0.8-0.4-1.3c0.1-0.3,0.2-0.5,0.3-0.8C46.6,9,47,8.7,48.1,9c0.6,0.1,1.1,0,1.6-0.4c0.2-0.2,0.5-0.5,0.8-0.7
c0.9-0.6,1.1-1.5,0.8-2.4C51.2,5,51.3,4.7,51.6,4.3z M58.1,18.6c2.1-0.8,3.2-3.2,2.4-5.3c-0.8-2.1-3.2-3.1-5.3-2.3
c-2.1,0.8-3.1,3.1-2.3,5.3C53.7,18.4,56,19.4,58.1,18.6z"
/>
</g>
</g>
</g>
</svg>
src/FlightDisplay/FlightDisplayViewVideo.qml
View file @
26b3b8d0
...
...
@@ -105,13 +105,4 @@ Item {
}
}
}
//-- Camera Controller
Loader
{
source
:
QGroundControl
.
videoManager
.
fullScreen
?
""
:
(
_dynamicCameras
?
_dynamicCameras
.
controllerSource
:
""
)
visible
:
!
_mainIsMap
&&
_dynamicCameras
&&
_dynamicCameras
.
cameras
.
count
&&
_connected
&&
!
QGroundControl
.
videoManager
.
fullScreen
anchors.right
:
parent
.
right
anchors.rightMargin
:
ScreenTools
.
defaultFontPixelWidth
anchors.bottom
:
parent
.
bottom
anchors.bottomMargin
:
ScreenTools
.
defaultFontPixelHeight
*
2
}
}
src/FlightMap/Widgets/CameraPageWidget.qml
View file @
26b3b8d0
...
...
@@ -7,26 +7,282 @@
*
****************************************************************************/
import
QtQuick
2.3
import
QtQuick
.
Layouts
1.2
import
QtQuick
2.4
import
QtPositioning
5.2
import
QtQuick
.
Layouts
1.2
import
QtQuick
.
Controls
1.4
import
QtQuick
.
Dialogs
1.2
import
QtGraphicalEffects
1.0
import
QGroundControl
1.0
import
QGroundControl
.
Controls
1.0
import
QGroundControl
.
ScreenTools
1.0
import
QGroundControl
1.0
import
QGroundControl
.
ScreenTools
1.0
import
QGroundControl
.
Controls
1.0
import
QGroundControl
.
Palette
1.0
import
QGroundControl
.
Vehicle
1.0
import
QGroundControl
.
Controllers
1.0
import
QGroundControl
.
FactSystem
1.0
import
QGroundControl
.
FactControls
1.0
/// Camera page for Instrument Panel PageView
Column
{
width
:
pageWidth
spacing
:
ScreenTools
.
defaultFontPixelHeight
property
bool
showSettingsIcon
:
false
property
bool
showSettingsIcon
:
_camera
!==
null
property
var
_activeVehicle
:
QGroundControl
.
multiVehicleManager
.
activeVehicle
property
var
_activeVehicle
:
QGroundControl
.
multiVehicleManager
.
activeVehicle
property
var
_dynamicCameras
:
_activeVehicle
?
_activeVehicle
.
dynamicCameras
:
null
property
bool
_isCamera
:
_dynamicCameras
?
_dynamicCameras
.
cameras
.
count
>
0
:
false
property
bool
_cameraModeUndefined
:
_isCamera
?
_dynamicCameras
.
cameras
.
get
(
0
).
cameraMode
===
QGCCameraControl
.
CAMERA_MODE_UNDEFINED
:
true
property
bool
_cameraVideoMode
:
_isCamera
?
_dynamicCameras
.
cameras
.
get
(
0
).
cameraMode
===
QGCCameraControl
.
CAMERA_MODE_VIDEO
:
false
property
bool
_cameraPhotoMode
:
_isCamera
?
_dynamicCameras
.
cameras
.
get
(
0
).
cameraMode
===
QGCCameraControl
.
CAMERA_MODE_PHOTO
:
false
property
var
_camera
:
_isCamera
?
_dynamicCameras
.
cameras
.
get
(
0
)
:
null
// Single camera support for the time being
property
real
_spacers
:
ScreenTools
.
defaultFontPixelHeight
*
0.5
property
real
_labelFieldWidth
:
ScreenTools
.
defaultFontPixelWidth
*
30
property
real
_editFieldWidth
:
ScreenTools
.
defaultFontPixelWidth
*
30
property
bool
_communicationLost
:
_activeVehicle
?
_activeVehicle
.
connectionLost
:
false
property
bool
_hasModes
:
_isCamera
&&
_camera
&&
_camera
.
hasModes
function
showSettings
()
{
qgcView
.
showDialog
(
cameraSettings
,
_cameraVideoMode
?
qsTr
(
"
Video Settings
"
)
:
qsTr
(
"
Camera Settings
"
),
70
,
StandardButton
.
Ok
)
}
//-- Dumb camera trigger if no actual camera interface exists
QGCButton
{
anchors.horizontalCenter
:
parent
.
horizontalCenter
text
:
qsTr
(
"
Trigger Camera
"
)
visible
:
!
_isCamera
onClicked
:
_activeVehicle
.
triggerCamera
()
enabled
:
_activeVehicle
}
Item
{
width
:
1
;
height
:
ScreenTools
.
defaultFontPixelHeight
;
visible
:
_isCamera
;
}
//-- Actual controller
QGCLabel
{
id
:
cameraLabel
text
:
_isCamera
?
_dynamicCameras
.
cameras
.
get
(
0
).
modelName
:
qsTr
(
"
Camera
"
)
visible
:
_isCamera
font.pointSize
:
ScreenTools
.
smallFontPointSize
anchors.horizontalCenter
:
parent
.
horizontalCenter
}
//-- Camera Mode (visible only if camera has modes)
Rectangle
{
width
:
_hasModes
?
ScreenTools
.
defaultFontPixelWidth
*
12
:
0
height
:
_hasModes
?
ScreenTools
.
defaultFontPixelWidth
*
4
:
0
color
:
qgcPal
.
window
radius
:
height
*
0.5
visible
:
_hasModes
anchors.horizontalCenter
:
parent
.
horizontalCenter
//-- Video Mode
Rectangle
{
width
:
parent
.
height
*
0.9
height
:
parent
.
height
*
0.9
color
:
qgcPal
.
windowShadeDark
radius
:
height
*
0.5
anchors.left
:
parent
.
left
anchors.leftMargin
:
4
anchors.verticalCenter
:
parent
.
verticalCenter
QGCColoredImage
{
anchors.fill
:
parent
source
:
"
/qmlimages/camera_video.svg
"
fillMode
:
Image
.
PreserveAspectFit
sourceSize.height
:
height
color
:
_cameraVideoMode
?
qgcPal
.
colorGreen
:
qgcPal
.
text
MouseArea
{
anchors.fill
:
parent
enabled
:
_cameraPhotoMode
onClicked
:
{
_camera
.
setVideoMode
()
}
}
}
}
//-- Photo Mode
Rectangle
{
width
:
parent
.
height
*
0.9
height
:
parent
.
height
*
0.9
color
:
qgcPal
.
windowShade
radius
:
height
*
0.5
anchors.right
:
parent
.
right
anchors.rightMargin
:
4
anchors.verticalCenter
:
parent
.
verticalCenter
QGCColoredImage
{
anchors.fill
:
parent
source
:
"
/qmlimages/camera_photo.svg
"
fillMode
:
Image
.
PreserveAspectFit
sourceSize.height
:
height
color
:
_cameraPhotoMode
?
qgcPal
.
colorGreen
:
qgcPal
.
text
MouseArea
{
anchors.fill
:
parent
enabled
:
_cameraVideoMode
onClicked
:
{
_camera
.
setPhotoMode
()
}
}
}
}
}
//-- Shutter
Rectangle
{
color
:
Qt
.
rgba
(
0
,
0
,
0
,
0
)
width
:
ScreenTools
.
defaultFontPixelWidth
*
6
height
:
width
radius
:
width
*
0.5
visible
:
_isCamera
border.color
:
qgcPal
.
buttonText
border.width
:
3
anchors.horizontalCenter
:
parent
.
horizontalCenter
Rectangle
{
width
:
parent
.
width
*
0.75
height
:
width
radius
:
width
*
0.5
color
:
_cameraModeUndefined
?
qgcPal
.
colorGrey
:
qgcPal
.
colorRed
anchors.centerIn
:
parent
}
MouseArea
{
anchors.fill
:
parent
enabled
:
!
_cameraModeUndefined
onClicked
:
{
if
(
_cameraVideoMode
)
{
//-- Start/Stop Video
}
else
{
_camera
.
takePhoto
()
}
}
}
}
Item
{
width
:
1
;
height
:
ScreenTools
.
defaultFontPixelHeight
;
visible
:
_isCamera
;
}
Component
{
id
:
cameraSettings
QGCViewDialog
{
id
:
_cameraSettingsDialog
QGCFlickable
{
anchors.fill
:
parent
contentHeight
:
camSettingsCol
.
height
flickableDirection
:
Flickable
.
VerticalFlick
clip
:
true
Column
{
id
:
camSettingsCol
anchors.left
:
parent
.
left
anchors.right
:
parent
.
right
spacing
:
_margins
//-------------------------------------------
//-- Camera Settings
Repeater
{
model
:
_camera
?
_camera
.
activeSettings
:
[]
Row
{
spacing
:
ScreenTools
.
defaultFontPixelWidth
anchors.horizontalCenter
:
parent
.
horizontalCenter
property
var
_fact
:
_camera
.
getFact
(
modelData
)
property
bool
_isBool
:
_fact
.
typeIsBool
property
bool
_isCombo
:
!
_isBool
&&
_fact
.
enumStrings
.
length
>
0
property
bool
_isSlider
:
_fact
&&
!
isNaN
(
_fact
.
increment
)
property
bool
_isEdit
:
!
_isBool
&&
!
_isSlider
&&
_fact
.
enumStrings
.
length
<
1
QGCLabel
{
text
:
parent
.
_fact
.
shortDescription
width
:
_labelFieldWidth
anchors.verticalCenter
:
parent
.
verticalCenter
}
FactComboBox
{
width
:
parent
.
_isCombo
?
_editFieldWidth
:
0
fact
:
parent
.
_fact
indexModel
:
false
visible
:
parent
.
_isCombo
anchors.verticalCenter
:
parent
.
verticalCenter
}
FactTextField
{
width
:
parent
.
_isEdit
?
_editFieldWidth
:
0
fact
:
parent
.
_fact
visible
:
parent
.
_isEdit
}
QGCSlider
{
width
:
parent
.
_isSlider
?
_editFieldWidth
:
0
maximumValue
:
parent
.
_fact
.
max
minimumValue
:
parent
.
_fact
.
min
stepSize
:
parent
.
_fact
.
increment
visible
:
parent
.
_isSlider
updateValueWhileDragging
:
false
anchors.verticalCenter
:
parent
.
verticalCenter
Component.onCompleted
:
{
value
=
parent
.
_fact
.
value
}
onValueChanged
:
{
parent
.
_fact
.
value
=
value
}
}
Item
{
width
:
parent
.
_isBool
?
_editFieldWidth
:
0
height
:
factSwitch
.
height
visible
:
parent
.
_isBool
anchors.verticalCenter
:
parent
.
verticalCenter
property
var
_fact
:
parent
.
_fact
Switch
{
id
:
factSwitch
anchors.left
:
parent
.
left
checked
:
parent
.
_fact
?
parent
.
_fact
.
value
:
false
onClicked
:
parent
.
_fact
.
value
=
checked
?
1
:
0
}
}
}
}
//-------------------------------------------
//-- Reset Camera
Row
{
spacing
:
ScreenTools
.
defaultFontPixelWidth
anchors.horizontalCenter
:
parent
.
horizontalCenter
QGCLabel
{
text
:
qsTr
(
"
Reset Camera Defaults
"
)
width
:
_labelFieldWidth
anchors.verticalCenter
:
parent
.
verticalCenter
}
QGCButton
{
text
:
qsTr
(
"
Reset
"
)
onClicked
:
resetPrompt
.
open
()
width
:
_editFieldWidth
anchors.verticalCenter
:
parent
.
verticalCenter
MessageDialog
{
id
:
resetPrompt
title
:
qsTr
(
"
Reset Camera to Factory Settings
"
)
text
:
qsTr
(
"
Confirm resetting all settings?
"
)
standardButtons
:
StandardButton
.
Yes
|
StandardButton
.
No
onNo
:
resetPrompt
.
close
()
onYes
:
{
// TODO
resetPrompt
.
close
()
}
}
}
}
//-------------------------------------------
//-- Format Storage
Row
{
spacing
:
ScreenTools
.
defaultFontPixelWidth
anchors.horizontalCenter
:
parent
.
horizontalCenter
QGCLabel
{
text
:
qsTr
(
"
Storage
"
)
width
:
_labelFieldWidth
anchors.verticalCenter
:
parent
.
verticalCenter
}
QGCButton
{
text
:
qsTr
(
"
Format
"
)
enabled
:
false
onClicked
:
formatPrompt
.
open
()
width
:
_editFieldWidth
anchors.verticalCenter
:
parent
.
verticalCenter
MessageDialog
{
id
:
formatPrompt
title
:
qsTr
(
"
Format Camera Storage
"
)
text
:
qsTr
(
"
Confirm erasing all files?
"
)
standardButtons
:
StandardButton
.
Yes
|
StandardButton
.
No
onNo
:
formatPrompt
.
close
()
onYes
:
{
// TODO
formatPrompt
.
close
()
}
}
}
}
}
}
}
}
}
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