minesweeper/src/main/java/org/apidesign/demo/minesweeper/IBrwsrPrsntr.java
branchibrwsr
changeset 101 5ef40158eb9c
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/minesweeper/src/main/java/org/apidesign/demo/minesweeper/IBrwsrPrsntr.java	Mon Mar 10 12:56:48 2014 +0100
     1.3 @@ -0,0 +1,59 @@
     1.4 +package org.apidesign.demo.minesweeper;
     1.5 +
     1.6 +import java.io.IOException;
     1.7 +import java.net.URI;
     1.8 +import java.util.logging.Logger;
     1.9 +import org.apidesign.html.brwsr.XtrnlBrwsrPrsntr;
    1.10 +import org.robovm.cocoatouch.foundation.NSURL;
    1.11 +import org.robovm.cocoatouch.uikit.UIWebView;
    1.12 +import org.robovm.objc.ObjCBlock;
    1.13 +import org.robovm.objc.block.VoidBlock;
    1.14 +import org.robovm.rt.bro.Bro;
    1.15 +import org.robovm.rt.bro.NativeObject;
    1.16 +import org.robovm.rt.bro.annotation.Bridge;
    1.17 +import org.robovm.rt.bro.annotation.Library;
    1.18 +
    1.19 +/**
    1.20 + *
    1.21 + * @author jtulach
    1.22 + */
    1.23 +@Library("dispatch")    
    1.24 +final class IBrwsrPrsntr extends XtrnlBrwsrPrsntr {
    1.25 +    private final UIWebView wv;
    1.26 +    
    1.27 +    static {
    1.28 +        Bro.bind();
    1.29 +    }
    1.30 +
    1.31 +    public static class Queue extends NativeObject {
    1.32 +    }
    1.33 +
    1.34 +    @Bridge(symbol = "dispatch_get_current_queue")
    1.35 +    public static native Queue getMainQueue();
    1.36 +
    1.37 +    @Bridge(symbol = "dispatch_async")
    1.38 +    public static native void async(Queue queue, ObjCBlock block);
    1.39 +
    1.40 +    public IBrwsrPrsntr(UIWebView wv) throws Exception {
    1.41 +        this.wv = wv;
    1.42 +    }
    1.43 +
    1.44 +    @Override
    1.45 +    public void runSafe(final Runnable r) {
    1.46 +        VoidBlock vb = new VoidBlock() {
    1.47 +            @Override
    1.48 +            public void invoke() {
    1.49 +                r.run();
    1.50 +            }
    1.51 +        };
    1.52 +        ObjCBlock ocb = VoidBlock.Marshaler.toObjCBlock(vb);
    1.53 +        async(getMainQueue(), ocb);
    1.54 +    }
    1.55 +    
    1.56 +    @Override
    1.57 +    protected void showBrwsr(URI page) throws IOException {
    1.58 +        wv.loadRequest(Foo.requestWithURL(new NSURL(page.toString())));
    1.59 +    }
    1.60 +    private static final Logger LOG = Logger.getLogger(IBrwsrPrsntr.class.getName());
    1.61 +    
    1.62 +}