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