Fix highlighting of arrow elements
This commit is contained in:
parent
4c3c5cde63
commit
67b95bb1fe
8 changed files with 107 additions and 86 deletions
|
@ -166,22 +166,22 @@ var NavigationMap =
|
|||
pg.clearMenu();
|
||||
pg.resetMenuColors();
|
||||
pg.addMenuItem(0, "TRAFFIC", pg,
|
||||
func(dev, pg, mi) { pg.getController().toggleLayer("TFC"); device.updateMenus(); }, # callback
|
||||
func(dev, pg, mi) { pg.mfd.NavigationMap.getController().toggleLayer("TFC"); device.updateMenus(); }, # callback
|
||||
func(svg, mi) { pg.mfd.NavigationMap.display_toggle(device, svg, mi, "TFC"); }
|
||||
);
|
||||
|
||||
pg.addMenuItem(1, "PROFILE", pg);
|
||||
pg.addMenuItem(2, "TOPO", pg,
|
||||
func(dev, pg, mi) { pg.getController().toggleLayer("STAMEN"); device.updateMenus(); }, # callback
|
||||
func(dev, pg, mi) { pg.mfd.NavigationMap.getController().toggleLayer("STAMEN"); device.updateMenus(); }, # callback
|
||||
func(svg, mi) { pg.mfd.NavigationMap.display_toggle(device, svg, mi, "STAMEN"); }
|
||||
);
|
||||
|
||||
pg.addMenuItem(3, "TERRAIN", pg,
|
||||
func(dev, pg, mi) { pg.getController().toggleLayer("STAMEN_terrain"); device.updateMenus(); }, # callback
|
||||
func(dev, pg, mi) { pg.mfd.NavigationMap.getController().toggleLayer("STAMEN_terrain"); device.updateMenus(); }, # callback
|
||||
func(svg, mi) { pg.mfd.NavigationMap.display_toggle(device, svg, mi, "STAMEN_terrain"); }
|
||||
);
|
||||
|
||||
pg.addMenuItem(4, "AIRWAYS", pg, func(dev, pg, mi) { pg.getController().incrAIRWAYS(dev, mi); } );
|
||||
pg.addMenuItem(4, "AIRWAYS", pg, func(dev, pg, mi) { pg.mfd.NavigationMap.getController().incrAIRWAYS(dev, mi); } );
|
||||
#pg.addMenuItem(5, "STRMSCP", pg); Optional
|
||||
#pg.addMenuItem(6, "PRECIP", pg); Optional, or NEXRAD
|
||||
#pg.addMenuItem(7, "XM LTNG", pg); Optional, or DL LTNG
|
||||
|
|
|
@ -93,6 +93,7 @@ var NearestAirports =
|
|||
|
||||
# Clear any cursor, highlights. Used when exiting from CRSR mode
|
||||
resetCRSR : func() {
|
||||
me.airportSelect.hideCRSR();
|
||||
me.runwaySelect.unhighlightElement();
|
||||
me.freqSelect.hideCRSR();
|
||||
me.approachSelect.hideCRSR();
|
||||
|
@ -144,9 +145,9 @@ var NearestAirports =
|
|||
|
||||
if (size(airportlist) > 0) {
|
||||
me.updateAirportData(apts[0]);
|
||||
me.airportSelect.showCRSR();
|
||||
#me.airportSelect.showCRSR();
|
||||
} else {
|
||||
me.airportSelect.hideCRSR();
|
||||
#me.airportSelect.hideCRSR();
|
||||
me.setTextElement("Name", "NONE WITHIN 200NM");
|
||||
me.setTextElement("Alt", "");
|
||||
}
|
||||
|
|
|
@ -38,8 +38,7 @@ var NearestAirportsController =
|
|||
},
|
||||
selectGroup : func(grp) {
|
||||
me._currentGroup = grp;
|
||||
# The current Airport is always highlighted - we're either changing it directly,
|
||||
# or viewing the selected airport.
|
||||
if (grp == NearestAirportsController.UIGROUP.APT) me.page.airportSelect.showCRSR() else me.page.airportSelect.hideCRSR();
|
||||
if (grp == NearestAirportsController.UIGROUP.RNWY) me.page.runwaySelect.highlightElement() else me.page.runwaySelect.unhighlightElement();
|
||||
if (grp == NearestAirportsController.UIGROUP.FREQ) me.page.freqSelect.showCRSR() else me.page.freqSelect.hideCRSR();
|
||||
if (grp == NearestAirportsController.UIGROUP.APR) me.page.approachSelect.showCRSR() else me.page.approachSelect.hideCRSR();
|
||||
|
@ -68,7 +67,7 @@ var NearestAirportsController =
|
|||
var apt_id = me.page.getSelectedAirportID();
|
||||
|
||||
var aptdata = me.getAirport(apt_id);
|
||||
if (aptdata != nil) me.page.updateAirportData(aptdata);
|
||||
me.page.updateAirportData(aptdata);
|
||||
}
|
||||
|
||||
if (me._currentGroup == NearestAirportsController.UIGROUP.RNWY) {
|
||||
|
@ -203,7 +202,12 @@ var NearestAirportsController =
|
|||
var response = me._transmitter.NotifyAll(notification);
|
||||
|
||||
if (! me._transmitter.IsFailed(response)) {
|
||||
return notification.EventParameter.Value;
|
||||
var apt_list = notification.EventParameter.Value;
|
||||
if ((apt_list != nil) and (size(apt_list) > 0)) {
|
||||
return apt_list[0];
|
||||
} else {
|
||||
return nil;
|
||||
}
|
||||
} else {
|
||||
return nil;
|
||||
}
|
||||
|
|
|
@ -48,6 +48,14 @@ var NearestIntersections =
|
|||
svg.setVisible(1); # display function
|
||||
},
|
||||
|
||||
showCRSR : func() {
|
||||
me.select.showCRSR();
|
||||
},
|
||||
|
||||
hideCRSR : func() {
|
||||
me.select.hideCRSR();
|
||||
},
|
||||
|
||||
offdisplay : func() {
|
||||
# The Nearest... pages use the underlying navigation map.
|
||||
me.mfd.NavigationMap.offdisplayPartial();
|
||||
|
@ -93,9 +101,7 @@ var NearestIntersections =
|
|||
|
||||
if (size(navDataList) > 0) {
|
||||
me.updateNavDataItem(navdata[0]);
|
||||
me.select.showCRSR();
|
||||
} else {
|
||||
me.select.hideCRSR();
|
||||
me.setTextElement("Lat", "NONE WITHIN 200NM");
|
||||
me.setTextElement("VORID", "");
|
||||
me.setTextElement("VORFreq", "");
|
||||
|
@ -144,8 +150,8 @@ var NearestIntersections =
|
|||
topMenu : func(device, pg, menuitem) {
|
||||
pg.clearMenu();
|
||||
pg.resetMenuColors();
|
||||
pg.addMenuItem(0, "ENGINE", pg, pg.mfd.EIS.engineMenu);
|
||||
pg.addMenuItem(2, "MAP", pg, pg.mfd.NavigationMap.mapMenu);
|
||||
pg.addMenuItem(0, "ENGINE", pg.mfd.EIS, pg.mfd.EIS.engineMenu);
|
||||
pg.addMenuItem(2, "MAP", pg.mfd.NavigationMap, pg.mfd.NavigationMap.mapMenu);
|
||||
|
||||
device.updateMenus();
|
||||
},
|
||||
|
|
|
@ -1,53 +1,25 @@
|
|||
# NearestIntersections Controller
|
||||
var NearestIntersectionsController =
|
||||
{
|
||||
UIGROUP : {
|
||||
NONE : 0, # No group currently selected,
|
||||
APT : 1,
|
||||
RNWY : 2,
|
||||
FREQ : 3,
|
||||
APR : 4,
|
||||
},
|
||||
|
||||
new : func (page, svg)
|
||||
{
|
||||
var obj = { parents : [ NearestIntersectionsController, MFDPageController.new(page) ] };
|
||||
|
||||
# Current active UI group.
|
||||
obj.page = page;
|
||||
obj._crsrToggle = 0;
|
||||
|
||||
return obj;
|
||||
},
|
||||
|
||||
selectAirports : func() {
|
||||
me.selectGroup(NearestAirportsController.UIGROUP.APT)
|
||||
},
|
||||
selectRunways : func() {
|
||||
me.selectGroup(NearestAirportsController.UIGROUP.RNWY);
|
||||
},
|
||||
selectFrequencies : func() {
|
||||
me.selectGroup(NearestAirportsController.UIGROUP.FREQ);
|
||||
},
|
||||
selectApproaches : func() {
|
||||
me.selectGroup(NearestAirportsController.UIGROUP.APR);
|
||||
},
|
||||
getSelectedGroup : func() {
|
||||
return me._currentGroup;
|
||||
},
|
||||
selectGroup : func(grp) {
|
||||
me._currentGroup = grp;
|
||||
# The current Airport is always highlighted - we're either changing it directly,
|
||||
# or viewing the selected airport.
|
||||
if (grp == NearestAirportsController.UIGROUP.RNWY) me.page.runwaySelect.highlightElement() else me.page.runwaySelect.unhighlightElement();
|
||||
if (grp == NearestAirportsController.UIGROUP.FREQ) me.page.freqSelect.showCRSR() else me.page.freqSelect.hideCRSR();
|
||||
if (grp == NearestAirportsController.UIGROUP.APR) me.page.approachSelect.showCRSR() else me.page.approachSelect.hideCRSR();
|
||||
me._crsrToggle = 1;
|
||||
},
|
||||
|
||||
# Input Handling
|
||||
handleCRSR : func() {
|
||||
me._crsrToggle = (! me._crsrToggle);
|
||||
if (me._crsrToggle) {
|
||||
me.page.showCRSR();
|
||||
} else {
|
||||
me.page.hideCRSR();
|
||||
}
|
||||
|
||||
return emesary.Transmitter.ReceiptStatus_Finished;
|
||||
},
|
||||
handleFMSInner : func(value) {
|
||||
|
@ -92,13 +64,14 @@ var NearestIntersectionsController =
|
|||
me.page.mfd.NavigationMap.getController().handleRange(val);
|
||||
},
|
||||
|
||||
|
||||
# Reset controller if required when the page is displayed or hidden
|
||||
ondisplay : func() {
|
||||
me.RegisterWithEmesary();
|
||||
var fixes = me.getNearestNavData("fix");
|
||||
me.page.updateNavData(fixes);
|
||||
me.page.mfd.NavigationMap.getController().enableDTO(1);
|
||||
me._crsrToggle = 0;
|
||||
me.page.hideCRSR();
|
||||
},
|
||||
offdisplay : func() {
|
||||
me.page.mfd.NavigationMap.getController().enableDTO(0);
|
||||
|
|
|
@ -138,9 +138,9 @@ var Surround =
|
|||
if (name == "Comm1StandbyFreq") me.setTextElement("Comm1StandbyFreq", sprintf("%0.03f", val));
|
||||
if (name == "Comm1Serviceable") {
|
||||
if (val == 1) {
|
||||
me._comm1failed.unhighlightElement()
|
||||
me._comm1failed.setVisible(0);
|
||||
} else {
|
||||
me._comm1failed.highlightElement();
|
||||
me._comm1failed.setVisible(1);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -148,19 +148,19 @@ var Surround =
|
|||
if (name == "Comm2StandbyFreq") me.setTextElement("Comm2StandbyFreq", sprintf("%0.03f", val));
|
||||
if (name == "Comm2Serviceable") {
|
||||
if (val == 1) {
|
||||
me._comm2failed.unhighlightElement();
|
||||
me._comm2failed.setVisible(0);
|
||||
} else {
|
||||
me._comm2failed.highlightElement();
|
||||
me._comm2failed.setVisible(1);
|
||||
}
|
||||
}
|
||||
|
||||
if (name == "CommSelected") {
|
||||
if (val == 1) {
|
||||
me._comm1selected.highlightElement();
|
||||
me._comm2selected.unhighlightElement();
|
||||
me._comm1selected.setVisible(1);
|
||||
me._comm2selected.setVisible(0);
|
||||
} else {
|
||||
me._comm1selected.unhighlightElement();
|
||||
me._comm2selected.highlightElement();
|
||||
me._comm1selected.setVisible(0);
|
||||
me._comm2selected.setVisible(1);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -168,9 +168,9 @@ var Surround =
|
|||
if (name == "Nav1StandbyFreq") me.setTextElement("Nav1StandbyFreq", sprintf("%0.03f", val));
|
||||
if (name == "Nav1Serviceable") {
|
||||
if (val == 1) {
|
||||
me._nav1failed.unhighlightElement();
|
||||
me._nav1failed.setVisible(0);
|
||||
} else {
|
||||
me._nav1failed.highlightElement();
|
||||
me._nav1failed.setVisible(1);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -178,19 +178,19 @@ var Surround =
|
|||
if (name == "Nav2StandbyFreq") me.setTextElement("Nav2StandbyFreq", sprintf("%0.03f", val));
|
||||
if (name == "Nav2Serviceable") {
|
||||
if (val == 1) {
|
||||
me._nav2failed.unhighlightElement();
|
||||
me._nav2failed.setVisible(0);
|
||||
} else {
|
||||
me._nav2failed.highlightElement();
|
||||
me._nav2failed.setVisible(1);
|
||||
}
|
||||
}
|
||||
|
||||
if (name == "NavSelected") {
|
||||
if (val == 1) {
|
||||
me._nav1selected.highlightElement();
|
||||
me._nav2selected.unhighlightElement();
|
||||
me._nav1selected.setVisible(1);
|
||||
me._nav2selected.setVisible(0);
|
||||
} else {
|
||||
me._nav1selected.unhighlightElement();
|
||||
me._nav2selected.highlightElement();
|
||||
me._nav1selected.setVisible(0);
|
||||
me._nav2selected.setVisible(1);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -40,7 +40,10 @@ new : func (pageName, svg, elementNames, size, highlightElement, arrow=0, scroll
|
|||
_elements : [],
|
||||
|
||||
# Cursor index into the elements array
|
||||
_crsrIndex : -1,
|
||||
_crsrIndex : 0,
|
||||
|
||||
# Whether the CRSR is enabled
|
||||
_crsrEnabled : 0,
|
||||
|
||||
# Page index
|
||||
_pageIndex : 0,
|
||||
|
@ -125,8 +128,19 @@ displayPage : func () {
|
|||
var value = me._values[i + me._size * me._pageIndex];
|
||||
foreach (var k; keys(value)) {
|
||||
if (k == me._highlightElement) {
|
||||
me._elements[i].setVisible(1);
|
||||
me._elements[i].unhighlightElement();
|
||||
|
||||
if (me._arrow) {
|
||||
# If we're using a HighlightElement, then we only show the element
|
||||
# the cursor is on.
|
||||
if (i == me._crsrIndex) {
|
||||
me._elements[i].setVisible(1);
|
||||
} else {
|
||||
me._elements[i].setVisible(0);
|
||||
}
|
||||
} else {
|
||||
me._elements[i].setVisible(1);
|
||||
}
|
||||
me._elements[i].setValue(value[k]);
|
||||
} else {
|
||||
var name = me._pageName ~ k ~ i;
|
||||
|
@ -146,11 +160,11 @@ displayPage : func () {
|
|||
me._elements[i].setVisible(0);
|
||||
me._elements[i].setValue("");
|
||||
} else {
|
||||
var name = me._pageName ~ k ~ i;
|
||||
var element = me._svg.getElementById(name);
|
||||
assert(element != nil, "Unable to find element " ~ name);
|
||||
element.setVisible(0);
|
||||
element.setText("");
|
||||
var name = me._pageName ~ k ~ i;
|
||||
var element = me._svg.getElementById(name);
|
||||
assert(element != nil, "Unable to find element " ~ name);
|
||||
element.setVisible(0);
|
||||
element.setText("");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -177,39 +191,42 @@ addTextElement : func(name, value) {
|
|||
|
||||
showCRSR : func() {
|
||||
if (me._currentSize == 0) return;
|
||||
me._crsrIndex = 0;
|
||||
me._crsrEnabled = 1;
|
||||
me._elements[me._crsrIndex].highlightElement();
|
||||
},
|
||||
hideCRSR : func() {
|
||||
if (me._crsrIndex == -1) return;
|
||||
if (me._crsrEnabled == 0) return;
|
||||
me._elements[me._crsrIndex].unhighlightElement();
|
||||
me.setCRSR(-1);
|
||||
|
||||
# If we're using a HighlightElement, then we need to make the cursor position visible
|
||||
if (me._arrow) me._elements[me._crsrIndex].setVisible(1);
|
||||
me._crsrEnabled = 0;
|
||||
},
|
||||
setCRSR : func(index) {
|
||||
me._crsrIndex = math.min(index, me._currentSize -1);
|
||||
},
|
||||
getCursorElementName : func() {
|
||||
if (me._crsrIndex == -1) return nil;
|
||||
if (me._crsrEnabled == -1) return nil;
|
||||
return me._elements[me._crsrIndex].name;
|
||||
},
|
||||
isCursorOnDataEntryElement : func() {
|
||||
if (me._crsrIndex == -1) return 0;
|
||||
if (me._crsrEnabled == -1) return 0;
|
||||
return isa(me._elements[me._crsrIndex], DataEntryElement);
|
||||
},
|
||||
enterElement : func() {
|
||||
if (me._crsrIndex == -1) return;
|
||||
if (me._crsrEnabled == 0) return;
|
||||
return me._elements[me._crsrIndex].enterElement();
|
||||
},
|
||||
getValue : func() {
|
||||
if (me._crsrIndex == -1) return nil;
|
||||
if (me._crsrEnabled == -1) return nil;
|
||||
return me._elements[me._crsrIndex].getValue();
|
||||
},
|
||||
clearElement : func() {
|
||||
if (me._crsrIndex == -1) return;
|
||||
if (me._crsrEnabled == 0) return;
|
||||
me._elements[me._crsrIndex].clearElement();
|
||||
},
|
||||
incrSmall : func(value) {
|
||||
if (me._crsrIndex == -1) return;
|
||||
if (me._crsrEnabled == 0) return;
|
||||
|
||||
var incr_or_decr = (value > 0) ? 1 : -1;
|
||||
if (me._elements[me._crsrIndex].isInEdit()) {
|
||||
|
@ -229,7 +246,7 @@ incrSmall : func(value) {
|
|||
}
|
||||
},
|
||||
incrLarge : func(val) {
|
||||
if (me._crsrIndex == -1) return;
|
||||
if (me._crsrEnabled == 0) return;
|
||||
var incr_or_decr = (val > 0) ? 1 : -1;
|
||||
if (me._elements[me._crsrIndex].isInEdit()) {
|
||||
# We're editing, so pass to the element.
|
||||
|
@ -238,7 +255,6 @@ incrLarge : func(val) {
|
|||
} else {
|
||||
# Move to next selection element
|
||||
me._elements[me._crsrIndex].unhighlightElement();
|
||||
|
||||
me._crsrIndex = me._crsrIndex + incr_or_decr;
|
||||
|
||||
if (me._crsrIndex < 0 ) me.previousPage();
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# PFD UI Element - Highlight UI Element. Can have values set and retrieved
|
||||
# Highlighting simply shows the element.
|
||||
# Highlighting flashes the element.
|
||||
var HighlightElement =
|
||||
{
|
||||
new : func (pagename, svg, name, value="", style=nil)
|
||||
|
@ -16,7 +16,11 @@ var HighlightElement =
|
|||
obj._symbol = svg.getElementById(obj._name);
|
||||
assert(obj._symbol != nil, "Unable to find element " ~ obj._name);
|
||||
|
||||
obj.unhighlightElement();
|
||||
# State and timer for flashing highlighting of elements
|
||||
obj._highlighted = 0;
|
||||
obj._flashTimer = nil;
|
||||
|
||||
obj.setVisible(0);
|
||||
|
||||
return obj;
|
||||
},
|
||||
|
@ -25,11 +29,28 @@ var HighlightElement =
|
|||
getValue : func() { return me._value; },
|
||||
setValue : func(value) { me._value = value; },
|
||||
setVisible : func(vis) { me._symbol.setVisible(vis); },
|
||||
|
||||
_flashElement : func() {
|
||||
if (me._highlighted == 0) {
|
||||
me._symbol.setVisible(1);
|
||||
me._highlighted = 1;
|
||||
} else {
|
||||
me._symbol.setVisible(0);
|
||||
me._highlighted = 0;
|
||||
}
|
||||
},
|
||||
highlightElement : func() {
|
||||
me._symbol.setVisible(1);
|
||||
me._flashElement();
|
||||
me._flashTimer = maketimer(me._style.CURSOR_BLINK_PERIOD, me, me._flashElement);
|
||||
me._flashTimer.start();
|
||||
},
|
||||
unhighlightElement : func() {
|
||||
if (me._flashTimer != nil) me._flashTimer.stop();
|
||||
me._flashTimer = nil;
|
||||
|
||||
# Reset the highlight to a non-highlighted state.
|
||||
me._symbol.setVisible(0);
|
||||
me._highlighted = 0;
|
||||
},
|
||||
isEditable : func () { return 0; },
|
||||
isInEdit : func() { return 0; },
|
||||
|
|
Loading…
Add table
Reference in a new issue