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
3b5740bc
Commit
3b5740bc
authored
Oct 16, 2015
by
Pritam Ghanghas
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
https://github.com/mavlink/qgroundcontrol
into apm_mode_support
parents
3a3a8afc
3ba9c2f8
Changes
61
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
61 changed files
with
666 additions
and
664 deletions
+666
-664
.appveyor.yml
.appveyor.yml
+11
-9
QGCApplication.pro
QGCApplication.pro
+20
-20
QGCInstaller.pri
QGCInstaller.pri
+1
-1
README.md
README.md
+1
-1
qgroundcontrol.desktop
qgroundcontrol.desktop
+0
-10
qgroundcontrol.qrc
qgroundcontrol.qrc
+1
-0
FlightDisplayView.cc
src/FlightDisplay/FlightDisplayView.cc
+1
-1
FlightDisplayWidget.cc
src/FlightDisplay/FlightDisplayWidget.cc
+4
-2
FlightDisplayWidget.h
src/FlightDisplay/FlightDisplayWidget.h
+1
-1
FlightMap.qml
src/FlightMap/FlightMap.qml
+9
-2
MissionEditor.cc
src/MissionEditor/MissionEditor.cc
+40
-48
MissionEditor.h
src/MissionEditor/MissionEditor.h
+18
-7
MissionEditor.qml
src/MissionEditor/MissionEditor.qml
+160
-108
QGCApplication.cc
src/QGCApplication.cc
+2
-0
QGCDockWidget.cc
src/QGCDockWidget.cc
+40
-13
QGCDockWidget.h
src/QGCDockWidget.h
+10
-9
QGCQmlWidgetHolder.cpp
src/QGCQmlWidgetHolder.cpp
+6
-2
QGCQmlWidgetHolder.h
src/QGCQmlWidgetHolder.h
+8
-4
ExclusiveGroupItem.qml
src/QmlControls/ExclusiveGroupItem.qml
+18
-0
MissionItemEditor.qml
src/QmlControls/MissionItemEditor.qml
+18
-24
QGroundControl.Controls.qmldir
src/QmlControls/QGroundControl.Controls.qmldir
+1
-0
QmlTestWidget.cc
src/QmlControls/QmlTestWidget.cc
+1
-0
ScreenToolsController.cc
src/QmlControls/ScreenToolsController.cc
+1
-1
Vehicle.cc
src/Vehicle/Vehicle.cc
+1
-5
SetupView.cc
src/VehicleSetup/SetupView.cc
+1
-1
CustomCommandWidget.cc
src/ViewWidgets/CustomCommandWidget.cc
+6
-2
CustomCommandWidget.h
src/ViewWidgets/CustomCommandWidget.h
+1
-1
LogReplayLink.cc
src/comm/LogReplayLink.cc
+4
-0
MAVLinkProtocol.cc
src/comm/MAVLinkProtocol.cc
+14
-0
MAVLinkProtocol.h
src/comm/MAVLinkProtocol.h
+12
-7
MockLink.cc
src/comm/MockLink.cc
+23
-0
MockLink.h
src/comm/MockLink.h
+1
-0
MainWindowTest.cc
src/qgcunittest/MainWindowTest.cc
+0
-2
PX4RCCalibrationTest.cc
src/qgcunittest/PX4RCCalibrationTest.cc
+1
-1
UAS.cc
src/uas/UAS.cc
+19
-18
CameraView.cc
src/ui/CameraView.cc
+19
-6
HILDockWidget.cc
src/ui/HILDockWidget.cc
+4
-2
HILDockWidget.h
src/ui/HILDockWidget.h
+1
-1
MainWindow.cc
src/ui/MainWindow.cc
+100
-170
MainWindow.h
src/ui/MainWindow.h
+15
-15
MainWindow.ui
src/ui/MainWindow.ui
+1
-12
MultiVehicleDockWidget.cc
src/ui/MultiVehicleDockWidget.cc
+8
-3
MultiVehicleDockWidget.h
src/ui/MultiVehicleDockWidget.h
+3
-3
QGCHilConfiguration.ui
src/ui/QGCHilConfiguration.ui
+1
-1
QGCMAVLinkInspector.cc
src/ui/QGCMAVLinkInspector.cc
+4
-2
QGCMAVLinkInspector.h
src/ui/QGCMAVLinkInspector.h
+3
-3
QGCMAVLinkInspector.ui
src/ui/QGCMAVLinkInspector.ui
+1
-1
QGCTabbedInfoView.cpp
src/ui/QGCTabbedInfoView.cpp
+4
-1
QGCTabbedInfoView.h
src/ui/QGCTabbedInfoView.h
+6
-4
QGCTabbedInfoView.ui
src/ui/QGCTabbedInfoView.ui
+1
-1
QGCUASFileViewMulti.cc
src/ui/QGCUASFileViewMulti.cc
+4
-2
QGCUASFileViewMulti.h
src/ui/QGCUASFileViewMulti.h
+3
-3
QGCUASFileViewMulti.ui
src/ui/QGCUASFileViewMulti.ui
+1
-1
UASInfo.ui
src/ui/UASInfo.ui
+1
-1
Linecharts.cc
src/ui/linechart/Linecharts.cc
+14
-86
Linecharts.h
src/ui/linechart/Linecharts.h
+8
-16
MainToolBar.cc
src/ui/toolbar/MainToolBar.cc
+2
-11
MainToolBar.h
src/ui/toolbar/MainToolBar.h
+0
-1
MainToolBar.qml
src/ui/toolbar/MainToolBar.qml
+0
-14
UASInfoWidget.cc
src/ui/uas/UASInfoWidget.cc
+4
-1
UASInfoWidget.h
src/ui/uas/UASInfoWidget.h
+3
-3
No files found.
.appveyor.yml
View file @
3b5740bc
...
...
@@ -21,23 +21,25 @@ test_script:
-
if "%CONFIG%" EQU "debug" ( debug\qgroundcontrol --unittest )
after_build
:
-
if "%CONFIG%" EQU "installer" ( appveyor PushArtifact C:\projects\qgroundcontrol\release\qgroundcontrol
-installer-win32
.exe )
-
if "%CONFIG%" EQU "installer" ( appveyor PushArtifact C:\projects\qgroundcontrol\release\qgroundcontrol.exe )
deploy
:
-
provider
:
S3
name
:
qgroundcontrol-s3
access_key_id
:
AKIAIVORNALE7NHD3T6Q
access_key_id
:
secure
:
IGAojLMqokL+76DbdulmWDA3MTsxEBBi3ReVVSqTy9c=
secret_access_key
:
secure
:
RiYqaR+3T2PMNz2j5ur8LCA6H/Zfd4jTX33CZE5iBxm+zaz4QLs25p0B7prpaoNN
bucket
:
qgrondcontrol
bucket
:
qgro
u
ndcontrol
set_public
:
true
folder
:
"
%APPVEYOR_REPO_BRANCH%"
artifact
:
C:\projects\qgroundcontrol\release\qgroundcontrol-installer-win32.exe
folder
:
$(APPVEYOR_REPO_BRANCH)
artifcat
:
'
release\qgroundcontrol.exe'
on
:
CONFIG
:
installer
-
provider
:
GitHub
artifact
:
C:\projects\qgroundcontrol\release\qgroundcontrol-installer-win32.exe
artifact
:
'
release\qgroundcontrol.exe'
draft
:
false
prerelease
:
false
on
:
CONFIG
:
installer
appveyor_repo_tag
:
true
\ No newline at end of file
QGCApplication.pro
View file @
3b5740bc
...
...
@@ -162,12 +162,10 @@ INCLUDEPATH += \
FORMS
+=
\
src
/
QGCQmlWidgetHolder
.
ui
\
src
/
ui
/
Linechart
.
ui
\
src
/
ui
/
LogReplayLinkConfigurationWidget
.
ui
\
src
/
ui
/
MainWindow
.
ui
\
src
/
ui
/
MAVLinkSettingsWidget
.
ui
\
src
/
ui
/
QGCCommConfiguration
.
ui
\
src
/
ui
/
QGCDataPlot2D
.
ui
\
src
/
ui
/
QGCLinkConfiguration
.
ui
\
src
/
ui
/
QGCMapRCToParamDialog
.
ui
\
src
/
ui
/
QGCMAVLinkLogPlayer
.
ui
\
...
...
@@ -185,7 +183,9 @@ FORMS += \
!
MobileBuild
{
FORMS
+=
\
src
/
ui
/
Linechart
.
ui
\
src
/
ui
/
MultiVehicleDockWidget
.
ui
\
src
/
ui
/
QGCDataPlot2D
.
ui
\
src
/
ui
/
QGCHilConfiguration
.
ui
\
src
/
ui
/
QGCHilFlightGearConfiguration
.
ui
\
src
/
ui
/
QGCHilJSBSimConfiguration
.
ui
\
...
...
@@ -230,6 +230,7 @@ HEADERS += \
src
/
QGCApplication
.
h
\
src
/
QGCComboBox
.
h
\
src
/
QGCConfig
.
h
\
src
/
QGCDockWidget
.
h
\
src
/
QGCFileDialog
.
h
\
src
/
QGCGeo
.
h
\
src
/
QGCLoggingCategory
.
h
\
...
...
@@ -251,19 +252,11 @@ HEADERS += \
src
/
uas
/
UAS
.
h
\
src
/
uas
/
UASInterface
.
h
\
src
/
uas
/
UASMessageHandler
.
h
\
src
/
ui
/
linechart
/
ChartPlot
.
h
\
src
/
ui
/
linechart
/
IncrementalPlot
.
h
\
src
/
ui
/
linechart
/
LinechartPlot
.
h
\
src
/
ui
/
linechart
/
Linecharts
.
h
\
src
/
ui
/
linechart
/
LinechartWidget
.
h
\
src
/
ui
/
linechart
/
Scrollbar
.
h
\
src
/
ui
/
linechart
/
ScrollZoomer
.
h
\
src
/
ui
/
LogReplayLinkConfigurationWidget
.
h
\
src
/
ui
/
MainWindow
.
h
\
src
/
ui
/
MAVLinkDecoder
.
h
\
src
/
ui
/
MAVLinkSettingsWidget
.
h
\
src
/
ui
/
QGCCommConfiguration
.
h
\
src
/
ui
/
QGCDataPlot2D
.
h
\
src
/
ui
/
QGCLinkConfiguration
.
h
\
src
/
ui
/
QGCMapRCToParamDialog
.
h
\
src
/
ui
/
QGCMAVLinkLogPlayer
.
h
\
...
...
@@ -289,10 +282,17 @@ HEADERS += \
src
/
comm
/
QGCHilLink
.
h
\
src
/
comm
/
QGCJSBSimLink
.
h
\
src
/
comm
/
QGCXPlaneLink
.
h
\
src
/
QGCDockWidget
.
h
\
src
/
ui
/
CameraView
.
h
\
src
/
ui
/
HILDockWidget
.
h
\
src
/
ui
/
linechart
/
ChartPlot
.
h
\
src
/
ui
/
linechart
/
IncrementalPlot
.
h
\
src
/
ui
/
linechart
/
LinechartPlot
.
h
\
src
/
ui
/
linechart
/
Linecharts
.
h
\
src
/
ui
/
linechart
/
LinechartWidget
.
h
\
src
/
ui
/
linechart
/
Scrollbar
.
h
\
src
/
ui
/
linechart
/
ScrollZoomer
.
h
\
src
/
ui
/
MultiVehicleDockWidget
.
h
\
src
/
ui
/
QGCDataPlot2D
.
h
\
src
/
ui
/
QGCHilConfiguration
.
h
\
src
/
ui
/
QGCHilFlightGearConfiguration
.
h
\
src
/
ui
/
QGCHilJSBSimConfiguration
.
h
\
...
...
@@ -340,6 +340,7 @@ SOURCES += \
src
/
QGC
.
cc
\
src
/
QGCApplication
.
cc
\
src
/
QGCComboBox
.
cc
\
src
/
QGCDockWidget
.
cc
\
src
/
QGCFileDialog
.
cc
\
src
/
QGCLoggingCategory
.
cc
\
src
/
QGCPalette
.
cc
\
...
...
@@ -356,19 +357,11 @@ SOURCES += \
src
/
uas
/
FileManager
.
cc
\
src
/
uas
/
UAS
.
cc
\
src
/
uas
/
UASMessageHandler
.
cc
\
src
/
ui
/
linechart
/
ChartPlot
.
cc
\
src
/
ui
/
linechart
/
IncrementalPlot
.
cc
\
src
/
ui
/
linechart
/
LinechartPlot
.
cc
\
src
/
ui
/
linechart
/
Linecharts
.
cc
\
src
/
ui
/
linechart
/
LinechartWidget
.
cc
\
src
/
ui
/
linechart
/
Scrollbar
.
cc
\
src
/
ui
/
linechart
/
ScrollZoomer
.
cc
\
src
/
ui
/
LogReplayLinkConfigurationWidget
.
cc
\
src
/
ui
/
MainWindow
.
cc
\
src
/
ui
/
MAVLinkDecoder
.
cc
\
src
/
ui
/
MAVLinkSettingsWidget
.
cc
\
src
/
ui
/
QGCCommConfiguration
.
cc
\
src
/
ui
/
QGCDataPlot2D
.
cc
\
src
/
ui
/
QGCLinkConfiguration
.
cc
\
src
/
ui
/
QGCMapRCToParamDialog
.
cpp
\
src
/
ui
/
QGCMAVLinkLogPlayer
.
cc
\
...
...
@@ -393,10 +386,17 @@ SOURCES += \
src
/
comm
/
QGCFlightGearLink
.
cc
\
src
/
comm
/
QGCJSBSimLink
.
cc
\
src
/
comm
/
QGCXPlaneLink
.
cc
\
src
/
QGCDockWidget
.
cc
\
src
/
ui
/
CameraView
.
cc
\
src
/
ui
/
HILDockWidget
.
cc
\
src
/
ui
/
linechart
/
ChartPlot
.
cc
\
src
/
ui
/
linechart
/
IncrementalPlot
.
cc
\
src
/
ui
/
linechart
/
LinechartPlot
.
cc
\
src
/
ui
/
linechart
/
Linecharts
.
cc
\
src
/
ui
/
linechart
/
LinechartWidget
.
cc
\
src
/
ui
/
linechart
/
Scrollbar
.
cc
\
src
/
ui
/
linechart
/
ScrollZoomer
.
cc
\
src
/
ui
/
MultiVehicleDockWidget
.
cc
\
src
/
ui
/
QGCDataPlot2D
.
cc
\
src
/
ui
/
QGCHilConfiguration
.
cc
\
src
/
ui
/
QGCHilFlightGearConfiguration
.
cc
\
src
/
ui
/
QGCHilJSBSimConfiguration
.
cc
\
...
...
QGCInstaller.pri
View file @
3b5740bc
...
...
@@ -46,7 +46,7 @@ installer {
# easier to debug user crashes.
#QMAKE_POST_LINK += $$escape_expand(\\n) $$QMAKE_COPY $${DESTDIR_WIN}\\qgroundcontrol.pdb
#QMAKE_POST_LINK += $$escape_expand(\\n) del $${DESTDIR_WIN}\\qgroundcontrol.pdb
QMAKE_POST_LINK += $$escape_expand(\\n) $$quote("\"C:\\Program Files \(x86\)\\NSIS\\makensis.exe\"" /NOCD "\"/XOutFile $${DESTDIR_WIN}\\qgroundcontrol
-installer-win32
.exe\"" "$$BASEDIR_WIN\\deploy\\qgroundcontrol_installer.nsi")
QMAKE_POST_LINK += $$escape_expand(\\n) $$quote("\"C:\\Program Files \(x86\)\\NSIS\\makensis.exe\"" /NOCD "\"/XOutFile $${DESTDIR_WIN}\\qgroundcontrol.exe\"" "$$BASEDIR_WIN\\deploy\\qgroundcontrol_installer.nsi")
#QMAKE_POST_LINK += $$escape_expand(\\n) $$QMAKE_COPY qgroundcontrol.pdb $${DESTDIR_WIN}
#QMAKE_POST_LINK += $$escape_expand(\\n) del qgroundcontrol.pdb
OTHER_FILES += deploy/qgroundcontrol_installer.nsi
...
...
README.md
View file @
3b5740bc
...
...
@@ -63,7 +63,7 @@ Supported builds are 64 bit, built using the clang compiler.
Supported builds for Linux are 32 or 64-bit, built using gcc.
#### Install Qt5.4 and SDL1.2 prerequistites
*
For Fedora:
`sudo yum install qt-creator qt5-qtbase-devel qt5-qtdeclarative-devel qt5-qtserialport-devel qt5-qtsvg-devel qt5-qtwebkit-devel SDL-devel SDL-static systemd-devel qt5-qtgraphicaleffects qt5-qtquickcontrols`
*
For Fedora:
`sudo yum install qt-creator qt5-qtbase-devel qt5-qtdeclarative-devel qt5-qtserialport-devel qt5-qtsvg-devel qt5-qtwebkit-devel SDL-devel SDL-static systemd-devel qt5-qtgraphicaleffects qt5-qtquickcontrols
qt5-qtlocation-devel
`
*
For Arch Linux:
`pacman -Sy qtcreator qt5-base qt5-declarative qt5-serialport qt5-svg qt5-webkit`
*
For Ubuntu: Please be aware that the time of writing, Qt5.4 is unavailable in the official repositories Ubuntu 14.04/Mint 17
*
Add this PPA for Qt5.4:
`sudo add-apt-repository ppa:beineri/opt-qt541-trusty`
...
...
qgroundcontrol.desktop
deleted
100644 → 0
View file @
3a3a8afc
[Desktop Entry]
Type=Application
Name=qgroundcontrol
GenericName=Ground Control Station
Comment=UAS ground control station
Icon=qgroundcontrol
Exec=qgroundcontrol
Terminal=false
Categories=Utility;
Keywords=computer;
qgroundcontrol.qrc
View file @
3b5740bc
...
...
@@ -117,6 +117,7 @@
<file alias="QGroundControl/Controls/DropButton.qml">src/QmlControls/DropButton.qml</file>
<file alias="QGroundControl/Controls/RoundButton.qml">src/QmlControls/RoundButton.qml</file>
<file alias="QGroundControl/Controls/QGCCanvas.qml">src/QmlControls/QGCCanvas.qml</file>
<file alias="QGroundControl/Controls/ExclusiveGroupItem.qml">src/QmlControls/ExclusiveGroupItem.qml</file>
<!-- Vehicle Setup -->
<file alias="SetupView.qml">src/VehicleSetup/SetupView.qml</file>
...
...
src/FlightDisplay/FlightDisplayView.cc
View file @
3b5740bc
...
...
@@ -35,7 +35,7 @@ This file is part of the QGROUNDCONTROL project
const
char
*
kMainFlightDisplayViewGroup
=
"FlightDisplayView"
;
FlightDisplayView
::
FlightDisplayView
(
QWidget
*
parent
)
:
QGCQmlWidgetHolder
(
parent
)
:
QGCQmlWidgetHolder
(
QString
(),
NULL
,
parent
)
{
setSizePolicy
(
QSizePolicy
::
MinimumExpanding
,
QSizePolicy
::
MinimumExpanding
);
setObjectName
(
"FlightDisplayView"
);
...
...
src/FlightDisplay/FlightDisplayWidget.cc
View file @
3b5740bc
...
...
@@ -34,8 +34,8 @@ This file is part of the QGROUNDCONTROL project
const
char
*
kMainFlightDisplayWidgetGroup
=
"FlightDisplayWidget"
;
FlightDisplayWidget
::
FlightDisplayWidget
(
QWidget
*
parent
)
:
QGCQmlWidgetHolder
(
parent
)
FlightDisplayWidget
::
FlightDisplayWidget
(
const
QString
&
title
,
QAction
*
action
,
QWidget
*
parent
)
:
QGCQmlWidgetHolder
(
title
,
action
,
parent
)
{
setSizePolicy
(
QSizePolicy
::
MinimumExpanding
,
QSizePolicy
::
MinimumExpanding
);
setObjectName
(
"FlightDisplayWidget"
);
...
...
@@ -86,6 +86,8 @@ FlightDisplayWidget::FlightDisplayWidget(QWidget *parent)
setSource
(
QUrl
::
fromUserInput
(
"qrc:/qml/FlightDisplayWidget.qml"
));
setVisible
(
true
);
loadSettings
();
}
FlightDisplayWidget
::~
FlightDisplayWidget
()
...
...
src/FlightDisplay/FlightDisplayWidget.h
View file @
3b5740bc
...
...
@@ -30,7 +30,7 @@ class FlightDisplayWidget : public QGCQmlWidgetHolder
{
Q_OBJECT
public:
FlightDisplayWidget
(
QWidget
*
parent
=
NULL
);
FlightDisplayWidget
(
const
QString
&
title
,
QAction
*
action
,
QWidget
*
parent
=
NULL
);
~
FlightDisplayWidget
();
/// @brief Invokes the Flight Display Options menu
...
...
src/FlightMap/FlightMap.qml
View file @
3b5740bc
...
...
@@ -50,7 +50,7 @@ Map {
property
string
mapName
:
'
defaultMap
'
property
string
mapType
:
QGroundControl
.
flightMapSettings
.
mapTypeForMapName
(
mapName
)
property
alias
mapWidgets
:
controlWidgets
property
bool
isSatelliteMap
:
false
property
bool
isSatelliteMap
:
mapType
==
"
Satellite Map
"
||
mapType
==
"
Hybrid Map
"
property
real
lon
:
(
longitude
>=
-
180
&&
longitude
<=
180
)
?
longitude
:
0
property
real
lat
:
(
latitude
>=
-
90
&&
latitude
<=
90
)
?
latitude
:
0
...
...
@@ -289,4 +289,11 @@ Map {
}
}
*/
MouseArea
{
//-- TODO: Check if this is still needed when we switch to 5.5.1
//-- Workaround for QTBUG-46388 (Pinch zoom doesn't work without it on mobile)
anchors.fill
:
parent
}
}
// Map
src/MissionEditor/MissionEditor.cc
View file @
3b5740bc
...
...
@@ -35,9 +35,11 @@ This file is part of the QGROUNDCONTROL project
const
char
*
MissionEditor
::
_settingsGroup
=
"MissionEditor"
;
MissionEditor
::
MissionEditor
(
QWidget
*
parent
)
:
QGCQmlWidgetHolder
(
parent
)
:
QGCQmlWidgetHolder
(
QString
(),
NULL
,
parent
)
,
_missionItems
(
NULL
)
,
_canEdit
(
true
)
,
_activeVehicle
(
NULL
)
,
_liveHomePositionAvailable
(
false
)
{
// Get rid of layout default margins
QLayout
*
pl
=
layout
();
...
...
@@ -45,11 +47,16 @@ MissionEditor::MissionEditor(QWidget *parent)
pl
->
setContentsMargins
(
0
,
0
,
0
,
0
);
}
Vehicle
*
activeVehicle
=
MultiVehicleManager
::
instance
()
->
activeVehicle
();
MultiVehicleManager
*
multiVehicleMgr
=
MultiVehicleManager
::
instance
();
connect
(
multiVehicleMgr
,
&
MultiVehicleManager
::
activeVehicleChanged
,
this
,
&
MissionEditor
::
_activeVehicleChanged
);
Vehicle
*
activeVehicle
=
multiVehicleMgr
->
activeVehicle
();
if
(
activeVehicle
)
{
MissionManager
*
missionManager
=
activeVehicle
->
missionManager
();
connect
(
missionManager
,
&
MissionManager
::
newMissionItemsAvailable
,
this
,
&
MissionEditor
::
_newMissionItemsAvailable
);
_newMissionItemsAvailable
();
_activeVehicleChanged
(
activeVehicle
);
}
else
{
_missionItems
=
new
QmlObjectListModel
(
this
);
_initAllMissionItems
();
...
...
@@ -135,52 +142,6 @@ void MissionEditor::removeMissionItem(int index)
_recalcAll
();
}
void
MissionEditor
::
moveUp
(
int
index
)
{
if
(
!
_canEdit
)
{
qWarning
()
<<
"addMissionItem called with _canEdit == false"
;
return
;
}
if
(
_missionItems
->
count
()
<
2
||
index
<=
0
||
index
>=
_missionItems
->
count
())
{
return
;
}
MissionItem
item1
=
*
qobject_cast
<
MissionItem
*>
(
_missionItems
->
get
(
index
-
1
));
MissionItem
item2
=
*
qobject_cast
<
MissionItem
*>
(
_missionItems
->
get
(
index
));
_missionItems
->
removeAt
(
index
-
1
);
_missionItems
->
removeAt
(
index
-
1
);
_missionItems
->
insert
(
index
-
1
,
new
MissionItem
(
item2
,
_missionItems
));
_missionItems
->
insert
(
index
,
new
MissionItem
(
item1
,
_missionItems
));
_recalcAll
();
}
void
MissionEditor
::
moveDown
(
int
index
)
{
if
(
!
_canEdit
)
{
qWarning
()
<<
"addMissionItem called with _canEdit == false"
;
return
;
}
if
(
_missionItems
->
count
()
<
2
||
index
>=
_missionItems
->
count
()
-
1
)
{
return
;
}
MissionItem
item1
=
*
qobject_cast
<
MissionItem
*>
(
_missionItems
->
get
(
index
));
MissionItem
item2
=
*
qobject_cast
<
MissionItem
*>
(
_missionItems
->
get
(
index
+
1
));
_missionItems
->
removeAt
(
index
);
_missionItems
->
removeAt
(
index
);
_missionItems
->
insert
(
index
,
new
MissionItem
(
item2
,
_missionItems
));
_missionItems
->
insert
(
index
+
1
,
new
MissionItem
(
item1
,
_missionItems
));
_recalcAll
();
}
void
MissionEditor
::
loadMissionFromFile
(
void
)
{
QString
errorString
;
...
...
@@ -389,3 +350,34 @@ void MissionEditor::_itemCommandChanged(MavlinkQmlSingleton::Qml_MAV_CMD command
_recalcChildItems
();
_recalcWaypointLines
();
}
void
MissionEditor
::
_activeVehicleChanged
(
Vehicle
*
activeVehicle
)
{
if
(
_activeVehicle
)
{
disconnect
(
_activeVehicle
,
&
Vehicle
::
homePositionAvailableChanged
,
this
,
&
MissionEditor
::
_activeVehicleHomePositionAvailableChanged
);
disconnect
(
_activeVehicle
,
&
Vehicle
::
homePositionChanged
,
this
,
&
MissionEditor
::
_activeVehicleHomePositionChanged
);
_activeVehicle
=
NULL
;
_activeVehicleHomePositionAvailableChanged
(
false
);
}
_activeVehicle
=
activeVehicle
;
if
(
_activeVehicle
)
{
connect
(
_activeVehicle
,
&
Vehicle
::
homePositionAvailableChanged
,
this
,
&
MissionEditor
::
_activeVehicleHomePositionAvailableChanged
);
connect
(
_activeVehicle
,
&
Vehicle
::
homePositionChanged
,
this
,
&
MissionEditor
::
_activeVehicleHomePositionChanged
);
_activeVehicleHomePositionChanged
(
_activeVehicle
->
homePosition
());
_activeVehicleHomePositionAvailableChanged
(
_activeVehicle
->
homePositionAvailable
());
}
}
void
MissionEditor
::
_activeVehicleHomePositionAvailableChanged
(
bool
homePositionAvailable
)
{
_liveHomePositionAvailable
=
homePositionAvailable
;
emit
liveHomePositionAvailableChanged
(
_liveHomePositionAvailable
);
}
void
MissionEditor
::
_activeVehicleHomePositionChanged
(
const
QGeoCoordinate
&
homePosition
)
{
_liveHomePosition
=
homePosition
;
emit
liveHomePositionChanged
(
_liveHomePosition
);
}
src/MissionEditor/MissionEditor.h
View file @
3b5740bc
...
...
@@ -26,6 +26,7 @@ This file is part of the QGROUNDCONTROL project
#include "QGCQmlWidgetHolder.h"
#include "QmlObjectListModel.h"
#include "Vehicle.h"
class
MissionEditor
:
public
QGCQmlWidgetHolder
{
...
...
@@ -38,6 +39,8 @@ public:
Q_PROPERTY
(
QmlObjectListModel
*
missionItems
READ
missionItems
NOTIFY
missionItemsChanged
)
Q_PROPERTY
(
QmlObjectListModel
*
waypointLines
READ
waypointLines
NOTIFY
waypointLinesChanged
)
Q_PROPERTY
(
bool
canEdit
READ
canEdit
NOTIFY
canEditChanged
)
Q_PROPERTY
(
bool
liveHomePositionAvailable
READ
liveHomePositionAvailable
NOTIFY
liveHomePositionAvailableChanged
)
Q_PROPERTY
(
QGeoCoordinate
liveHomePosition
READ
liveHomePosition
NOTIFY
liveHomePositionChanged
)
Q_INVOKABLE
int
addMissionItem
(
QGeoCoordinate
coordinate
);
Q_INVOKABLE
void
getMissionItems
(
void
);
...
...
@@ -45,24 +48,29 @@ public:
Q_INVOKABLE
void
loadMissionFromFile
(
void
);
Q_INVOKABLE
void
saveMissionToFile
(
void
);
Q_INVOKABLE
void
removeMissionItem
(
int
index
);
Q_INVOKABLE
void
moveUp
(
int
index
);
Q_INVOKABLE
void
moveDown
(
int
index
);
// Property accessors
QmlObjectListModel
*
missionItems
(
void
)
{
return
_missionItems
;
}
QmlObjectListModel
*
waypointLines
(
void
)
{
return
&
_waypointLines
;
}
bool
canEdit
(
void
)
{
return
_canEdit
;
}
bool
liveHomePositionAvailable
(
void
)
{
return
_liveHomePositionAvailable
;
}
QGeoCoordinate
liveHomePosition
(
void
)
{
return
_liveHomePosition
;
}
signals:
void
missionItemsChanged
(
void
);
void
canEditChanged
(
bool
canEdit
);
void
waypointLinesChanged
(
void
);
void
liveHomePositionAvailableChanged
(
bool
homePositionAvailable
);
void
liveHomePositionChanged
(
const
QGeoCoordinate
&
homePosition
);
private
slots
:
void
_newMissionItemsAvailable
();
void
_itemCoordinateChanged
(
const
QGeoCoordinate
&
coordinate
);
void
_itemCommandChanged
(
MavlinkQmlSingleton
::
Qml_MAV_CMD
command
);
void
_activeVehicleChanged
(
Vehicle
*
activeVehicle
);
void
_activeVehicleHomePositionAvailableChanged
(
bool
homePositionAvailable
);
void
_activeVehicleHomePositionChanged
(
const
QGeoCoordinate
&
homePosition
);
private:
void
_recalcSequence
(
void
);
...
...
@@ -78,6 +86,9 @@ private:
QmlObjectListModel
*
_missionItems
;
QmlObjectListModel
_waypointLines
;
bool
_canEdit
;
///< true: UI can edit these items, false: can't edit, can only send to vehicle or save
Vehicle
*
_activeVehicle
;
bool
_liveHomePositionAvailable
;
QGeoCoordinate
_liveHomePosition
;
static
const
char
*
_settingsGroup
;
};
...
...
src/MissionEditor/MissionEditor.qml
View file @
3b5740bc
This diff is collapsed.
Click to expand it.
src/QGCApplication.cc
View file @
3b5740bc
...
...
@@ -450,9 +450,11 @@ bool QGCApplication::_initForNormalAppBoot(void)
splashScreen
->
finish
(
mainWindow
);
mainWindow
->
splashScreenFinished
();
#ifndef __mobile__
// Now that main window is up check for lost log files
connect
(
this
,
&
QGCApplication
::
checkForLostLogFiles
,
MAVLinkProtocol
::
instance
(),
&
MAVLinkProtocol
::
checkForLostLogFiles
);
emit
checkForLostLogFiles
();
#endif
// Load known link configurations
LinkManager
::
instance
()
->
loadLinkConfigurationList
();
...
...
src/QGCDockWidget.cc
View file @
3b5740bc
...
...
@@ -24,24 +24,51 @@
#include "QGCDockWidget.h"
#include <QCloseEvent>
#include <QSettings>
QGCDockWidget
::
QGCDockWidget
(
const
QString
&
title
,
QAction
*
action
,
QWidget
*
parent
,
Qt
::
WindowFlags
flags
)
:
QDockWidget
(
title
,
parent
,
flags
),
_action
(
action
)
{
QDockWidget
::
DockWidgetFeatures
features
=
QDockWidget
::
DockWidgetMovable
;
const
char
*
QGCDockWidget
::
_settingsGroup
=
"DockWidgets"
;
QGCDockWidget
::
QGCDockWidget
(
const
QString
&
title
,
QAction
*
action
,
QWidget
*
parent
)
:
QWidget
(
parent
)
,
_title
(
title
)
,
_action
(
action
)
{
if
(
action
)
{
features
|=
QDockWidget
::
DockWidgetClosable
;
setWindowTitle
(
title
);
setWindowFlags
(
Qt
::
Tool
);
loadSettings
();
}
setFeatures
(
features
);
}
// Instead of destroying the widget just hide it
void
QGCDockWidget
::
closeEvent
(
QCloseEvent
*
event
)
{
Q_ASSERT
(
_action
);
if
(
_action
)
{
saveSettings
();
event
->
ignore
();
_action
->
trigger
();
}
}
void
QGCDockWidget
::
loadSettings
(
void
)
{
if
(
_action
)
{
QSettings
settings
;
settings
.
beginGroup
(
_settingsGroup
);
if
(
settings
.
contains
(
_title
))
{
restoreGeometry
(
settings
.
value
(
_title
).
toByteArray
());
}
}
}
void
QGCDockWidget
::
saveSettings
(
void
)
{
if
(
_action
)
{
QSettings
settings
;
settings
.
beginGroup
(
_settingsGroup
);
settings
.
setValue
(
_title
,
saveGeometry
());
}
}
src/QGCDockWidget.h
View file @
3b5740bc
...
...
@@ -27,21 +27,22 @@
#include <QDockWidget>
#include <QAction>
/// @file
/// @brief Subclass of QDockWidget so we can intercept the closeEvent.
///
/// @author Don Gagne <don@thegagnes.com>
class
QGCDockWidget
:
public
QDockWidget
{
class
QGCDockWidget
:
public
QWidget
{
Q_OBJECT
public:
QGCDockWidget
(
const
QString
&
title
,
QAction
*
action
,
QWidget
*
parent
=
0
,
Qt
::
WindowFlags
flags
=
0
);
/// Pass in title = QString() and action = NULL when just using as a regular widget
QGCDockWidget
(
const
QString
&
title
,
QAction
*
action
,
QWidget
*
parent
=
0
);
void
loadSettings
(
void
);
void
saveSettings
(
void
);
void
closeEvent
(
QCloseEvent
*
event
);
private:
protected:
QString
_title
;
QAction
*
_action
;
static
const
char
*
_settingsGroup
;
};
...
...
src/QGCQmlWidgetHolder.cpp
View file @
3b5740bc
...
...
@@ -26,10 +26,14 @@
#include "QGCQmlWidgetHolder.h"
QGCQmlWidgetHolder
::
QGCQmlWidgetHolder
(
QWidget
*
parent
)
:
Q
Widget
(
parent
)
QGCQmlWidgetHolder
::
QGCQmlWidgetHolder
(
const
QString
&
title
,
QAction
*
action
,
QWidget
*
parent
)
:
Q
GCDockWidget
(
title
,
action
,
parent
)
{
_ui
.
setupUi
(
this
);
if
(
action
)
{
setWindowTitle
(
title
);
}
setResizeMode
(
QQuickWidget
::
SizeRootObjectToView
);
}
...
...
src/QGCQmlWidgetHolder.h
View file @
3b5740bc
...
...
@@ -27,10 +27,10 @@
/// @file
/// @author Don Gagne <don@thegagnes.com>
#include <QWidget>
#include "QGCDockWidget.h"
#include "AutoPilotPlugin.h"
#include "ui_QGCQmlWidgetHolder.h"
#include "AutoPilotPlugin.h"
namespace
Ui
{
class
QGCQmlWidgetHolder
;
...
...
@@ -38,12 +38,16 @@ class QGCQmlWidgetHolder;
/// This is used to create widgets which are implemented in QML.
class
QGCQmlWidgetHolder
:
public
QWidget
class
QGCQmlWidgetHolder
:
public
Q
GCDock
Widget
{
Q_OBJECT
public:
explicit
QGCQmlWidgetHolder
(
QWidget
*
parent
=
0
);
// This has a title and action since the base class is QGCDockWidget. In order to use this
// control as a normal QWidget, not a doc widget just pass in:
// title = QString()
// action = NULL
explicit
QGCQmlWidgetHolder
(
const
QString
&
title
,
QAction
*
action
,
QWidget
*
parent
=
0
);
~
QGCQmlWidgetHolder
();
/// Sets the UAS into the widget which in turn will load facts into the context
...
...
src/QmlControls/ExclusiveGroupItem.qml
0 → 100644
View file @
3b5740bc
import
QtQuick
2.4
import
QtQuick
.
Controls
1.2
/// The ExclusiveGroupItem control can be used as a base class for a control which
/// needs support for ExclusiveGroup
Item
{
id
:
_root
property
bool
checked
:
false
property
ExclusiveGroup
exclusiveGroup
:
null
onExclusiveGroupChanged
:
{
if
(
exclusiveGroup
)
{
exclusiveGroup
.
bindCheckable
(
_root
)
}
}
}
src/QmlControls/MissionItemEditor.qml
View file @
3b5740bc
...
...
@@ -13,17 +13,16 @@ import QGroundControl.Palette 1.0
Rectangle
{
id
:
_root
property
var
missionItem
property
var
missionItem
///< MissionItem associated with this editor
property
bool
readOnly
///< true: read only view, false: full editing view
signal
clicked
signal
remove
signal
moveUp
signal
moveDown
height
:
missionItem
.
isCurrentItem
?
(
missionItem
.
textFieldFacts
.
count
*
(
measureTextField
.
height
+
_margin
))
+
(
missionItem
.
checkboxFacts
.
count
*
(
measureCheckbox
.
height
+
_margin
))
+
commandPicker
.
height
+
deleteButton
.
height
+
(
_margin
*
9
)
:
commandPicker
.
height
+
(
deleteButton
.
visible
?
deleteButton
.
height
:
0
)
+
(
_margin
*
9
)
:
commandPicker
.
height
+
(
_margin
*
2
)
color
:
missionItem
.
isCurrentItem
?
qgcPal
.
buttonHighlight
:
qgcPal
.
windowShade
...
...
@@ -63,7 +62,6 @@ Rectangle {
onClicked
:
_root
.
clicked
()
}
QGCComboBox
{
id
:
commandPicker
anchors.leftMargin
:
ScreenTools
.
defaultFontPixelWidth
*
10
...
...
@@ -71,7 +69,7 @@ Rectangle {
anchors.right
:
parent
.
right
currentIndex
:
missionItem
.
commandByIndex
model
:
missionItem
.
commandNames
visible
:
missionItem
.
sequenceNumber
!=
0
visible
:
missionItem
.
sequenceNumber
!=
0
// Item 0 is home position, can't change item type
onActivated
:
missionItem
.
commandByIndex
=
index
}
...
...
@@ -79,7 +77,7 @@ Rectangle {
Rectangle
{
anchors.fill
:
commandPicker
color
:
qgcPal
.
button
visible
:
missionItem
.
sequenceNumber
==
0
visible
:
missionItem
.
sequenceNumber
==
0
// Item 0 is home position, can't change item type
QGCLabel
{
id
:
homeLabel
...
...
@@ -119,6 +117,7 @@ Rectangle {
height
:
textField
.
height
QGCLabel
{
id
:
textFieldLabel
anchors.baseline
:
textField
.
baseline
text
:
object
.
name
}
...
...
@@ -129,6 +128,14 @@ Rectangle {
width
:
_editFieldWidth
showUnits
:
true
fact
:
object
visible
:
!
_root
.
readOnly
}
FactLabel
{
anchors.baseline
:
textFieldLabel
.
baseline
anchors.right
:
parent
.
right
fact
:
object
visible
:
_root
.
readOnly
}
}
}
...
...
@@ -163,23 +170,10 @@ Rectangle {
id
:
deleteButton
width
:
parent
.
buttonWidth
text
:
"
Delete
"
visible
:
!
readOnly
onClicked
:
_root
.
remove
()
}
QGCButton
{
width
:
parent
.
buttonWidth
text
:
"
Up
"
onClicked
:
_root
.
moveUp
()
}
QGCButton
{
width
:
parent
.
buttonWidth
text
:
"
Down
"
onClicked
:
_root
.
moveDown
()
}
}
}
// Column
...
...
src/QmlControls/QGroundControl.Controls.qmldir
View file @
3b5740bc
...
...
@@ -18,6 +18,7 @@ RoundButton 1.0 RoundButton.qml
VehicleRotationCal 1.0 VehicleRotationCal.qml
VehicleSummaryRow 1.0 VehicleSummaryRow.qml
ViewWidget 1.0 ViewWidget.qml
ExclusiveGroupItem 1.0 ExclusiveGroupItem.qml
ParameterEditor 1.0 ParameterEditor.qml
ParameterEditorDialog 1.0 ParameterEditorDialog.qml
...
...
src/QmlControls/QmlTestWidget.cc
View file @
3b5740bc
...
...
@@ -27,6 +27,7 @@
#include "QmlTestWidget.h"
QmlTestWidget
::
QmlTestWidget
(
void
)
:
QGCQmlWidgetHolder
(
QString
(),
NULL
,
NULL
)
{
setAttribute
(
Qt
::
WA_DeleteOnClose
);
resize
(
900
,
500
);
...
...
src/QmlControls/ScreenToolsController.cc
View file @
3b5740bc
...
...
@@ -55,7 +55,7 @@ void ScreenToolsController::_updateCanvas()
double
ScreenToolsController
::
getQmlDefaultFontPixelSize
(
void
)
{
if
(
_qmlDefaultFontPixelSize
==
-
1
)
{
QGCQmlWidgetHolder
qmlWidgetHolder
;
QGCQmlWidgetHolder
qmlWidgetHolder
(
QString
(),
NULL
)
;
qmlWidgetHolder
.
setSource
(
QUrl
::
fromUserInput
(
"qrc:/qml/ScreenToolsFontQuery.qml"
));
}
...
...
src/Vehicle/Vehicle.cc
View file @
3b5740bc
...
...
@@ -227,8 +227,8 @@ void Vehicle::_handleHomePosition(mavlink_message_t& message)
_homePosition
.
setAltitude
(
homePos
.
altitude
/
1000.0
);
_homePositionAvailable
=
true
;
emit
homePositionAvailableChanged
(
true
);
emit
homePositionChanged
(
_homePosition
);
emit
homePositionAvailableChanged
(
true
);
}
void
Vehicle
::
_handleHeartbeat
(
mavlink_message_t
&
message
)
...
...
@@ -963,10 +963,6 @@ bool Vehicle::homePositionAvailable(void)
QGeoCoordinate
Vehicle
::
homePosition
(
void
)
{
if
(
!
_homePositionAvailable
)
{
qWarning
()
<<
"Call to homePosition while _homePositionAvailable == false"
;
}
return
_homePosition
;
}
...
...
src/VehicleSetup/SetupView.cc
View file @
3b5740bc
...
...
@@ -41,7 +41,7 @@
#include <QDebug>
SetupView
::
SetupView
(
QWidget
*
parent
)
:
QGCQmlWidgetHolder
(
parent
)
QGCQmlWidgetHolder
(
QString
(),
NULL
,
parent
)
{
setSource
(
QUrl
::
fromUserInput
(
"qrc:/qml/SetupView.qml"
));
}
...
...
src/ViewWidgets/CustomCommandWidget.cc
View file @
3b5740bc
...
...
@@ -23,8 +23,12 @@ This file is part of the QGROUNDCONTROL project
#include "CustomCommandWidget.h"
CustomCommandWidget
::
CustomCommandWidget
(
QWidget
*
parent
)
:
QGCQmlWidgetHolder
(
parent
)
CustomCommandWidget
::
CustomCommandWidget
(
const
QString
&
title
,
QAction
*
action
,
QWidget
*
parent
)
:
QGCQmlWidgetHolder
(
title
,
action
,
parent
)
{
Q_UNUSED
(
title
);
Q_UNUSED
(
action
);
setSource
(
QUrl
::
fromUserInput
(
"qrc:/qml/CustomCommandWidget.qml"
));
loadSettings
();
}
src/ViewWidgets/CustomCommandWidget.h
View file @
3b5740bc
...
...
@@ -34,7 +34,7 @@ class CustomCommandWidget : public QGCQmlWidgetHolder
Q_OBJECT
public:
CustomCommandWidget
(
QWidget
*
parent
=
0
);
CustomCommandWidget
(
const
QString
&
title
,
QAction
*
action
,
QWidget
*
parent
=
0
);
};
#endif
src/comm/LogReplayLink.cc
View file @
3b5740bc
...
...
@@ -367,7 +367,9 @@ void LogReplayLink::_play(void)
{
// FIXME: With move to link I don't think this is needed any more? Except for the replay widget handling multi-uas?
LinkManager
::
instance
()
->
setConnectionsSuspended
(
tr
(
"Connect not allowed during Flight Data replay."
));
#ifndef __mobile__
MAVLinkProtocol
::
instance
()
->
suspendLogForReplay
(
true
);
#endif
// Make sure we aren't at the end of the file, if we are, reset to the beginning and play from there.
if
(
_logFile
.
atEnd
())
{
...
...
@@ -397,7 +399,9 @@ void LogReplayLink::_play(void)
void
LogReplayLink
::
_pause
(
void
)
{
LinkManager
::
instance
()
->
setConnectionsAllowed
();
#ifndef __mobile__
MAVLinkProtocol
::
instance
()
->
suspendLogForReplay
(
false
);
#endif
_readTickTimer
.
stop
();
...
...
src/comm/MAVLinkProtocol.cc
View file @
3b5740bc
...
...
@@ -33,8 +33,10 @@ Q_DECLARE_METATYPE(mavlink_message_t)
IMPLEMENT_QGC_SINGLETON
(
MAVLinkProtocol
,
MAVLinkProtocol
)
QGC_LOGGING_CATEGORY
(
MAVLinkProtocolLog
,
"MAVLinkProtocolLog"
)
#ifndef __mobile__
const
char
*
MAVLinkProtocol
::
_tempLogFileTemplate
=
"FlightDataXXXXXX"
;
///< Template for temporary log file
const
char
*
MAVLinkProtocol
::
_logFileExtension
=
"mavlink"
;
///< Extension for log files
#endif
/**
* The default constructor will create a new MAVLink object sending heartbeats at
...
...
@@ -52,10 +54,12 @@ MAVLinkProtocol::MAVLinkProtocol(QObject* parent) :
m_actionRetransmissionTimeout
(
100
),
versionMismatchIgnore
(
false
),
systemId
(
QGC
::
defaultSystemId
),
#ifndef __mobile__
_logSuspendError
(
false
),
_logSuspendReplay
(
false
),
_logWasArmed
(
false
),
_tempLogFile
(
QString
(
"%2.%3"
).
arg
(
_tempLogFileTemplate
).
arg
(
_logFileExtension
)),
#endif
_linkMgr
(
LinkManager
::
instance
()),
_heartbeatRate
(
MAVLINK_HEARTBEAT_DEFAULT_RATE
),
_heartbeatsEnabled
(
true
)
...
...
@@ -91,7 +95,9 @@ MAVLinkProtocol::~MAVLinkProtocol()
{
storeSettings
();
#ifndef __mobile__
_closeLogFile
();
#endif
}
void
MAVLinkProtocol
::
loadSettings
()
...
...
@@ -181,10 +187,12 @@ void MAVLinkProtocol::_linkStatusChanged(LinkInterface* link, bool connected)
// Use the same shared pointer as LinkManager
_connectedLinks
.
append
(
LinkManager
::
instance
()
->
sharedPointerForLink
(
link
));
#ifndef __mobile__
if
(
_connectedLinks
.
count
()
==
1
)
{
// This is the first link, we need to start logging
_startLogging
();
}
#endif
// Send command to start MAVLink
// XXX hacky but safe
...
...
@@ -206,10 +214,12 @@ void MAVLinkProtocol::_linkStatusChanged(LinkInterface* link, bool connected)
Q_UNUSED
(
found
);
Q_ASSERT
(
found
);
#ifndef __mobile__
if
(
_connectedLinks
.
count
()
==
0
)
{
// Last link is gone, close out logging
_stopLogging
();
}
#endif
}
}
...
...
@@ -303,6 +313,7 @@ void MAVLinkProtocol::receiveBytes(LinkInterface* link, QByteArray b)
rstatus
.
txbuf
,
rstatus
.
noise
,
rstatus
.
remnoise
);
}
#ifndef __mobile__
// Log data
if
(
!
_logSuspendError
&&
!
_logSuspendReplay
&&
_tempLogFile
.
isOpen
())
{
...
...
@@ -339,6 +350,7 @@ void MAVLinkProtocol::receiveBytes(LinkInterface* link, QByteArray b)
}
}
}
#endif
if
(
message
.
msgid
==
MAVLINK_MSG_ID_HEARTBEAT
)
{
// Notify the vehicle manager of the heartbeat. This will create/update vehicles as needed.
...
...
@@ -613,6 +625,7 @@ int MAVLinkProtocol::getHeartbeatRate()
return
_heartbeatRate
;
}
#ifndef __mobile__
/// @brief Closes the log file if it is open
bool
MAVLinkProtocol
::
_closeLogFile
(
void
)
{
...
...
@@ -707,3 +720,4 @@ void MAVLinkProtocol::deleteTempLogFiles(void)
QFile
::
remove
(
fileInfo
.
filePath
());
}
}
#endif
src/comm/MAVLinkProtocol.h
View file @
3b5740bc
...
...
@@ -203,11 +203,13 @@ public slots:
/** @brief Store protocol settings */
void
storeSettings
();
#ifndef __mobile__
/// @brief Deletes any log files which are in the temp directory
static
void
deleteTempLogFiles
(
void
);
/// Checks for lost log files
void
checkForLostLogFiles
(
void
);
#endif
protected:
bool
m_multiplexingEnabled
;
///< Enable/disable packet multiplexing
...
...
@@ -281,15 +283,12 @@ private:
~
MAVLinkProtocol
();
void
_linkStatusChanged
(
LinkInterface
*
link
,
bool
connected
);
#ifndef __mobile__
bool
_closeLogFile
(
void
);
void
_startLogging
(
void
);
void
_stopLogging
(
void
);
/// List of all links connected to protocol. We keep SharedLinkInterface objects
/// which are QSharedPointer's in order to maintain reference counts across threads.
/// This way Link deletion works correctly.
QList
<
SharedLinkInterface
>
_connectedLinks
;
bool
_logSuspendError
;
///< true: Logging suspended due to error
bool
_logSuspendReplay
;
///< true: Logging suspended due to replay
bool
_logWasArmed
;
///< true: vehicle was armed during logging
...
...
@@ -297,6 +296,12 @@ private:
QGCTemporaryFile
_tempLogFile
;
///< File to log to
static
const
char
*
_tempLogFileTemplate
;
///< Template for temporary log file
static
const
char
*
_logFileExtension
;
///< Extension for log files
#endif
/// List of all links connected to protocol. We keep SharedLinkInterface objects
/// which are QSharedPointer's in order to maintain reference counts across threads.
/// This way Link deletion works correctly.
QList
<
SharedLinkInterface
>
_connectedLinks
;
LinkManager
*
_linkMgr
;
...
...
src/comm/MockLink.cc
View file @
3b5740bc
...
...
@@ -157,6 +157,7 @@ void MockLink::_run1HzTasks(void)
{
if
(
_mavlinkStarted
&&
_connected
)
{
_sendHeartBeat
();
_sendHomePosition
();
}
}
...
...
@@ -692,3 +693,25 @@ void MockLink::setMissionItemFailureMode(MockLinkMissionItemHandler::FailureMode
{
_missionItemHandler
.
setMissionItemFailureMode
(
failureMode
,
firstTimeOnly
);
}
void
MockLink
::
_sendHomePosition
(
void
)
{
mavlink_message_t
msg
;
float
bogus
[
4
];
bogus
[
0
]
=
0.0
f
;
bogus
[
1
]
=
0.0
f
;
bogus
[
2
]
=
0.0
f
;
bogus
[
3
]
=
0.0
f
;
mavlink_msg_home_position_pack
(
_vehicleSystemId
,
_vehicleComponentId
,
&
msg
,
(
int32_t
)(
47.633033
f
*
1E7
),
(
int32_t
)(
-
122.08794
f
*
1E7
),
(
int32_t
)(
2.0
f
*
1000
),
0.0
f
,
0.0
f
,
0.0
f
,
&
bogus
[
0
],
0.0
f
,
0.0
f
,
0.0
f
);
respondWithMavlinkMessage
(
msg
);
}
src/comm/MockLink.h
View file @
3b5740bc
...
...
@@ -143,6 +143,7 @@ private:
void
_handleCommandLong
(
const
mavlink_message_t
&
msg
);
float
_floatUnionForParam
(
int
componentId
,
const
QString
&
paramName
);
void
_setParamFloatUnionIntoMap
(
int
componentId
,
const
QString
&
paramName
,
float
paramFloat
);
void
_sendHomePosition
(
void
);
MockLinkMissionItemHandler
_missionItemHandler
;
...
...
src/qgcunittest/MainWindowTest.cc
View file @
3b5740bc
...
...
@@ -84,8 +84,6 @@ void MainWindowTest::_connectWindowClose_test(MAV_AUTOPILOT autopilot)
QTest
::
qWait
(
200
);
_mainToolBar
->
onFlyView
();
QTest
::
qWait
(
200
);
_mainToolBar
->
onAnalyzeView
();
QTest
::
qWait
(
200
);
// On MainWindow close we should get a message box telling the user to disconnect first. Cancel should do nothing.
setExpectedMessageBox
(
QGCMessageBox
::
Cancel
);
...
...
src/qgcunittest/PX4RCCalibrationTest.cc
View file @
3b5740bc
...
...
@@ -164,7 +164,7 @@ void RadioConfigTest::init(void)
Q_ASSERT
(
_autopilot
);
// This will instatiate the widget with an active uas with ready parameters
_calWidget
=
new
QGCQmlWidgetHolder
();
_calWidget
=
new
QGCQmlWidgetHolder
(
QString
(),
NULL
);
_calWidget
->
resize
(
600
,
600
);
Q_CHECK_PTR
(
_calWidget
);
_calWidget
->
setAutoPilot
(
_autopilot
);
...
...
src/uas/UAS.cc
View file @
3b5740bc
...
...
@@ -206,6 +206,7 @@ UAS::~UAS()
if
(
simulation
)
{
// wait for the simulator to exit
simulation
->
wait
();
simulation
->
disconnectSimulation
();
simulation
->
deleteLater
();
}
#endif
...
...
@@ -1950,7 +1951,7 @@ void UAS::enableHilFlightGear(bool enable, QString options, bool sensorHil, QObj
Q_UNUSED
(
configuration
);
QGCFlightGearLink
*
link
=
dynamic_cast
<
QGCFlightGearLink
*>
(
simulation
);
if
(
!
link
||
!
simulation
)
{
if
(
!
link
)
{
// Delete wrong sim
if
(
simulation
)
{
stopHil
();
...
...
@@ -1959,18 +1960,18 @@ void UAS::enableHilFlightGear(bool enable, QString options, bool sensorHil, QObj
simulation
=
new
QGCFlightGearLink
(
this
,
options
);
}
float
noise_scaler
=
0.0
5
f
;
float
noise_scaler
=
0.0
02
f
;
xacc_var
=
noise_scaler
*
0.2914
f
;
yacc_var
=
noise_scaler
*
0.2914
f
;
zacc_var
=
noise_scaler
*
0.9577
f
;
rollspeed_var
=
noise_scaler
*
0.
1
f
*
0.
8126
f
;
pitchspeed_var
=
noise_scaler
*
0.
1
f
*
0.
6145
f
;
yawspeed_var
=
noise_scaler
*
0.
1
f
*
0.
5852
f
;
rollspeed_var
=
noise_scaler
*
0.8126
f
;
pitchspeed_var
=
noise_scaler
*
0.6145
f
;
yawspeed_var
=
noise_scaler
*
0.5852
f
;
xmag_var
=
noise_scaler
*
0.0786
f
;
ymag_var
=
noise_scaler
*
0.0566
f
;
zmag_var
=
noise_scaler
*
0.0333
f
;
abs_pressure_var
=
noise_scaler
*
1.1604
f
;
diff_pressure_var
=
noise_scaler
*
0.
6
604
f
;
diff_pressure_var
=
noise_scaler
*
0.
3
604
f
;
pressure_alt_var
=
noise_scaler
*
1.1604
f
;
temperature_var
=
noise_scaler
*
2.4290
f
;
...
...
@@ -1998,7 +1999,7 @@ void UAS::enableHilFlightGear(bool enable, QString options, bool sensorHil, QObj
void
UAS
::
enableHilJSBSim
(
bool
enable
,
QString
options
)
{
QGCJSBSimLink
*
link
=
dynamic_cast
<
QGCJSBSimLink
*>
(
simulation
);
if
(
!
link
||
!
simulation
)
{
if
(
!
link
)
{
// Delete wrong sim
if
(
simulation
)
{
stopHil
();
...
...
@@ -2027,25 +2028,25 @@ void UAS::enableHilJSBSim(bool enable, QString options)
void
UAS
::
enableHilXPlane
(
bool
enable
)
{
QGCXPlaneLink
*
link
=
dynamic_cast
<
QGCXPlaneLink
*>
(
simulation
);
if
(
!
link
||
!
simulation
)
{
if
(
!
link
)
{
if
(
simulation
)
{
stopHil
();
delete
simulation
;
}
simulation
=
new
QGCXPlaneLink
(
this
);
float
noise_scaler
=
0.02
f
;
float
noise_scaler
=
0.0
00
2
f
;
xacc_var
=
noise_scaler
*
0.2914
f
;
yacc_var
=
noise_scaler
*
0.2914
f
;
zacc_var
=
noise_scaler
*
0.9577
f
;
rollspeed_var
=
noise_scaler
*
0.
15
f
*
0.
8126
f
;
pitchspeed_var
=
noise_scaler
*
0.
15
f
*
0.
6145
f
;
yawspeed_var
=
noise_scaler
*
0.
15
f
*
0.
5852
f
;
rollspeed_var
=
noise_scaler
*
0.8126
f
;
pitchspeed_var
=
noise_scaler
*
0.6145
f
;
yawspeed_var
=
noise_scaler
*
0.5852
f
;
xmag_var
=
noise_scaler
*
0.0786
f
;
ymag_var
=
noise_scaler
*
0.0566
f
;
zmag_var
=
noise_scaler
*
0.0333
f
;
abs_pressure_var
=
noise_scaler
*
1.1604
f
;
diff_pressure_var
=
noise_scaler
*
0.
6
604
f
;
diff_pressure_var
=
noise_scaler
*
0.
3
604
f
;
pressure_alt_var
=
noise_scaler
*
1.1604
f
;
temperature_var
=
noise_scaler
*
2.4290
f
;
}
...
...
@@ -2348,7 +2349,7 @@ void UAS::startHil()
void
UAS
::
stopHil
()
{
if
(
simulation
&&
simulation
->
isConnected
())
{
simulation
->
disconnectSim
();
simulation
->
disconnectSimulation
();
_vehicle
->
setHilMode
(
false
);
qDebug
()
<<
__FILE__
<<
__LINE__
<<
"HIL is onboard not enabled, trying to disable."
;
}
...
...
src/ui/CameraView.cc
View file @
3b5740bc
...
...
@@ -31,6 +31,7 @@ This file is part of the QGROUNDCONTROL project
#include "CameraView.h"
#include <QDebug>
#include <QtOpenGL>
#include <QOpenGLFunctions_2_0>
CameraView
::
CameraView
(
int
width
,
int
height
,
int
depth
,
int
channels
,
QWidget
*
parent
)
:
QGLWidget
(
parent
)
{
...
...
@@ -237,14 +238,26 @@ void CameraView::setPixels(int imgid, const unsigned char* imageData, int length
void
CameraView
::
paintGL
()
{
glDrawPixels
(
glImage
.
width
(),
glImage
.
height
(),
GL_RGBA
,
GL_UNSIGNED_BYTE
,
glImage
.
bits
());
Q_ASSERT
(
QOpenGLContext
::
currentContext
());
QOpenGLFunctions_2_0
*
funcs
=
QOpenGLContext
::
currentContext
()
->
versionFunctions
<
QOpenGLFunctions_2_0
>
();
if
(
!
funcs
)
{
qWarning
()
<<
"OpenGL 2.0 not available on this platform. CameraView will not function"
;
return
;
}
funcs
->
glDrawPixels
(
glImage
.
width
(),
glImage
.
height
(),
GL_RGBA
,
GL_UNSIGNED_BYTE
,
glImage
.
bits
());
}
void
CameraView
::
resizeGL
(
int
w
,
int
h
)
{
glViewport
(
0
,
0
,
w
,
h
);
glMatrixMode
(
GL_PROJECTION
);
glLoadIdentity
();
glOrtho
(
0
,
w
,
0
,
h
,
-
1
,
1
);
glMatrixMode
(
GL_MODELVIEW
);
Q_ASSERT
(
QOpenGLContext
::
currentContext
());
QOpenGLFunctions_2_0
*
funcs
=
QOpenGLContext
::
currentContext
()
->
versionFunctions
<
QOpenGLFunctions_2_0
>
();
if
(
!
funcs
)
{
// paintGL warning should suffice
return
;
}
funcs
->
glViewport
(
0
,
0
,
w
,
h
);
funcs
->
glMatrixMode
(
GL_PROJECTION
);
funcs
->
glLoadIdentity
();
funcs
->
glOrtho
(
0
,
w
,
0
,
h
,
-
1
,
1
);
funcs
->
glMatrixMode
(
GL_MODELVIEW
);
}
src/ui/HILDockWidget.cc
View file @
3b5740bc
...
...
@@ -24,10 +24,12 @@
#include "HILDockWidget.h"
#include "QGCHilConfiguration.h"
HILDockWidget
::
HILDockWidget
(
QWidget
*
parent
)
:
MultiVehicleDockWidget
(
parent
)
HILDockWidget
::
HILDockWidget
(
const
QString
&
title
,
QAction
*
action
,
QWidget
*
parent
)
:
MultiVehicleDockWidget
(
title
,
action
,
parent
)
{
init
();
loadSettings
();
}
HILDockWidget
::~
HILDockWidget
()
...
...
src/ui/HILDockWidget.h
View file @
3b5740bc
...
...
@@ -31,7 +31,7 @@ class HILDockWidget : public MultiVehicleDockWidget
Q_OBJECT
public:
explicit
HILDockWidget
(
QWidget
*
parent
=
0
);
explicit
HILDockWidget
(
const
QString
&
title
,
QAction
*
action
,
QWidget
*
parent
=
0
);
~
HILDockWidget
();
protected:
...
...
src/ui/MainWindow.cc
View file @
3b5740bc
This diff is collapsed.
Click to expand it.
src/ui/MainWindow.h
View file @
3b5740bc
...
...
@@ -35,26 +35,27 @@ This file is part of the QGROUNDCONTROL project
#include <QStatusBar>
#include <QStackedWidget>
#include <QSettings>
#include <
qlist.h
>
#include <
QList
>
#include "ui_MainWindow.h"
#include "LinkManager.h"
#include "LinkInterface.h"
#include "UASInterface.h"
#include "CameraView.h"
#if (defined QGC_MOUSE_ENABLED_WIN) | (defined QGC_MOUSE_ENABLED_LINUX)
#include "Mouse6dofInput.h"
#endif // QGC_MOUSE_ENABLED_WIN
#include "MainToolBar.h"
#include "LogCompressor.h"
#include "FlightDisplayView.h"
#include "QGCMAVLinkInspector.h"
#include "QGCMAVLinkLogPlayer.h"
#include "MAVLinkDecoder.h"
#include "Vehicle.h"
#include "QGCDockWidget.h"
#if (defined QGC_MOUSE_ENABLED_WIN) | (defined QGC_MOUSE_ENABLED_LINUX)
#include "Mouse6dofInput.h"
#endif // QGC_MOUSE_ENABLED_WIN
class
QGCFirmwareUpdate
;
class
QSplashScreen
;
class
QGCStatusBar
;
class
Linecharts
;
...
...
@@ -120,7 +121,6 @@ public slots:
void
loadSetupView
();
void
loadFlightView
();
void
loadAnalyzeView
();
void
loadPlanView
();
void
manageLinks
();
...
...
@@ -185,7 +185,7 @@ protected:
typedef
enum
_VIEW_SECTIONS
{
VIEW_
ANALYZE
,
// Engineering/Analyze view mode. Used for analyzing data and modifying onboard parameters
VIEW_
UNUSED5
,
// Unused (don't remove, or it will screw up saved settigns indices)
VIEW_UNUSED3
,
// Unused (don't remove, or it will screw up saved settigns indices)
VIEW_FLIGHT
,
// Flight/Fly/Operate view mode. Used for 1st-person observation of the vehicle.
VIEW_UNUSED4
,
// Unused (don't remove, or it will screw up saved settigns indices)
...
...
@@ -203,7 +203,6 @@ protected:
void
loadSettings
();
void
storeSettings
();
QSettings
settings
;
// Center widgets
...
...
@@ -261,7 +260,6 @@ private:
QPointer
<
QWidget
>
_planView
;
QPointer
<
QWidget
>
_flightView
;
QPointer
<
QWidget
>
_setupView
;
QPointer
<
QWidget
>
_analyzeView
;
QPointer
<
QWidget
>
_missionEditorView
;
#ifndef __mobile__
...
...
@@ -270,19 +268,18 @@ private:
static
const
char
*
_customCommandWidgetName
;
static
const
char
*
_filesDockWidgetName
;
static
const
char
*
_uasStatusDetailsDockWidgetName
;
static
const
char
*
_mapViewDockWidgetName
;
static
const
char
*
_pfdDockWidgetName
;
static
const
char
*
_uasInfoViewDockWidgetName
;
static
const
char
*
_hilDockWidgetName
;
static
const
char
*
_analyzeDockWidgetName
;
QMap
<
QString
,
Q
DockWidget
*>
_mapName2DockWidget
;
QMap
<
Q
DockWidget
*
,
QAction
*>
_mapDockWidget
2Action
;
QMap
<
QString
,
Q
GCDockWidget
*>
_mapName2DockWidget
;
QMap
<
Q
String
,
QAction
*>
_mapName
2Action
;
#endif
void
_buildPlanView
(
void
);
void
_buildFlightView
(
void
);
void
_buildSetupView
(
void
);
void
_buildAnalyzeView
(
void
);
void
_buildTerminalView
(
void
);
void
_buildMissionEditorView
(
void
);
...
...
@@ -290,11 +287,14 @@ private:
void
_loadCurrentViewState
(
void
);
#ifndef __mobile__
void
_createDockWidget
(
const
QString
&
title
,
const
QString
&
name
,
Qt
::
DockWidgetArea
area
,
QWidget
*
innerWidget
);
void
_createInnerDockWidget
(
const
QString
&
widgetName
);
void
_buildCommonWidgets
(
void
);
void
_hideAllDockWidgets
(
void
);
void
_showDockWidget
(
const
QString
&
name
,
bool
show
);
void
_loadVisibleWidgetsSettings
(
void
);
void
_storeVisibleWidgetsSettings
(
void
);
static
const
char
*
_visibleWidgetsKey
;
#endif
bool
_autoReconnect
;
...
...
src/ui/MainWindow.ui
View file @
3b5740bc
...
...
@@ -80,7 +80,6 @@
<addaction
name=
"actionSetup"
/>
<addaction
name=
"actionPlan"
/>
<addaction
name=
"actionFlight"
/>
<addaction
name=
"actionAnalyze"
/>
<addaction
name=
"separator"
/>
<addaction
name=
"actionFullscreen"
/>
<addaction
name=
"actionNormal"
/>
...
...
@@ -134,14 +133,6 @@
<string>
Plan
</string>
</property>
</action>
<action
name=
"actionAnalyze"
>
<property
name=
"checkable"
>
<bool>
true
</bool>
</property>
<property
name=
"text"
>
<string>
Analyze
</string>
</property>
</action>
<action
name=
"actionFlight"
>
<property
name=
"checkable"
>
<bool>
true
</bool>
...
...
@@ -237,9 +228,7 @@
</action>
</widget>
<layoutdefault
spacing=
"6"
margin=
"11"
/>
<resources>
<include
location=
"../../qgroundcontrol.qrc"
/>
</resources>
<resources/>
<connections>
<connection>
<sender>
actionExit
</sender>
...
...
src/ui/MultiVehicleDockWidget.cc
View file @
3b5740bc
...
...
@@ -25,12 +25,14 @@
#include "ui_MultiVehicleDockWidget.h"
#include "MultiVehicleManager.h"
MultiVehicleDockWidget
::
MultiVehicleDockWidget
(
QWidget
*
parent
)
:
Q
Widget
(
parent
)
MultiVehicleDockWidget
::
MultiVehicleDockWidget
(
const
QString
&
title
,
QAction
*
action
,
QWidget
*
parent
)
:
Q
GCDockWidget
(
title
,
action
,
parent
)
,
_ui
(
new
Ui
::
MultiVehicleDockWidget
)
{
_ui
->
setupUi
(
this
);
setWindowTitle
(
title
);
connect
(
MultiVehicleManager
::
instance
(),
&
MultiVehicleManager
::
activeVehicleChanged
,
this
,
&
MultiVehicleDockWidget
::
_activeVehicleChanged
);
connect
(
MultiVehicleManager
::
instance
(),
&
MultiVehicleManager
::
vehicleAdded
,
this
,
&
MultiVehicleDockWidget
::
_vehicleAdded
);
connect
(
MultiVehicleManager
::
instance
(),
&
MultiVehicleManager
::
vehicleRemoved
,
this
,
&
MultiVehicleDockWidget
::
_vehicleRemoved
);
...
...
@@ -38,8 +40,11 @@ MultiVehicleDockWidget::MultiVehicleDockWidget(QWidget *parent)
void
MultiVehicleDockWidget
::
init
(
void
)
{
foreach
(
Vehicle
*
vehicle
,
MultiVehicleManager
::
instance
()
->
vehicles
())
{
_vehicleAdded
(
vehicle
);
}
if
(
MultiVehicleManager
::
instance
()
->
activeVehicle
())
{
_vehicleAdded
(
MultiVehicleManager
::
instance
()
->
activeVehicle
());
_activeVehicleChanged
(
MultiVehicleManager
::
instance
()
->
activeVehicle
());
}
}
...
...
src/ui/MultiVehicleDockWidget.h
View file @
3b5740bc
...
...
@@ -24,9 +24,9 @@
#ifndef MultiVehicleDockWidget_H
#define MultiVehicleDockWidget_H
#include <QWidget>
#include <QMap>
#include "QGCDockWidget.h"
#include "Vehicle.h"
namespace
Ui
...
...
@@ -37,12 +37,12 @@ namespace Ui
/// Provides a base class for a dock widget which automatically handles
/// Vehicles coming and going. It does this by using a stacked widget which
/// holds individual Vehicle specific widgets.
class
MultiVehicleDockWidget
:
public
QWidget
class
MultiVehicleDockWidget
:
public
Q
GCDock
Widget
{
Q_OBJECT
public:
explicit
MultiVehicleDockWidget
(
QWidget
*
parent
=
0
);
explicit
MultiVehicleDockWidget
(
const
QString
&
title
,
QAction
*
action
,
QWidget
*
parent
=
0
);
~
MultiVehicleDockWidget
();
/// Must be called in the derived class contructor to initialize the base class
...
...
src/ui/QGCHilConfiguration.ui
View file @
3b5740bc
...
...
@@ -17,7 +17,7 @@
</sizepolicy>
</property>
<property
name=
"windowTitle"
>
<string>
Form
</string>
<string>
HIL Config
</string>
</property>
<layout
class=
"QGridLayout"
name=
"gridLayout"
rowstretch=
"1,100,1"
columnstretch=
"40,0"
>
<item
row=
"0"
column=
"0"
>
...
...
src/ui/QGCMAVLinkInspector.cc
View file @
3b5740bc
...
...
@@ -12,8 +12,8 @@
const
float
QGCMAVLinkInspector
::
updateHzLowpass
=
0.2
f
;
const
unsigned
int
QGCMAVLinkInspector
::
updateInterval
=
1000U
;
QGCMAVLinkInspector
::
QGCMAVLinkInspector
(
MAVLinkProtocol
*
protocol
,
QWidget
*
parent
)
:
Q
Widget
(
parent
),
QGCMAVLinkInspector
::
QGCMAVLinkInspector
(
const
QString
&
title
,
QAction
*
action
,
MAVLinkProtocol
*
protocol
,
QWidget
*
parent
)
:
Q
GCDockWidget
(
title
,
action
,
parent
),
_protocol
(
protocol
),
selectedSystemID
(
0
),
selectedComponentID
(
0
),
...
...
@@ -58,6 +58,8 @@ QGCMAVLinkInspector::QGCMAVLinkInspector(MAVLinkProtocol* protocol, QWidget *par
// Attach the UI's refresh rate to a timer.
connect
(
&
updateTimer
,
SIGNAL
(
timeout
()),
this
,
SLOT
(
refreshView
()));
updateTimer
.
start
(
updateInterval
);
loadSettings
();
}
void
QGCMAVLinkInspector
::
_vehicleAdded
(
Vehicle
*
vehicle
)
...
...
src/ui/QGCMAVLinkInspector.h
View file @
3b5740bc
#ifndef QGCMAVLINKINSPECTOR_H
#define QGCMAVLINKINSPECTOR_H
#include <QWidget>
#include <QMap>
#include <QTimer>
#include "QGCDockWidget.h"
#include "MAVLinkProtocol.h"
#include "Vehicle.h"
...
...
@@ -15,12 +15,12 @@ namespace Ui {
class
QTreeWidgetItem
;
class
UASInterface
;
class
QGCMAVLinkInspector
:
public
QWidget
class
QGCMAVLinkInspector
:
public
Q
GCDock
Widget
{
Q_OBJECT
public:
explicit
QGCMAVLinkInspector
(
MAVLinkProtocol
*
protocol
,
QWidget
*
parent
=
0
);
explicit
QGCMAVLinkInspector
(
const
QString
&
title
,
QAction
*
action
,
MAVLinkProtocol
*
protocol
,
QWidget
*
parent
=
0
);
~
QGCMAVLinkInspector
();
public
slots
:
...
...
src/ui/QGCMAVLinkInspector.ui
View file @
3b5740bc
...
...
@@ -11,7 +11,7 @@
</rect>
</property>
<property
name=
"windowTitle"
>
<string>
Form
</string>
<string>
MAVLink Inspector
</string>
</property>
<layout
class=
"QGridLayout"
name=
"gridLayout"
columnstretch=
"2,8,2,8,3"
>
<property
name=
"leftMargin"
>
...
...
src/ui/QGCTabbedInfoView.cpp
View file @
3b5740bc
#include "QGCTabbedInfoView.h"
QGCTabbedInfoView
::
QGCTabbedInfoView
(
QWidget
*
parent
)
:
QWidget
(
parent
)
QGCTabbedInfoView
::
QGCTabbedInfoView
(
const
QString
&
title
,
QAction
*
action
,
QWidget
*
parent
)
:
QGCDockWidget
(
title
,
action
,
parent
)
{
ui
.
setupUi
(
this
);
messageView
=
new
UASMessageViewWidget
(
this
);
...
...
@@ -11,6 +12,8 @@ QGCTabbedInfoView::QGCTabbedInfoView(QWidget *parent) : QWidget(parent)
//ui.tabWidget->addTab(actionsWidget,"Actions");
//ui.tabWidget->addTab(rawView,"Status");
ui
.
tabWidget
->
addTab
(
messageView
,
"Messages"
);
loadSettings
();
}
void
QGCTabbedInfoView
::
addSource
(
MAVLinkDecoder
*
decoder
)
{
...
...
src/ui/QGCTabbedInfoView.h
View file @
3b5740bc
#ifndef QGCTABBEDINFOVIEW_H
#define QGCTABBEDINFOVIEW_H
#include <QWidget>
#include "ui_QGCTabbedInfoView.h"
#include "QGCDockWidget.h"
#include "MAVLinkDecoder.h"
#include "UASMessageView.h"
#include "UASQuickView.h"
#include "UASRawStatusView.h"
class
QGCTabbedInfoView
:
public
QWidget
#include "ui_QGCTabbedInfoView.h"
class
QGCTabbedInfoView
:
public
QGCDockWidget
{
Q_OBJECT
public:
explicit
QGCTabbedInfoView
(
QWidget
*
parent
=
0
);
explicit
QGCTabbedInfoView
(
const
QString
&
title
,
QAction
*
action
,
QWidget
*
parent
=
0
);
~
QGCTabbedInfoView
();
void
addSource
(
MAVLinkDecoder
*
decoder
);
private:
...
...
src/ui/QGCTabbedInfoView.ui
View file @
3b5740bc
...
...
@@ -11,7 +11,7 @@
</rect>
</property>
<property
name=
"windowTitle"
>
<string>
Form
</string>
<string>
Info View
</string>
</property>
<layout
class=
"QVBoxLayout"
name=
"verticalLayout"
>
<item>
...
...
src/ui/QGCUASFileViewMulti.cc
View file @
3b5740bc
...
...
@@ -4,8 +4,8 @@
#include "MultiVehicleManager.h"
#include "QGCUASFileView.h"
QGCUASFileViewMulti
::
QGCUASFileViewMulti
(
QWidget
*
parent
)
:
Q
Widget
(
parent
),
QGCUASFileViewMulti
::
QGCUASFileViewMulti
(
const
QString
&
title
,
QAction
*
action
,
QWidget
*
parent
)
:
Q
GCDockWidget
(
title
,
action
,
parent
),
ui
(
new
Ui
::
QGCUASFileViewMulti
)
{
ui
->
setupUi
(
this
);
...
...
@@ -18,6 +18,8 @@ QGCUASFileViewMulti::QGCUASFileViewMulti(QWidget *parent) :
_vehicleAdded
(
MultiVehicleManager
::
instance
()
->
activeVehicle
());
_activeVehicleChanged
(
MultiVehicleManager
::
instance
()
->
activeVehicle
());
}
loadSettings
();
}
void
QGCUASFileViewMulti
::
_vehicleRemoved
(
Vehicle
*
vehicle
)
...
...
src/ui/QGCUASFileViewMulti.h
View file @
3b5740bc
#ifndef QGCUASFILEVIEWMULTI_H
#define QGCUASFILEVIEWMULTI_H
#include <QWidget>
#include <QMap>
#include "QGCDockWidget.h"
#include "QGCUASFileView.h"
#include "UAS.h"
...
...
@@ -12,12 +12,12 @@ namespace Ui
class
QGCUASFileViewMulti
;
}
class
QGCUASFileViewMulti
:
public
QWidget
class
QGCUASFileViewMulti
:
public
Q
GCDock
Widget
{
Q_OBJECT
public:
explicit
QGCUASFileViewMulti
(
QWidget
*
parent
=
0
);
explicit
QGCUASFileViewMulti
(
const
QString
&
title
,
QAction
*
action
,
QWidget
*
parent
=
0
);
~
QGCUASFileViewMulti
();
protected:
...
...
src/ui/QGCUASFileViewMulti.ui
View file @
3b5740bc
...
...
@@ -11,7 +11,7 @@
</rect>
</property>
<property
name=
"windowTitle"
>
<string>
Form
</string>
<string>
Onboard Files
</string>
</property>
<layout
class=
"QHBoxLayout"
name=
"horizontalLayout"
>
<property
name=
"margin"
>
...
...
src/ui/UASInfo.ui
View file @
3b5740bc
...
...
@@ -11,7 +11,7 @@
</rect>
</property>
<property
name=
"windowTitle"
>
<string>
Form
</string>
<string>
Status Details
</string>
</property>
<property
name=
"styleSheet"
>
<string
notr=
"true"
/>
...
...
src/ui/linechart/Linecharts.cc
View file @
3b5740bc
...
...
@@ -5,99 +5,27 @@
#include "MainWindow.h"
#include "UAS.h"
Linecharts
::
Linecharts
(
QWidget
*
parent
)
:
QStackedWidget
(
parent
),
plots
(),
active
(
true
)
Linecharts
::
Linecharts
(
const
QString
&
title
,
QAction
*
action
,
MAVLinkDecoder
*
decoder
,
QWidget
*
parent
)
:
MultiVehicleDockWidget
(
title
,
action
,
parent
)
,
_mavlinkDecoder
(
decoder
)
{
this
->
setVisible
(
false
);
// Add each MAV
foreach
(
Vehicle
*
vehicle
,
MultiVehicleManager
::
instance
()
->
vehicles
())
{
addVehicle
(
vehicle
);
}
connect
(
MultiVehicleManager
::
instance
(),
&
MultiVehicleManager
::
vehicleAdded
,
this
,
&
Linecharts
::
addVehicle
);
}
init
();
void
Linecharts
::
showEvent
(
QShowEvent
*
event
)
{
// React only to internal (pre-display)
// events
Q_UNUSED
(
event
)
QWidget
*
prevWidget
=
currentWidget
();
if
(
prevWidget
)
{
LinechartWidget
*
chart
=
dynamic_cast
<
LinechartWidget
*>
(
prevWidget
);
if
(
chart
)
{
this
->
active
=
true
;
chart
->
setActive
(
true
);
}
}
QWidget
::
showEvent
(
event
);
emit
visibilityChanged
(
true
);
}
void
Linecharts
::
hideEvent
(
QHideEvent
*
event
)
{
// React only to internal (pre-display)
// events
Q_UNUSED
(
event
)
QWidget
*
prevWidget
=
currentWidget
();
if
(
prevWidget
)
{
LinechartWidget
*
chart
=
dynamic_cast
<
LinechartWidget
*>
(
prevWidget
);
if
(
chart
)
{
this
->
active
=
false
;
chart
->
setActive
(
false
);
}
}
QWidget
::
hideEvent
(
event
);
emit
visibilityChanged
(
false
);
this
->
setVisible
(
false
);
}
void
Linecharts
::
addVehicle
(
Vehicle
*
vehicle
)
QWidget
*
Linecharts
::
_newVehicleWidget
(
Vehicle
*
vehicle
,
QWidget
*
parent
)
{
UAS
*
uas
=
vehicle
->
uas
();
// FIXME Add removeSystem() call
// Compatibility hack
int
uasid
=
0
;
/*uas->getUASID()*/
if
(
!
plots
.
contains
(
uasid
))
{
LinechartWidget
*
widget
=
new
LinechartWidget
(
uasid
,
this
);
addWidget
(
widget
);
plots
.
insert
(
uasid
,
widget
);
LinechartWidget
*
widget
=
new
LinechartWidget
(
vehicle
->
id
(),
parent
);
// Connect valueChanged signals
connect
(
uas
,
SIGNAL
(
valueChanged
(
int
,
QString
,
QString
,
QVariant
,
quint64
)),
widget
,
SLOT
(
appendData
(
int
,
QString
,
QString
,
QVariant
,
quint64
)));
connect
(
vehicle
->
uas
(),
&
UAS
::
valueChanged
,
widget
,
&
LinechartWidget
::
appendData
);
// Connect decoder
connect
(
_mavlinkDecoder
,
&
MAVLinkDecoder
::
valueChanged
,
widget
,
&
LinechartWidget
::
appendData
);
connect
(
widget
,
SIGNAL
(
logfileWritten
(
QString
)),
this
,
SIGNAL
(
logfileWritten
(
QString
)));
// Set system active if this is the only system
// if (active)
// {
// if (plots.size() == 1)
// {
// FIXME XXX HACK
// Connect generic sources
for
(
int
i
=
0
;
i
<
genericSources
.
count
();
++
i
)
{
connect
(
genericSources
[
i
],
SIGNAL
(
valueChanged
(
int
,
QString
,
QString
,
QVariant
,
quint64
)),
plots
.
values
().
first
(),
SLOT
(
appendData
(
int
,
QString
,
QString
,
QVariant
,
quint64
)));
}
// Select system
widget
->
setActive
(
true
);
//widget->selectActiveSystem(0);
}
// }
// }
}
void
Linecharts
::
addSource
(
QObject
*
obj
)
{
genericSources
.
append
(
obj
);
// FIXME XXX HACK
if
(
plots
.
size
()
>
0
)
{
// Connect generic source
connect
(
obj
,
SIGNAL
(
valueChanged
(
int
,
QString
,
QString
,
QVariant
,
quint64
)),
plots
.
values
().
first
(),
SLOT
(
appendData
(
int
,
QString
,
QString
,
QVariant
,
quint64
)));
}
return
widget
;
}
src/ui/linechart/Linecharts.h
View file @
3b5740bc
...
...
@@ -7,34 +7,26 @@
#include "LinechartWidget.h"
#include "Vehicle.h"
#include "MultiVehicleDockWidget.h"
#include "MAVLinkDecoder.h"
class
Linecharts
:
public
QStacked
Widget
class
Linecharts
:
public
MultiVehicleDock
Widget
{
Q_OBJECT
public:
explicit
Linecharts
(
QWidget
*
parent
=
0
);
explicit
Linecharts
(
const
QString
&
title
,
QAction
*
action
,
MAVLinkDecoder
*
decoder
,
QWidget
*
parent
=
0
);
signals:
/** @brief This signal is emitted once a logfile has been finished writing */
void
logfileWritten
(
QString
fileName
);
void
visibilityChanged
(
bool
visible
);
public
slots
:
/** @brief Add a new system to the list of plots */
void
addVehicle
(
Vehicle
*
vehicle
);
/** @brief Add a new generic message source (not a system) */
void
addSource
(
QObject
*
obj
);
protected:
// Override from MultiVehicleDockWidget
virtual
QWidget
*
_newVehicleWidget
(
Vehicle
*
vehicle
,
QWidget
*
parent
);
QMap
<
int
,
LinechartWidget
*>
plots
;
QVector
<
QObject
*>
genericSources
;
bool
active
;
/** @brief Start updating widget */
void
showEvent
(
QShowEvent
*
event
);
/** @brief Stop updating widget */
void
hideEvent
(
QHideEvent
*
event
);
private:
MAVLinkDecoder
*
_mavlinkDecoder
;
};
#endif // LINECHARTS_H
src/ui/toolbar/MainToolBar.cc
View file @
3b5740bc
...
...
@@ -41,7 +41,7 @@ This file is part of the QGROUNDCONTROL project
#include "UAS.h"
MainToolBar
::
MainToolBar
(
QWidget
*
parent
)
:
QGCQmlWidgetHolder
(
parent
)
:
QGCQmlWidgetHolder
(
QString
(),
NULL
,
parent
)
,
_vehicle
(
NULL
)
,
_mav
(
NULL
)
,
_toolBar
(
NULL
)
...
...
@@ -161,12 +161,6 @@ void MainToolBar::onFlyViewMenu()
}
}
void
MainToolBar
::
onAnalyzeView
()
{
setCurrentView
(
MainWindow
::
VIEW_ANALYZE
);
MainWindow
::
instance
()
->
loadAnalyzeView
();
}
void
MainToolBar
::
onDisconnect
(
QString
conf
)
{
if
(
conf
.
isEmpty
())
{
...
...
@@ -248,9 +242,6 @@ void MainToolBar::setCurrentView(int currentView)
{
ViewType_t
view
=
ViewNone
;
switch
((
MainWindow
::
VIEW_SECTIONS
)
currentView
)
{
case
MainWindow
:
:
VIEW_ANALYZE
:
view
=
ViewAnalyze
;
break
;
case
MainWindow
:
:
VIEW_MISSIONEDITOR
:
view
=
ViewPlan
;
break
;
...
...
src/ui/toolbar/MainToolBar.h
View file @
3b5740bc
...
...
@@ -64,7 +64,6 @@ public:
Q_INVOKABLE
void
onPlanView
();
Q_INVOKABLE
void
onFlyView
();
Q_INVOKABLE
void
onFlyViewMenu
();
Q_INVOKABLE
void
onAnalyzeView
();
Q_INVOKABLE
void
onConnect
(
QString
conf
);
Q_INVOKABLE
void
onDisconnect
(
QString
conf
);
Q_INVOKABLE
void
onEnterMessageArea
(
int
x
,
int
y
);
...
...
src/ui/toolbar/MainToolBar.qml
View file @
3b5740bc
...
...
@@ -626,7 +626,6 @@ Rectangle {
setupButton
.
repaintChevron
=
true
;
planButton
.
repaintChevron
=
true
;
flyButton
.
repaintChevron
=
true
;
analyzeButton
.
repaintChevron
=
true
;
}
}
...
...
@@ -670,19 +669,6 @@ Rectangle {
}
z
:
800
}
QGCToolBarButton
{
id
:
analyzeButton
width
:
getProportionalDimmension
(
90
)
height
:
cellHeight
exclusiveGroup
:
mainActionGroup
text
:
qsTr
(
"
Analyze
"
)
checked
:
(
mainToolBar
.
currentView
===
MainToolBar
.
ViewAnalyze
)
onClicked
:
{
mainToolBar
.
onAnalyzeView
();
}
z
:
700
}
}
// Row
//---------------------------------------------------------------------
...
...
src/ui/uas/UASInfoWidget.cc
View file @
3b5740bc
...
...
@@ -43,7 +43,8 @@ This file is part of the PIXHAWK project
#include "QGC.h"
#include "UAS.h"
UASInfoWidget
::
UASInfoWidget
(
QWidget
*
parent
,
QString
name
)
:
QWidget
(
parent
)
UASInfoWidget
::
UASInfoWidget
(
const
QString
&
title
,
QAction
*
action
,
QWidget
*
parent
,
QString
name
)
:
QGCDockWidget
(
title
,
action
,
parent
)
{
ui
.
setupUi
(
this
);
this
->
name
=
name
;
...
...
@@ -72,6 +73,8 @@ UASInfoWidget::UASInfoWidget(QWidget *parent, QString name) : QWidget(parent)
updateTimer
->
start
(
updateInterval
);
this
->
setVisible
(
false
);
loadSettings
();
}
UASInfoWidget
::~
UASInfoWidget
()
...
...
src/ui/uas/UASInfoWidget.h
View file @
3b5740bc
...
...
@@ -32,10 +32,10 @@ This file is part of the QGROUNDCONTROL project
#ifndef _UASINFOWIDGET_H_
#define _UASINFOWIDGET_H_
#include <QWidget>
#include <QTimer>
#include <QMap>
#include "QGCDockWidget.h"
#include "UASInterface.h"
#include "ui_UASInfo.h"
#include "Vehicle.h"
...
...
@@ -44,11 +44,11 @@ This file is part of the QGROUNDCONTROL project
* @brief Info indicator for the currently active UAS
*
**/
class
UASInfoWidget
:
public
QWidget
class
UASInfoWidget
:
public
Q
GCDock
Widget
{
Q_OBJECT
public:
UASInfoWidget
(
QWidget
*
parent
=
0
,
QString
name
=
""
);
UASInfoWidget
(
const
QString
&
title
,
QAction
*
action
,
QWidget
*
parent
=
0
,
QString
name
=
""
);
~
UASInfoWidget
();
public
slots
:
...
...
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