com.badlogic.gdx.jglfw.tests.JglfwTestStarter.java Source code

Java tutorial

Introduction

Here is the source code for com.badlogic.gdx.jglfw.tests.JglfwTestStarter.java

Source

/*******************************************************************************
 * Copyright 2011 See AUTHORS file.
 * 
 * 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 com.badlogic.gdx.jglfw.tests;

import java.awt.BorderLayout;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.DefaultListSelectionModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ListSelectionModel;
import javax.swing.UIManager;

import com.badlogic.gdx.LifecycleListener;
import com.badlogic.gdx.Preferences;
import com.badlogic.gdx.backends.jglfw.JglfwApplication;
import com.badlogic.gdx.backends.jglfw.JglfwApplicationConfiguration;
import com.badlogic.gdx.backends.jglfw.JglfwFiles;
import com.badlogic.gdx.backends.jglfw.JglfwPreferences;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.tests.utils.GdxTest;
import com.badlogic.gdx.tests.utils.GdxTests;
import com.badlogic.gdx.utils.GdxRuntimeException;

public class JglfwTestStarter extends JFrame {
    public JglfwTestStarter() throws HeadlessException {
        super("JGLFW libgdx Tests");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setContentPane(new TestList());
        pack();
        setSize(getWidth(), 600);
        setLocationRelativeTo(null);
        setVisible(true);
    }

    /** Runs the {@link GdxTest} with the given name.
     * @param testName the name of a test class
     * @return {@code true} if the test was found and run, {@code false} otherwise */
    public static JglfwApplication runTest(String testName) {
        final GdxTest test = GdxTests.newTest(testName);
        if (test == null)
            throw new GdxRuntimeException("Test not found: " + testName);

        final JglfwApplicationConfiguration config = new JglfwApplicationConfiguration();
        config.width = 640;
        config.height = 480;
        config.title = testName;
        config.forceExit = false;
        return new JglfwApplication(test, config);
    }

    class TestList extends JPanel {
        public TestList() {
            setLayout(new BorderLayout());

            final JButton button = new JButton("Run Test");

            final JList list = new JList(GdxTests.getNames().toArray());
            JScrollPane pane = new JScrollPane(list);

            DefaultListSelectionModel m = new DefaultListSelectionModel();
            m.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
            m.setLeadAnchorNotificationEnabled(false);
            list.setSelectionModel(m);

            list.addMouseListener(new MouseAdapter() {
                public void mouseClicked(MouseEvent event) {
                    if (event.getClickCount() == 2)
                        button.doClick();
                }
            });

            list.addKeyListener(new KeyAdapter() {
                public void keyPressed(KeyEvent e) {
                    if (e.getKeyCode() == KeyEvent.VK_ENTER)
                        button.doClick();
                }
            });

            final Preferences prefs = new JglfwPreferences(
                    new FileHandle(new JglfwFiles().getExternalStoragePath() + ".prefs/jglfw-tests"));
            list.setSelectedValue(prefs.getString("last", null), true);

            button.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    String testName = (String) list.getSelectedValue();
                    prefs.putString("last", testName);
                    prefs.flush();
                    JglfwTestStarter.this.setVisible(false);
                    runTest(testName).addLifecycleListener(new LifecycleListener() {
                        public void resume() {
                        }

                        public void pause() {
                        }

                        public void dispose() {
                            JglfwTestStarter.this.setVisible(true);
                        }
                    });
                }
            });

            add(pane, BorderLayout.CENTER);
            add(button, BorderLayout.SOUTH);
        }
    }

    /** Runs a libgdx test.
     * 
     * If no arguments are provided on the command line, shows a list of tests to choose from. If an argument is present, the test
     * with that name will immediately be run.
     * 
     * @param argv command line arguments */
    public static void main(String[] argv) throws Exception {
        if (argv.length > 0) {
            runTest(argv[0]);
            return;
        }
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        new JglfwTestStarter();
    }
}