/* * Created on Oct 25, 2007 * * 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. * * Copyright @2007-2013 the original author or authors. */ package org.fest.swing.test.swing; import static org.fest.swing.edt.GuiActionRunner.execute; import static org.fest.util.Strings.concat; import java.awt.Dimension; import javax.swing.JDesktopPane; import javax.swing.JInternalFrame; import org.fest.swing.annotation.RunsInCurrentThread; import org.fest.swing.annotation.RunsInEDT; import org.fest.swing.edt.GuiQuery; /** * An MDI frame. * * @author Alex Ruiz */ public class TestMdiWindow extends TestWindow { private static int internalFrameCounter; /** * Creates a new {@link TestMdiWindow} and displays it on the screen. The default size of the created window is 500 x * 300. This method is executed in the event dispatch thread (EDT.) * * @param testClass the class of the test where the window to create will be used. The simple name of the given class * will be used as the title of the created window. * @return the created window. */ @RunsInEDT public static TestMdiWindow createAndShowNewWindow(final Class<?> testClass) { return execute(new GuiQuery<TestMdiWindow>() { @Override protected TestMdiWindow executeInEDT() { TestMdiWindow window = createInCurrentThread(testClass); TestWindow.display(window, new Dimension(500, 300)); return window; } }); } /** * Creates a new {@link TestMdiWindow}. This method is executed in the event dispatch thread (EDT.) * * @param testClass the class of the test where the window to create will be used. The simple name of the given class * will be used as the title of the created window. * @return the created window. */ @RunsInEDT public static TestMdiWindow createNewWindow(final Class<?> testClass) { return execute(new GuiQuery<TestMdiWindow>() { @Override protected TestMdiWindow executeInEDT() { return createInCurrentThread(testClass); } }); } private final JDesktopPane desktop; private final JInternalFrame internalFrame; @RunsInCurrentThread private static TestMdiWindow createInCurrentThread(Class<?> testClass) { return new TestMdiWindow(testClass); } /** * Creates a new {@link TestMdiWindow}. * * @param testClass the class of the test where the window to create will be used. The simple name of the given class * will be used as the title of the created window. */ @RunsInCurrentThread protected TestMdiWindow(Class<?> testClass) { super(testClass); desktop = new JDesktopPane(); internalFrame = createInternalFrame(); desktop.add(internalFrame); setContentPane(desktop); setPreferredSize(new Dimension(500, 300)); } /** * Creates a new {@code JInternalFrame} with a size of 200 x 100. The title of the created internal frame includes the * value of a counter that is automatically increased every time a new internal frame is created. This method is * {@code not} executed in the event dispatch thread (EDT.) * * @return the created frame. */ @RunsInCurrentThread protected static JInternalFrame createInternalFrame() { // TODO: should be create and add JInternalFrame internalFrame = new JInternalFrame(concat("Internal Frame ", ++internalFrameCounter)); internalFrame.setIconifiable(true); internalFrame.setMaximizable(true); internalFrame.setResizable(true); internalFrame.setSize(new Dimension(200, 100)); internalFrame.setVisible(true); return internalFrame; } /** * Returns the container containing multiple documents (internal frames.) * * @return the container containing multiple documents (internal frames.) */ public JDesktopPane desktop() { return desktop; } /** * Returns the internal frame created by default. * * @return the internal frame created by default. */ public JInternalFrame internalFrame() { return internalFrame; } }