/*FreeMind - A Program for creating and viewing Mindmaps
*Copyright (C) 2000-2001 Joerg Mueller <joergmueller@bigfoot.com>
*See COPYING for Details
*
*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, write to the Free Software
*Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/*$Id: MindMapLayout.java,v 1.15.14.5.4.12 2007/04/21 15:11:23 dpolivaev Exp $*/
package freemind.view.mindmapview;
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;// width of the border around the map.
// minimal width for input field of leaf or folded node (PN)
// the MINIMAL_LEAF_WIDTH is reserved by calculation of the map width
public final static int MINIMAL_LEAF_WIDTH = 150;
protected static java.util.logging.Logger logger = null;
public MindMapLayout() {
if (logger == null) {
logger = freemind.main.Resources.getInstance().getLogger(
this.getClass().getName());
}
}
public void addLayoutComponent(String name, Component comp) {
}
public void removeLayoutComponent(Component comp) {
}
public void layoutContainer(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());
final int componentCount = mapView.getComponentCount();
for (int i = 0; i < componentCount; i++) {
final Component component = mapView.getComponent(i);
if (!component.isValid()) {
component.validate();
}
}
}
//
// Absolute positioning
//
//
// Get Methods
//
private NodeView getRoot(Container c) {
return ((MapView) c).getRoot();
}
// This is actually never used.
public Dimension minimumLayoutSize(Container parent) {
return new Dimension(200, 200);
} // For testing Purposes
public Dimension preferredLayoutSize(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);
}
/**
* @param map
* TODO
*/
private int calcYBorderSize(MapView map) {
int yBorderSize;
final int minBorderHeight = map.getZoomed(MindMapLayout.BORDER);
Dimension visibleSize = map.getViewportSize();
if (visibleSize != null) {
yBorderSize = Math.max(visibleSize.height, minBorderHeight);
} else {
yBorderSize = minBorderHeight;
}
return yBorderSize;
}
private int calcXBorderSize(MapView map) {
int xBorderSize;
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;
}
}// class MindMapLayout