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.
113 lines
3.4 KiB
113 lines
3.4 KiB
package com.fr.poly; |
|
|
|
import com.fr.design.event.UIObserver; |
|
import com.fr.design.event.UIObserverListener; |
|
import com.fr.design.foldablepane.UIExpandablePane; |
|
import com.fr.design.gui.ispinner.UISpinner; |
|
import com.fr.design.mainframe.widget.BasicPropertyPane; |
|
import com.fr.design.widget.WidgetBoundsPaneFactory; |
|
import com.fr.general.Inter; |
|
import com.fr.poly.group.PolyBoundsGroup; |
|
import com.fr.report.poly.TemplateBlock; |
|
|
|
import javax.swing.*; |
|
import java.awt.*; |
|
|
|
public class PolyBlockProperTable extends JPanel { |
|
private PolyDesigner designer; |
|
private UISpinner x; |
|
private UISpinner y; |
|
private UISpinner width; |
|
private UISpinner height; |
|
private BasicPropertyPane blockPropertyPane; |
|
private boolean isPopulating = false; |
|
|
|
private static final int MAX_SPINNER_VALUE = 10000; |
|
|
|
public PolyBlockProperTable() { |
|
initPropertyPane(); |
|
initListener(this); |
|
} |
|
|
|
private void initPropertyPane() { |
|
this.setLayout(new BorderLayout()); |
|
|
|
blockPropertyPane = new BasicPropertyPane(); |
|
UIExpandablePane basicPane = new UIExpandablePane(Inter.getLocText("FR-Designer_Basic"), 280, 24, blockPropertyPane); |
|
this.add(basicPane, BorderLayout.NORTH); |
|
|
|
x = new UISpinner(0, MAX_SPINNER_VALUE, 1); |
|
y = new UISpinner(0, MAX_SPINNER_VALUE, 1); |
|
width = new UISpinner(0, MAX_SPINNER_VALUE, 1); |
|
height = new UISpinner(0, MAX_SPINNER_VALUE, 1); |
|
UIExpandablePane boundsPane = WidgetBoundsPaneFactory.createAbsoluteBoundsPane(x, y, width, height); |
|
this.add(boundsPane, BorderLayout.CENTER); |
|
} |
|
|
|
private void initListener(Container parentComponent) { |
|
for (int i = 0; i < parentComponent.getComponentCount(); i++) { |
|
Component tmpComp = parentComponent.getComponent(i); |
|
|
|
if (tmpComp instanceof Container) { |
|
initListener((Container) tmpComp); |
|
} |
|
if (tmpComp instanceof UIObserver) { |
|
((UIObserver) tmpComp).registerChangeListener(new UIObserverListener() { |
|
@Override |
|
public void doChange() { |
|
update(); |
|
} |
|
}); |
|
} |
|
} |
|
} |
|
|
|
/** |
|
* 初始化属性表 |
|
* |
|
* @param source 指定的属性来源 |
|
* |
|
*/ |
|
public void initPropertyGroups(Object source) { |
|
if (source instanceof TemplateBlock) { |
|
TemplateBlock block = (TemplateBlock) source; |
|
blockPropertyPane.getWidgetNameField().setText(block.getBlockName()); |
|
final PolyBoundsGroup boundsgroup = new PolyBoundsGroup(block, designer.getTarget()); |
|
|
|
x.setValue((int)boundsgroup.getValue(0, 1)); |
|
y.setValue((int)boundsgroup.getValue(1, 1)); |
|
width.setValue((int)boundsgroup.getValue(2, 1)); |
|
height.setValue((int)boundsgroup.getValue(3, 1)); |
|
} |
|
this.repaint(); |
|
} |
|
|
|
/** |
|
* 触发组件属性编辑事件 |
|
* |
|
*/ |
|
public void firePropertyEdit() { |
|
designer.fireTargetModified(); |
|
} |
|
|
|
public void populate(PolyDesigner designer) { |
|
isPopulating = true; |
|
this.designer = designer; |
|
initPropertyGroups(this.designer.getEditingTarget()); |
|
isPopulating = false; |
|
} |
|
|
|
public void update() { |
|
TemplateBlock block = this.designer.getEditingTarget(); |
|
if (isPopulating || block == null) { |
|
return; |
|
} |
|
block.setBlockName(blockPropertyPane.getWidgetNameField().getText()); |
|
PolyBoundsGroup boundsgroup = new PolyBoundsGroup(block, designer.getTarget()); |
|
boundsgroup.setValue(x.getValue(), 0, 1); |
|
boundsgroup.setValue(y.getValue(), 1, 1); |
|
boundsgroup.setValue(width.getValue(), 2, 1); |
|
boundsgroup.setValue(height.getValue(), 3, 1); |
|
firePropertyEdit(); |
|
} |
|
} |