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    }