/* * Copyright 2011 Mark McKay * * 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. */ package automenta.vivisect.swing.dock; import java.awt.BorderLayout; import java.awt.Rectangle; import java.awt.Window; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import java.util.ArrayList; import javax.swing.JPanel; /** * The root window of the Raven docking system. * * @author kitfox */ public class DockingRegionRoot extends JPanel implements WindowListener { public final DockingRegionContainer dockingRoot; ArrayList<DockingRegionWindow> floating = new ArrayList<>(); ArrayList<DockingRegionContainer> containers = new ArrayList<>(); public DockingRegionRoot() { setLayout(new BorderLayout()); dockingRoot = new DockingRegionContainer(this); containers.add(dockingRoot); add(dockingRoot, BorderLayout.CENTER); } public DockingRegionWindow createFloatingWindow(DockingContent content, String title, Rectangle bounds) { DockingRegionWindow win = createFloatingWindow(); win.setTitle(title); win.setBounds(bounds); win.getRoot().addDockContent(content); return win; } public int getNumFloatingWindows() { return floating.size(); } public DockingRegionWindow getFloatingWindow(int index) { return floating.get(index); } public DockingRegionWindow createFloatingWindow() { DockingRegionContainer root = new DockingRegionContainer(this); containers.add(root); DockingRegionWindow dockWin = new DockingRegionWindow(this, root); floating.add(dockWin); dockWin.setVisible(true); return dockWin; } @Override public void windowOpened(WindowEvent e) { } @Override public void windowClosing(WindowEvent e) { Window closing = e.getWindow(); DockingRegionWindow dockWin = (DockingRegionWindow) closing; floating.remove(dockWin); containers.remove(dockWin.getRoot()); } @Override public void windowClosed(WindowEvent e) { } @Override public void windowIconified(WindowEvent e) { } @Override public void windowDeiconified(WindowEvent e) { } @Override public void windowActivated(WindowEvent e) { } @Override public void windowDeactivated(WindowEvent e) { } /** * @return the root */ public DockingRegionContainer getDockingRoot() { return dockingRoot; } public int indexOf(DockingRegionContainer container) { return containers.indexOf(container); } void startDragging() { for (DockingRegionContainer cont : containers) { cont.showDragControl(); } } void stopDragging() { for (DockingRegionContainer cont : containers) { cont.hideDragControl(); } } void clearAllOverlays() { for (DockingRegionContainer cont : containers) { cont.clearOverlay(); } } public DockingRegionContainer getContainer(int containerIndex) { return containers.get(containerIndex); } public void closeAll() { for (DockingRegionWindow win : new ArrayList<>(floating)) { win.getRoot().closeAll(); } dockingRoot.closeAll(); } public void addRootContent(DockingContent cont) { getDockingRoot().addDockContent(cont); } }