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
0e1d01f5
Commit
0e1d01f5
authored
Jan 25, 2018
by
Gus Grubba
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Primordial soup of a rule selector
parent
888788b7
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
220 additions
and
37 deletions
+220
-37
AirMapManager.cc
src/Airmap/AirMapManager.cc
+1
-1
AirMapRulesetsManager.cc
src/Airmap/AirMapRulesetsManager.cc
+49
-3
AirMapRulesetsManager.h
src/Airmap/AirMapRulesetsManager.h
+20
-11
AirMapWeatherInformation.cc
src/Airmap/AirMapWeatherInformation.cc
+1
-1
AirspaceControl.qml
src/Airmap/AirspaceControl.qml
+113
-1
AirspaceController.cc
src/AirspaceManagement/AirspaceController.cc
+2
-2
AirspaceController.h
src/AirspaceManagement/AirspaceController.h
+2
-2
AirspaceManager.cc
src/AirspaceManagement/AirspaceManager.cc
+0
-2
AirspaceManager.h
src/AirspaceManagement/AirspaceManager.h
+1
-1
AirspaceRulesetsProvider.h
src/AirspaceManagement/AirspaceRulesetsProvider.h
+31
-13
No files found.
src/Airmap/AirMapManager.cc
View file @
0e1d01f5
...
...
@@ -36,7 +36,7 @@ AirMapManager::AirMapManager(QGCApplication* app, QGCToolbox* toolbox)
_logger
=
std
::
make_shared
<
qt
::
Logger
>
();
qt
::
register_types
();
// TODO: still needed?s
_logger
->
logging_category
().
setEnabled
(
QtDebugMsg
,
true
);
_logger
->
logging_category
().
setEnabled
(
QtInfoMsg
,
true
);
_logger
->
logging_category
().
setEnabled
(
QtInfoMsg
,
true
);
_logger
->
logging_category
().
setEnabled
(
QtWarningMsg
,
true
);
_dispatchingLogger
=
std
::
make_shared
<
qt
::
DispatchingLogger
>
(
_logger
);
connect
(
&
_shared
,
&
AirMapSharedState
::
error
,
this
,
&
AirMapManager
::
_error
);
...
...
src/Airmap/AirMapRulesetsManager.cc
View file @
0e1d01f5
...
...
@@ -37,6 +37,9 @@ void AirMapRulesetsManager::setROI(const QGeoCoordinate& center)
return
;
}
qCDebug
(
AirMapManagerLog
)
<<
"Setting ROI for Rulesets"
;
_defaultIndex
=
0
;
_currentIndex
=
0
;
_valid
=
false
;
_rules
.
clearAndDeleteContents
();
_state
=
State
::
RetrieveItems
;
RuleSets
::
Search
::
Parameters
params
;
...
...
@@ -48,14 +51,33 @@ void AirMapRulesetsManager::setROI(const QGeoCoordinate& center)
if
(
_state
!=
State
::
RetrieveItems
)
return
;
if
(
result
)
{
const
std
::
vector
<
RuleSet
>
rules
=
result
.
value
();
qCDebug
(
AirMapManagerLog
)
<<
"Successful rulesets search. Items:"
<<
rules
.
size
();
qCDebug
(
AirMapManagerLog
)
<<
"Successful rulesets search. Items:"
<<
rules
.
size
();
for
(
const
auto
&
ruleset
:
rules
)
{
AirMapRule
*
pRule
=
new
AirMapRule
(
this
);
pRule
->
_id
=
QString
::
fromStdString
(
ruleset
.
id
);
pRule
->
_name
=
QString
::
fromStdString
(
ruleset
.
short_name
);
pRule
->
_description
=
QString
::
fromStdString
(
ruleset
.
description
);
pRule
->
_isDefault
=
ruleset
.
is_default
;
if
(
pRule
->
_isDefault
)
{
_defaultIndex
=
_rules
.
count
();
//-- TODO: This should be persistent and if the new incoming set has this
// rule, it should point to it.
_currentIndex
=
_defaultIndex
;
}
switch
(
ruleset
.
selection_type
)
{
case
RuleSet
:
:
SelectionType
::
pickone
:
pRule
->
_selectionType
=
AirspaceRule
::
pickone
;
break
;
case
RuleSet
:
:
SelectionType
::
required
:
pRule
->
_selectionType
=
AirspaceRule
::
required
;
break
;
default:
case
RuleSet
:
:
SelectionType
::
optional
:
pRule
->
_selectionType
=
AirspaceRule
::
optional
;
break
;
}
_rules
.
append
(
pRule
);
qCDebug
(
AirMapManagerLog
)
<<
"Adding rule"
<<
pRule
->
name
();
/*
qDebug() << "------------------------------------------";
qDebug() << "Jurisdiction:" << ruleset.jurisdiction.name.data() << (int)ruleset.jurisdiction.region;
...
...
@@ -83,12 +105,36 @@ void AirMapRulesetsManager::setROI(const QGeoCoordinate& center)
}
*/
}
_valid
=
true
;
}
else
{
QString
description
=
QString
::
fromStdString
(
result
.
error
().
description
()
?
result
.
error
().
description
().
get
()
:
""
);
emit
error
(
"Failed to retrieve RuleSets"
,
QString
::
fromStdString
(
result
.
error
().
message
()),
description
);
emit
error
(
"Failed to retrieve RuleSets"
,
QString
::
fromStdString
(
result
.
error
().
message
()),
description
);
}
_state
=
State
::
Idle
;
emit
rulesChanged
();
});
}
//-----------------------------------------------------------------------------
QString
AirMapRulesetsManager
::
defaultRule
()
{
if
(
_defaultIndex
<
_rules
.
count
())
{
AirMapRule
*
rule
=
qobject_cast
<
AirMapRule
*>
(
_rules
.
get
(
_defaultIndex
));
if
(
rule
)
{
return
rule
->
name
();
}
}
return
QString
();
}
//-----------------------------------------------------------------------------
void
AirMapRulesetsManager
::
setCurrentIndex
(
int
index
)
{
_currentIndex
=
index
;
//-- TODO: Do whatever it is you do to select a rule
emit
currentIndexChanged
();
}
src/Airmap/AirMapRulesetsManager.h
View file @
0e1d01f5
...
...
@@ -29,15 +29,17 @@ class AirMapRule : public AirspaceRule
friend
class
AirMapRulesetsManager
;
public:
AirMapRule
(
QObject
*
parent
=
NULL
);
QString
id
()
override
{
return
_id
;
}
QString
description
()
override
{
return
_description
;
}
bool
isDefault
()
override
{
return
_isDefault
;
}
QString
name
()
override
{
return
_name
;
}
QString
id
()
override
{
return
_id
;
}
QString
description
()
override
{
return
_description
;
}
bool
isDefault
()
override
{
return
_isDefault
;
}
QString
name
()
override
{
return
_name
;
}
SelectionType
selectionType
()
override
{
return
_selectionType
;
}
private:
QString
_id
;
QString
_description
;
bool
_isDefault
;
QString
_name
;
QString
_id
;
QString
_description
;
bool
_isDefault
;
QString
_name
;
SelectionType
_selectionType
;
};
//-----------------------------------------------------------------------------
...
...
@@ -47,9 +49,14 @@ class AirMapRulesetsManager : public AirspaceRulesetsProvider, public LifetimeCh
public:
AirMapRulesetsManager
(
AirMapSharedState
&
shared
);
bool
valid
()
override
{
return
_valid
;
}
QmlObjectListModel
*
rules
()
override
{
return
&
_rules
;
}
void
setROI
(
const
QGeoCoordinate
&
center
)
override
;
bool
valid
()
override
{
return
_valid
;
}
QmlObjectListModel
*
rules
()
override
{
return
&
_rules
;
}
QString
defaultRule
()
override
;
int
defaultIndex
()
override
{
return
_defaultIndex
;
}
int
currentIndex
()
override
{
return
_currentIndex
;
}
void
setCurrentIndex
(
int
index
)
override
;
void
setROI
(
const
QGeoCoordinate
&
center
)
override
;
signals:
void
error
(
const
QString
&
what
,
const
QString
&
airmapdMessage
,
const
QString
&
airmapdDetails
);
...
...
@@ -59,6 +66,8 @@ private:
Idle
,
RetrieveItems
,
};
int
_defaultIndex
;
int
_currentIndex
;
bool
_valid
;
State
_state
=
State
::
Idle
;
AirMapSharedState
&
_shared
;
...
...
src/Airmap/AirMapWeatherInformation.cc
View file @
0e1d01f5
...
...
@@ -58,7 +58,7 @@ AirMapWeatherInformation::_requestWeatherUpdate(const QGeoCoordinate& coordinate
const
Status
::
Weather
&
weather
=
result
.
value
().
weather
;
_valid
=
true
;
_icon
=
QStringLiteral
(
"qrc:/airmapweather/"
)
+
QString
::
fromStdString
(
weather
.
icon
)
+
QStringLiteral
(
".svg"
);
qCDebug
(
AirMapManagerLog
)
<<
"Weather Info: "
<<
_valid
<<
_icon
;
qCDebug
(
AirMapManagerLog
)
<<
"Weather Info: "
<<
_valid
<<
"Icon:"
<<
QString
::
fromStdString
(
weather
.
icon
)
<<
"Condition:"
<<
QString
::
fromStdString
(
weather
.
condition
)
<<
"Temp:"
<<
weather
.
temperature
;
}
else
{
_valid
=
false
;
qCDebug
(
AirMapManagerLog
)
<<
"Request Weather Failed"
;
...
...
src/Airmap/AirspaceControl.qml
View file @
0e1d01f5
...
...
@@ -4,6 +4,7 @@ import QtQuick.Controls.Styles 1.4
import
QtQuick
.
Dialogs
1.2
import
QtQuick
.
Layouts
1.2
import
QtQml
2.2
import
QtGraphicalEffects
1.0
import
QGroundControl
1.0
import
QGroundControl
.
ScreenTools
1.0
...
...
@@ -22,6 +23,7 @@ Item {
property
bool
showColapse
:
true
property
var
_activeVehicle
:
QGroundControl
.
multiVehicleManager
.
activeVehicle
property
bool
validRules
:
_activeVehicle
?
_activeVehicle
.
airspaceController
.
rulesets
.
valid
:
false
readonly
property
real
_radius
:
ScreenTools
.
defaultFontPixelWidth
*
0.5
readonly
property
color
_colorOrange
:
"
#d75e0d
"
...
...
@@ -232,6 +234,13 @@ Item {
source
:
"
qrc:/airmap/pencil.svg
"
color
:
_colorWhite
anchors.centerIn
:
parent
MouseArea
{
anchors.fill
:
parent
onClicked
:
{
rootLoader
.
sourceComponent
=
ruleSelector
mainWindow
.
disableToolbar
()
}
}
}
}
Rectangle
{
...
...
@@ -242,9 +251,10 @@ Item {
Layout.fillWidth
:
true
QGCLabel
{
id
:
regLabel
text
:
qsTr
(
"
FAA-107, Airmap
"
)
text
:
validRules
?
_activeVehicle
.
airspaceController
.
rulesets
.
rules
.
get
(
currentIndex
).
name
:
qsTr
(
"
None
"
)
color
:
_colorWhite
anchors.centerIn
:
parent
property
int
currentIndex
:
validRules
?
_activeVehicle
.
airspaceController
.
rulesets
.
currentIndex
:
0
}
}
}
...
...
@@ -281,4 +291,106 @@ Item {
}
}
}
//---------------------------------------------------------------
//-- Rule Selector
Component
{
id
:
ruleSelector
Rectangle
{
width
:
mainWindow
.
width
height
:
mainWindow
.
height
color
:
Qt
.
rgba
(
0
,
0
,
0
,
0.1
)
MouseArea
{
anchors.fill
:
parent
onClicked
:
{
mainWindow
.
enableToolbar
()
rootLoader
.
sourceComponent
=
null
}
}
Rectangle
{
id
:
ruleSelectorShadow
anchors.fill
:
ruleSelectorRect
radius
:
ruleSelectorRect
.
radius
color
:
qgcPal
.
window
visible
:
false
}
DropShadow
{
anchors.fill
:
ruleSelectorShadow
visible
:
ruleSelectorRect
.
visible
horizontalOffset
:
4
verticalOffset
:
4
radius
:
32.0
samples
:
65
color
:
Qt
.
rgba
(
0
,
0
,
0
,
0.75
)
source
:
ruleSelectorShadow
}
Rectangle
{
id
:
ruleSelectorRect
color
:
qgcPal
.
window
width
:
rulesCol
.
width
+
ScreenTools
.
defaultFontPixelWidth
height
:
rulesCol
.
height
+
ScreenTools
.
defaultFontPixelHeight
radius
:
ScreenTools
.
defaultFontPixelWidth
anchors.centerIn
:
parent
Column
{
id
:
rulesCol
spacing
:
ScreenTools
.
defaultFontPixelHeight
*
0.5
anchors.centerIn
:
parent
//-- Regulations
Rectangle
{
color
:
qgcPal
.
windowShade
height
:
rulesTitle
.
height
+
ScreenTools
.
defaultFontPixelHeight
width
:
parent
.
width
*
0.95
radius
:
_radius
anchors.horizontalCenter
:
parent
.
horizontalCenter
QGCLabel
{
id
:
rulesTitle
text
:
qsTr
(
"
Airspace Regulation Options
"
)
anchors.centerIn
:
parent
}
}
Flickable
{
clip
:
true
width
:
ScreenTools
.
defaultFontPixelWidth
*
30
height
:
ScreenTools
.
defaultFontPixelHeight
*
14
contentHeight
:
rulesetCol
.
height
flickableDirection
:
Flickable
.
VerticalFlick
Column
{
id
:
rulesetCol
spacing
:
ScreenTools
.
defaultFontPixelHeight
*
0.5
anchors.right
:
parent
.
right
anchors.left
:
parent
.
left
QGCLabel
{
text
:
qsTr
(
"
PICK ONE REGULATION
"
)
font.pointSize
:
ScreenTools
.
smallFontPointSize
anchors.horizontalCenter
:
parent
.
horizontalCenter
}
Repeater
{
model
:
validRules
?
_activeVehicle
.
airspaceController
.
rulesets
.
rules
:
[]
delegate
:
Row
{
spacing
:
ScreenTools
.
defaultFontPixelWidth
anchors.right
:
parent
.
right
anchors.rightMargin
:
ScreenTools
.
defaultFontPixelWidth
anchors.left
:
parent
.
left
anchors.leftMargin
:
ScreenTools
.
defaultFontPixelWidth
Rectangle
{
width
:
ScreenTools
.
defaultFontPixelWidth
*
0.75
height
:
ScreenTools
.
defaultFontPixelHeight
color
:
qgcPal
.
colorGreen
anchors.verticalCenter
:
parent
.
verticalCenter
}
QGCLabel
{
text
:
object
.
name
font.pointSize
:
ScreenTools
.
smallFontPointSize
anchors.verticalCenter
:
parent
.
verticalCenter
}
}
}
}
}
}
}
Component.onCompleted
:
{
mainWindow
.
disableToolbar
()
}
}
}
}
src/AirspaceManagement/AirspaceController.cc
View file @
0e1d01f5
...
...
@@ -59,7 +59,7 @@ AirspaceController::advisories()
}
AirspaceRulesetsProvider
*
AirspaceController
::
rules
()
AirspaceController
::
rules
ets
()
{
return
_manager
->
rules
();
return
_manager
->
rules
ets
();
}
src/AirspaceManagement/AirspaceController.h
View file @
0e1d01f5
...
...
@@ -30,7 +30,7 @@ public:
Q_PROPERTY
(
QString
providerName
READ
providerName
CONSTANT
)
Q_PROPERTY
(
AirspaceWeatherInfoProvider
*
weatherInfo
READ
weatherInfo
CONSTANT
)
Q_PROPERTY
(
AirspaceAdvisoryProvider
*
advisories
READ
advisories
CONSTANT
)
Q_PROPERTY
(
AirspaceRulesetsProvider
*
rules
READ
rules
CONSTANT
)
Q_PROPERTY
(
AirspaceRulesetsProvider
*
rules
ets
READ
rulesets
CONSTANT
)
Q_INVOKABLE
void
setROI
(
QGeoCoordinate
center
,
double
radius
);
...
...
@@ -39,7 +39,7 @@ public:
QString
providerName
();
AirspaceWeatherInfoProvider
*
weatherInfo
();
AirspaceAdvisoryProvider
*
advisories
();
AirspaceRulesetsProvider
*
rules
();
AirspaceRulesetsProvider
*
rules
ets
();
private:
AirspaceManager
*
_manager
;
...
...
src/AirspaceManagement/AirspaceManager.cc
View file @
0e1d01f5
...
...
@@ -76,14 +76,12 @@ void AirspaceManager::setROI(const QGeoCoordinate& center, double radiusMeters)
void
AirspaceManager
::
_updateToROI
()
{
/*
if
(
_restrictionsProvider
)
{
_restrictionsProvider
->
setROI
(
_roiCenter
,
_roiRadius
);
}
if
(
_rulesetsProvider
)
{
_rulesetsProvider
->
setROI
(
_roiCenter
);
}
*/
if
(
_weatherProvider
)
{
_weatherProvider
->
setROI
(
_roiCenter
);
}
...
...
src/AirspaceManagement/AirspaceManager.h
View file @
0e1d01f5
...
...
@@ -90,7 +90,7 @@ public:
QmlObjectListModel
*
circularRestrictions
()
{
return
&
_circleRestrictions
;
}
AirspaceWeatherInfoProvider
*
weatherInfo
()
{
return
_weatherProvider
;
}
AirspaceAdvisoryProvider
*
advisories
()
{
return
_advisories
;
}
AirspaceRulesetsProvider
*
rules
()
{
return
_rulesetsProvider
;
}
AirspaceRulesetsProvider
*
rules
ets
()
{
return
_rulesetsProvider
;
}
void
setToolbox
(
QGCToolbox
*
toolbox
)
override
;
...
...
src/AirspaceManagement/AirspaceRulesetsProvider.h
View file @
0e1d01f5
...
...
@@ -25,17 +25,28 @@ class AirspaceRule : public QObject
{
Q_OBJECT
public:
enum
SelectionType
{
pickone
,
///< One rule from the overall set needs to be picked.
required
,
///< Satisfying the RuleSet is required.
optional
///< Satisfying the RuleSet is not required.
};
Q_ENUM
(
SelectionType
)
AirspaceRule
(
QObject
*
parent
=
NULL
);
Q_PROPERTY
(
QString
id
READ
id
CONSTANT
)
Q_PROPERTY
(
QString
name
READ
name
CONSTANT
)
Q_PROPERTY
(
QString
description
READ
description
CONSTANT
)
Q_PROPERTY
(
bool
isDefault
READ
isDefault
CONSTANT
)
Q_PROPERTY
(
QString
id
READ
id
CONSTANT
)
Q_PROPERTY
(
QString
name
READ
name
CONSTANT
)
Q_PROPERTY
(
QString
description
READ
description
CONSTANT
)
Q_PROPERTY
(
bool
isDefault
READ
isDefault
CONSTANT
)
Q_PROPERTY
(
SelectionType
selectionType
READ
selectionType
CONSTANT
)
virtual
QString
id
()
=
0
;
virtual
QString
description
()
=
0
;
virtual
bool
isDefault
()
=
0
;
virtual
QString
name
()
=
0
;
virtual
QString
id
()
=
0
;
virtual
QString
description
()
=
0
;
virtual
bool
isDefault
()
=
0
;
virtual
QString
name
()
=
0
;
virtual
SelectionType
selectionType
()
=
0
;
};
//-----------------------------------------------------------------------------
...
...
@@ -45,12 +56,18 @@ public:
AirspaceRulesetsProvider
(
QObject
*
parent
=
NULL
);
~
AirspaceRulesetsProvider
()
=
default
;
Q_PROPERTY
(
bool
valid
READ
valid
NOTIFY
rulesChanged
)
Q_PROPERTY
(
Q
mlObjectListModel
*
rules
READ
rules
NOTIFY
rulesChanged
)
virtual
bool
valid
()
=
0
;
///< Current ruleset is valid
virtual
QmlObjectListModel
*
rules
()
=
0
;
///< List of AirspaceRule
Q_PROPERTY
(
bool
valid
READ
valid
NOTIFY
rulesChanged
)
Q_PROPERTY
(
Q
String
defaultRule
READ
defaultRule
NOTIFY
rulesChanged
)
Q_PROPERTY
(
int
defaultIndex
READ
defaultIndex
NOTIFY
rulesChanged
)
Q_PROPERTY
(
int
currentIndex
READ
currentIndex
WRITE
setCurrentIndex
NOTIFY
currentIndexChanged
)
Q_PROPERTY
(
QmlObjectListModel
*
rules
READ
rules
NOTIFY
rulesChanged
)
virtual
bool
valid
()
=
0
;
///< Current ruleset is valid
virtual
QmlObjectListModel
*
rules
()
=
0
;
///< List of AirspaceRule
virtual
QString
defaultRule
()
=
0
;
///< AirspaceRule::name
virtual
int
defaultIndex
()
=
0
;
///< Index into rules (QmlObjectListModel)
virtual
int
currentIndex
()
=
0
;
///< User selected index into rules (QmlObjectListModel)
virtual
void
setCurrentIndex
(
int
index
)
=
0
;
///< Select a rule
/**
* Set region of interest that should be queried. When finished, the rulesChanged() signal will be emmited.
* @param center Center coordinate for ROI
...
...
@@ -59,5 +76,6 @@ public:
signals:
void
rulesChanged
();
void
currentIndexChanged
();
};
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