package org.freeplane.view.swing.map; import java.awt.Component; import java.awt.Container; import java.awt.Dimension; import java.awt.LayoutManager; import org.freeplane.features.nodestyle.NodeStyleController; class ContentPaneLayout implements LayoutManager { public void addLayoutComponent(final String name, final Component comp) { } public void layoutContainer(final Container parent) { final int componentCount = parent.getComponentCount(); final int width = parent.getWidth(); NodeView view = (NodeView) parent.getParent(); final MapView map = view.getMap(); final NodeStyleController ncs = NodeStyleController.getController(map.getModeController()); final int maxWidth = ncs.getMaxWidth(view.getModel()); int y = 0; for (int i = 0; i < componentCount; i++) { final Component component = parent.getComponent(i); if (component.isVisible()) { component.validate(); final Dimension preferredCompSize; if( width == 0) preferredCompSize = new Dimension(); else if (component instanceof ZoomableLabel){ preferredCompSize= ((ZoomableLabel)component).getPreferredSize(maxWidth); } else{ preferredCompSize= component.getPreferredSize(); } if (component instanceof MainView) { component.setBounds(0, y, width, preferredCompSize.height); } else { if(width > preferredCompSize.width){ final int x = (int) (component.getAlignmentX() * (width - preferredCompSize.width)); component.setBounds(x, y, preferredCompSize.width, preferredCompSize.height); } else{ component.setBounds(0, y, width, preferredCompSize.height); } } y += preferredCompSize.height; } else{ component.setBounds(0, y, 0, 0); } } } public Dimension minimumLayoutSize(final Container parent) { return preferredLayoutSize(parent); } public Dimension preferredLayoutSize(final Container parent) { NodeView view = (NodeView) parent.getParent(); final MapView map = view.getMap(); final NodeStyleController ncs = NodeStyleController.getController(map.getModeController()); final int width = ncs.getMaxWidth(view.getModel()); final Dimension prefSize = new Dimension(0, 0); final int componentCount = parent.getComponentCount(); for (int i = 0; i < componentCount; i++) { final Component component = parent.getComponent(i); if (component.isVisible()) { component.validate(); final Dimension preferredCompSize; if(component instanceof ZoomableLabel) preferredCompSize = ((ZoomableLabel)component).getPreferredSize(width); else preferredCompSize = component.getPreferredSize(); prefSize.height += preferredCompSize.height; prefSize.width = Math.max(prefSize.width, preferredCompSize.width); } } return prefSize; } public void removeLayoutComponent(final Component comp) { } }