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
5e7603d5
Commit
5e7603d5
authored
Feb 15, 2018
by
Gus Grubba
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Expanding rulesets, rules and features implementation
parent
da5d7f9b
Changes
10
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
193 additions
and
69 deletions
+193
-69
AirMapFlightManager.cc
src/Airmap/AirMapFlightManager.cc
+1
-1
AirMapRulesetsManager.cc
src/Airmap/AirMapRulesetsManager.cc
+53
-30
AirMapRulesetsManager.h
src/Airmap/AirMapRulesetsManager.h
+29
-11
AirspaceControl.qml
src/Airmap/AirspaceControl.qml
+7
-7
AirspaceController.cc
src/AirspaceManagement/AirspaceController.cc
+2
-2
AirspaceController.h
src/AirspaceManagement/AirspaceController.h
+2
-2
AirspaceManager.cc
src/AirspaceManagement/AirspaceManager.cc
+8
-5
AirspaceManager.h
src/AirspaceManagement/AirspaceManager.h
+2
-2
AirspaceRulesetsProvider.cc
src/AirspaceManagement/AirspaceRulesetsProvider.cc
+6
-1
AirspaceRulesetsProvider.h
src/AirspaceManagement/AirspaceRulesetsProvider.h
+83
-8
No files found.
src/Airmap/AirMapFlightManager.cc
View file @
5e7603d5
...
@@ -188,7 +188,7 @@ void AirMapFlightManager::_uploadFlight()
...
@@ -188,7 +188,7 @@ void AirMapFlightManager::_uploadFlight()
params
.
end_time
=
Clock
::
universal_time
()
+
Hours
{
2
};
// TODO: user-configurable?
params
.
end_time
=
Clock
::
universal_time
()
+
Hours
{
2
};
// TODO: user-configurable?
//-- Rules
//-- Rules
AirMapRulesetsManager
*
pRulesMgr
=
dynamic_cast
<
AirMapRulesetsManager
*>
(
qgcApp
()
->
toolbox
()
->
airspaceManager
()
->
rule
s
ets
());
AirMapRulesetsManager
*
pRulesMgr
=
dynamic_cast
<
AirMapRulesetsManager
*>
(
qgcApp
()
->
toolbox
()
->
airspaceManager
()
->
rule
S
ets
());
if
(
pRulesMgr
)
{
if
(
pRulesMgr
)
{
foreach
(
QString
ruleset
,
pRulesMgr
->
rulesetsIDs
())
{
foreach
(
QString
ruleset
,
pRulesMgr
->
rulesetsIDs
())
{
params
.
rulesets
.
push_back
(
ruleset
.
toStdString
());
params
.
rulesets
.
push_back
(
ruleset
.
toStdString
());
...
...
src/Airmap/AirMapRulesetsManager.cc
View file @
5e7603d5
...
@@ -15,9 +15,32 @@ using namespace airmap;
...
@@ -15,9 +15,32 @@ using namespace airmap;
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
AirMapRule
::
AirMapRule
(
QObject
*
parent
)
AirMapRule
::
AirMapRule
(
QObject
*
parent
)
:
AirspaceRule
(
parent
)
:
AirspaceRule
(
parent
)
{
}
//-----------------------------------------------------------------------------
AirspaceRule
::
Status
AirMapRule
::
status
()
{
switch
(
_rule
.
status
)
{
case
RuleSet
:
:
Rule
::
Status
::
conflicting
:
return
AirspaceRule
::
Conflicting
;
case
RuleSet
:
:
Rule
::
Status
::
not_conflicting
:
return
AirspaceRule
::
NotConflicting
;
case
RuleSet
:
:
Rule
::
Status
::
missing_info
:
return
AirspaceRule
::
MissingInfo
;
case
RuleSet
:
:
Rule
::
Status
::
unknown
:
default:
return
AirspaceRule
::
Unknown
;
}
}
//-----------------------------------------------------------------------------
AirMapRuleSet
::
AirMapRuleSet
(
QObject
*
parent
)
:
AirspaceRuleSet
(
parent
)
,
_isDefault
(
false
)
,
_isDefault
(
false
)
,
_selected
(
false
)
,
_selected
(
false
)
,
_selectionType
(
AirspaceRule
::
Optional
)
,
_selectionType
(
AirspaceRule
Set
::
Optional
)
{
{
}
}
...
@@ -40,7 +63,7 @@ void AirMapRulesetsManager::setROI(const QGeoCoordinate& center)
...
@@ -40,7 +63,7 @@ void AirMapRulesetsManager::setROI(const QGeoCoordinate& center)
}
}
qCDebug
(
AirMapManagerLog
)
<<
"Setting ROI for Rulesets"
;
qCDebug
(
AirMapManagerLog
)
<<
"Setting ROI for Rulesets"
;
_valid
=
false
;
_valid
=
false
;
_rules
.
clearAndDeleteContents
();
_rule
Set
s
.
clearAndDeleteContents
();
_state
=
State
::
RetrieveItems
;
_state
=
State
::
RetrieveItems
;
RuleSets
::
Search
::
Parameters
params
;
RuleSets
::
Search
::
Parameters
params
;
params
.
geometry
=
Geometry
::
point
(
center
.
latitude
(),
center
.
longitude
());
params
.
geometry
=
Geometry
::
point
(
center
.
latitude
(),
center
.
longitude
());
...
@@ -50,36 +73,36 @@ void AirMapRulesetsManager::setROI(const QGeoCoordinate& center)
...
@@ -50,36 +73,36 @@ void AirMapRulesetsManager::setROI(const QGeoCoordinate& center)
if
(
!
isAlive
.
lock
())
return
;
if
(
!
isAlive
.
lock
())
return
;
if
(
_state
!=
State
::
RetrieveItems
)
return
;
if
(
_state
!=
State
::
RetrieveItems
)
return
;
if
(
result
)
{
if
(
result
)
{
const
std
::
vector
<
RuleSet
>
rules
=
result
.
value
();
const
std
::
vector
<
RuleSet
>
rules
ets
=
result
.
value
();
qCDebug
(
AirMapManagerLog
)
<<
"Successful rulesets search. Items:"
<<
rules
.
size
();
qCDebug
(
AirMapManagerLog
)
<<
"Successful rulesets search. Items:"
<<
rules
ets
.
size
();
for
(
const
auto
&
ruleset
:
rules
)
{
for
(
const
auto
&
ruleset
:
rules
ets
)
{
AirMapRule
*
pRule
=
new
AirMapRule
(
this
);
AirMapRule
Set
*
pRuleSet
=
new
AirMapRuleSet
(
this
);
connect
(
pRule
,
&
AirspaceRule
::
selectedChanged
,
this
,
&
AirMapRulesetsManager
::
_selectedChanged
);
connect
(
pRule
Set
,
&
AirspaceRuleSet
::
selectedChanged
,
this
,
&
AirMapRulesetsManager
::
_selectedChanged
);
pRule
->
_id
=
QString
::
fromStdString
(
ruleset
.
id
);
pRule
Set
->
_id
=
QString
::
fromStdString
(
ruleset
.
id
);
pRule
->
_name
=
QString
::
fromStdString
(
ruleset
.
name
);
pRule
Set
->
_name
=
QString
::
fromStdString
(
ruleset
.
name
);
pRule
->
_shortName
=
QString
::
fromStdString
(
ruleset
.
short_name
);
pRule
Set
->
_shortName
=
QString
::
fromStdString
(
ruleset
.
short_name
);
pRule
->
_description
=
QString
::
fromStdString
(
ruleset
.
description
);
pRule
Set
->
_description
=
QString
::
fromStdString
(
ruleset
.
description
);
pRule
->
_isDefault
=
ruleset
.
is_default
;
pRule
Set
->
_isDefault
=
ruleset
.
is_default
;
//-- TODO: This should be persistent and if the new incoming set has the
//-- TODO: This should be persistent and if the new incoming set has the
// same, previosuly selected rules, it should "remember".
// same, previosuly selected rules
ets
, it should "remember".
if
(
pRule
->
_isDefault
)
{
if
(
pRule
Set
->
_isDefault
)
{
pRule
->
_selected
=
true
;
pRule
Set
->
_selected
=
true
;
}
}
switch
(
ruleset
.
selection_type
)
{
switch
(
ruleset
.
selection_type
)
{
case
RuleSet
:
:
SelectionType
::
pickone
:
case
RuleSet
:
:
SelectionType
::
pickone
:
pRule
->
_selectionType
=
AirspaceRule
::
Pickone
;
pRule
Set
->
_selectionType
=
AirspaceRuleSet
::
Pickone
;
break
;
break
;
case
RuleSet
:
:
SelectionType
::
required
:
case
RuleSet
:
:
SelectionType
::
required
:
pRule
->
_selectionType
=
AirspaceRule
::
Required
;
pRule
Set
->
_selectionType
=
AirspaceRuleSet
::
Required
;
pRule
->
_selected
=
true
;
pRule
Set
->
_selected
=
true
;
break
;
break
;
default:
default:
case
RuleSet
:
:
SelectionType
::
optional
:
case
RuleSet
:
:
SelectionType
::
optional
:
pRule
->
_selectionType
=
AirspaceRule
::
Optional
;
pRule
Set
->
_selectionType
=
AirspaceRuleSet
::
Optional
;
break
;
break
;
}
}
_rule
s
.
append
(
pRule
);
_rule
Sets
.
append
(
pRuleSet
);
qCDebug
(
AirMapManagerLog
)
<<
"Adding rule
"
<<
pRule
->
name
();
qCDebug
(
AirMapManagerLog
)
<<
"Adding rule
set"
<<
pRuleSet
->
name
();
/*
/*
qDebug() << "------------------------------------------";
qDebug() << "------------------------------------------";
qDebug() << "Jurisdiction:" << ruleset.jurisdiction.name.data() << (int)ruleset.jurisdiction.region;
qDebug() << "Jurisdiction:" << ruleset.jurisdiction.name.data() << (int)ruleset.jurisdiction.region;
...
@@ -92,7 +115,7 @@ void AirMapRulesetsManager::setROI(const QGeoCoordinate& center)
...
@@ -92,7 +115,7 @@ void AirMapRulesetsManager::setROI(const QGeoCoordinate& center)
qDebug() << airspaceType.data();
qDebug() << airspaceType.data();
}
}
qDebug() << "Rules:";
qDebug() << "Rules:";
for (const auto& rule : ruleset.rules) {
for (const auto& rule : ruleset.rules
ets
) {
qDebug() << " --------------------------------------";
qDebug() << " --------------------------------------";
qDebug() << " " << rule.short_text.data();
qDebug() << " " << rule.short_text.data();
qDebug() << " " << rule.description.data();
qDebug() << " " << rule.description.data();
...
@@ -113,18 +136,18 @@ void AirMapRulesetsManager::setROI(const QGeoCoordinate& center)
...
@@ -113,18 +136,18 @@ void AirMapRulesetsManager::setROI(const QGeoCoordinate& center)
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
;
_state
=
State
::
Idle
;
emit
rulesChanged
();
emit
rule
Set
sChanged
();
emit
selectedRulesChanged
();
emit
selectedRule
Set
sChanged
();
});
});
}
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
QString
QString
AirMapRulesetsManager
::
selectedRules
()
AirMapRulesetsManager
::
selectedRule
Set
s
()
{
{
QString
selection
;
QString
selection
;
for
(
int
i
=
0
;
i
<
_rules
.
count
();
i
++
)
{
for
(
int
i
=
0
;
i
<
_rule
Set
s
.
count
();
i
++
)
{
AirMapRule
*
rule
=
qobject_cast
<
AirMapRule
*>
(
_rule
s
.
get
(
i
));
AirMapRule
Set
*
rule
=
qobject_cast
<
AirMapRuleSet
*>
(
_ruleSet
s
.
get
(
i
));
if
(
rule
&&
rule
->
selected
())
{
if
(
rule
&&
rule
->
selected
())
{
selection
+=
rule
->
shortName
()
+
", "
;
selection
+=
rule
->
shortName
()
+
", "
;
}
}
...
@@ -140,7 +163,7 @@ AirMapRulesetsManager::selectedRules()
...
@@ -140,7 +163,7 @@ AirMapRulesetsManager::selectedRules()
void
void
AirMapRulesetsManager
::
_selectedChanged
()
AirMapRulesetsManager
::
_selectedChanged
()
{
{
emit
selectedRulesChanged
();
emit
selectedRule
Set
sChanged
();
//-- TODO: Do whatever it is you do to select a rule
//-- TODO: Do whatever it is you do to select a rule
}
}
...
@@ -149,8 +172,8 @@ QStringList
...
@@ -149,8 +172,8 @@ QStringList
AirMapRulesetsManager
::
rulesetsIDs
()
AirMapRulesetsManager
::
rulesetsIDs
()
{
{
QStringList
list
;
QStringList
list
;
for
(
int
i
=
0
;
i
<
_rules
.
count
();
i
++
)
{
for
(
int
i
=
0
;
i
<
_rule
Set
s
.
count
();
i
++
)
{
AirMapRule
*
rule
=
qobject_cast
<
AirMapRule
*>
(
_rule
s
.
get
(
i
));
AirMapRule
Set
*
rule
=
qobject_cast
<
AirMapRuleSet
*>
(
_ruleSet
s
.
get
(
i
));
if
(
rule
&&
rule
->
selected
())
{
if
(
rule
&&
rule
->
selected
())
{
list
<<
rule
->
id
();
list
<<
rule
->
id
();
}
}
...
...
src/Airmap/AirMapRulesetsManager.h
View file @
5e7603d5
...
@@ -25,11 +25,27 @@
...
@@ -25,11 +25,27 @@
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
class
AirMapRule
:
public
AirspaceRule
class
AirMapRule
:
public
AirspaceRule
{
Q_OBJECT
public:
AirMapRule
(
QObject
*
parent
=
NULL
);
Status
status
()
override
;
QString
shortText
()
override
{
return
QString
::
fromStdString
(
_rule
.
short_text
);
}
QString
description
()
override
{
return
QString
::
fromStdString
(
_rule
.
description
);
}
private:
airmap
::
RuleSet
::
Rule
_rule
;
};
//-----------------------------------------------------------------------------
class
AirMapRuleSet
:
public
AirspaceRuleSet
{
{
Q_OBJECT
Q_OBJECT
friend
class
AirMapRulesetsManager
;
friend
class
AirMapRulesetsManager
;
public:
public:
AirMapRule
(
QObject
*
parent
=
NULL
);
AirMapRule
Set
(
QObject
*
parent
=
NULL
);
QString
id
()
override
{
return
_id
;
}
QString
id
()
override
{
return
_id
;
}
QString
description
()
override
{
return
_description
;
}
QString
description
()
override
{
return
_description
;
}
bool
isDefault
()
override
{
return
_isDefault
;
}
bool
isDefault
()
override
{
return
_isDefault
;
}
...
@@ -38,6 +54,7 @@ public:
...
@@ -38,6 +54,7 @@ public:
SelectionType
selectionType
()
override
{
return
_selectionType
;
}
SelectionType
selectionType
()
override
{
return
_selectionType
;
}
bool
selected
()
override
{
return
_selected
;
}
bool
selected
()
override
{
return
_selected
;
}
void
setSelected
(
bool
sel
)
override
{
_selected
=
sel
;
emit
selectedChanged
();
}
void
setSelected
(
bool
sel
)
override
{
_selected
=
sel
;
emit
selectedChanged
();
}
QmlObjectListModel
*
rules
()
override
{
return
&
_rules
;
}
private:
private:
QString
_id
;
QString
_id
;
QString
_description
;
QString
_description
;
...
@@ -46,6 +63,7 @@ private:
...
@@ -46,6 +63,7 @@ private:
QString
_name
;
QString
_name
;
QString
_shortName
;
QString
_shortName
;
SelectionType
_selectionType
;
SelectionType
_selectionType
;
QmlObjectListModel
_rules
;
};
};
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
...
@@ -56,8 +74,8 @@ public:
...
@@ -56,8 +74,8 @@ public:
AirMapRulesetsManager
(
AirMapSharedState
&
shared
);
AirMapRulesetsManager
(
AirMapSharedState
&
shared
);
bool
valid
()
override
{
return
_valid
;
}
bool
valid
()
override
{
return
_valid
;
}
QmlObjectListModel
*
rule
s
()
override
{
return
&
_rule
s
;
}
QmlObjectListModel
*
rule
Sets
()
override
{
return
&
_ruleSet
s
;
}
QString
selectedRules
()
override
;
QString
selectedRule
Set
s
()
override
;
void
setROI
(
const
QGeoCoordinate
&
center
)
override
;
void
setROI
(
const
QGeoCoordinate
&
center
)
override
;
...
@@ -78,7 +96,7 @@ private:
...
@@ -78,7 +96,7 @@ private:
bool
_valid
;
bool
_valid
;
State
_state
=
State
::
Idle
;
State
_state
=
State
::
Idle
;
AirMapSharedState
&
_shared
;
AirMapSharedState
&
_shared
;
QmlObjectListModel
_rules
;
QmlObjectListModel
_rule
Set
s
;
};
};
src/Airmap/AirspaceControl.qml
View file @
5e7603d5
...
@@ -290,7 +290,7 @@ Item {
...
@@ -290,7 +290,7 @@ Item {
Layout.fillWidth
:
true
Layout.fillWidth
:
true
QGCLabel
{
QGCLabel
{
id
:
regLabel
id
:
regLabel
text
:
_validRules
?
_activeVehicle
.
airspaceController
.
rule
sets
.
selectedRule
s
:
qsTr
(
"
None
"
)
text
:
_validRules
?
_activeVehicle
.
airspaceController
.
rule
Sets
.
selectedRuleSet
s
:
qsTr
(
"
None
"
)
elide
:
Text
.
ElideRight
elide
:
Text
.
ElideRight
horizontalAlignment
:
Text
.
AlignHCenter
horizontalAlignment
:
Text
.
AlignHCenter
color
:
_colorWhite
color
:
_colorWhite
...
@@ -425,9 +425,9 @@ Item {
...
@@ -425,9 +425,9 @@ Item {
anchors.leftMargin
:
ScreenTools
.
defaultFontPixelWidth
*
2
anchors.leftMargin
:
ScreenTools
.
defaultFontPixelWidth
*
2
}
}
Repeater
{
Repeater
{
model
:
_validRules
?
_activeVehicle
.
airspaceController
.
rulesets
.
rules
:
[]
model
:
_validRules
?
_activeVehicle
.
airspaceController
.
rulesets
.
rule
Set
s
:
[]
delegate
:
RuleSelector
{
delegate
:
RuleSelector
{
visible
:
object
.
selectionType
===
AirspaceRule
.
Pickone
visible
:
object
.
selectionType
===
AirspaceRule
Set
.
Pickone
rule
:
object
rule
:
object
exclusiveGroup
:
rulesGroup
exclusiveGroup
:
rulesGroup
anchors.right
:
parent
.
right
anchors.right
:
parent
.
right
...
@@ -446,9 +446,9 @@ Item {
...
@@ -446,9 +446,9 @@ Item {
anchors.leftMargin
:
ScreenTools
.
defaultFontPixelWidth
*
2
anchors.leftMargin
:
ScreenTools
.
defaultFontPixelWidth
*
2
}
}
Repeater
{
Repeater
{
model
:
_validRules
?
_activeVehicle
.
airspaceController
.
rulesets
.
rules
:
[]
model
:
_validRules
?
_activeVehicle
.
airspaceController
.
rulesets
.
rule
Set
s
:
[]
delegate
:
RuleSelector
{
delegate
:
RuleSelector
{
visible
:
object
.
selectionType
===
AirspaceRule
.
Optional
visible
:
object
.
selectionType
===
AirspaceRule
Set
.
Optional
rule
:
object
rule
:
object
anchors.right
:
parent
.
right
anchors.right
:
parent
.
right
anchors.rightMargin
:
ScreenTools
.
defaultFontPixelWidth
anchors.rightMargin
:
ScreenTools
.
defaultFontPixelWidth
...
@@ -466,9 +466,9 @@ Item {
...
@@ -466,9 +466,9 @@ Item {
anchors.leftMargin
:
ScreenTools
.
defaultFontPixelWidth
*
2
anchors.leftMargin
:
ScreenTools
.
defaultFontPixelWidth
*
2
}
}
Repeater
{
Repeater
{
model
:
_validRules
?
_activeVehicle
.
airspaceController
.
rulesets
.
rules
:
[]
model
:
_validRules
?
_activeVehicle
.
airspaceController
.
rulesets
.
rule
Set
s
:
[]
delegate
:
RuleSelector
{
delegate
:
RuleSelector
{
visible
:
object
.
selectionType
===
AirspaceRule
.
Required
visible
:
object
.
selectionType
===
AirspaceRule
Set
.
Required
rule
:
object
rule
:
object
required
:
true
required
:
true
anchors.right
:
parent
.
right
anchors.right
:
parent
.
right
...
...
src/AirspaceManagement/AirspaceController.cc
View file @
5e7603d5
...
@@ -48,9 +48,9 @@ AirspaceController::advisories()
...
@@ -48,9 +48,9 @@ AirspaceController::advisories()
}
}
AirspaceRulesetsProvider
*
AirspaceRulesetsProvider
*
AirspaceController
::
rule
s
ets
()
AirspaceController
::
rule
S
ets
()
{
{
return
_manager
->
rule
s
ets
();
return
_manager
->
rule
S
ets
();
}
}
AirspaceRestrictionProvider
*
AirspaceRestrictionProvider
*
...
...
src/AirspaceManagement/AirspaceController.h
View file @
5e7603d5
...
@@ -29,7 +29,7 @@ public:
...
@@ -29,7 +29,7 @@ public:
Q_PROPERTY
(
QString
providerName
READ
providerName
CONSTANT
)
Q_PROPERTY
(
QString
providerName
READ
providerName
CONSTANT
)
Q_PROPERTY
(
AirspaceWeatherInfoProvider
*
weatherInfo
READ
weatherInfo
CONSTANT
)
Q_PROPERTY
(
AirspaceWeatherInfoProvider
*
weatherInfo
READ
weatherInfo
CONSTANT
)
Q_PROPERTY
(
AirspaceAdvisoryProvider
*
advisories
READ
advisories
CONSTANT
)
Q_PROPERTY
(
AirspaceAdvisoryProvider
*
advisories
READ
advisories
CONSTANT
)
Q_PROPERTY
(
AirspaceRulesetsProvider
*
rule
sets
READ
rules
ets
CONSTANT
)
Q_PROPERTY
(
AirspaceRulesetsProvider
*
rule
Sets
READ
ruleS
ets
CONSTANT
)
Q_PROPERTY
(
AirspaceRestrictionProvider
*
airspaces
READ
airspaces
CONSTANT
)
Q_PROPERTY
(
AirspaceRestrictionProvider
*
airspaces
READ
airspaces
CONSTANT
)
Q_PROPERTY
(
bool
airspaceVisible
READ
airspaceVisible
WRITE
setairspaceVisible
NOTIFY
airspaceVisibleChanged
)
Q_PROPERTY
(
bool
airspaceVisible
READ
airspaceVisible
WRITE
setairspaceVisible
NOTIFY
airspaceVisibleChanged
)
...
@@ -38,7 +38,7 @@ public:
...
@@ -38,7 +38,7 @@ public:
QString
providerName
();
QString
providerName
();
AirspaceWeatherInfoProvider
*
weatherInfo
();
AirspaceWeatherInfoProvider
*
weatherInfo
();
AirspaceAdvisoryProvider
*
advisories
();
AirspaceAdvisoryProvider
*
advisories
();
AirspaceRulesetsProvider
*
rule
s
ets
();
AirspaceRulesetsProvider
*
rule
S
ets
();
AirspaceRestrictionProvider
*
airspaces
();
AirspaceRestrictionProvider
*
airspaces
();
bool
airspaceVisible
()
{
return
_airspaceVisible
;
}
bool
airspaceVisible
()
{
return
_airspaceVisible
;
}
...
...
src/AirspaceManagement/AirspaceManager.cc
View file @
5e7603d5
...
@@ -28,11 +28,14 @@ AirspaceManager::AirspaceManager(QGCApplication* app, QGCToolbox* toolbox)
...
@@ -28,11 +28,14 @@ AirspaceManager::AirspaceManager(QGCApplication* app, QGCToolbox* toolbox)
_roiUpdateTimer
.
setInterval
(
2000
);
_roiUpdateTimer
.
setInterval
(
2000
);
_roiUpdateTimer
.
setSingleShot
(
true
);
_roiUpdateTimer
.
setSingleShot
(
true
);
connect
(
&
_roiUpdateTimer
,
&
QTimer
::
timeout
,
this
,
&
AirspaceManager
::
_updateToROI
);
connect
(
&
_roiUpdateTimer
,
&
QTimer
::
timeout
,
this
,
&
AirspaceManager
::
_updateToROI
);
//-- TODO: Move these away from QGroundControl and into their own group (Airspace)
qmlRegisterUncreatableType
<
AirspaceAuthorization
>
(
"QGroundControl"
,
1
,
0
,
"AirspaceAuthorization"
,
"Reference only"
);
qmlRegisterUncreatableType
<
AirspaceAuthorization
>
(
"QGroundControl"
,
1
,
0
,
"AirspaceAuthorization"
,
"Reference only"
);
qmlRegisterUncreatableType
<
AirspaceController
>
(
"QGroundControl.Vehicle"
,
1
,
0
,
"AirspaceController"
,
"Reference only"
);
qmlRegisterUncreatableType
<
AirspaceController
>
(
"QGroundControl.Vehicle"
,
1
,
0
,
"AirspaceController"
,
"Reference only"
);
qmlRegisterUncreatableType
<
AirspaceWeatherInfoProvider
>
(
"QGroundControl.Vehicle"
,
1
,
0
,
"AirspaceWeatherInfoProvider"
,
"Reference only"
);
qmlRegisterUncreatableType
<
AirspaceWeatherInfoProvider
>
(
"QGroundControl.Vehicle"
,
1
,
0
,
"AirspaceWeatherInfoProvider"
,
"Reference only"
);
qmlRegisterUncreatableType
<
AirspaceAdvisoryProvider
>
(
"QGroundControl.Vehicle"
,
1
,
0
,
"AirspaceAdvisoryProvider"
,
"Reference only"
);
qmlRegisterUncreatableType
<
AirspaceAdvisoryProvider
>
(
"QGroundControl.Vehicle"
,
1
,
0
,
"AirspaceAdvisoryProvider"
,
"Reference only"
);
qmlRegisterUncreatableType
<
AirspaceRuleFeature
>
(
"QGroundControl.Vehicle"
,
1
,
0
,
"AirspaceRuleFeature"
,
"Reference only"
);
qmlRegisterUncreatableType
<
AirspaceRule
>
(
"QGroundControl.Vehicle"
,
1
,
0
,
"AirspaceRule"
,
"Reference only"
);
qmlRegisterUncreatableType
<
AirspaceRule
>
(
"QGroundControl.Vehicle"
,
1
,
0
,
"AirspaceRule"
,
"Reference only"
);
qmlRegisterUncreatableType
<
AirspaceRuleSet
>
(
"QGroundControl.Vehicle"
,
1
,
0
,
"AirspaceRuleSet"
,
"Reference only"
);
qmlRegisterUncreatableType
<
AirspaceRulesetsProvider
>
(
"QGroundControl.Vehicle"
,
1
,
0
,
"AirspaceRulesetsProvider"
,
"Reference only"
);
qmlRegisterUncreatableType
<
AirspaceRulesetsProvider
>
(
"QGroundControl.Vehicle"
,
1
,
0
,
"AirspaceRulesetsProvider"
,
"Reference only"
);
qmlRegisterUncreatableType
<
AirspaceRestrictionProvider
>
(
"QGroundControl.Vehicle"
,
1
,
0
,
"AirspaceRestrictionProvider"
,
"Reference only"
);
qmlRegisterUncreatableType
<
AirspaceRestrictionProvider
>
(
"QGroundControl.Vehicle"
,
1
,
0
,
"AirspaceRestrictionProvider"
,
"Reference only"
);
}
}
...
@@ -45,8 +48,8 @@ AirspaceManager::~AirspaceManager()
...
@@ -45,8 +48,8 @@ AirspaceManager::~AirspaceManager()
if
(
_weatherProvider
)
{
if
(
_weatherProvider
)
{
delete
_weatherProvider
;
delete
_weatherProvider
;
}
}
if
(
_rule
s
etsProvider
)
{
if
(
_rule
S
etsProvider
)
{
delete
_rule
s
etsProvider
;
delete
_rule
S
etsProvider
;
}
}
if
(
_airspaces
)
{
if
(
_airspaces
)
{
delete
_airspaces
;
delete
_airspaces
;
...
@@ -57,7 +60,7 @@ void AirspaceManager::setToolbox(QGCToolbox* toolbox)
...
@@ -57,7 +60,7 @@ void AirspaceManager::setToolbox(QGCToolbox* toolbox)
{
{
QGCTool
::
setToolbox
(
toolbox
);
QGCTool
::
setToolbox
(
toolbox
);
// We should not call virtual methods in the constructor, so we instantiate the restriction provider here
// We should not call virtual methods in the constructor, so we instantiate the restriction provider here
_rule
s
etsProvider
=
instantiateRulesetsProvider
();
_rule
S
etsProvider
=
instantiateRulesetsProvider
();
_weatherProvider
=
instatiateAirspaceWeatherInfoProvider
();
_weatherProvider
=
instatiateAirspaceWeatherInfoProvider
();
_advisories
=
instatiateAirspaceAdvisoryProvider
();
_advisories
=
instatiateAirspaceAdvisoryProvider
();
_airspaces
=
instantiateAirspaceRestrictionProvider
();
_airspaces
=
instantiateAirspaceRestrictionProvider
();
...
@@ -75,8 +78,8 @@ void AirspaceManager::_updateToROI()
...
@@ -75,8 +78,8 @@ void AirspaceManager::_updateToROI()
if
(
_airspaces
)
{
if
(
_airspaces
)
{
_airspaces
->
setROI
(
_roiCenter
,
_roiRadius
);
_airspaces
->
setROI
(
_roiCenter
,
_roiRadius
);
}
}
if
(
_rule
s
etsProvider
)
{
if
(
_rule
S
etsProvider
)
{
_rule
s
etsProvider
->
setROI
(
_roiCenter
);
_rule
S
etsProvider
->
setROI
(
_roiCenter
);
}
}
if
(
_weatherProvider
)
{
if
(
_weatherProvider
)
{
_weatherProvider
->
setROI
(
_roiCenter
);
_weatherProvider
->
setROI
(
_roiCenter
);
...
...
src/AirspaceManagement/AirspaceManager.h
View file @
5e7603d5
...
@@ -88,7 +88,7 @@ public:
...
@@ -88,7 +88,7 @@ public:
AirspaceWeatherInfoProvider
*
weatherInfo
()
{
return
_weatherProvider
;
}
AirspaceWeatherInfoProvider
*
weatherInfo
()
{
return
_weatherProvider
;
}
AirspaceAdvisoryProvider
*
advisories
()
{
return
_advisories
;
}
AirspaceAdvisoryProvider
*
advisories
()
{
return
_advisories
;
}
AirspaceRulesetsProvider
*
rule
sets
()
{
return
_rules
etsProvider
;
}
AirspaceRulesetsProvider
*
rule
Sets
()
{
return
_ruleS
etsProvider
;
}
AirspaceRestrictionProvider
*
airspaces
()
{
return
_airspaces
;
}
AirspaceRestrictionProvider
*
airspaces
()
{
return
_airspaces
;
}
void
setToolbox
(
QGCToolbox
*
toolbox
)
override
;
void
setToolbox
(
QGCToolbox
*
toolbox
)
override
;
...
@@ -101,7 +101,7 @@ public:
...
@@ -101,7 +101,7 @@ public:
private:
private:
void
_updateToROI
();
void
_updateToROI
();
AirspaceRulesetsProvider
*
_rule
s
etsProvider
=
nullptr
;
///< Rulesets that are shown in the UI
AirspaceRulesetsProvider
*
_rule
S
etsProvider
=
nullptr
;
///< Rulesets that are shown in the UI
AirspaceWeatherInfoProvider
*
_weatherProvider
=
nullptr
;
///< Weather info that is shown in the UI
AirspaceWeatherInfoProvider
*
_weatherProvider
=
nullptr
;
///< Weather info that is shown in the UI
AirspaceAdvisoryProvider
*
_advisories
=
nullptr
;
///< Advisory info that is shown in the UI
AirspaceAdvisoryProvider
*
_advisories
=
nullptr
;
///< Advisory info that is shown in the UI
AirspaceRestrictionProvider
*
_airspaces
=
nullptr
;
///< Airspace info that is shown in the UI
AirspaceRestrictionProvider
*
_airspaces
=
nullptr
;
///< Airspace info that is shown in the UI
...
...
src/AirspaceManagement/AirspaceRulesetsProvider.cc
View file @
5e7603d5
...
@@ -9,7 +9,12 @@
...
@@ -9,7 +9,12 @@
#include "AirspaceRulesetsProvider.h"
#include "AirspaceRulesetsProvider.h"
AirspaceRule
::
AirspaceRule
(
QObject
*
parent
)
AirspaceRule
::
AirspaceRule
(
QObject
*
parent
)
:
QObject
(
parent
)
{
}
AirspaceRuleSet
::
AirspaceRuleSet
(
QObject
*
parent
)
:
QObject
(
parent
)
:
QObject
(
parent
)
{
{
}
}
...
...
src/AirspaceManagement/AirspaceRulesetsProvider.h
View file @
5e7603d5
...
@@ -20,8 +20,81 @@
...
@@ -20,8 +20,81 @@
#include <QObject>
#include <QObject>
#include <QGeoCoordinate>
#include <QGeoCoordinate>
//-----------------------------------------------------------------------------
class
AirspaceRuleFeature
:
public
QObject
{
Q_OBJECT
public:
enum
Type
{
Unknown
,
Boolean
,
Float
,
String
,
};
enum
Measurement
{
UnknownMeasurement
,
Speed
,
Weight
,
Distance
,
};
enum
Unit
{
UnknownUnit
,
Kilogram
,
Meters
,
MetersPerSecond
,
};
Q_ENUM
(
Type
)
Q_ENUM
(
Measurement
)
Q_ENUM
(
Unit
)
AirspaceRuleFeature
(
QObject
*
parent
=
NULL
);
Q_PROPERTY
(
Type
type
READ
type
CONSTANT
)
Q_PROPERTY
(
Measurement
measurement
READ
measurement
CONSTANT
)
Q_PROPERTY
(
QString
name
READ
name
CONSTANT
)
Q_PROPERTY
(
QString
description
READ
description
CONSTANT
)
Q_PROPERTY
(
QVariant
value
READ
description
CONSTANT
)
virtual
Measurement
measurement
()
=
0
;
virtual
Type
type
()
=
0
;
virtual
QString
name
()
=
0
;
virtual
QString
description
()
=
0
;
virtual
QVariant
value
()
=
0
;
};
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
class
AirspaceRule
:
public
QObject
class
AirspaceRule
:
public
QObject
{
Q_OBJECT
public:
enum
Status
{
Unknown
,
///< The status of the rule is unknown.
Conflicting
,
///< The rule is conflicting.
NotConflicting
,
///< The rule is not conflicting, all good to go.
MissingInfo
,
///< The evaluation requires further information.
Informational
///< The rule is of informational nature.
};
Q_ENUM
(
Status
)
AirspaceRule
(
QObject
*
parent
=
NULL
);
Q_PROPERTY
(
Status
status
READ
status
CONSTANT
)
Q_PROPERTY
(
QString
shortText
READ
shortText
CONSTANT
)
Q_PROPERTY
(
QString
description
READ
description
CONSTANT
)
virtual
Status
status
()
=
0
;
virtual
QString
shortText
()
=
0
;
virtual
QString
description
()
=
0
;
};
//-----------------------------------------------------------------------------
class
AirspaceRuleSet
:
public
QObject
{
{
Q_OBJECT
Q_OBJECT
public:
public:
...
@@ -34,7 +107,7 @@ public:
...
@@ -34,7 +107,7 @@ public:
Q_ENUM
(
SelectionType
)
Q_ENUM
(
SelectionType
)
AirspaceRule
(
QObject
*
parent
=
NULL
);
AirspaceRule
Set
(
QObject
*
parent
=
NULL
);
Q_PROPERTY
(
QString
id
READ
id
CONSTANT
)
Q_PROPERTY
(
QString
id
READ
id
CONSTANT
)
Q_PROPERTY
(
QString
name
READ
name
CONSTANT
)
Q_PROPERTY
(
QString
name
READ
name
CONSTANT
)
...
@@ -43,6 +116,7 @@ public:
...
@@ -43,6 +116,7 @@ public:
Q_PROPERTY
(
bool
isDefault
READ
isDefault
CONSTANT
)
Q_PROPERTY
(
bool
isDefault
READ
isDefault
CONSTANT
)
Q_PROPERTY
(
SelectionType
selectionType
READ
selectionType
CONSTANT
)
Q_PROPERTY
(
SelectionType
selectionType
READ
selectionType
CONSTANT
)
Q_PROPERTY
(
bool
selected
READ
selected
WRITE
setSelected
NOTIFY
selectedChanged
)
Q_PROPERTY
(
bool
selected
READ
selected
WRITE
setSelected
NOTIFY
selectedChanged
)
Q_PROPERTY
(
QmlObjectListModel
*
rules
READ
rules
CONSTANT
)
virtual
QString
id
()
=
0
;
virtual
QString
id
()
=
0
;
virtual
QString
description
()
=
0
;
virtual
QString
description
()
=
0
;
...
@@ -52,6 +126,7 @@ public:
...
@@ -52,6 +126,7 @@ public:
virtual
SelectionType
selectionType
()
=
0
;
virtual
SelectionType
selectionType
()
=
0
;
virtual
bool
selected
()
=
0
;
virtual
bool
selected
()
=
0
;
virtual
void
setSelected
(
bool
sel
)
=
0
;
virtual
void
setSelected
(
bool
sel
)
=
0
;
virtual
QmlObjectListModel
*
rules
()
=
0
;
///< List of AirspaceRule
signals:
signals:
void
selectedChanged
();
void
selectedChanged
();
...
@@ -65,13 +140,13 @@ public:
...
@@ -65,13 +140,13 @@ public:
AirspaceRulesetsProvider
(
QObject
*
parent
=
NULL
);
AirspaceRulesetsProvider
(
QObject
*
parent
=
NULL
);
~
AirspaceRulesetsProvider
()
=
default
;
~
AirspaceRulesetsProvider
()
=
default
;
Q_PROPERTY
(
bool
valid
READ
valid
NOTIFY
rule
sChanged
)
Q_PROPERTY
(
bool
valid
READ
valid
NOTIFY
ruleSet
sChanged
)
Q_PROPERTY
(
QString
selectedRule
s
READ
selectedRules
NOTIFY
selectedRule
sChanged
)
Q_PROPERTY
(
QString
selectedRule
Sets
READ
selectedRuleSets
NOTIFY
selectedRuleSet
sChanged
)
Q_PROPERTY
(
QmlObjectListModel
*
rule
s
READ
rules
NOTIFY
rule
sChanged
)
Q_PROPERTY
(
QmlObjectListModel
*
rule
Sets
READ
ruleSets
NOTIFY
ruleSet
sChanged
)
virtual
bool
valid
()
=
0
;
///< Current ruleset is valid
virtual
bool
valid
()
=
0
;
///< Current ruleset is valid
virtual
QmlObjectListModel
*
rule
s
()
=
0
;
///< List of AirspaceRule
virtual
QmlObjectListModel
*
rule
Sets
()
=
0
;
///< List of AirspaceRuleSet
virtual
QString
selectedRule
s
()
=
0
;
///< All selected rules concatenated into a string
virtual
QString
selectedRuleSet
s
()
=
0
;
///< All selected rules concatenated into a string
/**
/**
* Set region of interest that should be queried. When finished, the rulesChanged() signal will be emmited.
* Set region of interest that should be queried. When finished, the rulesChanged() signal will be emmited.
* @param center Center coordinate for ROI
* @param center Center coordinate for ROI
...
@@ -79,7 +154,7 @@ public:
...
@@ -79,7 +154,7 @@ public:
virtual
void
setROI
(
const
QGeoCoordinate
&
center
)
=
0
;
virtual
void
setROI
(
const
QGeoCoordinate
&
center
)
=
0
;
signals:
signals:
void
rule
sChanged
();
void
rule
SetsChanged
();
void
selectedRule
sChanged
();
void
selectedRule
SetsChanged
();
};
};
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