1
0
Fork 0

Fix highlighting of arrow elements

This commit is contained in:
Stuart Buchanan 2018-02-01 22:28:39 +00:00
parent 4c3c5cde63
commit 67b95bb1fe
8 changed files with 107 additions and 86 deletions

View file

@ -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

View file

@ -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", "");
}

View file

@ -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;
}

View file

@ -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();
},

View file

@ -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);

View file

@ -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);
}
}

View file

@ -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;
@ -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();

View file

@ -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); },
highlightElement : func() {
_flashElement : func() {
if (me._highlighted == 0) {
me._symbol.setVisible(1);
me._highlighted = 1;
} else {
me._symbol.setVisible(0);
me._highlighted = 0;
}
},
highlightElement : func() {
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; },