/*
* Freeplane - mind map editor
* Copyright (C) 2008 Dimitry Polivaev
*
* This file author is Dimitry Polivaev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.freeplane.view.swing.map;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.LayoutManager;
/**
* This class will Layout the Nodes and Edges of an MapView.
*/
public class MindMapLayout implements LayoutManager {
final static int BORDER = 30;
public final static int MINIMAL_LEAF_WIDTH = 150;
public MindMapLayout() {
}
public void addLayoutComponent(final String name, final Component comp) {
}
private int calcXBorderSize(final MapView map) {
int xBorderSize;
final Dimension visibleSize = map.getViewportSize();
final int minBorderWidth = map.getZoomed(MindMapLayout.BORDER + MindMapLayout.MINIMAL_LEAF_WIDTH);
if (visibleSize != null) {
xBorderSize = Math.max(visibleSize.width, minBorderWidth);
}
else {
xBorderSize = minBorderWidth;
}
return xBorderSize;
}
/**
* @param map
*/
private int calcYBorderSize(final MapView map) {
int yBorderSize;
final int minBorderHeight = map.getZoomed(MindMapLayout.BORDER);
final Dimension visibleSize = map.getViewportSize();
if (visibleSize != null) {
yBorderSize = Math.max(visibleSize.height, minBorderHeight);
}
else {
yBorderSize = minBorderHeight;
}
return yBorderSize;
}
private NodeView getRoot(final Container c) {
return ((MapView) c).getRoot();
}
public void layoutContainer(final Container c) {
final MapView mapView = (MapView) c;
final int calcXBorderSize = calcXBorderSize(mapView);
final int calcYBorderSize = calcYBorderSize(mapView);
getRoot(mapView).validate();
getRoot(mapView).setLocation(calcXBorderSize, calcYBorderSize);
mapView.setSize(calcXBorderSize * 2 + getRoot(mapView).getWidth(), calcYBorderSize * 2
+ getRoot(mapView).getHeight());
}
public Dimension minimumLayoutSize(final Container parent) {
return new Dimension(200, 200);
}
public Dimension preferredLayoutSize(final Container c) {
final MapView mapView = (MapView) c;
final Dimension preferredSize = mapView.getRoot().getPreferredSize();
return new Dimension(2 * calcXBorderSize(mapView) + preferredSize.width, 2 * calcYBorderSize(mapView)
+ preferredSize.height);
}
public void removeLayoutComponent(final Component comp) {
}
}