Browse Source

Merge pull request #1325 in BA/design from ~YAOH.WU/a_design_0811:release/9.0 to release/9.0

* commit '315bed73112b850788ac137f1e68515e1fbb820a':
  图表配置区域大小问题
  REPORT-4944 设计器单元格元素、悬浮元素、聚合报表的图表配置接口适配
master
superman 7 years ago
parent
commit
2c98d2093b
  1. 828
      designer/src/com/fr/design/module/DesignerModule.java
  2. 320
      designer/src/com/fr/poly/creator/ChartBlockCreator.java
  3. 2
      designer/src/com/fr/quickeditor/CellQuickEditor.java
  4. 54
      designer/src/com/fr/quickeditor/ChartQuickEditor.java
  5. 51
      designer/src/com/fr/quickeditor/chartquick/BasicChartQuickEditor.java
  6. 34
      designer/src/com/fr/quickeditor/chartquick/FloatChartQuickEditor.java
  7. 31
      designer/src/com/fr/quickeditor/chartquick/PolyChartQuickEditor.java
  8. 6
      designer_base/src/com/fr/design/actions/core/ActionFactory.java

828
designer/src/com/fr/design/module/DesignerModule.java

@ -1,415 +1,415 @@
package com.fr.design.module; package com.fr.design.module;
import com.fr.base.*; import com.fr.base.*;
import com.fr.base.io.XMLEncryptUtils; import com.fr.base.io.XMLEncryptUtils;
import com.fr.base.process.ProcessOperator; import com.fr.base.process.ProcessOperator;
import com.fr.base.remote.RemoteDeziConstants; import com.fr.base.remote.RemoteDeziConstants;
import com.fr.design.DesignerEnvManager; import com.fr.design.DesignerEnvManager;
import com.fr.design.ExtraDesignClassManager; import com.fr.design.ExtraDesignClassManager;
import com.fr.design.actions.core.ActionFactory; import com.fr.design.actions.core.ActionFactory;
import com.fr.design.actions.insert.cell.*; import com.fr.design.actions.insert.cell.*;
import com.fr.design.actions.insert.flot.ChartFloatAction; import com.fr.design.actions.insert.flot.ChartFloatAction;
import com.fr.design.actions.insert.flot.FormulaFloatAction; import com.fr.design.actions.insert.flot.FormulaFloatAction;
import com.fr.design.actions.insert.flot.ImageFloatAction; import com.fr.design.actions.insert.flot.ImageFloatAction;
import com.fr.design.actions.insert.flot.TextBoxFloatAction; import com.fr.design.actions.insert.flot.TextBoxFloatAction;
import com.fr.design.actions.server.StyleListAction; import com.fr.design.actions.server.StyleListAction;
import com.fr.design.fun.ElementUIProvider; import com.fr.design.fun.ElementUIProvider;
import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilable.UILabel;
import com.fr.design.javascript.ProcessTransitionAdapter; import com.fr.design.javascript.ProcessTransitionAdapter;
import com.fr.design.mainframe.*; import com.fr.design.mainframe.*;
import com.fr.design.mainframe.bbs.BBSGuestPane; import com.fr.design.mainframe.bbs.BBSGuestPane;
import com.fr.design.mainframe.form.FormECCompositeProvider; import com.fr.design.mainframe.form.FormECCompositeProvider;
import com.fr.design.mainframe.form.FormECDesignerProvider; import com.fr.design.mainframe.form.FormECDesignerProvider;
import com.fr.design.mainframe.form.FormElementCaseDesigner; import com.fr.design.mainframe.form.FormElementCaseDesigner;
import com.fr.design.mainframe.form.FormReportComponentComposite; import com.fr.design.mainframe.form.FormReportComponentComposite;
import com.fr.design.mainframe.loghandler.DesignerLogImpl; import com.fr.design.mainframe.loghandler.DesignerLogImpl;
import com.fr.design.parameter.WorkBookParameterReader; import com.fr.design.parameter.WorkBookParameterReader;
import com.fr.design.utils.gui.GUICoreUtils; import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.file.FILE; import com.fr.file.FILE;
import com.fr.general.*; import com.fr.general.*;
import com.fr.general.xml.GeneralXMLTools; import com.fr.general.xml.GeneralXMLTools;
import com.fr.io.importer.Excel2007ReportImporter; import com.fr.io.importer.Excel2007ReportImporter;
import com.fr.io.importer.ExcelReportImporter; import com.fr.io.importer.ExcelReportImporter;
import com.fr.main.impl.WorkBook; import com.fr.main.impl.WorkBook;
import com.fr.quickeditor.ChartQuickEditor; import com.fr.quickeditor.chartquick.BasicChartQuickEditor;
import com.fr.quickeditor.cellquick.*; import com.fr.quickeditor.chartquick.FloatChartQuickEditor;
import com.fr.quickeditor.floatquick.FloatImageQuickEditor; import com.fr.quickeditor.cellquick.*;
import com.fr.quickeditor.floatquick.FloatStringQuickEditor; import com.fr.quickeditor.floatquick.FloatImageQuickEditor;
import com.fr.report.cell.CellElementValueConverter; import com.fr.quickeditor.floatquick.FloatStringQuickEditor;
import com.fr.report.cell.cellattr.core.RichText; import com.fr.report.cell.CellElementValueConverter;
import com.fr.report.cell.cellattr.core.SubReport; import com.fr.report.cell.cellattr.core.RichText;
import com.fr.report.cell.cellattr.core.group.DSColumn; import com.fr.report.cell.cellattr.core.SubReport;
import com.fr.report.cell.painter.BiasTextPainter; import com.fr.report.cell.cellattr.core.group.DSColumn;
import com.fr.stable.ArrayUtils; import com.fr.report.cell.painter.BiasTextPainter;
import com.fr.stable.ParameterProvider; import com.fr.stable.ArrayUtils;
import com.fr.stable.StringUtils; import com.fr.stable.ParameterProvider;
import com.fr.stable.bridge.StableFactory; import com.fr.stable.StringUtils;
import com.fr.stable.fun.LogProvider; import com.fr.stable.bridge.StableFactory;
import com.fr.stable.script.CalculatorProviderContext; import com.fr.stable.fun.LogProvider;
import com.fr.stable.script.ValueConverter; import com.fr.stable.script.CalculatorProviderContext;
import com.fr.stable.web.ServletContext; import com.fr.stable.script.ValueConverter;
import com.fr.stable.web.ServletContextAdapter; import com.fr.stable.web.ServletContext;
import com.fr.stable.xml.ObjectTokenizer; import com.fr.stable.web.ServletContextAdapter;
import com.fr.stable.xml.ObjectXMLWriterFinder; import com.fr.stable.xml.ObjectTokenizer;
import com.fr.start.BBSGuestPaneProvider; import com.fr.stable.xml.ObjectXMLWriterFinder;
import com.fr.xml.ReportXMLUtils; import com.fr.start.BBSGuestPaneProvider;
import com.fr.xml.ReportXMLUtils;
import javax.swing.*;
import java.awt.*; import javax.swing.*;
import java.awt.event.ActionEvent; import java.awt.*;
import java.awt.event.ActionListener; import java.awt.event.ActionEvent;
import java.awt.image.BufferedImage; import java.awt.event.ActionListener;
import java.util.ArrayList; import java.awt.image.BufferedImage;
import java.util.Iterator; import java.util.ArrayList;
import java.util.Set; import java.util.Iterator;
import java.util.Set;
public class DesignerModule extends DesignModule {
public class DesignerModule extends DesignModule {
static {
ServletContext.addServletContextListener(new ServletContextAdapter() { static {
ServletContext.addServletContextListener(new ServletContextAdapter() {
public void onServletStart() {
ModuleContext.startModule(DesignerModule.class.getName()); public void onServletStart() {
} ModuleContext.startModule(DesignerModule.class.getName());
}); }
} });
}
/**
* 启动设计器模块 /**
*/ * 启动设计器模块
public void start() { */
super.start(); public void start() {
super.start();
justStartModules4Engine();
justStartModules4Designer(); justStartModules4Engine();
justStartModules4Designer();
CalculatorProviderContext.setValueConverter(valueConverter());
GeneralXMLTools.Object_Tokenizer = startXMLReadObjectTokenizer(); CalculatorProviderContext.setValueConverter(valueConverter());
GeneralXMLTools.Object_XML_Writer_Finder = startObjectXMLWriterFinder(); GeneralXMLTools.Object_Tokenizer = startXMLReadObjectTokenizer();
addAdapterForPlate(); GeneralXMLTools.Object_XML_Writer_Finder = startObjectXMLWriterFinder();
addAdapterForPlate();
registerCellEditor();
registerFloatEditor(); registerCellEditor();
registerData4Form(); registerFloatEditor();
registerOtherPane(); registerData4Form();
registerOtherPane();
InformationCollector.getInstance().collectStartTime();
InformationCollector.getInstance().collectStartTime();
ExtraDesignClassManager.getInstance().getFeedback().didFeedback();
StableFactory.registerMarkedObject(LogProvider.MARK_STRING, DesignerLogImpl.getInstance()); ExtraDesignClassManager.getInstance().getFeedback().didFeedback();
} StableFactory.registerMarkedObject(LogProvider.MARK_STRING, DesignerLogImpl.getInstance());
}
private void registerOtherPane() {
StableFactory.registerMarkedClass(BBSGuestPaneProvider.XML_TAG, BBSGuestPane.class); private void registerOtherPane() {
} StableFactory.registerMarkedClass(BBSGuestPaneProvider.XML_TAG, BBSGuestPane.class);
}
/**
* kunsnat:注册单元格选中Editor /**
*/ * kunsnat:注册单元格选中Editor
*/
private void registerCellEditor() {
ActionFactory.registerCellEditor(String.class, CellStringQuickEditor.class); private void registerCellEditor() {
ActionFactory.registerCellEditor(Number.class, CellStringQuickEditor.class); ActionFactory.registerCellEditor(String.class, CellStringQuickEditor.class);
ActionFactory.registerCellEditor(Formula.class, CellFormulaQuickEditor.class); ActionFactory.registerCellEditor(Number.class, CellStringQuickEditor.class);
ActionFactory.registerCellEditor(SubReport.class, CellSubReportEditor.class); ActionFactory.registerCellEditor(Formula.class, CellFormulaQuickEditor.class);
ActionFactory.registerCellEditor(RichText.class, CellRichTextEditor.class); ActionFactory.registerCellEditor(SubReport.class, CellSubReportEditor.class);
ActionFactory.registerCellEditor(DSColumn.class, CellDSColumnEditor.class); ActionFactory.registerCellEditor(RichText.class, CellRichTextEditor.class);
ActionFactory.registerCellEditor(Image.class, CellImageQuickEditor.class); ActionFactory.registerCellEditor(DSColumn.class, CellDSColumnEditor.class);
ActionFactory.registerCellEditor(BiasTextPainter.class, CellBiasTextPainterEditor.class); ActionFactory.registerCellEditor(Image.class, CellImageQuickEditor.class);
ActionFactory.registerCellEditor(BufferedImage.class, CellImageQuickEditor.class); ActionFactory.registerCellEditor(BiasTextPainter.class, CellBiasTextPainterEditor.class);
ActionFactory.registerCellEditor(BufferedImage.class, CellImageQuickEditor.class);
ActionFactory.registerChartCellEditorInEditor(ChartQuickEditor.class);
ActionFactory.registerChartCellEditorInEditor(BasicChartQuickEditor.class);
Set<ElementUIProvider> providers = ExtraDesignClassManager.getInstance().getArray(ElementUIProvider.MARK_STRING);
for (ElementUIProvider provider : providers) { Set<ElementUIProvider> providers = ExtraDesignClassManager.getInstance().getArray(ElementUIProvider.MARK_STRING);
ActionFactory.registerCellEditor(provider.targetObjectClass(), provider.quickEditor()); for (ElementUIProvider provider : providers) {
} ActionFactory.registerCellEditor(provider.targetObjectClass(), provider.quickEditor());
} }
}
public String getInterNationalName() {
return Inter.getLocText("FR-Module_Designer"); public String getInterNationalName() {
} return Inter.getLocText("FR-Module_Designer");
}
/**
* kunnat: 注册悬浮选中Editor /**
*/ * kunnat: 注册悬浮选中Editor
private void registerFloatEditor() { */
ActionFactory.registerFloatEditor(String.class, FloatStringQuickEditor.class); private void registerFloatEditor() {
ActionFactory.registerFloatEditor(Formula.class, FloatStringQuickEditor.class); ActionFactory.registerFloatEditor(String.class, FloatStringQuickEditor.class);
ActionFactory.registerFloatEditor(Formula.class, FloatStringQuickEditor.class);
FloatImageQuickEditor floatImageQuickEditor = new FloatImageQuickEditor(); ActionFactory.registerFloatEditor(Image.class, FloatImageQuickEditor.class);
ActionFactory.registerFloatEditor(Image.class, FloatImageQuickEditor.class); ActionFactory.registerFloatEditor(BufferedImage.class, FloatImageQuickEditor.class);
ActionFactory.registerFloatEditor(BufferedImage.class, FloatImageQuickEditor.class);
ActionFactory.registerChartFloatEditorInEditor(ChartQuickEditor.class); ActionFactory.registerChartFloatEditorInEditor(FloatChartQuickEditor.class);
} }
/** /**
* kunsnat: 一些模块信息 必须跟随设计器启动, * kunsnat: 一些模块信息 必须跟随设计器启动,
* 比如 读取CC.XML, 设计器启动之后, 马上会读取XML, 需要Chart_Module中的注册信息 * 比如 读取CC.XML, 设计器启动之后, 马上会读取XML, 需要Chart_Module中的注册信息
*/ */
private void justStartModules4Engine() { private void justStartModules4Engine() {
ModuleContext.startModule(ENGINE_MODULE); ModuleContext.startModule(ENGINE_MODULE);
} }
private void justStartModules4Designer() { private void justStartModules4Designer() {
ModuleContext.startModule(CHART_DESIGNER_MODULE); ModuleContext.startModule(CHART_DESIGNER_MODULE);
ModuleContext.startModule(FORM_DESIGNER_MODULE); ModuleContext.startModule(FORM_DESIGNER_MODULE);
} }
/** /**
* CellElementValueConverter用来处理设计器格子里的值将公式/数组/其他元素转换成对应的值 * CellElementValueConverter用来处理设计器格子里的值将公式/数组/其他元素转换成对应的值
* *
* @return 返回处理格子值的转换器 * @return 返回处理格子值的转换器
*/ */
public ValueConverter valueConverter() { public ValueConverter valueConverter() {
return new CellElementValueConverter(); return new CellElementValueConverter();
} }
@Override @Override
/* /*
* 针对不同的对象在读取Object对象的xml的时候需要使用不同的对象生成器 * 针对不同的对象在读取Object对象的xml的时候需要使用不同的对象生成器
* @return 返回对象生成器 * @return 返回对象生成器
*/ */
public ObjectTokenizer startXMLReadObjectTokenizer() { public ObjectTokenizer startXMLReadObjectTokenizer() {
return new ReportXMLUtils.ReportObjectTokenizer(); return new ReportXMLUtils.ReportObjectTokenizer();
} }
/** /**
* 针对不同的对象在写对象的XML时需要使用不同的XML生成器 * 针对不同的对象在写对象的XML时需要使用不同的XML生成器
* *
* @return 返回xml生成器 * @return 返回xml生成器
*/ */
@Override @Override
public ObjectXMLWriterFinder startObjectXMLWriterFinder() { public ObjectXMLWriterFinder startObjectXMLWriterFinder() {
return new ReportXMLUtils.ReportObjectXMLWriterFinder(); return new ReportXMLUtils.ReportObjectXMLWriterFinder();
} }
//wei:fs的模块中可能有需要设计器界面做设置的地方,在这边添加 //wei:fs的模块中可能有需要设计器界面做设置的地方,在这边添加
private void addAdapterForPlate() { private void addAdapterForPlate() {
ProcessTransitionAdapter.setProcessTransitionAdapter(new ProcessTransitionAdapter() { ProcessTransitionAdapter.setProcessTransitionAdapter(new ProcessTransitionAdapter() {
@Override @Override
protected String[] getTransitionNamesByBook(String book) { protected String[] getTransitionNamesByBook(String book) {
return StableFactory.getMarkedObject(ProcessOperator.MARK_STRING, ProcessOperator.class, ProcessOperator.EMPTY).getTransitionNamesByBook(book); return StableFactory.getMarkedObject(ProcessOperator.MARK_STRING, ProcessOperator.class, ProcessOperator.EMPTY).getTransitionNamesByBook(book);
} }
@Override @Override
protected String[] getParaNames(String book) { protected String[] getParaNames(String book) {
return StableFactory.getMarkedObject(ProcessOperator.MARK_STRING, ProcessOperator.class, ProcessOperator.EMPTY).getParaNames(book); return StableFactory.getMarkedObject(ProcessOperator.MARK_STRING, ProcessOperator.class, ProcessOperator.EMPTY).getParaNames(book);
} }
@Override @Override
protected ParameterProvider[] getParas(String book) { protected ParameterProvider[] getParas(String book) {
return StableFactory.getMarkedObject(ProcessOperator.MARK_STRING, ProcessOperator.class, ProcessOperator.EMPTY).getParas(book); return StableFactory.getMarkedObject(ProcessOperator.MARK_STRING, ProcessOperator.class, ProcessOperator.EMPTY).getParas(book);
} }
protected MultiFieldParameter[] getAllMultiFieldParas(String book) { protected MultiFieldParameter[] getAllMultiFieldParas(String book) {
return StableFactory.getMarkedObject(ProcessOperator.MARK_STRING, ProcessOperator.class, ProcessOperator.EMPTY).getAllMultiFieldParas(book); return StableFactory.getMarkedObject(ProcessOperator.MARK_STRING, ProcessOperator.class, ProcessOperator.EMPTY).getAllMultiFieldParas(book);
} }
}); });
} }
private static abstract class AbstractWorkBookApp implements App<WorkBook> { private static abstract class AbstractWorkBookApp implements App<WorkBook> {
@Override @Override
public int currentAPILevel() { public int currentAPILevel() {
return CURRENT_LEVEL; return CURRENT_LEVEL;
} }
@Override @Override
public JTemplate<WorkBook, ?> openTemplate(FILE tplFile) { public JTemplate<WorkBook, ?> openTemplate(FILE tplFile) {
return new JWorkBook(asIOFile(tplFile), tplFile); return new JWorkBook(asIOFile(tplFile), tplFile);
} }
@Override @Override
public String mark4Provider() { public String mark4Provider() {
return getClass().getName(); return getClass().getName();
} }
@Override @Override
public void process() { public void process() {
} }
@Override @Override
public void undo() { public void undo() {
} }
} }
@Override @Override
/* /*
* 返回设计器能打开的模板类型的一个数组列表 * 返回设计器能打开的模板类型的一个数组列表
* @return 可以打开的模板类型的数组 * @return 可以打开的模板类型的数组
*/ */
public App[] apps4TemplateOpener() { public App[] apps4TemplateOpener() {
return new App[]{getCptApp(), getXlsApp(), getXlsxApp()}; return new App[]{getCptApp(), getXlsApp(), getXlsxApp()};
} }
private AbstractWorkBookApp getXlsxApp() { private AbstractWorkBookApp getXlsxApp() {
return new AbstractWorkBookApp() { return new AbstractWorkBookApp() {
@Override @Override
public String[] defaultExtentions() { public String[] defaultExtentions() {
return new String[]{"xlsx"}; return new String[]{"xlsx"};
} }
@Override @Override
public WorkBook asIOFile(FILE tplFile) { public WorkBook asIOFile(FILE tplFile) {
WorkBook workbook = null; WorkBook workbook = null;
try { try {
workbook = new Excel2007ReportImporter().generateWorkBookByStream(tplFile.asInputStream()); workbook = new Excel2007ReportImporter().generateWorkBookByStream(tplFile.asInputStream());
} catch (Exception exp) { } catch (Exception exp) {
FRContext.getLogger().error("Failed to generate xlsx from " + tplFile, exp); FRContext.getLogger().error("Failed to generate xlsx from " + tplFile, exp);
} }
return workbook; return workbook;
} }
}; };
} }
private AbstractWorkBookApp getXlsApp() { private AbstractWorkBookApp getXlsApp() {
return new AbstractWorkBookApp() { return new AbstractWorkBookApp() {
@Override @Override
public String[] defaultExtentions() { public String[] defaultExtentions() {
return new String[]{"xls"}; return new String[]{"xls"};
} }
@Override @Override
public WorkBook asIOFile(FILE tplFile) { public WorkBook asIOFile(FILE tplFile) {
WorkBook workbook = null; WorkBook workbook = null;
try { try {
workbook = new ExcelReportImporter().generateWorkBookByStream(tplFile.asInputStream()); workbook = new ExcelReportImporter().generateWorkBookByStream(tplFile.asInputStream());
} catch (Exception exp) { } catch (Exception exp) {
FRContext.getLogger().error("Failed to generate xls from " + tplFile, exp); FRContext.getLogger().error("Failed to generate xls from " + tplFile, exp);
} }
return workbook; return workbook;
} }
}; };
} }
private AbstractWorkBookApp getCptApp() { private AbstractWorkBookApp getCptApp() {
return new AbstractWorkBookApp() { return new AbstractWorkBookApp() {
public String[] defaultExtentions() { public String[] defaultExtentions() {
return new String[]{"cpt"}; return new String[]{"cpt"};
} }
public WorkBook asIOFile(FILE file) { public WorkBook asIOFile(FILE file) {
if (XMLEncryptUtils.isCptEncoded() && if (XMLEncryptUtils.isCptEncoded() &&
!XMLEncryptUtils.checkVaild(DesignerEnvManager.getEnvManager().getEncryptionKey())) { !XMLEncryptUtils.checkVaild(DesignerEnvManager.getEnvManager().getEncryptionKey())) {
if (!new DecodeDialog(file).isPwdRight()) { if (!new DecodeDialog(file).isPwdRight()) {
FRContext.getLogger().error(Inter.getLocText("ECP-error_pwd")); FRContext.getLogger().error(Inter.getLocText("ECP-error_pwd"));
return new WorkBook(); return new WorkBook();
} }
} }
WorkBook tpl = new WorkBook(); WorkBook tpl = new WorkBook();
// richer:打开报表通知 // richer:打开报表通知
FRContext.getLogger().info(Inter.getLocText(new String[]{"LOG-Is_Being_Openned", "LOG-Please_Wait"}, new String[]{"\"" + file.getName() + "\"" + ",", "..."})); FRContext.getLogger().info(Inter.getLocText(new String[]{"LOG-Is_Being_Openned", "LOG-Please_Wait"}, new String[]{"\"" + file.getName() + "\"" + ",", "..."}));
TempNameStyle namestyle = TempNameStyle.getInstance(); TempNameStyle namestyle = TempNameStyle.getInstance();
namestyle.clear(); namestyle.clear();
String checkStr = StringUtils.EMPTY; String checkStr = StringUtils.EMPTY;
try { try {
checkStr = IOUtils.inputStream2String(file.asInputStream()); checkStr = IOUtils.inputStream2String(file.asInputStream());
tpl.readStream(file.asInputStream()); tpl.readStream(file.asInputStream());
} catch (Exception exp) { } catch (Exception exp) {
String errorMessage = StringUtils.EMPTY; String errorMessage = StringUtils.EMPTY;
errorMessage = ComparatorUtils.equals(RemoteDeziConstants.INVALID_USER, checkStr) ? Inter.getLocText("FR-Designer_No-Privilege") errorMessage = ComparatorUtils.equals(RemoteDeziConstants.INVALID_USER, checkStr) ? Inter.getLocText("FR-Designer_No-Privilege")
: Inter.getLocText("NS-exception_readError"); : Inter.getLocText("NS-exception_readError");
FRContext.getLogger().error(errorMessage + file, exp); FRContext.getLogger().error(errorMessage + file, exp);
} }
checkNameStyle(namestyle); checkNameStyle(namestyle);
return tpl; return tpl;
} }
}; };
} }
private static void checkNameStyle(TempNameStyle namestyle) { private static void checkNameStyle(TempNameStyle namestyle) {
Iterator it = namestyle.getIterator(); Iterator it = namestyle.getIterator();
ArrayList<String> al = new ArrayList<String>(); ArrayList<String> al = new ArrayList<String>();
while (it.hasNext()) { while (it.hasNext()) {
al.add((String) it.next()); al.add((String) it.next());
} }
if (!al.isEmpty()) { if (!al.isEmpty()) {
showConfirmDialog(al); showConfirmDialog(al);
} }
} }
private static void showConfirmDialog(final ArrayList<String> namelist) { private static void showConfirmDialog(final ArrayList<String> namelist) {
final JDialog jd = new JDialog(); final JDialog jd = new JDialog();
// 模态一下,因为可能会多个样式丢失 // 模态一下,因为可能会多个样式丢失
// jd.setModal(true); // jd.setModal(true);
jd.setAlwaysOnTop(true); jd.setAlwaysOnTop(true);
jd.setSize(450, 150); jd.setSize(450, 150);
jd.setResizable(false); jd.setResizable(false);
jd.setIconImage(BaseUtils.readImage("/com/fr/base/images/oem/logo.png")); jd.setIconImage(BaseUtils.readImage("/com/fr/base/images/oem/logo.png"));
String message = namelist.toString().replaceAll("\\[", "").replaceAll("\\]", ""); String message = namelist.toString().replaceAll("\\[", "").replaceAll("\\]", "");
UILabel jl = new UILabel(Inter.getLocText(new String[]{"Current_custom_global", "Has_been_gone"}, new String[]{message})); UILabel jl = new UILabel(Inter.getLocText(new String[]{"Current_custom_global", "Has_been_gone"}, new String[]{message}));
jl.setHorizontalAlignment(SwingConstants.CENTER); jl.setHorizontalAlignment(SwingConstants.CENTER);
jd.add(jl, BorderLayout.CENTER); jd.add(jl, BorderLayout.CENTER);
JPanel jp = new JPanel(); JPanel jp = new JPanel();
// ”是“按钮,点击之后将生成一个全局样式,并写入xml // ”是“按钮,点击之后将生成一个全局样式,并写入xml
UIButton confirmButton = new UIButton(Inter.getLocText("FR-Designer_Yes")); UIButton confirmButton = new UIButton(Inter.getLocText("FR-Designer_Yes"));
confirmButton.addActionListener(new ActionListener() { confirmButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
try { try {
for (int i = 0; i < namelist.size(); i++) { for (int i = 0; i < namelist.size(); i++) {
ConfigManager.getProviderInstance().putStyle(namelist.get(i), Style.DEFAULT_STYLE); ConfigManager.getProviderInstance().putStyle(namelist.get(i), Style.DEFAULT_STYLE);
FRContext.getCurrentEnv().writeResource(ConfigManager.getProviderInstance()); FRContext.getCurrentEnv().writeResource(ConfigManager.getProviderInstance());
} }
} catch (Exception ex) { } catch (Exception ex) {
FRLogger.getLogger().error(ex.getMessage()); FRLogger.getLogger().error(ex.getMessage());
} }
jd.dispose(); jd.dispose();
new StyleListAction().actionPerformed(e);// 弹窗 new StyleListAction().actionPerformed(e);// 弹窗
} }
}); });
UIButton noButton = new UIButton(Inter.getLocText("FR-Designer_No")); UIButton noButton = new UIButton(Inter.getLocText("FR-Designer_No"));
noButton.addActionListener(new ActionListener() { noButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
jd.dispose(); jd.dispose();
} }
}); });
jp.add(confirmButton); jp.add(confirmButton);
jp.add(noButton); jp.add(noButton);
jd.setTitle(Inter.getLocText("FR-Custom_styles_lost")); jd.setTitle(Inter.getLocText("FR-Custom_styles_lost"));
jd.add(jp, BorderLayout.SOUTH); jd.add(jp, BorderLayout.SOUTH);
GUICoreUtils.centerWindow(jd); GUICoreUtils.centerWindow(jd);
jd.setVisible(true); jd.setVisible(true);
} }
public Class<?>[] actionsForInsertCellElement() { public Class<?>[] actionsForInsertCellElement() {
return (Class<?>[]) ArrayUtils.addAll(new Class<?>[]{ return (Class<?>[]) ArrayUtils.addAll(new Class<?>[]{
DSColumnCellAction.class, DSColumnCellAction.class,
GeneralCellAction.class, GeneralCellAction.class,
RichTextCellAction.class, RichTextCellAction.class,
FormulaCellAction.class, FormulaCellAction.class,
ChartCellAction.class, ChartCellAction.class,
ImageCellAction.class, ImageCellAction.class,
BiasCellAction.class, BiasCellAction.class,
SubReportCellAction.class SubReportCellAction.class
}, super.actionsForInsertCellElement()); }, super.actionsForInsertCellElement());
} }
public Class<?>[] actionsForInsertFloatElement() { public Class<?>[] actionsForInsertFloatElement() {
return (Class<?>[]) ArrayUtils.addAll(new Class<?>[]{ return (Class<?>[]) ArrayUtils.addAll(new Class<?>[]{
TextBoxFloatAction.class, TextBoxFloatAction.class,
FormulaFloatAction.class, FormulaFloatAction.class,
ChartFloatAction.class, ChartFloatAction.class,
ImageFloatAction.class ImageFloatAction.class
}, super.actionsForInsertFloatElement()); }, super.actionsForInsertFloatElement());
} }
private void registerData4Form() { private void registerData4Form() {
StableFactory.registerMarkedClass(FormECDesignerProvider.XML_TAG, FormElementCaseDesigner.class); StableFactory.registerMarkedClass(FormECDesignerProvider.XML_TAG, FormElementCaseDesigner.class);
StableFactory.registerMarkedClass(FormECCompositeProvider.XML_TAG, FormReportComponentComposite.class); StableFactory.registerMarkedClass(FormECCompositeProvider.XML_TAG, FormReportComponentComposite.class);
DesignModuleFactory.registerParameterReader(new WorkBookParameterReader()); DesignModuleFactory.registerParameterReader(new WorkBookParameterReader());
} }
} }

320
designer/src/com/fr/poly/creator/ChartBlockCreator.java

@ -1,166 +1,156 @@
/* package com.fr.poly.creator;
* Copyright(c) 2001-2010, FineReport Inc, All Rights Reserved.
*/ import com.fr.design.DesignState;
package com.fr.poly.creator; import com.fr.design.designer.TargetComponent;
import com.fr.design.gui.chart.MiddleChartComponent;
import java.awt.*; import com.fr.design.menu.MenuDef;
import java.awt.image.BufferedImage; import com.fr.design.menu.ShortCut;
import com.fr.design.menu.ToolBarDef;
import javax.swing.*; import com.fr.design.module.DesignModuleFactory;
import com.fr.design.selection.QuickEditor;
import com.fr.base.ScreenResolution; import com.fr.quickeditor.chartquick.PolyChartQuickEditor;
import com.fr.design.DesignState; import com.fr.report.poly.PolyChartBlock;
import com.fr.design.designer.TargetComponent; import com.fr.stable.unit.FU;
import com.fr.design.file.HistoryTemplateListPane; import com.fr.stable.unit.UNIT;
import com.fr.design.gui.chart.MiddleChartComponent; import com.fr.stable.unit.UnitRectangle;
import com.fr.design.menu.MenuDef;
import com.fr.design.menu.ShortCut; import javax.swing.*;
import com.fr.design.menu.ToolBarDef; import java.awt.*;
import com.fr.design.module.DesignModuleFactory;
import com.fr.design.selection.QuickEditor; /**
import com.fr.quickeditor.ChartQuickEditor; * @author richer
import com.fr.report.poly.PolyChartBlock; * @since 6.5.4 创建于2011-5-10
import com.fr.stable.unit.FU; */
import com.fr.stable.unit.UNIT; public class ChartBlockCreator extends BlockCreator<PolyChartBlock> {
import com.fr.stable.unit.UnitRectangle; private MiddleChartComponent cpm;
private ChartBlockEditor editor;
/**
* @author richer //图表默认宽高330*240
* @since 6.5.4 创建于2011-5-10 private static final UNIT DEFAULT_WIDTH = FU.getInstance(12573000);
*/ private static final UNIT DEFAULT_HEIGHT = FU.getInstance(9144000);
public class ChartBlockCreator extends BlockCreator<PolyChartBlock> {
private MiddleChartComponent cpm;
private ChartBlockEditor editor; public ChartBlockCreator() {
//图表默认宽高330*240 }
private static final UNIT DEFAULT_WIDTH = FU.getInstance(12573000);
private static final UNIT DEFAULT_HEIGHT = FU.getInstance(9144000); public ChartBlockCreator(PolyChartBlock block) {
super(block);
}
public ChartBlockCreator() {
public void setResolution(int resolution) {
} this.resolution = resolution;
}
public ChartBlockCreator(PolyChartBlock block) {
super(block); /**
} * 初始化
*
public void setResolution(int resolution){ * @return 初始化的控件.
this.resolution = resolution; */
} public JComponent initMonitor() {
cpm = DesignModuleFactory.getChartComponent(getValue().getChartCollection());
/** cpm.setBorder(BorderFactory.createLineBorder(Color.lightGray));
* 初始化 return cpm;
* @return 初始化的控件. }
*/
public JComponent initMonitor() { public UnitRectangle getDefaultBlockBounds() {
cpm = DesignModuleFactory.getChartComponent(getValue().getChartCollection()); return new UnitRectangle(UNIT.ZERO, UNIT.ZERO, DEFAULT_WIDTH, DEFAULT_HEIGHT);
cpm.setBorder(BorderFactory.createLineBorder(Color.lightGray)); }
return cpm;
} @Override
public BlockEditor getEditor() {
public UnitRectangle getDefaultBlockBounds() { if (editor == null) {
return new UnitRectangle(UNIT.ZERO, UNIT.ZERO, DEFAULT_WIDTH, DEFAULT_HEIGHT); editor = new ChartBlockEditor(designer, this);
} }
return editor;
@Override }
public BlockEditor getEditor() {
if (editor == null) { @Override
editor = new ChartBlockEditor(designer, this); public int getX(float time) {
} return (int) (this.getX() * time);
return editor; }
}
@Override
@Override public int getY(float time) {
public int getX(float time) { return (int) (this.getY() * time);
return (int) (this.getX() * time); }
}
@Override /**
public int getY(float time) { * 检测按钮状态
return (int) (this.getY() * time); *
} * @date 2015-2-5-上午11:33:46
*/
public void checkButtonEnable() {
/** if (editor == null) {
* 检测按钮状态 editor = new ChartBlockEditor(designer, this);
* }
* @date 2015-2-5-上午11:33:46 editor.checkChartButtonsEnable();
* }
*/
public void checkButtonEnable() { @Override
if (editor == null) { public PolyChartBlock getValue() {
editor = new ChartBlockEditor(designer, this); return block;
} }
editor.checkChartButtonsEnable();
} @Override
public void setValue(PolyChartBlock block) {
@Override this.block = block;
public PolyChartBlock getValue() { cpm.populate(this.block.getChartCollection());
return block; }
}
@Override /**
public void setValue(PolyChartBlock block) { * 获取当前工具栏组
this.block = block; *
cpm.populate(this.block.getChartCollection()); * @return 工具栏组
} * @date 2015-2-5-上午11:29:07
*/
public ToolBarDef[] toolbars4Target() {
return new ToolBarDef[0];
/** }
* 获取当前工具栏组
* /**
* @return 工具栏组 * 在Form的工具栏组
* *
* @date 2015-2-5-上午11:29:07 * @return 组件数组
* * @date 2015-2-5-上午11:31:46
*/ */
public ToolBarDef[] toolbars4Target() { public JComponent[] toolBarButton4Form() {
return new ToolBarDef[0]; return new JComponent[0];
} }
/** /**
* 在Form的工具栏组 * 目标的列表
* *
* @return 组件数组 * @return 返回列表.
* */
* @date 2015-2-5-上午11:31:46 public MenuDef[] menus4Target() {
* return new MenuDef[0];
*/ }
public JComponent[] toolBarButton4Form() {
return new JComponent[0]; public int getMenuState() {
} return DesignState.POLY_SHEET;
}
/**
* 目标的列表 /**
* @return 返回列表. * 模板的Menu
*/ *
public MenuDef[] menus4Target() { * @return 模板的menu
return new MenuDef[0]; */
} public ShortCut[] shortcut4TemplateMenu() {
return new ShortCut[0];
public int getMenuState(){ }
return DesignState.POLY_SHEET;
} @Override
public PolyElementCasePane getEditingElementCasePane() {
/** return null;
* 模板的Menu }
* @return 模板的menu
*/ @Override
public ShortCut[] shortcut4TemplateMenu() { public QuickEditor getQuickEditor(TargetComponent tc) {
return new ShortCut[0]; PolyChartQuickEditor quitEditor = new PolyChartQuickEditor();
} quitEditor.populate(tc);
return quitEditor;
@Override }
public PolyElementCasePane getEditingElementCasePane() {
return null;
}
@Override
public QuickEditor getQuickEditor(TargetComponent tc) {
ChartQuickEditor quitEditor = new ChartQuickEditor();
quitEditor.populate(tc);
return quitEditor;
}
} }

2
designer/src/com/fr/quickeditor/CellQuickEditor.java

@ -66,7 +66,7 @@ public abstract class CellQuickEditor extends QuickEditor<ElementCasePane> {
double p = TableLayout.PREFERRED; double p = TableLayout.PREFERRED;
double f = TableLayout.FILL; double f = TableLayout.FILL;
double[] columnSize = {p, f}; double[] columnSize = {p, f};
double[] rowSize = {p, p}; double[] rowSize = {p, f};
JComponent centerBody = createCenterBody(); JComponent centerBody = createCenterBody();
JPanel topContent = initTopContent(); JPanel topContent = initTopContent();
if (isScrollAll()) { if (isScrollAll()) {

54
designer/src/com/fr/quickeditor/ChartQuickEditor.java

@ -1,54 +0,0 @@
package com.fr.quickeditor;
import com.fr.base.chart.BaseChartCollection;
//import com.fr.chart.chartattr.ChartCollection;
import com.fr.design.designer.TargetComponent;
import com.fr.design.gui.chart.BaseChartPropertyPane;
import com.fr.design.mainframe.ElementCasePane;
import com.fr.design.module.DesignModuleFactory;
import com.fr.design.selection.QuickEditor;
import com.fr.grid.selection.CellSelection;
import com.fr.grid.selection.FloatSelection;
import com.fr.grid.selection.Selection;
import com.fr.poly.PolyDesigner;
import com.fr.poly.creator.ChartBlockEditor;
import com.fr.report.cell.Elem;
import java.awt.*;
public class ChartQuickEditor extends QuickEditor<TargetComponent>{
// kunsnat: editingPropertyPane初始化 避开设计器启动, 在用到的时候再初始化.
//private BaseChartPropertyPane editingPropertyPane = null;
public ChartQuickEditor() {
setLayout(new BorderLayout());
setBorder(null);
}
@Override
protected void refresh() {
BaseChartPropertyPane editingPropertyPane = null;
BaseChartCollection collection = null;
if(tc instanceof PolyDesigner) {
ChartBlockEditor chartBlockEditor = (ChartBlockEditor)((PolyDesigner)tc).getSelection().getEditor();
collection = chartBlockEditor.getValue().getChartCollection();
add(editingPropertyPane = DesignModuleFactory.getChartPropertyPane(), BorderLayout.CENTER);
editingPropertyPane.setSupportCellData(false);
} else {
Selection selection = ((ElementCasePane)tc).getSelection();
Elem element = null;
if(selection instanceof CellSelection) {
CellSelection cs = (CellSelection)selection;
element = ((ElementCasePane)tc).getEditingElementCase().getCellElement(cs.getColumn(), cs.getRow());
} else if(selection instanceof FloatSelection){
FloatSelection fs = (FloatSelection)selection;
element = ((ElementCasePane)tc).getEditingElementCase().getFloatElement(fs.getSelectedFloatName());
}
collection = (BaseChartCollection) element.getValue();
add(editingPropertyPane = DesignModuleFactory.getChartPropertyPane(), BorderLayout.CENTER);
}
editingPropertyPane.populateChartPropertyPane(collection, tc);
}
}

51
designer/src/com/fr/quickeditor/chartquick/BasicChartQuickEditor.java

@ -0,0 +1,51 @@
package com.fr.quickeditor.chartquick;
import com.fr.base.chart.BaseChartCollection;
import com.fr.design.actions.core.ActionFactory;
import com.fr.design.actions.insert.cell.ChartCellAction;
import com.fr.design.gui.chart.BaseChartPropertyPane;
import com.fr.design.module.DesignModuleFactory;
import com.fr.grid.selection.CellSelection;
import com.fr.grid.selection.Selection;
import com.fr.quickeditor.CellQuickEditor;
import com.fr.report.cell.Elem;
import javax.swing.*;
public class BasicChartQuickEditor extends CellQuickEditor {
private BaseChartPropertyPane editingPropertyPane;
public BasicChartQuickEditor() {
super();
}
@Override
public JComponent createCenterBody() {
editingPropertyPane = DesignModuleFactory.getChartPropertyPane();
editingPropertyPane.setBorder(BorderFactory.createEmptyBorder());
return editingPropertyPane;
}
@Override
public boolean isScrollAll() {
return false;
}
@Override
public Object getComboBoxSelected() {
return ActionFactory.createAction(ChartCellAction.class);
}
@Override
protected void refreshDetails() {
BaseChartCollection collection;
Selection selection = tc.getSelection();
Elem element;
CellSelection cs = (CellSelection) selection;
element = tc.getEditingElementCase().getCellElement(cs.getColumn(), cs.getRow());
collection = (BaseChartCollection) element.getValue();
editingPropertyPane.populateChartPropertyPane(collection, tc);
}
}

34
designer/src/com/fr/quickeditor/chartquick/FloatChartQuickEditor.java

@ -0,0 +1,34 @@
package com.fr.quickeditor.chartquick;
import com.fr.base.chart.BaseChartCollection;
import com.fr.design.gui.chart.BaseChartPropertyPane;
import com.fr.design.mainframe.ElementCasePane;
import com.fr.design.module.DesignModuleFactory;
import com.fr.design.selection.QuickEditor;
import com.fr.grid.selection.FloatSelection;
import com.fr.grid.selection.Selection;
import com.fr.report.cell.Elem;
import java.awt.*;
public class FloatChartQuickEditor extends QuickEditor<ElementCasePane> {
public FloatChartQuickEditor() {
setLayout(new BorderLayout());
setBorder(null);
}
@Override
protected void refresh() {
BaseChartPropertyPane editingPropertyPane;
BaseChartCollection collection;
Selection selection = tc.getSelection();
Elem element;
FloatSelection fs = (FloatSelection) selection;
element = tc.getEditingElementCase().getFloatElement(fs.getSelectedFloatName());
collection = (BaseChartCollection) element.getValue();
add(editingPropertyPane = DesignModuleFactory.getChartPropertyPane(), BorderLayout.CENTER);
editingPropertyPane.populateChartPropertyPane(collection, tc);
}
}

31
designer/src/com/fr/quickeditor/chartquick/PolyChartQuickEditor.java

@ -0,0 +1,31 @@
package com.fr.quickeditor.chartquick;
import com.fr.base.chart.BaseChartCollection;
import com.fr.design.designer.TargetComponent;
import com.fr.design.gui.chart.BaseChartPropertyPane;
import com.fr.design.module.DesignModuleFactory;
import com.fr.design.selection.QuickEditor;
import com.fr.poly.PolyDesigner;
import com.fr.poly.creator.ChartBlockEditor;
import java.awt.*;
public class PolyChartQuickEditor extends QuickEditor<TargetComponent> {
public PolyChartQuickEditor() {
setLayout(new BorderLayout());
setBorder(null);
}
@Override
protected void refresh() {
BaseChartPropertyPane editingPropertyPane;
BaseChartCollection collection;
ChartBlockEditor chartBlockEditor = (ChartBlockEditor) ((PolyDesigner) tc).getSelection().getEditor();
collection = chartBlockEditor.getValue().getChartCollection();
add(editingPropertyPane = DesignModuleFactory.getChartPropertyPane(), BorderLayout.CENTER);
editingPropertyPane.setSupportCellData(false);
editingPropertyPane.populateChartPropertyPane(collection, tc);
}
}

6
designer_base/src/com/fr/design/actions/core/ActionFactory.java

@ -24,11 +24,11 @@ public class ActionFactory {
private ActionFactory() { private ActionFactory() {
} }
private static Map<Class, Class<? extends QuickEditor>> floatEditor = new HashMap<Class, Class<? extends QuickEditor>>(); private static Map<Class, Class<? extends QuickEditor>> floatEditor = new HashMap<>();
private static Class chartCollectionClass = null; private static Class chartCollectionClass = null;
private static Map<Class, Class<? extends QuickEditor>> cellEditor = new HashMap<Class, Class<? extends QuickEditor>>(); private static Map<Class, Class<? extends QuickEditor>> cellEditor = new HashMap<>();
private static UpdateAction chartPreStyleAction = null; private static UpdateAction chartPreStyleAction = null;
@ -98,7 +98,7 @@ public class ActionFactory {
} }
/** /**
* kunsnat: 图表注册 悬浮元素编辑器 , 因为ChartCollecion和ChartQuickEditor一个在Chart,一个在Designer, 所以分开注册. * kunsnat: 图表注册 悬浮元素编辑器 , 因为ChartCollection和ChartQuickEditor一个在Chart,一个在Designer, 所以分开注册.
* *
* @param editor 待说明 * @param editor 待说明
*/ */

Loading…
Cancel
Save