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

174 lines
6.8 KiB

/*
* Copyright(c) 2001-2010, FineReport Inc, All Rights Reserved.
*/
package com.fr.poly.creator;
import com.fr.base.vcs.DesignerMode;
import com.fr.design.DesignState;
import com.fr.design.actions.UpdateAction;
import com.fr.design.actions.cell.CellAttributeAction;
import com.fr.design.actions.cell.CellExpandAttrAction;
import com.fr.design.actions.cell.CellWidgetAttrAction;
import com.fr.design.actions.cell.ConditionAttributesAction;
import com.fr.design.actions.cell.GlobalStyleMenuDef;
import com.fr.design.actions.columnrow.InsertColumnAction;
import com.fr.design.actions.columnrow.InsertRowAction;
import com.fr.design.actions.core.ActionFactory;
import com.fr.design.actions.edit.HyperlinkAction;
import com.fr.design.actions.edit.merge.MergeCellAction;
import com.fr.design.actions.edit.merge.UnmergeCellAction;
import com.fr.design.actions.utils.DeprecatedActionManager;
import com.fr.design.base.mode.DesignModeContext;
import com.fr.design.event.TargetModifiedEvent;
import com.fr.design.event.TargetModifiedListener;
import com.fr.design.file.HistoryTemplateListPane;
import com.fr.design.mainframe.AuthorityPropertyPane;
import com.fr.design.mainframe.CellElementPropertyPane;
import com.fr.design.mainframe.EastRegionContainerPane;
import com.fr.design.mainframe.ElementCasePane;
import com.fr.design.mainframe.NoSupportAuthorityEdit;
import com.fr.design.menu.KeySetUtils;
import com.fr.design.menu.MenuDef;
import com.fr.design.menu.SeparatorDef;
import com.fr.design.selection.SelectionEvent;
import com.fr.design.selection.SelectionListener;
import com.fr.page.ReportSettingsProvider;
import com.fr.poly.PolyDesigner;
import com.fr.report.poly.PolyECBlock;
import com.fr.stable.ArrayUtils;
import java.awt.Dimension;
/**
* @author richer
* @since 6.5.4 创建于2011-4-2 聚合报表组件编辑器
*/
public class ECBlockPane extends PolyElementCasePane {
private PolyDesigner designer;
private BlockEditor be;
public ECBlockPane(final PolyDesigner designer, PolyECBlock block, BlockEditor be) {
super(block);
this.designer = designer;
this.be = be;
this.setTarget(block);
this.addSelectionChangeListener(new SelectionListener() {
@Override
public void selectionChanged(SelectionEvent e) {
if (!isEditable()) {
return;
}
if (DesignModeContext.isAuthorityEditing()) {
if (designer.getSelection().getEditingElementCasePane() == null) {
EastRegionContainerPane.getInstance().switchMode(EastRegionContainerPane.PropertyMode.AUTHORITY_EDITION_DISABLED);
EastRegionContainerPane.getInstance().replaceAuthorityEditionPane(new NoSupportAuthorityEdit());
HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().setAuthorityMode(false);
return;
}
AuthorityPropertyPane authorityPropertyPane = new AuthorityPropertyPane(designer);
authorityPropertyPane.populate();
EastRegionContainerPane.getInstance().switchMode(EastRegionContainerPane.PropertyMode.AUTHORITY_EDITION);
EastRegionContainerPane.getInstance().replaceAuthorityEditionPane(authorityPropertyPane);
return;
}
ECBlockPane.this.be.resetSelectionAndChooseState();
}
});
this.addTargetModifiedListener(new TargetModifiedListener() {
@Override
public void targetModified(TargetModifiedEvent e) {
// kunsnat: 没有找到相关作用,bug 35286 在图表聚合触发重新populate, 导致界面又回到第一层. 故屏蔽.
// ECBlockPane.this.be.resetSelectionAndChooseState();
// bug65880
// 聚合报表单元格设置拓展的时候没有触发,普通报表有触发
CellElementPropertyPane.getInstance().populate(ECBlockPane.this);
}
});
}
@Override
public void setTarget(PolyECBlock block) {
super.setTarget(block);
be.creator.setValue(block);
// this.be.initSize();
// ComponentUtils.layoutContainer(be);
}
public Dimension getCornerSize() {
int h = getGridColumn().getPreferredSize().height;
int w = getGridRow().getPreferredSize().width;
return new Dimension(w, h);
}
/**
* 目标的Menu
*
* @return 返回MenuDef数组.
*/
public MenuDef[] menus4Target() {
if (DesignerMode.isAuthorityEditing()) {
return super.menus4Target();
}
return ArrayUtils.addAll(super.menus4Target(), new MenuDef[]{createInsertMenuDef(), createCellMenuDef()});
}
public int getMenuState() {
return DesignState.WORK_SHEET;
}
// 插入菜单
private MenuDef createInsertMenuDef() {
MenuDef menuDef = new MenuDef(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_M_Insert"), 'I');
// 单元格菜单
menuDef.addShortCut(DeprecatedActionManager.getCellMenu(this));
addInsertFloatMenuDef(menuDef);
menuDef.addShortCut(SeparatorDef.DEFAULT);
menuDef.addShortCut(new InsertRowAction(this));
menuDef.addShortCut(new InsertColumnAction(this));
return menuDef;
}
private void addInsertFloatMenuDef(MenuDef menuDef) {
// 悬浮元素菜单
MenuDef subMenuDef = new MenuDef(KeySetUtils.INSERT_FLOAT.getMenuName());
subMenuDef.setIconPath("/com/fr/design/images/m_insert/float.png");
menuDef.addShortCut(subMenuDef);
UpdateAction[] actions = ActionFactory.createFloatInsertAction(ElementCasePane.class, this);
for (int i = 0; i < actions.length; i++) {
subMenuDef.addShortCut(actions[i]);
}
}
// 格式菜单
private MenuDef createCellMenuDef() {
MenuDef menuDef = new MenuDef(KeySetUtils.CELL.getMenuKeySetName(), KeySetUtils.CELL.getMnemonic());
menuDef.addShortCut(new CellExpandAttrAction());
menuDef.addShortCut(new CellWidgetAttrAction());
menuDef.addShortCut(new GlobalStyleMenuDef(this));
menuDef.addShortCut(new ConditionAttributesAction());
// 单元格形态
menuDef.addShortCut(DeprecatedActionManager.getPresentMenu(this));
menuDef.addShortCut(new HyperlinkAction());
menuDef.addShortCut(SeparatorDef.DEFAULT);
menuDef.addShortCut(new MergeCellAction(this));
menuDef.addShortCut(new UnmergeCellAction(this));
menuDef.addShortCut(SeparatorDef.DEFAULT);
menuDef.addShortCut(new CellAttributeAction());
return menuDef;
}
@Override
public ReportSettingsProvider getReportSettings() {
return designer.getTemplateReport().getReportSettings();
}
}