diff --git a/Aircraft/Instruments-3d/FG1000/GDU104X/GDU-1044B.1.xml b/Aircraft/Instruments-3d/FG1000/GDU104X/GDU-1044B.1.xml
index a91a17ac9..4329fb7b6 100644
--- a/Aircraft/Instruments-3d/FG1000/GDU104X/GDU-1044B.1.xml
+++ b/Aircraft/Instruments-3d/FG1000/GDU104X/GDU-1044B.1.xml
@@ -284,6 +284,7 @@
FG1000HardKeyPushed
1
AP
+ 1
@@ -304,6 +305,7 @@
FG1000HardKeyPushed
1
HDG
+ 1
@@ -324,6 +326,7 @@
FG1000HardKeyPushed
1
NAV
+ 1
@@ -344,6 +347,7 @@
FG1000HardKeyPushed
1
APR
+ 1
@@ -364,6 +368,7 @@
FG1000HardKeyPushed
1
VS
+ 1
@@ -384,6 +389,7 @@
FG1000HardKeyPushed
1
FLC
+ 1
@@ -404,6 +410,7 @@
FG1000HardKeyPushed
1
FD
+ 1
@@ -424,6 +431,7 @@
FG1000HardKeyPushed
1
ALT
+ 1
@@ -444,6 +452,7 @@
FG1000HardKeyPushed
1
VNV
+ 1
@@ -464,6 +473,7 @@
FG1000HardKeyPushed
1
BC
+ 1
@@ -484,6 +494,7 @@
FG1000HardKeyPushed
1
NOSE_UP
+ 1
@@ -504,6 +515,7 @@
FG1000HardKeyPushed
1
NOSE_DOWN
+ 1
diff --git a/Aircraft/Instruments-3d/FG1000/GDU104X/GDU-1044B.2.xml b/Aircraft/Instruments-3d/FG1000/GDU104X/GDU-1044B.2.xml
index ffea8a1b8..e3f0dc38a 100644
--- a/Aircraft/Instruments-3d/FG1000/GDU104X/GDU-1044B.2.xml
+++ b/Aircraft/Instruments-3d/FG1000/GDU104X/GDU-1044B.2.xml
@@ -284,6 +284,7 @@
FG1000HardKeyPushed
2
AP
+ 1
@@ -304,6 +305,7 @@
FG1000HardKeyPushed
2
HDG
+ 1
@@ -324,6 +326,7 @@
FG1000HardKeyPushed
2
NAV
+ 1
@@ -344,6 +347,7 @@
FG1000HardKeyPushed
2
APR
+ 1
@@ -364,6 +368,7 @@
FG1000HardKeyPushed
2
VS
+ 1
@@ -384,6 +389,7 @@
FG1000HardKeyPushed
2
FLC
+ 1
@@ -404,6 +410,7 @@
FG1000HardKeyPushed
2
FD
+ 1
@@ -424,6 +431,7 @@
FG1000HardKeyPushed
2
ALT
+ 1
@@ -444,6 +452,7 @@
FG1000HardKeyPushed
2
VNV
+ 1
@@ -464,6 +473,7 @@
FG1000HardKeyPushed
2
BC
+ 1
@@ -484,6 +494,7 @@
FG1000HardKeyPushed
2
NOSE_UP
+ 1
@@ -504,6 +515,7 @@
FG1000HardKeyPushed
2
NOSE_DOWN
+ 1
diff --git a/Aircraft/Instruments-3d/FG1000/GDU104X/GDU-1044B.3.xml b/Aircraft/Instruments-3d/FG1000/GDU104X/GDU-1044B.3.xml
index 3791e8be8..f0fd0a93f 100644
--- a/Aircraft/Instruments-3d/FG1000/GDU104X/GDU-1044B.3.xml
+++ b/Aircraft/Instruments-3d/FG1000/GDU104X/GDU-1044B.3.xml
@@ -284,6 +284,7 @@
FG1000HardKeyPushed
3
AP
+ 1
@@ -304,6 +305,7 @@
FG1000HardKeyPushed
3
HDG
+ 1
@@ -324,6 +326,7 @@
FG1000HardKeyPushed
3
NAV
+ 1
@@ -344,6 +347,7 @@
FG1000HardKeyPushed
3
APR
+ 1
@@ -364,6 +368,7 @@
FG1000HardKeyPushed
3
VS
+ 1
@@ -384,6 +389,7 @@
FG1000HardKeyPushed
3
FLC
+ 1
@@ -404,6 +410,7 @@
FG1000HardKeyPushed
3
FD
+ 1
@@ -424,6 +431,7 @@
FG1000HardKeyPushed
3
ALT
+ 1
@@ -444,6 +452,7 @@
FG1000HardKeyPushed
3
VNV
+ 1
@@ -464,6 +473,7 @@
FG1000HardKeyPushed
3
BC
+ 1
@@ -484,6 +494,7 @@
FG1000HardKeyPushed
3
NOSE_UP
+ 1
@@ -504,6 +515,7 @@
FG1000HardKeyPushed
3
NOSE_DOWN
+ 1
diff --git a/Aircraft/Instruments-3d/FG1000/GDU104X/GDU-1044B.4.xml b/Aircraft/Instruments-3d/FG1000/GDU104X/GDU-1044B.4.xml
index 21fd16f47..4f13781f3 100644
--- a/Aircraft/Instruments-3d/FG1000/GDU104X/GDU-1044B.4.xml
+++ b/Aircraft/Instruments-3d/FG1000/GDU104X/GDU-1044B.4.xml
@@ -284,6 +284,7 @@
FG1000HardKeyPushed
4
AP
+ 1
@@ -304,6 +305,7 @@
FG1000HardKeyPushed
4
HDG
+ 1
@@ -324,6 +326,7 @@
FG1000HardKeyPushed
4
NAV
+ 1
@@ -344,6 +347,7 @@
FG1000HardKeyPushed
4
APR
+ 1
@@ -364,6 +368,7 @@
FG1000HardKeyPushed
4
VS
+ 1
@@ -384,6 +389,7 @@
FG1000HardKeyPushed
4
FLC
+ 1
@@ -404,6 +410,7 @@
FG1000HardKeyPushed
4
FD
+ 1
@@ -424,6 +431,7 @@
FG1000HardKeyPushed
4
ALT
+ 1
@@ -444,6 +452,7 @@
FG1000HardKeyPushed
4
VNV
+ 1
@@ -464,6 +473,7 @@
FG1000HardKeyPushed
4
BC
+ 1
@@ -484,6 +494,7 @@
FG1000HardKeyPushed
4
NOSE_UP
+ 1
@@ -504,6 +515,7 @@
FG1000HardKeyPushed
4
NOSE_DOWN
+ 1
diff --git a/Aircraft/Instruments-3d/FG1000/GFC700-AP-off-FSM.xml b/Aircraft/Instruments-3d/FG1000/GFC700-AP-off-FSM.xml
new file mode 100644
index 000000000..3fe0988a3
--- /dev/null
+++ b/Aircraft/Instruments-3d/FG1000/GFC700-AP-off-FSM.xml
@@ -0,0 +1,60 @@
+
+
+/autopilot/GFC700/FSM/AP-off
+
+
+ OFF
+
+
+ property-assign
+ /autopilot/AP-mode-button
+
+
+
+ property-assign
+ /autopilot/locks/passive-mode
+ 1
+
+
+
+
+ ON
+
+
+ property-assign
+ /autopilot/AP-mode-button
+
+
+
+ property-assign
+ /autopilot/locks/passive-mode
+ 0
+
+
+
+
+ OFF-ON
+
+ ON
+ true
+
+ /autopilot/AP-mode-buttonAP
+
+
+
+
+ ON-OFF
+
+ OFF
+ false
+
+ /autopilot/AP-mode-buttonAP
+
+
+
+
diff --git a/Aircraft/Instruments-3d/FG1000/GFC700-lateral-FSM.xml b/Aircraft/Instruments-3d/FG1000/GFC700-lateral-FSM.xml
new file mode 100644
index 000000000..6e82344c8
--- /dev/null
+++ b/Aircraft/Instruments-3d/FG1000/GFC700-lateral-FSM.xml
@@ -0,0 +1,268 @@
+
+
+
+/autopilot/GFC700/FSM/lateral
+
+
+ OFF
+
+ property-assign
+ /autopilot/locks/heading
+
+
+
+ property-assign
+ /autopilot/annunciator/lateral-mode
+
+
+
+ property-assign
+ /autopilot/annunciator/lateral-mode-armed
+
+
+
+
+ property-assign
+ /autopilot/lateral-mode-button
+
+
+
+
+
+
+ ROL
+
+ property-assign
+ /autopilot/annunciator/lateral-mode
+ ROL
+
+
+
+ property-assign
+ /autopilot/lateral-mode-button
+
+
+
+
+
+
+ ROL-ROL-WL
+
+ ROL-WL
+
+
+ /autopilot/internal/filtered-roll-deg
+ 6.0
+
+
+ /autopilot/internal/filtered-roll-deg
+ -6.0
+
+
+
+
+
+
+ ROL-ROL-SET
+
+ ROL-SET
+
+
+
+ /autopilot/internal/filtered-roll-deg
+ 6.0
+
+
+ /autopilot/internal/filtered-roll-deg
+ -6.0
+
+
+
+
+
+
+ ROL-SET
+
+
+ property-assign
+ /autopilot/settings/target-roll-deg
+ /autopilot/internal/filtered-roll-deg
+
+
+ property-assign
+ /autopilot/locks/heading
+ roll-hold
+
+
+
+
+ ROL-WL
+
+
+ property-assign
+ /autopilot/settings/target-roll-deg
+ 0.0
+
+
+ property-assign
+ /autopilot/locks/heading
+ roll-hold
+
+
+
+
+ GA
+
+
+ property-assign
+ /autopilot/settings/target-roll-deg
+ 0.0
+
+
+ property-assign
+ /autopilot/locks/heading
+ roll-hold
+
+
+ property-assign
+ /autopilot/annunciator/lateral-mode
+ GA
+
+
+
+ property-assign
+ /autopilot/lateral-mode-button
+
+
+
+
+
+ HDG
+
+ property-assign
+ /autopilot/locks/heading
+ dg-heading-hold
+
+
+ property-assign
+ /autopilot/annunciator/lateral-mode
+ HDG
+
+
+
+ property-assign
+ /autopilot/lateral-mode-button
+
+
+
+
+
+
+ OFF-ROL
+
+ ROL
+ true
+
+
+ /autopilot/lateral-mode-buttonFD
+ /autopilot/lateral-mode-buttonCWS
+ /autopilot/lateral-mode-buttonNAV
+ /autopilot/lateral-mode-buttonBC
+ /autopilot/lateral-mode-buttonAPR
+ /autopilot/lateral-mode-buttonHDG
+
+
+
+
+
+
+ OFF-HDG
+
+ HDG
+ true
+
+
+ /autopilot/lateral-mode-buttonHDG
+
+
+
+
+
+
+
+
+ OFF-AP-ROL
+
+ ROL
+ true
+
+ /autopilot/lateral-mode-buttonAP
+
+
+ property-assign
+ /autopilot/locks/passive-mode
+ 0
+
+
+
+
+
+ FD-Switch-off
+ OFF
+ true
+
+ /autopilot/lateral-mode-buttonFD
+ /autopilot/locks/passive-mode1
+
+
+
+
+
+
+
+ To GA
+ GA
+ true
+
+ /autopilot/lateral-mode-buttonGA
+
+
+
+
+ From GA
+
+ ROL
+ true
+
+ /autopilot/lateral-mode-buttonGA
+
+
+
+
+
+ To HDG
+ HDG
+ true
+
+ /autopilot/lateral-mode-buttonHDG
+
+
+
+
+ From HDG
+
+ ROL
+ true
+
+ /autopilot/lateral-mode-buttonHDG
+
+
+
+
diff --git a/Aircraft/Instruments-3d/FG1000/GFC700-vertical-FSM.xml b/Aircraft/Instruments-3d/FG1000/GFC700-vertical-FSM.xml
new file mode 100644
index 000000000..af471c65a
--- /dev/null
+++ b/Aircraft/Instruments-3d/FG1000/GFC700-vertical-FSM.xml
@@ -0,0 +1,374 @@
+
+
+
+/autopilot/GFC700/FSM/vertical
+
+
+ OFF
+
+ property-assign
+ /autopilot/locks/altitude
+
+
+
+ property-assign
+ /autopilot/annunciator/vertical-mode
+
+
+
+ property-assign
+ /autopilot/annunciator/vertical-mode-armed
+
+
+
+ property-assign
+ /autopilot/annunciator/vertical-mode-target
+
+
+
+ property-assign
+ /autopilot/locks/speed
+
+
+
+ property-assign
+ /autopilot/locks/passive-mode
+ 1
+
+
+
+ property-assign
+ /autopilot/vertical-mode-button
+
+
+
+
+
+ PIT
+
+
+ property-assign
+ /autopilot/settings/target-pitch-deg
+ /autopilot/internal/filtered-pitch-deg
+
+
+ property-assign
+ /autopilot/locks/altitude
+ pitch-hold
+
+
+ property-assign
+ /autopilot/annunciator/vertical-mode
+ PIT
+
+
+ property-assign
+ /autopilot/annunciator/vertical-mode-target
+
+
+
+
+ property-assign
+ /autopilot/vertical-mode-button
+
+
+
+
+
+ GA
+
+
+ property-assign
+ /autopilot/settings/target-pitch-deg
+ 7.0
+
+
+ property-assign
+ /autopilot/locks/altitude
+ pitch-hold
+
+
+ property-assign
+ /autopilot/annunciator/vertical-mode
+ GA
+
+
+ property-assign
+ /autopilot/annunciator/vertical-mode-target
+
+
+
+
+ property-assign
+ /autopilot/vertical-mode-button
+
+
+
+
+
+ VS
+
+
+ nasal
+
+
+
+ property-assign
+ /autopilot/locks/altitude
+ vertical-speed-hold
+
+
+ property-assign
+ /autopilot/annunciator/vertical-mode
+ VS
+
+
+
+ property-assign
+ /autopilot/vertical-mode-button
+
+
+
+
+
+ ALTS-ARM
+
+
+ property-assign
+ /autopilot/annunciator/vertical-mode-armed
+ ALTS
+
+
+
+ property-assign
+ /autopilot/vertical-mode-button
+
+
+
+
+
+ ALTS Capture
+
+
+ ALTS
+
+
+ /autopilot/internal/target-altitude-delta-ft
+ 500
+
+
+ /autopilot/internal/target-altitude-delta-ft
+ -500
+
+
+
+
+
+ ALTS
+
+ nasal
+
+
+
+ property-assign
+ /autopilot/annunciator/vertical-mode
+ ALTS
+
+
+ property-assign
+ /autopilot/annunciator/vertical-mode-armed
+ ALT
+
+
+ property-assign
+ /autopilot/locks/altitude
+ altitude-hold2
+
+
+
+ property-assign
+ /autopilot/vertical-mode-button
+
+
+
+
+
+
+ ALTS-ARM
+
+
+
+ ALTS-ARM
+
+
+
+ /sim/time/elapsed-sec
+ 0
+
+
+
+
+
+
+ ALTS-ALT
+
+ ALT
+
+
+ /autopilot/internal/ALTS-target-altitude-delta-ft
+ 50
+
+
+ /autopilot/internal/ALTS-target-altitude-delta-ft
+ -50
+
+
+
+
+
+ ALT
+
+ property-assign
+ /autopilot/annunciator/vertical-mode
+ ALT
+
+
+ property-assign
+ /autopilot/annunciator/vertical-mode-armed
+
+
+
+ nasal
+
+
+
+ property-assign
+ /autopilot/locks/altitude
+ altitude-hold2
+
+
+
+ property-assign
+ /autopilot/vertical-mode-button
+
+
+
+
+
+
+ OFF-PIT
+
+ PIT
+ true
+
+
+ /autopilot/vertical-mode-buttonAP
+ /autopilot/vertical-mode-buttonFD
+ /autopilot/vertical-mode-buttonCWS
+ /autopilot/vertical-mode-buttonNAV
+ /autopilot/vertical-mode-buttonBC
+ /autopilot/vertical-mode-buttonAPR
+ /autopilot/vertical-mode-buttonHDG
+
+
+
+
+
+
+ VS-PIT
+
+ PIT
+
+ /autopilot/vertical-mode-buttonVS
+
+
+
+
+ GA-PIT
+
+ PIT
+
+ /autopilot/vertical-mode-buttonGA
+
+
+
+
+
+
+
+ FD-Switch-off
+ OFF
+ true
+
+ /autopilot/annunciator/autopilot-enabled1
+ /autopilot/vertical-mode-buttonFD
+ /autopilot/locks/passive-mode1
+
+
+
+
+
+ VS
+ VS
+ true
+
+ /autopilot/vertical-mode-buttonVS
+
+
+
+
+
+ GA
+ GA
+ true
+
+ /autopilot/vertical-mode-buttonGA
+
+
+
+
+
+ ALT
+ ALT
+ true
+
+ /autopilot/vertical-mode-buttonALT
+
+
+ nasal
+
+
+
+
+
diff --git a/Aircraft/Instruments-3d/FG1000/GFC700.xml b/Aircraft/Instruments-3d/FG1000/GFC700.xml
new file mode 100644
index 000000000..251cfe0f0
--- /dev/null
+++ b/Aircraft/Instruments-3d/FG1000/GFC700.xml
@@ -0,0 +1,656 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ heading bug error computer/normalizer
+ false
+ gain
+
+ /autopilot/settings/heading-bug-deg
+
+ /orientation/heading-magnetic-deg
+ -1.0
+
+
+
+
+
+ -180
+ 180
+
+ 1.0
+
+
+
+ true heading error computer/normalizer
+ false
+ gain
+
+ /autopilot/settings/true-heading-deg
+
+ /orientation/heading-deg
+ -1.0
+
+
+
+
+ -180
+ 180
+
+ 1.0
+
+
+
+ nav1 heading error computer/normalizer
+ false
+ gain
+
+ /instrumentation/nav[0]/radials/target-auto-hdg-deg
+
+ /orientation/heading-deg
+ -1.0
+
+
+
+
+ -180
+ 180
+
+ 1.0
+
+
+
+ nav1 selected course error computer/normalizer
+ false
+ gain
+
+ /instrumentation/nav[0]/radials/selected-deg
+
+ /orientation/heading-magnetic-deg
+ -1.0
+
+
+
+
+ -180
+ 180
+
+ 1.0
+
+
+
+ vertical speed fpm computer
+ false
+ gain
+ /velocities/vertical-speed-fps
+
+ 60.0
+
+
+
+ speed in 5 seconds predictor
+ false
+ /velocities/airspeed-kt
+
+ 5.0
+ 0.0
+
+
+
+ speed in 10 seconds predictor
+ false
+ /velocities/airspeed-kt
+
+ 10.0
+ 0.0
+
+
+
+ static port pressure rate computer
+ false
+ derivative
+ /systems/static[0]/pressure-inhg
+
+ 1.0
+
+
+
+ nav1 track error computer
+ false
+ gain
+
+ /instrumentation/nav[0]/radials/target-auto-hdg-deg
+
+ orientation/track-deg
+ -1.0
+
+
+
+
+ -180
+ 180
+
+ 1.0
+
+
+
+ limited-pitch
+ false
+ gain
+
+ /instrumentation/attitude-indicator/indicated-pitch-deg
+
+ 1.0
+
+ -15.0
+ 20.0
+
+
+
+ limited-roll
+ false
+ gain
+
+ /instrumentation/attitude-indicator/indicated-roll-deg
+
+ 1.0
+
+ -22.0
+ 22.0
+
+
+
+ ALTS-delta
+ false
+ gain
+
+ /autopilot/settings/target-altitude-ft
+
+ /instrumentation/altimeter/indicated-altitude-ft-2
+ -1.0
+
+
+ 1.0
+
+
+
+
+
+
+
+ /autopilot/locks/passive-mode0
+
+ /autopilot/locks/heading
+ /autopilot/locks/altitude
+
+
+
+
+
+
+
+
+
+ /autopilot/locks/passive-mode1
+
+ /autopilot/locks/heading
+ /autopilot/locks/altitude
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Roll Hold
+ false
+
+
+
+
+
+ /autopilot/locks/heading
+ roll-hold
+
+
+ /autopilot/locks/heading
+ dg-heading-hold
+
+
+ /autopilot/locks/heading
+ nav1-hold
+
+
+
+ /autopilot/locks/passive-mode
+ 0
+
+
+
+ /autopilot/locks/control-wheel-steering
+ 1
+
+
+
+
+
+
+ /orientation/roll-deg
+
+
+ /autopilot/settings/target-roll-deg
+
+
+
+ 0.1
+ 1.0
+ 0.1
+ 0.0
+
+ 10.0
+ 0.00001 |
+ -1.0
+ 1.0
+
+
+
+
+
+
+
+
+ Heading Bug Hold (DG based) Stage 1
+ false
+
+ /autopilot/locks/heading
+ dg-heading-hold
+
+
+ /autopilot/internal/heading-bug-error-deg
+
+
+ 0.0
+
+
+
+ -1.0
+ 1.0
+ 0.1
+ 0.0
+
+ 10.0
+ 0.00001 |
+ -20.0
+ 20.0
+
+
+
+
+
+
+
+
+ True Heading Hold (DG based) Stage 1
+ false
+
+ /autopilot/locks/heading
+ true-heading-hold
+
+
+ /autopilot/internal/true-heading-error-deg
+
+
+ 0.0
+
+
+
+ -1.0
+ 1.0
+ 0.1
+ 0.0
+
+ 10.0
+ 0.00001 |
+ -20.0
+ 20.0
+
+
+
+
+
+
+
+
+ Nav1 Hold Stage 1
+ false
+
+ /autopilot/locks/heading
+ nav1-hold
+
+
+ /autopilot/internal/nav1-heading-error-deg
+
+
+ 0.0
+
+
+
+ -1.0
+ 1.0
+ 0.1
+ 0.0
+
+ 10.0
+ 0.00001 |
+ -20.0
+ 20.0
+
+
+
+
+
+
+
+
+
+ Pitch hold
+ false
+
+
+
+
+ /autopilot/locks/passive-mode
+ 0
+
+
+
+ /autopilot/locks/control-wheel-steering
+ 1
+
+
+
+
+
+ /autopilot/locks/altitude
+
+
+
+
+
+ /autopilot/locks/speed
+
+
+
+
+
+
+
+
+ /orientation/pitch-deg
+
+
+ /autopilot/settings/target-pitch-deg
+
+
+
+ -0.05
+ 1.0
+ 0.1
+ 0.0
+
+ 1.0
+ 0.00001 |
+ -1.0
+ 1.0
+
+
+
+
+
+ Altitude Hold (Altimeter based) Stage 2
+ false
+
+
+
+
+
+ /autopilot/locks/control-wheel-steering
+ 1
+
+
+
+
+ /autopilot/locks/altitude
+ altitude-hold
+
+
+ /autopilot/locks/altitude
+ altitude-hold2
+
+
+
+
+
+
+ /velocities/vertical-speed-fps
+
+
+ /autopilot/internal/target-climb-rate-fps
+
+
+
+ -0.01
+ 1.0
+ 0.1
+ 0.0
+
+ 10.0
+ 0.00001 |
+ -1.0
+ 1.0
+
+
+
+
+
+
+
+
+
+ Altitude Hold (Altimeter based) Stage 1
+ false
+
+
+
+ /autopilot/locks/altitude
+ altitude-hold
+
+
+
+
+ /position/altitude-ft
+
+
+ /autopilot/settings/target-altitude-ft
+
+
+
+ 0.3
+ 0.0
+ -16.67
+ 8.33
+
+
+
+
+
+
+
+
+ Altitude Hold (Altimeter based) Stage 1
+ false
+
+
+
+ /autopilot/locks/altitude
+ altitude-hold2
+
+
+
+
+ /position/altitude-ft
+
+
+ /autopilot/settings/target-altitude-ft-2
+
+
+
+ 0.3
+ 0.0
+ -16.67
+ 8.33
+
+
+
+
+
+
+
+ Glideslope Hold
+ false
+
+
+
+ /autopilot/locks/altitude
+ gs1-hold
+
+
+
+
+ /velocities/vertical-speed-fps
+
+
+ /instrumentation/nav[0]/gs-rate-of-climb
+
+
+
+ -0.01
+ 1.0
+ 0.1
+ 0.0
+
+ 10.0
+ 0.00001 |
+ -1.0
+ 1.0
+
+
+
+
+
+ Vertical Speed Hold
+ false
+
+
+
+ /autopilot/locks/altitude
+ vertical-speed-hold
+
+
+
+
+ /velocities/vertical-speed-fps
+
+
+ /autopilot/settings/vertical-speed-fpm
+ 0.01667
+
+
+
+ 0.1
+ 1.0
+ 0.1
+ 0.0
+
+ 1.0
+ 0.00001 |
+ -15.0
+ 15.0
+
+
+
+
+
+
+
+
+
+ Speed hold (vary pitch trim) Stage #1
+ false
+
+
+
+ /autopilot/locks/speed
+ speed-with-pitch-trim
+
+
+
+
+ /autopilot/internal/lookahead-5-sec-airspeed-kt
+
+
+ /autopilot/settings/target-speed-kt
+
+
+
+ -1.0
+ 1.0
+ 0.1
+ 0.0
+
+ 1.0
+ 0.00001 |
+ -15.0
+ 15.0
+
+
+
+
diff --git a/Aircraft/Instruments-3d/FG1000/MFDPages/PFDInstruments.svg b/Aircraft/Instruments-3d/FG1000/MFDPages/PFDInstruments.svg
index 26bd7d5fc..1fd96d535 100644
--- a/Aircraft/Instruments-3d/FG1000/MFDPages/PFDInstruments.svg
+++ b/Aircraft/Instruments-3d/FG1000/MFDPages/PFDInstruments.svg
@@ -24,11 +24,11 @@
borderopacity="1"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
- inkscape:zoom="3.7187502"
- inkscape:cx="505.11063"
- inkscape:cy="193.43835"
+ inkscape:zoom="2.6295535"
+ inkscape:cx="378.97168"
+ inkscape:cy="351.68237"
inkscape:document-units="px"
- inkscape:current-layer="svg3140"
+ inkscape:current-layer="PFDInstrumentsBankPoint"
showgrid="false"
showguides="false"
inkscape:guide-bbox="true"
@@ -2473,41 +2473,6 @@
style="display:inline;opacity:1"
inkscape:label="BankPoint"
id="PFDInstrumentsBankPoint">
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+ style="display:inline">
D
+
+
+
+
+
+
+
+
+ style="display:inline"
+ sodipodi:insensitive="true">
.
+#
+# Emesary interface to set autopilot configuration.
+#
+
+var GFC700Interface = {
+
+new : func ()
+{
+ var obj = { parents : [ GFC700Interface ] };
+
+ # Emesary
+ obj._recipient = nil;
+ obj._transmitter = emesary.GlobalTransmitter;
+ obj._registered = 0;
+
+ obj._vertical_mode = globals.props.getNode("/autopilot/annunciator/vertical-mode", 1);
+ obj._pitch_setting = globals.props.getNode("/autopilot/settings/target-pitch-deg", 1);
+ obj._climb_setting = globals.props.getNode("/autopilot/settings/vertical-speed-fpm", 1);
+ obj._speed_setting = globals.props.getNode("/autopilot/settings/target-speed-kt", 1);
+
+ # State variables
+ obj._vertical_mode_button = globals.props.getNode("/autopilot/vertical-mode-button", 1);
+ obj._lateral_mode_button = globals.props.getNode("/autopilot/lateral-mode-button", 1);
+ obj._ap_mode_button = globals.props.getNode("/autopilot/AP-mode-button", 1);
+ obj._ap_enabled = globals.props.getNode("/autopilot/annunciator/autopilot-enabled", 1);;
+ obj._fd_enabled = globals.props.getNode("/autopilot/annunciator/flight-director-enabled", 1);;
+
+ return obj;
+},
+
+# Under the covers there are 3 FSMs, two of which run in parallel, and need
+# separate input channels.
+sendModeChange : func(value) {
+ me._vertical_mode_button.setValue(value);
+ me._lateral_mode_button.setValue(value);
+ if (value == "AP") {
+ me._ap_mode_button.setValue("AP");
+ }
+ return emesary.Transmitter.ReceiptStatus_Finished;
+},
+
+handleNoseUpDown : func(value) {
+ var vertical_mode = me._vertical_mode.getValue();
+
+ if (vertical_mode == "PIT") {
+ me._pitch_setting.setValue(me._pitch_setting.getValue() + (value * 1));
+ }
+
+ if (vertical_mode == "VS") {
+ me._climb_setting.setValue(me._climb_setting.getValue() + (value * 100));
+ setprop("/autopilot/annunciator/vertical-mode-target",
+ sprintf("%+ifpm", me._climb_setting.getValue())
+ );
+ }
+
+ if (vertical_mode == "FLC") {
+ me._speed_setting.setValue(me._speed_setting.getValue() + (value * 1));
+ }
+
+ return emesary.Transmitter.ReceiptStatus_Finished;
+},
+
+RegisterWithEmesary : func()
+{
+ if (me._recipient == nil){
+ me._recipient = emesary.Recipient.new("AutopilotInterface");
+ var controller = me;
+
+ # Note that unlike the various keys, this data isn't specific to a particular
+ # Device - it's shared by all. Hence we don't check for the notificaiton
+ # Device_Id.
+ me._recipient.Receive = func(notification)
+ {
+
+ if (notification.NotificationType == notifications.PFDEventNotification.DefaultType and
+ notification.Event_Id == notifications.PFDEventNotification.HardKeyPushed and
+ notification.EventParameter != nil)
+ {
+ var id = notification.EventParameter.Id;
+ var value = notification.EventParameter.Value;
+
+ if (id == fg1000.FASCIA.AP ) return controller.sendModeChange("AP");
+ if (id == fg1000.FASCIA.HDG) return controller.sendModeChange("HDG");
+ if (id == fg1000.FASCIA.NAV) return controller.sendModeChange("NAV");
+ if (id == fg1000.FASCIA.APR) return controller.sendModeChange("APR");
+ if (id == fg1000.FASCIA.VS ) return controller.sendModeChange("VS");
+ if (id == fg1000.FASCIA.FLC) return controller.sendModeChange("FLC");
+ if (id == fg1000.FASCIA.FD ) return controller.sendModeChange("FD");
+ if (id == fg1000.FASCIA.ALT) return controller.sendModeChange("ALT");
+ if (id == fg1000.FASCIA.VNV) return controller.sendModeChange("VNV");
+ if (id == fg1000.FASCIA.BC ) controller.sendModeChange("BC");
+ if (id == fg1000.FASCIA.NOSE_UP) return controller.handleNoseUpDown(1);
+ if (id == fg1000.FASCIA.NOSE_DOWN) return controller.handleNoseUpDown(-1);
+ }
+ return emesary.Transmitter.ReceiptStatus_NotProcessed;
+ };
+ }
+
+ me._transmitter.Register(me._recipient);
+ me._registered = 1;
+},
+
+DeRegisterWithEmesary : func()
+{
+ # remove registration from transmitter; but keep the recipient once it is created.
+ if (me._registered == 1) me._transmitter.DeRegister(me._recipient);
+ me._registered = 0;
+},
+
+
+start : func() {
+ me.RegisterWithEmesary();
+},
+stop : func() {
+ me.DeRegisterWithEmesary();
+},
+
+};
diff --git a/Aircraft/Instruments-3d/FG1000/Nasal/Interfaces/GFC700Publisher.nas b/Aircraft/Instruments-3d/FG1000/Nasal/Interfaces/GFC700Publisher.nas
new file mode 100644
index 000000000..91e75c9f2
--- /dev/null
+++ b/Aircraft/Instruments-3d/FG1000/Nasal/Interfaces/GFC700Publisher.nas
@@ -0,0 +1,41 @@
+# Copyright 2019 Stuart Buchanan
+# This file is part of FlightGear.
+#
+# FlightGear is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# FlightGear is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with FlightGear. If not, see .
+#
+# Emesary interface to publish autopilot configuration.
+#
+
+var GFC700Publisher = {
+
+new : func ()
+{
+ var obj = { parents : [
+ GFC700Publisher,
+ TriggeredPropertyPublisher.new(notifications.PFDEventNotification.FMSData) ] };
+
+ obj.addPropMap("AutopilotEnabled", "/autopilot/annunciator/autopilot-enabled");
+ obj.addPropMap("AutopilotFDEnabled", "/autopilot/annunciator/flight-director-enabled");
+ obj.addPropMap("AutopilotHeadingMode", "/autopilot/annunciator/lateral-mode");
+ obj.addPropMap("AutopilotHeadingModeArmed", "/autopilot/annunciator/lateral-mode-armed");
+ obj.addPropMap("AutopilotAltitudeMode", "/autopilot/annunciator/vertical-mode");
+ obj.addPropMap("AutopilotAltitudeModeArmed", "/autopilot/annunciator/vertical-mode-armed");
+ obj.addPropMap("AutopilotTargetPitch", "/autopilot/settings/target-pitch-deg");
+ obj.addPropMap("AutopilotTargetRoll", "/autopilot/settings/target-roll-deg");
+ obj.addPropMap("AutopilotTargetVertical", "/autopilot/annunciator/vertical-mode-target");
+
+ return obj;
+},
+
+};
diff --git a/Aircraft/Instruments-3d/FG1000/Nasal/Interfaces/GenericInterfaceController.nas b/Aircraft/Instruments-3d/FG1000/Nasal/Interfaces/GenericInterfaceController.nas
index 27b3ffab0..47c47bd45 100644
--- a/Aircraft/Instruments-3d/FG1000/Nasal/Interfaces/GenericInterfaceController.nas
+++ b/Aircraft/Instruments-3d/FG1000/Nasal/Interfaces/GenericInterfaceController.nas
@@ -17,9 +17,9 @@
# Generic Interface controller.
var nasal_dir = getprop("/sim/fg-root") ~ "/Aircraft/Instruments-3d/FG1000/Nasal/";
-io.load_nasal(nasal_dir ~ 'Interfaces/NavDataInterface.nas', "fg1000");
io.load_nasal(nasal_dir ~ 'Interfaces/PropertyPublisher.nas', "fg1000");
io.load_nasal(nasal_dir ~ 'Interfaces/PropertyUpdater.nas', "fg1000");
+io.load_nasal(nasal_dir ~ 'Interfaces/NavDataInterface.nas', "fg1000");
io.load_nasal(nasal_dir ~ 'Interfaces/GenericEISPublisher.nas', "fg1000");
io.load_nasal(nasal_dir ~ 'Interfaces/GenericNavComPublisher.nas', "fg1000");
io.load_nasal(nasal_dir ~ 'Interfaces/GenericNavComUpdater.nas', "fg1000");
@@ -28,11 +28,26 @@ io.load_nasal(nasal_dir ~ 'Interfaces/GenericFMSUpdater.nas', "fg1000");
io.load_nasal(nasal_dir ~ 'Interfaces/GenericADCPublisher.nas', "fg1000");
io.load_nasal(nasal_dir ~ 'Interfaces/GenericFuelInterface.nas', "fg1000");
io.load_nasal(nasal_dir ~ 'Interfaces/GenericFuelPublisher.nas', "fg1000");
+io.load_nasal(nasal_dir ~ 'Interfaces/GFC700Interface.nas', "fg1000");
var GenericInterfaceController = {
_instance : nil,
+ INTERFACE_LIST : [
+ "NavDataInterface",
+ "GenericEISPublisher",
+ "GenericNavComPublisher",
+ "GenericNavComUpdater",
+ "GenericFMSPublisher",
+ "GenericFMSUpdater",
+ "GenericADCPublisher",
+ "GenericFuelInterface",
+ "GenericFuelPublisher",
+ "GFC700Publisher",
+ "GFC700Interface",
+ ],
+
# Factory method
getOrCreateInstance : func() {
if (GenericInterfaceController._instance == nil) {
@@ -48,42 +63,44 @@ var GenericInterfaceController = {
running : 0,
};
- obj.eisPublisher = fg1000.GenericEISPublisher.new();
- obj.navcomPublisher = fg1000.GenericNavComPublisher.new();
- obj.navcomUpdater = fg1000.GenericNavComUpdater.new();
- obj.navdataInterface = fg1000.NavDataInterface.new();
- obj.gpsPublisher = fg1000.GenericFMSPublisher.new();
- obj.gpsUpdater = fg1000.GenericFMSUpdater.new();
- obj.adcPublisher = fg1000.GenericADCPublisher.new();
- obj.fuelPublisher = fg1000.GenericFuelPublisher.new();
- obj.fuelInterface = fg1000.GenericFuelInterface.new();
-
return obj;
},
start : func() {
if (me.running) return;
- me.eisPublisher.start();
- me.navcomPublisher.start();
- me.navcomUpdater.start();
- me.navdataInterface.start();
- me.gpsPublisher.start();
- me.gpsUpdater.start();
- me.adcPublisher.start();
- me.fuelPublisher.start();
- me.fuelInterface.start();
+
+ # Reload the interfaces afresh to make development easier. In normal
+ # usage this interface will only be started once anyway.
+ foreach (var interface; GenericInterfaceController.INTERFACE_LIST) {
+ io.load_nasal(nasal_dir ~ 'Interfaces/' ~ interface ~ '.nas', "fg1000");
+ var code = sprintf("me.%sInstance = fg1000.%s.new();", interface, interface);
+ var instantiate = compile(code);
+ instantiate();
+ }
+
+ foreach (var interface; GenericInterfaceController.INTERFACE_LIST) {
+ io.load_nasal(nasal_dir ~ 'Interfaces/' ~ interface ~ '.nas', "fg1000");
+ var code = 'me.' ~ interface ~ 'Instance.start();';
+ var start_interface = compile(code);
+ start_interface();
+ }
+
+ me.running = 1;
},
stop : func() {
if (me.running == 0) return;
- me.eisPublisher.stop();
- me.navcomPublisher.stop();
- me.navcomUpdater.stop();
- me.navdataInterface.stop();
- me.gpsPublisher.stop();
- me.gpsUpdater.stop();
- me.adcPublisher.stop();
- me.fuelPublisher.stop();
- me.fuelInterface.stop();
+
+ foreach (var interface; GenericInterfaceController.INTERFACE_LIST) {
+ io.load_nasal(nasal_dir ~ 'Interfaces/' ~ interface ~ '.nas', "fg1000");
+ var code = 'me.' ~ interface ~ 'Instance.stop();';
+ var stop_interface = compile(code);
+ stop_interface();
+ }
},
+
+ restart : func() {
+ me.stop();
+ me.start();
+ }
};
diff --git a/Aircraft/Instruments-3d/FG1000/Nasal/MFDPages/PFDInstruments/PFDInstruments.nas b/Aircraft/Instruments-3d/FG1000/Nasal/MFDPages/PFDInstruments/PFDInstruments.nas
index 5c44b03f0..fb8591bef 100644
--- a/Aircraft/Instruments-3d/FG1000/Nasal/MFDPages/PFDInstruments/PFDInstruments.nas
+++ b/Aircraft/Instruments-3d/FG1000/Nasal/MFDPages/PFDInstruments/PFDInstruments.nas
@@ -44,6 +44,7 @@ var PFDInstruments =
_OMI : "",
_Multiline : 0,
_annunciation : 0,
+ _fd_enabled : 1, # Mark the Flight Director as enabled, as it is visible in the SVG.
};
# Hide various elements for the moment. TODO - implement
@@ -136,7 +137,7 @@ var PFDInstruments =
pg.clearMenu();
pg.resetMenuColors();
- pg.addMenuItem(0, "OFF", pg, func(dev, pg, mi) { pg.setInsetMapVisible(0); }); # TODO
+ pg.addMenuItem(0, "OFF", pg, func(dev, pg, mi) { pg.setInsetMapVisible(0); pg.mfd.PFDInstruments.topMenu(dev, pg, mi); } );
pg.addMenuItem(1, "DCLTR", pg,
func(dev, pg, mi) { pg.insetMap.incrDCLTR(dev, mi); device.updateMenus(); },
func(svg, mi) { pg.displayDCLTR(svg, mi); },
@@ -327,6 +328,25 @@ var PFDInstruments =
.setTranslation(slip * 10, 0);
},
+ updateFD : func(enabled, pitch, roll, fd_pitch, fd_roll) {
+ if (enabled) {
+ me.getElement("FlightDirector")
+ .setCenter(459,282.8)
+ .setRotation(-(roll - fd_roll) * D2R)
+ .setTranslation(0, -(fd_pitch - pitch) * 6.849)
+ .setVisible(1);
+ me._fd_enabled = 1;
+ } else if (me._fd_enabled == 1) {
+ me.getElement("FlightDirector").setVisible(0);
+ me._fd_enabled = 0;
+ }
+
+ # Overrides - command bars disappear if pitch exceeeds -20/+30, roll 65
+ if ((pitch < -20.0) or (pitch > 30.0) or (roll < -65.0) or (roll > 65.0)) {
+ me.getElement("FlightDirector").setVisible(0);
+ }
+ },
+
updateIAS: func (ias, ias_trend) {
if (ias >= 10) {
me.setTextElement("Speed110", sprintf("% 2u",num(math.floor(ias/10))));
diff --git a/Aircraft/Instruments-3d/FG1000/Nasal/MFDPages/PFDInstruments/PFDInstrumentsController.nas b/Aircraft/Instruments-3d/FG1000/Nasal/MFDPages/PFDInstruments/PFDInstrumentsController.nas
index 3db0c5ec0..ba0d165e0 100644
--- a/Aircraft/Instruments-3d/FG1000/Nasal/MFDPages/PFDInstruments/PFDInstrumentsController.nas
+++ b/Aircraft/Instruments-3d/FG1000/Nasal/MFDPages/PFDInstruments/PFDInstrumentsController.nas
@@ -1,4 +1,3 @@
-
# Copyright 2018 Stuart Buchanan
# This file is part of FlightGear.
#
@@ -41,6 +40,11 @@ var PFDInstrumentsController =
_mag_var : 0,
_time_sec : 0,
+ _fd_pitch : 0,
+ _fd_roll : 0,
+ _fd_enabled : 0,
+ _ap_enabled : 0,
+
_fp_active : 0,
_fp_current_wp : 0,
_current_flightplan : nil,
@@ -227,6 +231,7 @@ var PFDInstrumentsController =
var roll = data["ADCRollDeg"];
var slip = data["ADCSlipSkid"];
me.page.updateAI(pitch, roll, slip);
+ me.page.updateFD((me._fd_enabled or me._ap_enabled), pitch, roll, me._fd_pitch, me._fd_roll);
me.page.updateVSI(data["ADCVerticalSpeedFPM"]);
me.page.updateTAS(data["ADCTrueAirspeed"]);
@@ -281,6 +286,12 @@ var PFDInstrumentsController =
if (data["FMSLegCourseError"] != nil) me._deflection_dots = data["FMSLegCourseError"] /2.0;
if (data["FMSLegCourseError"] != nil) me._leg_xtrk_nm = data["FMSLegCourseError"];
+ if (data["AutopilotFDEnabled"] != nil) me._fd_enabled = data["AutopilotFDEnabled"];
+ if (data["AutopilotEnabled"] != nil) me._ap_enabled = data["AutopilotEnabled"];
+
+ if (data["AutopilotTargetPitch"] != nil) me._fd_pitch = data["AutopilotTargetPitch"];
+ if (data["AutopilotTargetRoll"] != nil) me._fd_roll = data["AutopilotTargetRoll"];
+
var update_fp = 0;
if (data["FMSFlightPlanEdited"] != nil) {
diff --git a/Aircraft/Instruments-3d/FG1000/Nasal/MFDPages/Surround/Surround.nas b/Aircraft/Instruments-3d/FG1000/Nasal/MFDPages/Surround/Surround.nas
index e1e948a73..d345bafaa 100644
--- a/Aircraft/Instruments-3d/FG1000/Nasal/MFDPages/Surround/Surround.nas
+++ b/Aircraft/Instruments-3d/FG1000/Nasal/MFDPages/Surround/Surround.nas
@@ -75,6 +75,16 @@ var HEADER_MAPPING = {
"VSR" : { message : "FMSLegVerticalSpeedRequired", format : "%dfpm"}, # TODO
};
+# Style element use for the AP Status indicator. This is normally green text
+# on a black background, but is highlighted when disengaged as black text on a yellow
+# background for 5 seconds.
+var AP_STATUS_STYLE = {
+ CURSOR_BLINK_PERIOD : 0.5,
+ HIGHLIGHT_COLOR : "#ffff00",
+ HIGHLIGHT_TEXT_COLOR : "#000000",
+ NORMAL_TEXT_COLOR : "#00ff00",
+};
+
var Surround =
{
new : func (mfd, myCanvas, device, svg, pfd=0)
@@ -98,6 +108,9 @@ var Surround =
if (pfd) {
obj.addTextElements(["HeaderFrom", "HeaderTo", "LegDistance", "LegBRG"]);
+ obj.addTextElements(["HeaderAPLateralArmed", "HeaderAPLateralActive", "HeaderAPVerticalArmed", "HeaderAPVerticalActive", "HeaderAPVerticalReference"]);
+ obj._apStatus = PFD.TextElement.new(obj.pageName, svg, "HeaderAPStatus", "", AP_STATUS_STYLE);
+ obj._apStatusTimer = nil;
obj._dto = PFD.HighlightElement.new(obj.pageName, svg, "HeaderDTO", "DTO");
obj._leg = PFD.HighlightElement.new(obj.pageName, svg, "HeaderActiveLeg", "Leg");
} else {
@@ -254,6 +267,35 @@ var Surround =
}
}
+ if (data["AutopilotHeadingMode"] != nil) me.setTextElement("HeaderAPLateralActive", data["AutopilotHeadingMode"]);
+ if (data["AutopilotHeadingModeArmed"] != nil) me.setTextElement("HeaderAPLateralArmed", data["AutopilotHeadingModeArmed"]);
+ if (data["AutopilotAltitudeMode"] != nil) me.setTextElement("HeaderAPVerticalActive", data["AutopilotAltitudeMode"]);
+ if (data["AutopilotAltitudeModeArmed"] != nil) me.setTextElement("HeaderAPVerticalArmed", data["AutopilotAltitudeModeArmed"]);
+
+ if (data["AutopilotEnabled"] != nil) {
+ if (data["AutopilotEnabled"] == 1) {
+ me._apStatus.setValue("AP");
+ if (me._apStatusTimer != nil) {
+ # We were previously flashing, so stop.
+ me._apStatusTimer.stop();
+ me._apStatusTimer = nil;
+ me._apStatus.unhighlightElement();
+ }
+ } else {
+ if ((me._apStatus.getValue() != "") and (me._apStatus.isHighlighted() == 0)) {
+ # We were previously enabled, so we want to make the AP Status element
+ # flash for 5 seconds before removing it. The highlightElement()
+ # starts it flashing, and we use a timer to stop it.
+ me._apStatus.highlightElement();
+ if (me._apStatusTimer == nil) me._apStatusTimer =
+ maketimer(5.0, me, func() { me._apStatus.unhighlightElement(); me._apStatus.setValue(""); } );
+ me._apStatusTimer.singleShot = 1;
+ me._apStatusTimer.restart(5.0);
+ }
+ }
+ }
+
+ if (data["AutopilotTargetVertical"] != nil) me.setTextElement("HeaderAPVerticalReference", data["AutopilotTargetVertical"]);
if (data["FMSLegDesiredTrack"]) me.setTextElement("LegBRG", sprintf("%i°", data["FMSLegDesiredTrack"]));
if (data["FMSLegDistanceNM"]) me.setTextElement("LegDistance", sprintf("%.1fnm", data["FMSLegDistanceNM"]));
} else {
diff --git a/Aircraft/Instruments-3d/FG1000/Nasal/NavMap.nas b/Aircraft/Instruments-3d/FG1000/Nasal/NavMap.nas
index 816bf49d2..f45a2a9e8 100644
--- a/Aircraft/Instruments-3d/FG1000/Nasal/NavMap.nas
+++ b/Aircraft/Instruments-3d/FG1000/Nasal/NavMap.nas
@@ -254,7 +254,7 @@ var NavMap = {
{
var incr_or_decr = (val > 0) ? 1 : -1;
me.setZoom(me._current_zoom + incr_or_decr);
- return emesary.Transmitter.ReceiptStatus_Finished;
+ return emesary.Transmitter.ReceiptStatus_OK;
},
getMap : func() {
diff --git a/Nasal/canvas/PFD/TextElement.nas b/Nasal/canvas/PFD/TextElement.nas
index 37ec05243..85ecf3b73 100644
--- a/Nasal/canvas/PFD/TextElement.nas
+++ b/Nasal/canvas/PFD/TextElement.nas
@@ -63,6 +63,7 @@ var TextElement =
},
isEditable : func () { return 0; },
isInEdit : func() { return 0; },
+ isHighlighted : func() { return me._highlightEnabled; },
enterElement : func() { return me.getValue(); },
clearElement : func() { },
editElement : func() { },