帆软报表设计器源代码。
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.
 
 
 
 

96 lines
2.4 KiB

package com.fr.design.designer.beans.location;
import java.awt.Cursor;
import java.awt.Rectangle;
import com.fr.design.mainframe.FormDesigner;
import com.fr.design.utils.gui.LayoutUtils;
/**
* 这个类用可以用来拖拽表单最底层容器的大小。目前只用于参数界面
*/
public abstract class RootResizeDirection implements Direction {
public static RootResizeDirection BOTTOM_RESIZE = new RootResizeDirection(Direction.BOTTOM) {
@Override
public Cursor getCursor() {
return Cursor.getPredefinedCursor(Cursor.S_RESIZE_CURSOR);
}
@Override
public void resizeRootBounds(Rectangle rec, int dx, int dy) {
rec.height += dy;
}
};
public static RootResizeDirection RIGHT_RESIZE = new RootResizeDirection(Direction.RIGHT) {
@Override
public Cursor getCursor() {
return Cursor.getPredefinedCursor(Cursor.E_RESIZE_CURSOR);
}
@Override
public void resizeRootBounds(Rectangle rec, int dx, int dy) {
rec.width += dx;
}
};
public static RootResizeDirection RIGHT_BOTTOM_RESIZE = new RootResizeDirection(Direction.RIGHT_BOTTOM) {
@Override
public Cursor getCursor() {
return Cursor.getPredefinedCursor(Cursor.SE_RESIZE_CURSOR);
}
@Override
public void resizeRootBounds(Rectangle rec, int dx, int dy) {
rec.height += dy;
rec.width += dx;
}
};
private int actual;
private Rectangle oldBounds;
private RootResizeDirection(int actual) {
this.actual = actual;
}
@Override
public void drag(int dx, int dy, FormDesigner designer) {
Rectangle rec = new Rectangle(oldBounds);
if (actual == Direction.BOTTOM) {
rec.height += dy;
} else if (actual == Direction.RIGHT) {
rec.width += dx;
} else if (actual == Direction.RIGHT_BOTTOM) {
rec.height += dy;
rec.width += dx;
}
designer.getRootComponent().setBounds(rec);
designer.populateRootSize();
LayoutUtils.layoutRootContainer(designer.getRootComponent());
}
protected abstract void resizeRootBounds(Rectangle rec, int dx, int dy);
protected abstract Cursor getCursor();
@Override
public int getActual() {
return actual;
}
@Override
public void updateCursor(FormDesigner formEditor) {
formEditor.setCursor(getCursor());
}
@Override
public void backupBounds(FormDesigner designer) {
oldBounds = designer.getRootComponent().getBounds();
}
}