001 package nl.cwi.sen1.gui;
002
003 import javax.swing.SwingUtilities;
004
005 import net.infonode.docking.DockingWindow;
006 import net.infonode.docking.RootWindow;
007 import net.infonode.docking.SplitWindow;
008 import net.infonode.docking.TabWindow;
009 import net.infonode.docking.View;
010 import nl.cwi.sen1.gui.component.StudioComponent;
011
012 public class StudioImplWithPredefinedLayout extends StudioImpl implements
013 StudioWithPredefinedLayout {
014 public static final String BOTTOM_RIGHT = "Bottom Right";
015
016 public static final String BOTTOM_LEFT = "Bottom Left";
017
018 public static final String TOP_RIGHT = "Top Right";
019
020 public static final String TOP_LEFT = "Top Left";
021
022 public static void main(String args[]) throws Exception {
023 // args = new String[6];
024 // args[0] = "-TB_HOST_NAME";
025 // args[1] = "localhost";
026 // args[2] = "-TB_PORT";
027 // args[3] = "8999";
028 // args[4] = "-TB_TOOL_NAME";
029 // args[5] = "gui";
030
031 new StudioImplWithPredefinedLayout(args);
032 }
033
034 public StudioImplWithPredefinedLayout(String[] args) {
035 super(args);
036 }
037
038 protected RootWindow createRootWindow() {
039 RootWindow root = super.createRootWindow();
040
041 TabWindow topleftWindow = new TabWindow();
042 topleftWindow.setName(TOP_LEFT);
043 TabWindow toprightWindow = new TabWindow();
044 toprightWindow.setName(TOP_RIGHT);
045 TabWindow bottomleftWindow = new TabWindow();
046 bottomleftWindow.setName(BOTTOM_LEFT);
047 TabWindow bottomrightWindow = new TabWindow();
048 bottomrightWindow.setName(BOTTOM_RIGHT);
049
050 SplitWindow leftWindow = new SplitWindow(false, 0.7f, topleftWindow,
051 bottomleftWindow);
052 SplitWindow rightWindow = new SplitWindow(false, 0.8f, toprightWindow,
053 bottomrightWindow);
054
055 root.setWindow(new SplitWindow(true, 0.25f, leftWindow, rightWindow));
056
057 return root;
058 }
059
060 public void addComponent(StudioComponent component,
061 final String viewPosition) {
062 int id = registerComponent(component);
063 final View view = createView(component, id);
064 SwingUtilities.invokeLater(new Runnable() {
065 public void run() {
066 showView(view, viewPosition);
067 }
068 });
069 addStudioComponentNameChangedListener(component);
070 addStudioComponentTooltipChangedListener(component);
071 }
072
073 private void showView(View view, String viewPosition) {
074 TabWindow tabWindow = (TabWindow) getDockingWindow(rootWindow,
075 viewPosition);
076 if (tabWindow == null) {
077 tabWindow = new TabWindow();
078 tabWindow.setName(TOP_RIGHT);
079 if (rootWindow.getChildWindowCount() == 0) {
080 rootWindow.setWindow(tabWindow);
081 } else {
082 System.err.println(rootWindow.getChildWindowCount());
083 SplitWindow splitWindow = new SplitWindow(true, rootWindow
084 .getWindow(), tabWindow);
085 rootWindow.setWindow(splitWindow);
086 }
087 }
088
089 tabWindow.addTab(view);
090 view.requestFocus();
091 rootWindow.revalidate();
092 }
093
094 private DockingWindow getDockingWindow(DockingWindow dockingWindow,
095 String string) {
096 if (string.equals(dockingWindow.getName())) {
097 return dockingWindow;
098 }
099
100 for (int i = 0; i < dockingWindow.getChildWindowCount(); i++) {
101 DockingWindow found = getDockingWindow(dockingWindow
102 .getChildWindow(i), string);
103 if (found != null) {
104 return found;
105 }
106 }
107
108 return null;
109 }
110 }