diff --git a/source/MenuDelegate.mc b/source/MenuDelegate.mc index 0169b64..e8401ea 100644 --- a/source/MenuDelegate.mc +++ b/source/MenuDelegate.mc @@ -1,71 +1,68 @@ import Toybox.Lang; import Toybox.WatchUi; -// Routes menu input. UP/DOWN rotate the ring. START/STOP opens -// the selected item. Tap on an icon rotates to it; tap on the -// already-selected icon opens it. -class MenuDelegate extends WatchUi.BehaviorDelegate { +// Routes menu input. UP/DOWN rotate the ring. Hardware START/STOP +// opens the selected item. Screen tap rotates to tapped icon; +// tap on already-selected icon opens it. +class MenuDelegate extends WatchUi.InputDelegate { private var _view as MenuView; - private var _tapHandled as Boolean = false; function initialize(view as MenuView) { - BehaviorDelegate.initialize(); + InputDelegate.initialize(); _view = view; } - function onNextPage() as Boolean { - _view.rotateNext(); - return true; - } - - function onPreviousPage() as Boolean { - _view.rotatePrev(); - return true; + // Hardware buttons. + function onKey(evt as WatchUi.KeyEvent) as Boolean { + var key = evt.getKey(); + if (key == WatchUi.KEY_ENTER || key == WatchUi.KEY_START) { + return _openSelected(); + } + if (key == WatchUi.KEY_DOWN) { + _view.rotateNext(); + return true; + } + if (key == WatchUi.KEY_UP) { + _view.rotatePrev(); + return true; + } + return false; } + // Screen tap. function onTap(evt as WatchUi.ClickEvent) as Boolean { var coords = evt.getCoordinates(); var tapX = coords[0] as Number; var tapY = coords[1] as Number; var idx = _view.itemIndexAt(tapX, tapY); - if (idx >= 0 && idx != _view.selectedIndex()) { - // Tap on non-selected icon → rotate to it, block onSelect. - _view.rotateTo(idx); - _tapHandled = true; - return true; + if (idx < 0) { return false; } + + if (idx == _view.selectedIndex()) { + return _openSelected(); } - // Tap on selected icon or empty area → let onSelect handle it. - return false; - } - - function onSelect() as Boolean { - // If a tap already handled this event, skip. - if (_tapHandled) { - _tapHandled = false; - return true; - } - return _openSelected(); + _view.rotateTo(idx); + return true; } private function _openSelected() as Boolean { var item = _view.selectedItem(); - var key = item[:key] as String; + var k = item[:key] as String; - if (key.equals(Config.ACTION_HISTORY)) { + if (k.equals(Config.ACTION_HISTORY)) { var view = new HistoryView(); WatchUi.pushView(view, new HistoryDelegate(view), WatchUi.SLIDE_LEFT); return true; } - if (key.equals(Config.ACTION_DELETE)) { + if (k.equals(Config.ACTION_DELETE)) { var view = new DeleteView(); WatchUi.pushView(view, new DeleteDelegate(view), WatchUi.SLIDE_LEFT); return true; } - WatchUi.pushView(new LoadingView(key), new LoadingDelegate(), WatchUi.SLIDE_IMMEDIATE); + WatchUi.pushView(new LoadingView(k), new LoadingDelegate(), WatchUi.SLIDE_IMMEDIATE); return true; } }