Package org.jemmy.fx

Source Code of org.jemmy.fx.Browser$KeyBind

/*
* To change this template, choose Tools | Templates and open the template in
* the editor.
*/
package org.jemmy.fx;

import java.awt.AWTException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.application.Platform;
import javafx.event.EventHandler;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.stage.Stage;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.plaf.metal.MetalLookAndFeel;
import org.jemmy.action.GetAction;
import org.jemmy.browser.BrowserDescriptor;
import org.jemmy.browser.HierarchyDescriptor;
import org.jemmy.browser.HierarchyView;
import org.jemmy.control.Wrap;
import org.jemmy.control.Wrapper;
import org.jemmy.env.Environment;
import org.jemmy.env.Timeout;
import org.jemmy.lookup.ControlList;
import org.jemmy.timing.State;
import org.jemmy.timing.Waiter;

/**
*
* @author shura
*/
public class Browser {

    public static void main(String[] args) throws AWTException {
        startApp(args);
        runBrowser();
    }

    /**
     * Register FX Browser on Scene using default key binding Ctrl-Shift-B
     *
     * @param scene
     */
    public static void register(Scene scene) {
        register(scene, defaultKeyBind);
    }

    public static void register(Scene scene, final KeyBind kb) {
        scene.setOnKeyPressed(new EventHandler<KeyEvent>() {

            boolean browserStarted = false;

            public void handle(KeyEvent ke) {
                if (!browserStarted && kb.check(ke)) {
                    browserStarted = true;
                    Platform.runLater(new Runnable() {

                        public void run() {
                            try {
                                runBrowser();
                            } catch (AWTException ex) {
                                ex.printStackTrace();
                            }
                        }
                    });
                }
            }
        });
        String kbName = kb.getName();
        if (kbName != null && kbName.length() > 0) {
            System.err.println("Click " + kbName + " to run FX Browser.");
        }
    }

    public static abstract class KeyBind {

        public abstract boolean check(KeyEvent ke);

        public abstract String getName();
    };
    private static KeyBind defaultKeyBind = new KeyBind() {

        @Override
        public boolean check(KeyEvent ke) {
            return ke.isControlDown() && ke.isShiftDown() && ke.getCode() == KeyCode.B;
        }

        @Override
        public String getName() {
            return "Ctrl-Shift-B";
        }
    };

    public static void runBrowser() throws AWTException {
        try {
            javax.swing.UIManager.setLookAndFeel(new MetalLookAndFeel());
        } catch (UnsupportedLookAndFeelException ex) {
            Logger.getLogger(HierarchyView.class.getName()).log(Level.SEVERE, null, ex);
        }
        BrowserDescriptor descr = new BrowserDescriptor() {

            ControlList hierarchy = new SceneList();
            Wrapper wrapper = new SceneWrapper(Environment.getEnvironment());

            @Override
            public String getTitle() {
                return "FX hierarchy";
            }

            @Override
            public HierarchyDescriptor getSubHierarchyDescriptor(final Wrap wrap) {
                return new HierarchyDescriptor() {

                    Parent parent;

                    {
                        parent = new GetAction<Parent>() {

                            @Override
                            public void run(Object... parameters) throws Exception {
                                setResult(((SceneWrap<? extends Scene>) wrap).getControl().getRoot());
                            }
                        }.dispatch(wrap.getEnvironment());
                    }
                    NodeHierarchy hierarchy = new NodeHierarchy(parent, Environment.getEnvironment());
                    NodeWrapper wrapper = new NodeWrapper(((SceneWrap<? extends Scene>) wrap).getControl(),
                            Environment.getEnvironment());

                    @Override
                    public ControlList getHierarchy() {
                        return hierarchy;
                    }

                    @Override
                    public Wrapper getWrapper() {
                        return wrapper;
                    }

                    @Override
                    public HierarchyDescriptor getSubHierarchyDescriptor(Wrap wrap) {
                        return null;
                    }
                };
            }

            @Override
            public ControlList getHierarchy() {
                return hierarchy;
            }

            @Override
            public Wrapper getWrapper() {
                return wrapper;
            }
        };
        new HierarchyView(descr).setVisible(true);
    }

    public static void startApp(final String[] argv) {
        new Thread(new Runnable() {

            public void run() {
                try {
                    AppExecutor.executeReflect(argv);
                } catch (ClassNotFoundException ex) {
                    Logger.getLogger(Browser.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }, "FX app launch thread").start();

        new Waiter(new Timeout("launch start waiter", 10000)).ensureState(new State<Boolean>() {
            public Boolean reached() {
                try {
                    Thread.sleep(100); // otherwise mac doesn't start
                } catch (InterruptedException ex) {
                }
                Scene scene = Root.ROOT.lookup(new ByWindowType(Stage.class)).lookup(Scene.class).wrap(0).getControl();
                return scene.getWindow().isShowing() ? Boolean.TRUE : null;
            }
        });
    }
}
TOP

Related Classes of org.jemmy.fx.Browser$KeyBind

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.