package tim.prune.gui; import java.awt.Component; import javax.swing.JSplitPane; import javax.swing.SwingUtilities; /** * Class to control the showing and hiding of the sidebars * (left panel, right panel and profile display) */ public class SidebarController { /** array of hideable components */ private Component[] _components = null; /** array of splitter panes */ private JSplitPane[] _splitters = null; /** array of splitter positions */ private int[] _positions = null; /** * Constructor * @param inComponents array of components to hide/show * @param inSplitters array of splitter panes */ public SidebarController(Component[] inComponents, JSplitPane[] inSplitters) { _components = inComponents; _splitters = inSplitters; _positions = new int[inSplitters.length]; } /** * Toggle full screen mode on or off */ public void toggle() { if (_components != null && _components.length > 0) { boolean visible = _components[0].isVisible(); if (visible) { // Store divider locations for (int i=0; i<_components.length; i++) { _positions[i] = _splitters[i].getDividerLocation(); } } // Set visibility of components for (int i=0; i<_components.length; i++) { _components[i].setVisible(!visible); } // Restore divider locations for (int i=0; i<_components.length; i++) { if (!visible) { _splitters[i].setDividerLocation(_positions[i]); } } // Hiding of panels has to occur in separate thread to update properly if (visible) SwingUtilities.invokeLater(new Runnable() { public void run() { for (int i=0; i<_components.length; i++) { _splitters[i].setDividerLocation(i==0?0.0:1.0); _splitters[i].invalidate(); } } }); } } }