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
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 ); |
|
} |
|
} |
|
} |