You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
112 lines
3.7 KiB
112 lines
3.7 KiB
9 years ago
|
package com.fr.poly;
|
||
|
|
||
|
|
||
|
import java.awt.Component;
|
||
|
import java.awt.Container;
|
||
|
import java.awt.Dimension;
|
||
|
import java.awt.Insets;
|
||
|
import java.awt.LayoutManager;
|
||
|
|
||
|
import com.fr.general.ComparatorUtils;
|
||
|
|
||
|
public class PolyDesignerLayout implements LayoutManager, java.io.Serializable {
|
||
|
public static final String Center = "Center";
|
||
|
public static final String Vertical = "Vertical";
|
||
|
public static final String HRuler = "HRuler";
|
||
|
public static final String VRuler = "VRuler";
|
||
|
|
||
|
private Component designer;
|
||
|
private Component verScrollBar;
|
||
|
private Component hRuler;
|
||
|
private Component vRuler;
|
||
|
|
||
|
public PolyDesignerLayout() {
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void addLayoutComponent(String name, Component comp) {
|
||
|
if (Center.equals(name)) {
|
||
|
designer = comp;
|
||
|
} else if (Vertical.equals(name)) {
|
||
|
verScrollBar = comp;
|
||
|
} else if (HRuler.equals(name)) {
|
||
|
hRuler = comp;
|
||
|
} else if (VRuler.equals(name)) {
|
||
|
vRuler = comp;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void removeLayoutComponent(Component comp) {
|
||
|
if (ComparatorUtils.equals(comp, designer)) {
|
||
|
designer = null;
|
||
|
} else if (ComparatorUtils.equals(comp, verScrollBar)) {
|
||
|
verScrollBar = null;
|
||
|
} else if (ComparatorUtils.equals(comp, hRuler)) {
|
||
|
hRuler = null;
|
||
|
} else if (ComparatorUtils.equals(comp, vRuler)) {
|
||
|
vRuler = null;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public Dimension preferredLayoutSize(Container target) {
|
||
|
synchronized (target.getTreeLock()) {
|
||
|
Dimension dim = new Dimension();
|
||
|
Dimension dim0 = designer.getPreferredSize();
|
||
|
dim.width += dim0.width;
|
||
|
dim.height += dim0.height;
|
||
|
Dimension dim2 = verScrollBar.getPreferredSize();
|
||
|
dim.width += dim2.width;
|
||
|
Insets insets = target.getInsets();
|
||
|
dim.width += insets.left + insets.right;
|
||
|
dim.height += insets.top + insets.bottom;
|
||
|
return dim;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public Dimension minimumLayoutSize(Container target) {
|
||
|
synchronized (target.getTreeLock()) {
|
||
|
Dimension dim = new Dimension();
|
||
|
Dimension dim0 = designer.getMinimumSize();
|
||
|
dim.width += dim0.width;
|
||
|
dim.height += dim0.height;
|
||
|
Dimension dim2 = verScrollBar.getMinimumSize();
|
||
|
dim.width += dim2.width;
|
||
|
Insets insets = target.getInsets();
|
||
|
dim.width += insets.left + insets.right;
|
||
|
dim.height += insets.top + insets.bottom;
|
||
|
return dim;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void layoutContainer(Container target) {
|
||
|
synchronized (target.getTreeLock()) {
|
||
|
Insets insets = target.getInsets();
|
||
|
int top = insets.top;
|
||
|
int bottom = target.getHeight() - insets.bottom;
|
||
|
int left = insets.left;
|
||
|
int right = target.getWidth() - insets.right;
|
||
|
Dimension hRulerPreferredSize = hRuler == null ? new Dimension() :hRuler.getPreferredSize();
|
||
|
Dimension vRulerPreferredSize = vRuler == null ? new Dimension() :vRuler.getPreferredSize();
|
||
|
// Dimension hbarPreferredSize = horScrollBar.getPreferredSize();
|
||
|
Dimension vbarPreferredSize = verScrollBar.getPreferredSize();
|
||
|
if(hRuler != null) {
|
||
|
hRuler.setBounds(left + vRulerPreferredSize.width -1, top, right - vRulerPreferredSize.width, hRulerPreferredSize.height);
|
||
|
}
|
||
|
if(vRuler != null) {
|
||
|
vRuler.setBounds(left, top + vRulerPreferredSize.height -1, vRulerPreferredSize.width, bottom - hRulerPreferredSize.height);
|
||
|
}
|
||
|
// horScrollBar.setBounds(left + vRulerPreferredSize.height, bottom - hbarPreferredSize.height, right - vRulerPreferredSize.height - 16, hbarPreferredSize.height);
|
||
|
verScrollBar.setBounds(right - vRulerPreferredSize.width, top + vRulerPreferredSize.height, vbarPreferredSize.width, bottom - hRulerPreferredSize.height - 16);
|
||
|
|
||
|
designer.setBounds(
|
||
|
left + vRulerPreferredSize.width,
|
||
|
top + vRulerPreferredSize.height,
|
||
|
right - vbarPreferredSize.width - vRulerPreferredSize.width,
|
||
|
bottom );
|
||
|
}
|
||
|
}
|
||
|
}
|