sexta-feira, 16 de março de 2007

OpenLaszlo: eventos de teclado e combo de teclas

um exemplinho de tratamento de evento de teclado e também como trabalhar com combo de teclas do genero: "Ctrl + c", por exemplo...

OBS.: a tecla 'Alt' não funciona na aplicação, ainda não descobri o motivo dessa limitação, em outras palavras, se tentar usar um combo de teclas onde tenha o alt no meio, muito provavel que não tenha nenhum efeito...

segue o exemplo de código:
<canvas debug="true">

<view
    name="v"
    x="20" y="20"
    width="100" height="100"
    bgcolor="0x7F7F7F" focusable="true">
    
    <handler name="onkeyup" reference="LzKeys" args="kc">
        // trata o evento apenas se o mouse estiver
        // na área da view
        if( this.mouseIn() ) {
            Debug.write("got onkeyup: ", kc);
        } else {
            Debug.write( "Fora" );
        }
    </handler>

    <!-- verifica se o mouse está sobre a view -->
    <method name="mouseIn"><![CDATA[
        var mouse_x = this.getMouse( "x" );
        var mouse_y = this.getMouse( "y" );
        if( mouse_x > this.width ) {
            return false;
        } else if( mouse_x < 0 ) {
            return false;            
        } else if( mouse_y > this.height ) {
            return false;            
        } else if( mouse_y < 0 ) {
            return false;            
        }
        return true;
    ]]></method>
    
    <method event="oninit">
        Debug.write("init called.");
        this._del = new LzDelegate(this, "tecla");
        LzKeys.callOnKeyCombo(_del, ["c"]);  // this works
        LzKeys.callOnKeyCombo(_del, ["shift", "b"]);  // funciona
        LzKeys.callOnKeyCombo(_del, ["control", "g"]); // funciona
        LzKeys.callOnKeyCombo(_del, ["control", "a"]); // funciona
        LzKeys.callOnKeyCombo(_del, ["alt", "s"]); // não funciona
    </method>
    
    <method name="tecla">
        Debug.write("myCallback called.");
    </method>
</view>

<button y="150">something else to focus on</button>
<button y="180">something else to focus on</button>

</canvas>