/
codebase/
codebase/area/
codebase/doc/
codebase/etc/
codebase/src/net/sourceforge/pain/data/trigger/
codebase/src/net/sourceforge/pain/logic/
codebase/src/net/sourceforge/pain/logic/affect/
codebase/src/net/sourceforge/pain/logic/event/
codebase/src/net/sourceforge/pain/logic/event/deploy/
codebase/src/net/sourceforge/pain/logic/event/guitool/
codebase/src/net/sourceforge/pain/logic/event/guitool/event/
codebase/src/net/sourceforge/pain/logic/fn/util/
codebase/src/net/sourceforge/pain/logic/trigger/
codebase/src/net/sourceforge/pain/logic/trigger/impl/
codebase/src/net/sourceforge/pain/network/console/
codebase/src/net/sourceforge/pain/network/console/telnet/
codebase/src/net/sourceforge/pain/network/guitool/
codebase/src/net/sourceforge/pain/plugin/
codebase/src/net/sourceforge/pain/plugin/command/
codebase/src/net/sourceforge/pain/plugin/reset/
codebase/src/net/sourceforge/pain/plugin/shutdown/
codebase/src/net/sourceforge/pain/plugin/social/
codebase/src/net/sourceforge/pain/util/
db/doc/javadoc/resources/
db/src/net/sourceforge/pain/util/
gui/
gui/lib/
gui/src/net/sourceforge/pain/tools/guitool/dbbrowse/
gui/src/net/sourceforge/pain/tools/guitool/dialog/
gui/src/net/sourceforge/pain/tools/guitool/menu/
gui/src/net/sourceforge/pain/tools/guitool/resources/
gui/src/net/sourceforge/pain/tools/guitool/resources/images/
gui/src/net/sourceforge/pain/tools/guitool/resources/images/explorer/
tests/
tests/src/
tests/src/net/sourceforge/pain/db/data/
package net.sourceforge.pain.tools.guitool;

import net.sourceforge.pain.tools.guitool.menu.*;

import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;

public class ApplicationFrame extends JFrame {
    private static final int PREFERRED_WIDTH = 720;
    private static final int PREFERRED_HEIGHT = 600;


	private JPanel appPanel = null;
	private JWindow splashScreen = null;
	private JLabel splashLabel = null;

    public MainMenu mainMenu = null;
	public ToolBar toolbar = null;
	public StatusBar statusBar = null;
    public WorkspacePanel workspacePanel = null;



	public ApplicationFrame(GraphicsConfiguration grc) {
		super(grc);
    }
	void go(){
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		createSplashScreen();
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				splashScreen.show();
			}
		});
		initialize();
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				showGuiTool();
				hideSplash();
			}
		});


	}

	private void initialize() {
		appPanel = new JPanel();
		appPanel.setPreferredSize(new Dimension(PREFERRED_WIDTH, PREFERRED_HEIGHT));
		appPanel.setLayout(new BorderLayout());

		JPanel top = new JPanel();
		top.setLayout(new BorderLayout());
		appPanel.add(top, BorderLayout.NORTH);

		mainMenu = new MainMenu();
		top.add(mainMenu.menuBar ,BorderLayout.NORTH );

		JPanel centerPanel = new JPanel(new BorderLayout());
	    appPanel.add(centerPanel, BorderLayout.CENTER);

		statusBar = new StatusBar();
		appPanel.add(statusBar, BorderLayout.SOUTH);

		toolbar = new ToolBar();
		centerPanel.add(toolbar.getJToolBar(), BorderLayout.NORTH);

		workspacePanel = new WorkspacePanel();
        centerPanel.add(workspacePanel, BorderLayout.CENTER);
		getContentPane().add(appPanel, BorderLayout.CENTER);
	}

	public void createSplashScreen() {
		splashLabel = new JLabel(GuiTool.loadImage("Splash.jpg", "desc"));
		splashScreen = new JWindow(this);
		splashScreen.getContentPane().add(splashLabel);
		splashScreen.pack();
		Rectangle screenRect = getGraphicsConfiguration().getBounds();
		splashScreen.setLocation(
		        screenRect.x + screenRect.width / 2 - splashScreen.getSize().width / 2,
		        screenRect.y + screenRect.height / 2 - splashScreen.getSize().height / 2);

	}

	public void hideSplash() {
		splashScreen.setVisible(false);
		splashScreen = null;
		splashLabel = null;
	}


	public void showGuiTool() {
		// put management in a frame and show it
		setTitle("PAiN Management Tool");
		pack();

		Rectangle screenRect = getGraphicsConfiguration().getBounds();
		Insets screenInsets = Toolkit.getDefaultToolkit().getScreenInsets(
		        getGraphicsConfiguration());

		// Make sure we don't place the demo off the screen.
		int centerWidth = screenRect.width < getSize().width ?
		        screenRect.x :
		        screenRect.x + screenRect.width / 2 - getSize().width / 2;
		int centerHeight = screenRect.height < getSize().height ?
		        screenRect.y :
		        screenRect.y + screenRect.height / 2 - getSize().height / 2;

		centerHeight = centerHeight < screenInsets.top ?
		        screenInsets.top : centerHeight;

		setLocation(centerWidth, centerHeight);
//        workspacePanel.vSplitPane.setDividerLocation(5/6D);
        workspacePanel.hSplitPane.setDividerLocation(workspacePanel.hSplitPane.getResizeWeight());
        workspacePanel.vSplitPane.setDividerLocation(workspacePanel.vSplitPane.getResizeWeight());
		show();
	}




	public WorkspacePanel getWorkspacePanel(){
		return workspacePanel;
	}

	public StatusBar getStatusBar() {
		return statusBar;
	}

	//-------------INNERS ----------------//

	class TabListener implements ChangeListener {
		public void stateChanged(ChangeEvent e) {
			SingleSelectionModel model = (SingleSelectionModel) e.getSource();
			boolean logSelected = model.getSelectedIndex() == 1;
			if (logSelected) {
				statusBar.setContextMessage("log window");
			} else {
				statusBar.setContextMessage("main window");
			}
		}
	}

}