package org.flexdock.demos.perspective;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.io.IOException;
import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.border.LineBorder;
import org.flexdock.demos.util.DemoUtility;
import org.flexdock.docking.DockableFactory;
import org.flexdock.docking.DockingConstants;
import org.flexdock.docking.DockingManager;
import org.flexdock.docking.state.PersistenceException;
import org.flexdock.perspective.LayoutSequence;
import org.flexdock.perspective.Perspective;
import org.flexdock.perspective.PerspectiveFactory;
import org.flexdock.perspective.PerspectiveManager;
import org.flexdock.perspective.actions.OpenPerspectiveAction;
import org.flexdock.perspective.persist.FilePersistenceHandler;
import org.flexdock.perspective.persist.PersistenceHandler;
import org.flexdock.util.ResourceManager;
import org.flexdock.util.SwingUtility;
import org.flexdock.view.View;
import org.flexdock.view.Viewport;
import org.flexdock.view.actions.DefaultDisplayAction;
/**
* Created on 2005-04-17
*
* @author <a href="mailto:mati@sz.home.pl">Mateusz Szczap</a>
* @version $Id: PerspectivesDemo.java,v 1.17 2005-10-09 21:09:39 eeaston Exp $
*/
public class PerspectivesDemo extends JFrame implements DockingConstants {
public static final String PERSPECTIVE_FILE = "PerspectiveDemo.data";
private static final String MAIN_VIEW = "main.view";
private static final String BIRD_VIEW = "bird.view";
private static final String MESSAGE_VIEW = "message.log";
private static final String PROBLEM_VIEW = "problem";
private static final String CONSOLE_VIEW = "console";
private static final String P1 = "p1";
private static final String P2 = "p2";
private static final String P3 = "p3";
public static void main(String[] args) {
SwingUtility.setPlaf(UIManager.getSystemLookAndFeelClassName());
// setup the flexdock configuration
configureDocking();
// create and show the GUI
EventQueue.invokeLater(new Runnable() {
public void run() {
runGUI();
}
});
}
private static void runGUI() {
// create out application frame
PerspectivesDemo flexDockDemo = new PerspectivesDemo();
flexDockDemo.setSize(800, 600);
SwingUtility.centerOnScreen(flexDockDemo);
DemoUtility.setCloseOperation(flexDockDemo);
// load the current layout state into the application frame
DockingManager.restoreLayout();
// now show the frame
flexDockDemo.setVisible(true);
}
public PerspectivesDemo() {
super("FlexDock Demo");
setContentPane(createContentPane());
setJMenuBar(createApplicationMenuBar());
}
private JPanel createContentPane() {
JPanel contentPane = new JPanel(new BorderLayout());
contentPane.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
//tworzymy glowny view port do dokowania
Viewport viewport = new Viewport();
// Border outerBorder = BorderFactory.createEmptyBorder(0,0,5,5);
// Border innerBorder = new ShadowBorder();
// viewport.setBorderManager(new StandardBorderManager(BorderFactory.createCompoundBorder(outerBorder, innerBorder)));
// viewport.setBorder(new EmptyBorder(10, 10, 10, 10));
//rejestrujemy glowny view port
contentPane.add(viewport, BorderLayout.CENTER);
return contentPane;
}
private JMenuBar createApplicationMenuBar() {
JMenuBar menuBar = new JMenuBar();
JMenu showViewMenu = new JMenu("Show View");
showViewMenu.add(new DefaultDisplayAction(BIRD_VIEW));
showViewMenu.add(new DefaultDisplayAction(MESSAGE_VIEW));
showViewMenu.add(new DefaultDisplayAction(PROBLEM_VIEW));
showViewMenu.add(new DefaultDisplayAction(CONSOLE_VIEW));
JMenu perspectiveMenu = new JMenu("Perspective");
//pobieramy perspektywe nr 1
perspectiveMenu.add(new OpenPerspectiveAction(P1));
perspectiveMenu.add(new OpenPerspectiveAction(P2));
perspectiveMenu.add(new OpenPerspectiveAction(P3));
menuBar.add(showViewMenu);
menuBar.add(perspectiveMenu);
return menuBar;
}
private static void configureDocking() {
// setup the DockingManager to work with our application
DockingManager.setDockableFactory(new ViewFactory());
DockingManager.setFloatingEnabled(true);
// configure the perspective manager
PerspectiveManager.setFactory(new DemoPerspectiveFactory());
PerspectiveManager.setRestoreFloatingOnLoad(true);
PerspectiveManager mgr = PerspectiveManager.getInstance();
mgr.setCurrentPerspective(P3, true);
// load any previously persisted layouts
PersistenceHandler persister = FilePersistenceHandler.createDefault(PERSPECTIVE_FILE);
PerspectiveManager.setPersistenceHandler(persister);
try {
DockingManager.loadLayoutModel();
} catch(IOException e) {
e.printStackTrace();
} catch (PersistenceException e) {
e.printStackTrace();
}
// remember to store on shutdown
DockingManager.setAutoPersist(true);
}
private static class DemoPerspectiveFactory implements PerspectiveFactory {
public Perspective getPerspective(String persistentId) {
if(P1.equals(persistentId))
return createPerspective1();
if(P2.equals(persistentId))
return createPerspective2();
if(P3.equals(persistentId))
return createPerspective3();
return null;
}
private Perspective createPerspective1() {
Perspective perspective = new Perspective(P1, "Perspective1");
LayoutSequence sequence = perspective.getInitialSequence(true);
sequence.add(MAIN_VIEW);
sequence.add(BIRD_VIEW, MAIN_VIEW, EAST_REGION, .3f);
sequence.add(MESSAGE_VIEW, MAIN_VIEW, WEST_REGION, .3f);
sequence.add(PROBLEM_VIEW, MESSAGE_VIEW);
sequence.add(CONSOLE_VIEW, MESSAGE_VIEW);
return perspective;
}
private Perspective createPerspective2() {
Perspective perspective = new Perspective(P2, "Perspective2");
LayoutSequence sequence = perspective.getInitialSequence(true);
sequence.add(MAIN_VIEW);
sequence.add(BIRD_VIEW, MAIN_VIEW, WEST_REGION, .3f);
sequence.add(MESSAGE_VIEW, BIRD_VIEW, SOUTH_REGION, .5f);
sequence.add(PROBLEM_VIEW, MESSAGE_VIEW);
sequence.add(CONSOLE_VIEW, MESSAGE_VIEW, EAST_REGION, .5f);
return perspective;
}
private Perspective createPerspective3() {
Perspective perspective = new Perspective(P3, "Perspective3");
LayoutSequence sequence = perspective.getInitialSequence(true);
sequence.add(MAIN_VIEW);
return perspective;
}
}
private static class ViewFactory extends DockableFactory.Stub {
public Component getDockableComponent(String dockableId) {
if(MAIN_VIEW.equals(dockableId))
return createMainView();
if(BIRD_VIEW.equals(dockableId))
return createView(BIRD_VIEW, "Bird View", "birdView001.png");
if(MESSAGE_VIEW.equals(dockableId))
return createView(MESSAGE_VIEW, "Message Log", "msgLog001.png");
if(PROBLEM_VIEW.equals(dockableId))
return createView(PROBLEM_VIEW, "Problems", "problems001.png");
if(CONSOLE_VIEW.equals(dockableId))
return createView(CONSOLE_VIEW, "Console", "console001.png");
return null;
}
private View createView(String id, String text, String iconName) {
View view = new View(id, text);
//Dodajemy akcje close to tego view
view.addAction(DockingConstants.CLOSE_ACTION);
view.addAction(DockingConstants.PIN_ACTION);
JPanel panel = new JPanel();
panel.setBorder(new LineBorder(Color.GRAY, 1));
JTextField textField = new JTextField(text);
textField.setPreferredSize(new Dimension(100, 20));
panel.add(textField);
view.setContentPane(panel);
Icon icon = ResourceManager.createIcon("org/flexdock/demos/view/" + iconName);
view.setTabIcon(icon);
return view;
}
private static View createMainView() {
JTabbedPane tabbedPane = new JTabbedPane();
tabbedPane.addTab("Sample1", new JTextArea("Sample1"));
tabbedPane.addTab("Sample2", new JTextArea("Sample2"));
tabbedPane.addTab("Sample3", new JTextArea("Sample3"));
//to view nie bedzie mialo tytulu, wiec przekazujemy null
View mainView = new View(MAIN_VIEW, null, null);
//blokujemy mozliwosc dokowania do tego view w regionie CENTER
mainView.setTerritoryBlocked(CENTER_REGION, true);
//wylaczamy pasek tytulowy
mainView.setTitlebar(null);
//ustawiamy komponent GUI, ktory chcemy aby byl wyswietalny w tym view
mainView.setContentPane(new JScrollPane(tabbedPane));
return mainView;
}
}
}