/* * Bibliothek - DockingFrames * Library built on Java/Swing, allows the user to "drag and drop" * panels containing any Swing-Component the developer likes to add. * * Copyright (C) 2012 Herve Guillaume, Benjamin Sigg * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * Herve Guillaume * rvguillaume@hotmail.com * FR - France * * Benjamin Sigg * benjamin_sigg@gmx.ch * CH - Switzerland */ package bibliothek.gui.dock.station.toolbar.menu; import java.awt.Component; import java.awt.Container; import java.awt.Dimension; import java.awt.Insets; import java.awt.LayoutManager; import javax.swing.BorderFactory; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSeparator; import javax.swing.SwingConstants; import bibliothek.gui.DockController; /** * This is the default component to be used by a {@link GroupedCustomizationMenuContent} as title for one group. * @author Benjamin Sigg */ public class GroupedCustomizationMenuTitle implements CustomizationMenuContent{ private JPanel titlePanel; private String title; private Insets textInsets = new Insets( 1, 10, 3, 5 ); private Insets insets = new Insets( 1, 0, 0, 1 ); /** * Creates a new title. * @param title the text of the title */ public GroupedCustomizationMenuTitle( String title ){ this.title = title; } /** * Sets the title text. * @param title the new title */ public void setTitle( String title ){ this.title = title; } /** * Gets the current title text. * @return the current text */ public String getTitle(){ return title; } /** * Sets the area around the text that should remain empty. * @param insets the area to remain empty */ public void setTextInsets( Insets insets ){ if( insets == null ){ throw new IllegalArgumentException( "insets must not be null" ); } this.textInsets = insets; } /** * Gets the area around the text that should remain empty. * @return the area, not <code>null</code> */ public Insets getTextInsets(){ return textInsets; } /** * Sets the area around the entire title that should remain empty. * @param insets the area to remain empty */ public void setInsets( Insets insets ){ if( insets == null ){ throw new IllegalArgumentException( "insets must not be null" ); } this.insets = insets; } /** * Gets the area around the entire title that remains empty. * @return the area that remains empty */ public Insets getInsets(){ return insets; } @Override public Component getView(){ return titlePanel; } @Override public void setController( DockController controller ){ // ignore } @Override public void bind( CustomizationMenuCallback callback ){ titlePanel = new JPanel(); final JSeparator line = new JSeparator( SwingConstants.HORIZONTAL ); final JLabel text = new JLabel( title ); text.setOpaque( true ); text.setBorder( BorderFactory.createEmptyBorder( 1, 2, 1, 2 ) ); titlePanel.add( text ); titlePanel.add( line ); titlePanel.setLayout( new LayoutManager(){ @Override public Dimension preferredLayoutSize( Container parent ){ Dimension textDimension = text.getPreferredSize(); Dimension lineDimension = line.getPreferredSize(); int width = Math.max( textDimension.width + textInsets.left + textInsets.right, lineDimension.width ) + insets.left + insets.right; int height = Math.max( textDimension.height + textInsets.top + textInsets.bottom, lineDimension.height ) + insets.top + insets.bottom; return new Dimension( width, height ); } @Override public Dimension minimumLayoutSize( Container parent ){ Dimension textDimension = text.getMinimumSize(); Dimension lineDimension = line.getMinimumSize(); int width = Math.max( textDimension.width + textInsets.left + textInsets.right, lineDimension.width ) + insets.left + insets.right; int height = Math.max( textDimension.height + textInsets.top + textInsets.bottom, lineDimension.height ) + insets.top + insets.bottom; return new Dimension( width, height ); } @Override public void layoutContainer( Container parent ){ Dimension size = line.getPreferredSize(); int maxHeight = parent.getHeight() - insets.top - insets.bottom; int height = Math.min( size.height, maxHeight ); int y = insets.top + maxHeight/2 - height/2; line.setBounds( insets.left, y, parent.getWidth()-insets.left-insets.right, height ); size = text.getPreferredSize(); int width = Math.min( size.width, parent.getWidth()-insets.left-insets.right-textInsets.left-textInsets.right ); maxHeight = parent.getHeight()-insets.top-insets.bottom-textInsets.top-textInsets.bottom; height = Math.min( size.height, maxHeight ); y = insets.top + textInsets.top + maxHeight/2 - height/2; text.setBounds( insets.left+textInsets.left, y, width, height ); } @Override public void addLayoutComponent( String name, Component comp ){ // ignore } @Override public void removeLayoutComponent( Component comp ){ // ignore } }); } @Override public void unbind(){ titlePanel = null; } }