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

139 lines
5.0 KiB

package com.fr.design.present;
import com.fr.design.actions.utils.ReportActionUtils;
import com.fr.design.condition.HighLightConditionAttributesPane;
import com.fr.design.gui.controlpane.NameObjectCreator;
import com.fr.design.gui.controlpane.NameableCreator;
import com.fr.design.gui.controlpane.UIListControlPane;
import com.fr.design.mainframe.DesignerContext;
import com.fr.design.mainframe.ElementCasePane;
import com.fr.design.utils.gui.AdjustWorkBookDefaultStyleUtils;
import com.fr.design.mainframe.theme.utils.DefaultThemedTemplateCellElementCase;
import com.fr.general.NameObject;
import com.fr.grid.selection.CellSelection;
import com.fr.grid.selection.Selection;
import com.fr.log.FineLoggerFactory;
import com.fr.report.cell.CellElement;
import com.fr.report.cell.TemplateCellElement;
import com.fr.report.cell.cellattr.highlight.DefaultHighlight;
import com.fr.report.cell.cellattr.highlight.Highlight;
import com.fr.report.cell.cellattr.highlight.HighlightGroup;
import com.fr.report.core.SheetUtils;
import com.fr.report.elementcase.TemplateElementCase;
import com.fr.stable.Nameable;
import javax.swing.JPanel;
import java.util.ArrayList;
import java.util.List;
public class ConditionAttributesGroupPane extends UIListControlPane {
private static ConditionAttributesGroupPane singleton;
private TemplateCellElement editCellElement; // 当前单元格对象
private Selection editSelection; // 当前编辑对象
private ElementCasePane ePane;
private ConditionAttributesGroupPane() {
super();
}
public static ConditionAttributesGroupPane getInstance() {
if (singleton == null) {
singleton = new ConditionAttributesGroupPane();
}
return singleton;
}
@Override
public NameableCreator[] createNameableCreators() {
return new NameableCreator[] { new NameObjectCreator(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Condition_Attributes"), DefaultHighlight.class, HighLightConditionAttributesPane.class) };
}
@Override
public void saveSettings() {
if (isPopulating) {
return;
}
final TemplateElementCase tplEC = ePane.getEditingElementCase();
final HighlightGroup highlightGroup = updateHighlightGroup();
ReportActionUtils.actionIterateWithCellSelection((CellSelection) editSelection, tplEC, new ReportActionUtils.IterAction() {
public void dealWith(CellElement editCellElement) {
try {
((TemplateCellElement)editCellElement).setHighlightGroup((HighlightGroup) highlightGroup.clone());
} catch (CloneNotSupportedException e) {
FineLoggerFactory.getLogger().error("InternalError: " + e.getMessage());
}
}
});
DesignerContext.getDesignerFrame().getSelectedJTemplate().fireTargetModified();
}
@Override
public String title4PopupWindow() {
return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Condition_Attributes");
}
@Override
public String getAddItemText() {
return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Add_Condition");
}
@Override
protected JPanel createControlUpdatePane() {
return ConditionAttributesUpdatePane.newInstance(this);
}
public void populate(ElementCasePane ePane) {
this.ePane = ePane;
this.editSelection = ePane.getSelection();
CellSelection cs = (CellSelection) ePane.getSelection();
final TemplateElementCase tplEC = ePane.getEditingElementCase();
editCellElement = tplEC.getTemplateCellElement(cs.getColumn(), cs.getRow());
if (editCellElement == null) {
editCellElement = DefaultThemedTemplateCellElementCase.createInstance(cs.getColumn(), cs.getRow());
AdjustWorkBookDefaultStyleUtils.adjustCellElement(editCellElement);
}
SheetUtils.calculateDefaultParent(tplEC); // 不知道这行代码的作用,怕去掉之后会出问题,先放在这里
populate(editCellElement.getHighlightGroup());
}
/**
* Populate
*/
public void populate(HighlightGroup highlightGroup) {
// marks这个必须放在前面,不论是否有高亮分组都可以操作
if (highlightGroup == null || highlightGroup.size() <= 0) {
this.populate(new NameObject[0]);
return;
}
List<NameObject> nameObjectList = new ArrayList<NameObject>();
for (int i = 0; i < highlightGroup.size(); i++) {
nameObjectList.add(new NameObject(highlightGroup.getHighlight(i).getName(), highlightGroup.getHighlight(i)));
}
this.populate(nameObjectList.toArray(new NameObject[nameObjectList.size()]));
}
/**
* Update.
*/
public HighlightGroup updateHighlightGroup() {
Nameable[] res = this.update();
Highlight[] res_array = new Highlight[res.length];
for (int i = 0; i < res.length; i++) {
// carl:update出来的是一个对象,在块操作时就需要clone
Highlight highlight = (Highlight)((NameObject)res[i]).getObject();
highlight.setName(((NameObject)res[i]).getName());
try {
highlight = (Highlight)highlight.clone();
} catch (CloneNotSupportedException e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
}
res_array[i] = highlight;
}
return new HighlightGroup(res_array);
}
}