org.qi4j.envisage.Envisage.java Source code

Java tutorial

Introduction

Here is the source code for org.qi4j.envisage.Envisage.java

Source

/*
 * Copyright 2009 Tonny Kohar.
 * Copyright 2012 Paul Merlin.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
 * implied.
 *
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.qi4j.envisage;

import com.jgoodies.looks.LookUtils;
import com.jgoodies.looks.Options;
import com.jgoodies.looks.plastic.PlasticLookAndFeel;
import com.jgoodies.looks.plastic.theme.ExperienceBlue;
import java.awt.Dimension;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.LookAndFeel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import org.qi4j.api.structure.ApplicationDescriptor;

/**
 * Qi4J Application Viewer
 */
public class Envisage {

    protected ApplicationDescriptor application;

    private EnvisageFrame mainFrame;

    public void run(ApplicationDescriptor application) {
        initLookAndFeel();

        this.application = application;

        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                showMainFrame();
            }

        });
    }

    public void stop() {
        if (mainFrame != null && mainFrame.isDisplayable()) {
            mainFrame.dispose();
            mainFrame = null;
        }
    }

    private void showMainFrame() {
        mainFrame = new EnvisageFrame(application);
        mainFrame.setLocationByPlatform(true);
        mainFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        mainFrame.setSize(new Dimension(1024, 768));
        mainFrame.setVisible(true);

        mainFrame.addWindowListener(new WindowAdapter() {

            @Override
            public void windowOpened(WindowEvent evt) {
                SwingUtilities.invokeLater(new Runnable() {

                    @Override
                    public void run() {
                        mainFrame.initQi4J();
                    }

                });
            }

        });
    }

    private void initLookAndFeel() {
        String osName = System.getProperty("os.name").toUpperCase();

        // set to use swing anti alias text only for JVM <= 1.5
        System.setProperty("swing.aatext", "true");

        // set default swing bold to false, only for JVM 1.5 or above
        UIManager.put("swing.boldMetal", Boolean.FALSE);

        // set LaF
        LookAndFeel lnf = UIManager.getLookAndFeel();
        if (lnf != null && lnf.getID().equalsIgnoreCase("Metal")) {
            final String lnfClassName;
            if (osName.startsWith("MAC")) {
                System.setProperty("com.apple.mrj.application.apple.menu.about.name", "Envisage"); //TODO i18n
                System.setProperty("apple.laf.useScreenMenuBar", "true");
                lnfClassName = UIManager.getSystemLookAndFeelClassName();
            } else if (osName.startsWith("WINDOWS")) {
                UIManager.put("ClassLoader", LookUtils.class.getClassLoader());
                lnfClassName = Options.getSystemLookAndFeelClassName();
                Options.setUseNarrowButtons(false);
            } else {
                UIManager.put("ClassLoader", LookUtils.class.getClassLoader());
                lnfClassName = Options.getCrossPlatformLookAndFeelClassName();
                PlasticLookAndFeel.setTabStyle(PlasticLookAndFeel.TAB_STYLE_METAL_VALUE);
                PlasticLookAndFeel.setPlasticTheme(new ExperienceBlue());
                Options.setUseNarrowButtons(false);
                //PlasticLookAndFeel.setMyCurrentTheme(new ExperienceBlueDefaultFont());  // for CJK Font
            }

            if (lnfClassName != null) {
                try {
                    UIManager.setLookAndFeel(lnfClassName);
                } catch (Exception ex) {
                    System.err.println("Unable to set LookAndFeel, use default LookAndFeel.\n" + ex.getMessage());
                }
            }
        }
    }

}