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
ab7869ce
Commit
ab7869ce
authored
Dec 28, 2010
by
Mariano Lizarraga
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'experimental' of git@github.com:pixhawk/qgroundcontrol into mergeRemote
parents
1059752a
cf1558b0
Changes
37
Hide whitespace changes
Inline
Side-by-side
Showing
37 changed files
with
665 additions
and
213 deletions
+665
-213
qgroundcontrol.pro
qgroundcontrol.pro
+4
-2
Core.cc
src/Core.cc
+3
-0
QGC.h
src/QGC.h
+3
-0
LinkManager.cc
src/comm/LinkManager.cc
+26
-2
LinkManager.h
src/comm/LinkManager.h
+2
-0
MAVLinkSimulationLink.cc
src/comm/MAVLinkSimulationLink.cc
+8
-7
SerialLink.cc
src/comm/SerialLink.cc
+70
-21
Freenect.cc
src/input/Freenect.cc
+1
-1
PxQuadMAV.cc
src/uas/PxQuadMAV.cc
+1
-1
UAS.cc
src/uas/UAS.cc
+3
-5
UASManager.cc
src/uas/UASManager.cc
+5
-0
UASManager.h
src/uas/UASManager.h
+2
-0
CommConfigurationWindow.cc
src/ui/CommConfigurationWindow.cc
+18
-4
CommConfigurationWindow.h
src/ui/CommConfigurationWindow.h
+8
-1
CommSettings.ui
src/ui/CommSettings.ui
+2
-23
HUD.cc
src/ui/HUD.cc
+13
-0
HUD.h
src/ui/HUD.h
+2
-0
MainWindow.cc
src/ui/MainWindow.cc
+288
-18
MainWindow.h
src/ui/MainWindow.h
+4
-1
MainWindow.ui
src/ui/MainWindow.ui
+3
-8
MapWidget.cc
src/ui/MapWidget.cc
+0
-9
ParameterInterface.cc
src/ui/ParameterInterface.cc
+9
-0
QGCMainWindowAPConfigurator.cc
src/ui/QGCMainWindowAPConfigurator.cc
+6
-0
QGCMainWindowAPConfigurator.h
src/ui/QGCMainWindowAPConfigurator.h
+18
-0
SerialConfigurationWindow.cc
src/ui/SerialConfigurationWindow.cc
+1
-9
SerialConfigurationWindow.h
src/ui/SerialConfigurationWindow.h
+0
-6
XMLCommProtocolWidget.cc
src/ui/XMLCommProtocolWidget.cc
+6
-3
LinechartPlot.cc
src/ui/linechart/LinechartPlot.cc
+1
-1
LinechartWidget.cc
src/ui/linechart/LinechartWidget.cc
+9
-1
LinechartWidget.h
src/ui/linechart/LinechartWidget.h
+2
-0
Linecharts.cc
src/ui/linechart/Linecharts.cc
+13
-0
MAV2DIcon.cc
src/ui/map/MAV2DIcon.cc
+49
-40
GCManipulator.cc
src/ui/map3D/GCManipulator.cc
+4
-3
QGCGoogleEarthView.cc
src/ui/map3D/QGCGoogleEarthView.cc
+69
-46
QGCGoogleEarthView.h
src/ui/map3D/QGCGoogleEarthView.h
+6
-0
QMap3D.cc
src/ui/map3D/QMap3D.cc
+5
-0
UASControlWidget.cc
src/ui/uas/UASControlWidget.cc
+1
-1
No files found.
qgroundcontrol.pro
View file @
ab7869ce
...
@@ -249,7 +249,8 @@ HEADERS += src/MG.h \
...
@@ -249,7 +249,8 @@ HEADERS += src/MG.h \
src
/
ui
/
SlugsHilSim
.
h
\
src
/
ui
/
SlugsHilSim
.
h
\
src
/
ui
/
SlugsPIDControl
.
h
\
src
/
ui
/
SlugsPIDControl
.
h
\
src
/
ui
/
SlugsVideoCamControl
.
h
\
src
/
ui
/
SlugsVideoCamControl
.
h
\
src
/
ui
/
SlugsPadCameraControl
.
h
src
/
ui
/
SlugsPadCameraControl
.
h
\
src
/
ui
/
QGCMainWindowAPConfigurator
.
h
contains
(
DEPENDENCIES_PRESENT
,
osg
)
{
contains
(
DEPENDENCIES_PRESENT
,
osg
)
{
message
(
"Including headers for OpenSceneGraph"
)
message
(
"Including headers for OpenSceneGraph"
)
...
@@ -359,7 +360,8 @@ SOURCES += src/main.cc \
...
@@ -359,7 +360,8 @@ SOURCES += src/main.cc \
src
/
ui
/
SlugsHilSim
.
cc
\
src
/
ui
/
SlugsHilSim
.
cc
\
src
/
ui
/
SlugsPIDControl
.
cpp
\
src
/
ui
/
SlugsPIDControl
.
cpp
\
src
/
ui
/
SlugsVideoCamControl
.
cpp
\
src
/
ui
/
SlugsVideoCamControl
.
cpp
\
src
/
ui
/
SlugsPadCameraControl
.
cpp
src
/
ui
/
SlugsPadCameraControl
.
cpp
\
src
/
ui
/
QGCMainWindowAPConfigurator
.
cc
contains
(
DEPENDENCIES_PRESENT
,
osg
)
{
contains
(
DEPENDENCIES_PRESENT
,
osg
)
{
message
(
"Including sources for OpenSceneGraph"
)
message
(
"Including sources for OpenSceneGraph"
)
...
...
src/Core.cc
View file @
ab7869ce
...
@@ -157,6 +157,9 @@ Core::Core(int &argc, char* argv[]) : QApplication(argc, argv)
...
@@ -157,6 +157,9 @@ Core::Core(int &argc, char* argv[]) : QApplication(argc, argv)
**/
**/
Core
::~
Core
()
Core
::~
Core
()
{
{
//mainWindow->storeSettings();
mainWindow
->
hide
();
mainWindow
->
deleteLater
();
// Delete singletons
// Delete singletons
delete
LinkManager
::
instance
();
delete
LinkManager
::
instance
();
delete
UASManager
::
instance
();
delete
UASManager
::
instance
();
...
...
src/QGC.h
View file @
ab7869ce
...
@@ -14,6 +14,9 @@ namespace QGC
...
@@ -14,6 +14,9 @@ namespace QGC
/** @brief Get the current ground time in microseconds */
/** @brief Get the current ground time in microseconds */
quint64
groundTimeUsecs
();
quint64
groundTimeUsecs
();
const
QString
APPNAME
=
"QGROUNDCONTROL"
;
const
QString
COMPANYNAME
=
"OPENMAV"
;
}
}
#endif // QGC_H
#endif // QGC_H
src/comm/LinkManager.cc
View file @
ab7869ce
...
@@ -32,6 +32,7 @@ This file is part of the QGROUNDCONTROL project
...
@@ -32,6 +32,7 @@ This file is part of the QGROUNDCONTROL project
#include <QList>
#include <QList>
#include <QApplication>
#include <QApplication>
#include "LinkManager.h"
#include "LinkManager.h"
#include <iostream>
#include <QDebug>
#include <QDebug>
...
@@ -65,6 +66,7 @@ LinkManager::~LinkManager()
...
@@ -65,6 +66,7 @@ LinkManager::~LinkManager()
void
LinkManager
::
add
(
LinkInterface
*
link
)
void
LinkManager
::
add
(
LinkInterface
*
link
)
{
{
if
(
!
link
)
return
;
links
.
append
(
link
);
links
.
append
(
link
);
emit
newLink
(
link
);
emit
newLink
(
link
);
}
}
...
@@ -73,6 +75,7 @@ void LinkManager::addProtocol(LinkInterface* link, ProtocolInterface* protocol)
...
@@ -73,6 +75,7 @@ void LinkManager::addProtocol(LinkInterface* link, ProtocolInterface* protocol)
{
{
// Connect link to protocol
// Connect link to protocol
// the protocol will receive new bytes from the link
// the protocol will receive new bytes from the link
if
(
!
link
||
!
protocol
)
return
;
connect
(
link
,
SIGNAL
(
bytesReceived
(
LinkInterface
*
,
QByteArray
)),
protocol
,
SLOT
(
receiveBytes
(
LinkInterface
*
,
QByteArray
)));
connect
(
link
,
SIGNAL
(
bytesReceived
(
LinkInterface
*
,
QByteArray
)),
protocol
,
SLOT
(
receiveBytes
(
LinkInterface
*
,
QByteArray
)));
// Store the connection information in the protocol links map
// Store the connection information in the protocol links map
protocolLinks
.
insertMulti
(
protocol
,
link
);
protocolLinks
.
insertMulti
(
protocol
,
link
);
...
@@ -91,7 +94,8 @@ bool LinkManager::connectAll()
...
@@ -91,7 +94,8 @@ bool LinkManager::connectAll()
foreach
(
LinkInterface
*
link
,
links
)
foreach
(
LinkInterface
*
link
,
links
)
{
{
if
(
!
link
->
connect
())
allConnected
=
false
;
if
(
!
link
)
{}
else
if
(
!
link
->
connect
())
allConnected
=
false
;
}
}
return
allConnected
;
return
allConnected
;
...
@@ -103,7 +107,9 @@ bool LinkManager::disconnectAll()
...
@@ -103,7 +107,9 @@ bool LinkManager::disconnectAll()
foreach
(
LinkInterface
*
link
,
links
)
foreach
(
LinkInterface
*
link
,
links
)
{
{
if
(
!
link
->
disconnect
())
allDisconnected
=
false
;
//static int i=0;
if
(
!
link
){}
else
if
(
!
link
->
disconnect
())
allDisconnected
=
false
;
}
}
return
allDisconnected
;
return
allDisconnected
;
...
@@ -111,14 +117,32 @@ bool LinkManager::disconnectAll()
...
@@ -111,14 +117,32 @@ bool LinkManager::disconnectAll()
bool
LinkManager
::
connectLink
(
LinkInterface
*
link
)
bool
LinkManager
::
connectLink
(
LinkInterface
*
link
)
{
{
if
(
!
link
)
return
false
;
return
link
->
connect
();
return
link
->
connect
();
}
}
bool
LinkManager
::
disconnectLink
(
LinkInterface
*
link
)
bool
LinkManager
::
disconnectLink
(
LinkInterface
*
link
)
{
{
if
(
!
link
)
return
false
;
return
link
->
disconnect
();
return
link
->
disconnect
();
}
}
bool
LinkManager
::
removeLink
(
LinkInterface
*
link
)
{
if
(
link
)
{
for
(
int
i
=
0
;
i
<
QList
<
LinkInterface
*>
(
links
).
size
();
i
++
)
{
if
(
link
==
links
.
at
(
i
))
{
links
.
removeAt
(
i
);
//remove from link list
}
}
return
true
;
}
return
false
;
}
/**
/**
* The access time is linear in the number of links.
* The access time is linear in the number of links.
*
*
...
...
src/comm/LinkManager.h
View file @
ab7869ce
...
@@ -67,6 +67,8 @@ public slots:
...
@@ -67,6 +67,8 @@ public slots:
void
add
(
LinkInterface
*
link
);
void
add
(
LinkInterface
*
link
);
void
addProtocol
(
LinkInterface
*
link
,
ProtocolInterface
*
protocol
);
void
addProtocol
(
LinkInterface
*
link
,
ProtocolInterface
*
protocol
);
bool
removeLink
(
LinkInterface
*
link
);
bool
connectAll
();
bool
connectAll
();
bool
connectLink
(
LinkInterface
*
link
);
bool
connectLink
(
LinkInterface
*
link
);
...
...
src/comm/MAVLinkSimulationLink.cc
View file @
ab7869ce
...
@@ -559,16 +559,17 @@ void MAVLinkSimulationLink::mainloop()
...
@@ -559,16 +559,17 @@ void MAVLinkSimulationLink::mainloop()
// Send controller states
// Send controller states
// uint8_t attControl = 1;
// uint8_t posXYControl = 1;
// uint8_t posZControl = 0;
// uint8_t posYawControl = 1;
// uint8_t gpsLock = 2;
// uint8_t visLock = 3;
//uint8_t posLock = qMax(gpsLock, visLock);
#ifdef MAVLINK_ENABLED_PIXHAWK
#ifdef MAVLINK_ENABLED_PIXHAWK
uint8_t
attControl
=
1
;
uint8_t
posXYControl
=
1
;
uint8_t
posZControl
=
0
;
uint8_t
posYawControl
=
1
;
uint8_t
gpsLock
=
2
;
uint8_t
visLock
=
3
;
uint8_t
posLock
=
qMax
(
gpsLock
,
visLock
);
messageSize
=
mavlink_msg_control_status_pack
(
systemId
,
componentId
,
&
msg
,
posLock
,
visLock
,
gpsLock
,
attControl
,
posXYControl
,
posZControl
,
posYawControl
);
messageSize
=
mavlink_msg_control_status_pack
(
systemId
,
componentId
,
&
msg
,
posLock
,
visLock
,
gpsLock
,
attControl
,
posXYControl
,
posZControl
,
posYawControl
);
#endif
#endif
...
...
src/comm/SerialLink.cc
View file @
ab7869ce
...
@@ -30,10 +30,13 @@ This file is part of the QGROUNDCONTROL project
...
@@ -30,10 +30,13 @@ This file is part of the QGROUNDCONTROL project
#include <QTimer>
#include <QTimer>
#include <QDebug>
#include <QDebug>
#include <QSettings>
#include <QMutexLocker>
#include <QMutexLocker>
#include "SerialLink.h"
#include "SerialLink.h"
#include "LinkManager.h"
#include "LinkManager.h"
#include "QGC.h"
#include <MG.h>
#include <MG.h>
#include <iostream>
#ifdef _WIN32
#ifdef _WIN32
#include "windows.h"
#include "windows.h"
#endif
#endif
...
@@ -54,12 +57,41 @@ SerialLink::SerialLink(QString portname, BaudRateType baudrate, FlowType flow, P
...
@@ -54,12 +57,41 @@ SerialLink::SerialLink(QString portname, BaudRateType baudrate, FlowType flow, P
#endif
#endif
// Set unique ID and add link to the list of links
// Set unique ID and add link to the list of links
this
->
id
=
getNextLinkId
();
this
->
id
=
getNextLinkId
();
this
->
baudrate
=
baudrate
;
this
->
flow
=
flow
;
// Load defaults from settings
this
->
parity
=
parity
;
QSettings
settings
(
QGC
::
COMPANYNAME
,
QGC
::
APPNAME
);
this
->
dataBits
=
dataBits
;
settings
.
sync
();
this
->
stopBits
=
stopBits
;
if
(
settings
.
contains
(
"SERIALLINK_COMM_PORT"
))
this
->
timeout
=
1
;
///< The timeout controls how long the program flow should wait for new serial bytes. As we're polling, we don't want to wait at all.
{
this
->
porthandle
=
settings
.
value
(
"SERIALLINK_COMM_PORT"
).
toString
();
}
// *nix (Linux, MacOS tested) serial port support
port
=
new
QextSerialPort
(
porthandle
,
QextSerialPort
::
Polling
);
//port = new QextSerialPort(porthandle, QextSerialPort::EventDriven);
if
(
settings
.
contains
(
"SERIALLINK_COMM_PORT"
))
{
setBaudRate
(
settings
.
value
(
"SERIALLINK_COMM_BAUD"
).
toInt
());
setParityType
(
settings
.
value
(
"SERIALLINK_COMM_PARITY"
).
toInt
());
setStopBitsType
(
settings
.
value
(
"SERIALLINK_COMM_STOPBITS"
).
toInt
());
setDataBitsType
(
settings
.
value
(
"SERIALLINK_COMM_DATABITS"
).
toInt
());
}
else
{
this
->
baudrate
=
baudrate
;
this
->
flow
=
flow
;
this
->
parity
=
parity
;
this
->
dataBits
=
dataBits
;
this
->
stopBits
=
stopBits
;
this
->
timeout
=
1
;
///< The timeout controls how long the program flow should wait for new serial bytes. As we're polling, we don't want to wait at all.
}
port
->
setTimeout
(
timeout
);
// Timeout of 0 ms, we don't want to wait for data, we just poll again next time
port
->
setBaudRate
(
baudrate
);
port
->
setFlowControl
(
flow
);
port
->
setParity
(
parity
);
port
->
setDataBits
(
dataBits
);
port
->
setStopBits
(
stopBits
);
// Set the port name
// Set the port name
if
(
porthandle
==
""
)
if
(
porthandle
==
""
)
...
@@ -88,15 +120,7 @@ SerialLink::SerialLink(QString portname, BaudRateType baudrate, FlowType flow, P
...
@@ -88,15 +120,7 @@ SerialLink::SerialLink(QString portname, BaudRateType baudrate, FlowType flow, P
//some other error occurred. Inform user.
//some other error occurred. Inform user.
}
}
#else
#else
// *nix (Linux, MacOS tested) serial port support
port
=
new
QextSerialPort
(
porthandle
,
QextSerialPort
::
Polling
);
//port = new QextSerialPort(porthandle, QextSerialPort::EventDriven);
port
->
setTimeout
(
timeout
);
// Timeout of 0 ms, we don't want to wait for data, we just poll again next time
port
->
setBaudRate
(
baudrate
);
port
->
setFlowControl
(
flow
);
port
->
setParity
(
parity
);
port
->
setDataBits
(
dataBits
);
port
->
setStopBits
(
stopBits
);
#endif
#endif
// Link is setup, register it with link manager
// Link is setup, register it with link manager
...
@@ -106,7 +130,7 @@ SerialLink::SerialLink(QString portname, BaudRateType baudrate, FlowType flow, P
...
@@ -106,7 +130,7 @@ SerialLink::SerialLink(QString portname, BaudRateType baudrate, FlowType flow, P
SerialLink
::~
SerialLink
()
SerialLink
::~
SerialLink
()
{
{
disconnect
();
disconnect
();
delete
port
;
if
(
port
)
delete
port
;
port
=
NULL
;
port
=
NULL
;
}
}
...
@@ -239,6 +263,8 @@ bool SerialLink::disconnect()
...
@@ -239,6 +263,8 @@ bool SerialLink::disconnect()
port
->
close
();
port
->
close
();
dataMutex
.
unlock
();
dataMutex
.
unlock
();
if
(
this
->
isRunning
())
this
->
terminate
();
//stop running the thread, restart it upon connect
bool
closed
=
true
;
bool
closed
=
true
;
//port->isOpen();
//port->isOpen();
...
@@ -298,6 +324,15 @@ bool SerialLink::hardwareConnect()
...
@@ -298,6 +324,15 @@ bool SerialLink::hardwareConnect()
if
(
connectionUp
)
{
if
(
connectionUp
)
{
emit
connected
();
emit
connected
();
emit
connected
(
true
);
emit
connected
(
true
);
// Store settings
QSettings
settings
(
QGC
::
COMPANYNAME
,
QGC
::
APPNAME
);
settings
.
setValue
(
"SERIALLINK_COMM_PORT"
,
this
->
porthandle
);
settings
.
setValue
(
"SERIALLINK_COMM_BAUD"
,
getBaudRate
());
settings
.
setValue
(
"SERIALLINK_COMM_PARITY"
,
getParityType
());
settings
.
setValue
(
"SERIALLINK_COMM_STOPBITS"
,
getStopBitsType
());
settings
.
setValue
(
"SERIALLINK_COMM_DATABITS"
,
getDataBitsType
());
settings
.
sync
();
}
}
return
connectionUp
;
return
connectionUp
;
...
@@ -311,7 +346,14 @@ bool SerialLink::hardwareConnect()
...
@@ -311,7 +346,14 @@ bool SerialLink::hardwareConnect()
**/
**/
bool
SerialLink
::
isConnected
()
bool
SerialLink
::
isConnected
()
{
{
return
port
->
isOpen
();
if
(
port
)
{
return
port
->
isOpen
();
}
else
{
return
false
;
}
}
}
int
SerialLink
::
getId
()
int
SerialLink
::
getId
()
...
@@ -516,7 +558,7 @@ bool SerialLink::setPortName(QString portName)
...
@@ -516,7 +558,7 @@ bool SerialLink::setPortName(QString portName)
this
->
porthandle
=
"
\\\\
.
\\
"
+
this
->
porthandle
;
this
->
porthandle
=
"
\\\\
.
\\
"
+
this
->
porthandle
;
}
}
#endif
#endif
delete
port
;
if
(
port
)
delete
port
;
port
=
new
QextSerialPort
(
porthandle
,
QextSerialPort
::
Polling
);
port
=
new
QextSerialPort
(
porthandle
,
QextSerialPort
::
Polling
);
port
->
setBaudRate
(
baudrate
);
port
->
setBaudRate
(
baudrate
);
...
@@ -707,9 +749,16 @@ bool SerialLink::setBaudRate(int rate)
...
@@ -707,9 +749,16 @@ bool SerialLink::setBaudRate(int rate)
break
;
break
;
}
}
port
->
setBaudRate
(
this
->
baudrate
);
if
(
port
)
if
(
reconnect
)
connect
();
{
return
accepted
;
port
->
setBaudRate
(
this
->
baudrate
);
if
(
reconnect
)
connect
();
return
accepted
;
}
else
{
return
false
;
}
}
}
bool
SerialLink
::
setFlowType
(
int
flow
)
bool
SerialLink
::
setFlowType
(
int
flow
)
...
...
src/input/Freenect.cc
View file @
ab7869ce
...
@@ -341,7 +341,7 @@ Freenect::readConfigFile(void)
...
@@ -341,7 +341,7 @@ Freenect::readConfigFile(void)
settings
.
value
(
"transform/R33"
).
toDouble
(),
settings
.
value
(
"transform/R33"
).
toDouble
(),
settings
.
value
(
"transform/Tz"
).
toDouble
(),
settings
.
value
(
"transform/Tz"
).
toDouble
(),
0.0
,
0.0
,
0.0
,
1.0
);
0.0
,
0.0
,
0.0
,
1.0
);
transformMatrix
=
transformMatrix
.
transpos
ed
();
transformMatrix
=
transformMatrix
.
invert
ed
();
baseline
=
settings
.
value
(
"transform/baseline"
).
toDouble
();
baseline
=
settings
.
value
(
"transform/baseline"
).
toDouble
();
disparityOffset
=
settings
.
value
(
"transform/disparity_offset"
).
toDouble
();
disparityOffset
=
settings
.
value
(
"transform/disparity_offset"
).
toDouble
();
...
...
src/uas/PxQuadMAV.cc
View file @
ab7869ce
...
@@ -41,12 +41,12 @@ void PxQuadMAV::receiveMessage(LinkInterface* link, mavlink_message_t message)
...
@@ -41,12 +41,12 @@ void PxQuadMAV::receiveMessage(LinkInterface* link, mavlink_message_t message)
{
{
// Let UAS handle the default message set
// Let UAS handle the default message set
UAS
::
receiveMessage
(
link
,
message
);
UAS
::
receiveMessage
(
link
,
message
);
// mavlink_message_t* msg = &message;
//qDebug() << "PX RECEIVED" << msg->sysid << msg->compid << msg->msgid;
//qDebug() << "PX RECEIVED" << msg->sysid << msg->compid << msg->msgid;
// Only compile this portion if matching MAVLink packets have been compiled
// Only compile this portion if matching MAVLink packets have been compiled
#ifdef MAVLINK_ENABLED_PIXHAWK
#ifdef MAVLINK_ENABLED_PIXHAWK
mavlink_message_t
*
msg
=
&
message
;
if
(
message
.
sysid
==
uasId
)
if
(
message
.
sysid
==
uasId
)
{
{
...
...
src/uas/UAS.cc
View file @
ab7869ce
...
@@ -95,6 +95,7 @@ UAS::UAS(MAVLinkProtocol* protocol, int id) : UASInterface(),
...
@@ -95,6 +95,7 @@ UAS::UAS(MAVLinkProtocol* protocol, int id) : UASInterface(),
UAS
::~
UAS
()
UAS
::~
UAS
()
{
{
delete
links
;
delete
links
;
links
=
NULL
;
}
}
int
UAS
::
getUASID
()
const
int
UAS
::
getUASID
()
const
...
@@ -126,6 +127,7 @@ void UAS::setSelected()
...
@@ -126,6 +127,7 @@ void UAS::setSelected()
void
UAS
::
receiveMessage
(
LinkInterface
*
link
,
mavlink_message_t
message
)
void
UAS
::
receiveMessage
(
LinkInterface
*
link
,
mavlink_message_t
message
)
{
{
if
(
!
link
)
return
;
if
(
!
links
->
contains
(
link
))
if
(
!
links
->
contains
(
link
))
{
{
addLink
(
link
);
addLink
(
link
);
...
@@ -371,11 +373,6 @@ void UAS::receiveMessage(LinkInterface* link, mavlink_message_t message)
...
@@ -371,11 +373,6 @@ void UAS::receiveMessage(LinkInterface* link, mavlink_message_t message)
GAudioOutput
::
instance
()
->
notifyPositive
();
GAudioOutput
::
instance
()
->
notifyPositive
();
}
}
positionLock
=
true
;
positionLock
=
true
;
// Send to patch antenna
mavlink_message_t
msg
;
mavlink_msg_global_position_pack
(
MG
::
SYSTEM
::
ID
,
MG
::
SYSTEM
::
COMPID
,
&
msg
,
pos
.
usec
,
pos
.
lat
,
pos
.
lon
,
pos
.
alt
,
pos
.
vx
,
pos
.
vy
,
pos
.
vz
);
sendMessage
(
msg
);
}
}
break
;
break
;
case
MAVLINK_MSG_ID_GPS_RAW
:
case
MAVLINK_MSG_ID_GPS_RAW
:
...
@@ -839,6 +836,7 @@ void UAS::sendMessage(mavlink_message_t message)
...
@@ -839,6 +836,7 @@ void UAS::sendMessage(mavlink_message_t message)
void
UAS
::
sendMessage
(
LinkInterface
*
link
,
mavlink_message_t
message
)
void
UAS
::
sendMessage
(
LinkInterface
*
link
,
mavlink_message_t
message
)
{
{
if
(
!
link
)
return
;
// Create buffer
// Create buffer
uint8_t
buffer
[
MAVLINK_MAX_PACKET_LEN
];
uint8_t
buffer
[
MAVLINK_MAX_PACKET_LEN
];
// Write message into buffer, prepending start sign
// Write message into buffer, prepending start sign
...
...
src/uas/UASManager.cc
View file @
ab7869ce
...
@@ -85,6 +85,11 @@ void UASManager::addUAS(UASInterface* uas)
...
@@ -85,6 +85,11 @@ void UASManager::addUAS(UASInterface* uas)
}
}
}
}
QList
<
UASInterface
*>
UASManager
::
getUASList
()
{
return
systems
.
values
();
}
UASInterface
*
UASManager
::
getActiveUAS
()
UASInterface
*
UASManager
::
getActiveUAS
()
{
{
if
(
!
activeUAS
)
if
(
!
activeUAS
)
...
...
src/uas/UASManager.h
View file @
ab7869ce
...
@@ -69,6 +69,8 @@ public:
...
@@ -69,6 +69,8 @@ public:
**/
**/
UASInterface
*
getUASForId
(
int
id
);
UASInterface
*
getUASForId
(
int
id
);
QList
<
UASInterface
*>
getUASList
();
public
slots
:
public
slots
:
...
...
src/ui/CommConfigurationWindow.cc
View file @
ab7869ce
...
@@ -47,6 +47,7 @@ This file is part of the QGROUNDCONTROL project
...
@@ -47,6 +47,7 @@ This file is part of the QGROUNDCONTROL project
#endif
#endif
#include "MAVLinkProtocol.h"
#include "MAVLinkProtocol.h"
#include "MAVLinkSettingsWidget.h"
#include "MAVLinkSettingsWidget.h"
#include "LinkManager.h"
CommConfigurationWindow
::
CommConfigurationWindow
(
LinkInterface
*
link
,
ProtocolInterface
*
protocol
,
QWidget
*
parent
,
Qt
::
WindowFlags
flags
)
:
QWidget
(
parent
,
flags
)
CommConfigurationWindow
::
CommConfigurationWindow
(
LinkInterface
*
link
,
ProtocolInterface
*
protocol
,
QWidget
*
parent
,
Qt
::
WindowFlags
flags
)
:
QWidget
(
parent
,
flags
)
{
{
...
@@ -58,6 +59,10 @@ CommConfigurationWindow::CommConfigurationWindow(LinkInterface* link, ProtocolIn
...
@@ -58,6 +59,10 @@ CommConfigurationWindow::CommConfigurationWindow(LinkInterface* link, ProtocolIn
// add link types
// add link types
ui
.
linkType
->
addItem
(
"Serial"
,
QGC_LINK_SERIAL
);
ui
.
linkType
->
addItem
(
"Serial"
,
QGC_LINK_SERIAL
);
ui
.
linkType
->
addItem
(
"UDP"
,
QGC_LINK_UDP
);
ui
.
linkType
->
addItem
(
"UDP"
,
QGC_LINK_UDP
);
ui
.
linkType
->
addItem
(
"Simulation"
,
QGC_LINK_SIMULATION
);
ui
.
linkType
->
addItem
(
"Serial Forwarding"
,
QGC_LINK_FORWARDING
);
ui
.
connectionType
->
addItem
(
"MAVLink"
,
QGC_PROTOCOL_MAVLINK
);
// Create action to open this menu
// Create action to open this menu
// Create configuration action for this link
// Create configuration action for this link
...
@@ -195,11 +200,20 @@ void CommConfigurationWindow::setLinkName(QString name)
...
@@ -195,11 +200,20 @@ void CommConfigurationWindow::setLinkName(QString name)
void
CommConfigurationWindow
::
remove
()
void
CommConfigurationWindow
::
remove
()
{
{
link
->
disconnect
();
if
(
action
)
delete
action
;
//delete action first since it has a pointer to link
//delete link;
action
=
NULL
;
//delete action;
if
(
link
)
{
LinkManager
::
instance
()
->
removeLink
(
link
);
//remove link from LinkManager list
link
->
disconnect
();
//disconnect port, and also calls terminate() to stop the thread
if
(
link
->
isRunning
())
link
->
terminate
();
// terminate() the serial thread just in case it is still running
link
->
wait
();
// wait() until thread is stoped before deleting
delete
link
;
}
link
=
NULL
;
this
->
window
()
->
close
();
this
->
window
()
->
close
();
qDebug
()
<<
"TODO: Link cannot be deleted: CommConfigurationWindow::remove() NOT IMPLEMENTED!"
;
}
}
void
CommConfigurationWindow
::
connectionState
(
bool
connect
)
void
CommConfigurationWindow
::
connectionState
(
bool
connect
)
...
...
src/ui/CommConfigurationWindow.h
View file @
ab7869ce
...
@@ -42,7 +42,14 @@ This file is part of the QGROUNDCONTROL project
...
@@ -42,7 +42,14 @@ This file is part of the QGROUNDCONTROL project
enum
qgc_link_t
enum
qgc_link_t
{
{
QGC_LINK_SERIAL
,
QGC_LINK_SERIAL
,
QGC_LINK_UDP
QGC_LINK_UDP
,
QGC_LINK_SIMULATION
,
QGC_LINK_FORWARDING
};
enum
qgc_protocol_t
{
QGC_PROTOCOL_MAVLINK
};
};
#ifdef OPAL_RT
#ifdef OPAL_RT
...
...
src/ui/CommSettings.ui
View file @
ab7869ce
...
@@ -43,23 +43,7 @@
...
@@ -43,23 +43,7 @@
</widget>
</widget>
</item>
</item>
<item
row=
"0"
column=
"1"
>
<item
row=
"0"
column=
"1"
>
<widget
class=
"QComboBox"
name=
"linkType"
>
<widget
class=
"QComboBox"
name=
"linkType"
/>
<item>
<property
name=
"text"
>
<string>
Serial Link
</string>
</property>
</item>
<item>
<property
name=
"text"
>
<string>
UDP
</string>
</property>
</item>
<item>
<property
name=
"text"
>
<string>
Simulation
</string>
</property>
</item>
</widget>
</item>
</item>
<item
row=
"1"
column=
"0"
>
<item
row=
"1"
column=
"0"
>
<widget
class=
"QLabel"
name=
"label_5"
>
<widget
class=
"QLabel"
name=
"label_5"
>
...
@@ -71,13 +55,8 @@
...
@@ -71,13 +55,8 @@
<item
row=
"1"
column=
"1"
>
<item
row=
"1"
column=
"1"
>
<widget
class=
"QComboBox"
name=
"connectionType"
>
<widget
class=
"QComboBox"
name=
"connectionType"
>
<property
name=
"currentIndex"
>
<property
name=
"currentIndex"
>
<number>
0
</number>
<number>
-1
</number>
</property>
</property>
<item>
<property
name=
"text"
>
<string>
MAVLink
</string>
</property>
</item>
</widget>
</widget>
</item>
</item>
</layout>
</layout>
...
...
src/ui/HUD.cc
View file @
ab7869ce
...
@@ -165,6 +165,19 @@ HUD::~HUD()
...
@@ -165,6 +165,19 @@ HUD::~HUD()
}
}
void
HUD
::
showEvent
(
QShowEvent
*
event
)
{
Q_UNUSED
(
event
);
if
(
isVisible
())
{
refreshTimer
->
start
();
}
else
{
refreshTimer
->
stop
();
}
}
void
HUD
::
start
()
void
HUD
::
start
()
{
{
refreshTimer
->
start
();
refreshTimer
->
start
();
...
...
src/ui/HUD.h
View file @
ab7869ce
...
@@ -123,6 +123,8 @@ protected:
...
@@ -123,6 +123,8 @@ protected:
float
refLineWidthToPen
(
float
line
);
float
refLineWidthToPen
(
float
line
);
/** @brief Rotate a polygon around a point clockwise */
/** @brief Rotate a polygon around a point clockwise */
void
rotatePolygonClockWiseRad
(
QPolygonF
&
p
,
float
angle
,
QPointF
origin
);
void
rotatePolygonClockWiseRad
(
QPolygonF
&
p
,
float
angle
,
QPointF
origin
);
/** @brief Override base class show */
virtual
void
showEvent
(
QShowEvent
*
event
);
QImage
*
image
;
///< Double buffer image
QImage
*
image
;
///< Double buffer image
QImage
glImage
;
///< The background / camera image
QImage
glImage
;
///< The background / camera image
...
...
src/ui/MainWindow.cc
View file @
ab7869ce
...
@@ -16,6 +16,7 @@
...
@@ -16,6 +16,7 @@
#include <QHostInfo>
#include <QHostInfo>
#include "MG.h"
#include "MG.h"
#include "QGC.h"
#include "MAVLinkSimulationLink.h"
#include "MAVLinkSimulationLink.h"
#include "SerialLink.h"
#include "SerialLink.h"
#include "UDPLink.h"
#include "UDPLink.h"
...
@@ -82,6 +83,33 @@ MainWindow::MainWindow(QWidget *parent):
...
@@ -82,6 +83,33 @@ MainWindow::MainWindow(QWidget *parent):
// Adjust the size
// Adjust the size
adjustSize
();
adjustSize
();
// Load previous widget setup
// FIXME WORK IN PROGRESS
QSettings
settings
(
QGC
::
COMPANYNAME
,
QGC
::
APPNAME
);
QList
<
QDockWidget
*>
dockwidgets
=
qFindChildren
<
QDockWidget
*>
(
this
);
if
(
dockwidgets
.
size
())
{
settings
.
beginGroup
(
"mainwindow/dockwidgets"
);
for
(
int
i
=
0
;
i
<
dockwidgets
.
size
();
++
i
)
{
QDockWidget
*
dockWidget
=
dockwidgets
.
at
(
i
);
if
(
dockWidget
->
parentWidget
()
==
this
)
{
if
(
settings
.
contains
(
dockWidget
->
windowTitle
()))
{
dockWidget
->
setVisible
(
settings
.
value
(
dockWidget
->
windowTitle
(),
dockWidget
->
isVisible
()).
toBool
());
}
}
}
settings
.
endGroup
();
}
this
->
show
();
}
}
MainWindow
::~
MainWindow
()
MainWindow
::~
MainWindow
()
...
@@ -127,6 +155,110 @@ void MainWindow::buildCommonWidgets()
...
@@ -127,6 +155,110 @@ void MainWindow::buildCommonWidgets()
}
}
//=======
//void MainWindow::storeSettings()
//{
// QSettings settings(QGC::COMPANYNAME, QGC::APPNAME);
// QList<QDockWidget *> dockwidgets = qFindChildren<QDockWidget *>(this);
// if (dockwidgets.size())
// {
// settings.beginGroup("mainwindow/dockwidgets");
// for (int i = 0; i < dockwidgets.size(); ++i)
// {
// QDockWidget *dockWidget = dockwidgets.at(i);
// if (dockWidget->parentWidget() == this)
// {
// settings.setValue(dockWidget->windowTitle(), QVariant(dockWidget->isVisible()));
// }
// }
// settings.endGroup();
// }
// settings.sync();
//}
//QMenu* MainWindow::createCenterWidgetMenu()
//{
// QMenu* menu = NULL;
// QStackedWidget* centerStack = dynamic_cast<QStackedWidget*>(centralWidget());
// if (centerStack)
// {
// if (centerStack->count() > 0)
// {
// menu = new QMenu(this);
// for (int i = 0; i < centerStack->count(); ++i)
// {
// //menu->addAction(centerStack->widget(i)->actions())
// }
// }
// }
// return menu;
//}
//QMenu* MainWindow::createDockWidgetMenu()
//{
// QMenu *menu = 0;
//#ifndef QT_NO_DOCKWIDGET
// QList<QDockWidget *> dockwidgets = qFindChildren<QDockWidget *>(this);
// if (dockwidgets.size())
// {
// menu = new QMenu(this);
// for (int i = 0; i < dockwidgets.size(); ++i)
// {
// QDockWidget *dockWidget = dockwidgets.at(i);
// if (dockWidget->parentWidget() == this)
// {
// menu->addAction(dockwidgets.at(i)->toggleViewAction());
// }
// }
// menu->addSeparator();
// }
//#endif
// return menu;
//}
////QList<QWidget* >* MainWindow::getMainWidgets()
////{
////}
////QMenu* QMainWindow::getDockWidgetMenu()
////{
//// Q_D(QMainWindow);
//// QMenu *menu = 0;
////#ifndef QT_NO_DOCKWIDGET
//// QList<QDockWidget *> dockwidgets = qFindChildren<QDockWidget *>(this);
//// if (dockwidgets.size()) {
//// menu = new QMenu(this);
//// for (int i = 0; i < dockwidgets.size(); ++i) {
//// QDockWidget *dockWidget = dockwidgets.at(i);
//// if (dockWidget->parentWidget() == this
//// && d->layout->contains(dockWidget)) {
//// menu->addAction(dockwidgets.at(i)->toggleViewAction());
//// }
//// }
//// menu->addSeparator();
//// }
////#endif // QT_NO_DOCKWIDGET
////#ifndef QT_NO_TOOLBAR
//// QList<QToolBar *> toolbars = qFindChildren<QToolBar *>(this);
//// if (toolbars.size()) {
//// if (!menu)
//// menu = new QMenu(this);
//// for (int i = 0; i < toolbars.size(); ++i) {
//// QToolBar *toolBar = toolbars.at(i);
//// if (toolBar->parentWidget() == this
//// && d->layout->contains(toolBar)) {
//// menu->addAction(toolbars.at(i)->toggleViewAction());
//// }
//// }
//// }
////#endif
//// Q_UNUSED(d);
//// return menu;
////}
//>>>>>>> master
void
MainWindow
::
buildPxWidgets
()
void
MainWindow
::
buildPxWidgets
()
{
{
//FIXME: memory of acceptList will never be freed again
//FIXME: memory of acceptList will never be freed again
...
@@ -172,6 +304,7 @@ void MainWindow::buildPxWidgets()
...
@@ -172,6 +304,7 @@ void MainWindow::buildPxWidgets()
#endif
#endif
// Dock widgets
// Dock widgets
detectionDockWidget
=
new
QDockWidget
(
tr
(
"Object Recognition"
),
this
);
detectionDockWidget
=
new
QDockWidget
(
tr
(
"Object Recognition"
),
this
);
detectionDockWidget
->
setWidget
(
new
ObjectDetectionView
(
"images/patterns"
,
this
)
);
detectionDockWidget
->
setWidget
(
new
ObjectDetectionView
(
"images/patterns"
,
this
)
);
addToToolsMenu
(
detectionDockWidget
,
tr
(
"Object Recognition"
),
SLOT
(
showToolWidget
()),
MENU_DETECTION
,
Qt
::
RightDockWidgetArea
);
addToToolsMenu
(
detectionDockWidget
,
tr
(
"Object Recognition"
),
SLOT
(
showToolWidget
()),
MENU_DETECTION
,
Qt
::
RightDockWidgetArea
);
...
@@ -189,9 +322,53 @@ void MainWindow::buildPxWidgets()
...
@@ -189,9 +322,53 @@ void MainWindow::buildPxWidgets()
hsiDockWidget
=
new
QDockWidget
(
tr
(
"Horizontal Situation Indicator"
),
this
);
hsiDockWidget
=
new
QDockWidget
(
tr
(
"Horizontal Situation Indicator"
),
this
);
hsiDockWidget
->
setWidget
(
new
HSIDisplay
(
this
)
);
hsiDockWidget
->
setWidget
(
new
HSIDisplay
(
this
)
);
addToToolsMenu
(
hsiDockWidget
,
tr
(
"HSI"
),
SLOT
(
showToolWidget
()),
MENU_HSI
,
Qt
::
BottomDockWidgetArea
);
addToToolsMenu
(
hsiDockWidget
,
tr
(
"HSI"
),
SLOT
(
showToolWidget
()),
MENU_HSI
,
Qt
::
BottomDockWidgetArea
);
//=======
headDown1DockWidget
=
new
QDockWidget
(
tr
(
"Primary Flight Display"
),
this
);
// controlDockWidget = new QDockWidget(tr("Control"), this);
// controlDockWidget->setWidget( new UASControlWidget(this) );
// addDockWidget(Qt::LeftDockWidgetArea, controlDockWidget);
// controlDockWidget->hide();
// infoDockWidget = new QDockWidget(tr("Status Details"), this);
// infoDockWidget->setWidget( new UASInfoWidget(this) );
// addDockWidget(Qt::LeftDockWidgetArea, infoDockWidget);
// //infoDockWidget->hide();
// listDockWidget = new QDockWidget(tr("Unmanned Systems"), this);
// listDockWidget->setWidget( new UASListWidget(this) );
// addDockWidget(Qt::BottomDockWidgetArea, listDockWidget);
// listDockWidget->hide();
// waypointsDockWidget = new QDockWidget(tr("Waypoint List"), this);
// waypointsDockWidget->setWidget( new WaypointList(this, NULL) );
// addDockWidget(Qt::BottomDockWidgetArea, waypointsDockWidget);
// waypointsDockWidget->hide();
// detectionDockWidget = new QDockWidget(tr("Object Recognition"), this);
// detectionDockWidget->setWidget( new ObjectDetectionView("images/patterns", this) );
// addDockWidget(Qt::RightDockWidgetArea, detectionDockWidget);
// detectionDockWidget->hide();
// debugConsoleDockWidget = new QDockWidget(tr("Communication Console"), this);
// debugConsoleDockWidget->setWidget( new DebugConsole(this) );
// addDockWidget(Qt::BottomDockWidgetArea, debugConsoleDockWidget);
// parametersDockWidget = new QDockWidget(tr("Onboard Parameters"), this);
// parametersDockWidget->setWidget( new ParameterInterface(this) );
// addDockWidget(Qt::RightDockWidgetArea, parametersDockWidget);
// watchdogControlDockWidget = new QDockWidget(tr("Process Control"), this);
// watchdogControlDockWidget->setWidget( new WatchdogControl(this) );
// addDockWidget(Qt::RightDockWidgetArea, watchdogControlDockWidget);
// watchdogControlDockWidget->hide();
// hsiDockWidget = new QDockWidget(tr("Horizontal Situation Indicator"), this);
// hsiDockWidget->setWidget( new HSIDisplay(this) );
// addDockWidget(Qt::LeftDockWidgetArea, hsiDockWidget);
//>>>>>>> master
headDown1DockWidget
=
new
QDockWidget
(
tr
(
"System Stats"
),
this
);
headDown1DockWidget
->
setWidget
(
new
HDDisplay
(
acceptList
,
this
)
);
headDown1DockWidget
->
setWidget
(
new
HDDisplay
(
acceptList
,
this
)
);
addToToolsMenu
(
headDown1DockWidget
,
tr
(
"Flight Display"
),
SLOT
(
showToolWidget
()),
MENU_HDD_1
,
Qt
::
RightDockWidgetArea
);
addToToolsMenu
(
headDown1DockWidget
,
tr
(
"Flight Display"
),
SLOT
(
showToolWidget
()),
MENU_HDD_1
,
Qt
::
RightDockWidgetArea
);
headDown2DockWidget
=
new
QDockWidget
(
tr
(
"Payload Status"
),
this
);
headDown2DockWidget
=
new
QDockWidget
(
tr
(
"Payload Status"
),
this
);
...
@@ -201,6 +378,18 @@ void MainWindow::buildPxWidgets()
...
@@ -201,6 +378,18 @@ void MainWindow::buildPxWidgets()
rcViewDockWidget
=
new
QDockWidget
(
tr
(
"Radio Control"
),
this
);
rcViewDockWidget
=
new
QDockWidget
(
tr
(
"Radio Control"
),
this
);
rcViewDockWidget
->
setWidget
(
new
QGCRemoteControlView
(
this
)
);
rcViewDockWidget
->
setWidget
(
new
QGCRemoteControlView
(
this
)
);
addToToolsMenu
(
rcViewDockWidget
,
tr
(
"Radio Control"
),
SLOT
(
showToolWidget
()),
MENU_RC_VIEW
,
Qt
::
BottomDockWidgetArea
);
addToToolsMenu
(
rcViewDockWidget
,
tr
(
"Radio Control"
),
SLOT
(
showToolWidget
()),
MENU_RC_VIEW
,
Qt
::
BottomDockWidgetArea
);
//=======
// addDockWidget(Qt::RightDockWidgetArea, headDown1DockWidget);
// headDown2DockWidget = new QDockWidget(tr("Payload Status"), this);
// headDown2DockWidget->setWidget( new HDDisplay(acceptList2, this) );
// addDockWidget(Qt::RightDockWidgetArea, headDown2DockWidget);
// rcViewDockWidget = new QDockWidget(tr("Radio Control"), this);
// rcViewDockWidget->setWidget( new QGCRemoteControlView(this) );
// addDockWidget(Qt::BottomDockWidgetArea, rcViewDockWidget);
// rcViewDockWidget->hide();
//>>>>>>> master
headUpDockWidget
=
new
QDockWidget
(
tr
(
"HUD"
),
this
);
headUpDockWidget
=
new
QDockWidget
(
tr
(
"HUD"
),
this
);
headUpDockWidget
->
setWidget
(
new
HUD
(
320
,
240
,
this
));
headUpDockWidget
->
setWidget
(
new
HUD
(
320
,
240
,
this
));
...
@@ -234,16 +423,34 @@ void MainWindow::buildSlugsWidgets()
...
@@ -234,16 +423,34 @@ void MainWindow::buildSlugsWidgets()
slugsDataWidget
->
setWidget
(
new
SlugsDataSensorView
(
this
));
slugsDataWidget
->
setWidget
(
new
SlugsDataSensorView
(
this
));
addToToolsMenu
(
slugsDataWidget
,
tr
(
"Telemetry Data"
),
SLOT
(
showToolWidget
()),
MENU_SLUGS_DATA
,
Qt
::
RightDockWidgetArea
);
addToToolsMenu
(
slugsDataWidget
,
tr
(
"Telemetry Data"
),
SLOT
(
showToolWidget
()),
MENU_SLUGS_DATA
,
Qt
::
RightDockWidgetArea
);
//=======
// this->addDockWidget(Qt::LeftDockWidgetArea, headUpDockWidget);
slugsPIDControlWidget
=
new
QDockWidget
(
tr
(
"PID Control"
),
this
);
// // SLUGS
// slugsDataWidget = new QDockWidget(tr("Slugs Data"), this);
// slugsDataWidget->setWidget( new SlugsDataSensorView(this));
// addDockWidget(Qt::LeftDockWidgetArea, slugsDataWidget);
// slugsDataWidget->hide();
//>>>>>>> master
slugsPIDControlWidget
=
new
QDockWidget
(
tr
(
"Slugs PID Control"
),
this
);
slugsPIDControlWidget
->
setWidget
(
new
SlugsPIDControl
(
this
));
slugsPIDControlWidget
->
setWidget
(
new
SlugsPIDControl
(
this
));
addToToolsMenu
(
slugsPIDControlWidget
,
tr
(
"PID Configuration"
),
SLOT
(
showToolWidget
()),
MENU_SLUGS_PID
,
Qt
::
LeftDockWidgetArea
);
addToToolsMenu
(
slugsPIDControlWidget
,
tr
(
"PID Configuration"
),
SLOT
(
showToolWidget
()),
MENU_SLUGS_PID
,
Qt
::
LeftDockWidgetArea
);
slugsHilSimWidget
=
new
QDockWidget
(
tr
(
"Slugs Hil Sim"
),
this
);
slugsHilSimWidget
=
new
QDockWidget
(
tr
(
"Slugs Hil Sim"
),
this
);
slugsHilSimWidget
->
setWidget
(
new
SlugsHilSim
(
this
));
slugsHilSimWidget
->
setWidget
(
new
SlugsHilSim
(
this
));
addToToolsMenu
(
slugsHilSimWidget
,
tr
(
"HIL Sim Configuration"
),
SLOT
(
showToolWidget
()),
MENU_SLUGS_HIL
,
Qt
::
LeftDockWidgetArea
);
addToToolsMenu
(
slugsHilSimWidget
,
tr
(
"HIL Sim Configuration"
),
SLOT
(
showToolWidget
()),
MENU_SLUGS_HIL
,
Qt
::
LeftDockWidgetArea
);
//=======
// addDockWidget(Qt::BottomDockWidgetArea, slugsPIDControlWidget);
// slugsPIDControlWidget->hide();
slugsCamControlWidget
=
new
QDockWidget
(
tr
(
"Video Camera Control"
),
this
);
// slugsHilSimWidget = new QDockWidget(tr("Slugs Hil Sim"), this);
// slugsHilSimWidget->setWidget( new SlugsHilSim(this));
// addDockWidget(Qt::BottomDockWidgetArea, slugsHilSimWidget);
// slugsHilSimWidget->hide();
//>>>>>>> master
slugsCamControlWidget
=
new
QDockWidget
(
tr
(
"Slugs Video Camera Control"
),
this
);
slugsCamControlWidget
->
setWidget
(
new
SlugsVideoCamControl
(
this
));
slugsCamControlWidget
->
setWidget
(
new
SlugsVideoCamControl
(
this
));
addToToolsMenu
(
slugsCamControlWidget
,
tr
(
"Camera Control"
),
SLOT
(
showToolWidget
()),
MENU_SLUGS_CAMERA
,
Qt
::
BottomDockWidgetArea
);
addToToolsMenu
(
slugsCamControlWidget
,
tr
(
"Camera Control"
),
SLOT
(
showToolWidget
()),
MENU_SLUGS_CAMERA
,
Qt
::
BottomDockWidgetArea
);
...
@@ -475,6 +682,13 @@ void MainWindow::updateLocationSettings (Qt::DockWidgetArea location){
...
@@ -475,6 +682,13 @@ void MainWindow::updateLocationSettings (Qt::DockWidgetArea location){
break
;
break
;
}
}
}
}
//=======
// addDockWidget(Qt::BottomDockWidgetArea, slugsCamControlWidget);
// slugsCamControlWidget->hide();
// //FIXME: free memory in destructor
// joystick = new JoystickInput();
//>>>>>>> master
}
}
/**
/**
...
@@ -505,10 +719,6 @@ void MainWindow::connectPxWidgets()
...
@@ -505,10 +719,6 @@ void MainWindow::connectPxWidgets()
{
{
if
(
linechartWidget
)
if
(
linechartWidget
)
{
{
connect
(
UASManager
::
instance
(),
SIGNAL
(
UASCreated
(
UASInterface
*
)),
linechartWidget
,
SLOT
(
addSystem
(
UASInterface
*
)));
connect
(
UASManager
::
instance
(),
SIGNAL
(
activeUASSet
(
int
)),
linechartWidget
,
SLOT
(
selectSystem
(
int
)));
connect
(
linechartWidget
,
SIGNAL
(
logfileWritten
(
QString
)),
connect
(
linechartWidget
,
SIGNAL
(
logfileWritten
(
QString
)),
this
,
SLOT
(
loadDataView
(
QString
)));
this
,
SLOT
(
loadDataView
(
QString
)));
}
}
...
@@ -1006,7 +1216,8 @@ void MainWindow::clearView()
...
@@ -1006,7 +1216,8 @@ void MainWindow::clearView()
if
(
dockWidget
)
if
(
dockWidget
)
{
{
// Remove dock widget from main window
// Remove dock widget from main window
this
->
removeDockWidget
(
dockWidget
);
//this->removeDockWidget(dockWidget);
dockWidget
->
setVisible
(
false
);
// Deletion of dockWidget would also delete all child
// Deletion of dockWidget would also delete all child
// widgets of dockWidget
// widgets of dockWidget
// Is there a way to unset a widget from QDockWidget?
// Is there a way to unset a widget from QDockWidget?
...
@@ -1048,6 +1259,14 @@ void MainWindow::loadMAVLinkView()
...
@@ -1048,6 +1259,14 @@ void MainWindow::loadMAVLinkView()
currentView
=
VIEW_MAVLINK
;
currentView
=
VIEW_MAVLINK
;
presentView
();
presentView
();
//=======
// // Slugs Data View
// if (slugsHilSimWidget)
// {
// addDockWidget(Qt::LeftDockWidgetArea, slugsHilSimWidget);
// slugsHilSimWidget->show();
// }
//>>>>>>> master
}
}
void
MainWindow
::
presentView
()
{
void
MainWindow
::
presentView
()
{
...
@@ -1224,12 +1443,18 @@ void MainWindow::presentView() {
...
@@ -1224,12 +1443,18 @@ void MainWindow::presentView() {
}
}
void
MainWindow
::
showTheCentralWidget
(
TOOLS_WIDGET_NAMES
centralWidget
,
VIEW_SECTIONS
view
){
void
MainWindow
::
showTheCentralWidget
(
TOOLS_WIDGET_NAMES
centralWidget
,
VIEW_SECTIONS
view
){
bool
tempVisible
;
bool
tempVisible
;
QWidget
*
tempWidget
=
dockWidgets
[
centralWidget
];
QWidget
*
tempWidget
=
dockWidgets
[
centralWidget
];
//=======
// // ONBOARD PARAMETERS
// if (parametersDockWidget)
// {
// addDockWidget(Qt::RightDockWidgetArea, parametersDockWidget);
// parametersDockWidget->show();
// }
//}
//>>>>>>> master
tempVisible
=
settings
.
value
(
buildMenuKey
(
SUB_SECTION_CHECKED
,
centralWidget
,
view
)).
toBool
();
tempVisible
=
settings
.
value
(
buildMenuKey
(
SUB_SECTION_CHECKED
,
centralWidget
,
view
)).
toBool
();
qDebug
()
<<
buildMenuKey
(
SUB_SECTION_CHECKED
,
centralWidget
,
view
)
<<
tempVisible
;
qDebug
()
<<
buildMenuKey
(
SUB_SECTION_CHECKED
,
centralWidget
,
view
)
<<
tempVisible
;
...
@@ -1281,6 +1506,24 @@ void MainWindow::loadAllView()
...
@@ -1281,6 +1506,24 @@ void MainWindow::loadAllView()
hdd
->
start
();
hdd
->
start
();
}
}
}
}
//<<<<<<< HEAD
//=======
//}
//void MainWindow::loadOperatorView()
//{
// clearView();
// // MAP
// if (mapWidget)
// {
// QStackedWidget *centerStack = dynamic_cast<QStackedWidget*>(centralWidget());
// if (centerStack)
// {
// centerStack->setCurrentWidget(mapWidget);
// }
// }
//>>>>>>> master
// UAS CONTROL
// UAS CONTROL
if
(
controlDockWidget
)
if
(
controlDockWidget
)
...
@@ -1341,8 +1584,6 @@ void MainWindow::loadAllView()
...
@@ -1341,8 +1584,6 @@ void MainWindow::loadAllView()
addDockWidget
(
Qt
::
RightDockWidgetArea
,
parametersDockWidget
);
addDockWidget
(
Qt
::
RightDockWidgetArea
,
parametersDockWidget
);
parametersDockWidget
->
show
();
parametersDockWidget
->
show
();
}
}
this
->
show
();
}
}
void
MainWindow
::
loadWidgets
()
void
MainWindow
::
loadWidgets
()
...
@@ -1430,7 +1671,6 @@ void MainWindow::load3DMapView()
...
@@ -1430,7 +1671,6 @@ void MainWindow::load3DMapView()
}
}
}
}
#endif
#endif
this
->
show
();
}
}
void
MainWindow
::
loadGoogleEarthView
()
void
MainWindow
::
loadGoogleEarthView
()
...
@@ -1480,7 +1720,6 @@ void MainWindow::loadGoogleEarthView()
...
@@ -1480,7 +1720,6 @@ void MainWindow::loadGoogleEarthView()
hsiDockWidget
->
show
();
hsiDockWidget
->
show
();
}
}
}
}
this
->
show
();
#endif
#endif
}
}
...
@@ -1534,8 +1773,6 @@ void MainWindow::load3DView()
...
@@ -1534,8 +1773,6 @@ void MainWindow::load3DView()
}
}
}
}
#endif
#endif
this
->
show
();
}
}
/*
/*
...
@@ -1586,15 +1823,26 @@ void MainWindow::buildWidgets()
...
@@ -1586,15 +1823,26 @@ void MainWindow::buildWidgets()
listDockWidget = new QDockWidget(tr("Unmanned Systems"), this);
listDockWidget = new QDockWidget(tr("Unmanned Systems"), this);
listDockWidget->setWidget( new UASListWidget(this) );
listDockWidget->setWidget( new UASListWidget(this) );
<<<<<<< HEAD
waypointsDockWidget = new QDockWidget(tr("Waypoint List"), this);
waypointsDockWidget = new QDockWidget(tr("Waypoint List"), this);
waypointsDockWidget->setWidget( new WaypointList(this, NULL) );
waypointsDockWidget->setWidget( new WaypointList(this, NULL) );
infoDockWidget = new QDockWidget(tr("Status Details"), this);
infoDockWidget = new QDockWidget(tr("Status Details"), this);
infoDockWidget->setWidget( new UASInfoWidget(this) );
infoDockWidget->setWidget( new UASInfoWidget(this) );
=======
// RADIO CONTROL VIEW
if (rcViewDockWidget)
{
addDockWidget(Qt::BottomDockWidgetArea, rcViewDockWidget);
rcViewDockWidget->show();
}
}
>>>>>>> master
detectionDockWidget = new QDockWidget(tr("Object Recognition"), this);
detectionDockWidget = new QDockWidget(tr("Object Recognition"), this);
detectionDockWidget->setWidget( new ObjectDetectionView("images/patterns", this) );
detectionDockWidget->setWidget( new ObjectDetectionView("images/patterns", this) );
<<<<<<< HEAD
debugConsoleDockWidget = new QDockWidget(tr("Communication Console"), this);
debugConsoleDockWidget = new QDockWidget(tr("Communication Console"), this);
debugConsoleDockWidget->setWidget( new DebugConsole(this) );
debugConsoleDockWidget->setWidget( new DebugConsole(this) );
...
@@ -1635,6 +1883,16 @@ void MainWindow::buildWidgets()
...
@@ -1635,6 +1883,16 @@ void MainWindow::buildWidgets()
slugsCamControlWidget = new QDockWidget(tr("Video Camera Control"), this);
slugsCamControlWidget = new QDockWidget(tr("Video Camera Control"), this);
slugsCamControlWidget->setWidget(new SlugsVideoCamControl(this));
slugsCamControlWidget->setWidget(new SlugsVideoCamControl(this));
=======
if (protocolWidget)
{
QStackedWidget *centerStack = dynamic_cast<QStackedWidget*>(centralWidget());
if (centerStack)
{
centerStack->setCurrentWidget(protocolWidget);
}
}
>>>>>>> master
}
}
void MainWindow::connectWidgets()
void MainWindow::connectWidgets()
...
@@ -1707,10 +1965,19 @@ void MainWindow::arrangeCenterStack()
...
@@ -1707,10 +1965,19 @@ void MainWindow::arrangeCenterStack()
if (dataplotWidget) centerStack->addWidget(dataplotWidget);
if (dataplotWidget) centerStack->addWidget(dataplotWidget);
setCentralWidget(centerStack);
setCentralWidget(centerStack);
=======
// ONBOARD PARAMETERS
if (parametersDockWidget)
{
addDockWidget(Qt::RightDockWidgetArea, parametersDockWidget);
parametersDockWidget->show();
}
>>>>>>> master
}
}
void MainWindow::connectActions()
void MainWindow::connectActions()
{
{
<<<<<<< HEAD
// Connect actions from ui
// Connect actions from ui
connect(ui.actionAdd_Link, SIGNAL(triggered()), this, SLOT(addLink()));
connect(ui.actionAdd_Link, SIGNAL(triggered()), this, SLOT(addLink()));
...
@@ -1763,6 +2030,9 @@ void MainWindow::connectActions()
...
@@ -1763,6 +2030,9 @@ void MainWindow::connectActions()
//GlobalOperatorView
//GlobalOperatorView
// connect(ui.actionGlobalOperatorView,SIGNAL(triggered()),waypointsDockWidget->widget(),SLOT())
// connect(ui.actionGlobalOperatorView,SIGNAL(triggered()),waypointsDockWidget->widget(),SLOT())
=======
//loadEngineerView();
>>>>>>> master
}
}
*/
*/
src/ui/MainWindow.h
View file @
ab7869ce
...
@@ -87,6 +87,9 @@ public:
...
@@ -87,6 +87,9 @@ public:
~
MainWindow
();
~
MainWindow
();
public
slots
:
public
slots
:
// /** @brief Store the mainwindow settings */
// void storeSettings();
/**
/**
* @brief Shows a status message on the bottom status bar
* @brief Shows a status message on the bottom status bar
*
*
...
@@ -324,7 +327,6 @@ protected:
...
@@ -324,7 +327,6 @@ protected:
void
configureWindowName
();
void
configureWindowName
();
// TODO Should be moved elsewhere, as the protocol does not belong to the UI
// TODO Should be moved elsewhere, as the protocol does not belong to the UI
MAVLinkProtocol
*
mavlink
;
MAVLinkProtocol
*
mavlink
;
AS4Protocol
*
as4link
;
AS4Protocol
*
as4link
;
...
@@ -367,6 +369,7 @@ protected:
...
@@ -367,6 +369,7 @@ protected:
QPointer
<
QDockWidget
>
hsiDockWidget
;
QPointer
<
QDockWidget
>
hsiDockWidget
;
QPointer
<
QDockWidget
>
rcViewDockWidget
;
QPointer
<
QDockWidget
>
rcViewDockWidget
;
QPointer
<
QDockWidget
>
hudDockWidget
;
QPointer
<
QDockWidget
>
slugsDataWidget
;
QPointer
<
QDockWidget
>
slugsDataWidget
;
QPointer
<
QDockWidget
>
slugsPIDControlWidget
;
QPointer
<
QDockWidget
>
slugsPIDControlWidget
;
QPointer
<
QDockWidget
>
slugsHilSimWidget
;
QPointer
<
QDockWidget
>
slugsHilSimWidget
;
...
...
src/ui/MainWindow.ui
View file @
ab7869ce
...
@@ -108,14 +108,7 @@
...
@@ -108,14 +108,7 @@
<addaction
name=
"menuPerspectives"
/>
<addaction
name=
"menuPerspectives"
/>
<addaction
name=
"menuHelp"
/>
<addaction
name=
"menuHelp"
/>
</widget>
</widget>
<widget
class=
"QToolBar"
name=
"mainToolBar"
>
<attribute
name=
"toolBarArea"
>
<enum>
TopToolBarArea
</enum>
</attribute>
<attribute
name=
"toolBarBreak"
>
<bool>
false
</bool>
</attribute>
</widget>
<widget
class=
"QStatusBar"
name=
"statusBar"
/>
<widget
class=
"QStatusBar"
name=
"statusBar"
/>
<action
name=
"actionExit"
>
<action
name=
"actionExit"
>
<property
name=
"icon"
>
<property
name=
"icon"
>
...
@@ -461,3 +454,5 @@
...
@@ -461,3 +454,5 @@
</connection>
</connection>
</connections>
</connections>
</ui>
</ui>
src/ui/MapWidget.cc
View file @
ab7869ce
...
@@ -593,21 +593,12 @@ void MapWidget::updateGlobalPosition(UASInterface* uas, double lat, double lon,
...
@@ -593,21 +593,12 @@ void MapWidget::updateGlobalPosition(UASInterface* uas, double lat, double lon,
uasTrails
.
value
(
uas
->
getUASID
())
->
addPoint
(
new
qmapcontrol
::
Point
(
lat
,
lon
,
QString
(
"lat: %1 lon: %2"
).
arg
(
lat
,
lon
)));
uasTrails
.
value
(
uas
->
getUASID
())
->
addPoint
(
new
qmapcontrol
::
Point
(
lat
,
lon
,
QString
(
"lat: %1 lon: %2"
).
arg
(
lat
,
lon
)));
}
}
// points.append(new CirclePoint(8.275145, 50.016992, 15, "Wiesbaden-Mainz-Kastel, Johannes-Goßner-Straße", Point::Middle, pointpen));
// points.append(new CirclePoint(8.270476, 50.021426, 15, "Wiesbaden-Mainz-Kastel, Ruthof", Point::Middle, pointpen));
// // "Blind" Points
// points.append(new Point(8.266445, 50.025913, "Wiesbaden-Mainz-Kastel, Mudra Kaserne"));
// points.append(new Point(8.260378, 50.030345, "Wiesbaden-Mainz-Amoneburg, Dyckerhoffstraße"));
// Connect click events of the layer to this object
// Connect click events of the layer to this object
// connect(osmLayer, SIGNAL(geometryClicked(Geometry*, QPoint)),
// connect(osmLayer, SIGNAL(geometryClicked(Geometry*, QPoint)),
// this, SLOT(geometryClicked(Geometry*, QPoint)));
// this, SLOT(geometryClicked(Geometry*, QPoint)));
// Sets the view to the interesting area
// Sets the view to the interesting area
//QList<QPointF> view;
//view.append(QPointF(8.24764, 50.0319));
//view.append(QPointF(8.28412, 49.9998));
// mc->setView(view);
updatePosition
(
0
,
lat
,
lon
);
updatePosition
(
0
,
lat
,
lon
);
}
}
}
}
...
...
src/ui/ParameterInterface.cc
View file @
ab7869ce
...
@@ -51,6 +51,15 @@ ParameterInterface::ParameterInterface(QWidget *parent) :
...
@@ -51,6 +51,15 @@ ParameterInterface::ParameterInterface(QWidget *parent) :
// Setup UI connections
// Setup UI connections
connect
(
m_ui
->
vehicleComboBox
,
SIGNAL
(
activated
(
int
)),
this
,
SLOT
(
selectUAS
(
int
)));
connect
(
m_ui
->
vehicleComboBox
,
SIGNAL
(
activated
(
int
)),
this
,
SLOT
(
selectUAS
(
int
)));
// Get current MAV list
QList
<
UASInterface
*>
systems
=
UASManager
::
instance
()
->
getUASList
();
// Add each of them
foreach
(
UASInterface
*
sys
,
systems
)
{
addUAS
(
sys
);
}
// Setup MAV connections
// Setup MAV connections
connect
(
UASManager
::
instance
(),
SIGNAL
(
UASCreated
(
UASInterface
*
)),
this
,
SLOT
(
addUAS
(
UASInterface
*
)));
connect
(
UASManager
::
instance
(),
SIGNAL
(
UASCreated
(
UASInterface
*
)),
this
,
SLOT
(
addUAS
(
UASInterface
*
)));
this
->
setVisible
(
false
);
this
->
setVisible
(
false
);
...
...
src/ui/QGCMainWindowAPConfigurator.cc
0 → 100644
View file @
ab7869ce
#include "QGCMainWindowAPConfigurator.h"
QGCMainWindowAPConfigurator
::
QGCMainWindowAPConfigurator
(
QObject
*
parent
)
:
QObject
(
parent
)
{
}
src/ui/QGCMainWindowAPConfigurator.h
0 → 100644
View file @
ab7869ce
#ifndef QGCMAINWINDOWAPCONFIGURATOR_H
#define QGCMAINWINDOWAPCONFIGURATOR_H
#include <QObject>
class
QGCMainWindowAPConfigurator
:
public
QObject
{
Q_OBJECT
public:
explicit
QGCMainWindowAPConfigurator
(
QObject
*
parent
=
0
);
signals:
public
slots
:
};
#endif // QGCMAINWINDOWAPCONFIGURATOR_H
src/ui/SerialConfigurationWindow.cc
View file @
ab7869ce
...
@@ -33,6 +33,7 @@ This file is part of the QGROUNDCONTROL project
...
@@ -33,6 +33,7 @@ This file is part of the QGROUNDCONTROL project
#include <SerialConfigurationWindow.h>
#include <SerialConfigurationWindow.h>
#include <SerialLinkInterface.h>
#include <SerialLinkInterface.h>
#include <QDir>
#include <QDir>
#include <QSettings>
#include <QFileInfoList>
#include <QFileInfoList>
#ifdef _WIN32
#ifdef _WIN32
#include <QextSerialEnumerator.h>
#include <QextSerialEnumerator.h>
...
@@ -509,12 +510,3 @@ void SerialConfigurationWindow::setLinkName(QString name)
...
@@ -509,12 +510,3 @@ void SerialConfigurationWindow::setLinkName(QString name)
setWindowTitle
(
tr
(
"Configuration of "
)
+
link
->
getName
());
setWindowTitle
(
tr
(
"Configuration of "
)
+
link
->
getName
());
}
}
void
SerialConfigurationWindow
::
remove
()
{
link
->
disconnect
();
//delete link;
//delete action;
this
->
window
()
->
close
();
qDebug
()
<<
"TODO: Link cannot be deleted: SerialConfigurationWindow::remove() NOT IMPLEMENTED!"
;
}
src/ui/SerialConfigurationWindow.h
View file @
ab7869ce
...
@@ -60,12 +60,6 @@ public slots:
...
@@ -60,12 +60,6 @@ public slots:
void
setParityEven
();
void
setParityEven
();
void
setPortName
(
QString
port
);
void
setPortName
(
QString
port
);
void
setLinkName
(
QString
name
);
void
setLinkName
(
QString
name
);
/**
* @brief Remove this link
*
* Disconnects the associated link, removes it from all menus and closes the window.
*/
void
remove
();
void
setupPortList
();
void
setupPortList
();
protected
slots
:
protected
slots
:
...
...
src/ui/XMLCommProtocolWidget.cc
View file @
ab7869ce
...
@@ -7,6 +7,7 @@
...
@@ -7,6 +7,7 @@
#include "ui_XMLCommProtocolWidget.h"
#include "ui_XMLCommProtocolWidget.h"
#include "MAVLinkXMLParser.h"
#include "MAVLinkXMLParser.h"
#include "MAVLinkSyntaxHighlighter.h"
#include "MAVLinkSyntaxHighlighter.h"
#include "QGC.h"
#include <QDebug>
#include <QDebug>
#include <iostream>
#include <iostream>
...
@@ -31,7 +32,7 @@ XMLCommProtocolWidget::XMLCommProtocolWidget(QWidget *parent) :
...
@@ -31,7 +32,7 @@ XMLCommProtocolWidget::XMLCommProtocolWidget(QWidget *parent) :
void
XMLCommProtocolWidget
::
selectXMLFile
()
void
XMLCommProtocolWidget
::
selectXMLFile
()
{
{
//QString fileName = QFileDialog::getOpenFileName(this, tr("Load Protocol Definition File"), ".", "*.xml");
//QString fileName = QFileDialog::getOpenFileName(this, tr("Load Protocol Definition File"), ".", "*.xml");
QSettings
settings
;
QSettings
settings
(
QGC
::
COMPANYNAME
,
QGC
::
APPNAME
)
;
const
QString
mavlinkXML
=
"MAVLINK_XML_FILE"
;
const
QString
mavlinkXML
=
"MAVLINK_XML_FILE"
;
QString
dirPath
=
settings
.
value
(
mavlinkXML
,
QCoreApplication
::
applicationDirPath
()
+
"../"
).
toString
();
QString
dirPath
=
settings
.
value
(
mavlinkXML
,
QCoreApplication
::
applicationDirPath
()
+
"../"
).
toString
();
QFileDialog
dialog
;
QFileDialog
dialog
;
...
@@ -56,6 +57,7 @@ void XMLCommProtocolWidget::selectXMLFile()
...
@@ -56,6 +57,7 @@ void XMLCommProtocolWidget::selectXMLFile()
setXML
(
instanceText
);
setXML
(
instanceText
);
// Store filename for next time
// Store filename for next time
settings
.
setValue
(
mavlinkXML
,
QFileInfo
(
file
).
absoluteFilePath
());
settings
.
setValue
(
mavlinkXML
,
QFileInfo
(
file
).
absoluteFilePath
());
settings
.
sync
();
}
}
else
else
{
{
...
@@ -92,7 +94,7 @@ void XMLCommProtocolWidget::setXML(const QString& xml)
...
@@ -92,7 +94,7 @@ void XMLCommProtocolWidget::setXML(const QString& xml)
void
XMLCommProtocolWidget
::
selectOutputDirectory
()
void
XMLCommProtocolWidget
::
selectOutputDirectory
()
{
{
QSettings
settings
;
QSettings
settings
(
QGC
::
COMPANYNAME
,
QGC
::
APPNAME
)
;
const
QString
mavlinkOutputDir
=
"MAVLINK_OUTPUT_DIR"
;
const
QString
mavlinkOutputDir
=
"MAVLINK_OUTPUT_DIR"
;
QString
dirPath
=
settings
.
value
(
mavlinkOutputDir
,
QCoreApplication
::
applicationDirPath
()
+
"../"
).
toString
();
QString
dirPath
=
settings
.
value
(
mavlinkOutputDir
,
QCoreApplication
::
applicationDirPath
()
+
"../"
).
toString
();
QFileDialog
dialog
;
QFileDialog
dialog
;
...
@@ -110,7 +112,8 @@ void XMLCommProtocolWidget::selectOutputDirectory()
...
@@ -110,7 +112,8 @@ void XMLCommProtocolWidget::selectOutputDirectory()
{
{
m_ui
->
outputDirNameLabel
->
setText
(
fileNames
.
first
());
m_ui
->
outputDirNameLabel
->
setText
(
fileNames
.
first
());
// Store directory for next time
// Store directory for next time
settings
.
setValue
(
mavlinkOutputDir
,
fileNames
.
first
());
settings
.
setValue
(
mavlinkOutputDir
,
QFileInfo
(
fileNames
.
first
()).
absoluteFilePath
());
settings
.
sync
();
//QFile file(fileName);
//QFile file(fileName);
}
}
}
}
...
...
src/ui/linechart/LinechartPlot.cc
View file @
ab7869ce
...
@@ -56,7 +56,7 @@ maxInterval(MAX_STORAGE_INTERVAL),
...
@@ -56,7 +56,7 @@ maxInterval(MAX_STORAGE_INTERVAL),
timeScaleStep
(
DEFAULT_SCALE_INTERVAL
),
// 10 seconds
timeScaleStep
(
DEFAULT_SCALE_INTERVAL
),
// 10 seconds
automaticScrollActive
(
false
),
automaticScrollActive
(
false
),
m_active
(
true
),
m_active
(
true
),
m_groundTime
(
fals
e
),
m_groundTime
(
tru
e
),
d_data
(
NULL
),
d_data
(
NULL
),
d_curve
(
NULL
)
d_curve
(
NULL
)
{
{
...
...
src/ui/linechart/LinechartWidget.cc
View file @
ab7869ce
...
@@ -159,7 +159,9 @@ void LinechartWidget::createLayout()
...
@@ -159,7 +159,9 @@ void LinechartWidget::createLayout()
QToolButton
*
timeButton
=
new
QToolButton
(
this
);
QToolButton
*
timeButton
=
new
QToolButton
(
this
);
timeButton
->
setText
(
tr
(
"Ground Time"
));
timeButton
->
setText
(
tr
(
"Ground Time"
));
timeButton
->
setCheckable
(
true
);
timeButton
->
setCheckable
(
true
);
timeButton
->
setChecked
(
false
);
bool
gTimeDefault
=
true
;
if
(
activePlot
)
activePlot
->
enforceGroundTime
(
gTimeDefault
);
timeButton
->
setChecked
(
gTimeDefault
);
layout
->
addWidget
(
timeButton
,
1
,
4
);
layout
->
addWidget
(
timeButton
,
1
,
4
);
layout
->
setColumnStretch
(
4
,
0
);
layout
->
setColumnStretch
(
4
,
0
);
connect
(
timeButton
,
SIGNAL
(
clicked
(
bool
)),
activePlot
,
SLOT
(
enforceGroundTime
(
bool
)));
connect
(
timeButton
,
SIGNAL
(
clicked
(
bool
)),
activePlot
,
SLOT
(
enforceGroundTime
(
bool
)));
...
@@ -442,6 +444,12 @@ void LinechartWidget::removeCurve(QString curve)
...
@@ -442,6 +444,12 @@ void LinechartWidget::removeCurve(QString curve)
// Remove name
// Remove name
}
}
void
LinechartWidget
::
showEvent
(
QShowEvent
*
event
)
{
Q_UNUSED
(
event
);
setActive
(
isVisible
());
}
void
LinechartWidget
::
setActive
(
bool
active
)
void
LinechartWidget
::
setActive
(
bool
active
)
{
{
if
(
activePlot
)
if
(
activePlot
)
...
...
src/ui/linechart/LinechartWidget.h
View file @
ab7869ce
...
@@ -77,6 +77,8 @@ public slots:
...
@@ -77,6 +77,8 @@ public slots:
void
setPlotWindowPosition
(
int
scrollBarValue
);
void
setPlotWindowPosition
(
int
scrollBarValue
);
void
setPlotWindowPosition
(
quint64
position
);
void
setPlotWindowPosition
(
quint64
position
);
void
setPlotInterval
(
quint64
interval
);
void
setPlotInterval
(
quint64
interval
);
/** @brief Override base class show */
virtual
void
showEvent
(
QShowEvent
*
event
);
void
setActive
(
bool
active
);
void
setActive
(
bool
active
);
/** @brief Set the number of values to average over */
/** @brief Set the number of values to average over */
void
setAverageWindow
(
int
windowSize
);
void
setAverageWindow
(
int
windowSize
);
...
...
src/ui/linechart/Linecharts.cc
View file @
ab7869ce
#include "Linecharts.h"
#include "Linecharts.h"
#include "UASManager.h"
Linecharts
::
Linecharts
(
QWidget
*
parent
)
:
Linecharts
::
Linecharts
(
QWidget
*
parent
)
:
QStackedWidget
(
parent
),
QStackedWidget
(
parent
),
...
@@ -6,6 +7,18 @@ Linecharts::Linecharts(QWidget *parent) :
...
@@ -6,6 +7,18 @@ Linecharts::Linecharts(QWidget *parent) :
active
(
true
)
active
(
true
)
{
{
this
->
setVisible
(
false
);
this
->
setVisible
(
false
);
// Get current MAV list
QList
<
UASInterface
*>
systems
=
UASManager
::
instance
()
->
getUASList
();
// Add each of them
foreach
(
UASInterface
*
sys
,
systems
)
{
addSystem
(
sys
);
}
connect
(
UASManager
::
instance
(),
SIGNAL
(
UASCreated
(
UASInterface
*
)),
this
,
SLOT
(
addSystem
(
UASInterface
*
)));
connect
(
UASManager
::
instance
(),
SIGNAL
(
activeUASSet
(
int
)),
this
,
SLOT
(
selectSystem
(
int
)));
}
}
...
...
src/ui/map/MAV2DIcon.cc
View file @
ab7869ce
...
@@ -14,7 +14,10 @@ MAV2DIcon::MAV2DIcon(qreal x, qreal y, QString name, Alignment alignment, QPen*
...
@@ -14,7 +14,10 @@ MAV2DIcon::MAV2DIcon(qreal x, qreal y, QString name, Alignment alignment, QPen*
{
{
int
radius
=
10
;
int
radius
=
10
;
size
=
QSize
(
radius
,
radius
);
size
=
QSize
(
radius
,
radius
);
drawIcon
(
pen
);
if
(
pen
)
{
drawIcon
(
pen
);
}
}
}
MAV2DIcon
::~
MAV2DIcon
()
MAV2DIcon
::~
MAV2DIcon
()
...
@@ -24,8 +27,11 @@ MAV2DIcon::~MAV2DIcon()
...
@@ -24,8 +27,11 @@ MAV2DIcon::~MAV2DIcon()
void
MAV2DIcon
::
setPen
(
QPen
*
pen
)
void
MAV2DIcon
::
setPen
(
QPen
*
pen
)
{
{
mypen
=
pen
;
if
(
pen
)
drawIcon
(
pen
);
{
mypen
=
pen
;
drawIcon
(
pen
);
}
}
}
/**
/**
...
@@ -38,46 +44,49 @@ void MAV2DIcon::setYaw(float yaw)
...
@@ -38,46 +44,49 @@ void MAV2DIcon::setYaw(float yaw)
void
MAV2DIcon
::
drawIcon
(
QPen
*
pen
)
void
MAV2DIcon
::
drawIcon
(
QPen
*
pen
)
{
{
mypixmap
=
new
QPixmap
(
radius
+
1
,
radius
+
1
);
if
(
pen
)
mypixmap
->
fill
(
Qt
::
transparent
);
{
QPainter
painter
(
mypixmap
);
mypixmap
=
new
QPixmap
(
radius
+
1
,
radius
+
1
);
mypixmap
->
fill
(
Qt
::
transparent
);
QPainter
painter
(
mypixmap
);
// DRAW MICRO AIR VEHICLE
// DRAW MICRO AIR VEHICLE
QPointF
p
(
radius
/
2
,
radius
/
2
);
QPointF
p
(
radius
/
2
,
radius
/
2
);
float
waypointSize
=
radius
;
float
waypointSize
=
radius
;
QPolygonF
poly
(
3
);
QPolygonF
poly
(
3
);
// Top point
// Top point
poly
.
replace
(
0
,
QPointF
(
p
.
x
(),
p
.
y
()
+
waypointSize
/
2.0
f
));
poly
.
replace
(
0
,
QPointF
(
p
.
x
(),
p
.
y
()
+
waypointSize
/
2.0
f
));
// Right point
// Right point
poly
.
replace
(
1
,
QPointF
(
p
.
x
()
-
waypointSize
/
2.0
f
,
p
.
y
()
-
waypointSize
/
2.0
f
));
poly
.
replace
(
1
,
QPointF
(
p
.
x
()
-
waypointSize
/
2.0
f
,
p
.
y
()
-
waypointSize
/
2.0
f
));
// Left point
// Left point
poly
.
replace
(
2
,
QPointF
(
p
.
x
()
+
waypointSize
/
2.0
f
,
p
.
y
()
+
waypointSize
/
2.0
f
));
poly
.
replace
(
2
,
QPointF
(
p
.
x
()
+
waypointSize
/
2.0
f
,
p
.
y
()
+
waypointSize
/
2.0
f
));
// // Select color based on if this is the current waypoint
// // Select color based on if this is the current waypoint
// if (list.at(i)->getCurrent())
// if (list.at(i)->getCurrent())
// {
// {
// color = QGC::colorCyan;//uas->getColor();
// color = QGC::colorCyan;//uas->getColor();
// pen.setWidthF(refLineWidthToPen(0.8f));
// pen.setWidthF(refLineWidthToPen(0.8f));
// }
// }
// else
// else
// {
// {
// color = uas->getColor();
// color = uas->getColor();
// pen.setWidthF(refLineWidthToPen(0.4f));
// pen.setWidthF(refLineWidthToPen(0.4f));
// }
// }
//pen.setColor(color);
//pen.setColor(color);
if
(
pen
)
if
(
pen
)
{
{
pen
->
setWidthF
(
2
);
pen
->
setWidthF
(
2
);
painter
.
setPen
(
*
pen
);
painter
.
setPen
(
*
pen
);
}
}
else
else
{
{
QPen
pen2
(
Qt
::
yellow
);
QPen
pen2
(
Qt
::
yellow
);
pen2
.
setWidth
(
2
);
pen2
.
setWidth
(
2
);
painter
.
setPen
(
pen2
);
painter
.
setPen
(
pen2
);
}
painter
.
setBrush
(
Qt
::
NoBrush
);
painter
.
drawPolygon
(
poly
);
}
}
painter
.
setBrush
(
Qt
::
NoBrush
);
painter
.
drawPolygon
(
poly
);
}
}
src/ui/map3D/GCManipulator.cc
View file @
ab7869ce
...
@@ -30,6 +30,7 @@ This file is part of the QGROUNDCONTROL project
...
@@ -30,6 +30,7 @@ This file is part of the QGROUNDCONTROL project
*/
*/
#include "GCManipulator.h"
#include "GCManipulator.h"
#include <osg/Version>
GCManipulator
::
GCManipulator
()
GCManipulator
::
GCManipulator
()
{
{
...
@@ -254,10 +255,10 @@ GCManipulator::calcMovement(void)
...
@@ -254,10 +255,10 @@ GCManipulator::calcMovement(void)
if
(
buttonMask
==
GUIEventAdapter
::
LEFT_MOUSE_BUTTON
)
if
(
buttonMask
==
GUIEventAdapter
::
LEFT_MOUSE_BUTTON
)
{
{
// rotate camera
// rotate camera
#ifdef __WIN32__
#if ((OPENSCENEGRAPH_MAJOR_VERSION == 2) & (OPENSCENEGRAPH_MINOR_VERSION > 8)) | (OPENSCENEGRAPH_MAJOR_VERSION > 2)
osg
::
Vec3
axis
;
#else
osg
::
Vec3d
axis
;
osg
::
Vec3d
axis
;
#else
osg
::
Vec3
axis
;
#endif
#endif
float
angle
;
float
angle
;
...
...
src/ui/map3D/QGCGoogleEarthView.cc
View file @
ab7869ce
...
@@ -16,9 +16,11 @@
...
@@ -16,9 +16,11 @@
QGCGoogleEarthView
::
QGCGoogleEarthView
(
QWidget
*
parent
)
:
QGCGoogleEarthView
::
QGCGoogleEarthView
(
QWidget
*
parent
)
:
QWidget
(
parent
),
QWidget
(
parent
),
updateTimer
(
new
QTimer
(
this
)),
updateTimer
(
new
QTimer
(
this
)),
refreshRateMs
(
200
),
mav
(
NULL
),
mav
(
NULL
),
followCamera
(
true
),
followCamera
(
true
),
trailEnabled
(
true
),
trailEnabled
(
true
),
webViewInitialized
(
false
),
#if (defined Q_OS_MAC)
#if (defined Q_OS_MAC)
webViewMac
(
new
QWebView
(
this
)),
webViewMac
(
new
QWebView
(
this
)),
#endif
#endif
...
@@ -34,22 +36,14 @@ QGCGoogleEarthView::QGCGoogleEarthView(QWidget *parent) :
...
@@ -34,22 +36,14 @@ QGCGoogleEarthView::QGCGoogleEarthView(QWidget *parent) :
#endif
#endif
ui
->
setupUi
(
this
);
ui
->
setupUi
(
this
);
#if (defined Q_OS_MAC)
#if (defined Q_OS_MAC)
ui
->
webViewLayout
->
addWidget
(
webViewMac
);
ui
->
webViewLayout
->
addWidget
(
webViewMac
);
webViewMac
->
setPage
(
new
QGCWebPage
(
webViewMac
));
webViewMac
->
settings
()
->
setAttribute
(
QWebSettings
::
PluginsEnabled
,
true
);
webViewMac
->
load
(
QUrl
(
"earth.html"
));
#endif
#if (defined Q_OS_WIN) & !(defined __MINGW32__)
webViewWin
->
load
(
QUrl
(
"earth.html"
));
#endif
#endif
#if ((defined Q_OS_MAC) | ((defined Q_OS_WIN) & !(defined __MINGW32__)))
#if ((defined Q_OS_MAC) | ((defined Q_OS_WIN) & !(defined __MINGW32__)))
connect
(
UASManager
::
instance
(),
SIGNAL
(
activeUASSet
(
UASInterface
*
)),
this
,
SLOT
(
setActiveUAS
(
UASInterface
*
)));
connect
(
UASManager
::
instance
(),
SIGNAL
(
activeUASSet
(
UASInterface
*
)),
this
,
SLOT
(
setActiveUAS
(
UASInterface
*
)));
connect
(
updateTimer
,
SIGNAL
(
timeout
()),
this
,
SLOT
(
updateState
()));
connect
(
updateTimer
,
SIGNAL
(
timeout
()),
this
,
SLOT
(
updateState
()));
updateTimer
->
start
(
200
);
updateTimer
->
start
(
refreshRateMs
);
#endif
#endif
// Follow checkbox
// Follow checkbox
...
@@ -94,53 +88,82 @@ void QGCGoogleEarthView::follow(bool follow)
...
@@ -94,53 +88,82 @@ void QGCGoogleEarthView::follow(bool follow)
followCamera
=
follow
;
followCamera
=
follow
;
}
}
void
QGCGoogleEarthView
::
updateStat
e
()
void
QGCGoogleEarthView
::
hid
e
()
{
{
#ifdef Q_OS_MAC
updateTimer
->
stop
();
if
(
webViewMac
->
page
()
->
currentFrame
()
->
evaluateJavaScript
(
"isInitialized();"
).
toBool
())
QWidget
::
hide
();
}
void
QGCGoogleEarthView
::
show
()
{
if
(
!
webViewInitialized
)
{
{
static
bool
initialized
=
false
;
#if (defined Q_OS_MAC)
if
(
!
initialized
)
webViewMac
->
setPage
(
new
QGCWebPage
(
webViewMac
));
{
webViewMac
->
settings
()
->
setAttribute
(
QWebSettings
::
PluginsEnabled
,
true
);
webViewMac
->
page
()
->
currentFrame
()
->
evaluateJavaScript
(
"setGCSHome(22.679833,8.549444, 470);"
);
webViewMac
->
load
(
QUrl
(
"earth.html"
));
initialized
=
true
;
#endif
}
int
uasId
=
0
;
double
lat
=
22.679833
;
double
lon
=
8.549444
;
double
alt
=
470.0
;
float
roll
=
0.0
f
;
#if (defined Q_OS_WIN) & !(defined __MINGW32__)
float
pitch
=
0.0
f
;
webViewWin
->
load
(
QUrl
(
"earth.html"
));
float
yaw
=
0.0
f
;
#endif
webViewInitialized
=
true
;
}
updateTimer
->
start
();
QWidget
::
show
();
}
if
(
mav
)
void
QGCGoogleEarthView
::
updateState
()
{
{
uasId
=
mav
->
getUASID
();
#ifdef Q_OS_MAC
lat
=
mav
->
getLatitude
();
if
(
isVisible
())
lon
=
mav
->
getLongitude
();
{
alt
=
mav
->
getAltitude
();
if
(
webViewMac
->
page
()
->
currentFrame
()
->
evaluateJavaScript
(
"isInitialized();"
).
toBool
())
roll
=
mav
->
getRoll
();
pitch
=
mav
->
getPitch
();
yaw
=
mav
->
getYaw
();
}
webViewMac
->
page
()
->
currentFrame
()
->
evaluateJavaScript
(
QString
(
"setAircraftPositionAttitude(%1, %2, %3, %4, %6, %7, %8);"
)
.
arg
(
uasId
)
.
arg
(
lat
)
.
arg
(
lon
)
.
arg
(
alt
+
500
)
.
arg
(
roll
)
.
arg
(
pitch
)
.
arg
(
yaw
));
if
(
followCamera
)
{
{
webViewMac
->
page
()
->
currentFrame
()
->
evaluateJavaScript
(
QString
(
"updateFollowAircraft()"
));
static
bool
initialized
=
false
;
if
(
!
initialized
)
{
webViewMac
->
page
()
->
currentFrame
()
->
evaluateJavaScript
(
"setGCSHome(22.679833,8.549444, 470);"
);
initialized
=
true
;
}
int
uasId
=
0
;
double
lat
=
22.679833
;
double
lon
=
8.549444
;
double
alt
=
470.0
;
float
roll
=
0.0
f
;
float
pitch
=
0.0
f
;
float
yaw
=
0.0
f
;
if
(
mav
)
{
uasId
=
mav
->
getUASID
();
lat
=
mav
->
getLatitude
();
lon
=
mav
->
getLongitude
();
alt
=
mav
->
getAltitude
();
roll
=
mav
->
getRoll
();
pitch
=
mav
->
getPitch
();
yaw
=
mav
->
getYaw
();
}
webViewMac
->
page
()
->
currentFrame
()
->
evaluateJavaScript
(
QString
(
"setAircraftPositionAttitude(%1, %2, %3, %4, %6, %7, %8);"
)
.
arg
(
uasId
)
.
arg
(
lat
)
.
arg
(
lon
)
.
arg
(
alt
+
500
)
.
arg
(
roll
)
.
arg
(
pitch
)
.
arg
(
yaw
));
if
(
followCamera
)
{
webViewMac
->
page
()
->
currentFrame
()
->
evaluateJavaScript
(
QString
(
"updateFollowAircraft()"
));
}
}
}
}
}
#endif
#endif
}
}
void
QGCGoogleEarthView
::
changeEvent
(
QEvent
*
e
)
void
QGCGoogleEarthView
::
changeEvent
(
QEvent
*
e
)
{
{
QWidget
::
changeEvent
(
e
);
QWidget
::
changeEvent
(
e
);
...
...
src/ui/map3D/QGCGoogleEarthView.h
View file @
ab7869ce
...
@@ -62,13 +62,19 @@ public slots:
...
@@ -62,13 +62,19 @@ public slots:
void
showWaypoints
(
bool
state
);
void
showWaypoints
(
bool
state
);
/** @brief Follow the aircraft during flight */
/** @brief Follow the aircraft during flight */
void
follow
(
bool
follow
);
void
follow
(
bool
follow
);
/** @brief Hide and deactivate */
void
hide
();
/** @brief Show and activate */
void
show
();
protected:
protected:
void
changeEvent
(
QEvent
*
e
);
void
changeEvent
(
QEvent
*
e
);
QTimer
*
updateTimer
;
QTimer
*
updateTimer
;
int
refreshRateMs
;
UASInterface
*
mav
;
UASInterface
*
mav
;
bool
followCamera
;
bool
followCamera
;
bool
trailEnabled
;
bool
trailEnabled
;
bool
webViewInitialized
;
#if (defined Q_OS_WIN) && !(defined __MINGW32__)
#if (defined Q_OS_WIN) && !(defined __MINGW32__)
WebAxWidget
*
webViewWin
;
WebAxWidget
*
webViewWin
;
#endif
#endif
...
...
src/ui/map3D/QMap3D.cc
View file @
ab7869ce
...
@@ -38,8 +38,13 @@ This file is part of the QGROUNDCONTROL project
...
@@ -38,8 +38,13 @@ This file is part of the QGROUNDCONTROL project
QMap3D
::
QMap3D
(
QWidget
*
parent
,
const
char
*
name
,
WindowFlags
f
)
:
QMap3D
::
QMap3D
(
QWidget
*
parent
,
const
char
*
name
,
WindowFlags
f
)
:
QWidget
(
parent
,
f
)
QWidget
(
parent
,
f
)
{
{
Q_UNUSED
(
name
);
setupUi
(
this
);
setupUi
(
this
);
#if ((OPENSCENEGRAPH_MAJOR_VERSION == 2) & (OPENSCENEGRAPH_MINOR_VERSION > 8)) | (OPENSCENEGRAPH_MAJOR_VERSION > 2)
graphicsView
->
setCameraManipulator
(
new
osgEarth
::
Util
::
EarthManipulator
);
graphicsView
->
setCameraManipulator
(
new
osgEarth
::
Util
::
EarthManipulator
);
#else
graphicsView
->
setCameraManipulator
(
new
osgEarthUtil
::
EarthManipulator
);
#endif
graphicsView
->
setSceneData
(
new
osg
::
Group
);
graphicsView
->
setSceneData
(
new
osg
::
Group
);
graphicsView
->
updateCamera
();
graphicsView
->
updateCamera
();
show
();
show
();
...
...
src/ui/uas/UASControlWidget.cc
View file @
ab7869ce
...
@@ -50,7 +50,7 @@ This file is part of the PIXHAWK project
...
@@ -50,7 +50,7 @@ This file is part of the PIXHAWK project
#define CONTROL_MODE_TEST2 "MODE TEST2"
#define CONTROL_MODE_TEST2 "MODE TEST2"
#define CONTROL_MODE_TEST3 "MODE TEST3"
#define CONTROL_MODE_TEST3 "MODE TEST3"
#define CONTROL_MODE_READY "MODE TEST3"
#define CONTROL_MODE_READY "MODE TEST3"
#define CONTROL_MODE_RC_TRAINING "
MODE RC TRAINING
"
#define CONTROL_MODE_RC_TRAINING "
RC SIMULATION
"
#define CONTROL_MODE_LOCKED_INDEX 1
#define CONTROL_MODE_LOCKED_INDEX 1
#define CONTROL_MODE_MANUAL_INDEX 2
#define CONTROL_MODE_MANUAL_INDEX 2
...
...
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