##:@* keys ## ##@ info ## This is the Blaxxun(specific)-Keyboard-Interface implementation ## ## Defines needed: ## SLIDE_SET (*) - Name of node to route GUI-actions to ## ## NEXT_KEY_CODE ( 32 (=spacebar)) - Keycode for 'next' ## PREVIOUS_KEY_CODE ( 8 (=backspace)) - Keycode for 'previous' ##@ proto PROTO SlideKeys [ exposedField SFNode slide_set NULL ]{ ##@ body DEF KEYBOARD_INTERFACE Script { field SFNode me USE KEYBOARD_INTERFACE field SFInt32 oldMask 0 field SFNode slide_set IS slide_set eventIn SFNode onEvent field SFInt32 previousKey 8 eventOut SFTime previous field SFInt32 nextKey 32 eventOut SFTime next ##@ functions url "vrmlscript: function initialize() { // tell what events oldMask = Browser.eventMask; Browser.eventMask = 1<<5; // KeyDown Only... // add event observer Browser.addRoute(Browser,'event_changed',me,'onEvent'); Browser.addRoute(me,'previous',slide_set,'previous'); Browser.addRoute(me,'next',slide_set,'next'); } function shutdown() { // remove event observer Browser.eventMask = oldMask; Browser.deleteRoute(Browser,'event_changed',me,'onEvent'); Browser.deleteRoute(me,'previous',slide_set,'previous'); Browser.deleteRoute(me,'next',slide_set,'next'); } ##@ events function onEvent(e,t) { if(e.type == 'keydown') { if(e.keyCode==previousKey) { previous = t; e.returnValue = false; } else { if(e.keyCode==nextKey) { next = t; e.returnValue = false; }} } } " } } ##