From f5b76e12185799a33dd952d80e938f1615ce166c Mon Sep 17 00:00:00 2001 From: richie Date: Tue, 26 Apr 2016 09:38:27 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8D=95=E5=85=83=E6=A0=BC?= =?UTF-8?q?=E5=85=83=E7=B4=A0=E6=8E=A5=E5=8F=A3=E5=92=8C=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/actions/cell/BorderAction.java | 4 +- .../style/ReportFontForegroundAction.java | 4 +- .../cell/style/StyleBackgroundAction.java | 4 +- .../actions/insert/cell/BiasCellAction.java | 3 +- .../actions/insert/cell/ChartCellAction.java | 7 +- .../insert/cell/DSColumnCellAction.java | 3 +- .../insert/cell/FormulaCellAction.java | 3 +- .../insert/cell/GeneralCellAction.java | 3 +- .../actions/insert/cell/ImageCellAction.java | 3 +- .../insert/cell/RichTextCellAction.java | 3 +- .../insert/flot/TextBoxFloatAction.java | 13 +- .../utils/DeprecatedActionManager.java | 9 +- .../fr/design/mainframe/ElementCasePane.java | 49 +- .../mainframe/ElementCasePaneDelegate.java | 4 +- .../com/fr/design/mainframe/JWorkBook.java | 2 +- .../form/FormElementCasePaneDelegate.java | 4 +- .../com/fr/design/module/DesignerModule.java | 712 ++++++++---------- .../com/fr/grid/selection/CellSelection.java | 4 +- .../com/fr/grid/selection/FloatSelection.java | 4 +- .../src/com/fr/poly/creator/ECBlockPane.java | 4 +- designer/src/com/fr/start/Designer.java | 6 +- .../fr/design/ExtraDesignClassManager.java | 19 + .../com/fr/design/actions/UpdateAction.java | 4 +- .../fr/design/actions/core/ActionFactory.java | 216 ++++++ .../fr/design/actions/core/ActionUtils.java | 202 ----- .../actions/core/WorkBookSupportable.java | 7 + .../com/fr/design/fun/ElementUIProvider.java | 26 + .../fun/impl/AbstractElementUIProvider.java | 20 + .../com/fr/design/mainframe/JTemplate.java | 5 + .../com/fr/design/module/DesignModule.java | 44 ++ .../com/fr/design/utils/gui/GUICoreUtils.java | 4 +- .../fr/design/module/ChartDesignerModule.java | 2 +- .../src/com/fr/design/mainframe/JForm.java | 5 + 33 files changed, 757 insertions(+), 645 deletions(-) create mode 100644 designer_base/src/com/fr/design/actions/core/ActionFactory.java delete mode 100644 designer_base/src/com/fr/design/actions/core/ActionUtils.java create mode 100644 designer_base/src/com/fr/design/actions/core/WorkBookSupportable.java create mode 100644 designer_base/src/com/fr/design/fun/ElementUIProvider.java create mode 100644 designer_base/src/com/fr/design/fun/impl/AbstractElementUIProvider.java diff --git a/designer/src/com/fr/design/actions/cell/BorderAction.java b/designer/src/com/fr/design/actions/cell/BorderAction.java index a47a4c030..4f706cdc7 100644 --- a/designer/src/com/fr/design/actions/cell/BorderAction.java +++ b/designer/src/com/fr/design/actions/cell/BorderAction.java @@ -10,7 +10,7 @@ import javax.swing.event.ChangeListener; import com.fr.base.BaseUtils; import com.fr.base.CellBorderStyle; import com.fr.design.actions.ElementCaseAction; -import com.fr.design.actions.core.ActionUtils; +import com.fr.design.actions.core.ActionFactory; import com.fr.design.style.BorderUtils; import com.fr.general.Inter; import com.fr.design.mainframe.ElementCasePane; @@ -56,7 +56,7 @@ public class BorderAction extends ElementCaseAction implements ChangeListener { borderStylePane.setEnabled(this.isEnabled()); borderStylePane.set4Toolbar(); // peter:产生tooltip - borderStylePane.setToolTipText(ActionUtils.createButtonToolTipText(this)); + borderStylePane.setToolTipText(ActionFactory.createButtonToolTipText(this)); borderStylePane.setCellBorderStyle(new CellBorderStyle()); borderStylePane.addStyleChangeListener(this); return borderStylePane; diff --git a/designer/src/com/fr/design/actions/cell/style/ReportFontForegroundAction.java b/designer/src/com/fr/design/actions/cell/style/ReportFontForegroundAction.java index d3ceb77c0..1a7d0b8e5 100644 --- a/designer/src/com/fr/design/actions/cell/style/ReportFontForegroundAction.java +++ b/designer/src/com/fr/design/actions/cell/style/ReportFontForegroundAction.java @@ -12,7 +12,7 @@ import javax.swing.event.ChangeListener; import com.fr.base.BaseUtils; import com.fr.base.Style; import com.fr.base.core.StyleUtils; -import com.fr.design.actions.core.ActionUtils; +import com.fr.design.actions.core.ActionFactory; import com.fr.general.ComparatorUtils; import com.fr.general.Inter; import com.fr.design.mainframe.ElementCasePane; @@ -59,7 +59,7 @@ public class ReportFontForegroundAction extends AbstractStyleAction implements C tbButton.addColorChangeListener(this); //peter:产生tooltip - tbButton.setToolTipText(ActionUtils.createButtonToolTipText(this)); + tbButton.setToolTipText(ActionFactory.createButtonToolTipText(this)); return tbButton; } diff --git a/designer/src/com/fr/design/actions/cell/style/StyleBackgroundAction.java b/designer/src/com/fr/design/actions/cell/style/StyleBackgroundAction.java index b3304727a..0ef9f5538 100644 --- a/designer/src/com/fr/design/actions/cell/style/StyleBackgroundAction.java +++ b/designer/src/com/fr/design/actions/cell/style/StyleBackgroundAction.java @@ -12,7 +12,7 @@ import javax.swing.event.ChangeListener; import com.fr.base.BaseUtils; import com.fr.base.Style; import com.fr.base.background.ColorBackground; -import com.fr.design.actions.core.ActionUtils; +import com.fr.design.actions.core.ActionFactory; import com.fr.general.ComparatorUtils; import com.fr.general.Inter; import com.fr.design.mainframe.ElementCasePane; @@ -68,7 +68,7 @@ public class StyleBackgroundAction extends AbstractStyleAction implements Change tbButton.addColorChangeListener(this); //peter:产生tooltip - tbButton.setToolTipText(ActionUtils.createButtonToolTipText(this)); + tbButton.setToolTipText(ActionFactory.createButtonToolTipText(this)); return tbButton; } diff --git a/designer/src/com/fr/design/actions/insert/cell/BiasCellAction.java b/designer/src/com/fr/design/actions/insert/cell/BiasCellAction.java index af5371122..e3821f299 100644 --- a/designer/src/com/fr/design/actions/insert/cell/BiasCellAction.java +++ b/designer/src/com/fr/design/actions/insert/cell/BiasCellAction.java @@ -6,6 +6,7 @@ package com.fr.design.actions.insert.cell; import javax.swing.KeyStroke; import com.fr.base.BaseUtils; +import com.fr.design.actions.core.WorkBookSupportable; import com.fr.design.mainframe.ElementCasePane; import com.fr.design.menu.MenuKeySet; import com.fr.general.Inter; @@ -14,7 +15,7 @@ import com.fr.report.cell.painter.BiasTextPainter; /** * Bias */ -public class BiasCellAction extends AbstractCellAction { +public class BiasCellAction extends AbstractCellAction implements WorkBookSupportable { public BiasCellAction(ElementCasePane t) { super(t); this.setMenuKeySet(INSERT_SLOPE_LINE); diff --git a/designer/src/com/fr/design/actions/insert/cell/ChartCellAction.java b/designer/src/com/fr/design/actions/insert/cell/ChartCellAction.java index 240b995ac..8f12d287b 100644 --- a/designer/src/com/fr/design/actions/insert/cell/ChartCellAction.java +++ b/designer/src/com/fr/design/actions/insert/cell/ChartCellAction.java @@ -4,7 +4,8 @@ package com.fr.design.actions.insert.cell; import com.fr.base.BaseUtils; -import com.fr.design.actions.core.ActionUtils; +import com.fr.design.actions.core.ActionFactory; +import com.fr.design.actions.core.WorkBookSupportable; import com.fr.design.mainframe.ElementCasePane; import com.fr.design.menu.MenuKeySet; import com.fr.general.Inter; @@ -14,7 +15,7 @@ import javax.swing.*; /** * . */ -public class ChartCellAction extends AbstractCellAction { +public class ChartCellAction extends AbstractCellAction implements WorkBookSupportable { public ChartCellAction(ElementCasePane t) { super(t); this.setMenuKeySet(INSERT_CHART); @@ -43,6 +44,6 @@ public class ChartCellAction extends AbstractCellAction { @Override public Class getCellValueClass() { - return ActionUtils.getChartCollectionClass(); + return ActionFactory.getChartCollectionClass(); } } \ No newline at end of file diff --git a/designer/src/com/fr/design/actions/insert/cell/DSColumnCellAction.java b/designer/src/com/fr/design/actions/insert/cell/DSColumnCellAction.java index 50a6bf4a7..632a8a2ee 100644 --- a/designer/src/com/fr/design/actions/insert/cell/DSColumnCellAction.java +++ b/designer/src/com/fr/design/actions/insert/cell/DSColumnCellAction.java @@ -1,11 +1,12 @@ package com.fr.design.actions.insert.cell; import com.fr.base.BaseUtils; +import com.fr.design.actions.core.WorkBookSupportable; import com.fr.design.menu.KeySetUtils; import com.fr.design.mainframe.ElementCasePane; import com.fr.report.cell.cellattr.core.group.DSColumn; -public class DSColumnCellAction extends AbstractCellAction { +public class DSColumnCellAction extends AbstractCellAction implements WorkBookSupportable { public DSColumnCellAction(ElementCasePane t) { super(t); this.setMenuKeySet(KeySetUtils.INSERT_DATA_COLUMN); diff --git a/designer/src/com/fr/design/actions/insert/cell/FormulaCellAction.java b/designer/src/com/fr/design/actions/insert/cell/FormulaCellAction.java index cd155b13e..92757d88e 100644 --- a/designer/src/com/fr/design/actions/insert/cell/FormulaCellAction.java +++ b/designer/src/com/fr/design/actions/insert/cell/FormulaCellAction.java @@ -5,13 +5,14 @@ package com.fr.design.actions.insert.cell; import com.fr.base.BaseUtils; import com.fr.base.Formula; +import com.fr.design.actions.core.WorkBookSupportable; import com.fr.design.mainframe.ElementCasePane; import com.fr.design.menu.MenuKeySet; import com.fr.general.Inter; import javax.swing.*; -public class FormulaCellAction extends AbstractCellAction { +public class FormulaCellAction extends AbstractCellAction implements WorkBookSupportable { public FormulaCellAction(ElementCasePane t) { super(t); this.setMenuKeySet(INSERT_FORMULA); diff --git a/designer/src/com/fr/design/actions/insert/cell/GeneralCellAction.java b/designer/src/com/fr/design/actions/insert/cell/GeneralCellAction.java index 2205c867e..714692467 100644 --- a/designer/src/com/fr/design/actions/insert/cell/GeneralCellAction.java +++ b/designer/src/com/fr/design/actions/insert/cell/GeneralCellAction.java @@ -4,6 +4,7 @@ package com.fr.design.actions.insert.cell; import com.fr.base.BaseUtils; +import com.fr.design.actions.core.WorkBookSupportable; import com.fr.design.mainframe.ElementCasePane; import com.fr.design.menu.MenuKeySet; import com.fr.general.Inter; @@ -13,7 +14,7 @@ import javax.swing.*; /** * */ -public class GeneralCellAction extends AbstractCellAction { +public class GeneralCellAction extends AbstractCellAction implements WorkBookSupportable { public GeneralCellAction(ElementCasePane t) { super(t); this.setMenuKeySet(INSERT_TEXT); diff --git a/designer/src/com/fr/design/actions/insert/cell/ImageCellAction.java b/designer/src/com/fr/design/actions/insert/cell/ImageCellAction.java index 7834b7985..594cb771b 100644 --- a/designer/src/com/fr/design/actions/insert/cell/ImageCellAction.java +++ b/designer/src/com/fr/design/actions/insert/cell/ImageCellAction.java @@ -4,6 +4,7 @@ package com.fr.design.actions.insert.cell; import com.fr.base.BaseUtils; +import com.fr.design.actions.core.WorkBookSupportable; import com.fr.design.mainframe.ElementCasePane; import com.fr.design.menu.MenuKeySet; import com.fr.general.Inter; @@ -14,7 +15,7 @@ import java.awt.*; /** * Image */ -public class ImageCellAction extends AbstractCellAction { +public class ImageCellAction extends AbstractCellAction implements WorkBookSupportable { public ImageCellAction(ElementCasePane t) { super(t); this.setMenuKeySet(INSERT_IMAGE); diff --git a/designer/src/com/fr/design/actions/insert/cell/RichTextCellAction.java b/designer/src/com/fr/design/actions/insert/cell/RichTextCellAction.java index c6550f2ef..c8017099f 100644 --- a/designer/src/com/fr/design/actions/insert/cell/RichTextCellAction.java +++ b/designer/src/com/fr/design/actions/insert/cell/RichTextCellAction.java @@ -3,13 +3,14 @@ package com.fr.design.actions.insert.cell; import javax.swing.KeyStroke; import com.fr.base.BaseUtils; +import com.fr.design.actions.core.WorkBookSupportable; import com.fr.design.mainframe.ElementCasePane; import com.fr.design.menu.MenuKeySet; import com.fr.general.ComparatorUtils; import com.fr.general.Inter; import com.fr.report.cell.cellattr.core.RichText; -public class RichTextCellAction extends AbstractCellAction { +public class RichTextCellAction extends AbstractCellAction implements WorkBookSupportable { public RichTextCellAction(ElementCasePane t) { super(t); diff --git a/designer/src/com/fr/design/actions/insert/flot/TextBoxFloatAction.java b/designer/src/com/fr/design/actions/insert/flot/TextBoxFloatAction.java index 774ef5b53..da57d8d15 100644 --- a/designer/src/com/fr/design/actions/insert/flot/TextBoxFloatAction.java +++ b/designer/src/com/fr/design/actions/insert/flot/TextBoxFloatAction.java @@ -15,11 +15,11 @@ import java.awt.event.ActionEvent; /** * Insert textbox. */ -public class TextBoxFloatAction extends AbstractShapeAction { - public TextBoxFloatAction(ElementCasePane t) { - super(t); +public class TextBoxFloatAction extends AbstractShapeAction { + public TextBoxFloatAction(ElementCasePane t) { + super(t); this.setMenuKeySet(FLOAT_INSERT_TEXT); - this.setName(getMenuKeySet().getMenuKeySetName()+ "..."); + this.setName(getMenuKeySet().getMenuKeySetName() + "..."); this.setMnemonic(getMenuKeySet().getMnemonic()); this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_insert/text.png")); } @@ -44,10 +44,11 @@ public class TextBoxFloatAction extends AbstractShapeAction { /** * 动作 + * * @param e 动作 */ - public void actionPerformed(ActionEvent e) { - ElementCasePane jws = getEditingComponent(); + public void actionPerformed(ActionEvent e) { + ElementCasePane jws = getEditingComponent(); if (jws == null) { return; } diff --git a/designer/src/com/fr/design/actions/utils/DeprecatedActionManager.java b/designer/src/com/fr/design/actions/utils/DeprecatedActionManager.java index 0135f8ddf..ccd39d838 100644 --- a/designer/src/com/fr/design/actions/utils/DeprecatedActionManager.java +++ b/designer/src/com/fr/design/actions/utils/DeprecatedActionManager.java @@ -8,7 +8,7 @@ import com.fr.design.ExtraDesignClassManager; import com.fr.design.constants.UIConstants; import com.fr.design.actions.UpdateAction; import com.fr.design.actions.cell.NewPresentAction; -import com.fr.design.actions.core.ActionUtils; +import com.fr.design.actions.core.ActionFactory; import com.fr.design.actions.edit.clear.*; import com.fr.design.actions.edit.order.BringFloatElementForwardAction; import com.fr.design.actions.edit.order.BringFloatElementToFrontAction; @@ -92,10 +92,11 @@ public class DeprecatedActionManager { final MenuDef subMenuDef = new MenuDef(KeySetUtils.CELL_ELEMENT.getMenuName()); subMenuDef.setIconPath("/com/fr/design/images/m_insert/cell.png"); - UpdateAction[] actions = ActionUtils.createCellInsertAction(ElementCasePane.class, ePane); - for (int i = 0; i < actions.length; i++) { - subMenuDef.addShortCut(actions[i]); + UpdateAction[] actions = ActionFactory.createCellInsertAction(ElementCasePane.class, ePane); + for (UpdateAction action : actions) { + subMenuDef.addShortCut(action); } + ePane.addSelectionChangeListener(new SelectionListener() { @Override diff --git a/designer/src/com/fr/design/mainframe/ElementCasePane.java b/designer/src/com/fr/design/mainframe/ElementCasePane.java index b23273bc5..ccd8a2378 100644 --- a/designer/src/com/fr/design/mainframe/ElementCasePane.java +++ b/designer/src/com/fr/design/mainframe/ElementCasePane.java @@ -17,6 +17,7 @@ import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; +import java.lang.reflect.Constructor; import javax.swing.AbstractAction; import javax.swing.ActionMap; @@ -36,6 +37,7 @@ import com.fr.base.ScreenResolution; import com.fr.base.Style; import com.fr.design.DesignState; import com.fr.design.DesignerEnvManager; +import com.fr.design.ExtraDesignClassManager; import com.fr.design.actions.AllowAuthorityEditAction; import com.fr.design.actions.ExitAuthorityEditAction; import com.fr.design.actions.UpdateAction; @@ -65,7 +67,7 @@ import com.fr.design.actions.columnrow.ResetColumnHideAction; import com.fr.design.actions.columnrow.ResetRowHideAction; import com.fr.design.actions.columnrow.RowHeightAction; import com.fr.design.actions.columnrow.RowHideAction; -import com.fr.design.actions.core.ActionUtils; +import com.fr.design.actions.core.ActionFactory; import com.fr.design.actions.edit.CopyAction; import com.fr.design.actions.edit.CutAction; import com.fr.design.actions.edit.PasteAction; @@ -75,20 +77,12 @@ import com.fr.design.cell.bar.DynamicScrollBar; import com.fr.design.cell.clipboard.CellElementsClip; import com.fr.design.cell.clipboard.ElementsTransferable; import com.fr.design.cell.clipboard.FloatElementsClip; -import com.fr.design.cell.editor.BiasTextPainterCellEditor; -import com.fr.design.cell.editor.ChartCellEditor; -import com.fr.design.cell.editor.ChartFloatEditor; -import com.fr.design.cell.editor.DSColumnCellEditor; -import com.fr.design.cell.editor.FormulaCellEditor; -import com.fr.design.cell.editor.FormulaFloatEditor; -import com.fr.design.cell.editor.ImageCellEditor; -import com.fr.design.cell.editor.ImageFloatEditor; -import com.fr.design.cell.editor.RichTextCellEditor; -import com.fr.design.cell.editor.SubReportCellEditor; +import com.fr.design.cell.editor.*; import com.fr.design.constants.UIConstants; import com.fr.design.designer.EditingState; import com.fr.design.designer.TargetComponent; import com.fr.design.file.HistoryTemplateListPane; +import com.fr.design.fun.ElementUIProvider; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.imenu.UIPopupMenu; import com.fr.design.mainframe.cell.QuickEditorRegion; @@ -103,6 +97,7 @@ import com.fr.design.selection.Selectedable; import com.fr.design.selection.SelectionEvent; import com.fr.design.selection.SelectionListener; import com.fr.general.ComparatorUtils; +import com.fr.general.FRLogger; import com.fr.general.Inter; import com.fr.grid.Grid; import com.fr.grid.GridColumn; @@ -372,19 +367,45 @@ public abstract class ElementCasePane extends Tar grid.setDefaultCellEditor(Image.class, new ImageCellEditor(this)); grid.setDefaultCellEditor(SubReport.class, new SubReportCellEditor(this)); - Class chartClass = ActionUtils.getChartCollectionClass(); + Class chartClass = ActionFactory.getChartCollectionClass(); if (chartClass != null) { grid.setDefaultCellEditor(chartClass, new ChartCellEditor(this)); grid.setDefaultFloatEditor(chartClass, new ChartFloatEditor()); } + addExtraCellEditor(grid); + grid.setDefaultFloatEditor(Formula.class, new FormulaFloatEditor()); grid.setDefaultFloatEditor(Image.class, new ImageFloatEditor()); + DesignerEnvManager designerEnvManager = DesignerEnvManager.getEnvManager(); grid.setGridLineColor(designerEnvManager.getGridLineColor()); grid.setPaginationLineColor(designerEnvManager.getPaginationLineColor()); } + private void addExtraCellEditor(Grid grid) { + ElementUIProvider[] providers = ExtraDesignClassManager.getInstance().getElementUIProviders(); + for (ElementUIProvider provider : providers) { + CellEditor editor = null; + Class clazz = provider.targetCellEditorClass(); + Constructor c; + try { + c = clazz.getConstructor(); + editor = (CellEditor) c.newInstance(); + } catch (NoSuchMethodException e) { + try { + c = clazz.getConstructor(ElementCase.class); + editor = (CellEditor) c.newInstance(this); + } catch (Exception e1) { + FRLogger.getLogger().error(e1.getMessage(), e1); + } + } catch (Exception e) { + FRLogger.getLogger().error(e.getMessage(), e); + } + grid.setDefaultCellEditor(provider.targetObjectClass(), editor); + } + } + /** * 返回当前正在编辑的模板单元格组件 */ @@ -1263,11 +1284,11 @@ public abstract class ElementCasePane extends Tar insertFloatMenu.setTooltip(Inter.getLocText("T_Insert-Float")); insertFloatMenu.setIconPath("/com/fr/design/images/m_insert/floatPop.png"); - UpdateAction[] actions = ActionUtils.createFloatInsertAction(ElementCasePane.class, this); + UpdateAction[] actions = ActionFactory.createFloatInsertAction(ElementCasePane.class, this); for (int i = 0; i < actions.length; i++) { insertFloatMenu.addShortCut(actions[i]); } - UpdateAction[] cellInsertActions = ActionUtils.createCellInsertAction(ElementCasePane.class, this); + UpdateAction[] cellInsertActions = ActionFactory.createCellInsertAction(ElementCasePane.class, this); ShortCut[] shortCuts = new ShortCut[cellInsertActions.length]; System.arraycopy(cellInsertActions, 0, shortCuts, 0, cellInsertActions.length); return ShortCut.asToolBarDef((ShortCut[]) ArrayUtils.add(shortCuts, insertFloatMenu)); diff --git a/designer/src/com/fr/design/mainframe/ElementCasePaneDelegate.java b/designer/src/com/fr/design/mainframe/ElementCasePaneDelegate.java index 9ea5e47aa..d6c167a01 100644 --- a/designer/src/com/fr/design/mainframe/ElementCasePaneDelegate.java +++ b/designer/src/com/fr/design/mainframe/ElementCasePaneDelegate.java @@ -10,7 +10,7 @@ import com.fr.design.DesignState; import com.fr.design.roleAuthority.RolesAlreadyEditedPane; import com.fr.design.actions.UpdateAction; import com.fr.design.actions.cell.*; -import com.fr.design.actions.core.ActionUtils; +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; @@ -131,7 +131,7 @@ public class ElementCasePaneDelegate extends ElementCasePane { MenuDef subMenuDef = new MenuDef(KeySetUtils.INSERT_FLOAT.getMenuName()); subMenuDef.setIconPath("/com/fr/design/images/m_insert/float.png"); menuDef.addShortCut(subMenuDef); - UpdateAction[] actions = ActionUtils.createFloatInsertAction(ElementCasePane.class, this); + UpdateAction[] actions = ActionFactory.createFloatInsertAction(ElementCasePane.class, this); for (int i = 0; i < actions.length; i++) { subMenuDef.addShortCut(actions[i]); } diff --git a/designer/src/com/fr/design/mainframe/JWorkBook.java b/designer/src/com/fr/design/mainframe/JWorkBook.java index 4ebddb199..d3e63782d 100644 --- a/designer/src/com/fr/design/mainframe/JWorkBook.java +++ b/designer/src/com/fr/design/mainframe/JWorkBook.java @@ -7,6 +7,7 @@ import com.fr.design.DesignModelAdapter; import com.fr.design.ExtraDesignClassManager; import com.fr.design.actions.AllowAuthorityEditAction; import com.fr.design.actions.ExitAuthorityEditAction; +import com.fr.design.actions.core.WorkBookSupportable; import com.fr.design.actions.file.WebPreviewUtils; import com.fr.design.actions.file.export.*; import com.fr.design.actions.report.ReportExportAttrAction; @@ -896,5 +897,4 @@ public class JWorkBook extends JTemplate { //产品想要重新设计下, 1现在的分享多列数据集很麻烦, 2想做成自动上传附件. // return new UIButton[]{new ShareButton()}; } - } \ No newline at end of file diff --git a/designer/src/com/fr/design/mainframe/form/FormElementCasePaneDelegate.java b/designer/src/com/fr/design/mainframe/form/FormElementCasePaneDelegate.java index 88fab3164..341808297 100644 --- a/designer/src/com/fr/design/mainframe/form/FormElementCasePaneDelegate.java +++ b/designer/src/com/fr/design/mainframe/form/FormElementCasePaneDelegate.java @@ -5,7 +5,7 @@ import javax.swing.JPanel; import com.fr.design.DesignState; import com.fr.design.actions.UpdateAction; -import com.fr.design.actions.core.ActionUtils; +import com.fr.design.actions.core.ActionFactory; import com.fr.design.actions.form.FormECBackgroundAction; import com.fr.design.actions.form.FormECColumnsAction; import com.fr.design.actions.form.FormECFrozenAction; @@ -108,7 +108,7 @@ public class FormElementCasePaneDelegate extends ElementCasePane{ - - @Override - public int currentAPILevel() { - return CURRENT_LEVEL; - } - - @Override - public JTemplate openTemplate(FILE tplFile) { - return new JWorkBook(asIOFile(tplFile), tplFile); - } - } - - @Override - /** - * 返回设计器能打开的模板类型的一个数组列表 - * @return 可以打开的模板类型的数组 - */ - public App[] apps4TemplateOpener() { - return new App[]{getCptApp(), getXlsApp(), getXlsxApp()}; - } - - private AbstractWorkBookApp getXlsxApp() { - return new AbstractWorkBookApp() { - @Override - public String[] defaultExtentions() { - return new String[]{"xlsx"}; - } - @Override - public WorkBook asIOFile(FILE tplFile) { - WorkBook workbook = null; - try { - workbook = new Excel2007ReportImporter().generateWorkBookByStream(tplFile.asInputStream()); - } catch (Exception exp) { - FRContext.getLogger().error("Failed to generate xlsx from " + tplFile, exp); - } - return workbook; - } - }; - } - - private AbstractWorkBookApp getXlsApp() { - return new AbstractWorkBookApp() { - @Override - public String[] defaultExtentions() { - return new String[]{"xls"}; - } - @Override - public WorkBook asIOFile(FILE tplFile) { - WorkBook workbook = null; - try { - workbook = new ExcelReportImporter().generateWorkBookByStream(tplFile.asInputStream()); - } catch (Exception exp) { - FRContext.getLogger().error("Failed to generate xls from " + tplFile, exp); - } - return workbook; - } - }; - } - - private AbstractWorkBookApp getCptApp() { - return new AbstractWorkBookApp() { - public String[] defaultExtentions() { - return new String[]{"cpt"}; - } - public WorkBook asIOFile(FILE file) { - if(XMLEncryptUtils.isCptEncoded() && - !XMLEncryptUtils.checkVaild(DesignerEnvManager.getEnvManager().getEncryptionKey())){ - if(!new DecodeDialog(file).isPwdRight()){ - FRContext.getLogger().error(Inter.getLocText("ECP-error_pwd")); - return new WorkBook(); - } - } - - WorkBook tpl = new WorkBook(); - // richer:打开报表通知 - FRContext.getLogger().info(Inter.getLocText(new String[]{"LOG-Is_Being_Openned", "LOG-Please_Wait"}, new String[]{"\"" + file.getName() + "\"" + ",", "..."})); - TempNameStyle namestyle = TempNameStyle.getInstance(); - namestyle.clear(); - String checkStr = StringUtils.EMPTY; - try { - checkStr = IOUtils.inputStream2String(file.asInputStream()); - tpl.readStream(file.asInputStream()); - } catch (Exception exp) { - String errorMessage = StringUtils.EMPTY; - errorMessage = ComparatorUtils.equals(RemoteDeziConstants.INVALID_USER, checkStr) ? Inter.getLocText("FR-Designer_No-Privilege") - : Inter.getLocText("NS-exception_readError"); - FRContext.getLogger().error(errorMessage + file, exp); - } - checkNameStyle(namestyle); - return tpl; - } - }; - } - - private static void checkNameStyle(TempNameStyle namestyle) { - Iterator it = namestyle.getIterator(); - ArrayList al = new ArrayList(); - while (it.hasNext()) { - al.add((String) it.next()); - } - if (!al.isEmpty()) { - showConfirmDialog(al); - } - } - - private static void showConfirmDialog(final ArrayList namelist) { - - final JDialog jd = new JDialog(); - // 模态一下,因为可能会多个样式丢失 - // jd.setModal(true); - jd.setAlwaysOnTop(true); - jd.setSize(450, 150); - jd.setResizable(false); - jd.setIconImage(BaseUtils.readImage("/com/fr/base/images/oem/logo.png")); - String message = namelist.toString().replaceAll("\\[", "").replaceAll("\\]", ""); - UILabel jl = new UILabel(Inter.getLocText(new String[]{"Current_custom_global", "Has_been_gone"}, new String[]{message})); - jl.setHorizontalAlignment(SwingConstants.CENTER); - jd.add(jl, BorderLayout.CENTER); - JPanel jp = new JPanel(); - - // ”是“按钮,点击之后将生成一个全局样式,并写入xml - UIButton confirmButton = new UIButton(Inter.getLocText("FR-Designer_Yes")); - confirmButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - try { - for (int i = 0; i < namelist.size(); i++) { - ConfigManager.getProviderInstance().putStyle(namelist.get(i), Style.DEFAULT_STYLE); - FRContext.getCurrentEnv().writeResource(ConfigManager.getProviderInstance()); - } - } catch (Exception ex) { - FRLogger.getLogger().error(ex.getMessage()); - } - jd.dispose(); - new StyleListAction().actionPerformed(e);// 弹窗 - } - }); - - UIButton noButton = new UIButton(Inter.getLocText("FR-Designer_No")); - noButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - jd.dispose(); - } - }); - - jp.add(confirmButton); - jp.add(noButton); - jd.setTitle(Inter.getLocText("FR-Custom_styles_lost")); - jd.add(jp, BorderLayout.SOUTH); - GUICoreUtils.centerWindow(jd); - jd.setVisible(true); - } - - private void generateInsertActionClasses() { - if (ModuleContext.isModuleStarted(CHART_MODULE)) { - ActionUtils.registerCellInsertActionClass(new Class[]{ - DSColumnCellAction.class, - GeneralCellAction.class, - RichTextCellAction.class, - FormulaCellAction.class, - ChartCellAction.class, - ImageCellAction.class, - BiasCellAction.class, - SubReportCellAction.class - }); - ActionUtils.registerFloatInsertActionClass(new Class[]{ - TextBoxFloatAction.class, - FormulaFloatAction.class, - ChartFloatAction.class, - ImageFloatAction.class - }); - } else { - ActionUtils.registerCellInsertActionClass(new Class[]{ - DSColumnCellAction.class, - GeneralCellAction.class, - FormulaCellAction.class, - ImageCellAction.class, - BiasCellAction.class, - SubReportCellAction.class - }); - ActionUtils.registerFloatInsertActionClass(new Class[]{ - TextBoxFloatAction.class, - FormulaFloatAction.class, - ImageFloatAction.class - }); - } - } - - private void registerHyperlink() { - if (ModuleContext.isModuleStarted(Module.CHART_MODULE)) { - DesignModuleFactory.registerCreators4Hyperlink(new NameableCreator[]{ - new NameObjectCreator(Inter.getLocText("FR-Hyperlink_Reportlet"), ReportletHyperlink.class, ReportletHyperlinkPane.CHART_NO_RENAME.class), - new NameObjectCreator(Inter.getLocText("FR-Designer_Email"), EmailJavaScript.class, EmailPane.class), - new NameObjectCreator(Inter.getLocText("Hyperlink-Web_link"), WebHyperlink.class, WebHyperlinkPane.CHART_NO_RENAME.class), - new NameObjectCreator(Inter.getLocText("JavaScript-Dynamic_Parameters"), ParameterJavaScript.class, ParameterJavaScriptPane.CHART_NO_RENAME.class), - new NameObjectCreator("JavaScript", JavaScriptImpl.class, JavaScriptImplPane.CHART_NO_RENAME.class) - }); - } else { - DesignModuleFactory.registerCreators4Hyperlink(new NameableCreator[]{ - new NameObjectCreator(Inter.getLocText("FR-Hyperlink_Reportlet"), ReportletHyperlink.class, ReportletHyperlinkPane.class), - new NameObjectCreator(Inter.getLocText("FR-Designer_Email"), EmailJavaScript.class, EmailPane.class), - new NameObjectCreator(Inter.getLocText("Hyperlink-Web_link"), WebHyperlink.class, WebHyperlinkPane.class), - new NameObjectCreator(Inter.getLocText("JavaScript-Dynamic_Parameters"), ParameterJavaScript.class, ParameterJavaScriptPane.class), - new NameObjectCreator("JavaScript", JavaScriptImpl.class, JavaScriptImplPane.class) - }); - } - } - - private void registerData4Form() { - StableFactory.registerMarkedClass(FormECDesignerProvider.XML_TAG, FormElementCaseDesigner.class); - StableFactory.registerMarkedClass(FormECCompositeProvider.XML_TAG, FormReportComponentComposite.class); + + /** + * kunnat: 注册悬浮选中Editor + */ + private void registerFloatEditor() { + FloatStringQuickEditor floatStringQuickEditor = new FloatStringQuickEditor(); + ActionFactory.registerFloatEditor(String.class, floatStringQuickEditor); + ActionFactory.registerFloatEditor(Formula.class, floatStringQuickEditor); + + FloatImageQuickEditor floatImageQuickEditor = new FloatImageQuickEditor(); + ActionFactory.registerFloatEditor(Image.class, floatImageQuickEditor); + ActionFactory.registerFloatEditor(BufferedImage.class, floatImageQuickEditor); + ActionFactory.registerChartFloatEditorInEditor(ChartQuickEditor.getInstance()); + } + + /** + * kunsnat: 一些模块信息 必须跟随设计器启动, + * 比如 读取CC.XML, 设计器启动之后, 马上会读取XML, 需要Chart_Module中的注册信息 + */ + private void justStartModules4Engine() { + ModuleContext.startModule(ENGINE_MODULE); + } + + private void justStartModules4Designer() { + ModuleContext.startModule(CHART_DESIGNER_MODULE); + ModuleContext.startModule(FORM_DESIGNER_MODULE); + } + + /** + * CellElementValueConverter用来处理设计器格子里的值,将公式/数组/其他元素转换成对应的值。 + * + * @return 返回处理格子值的转换器 + */ + public ValueConverter valueConverter() { + return new CellElementValueConverter(); + } + + @Override + /** + * 针对不同的对象,在读取Object对象的xml的时候需要使用不同的对象生成器 + * @return 返回对象生成器 + */ + public ObjectTokenizer startXMLReadObjectTokenizer() { + return new ReportXMLUtils.ReportObjectTokenizer(); + } + + /** + * 针对不同的对象,在写对象的XML时需要使用不同的XML生成器 + * + * @return 返回xml生成器 + */ + @Override + public ObjectXMLWriterFinder startObjectXMLWriterFinder() { + return new ReportXMLUtils.ReportObjectXMLWriterFinder(); + } + + //wei:fs的模块中可能有需要设计器界面做设置的地方,在这边添加 + private void addAdapterForPlate() { + + ProcessTransitionAdapter.setProcessTransitionAdapter(new ProcessTransitionAdapter() { + + @Override + protected String[] getTransitionNamesByBook(String book) { + return StableFactory.getMarkedObject(ProcessOperator.MARK_STRING, ProcessOperator.class, ProcessOperator.EMPTY).getTransitionNamesByBook(book); + } + + @Override + protected String[] getParaNames(String book) { + return StableFactory.getMarkedObject(ProcessOperator.MARK_STRING, ProcessOperator.class, ProcessOperator.EMPTY).getParaNames(book); + } + + @Override + protected ParameterProvider[] getParas(String book) { + return StableFactory.getMarkedObject(ProcessOperator.MARK_STRING, ProcessOperator.class, ProcessOperator.EMPTY).getParas(book); + } + + protected MultiFieldParameter[] getAllMultiFieldParas(String book) { + return StableFactory.getMarkedObject(ProcessOperator.MARK_STRING, ProcessOperator.class, ProcessOperator.EMPTY).getAllMultiFieldParas(book); + } + }); + } + + private static abstract class AbstractWorkBookApp implements App { + + @Override + public int currentAPILevel() { + return CURRENT_LEVEL; + } + + @Override + public JTemplate openTemplate(FILE tplFile) { + return new JWorkBook(asIOFile(tplFile), tplFile); + } + } + + @Override + /** + * 返回设计器能打开的模板类型的一个数组列表 + * @return 可以打开的模板类型的数组 + */ + public App[] apps4TemplateOpener() { + return new App[]{getCptApp(), getXlsApp(), getXlsxApp()}; + } + + private AbstractWorkBookApp getXlsxApp() { + return new AbstractWorkBookApp() { + @Override + public String[] defaultExtentions() { + return new String[]{"xlsx"}; + } + + @Override + public WorkBook asIOFile(FILE tplFile) { + WorkBook workbook = null; + try { + workbook = new Excel2007ReportImporter().generateWorkBookByStream(tplFile.asInputStream()); + } catch (Exception exp) { + FRContext.getLogger().error("Failed to generate xlsx from " + tplFile, exp); + } + return workbook; + } + }; + } + + private AbstractWorkBookApp getXlsApp() { + return new AbstractWorkBookApp() { + @Override + public String[] defaultExtentions() { + return new String[]{"xls"}; + } + + @Override + public WorkBook asIOFile(FILE tplFile) { + WorkBook workbook = null; + try { + workbook = new ExcelReportImporter().generateWorkBookByStream(tplFile.asInputStream()); + } catch (Exception exp) { + FRContext.getLogger().error("Failed to generate xls from " + tplFile, exp); + } + return workbook; + } + }; + } + + private AbstractWorkBookApp getCptApp() { + return new AbstractWorkBookApp() { + public String[] defaultExtentions() { + return new String[]{"cpt"}; + } + + public WorkBook asIOFile(FILE file) { + if (XMLEncryptUtils.isCptEncoded() && + !XMLEncryptUtils.checkVaild(DesignerEnvManager.getEnvManager().getEncryptionKey())) { + if (!new DecodeDialog(file).isPwdRight()) { + FRContext.getLogger().error(Inter.getLocText("ECP-error_pwd")); + return new WorkBook(); + } + } + + WorkBook tpl = new WorkBook(); + // richer:打开报表通知 + FRContext.getLogger().info(Inter.getLocText(new String[]{"LOG-Is_Being_Openned", "LOG-Please_Wait"}, new String[]{"\"" + file.getName() + "\"" + ",", "..."})); + TempNameStyle namestyle = TempNameStyle.getInstance(); + namestyle.clear(); + String checkStr = StringUtils.EMPTY; + try { + checkStr = IOUtils.inputStream2String(file.asInputStream()); + tpl.readStream(file.asInputStream()); + } catch (Exception exp) { + String errorMessage = StringUtils.EMPTY; + errorMessage = ComparatorUtils.equals(RemoteDeziConstants.INVALID_USER, checkStr) ? Inter.getLocText("FR-Designer_No-Privilege") + : Inter.getLocText("NS-exception_readError"); + FRContext.getLogger().error(errorMessage + file, exp); + } + checkNameStyle(namestyle); + return tpl; + } + }; + } + + private static void checkNameStyle(TempNameStyle namestyle) { + Iterator it = namestyle.getIterator(); + ArrayList al = new ArrayList(); + while (it.hasNext()) { + al.add((String) it.next()); + } + if (!al.isEmpty()) { + showConfirmDialog(al); + } + } + + private static void showConfirmDialog(final ArrayList namelist) { + + final JDialog jd = new JDialog(); + // 模态一下,因为可能会多个样式丢失 + // jd.setModal(true); + jd.setAlwaysOnTop(true); + jd.setSize(450, 150); + jd.setResizable(false); + jd.setIconImage(BaseUtils.readImage("/com/fr/base/images/oem/logo.png")); + String message = namelist.toString().replaceAll("\\[", "").replaceAll("\\]", ""); + UILabel jl = new UILabel(Inter.getLocText(new String[]{"Current_custom_global", "Has_been_gone"}, new String[]{message})); + jl.setHorizontalAlignment(SwingConstants.CENTER); + jd.add(jl, BorderLayout.CENTER); + JPanel jp = new JPanel(); + + // ”是“按钮,点击之后将生成一个全局样式,并写入xml + UIButton confirmButton = new UIButton(Inter.getLocText("FR-Designer_Yes")); + confirmButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + try { + for (int i = 0; i < namelist.size(); i++) { + ConfigManager.getProviderInstance().putStyle(namelist.get(i), Style.DEFAULT_STYLE); + FRContext.getCurrentEnv().writeResource(ConfigManager.getProviderInstance()); + } + } catch (Exception ex) { + FRLogger.getLogger().error(ex.getMessage()); + } + jd.dispose(); + new StyleListAction().actionPerformed(e);// 弹窗 + } + }); + + UIButton noButton = new UIButton(Inter.getLocText("FR-Designer_No")); + noButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + jd.dispose(); + } + }); + + jp.add(confirmButton); + jp.add(noButton); + jd.setTitle(Inter.getLocText("FR-Custom_styles_lost")); + jd.add(jp, BorderLayout.SOUTH); + GUICoreUtils.centerWindow(jd); + jd.setVisible(true); + } + + public Class[] actionsForInsertCellElement() { + return (Class[])ArrayUtils.addAll(new Class[]{ + DSColumnCellAction.class, + GeneralCellAction.class, + RichTextCellAction.class, + FormulaCellAction.class, + ChartCellAction.class, + ImageCellAction.class, + BiasCellAction.class, + SubReportCellAction.class + }, super.actionsForInsertCellElement()); + } + + public Class[] actionsForInsertFloatElement() { + return (Class[]) ArrayUtils.addAll(new Class[]{ + TextBoxFloatAction.class, + FormulaFloatAction.class, + ChartFloatAction.class, + ImageFloatAction.class + }, super.actionsForInsertFloatElement()); + } + + + private void registerData4Form() { + StableFactory.registerMarkedClass(FormECDesignerProvider.XML_TAG, FormElementCaseDesigner.class); + StableFactory.registerMarkedClass(FormECCompositeProvider.XML_TAG, FormReportComponentComposite.class); DesignModuleFactory.registerParameterReader(new WorkBookParameterReader()); - } + } } \ No newline at end of file diff --git a/designer/src/com/fr/grid/selection/CellSelection.java b/designer/src/com/fr/grid/selection/CellSelection.java index 075229e66..ef7fa3e1e 100644 --- a/designer/src/com/fr/grid/selection/CellSelection.java +++ b/designer/src/com/fr/grid/selection/CellSelection.java @@ -5,7 +5,7 @@ import com.fr.cache.list.IntList; import com.fr.design.actions.UpdateAction; import com.fr.design.actions.cell.*; import com.fr.design.actions.cell.GlobalStyleMenuDef.GlobalStyleSelection; -import com.fr.design.actions.core.ActionUtils; +import com.fr.design.actions.core.ActionFactory; import com.fr.design.actions.edit.CopyAction; import com.fr.design.actions.edit.CutAction; import com.fr.design.actions.edit.HyperlinkAction; @@ -669,7 +669,7 @@ public class CellSelection extends Selection { } value = value == null ? "" : value; //之前是少了个bigInteger,刚kunsnat又发现少了个bigDecimal,数字类型的都用stringEditor,没必要那个样子 - QuickEditor editor = ActionUtils.getCellEditor((value instanceof Number) ? (Number.class) : (value.getClass())); + QuickEditor editor = ActionFactory.getCellEditor((value instanceof Number) ? (Number.class) : (value.getClass())); if (editor == null) { return null; } diff --git a/designer/src/com/fr/grid/selection/FloatSelection.java b/designer/src/com/fr/grid/selection/FloatSelection.java index fedd878b1..0c1b1fcb0 100644 --- a/designer/src/com/fr/grid/selection/FloatSelection.java +++ b/designer/src/com/fr/grid/selection/FloatSelection.java @@ -8,7 +8,7 @@ import com.fr.base.BaseUtils; import com.fr.base.FRContext; import com.fr.design.actions.cell.CleanAuthorityAction; import com.fr.design.actions.cell.FloatStyleAction; -import com.fr.design.actions.core.ActionUtils; +import com.fr.design.actions.core.ActionFactory; import com.fr.design.actions.edit.CopyAction; import com.fr.design.actions.edit.CutAction; import com.fr.design.actions.edit.DeleteAction; @@ -226,7 +226,7 @@ public class FloatSelection extends Selection { Object value = selectedFloat.getValue(); value = value == null ? "" : value; value = value instanceof Number ? value.toString() : value; - QuickEditor editor = ActionUtils.getFloatEditor(value.getClass()); + QuickEditor editor = ActionFactory.getFloatEditor(value.getClass()); editor.populate(tc); return editor; } diff --git a/designer/src/com/fr/poly/creator/ECBlockPane.java b/designer/src/com/fr/poly/creator/ECBlockPane.java index 95be04270..a1e04d891 100644 --- a/designer/src/com/fr/poly/creator/ECBlockPane.java +++ b/designer/src/com/fr/poly/creator/ECBlockPane.java @@ -9,7 +9,7 @@ import com.fr.general.Inter; import com.fr.page.ReportSettingsProvider; import com.fr.design.actions.UpdateAction; import com.fr.design.actions.cell.*; -import com.fr.design.actions.core.ActionUtils; +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; @@ -130,7 +130,7 @@ public class ECBlockPane extends PolyElementCasePane { MenuDef subMenuDef = new MenuDef(KeySetUtils.INSERT_FLOAT.getMenuKeySetName()); subMenuDef.setIconPath("/com/fr/design/images/m_insert/float.png"); menuDef.addShortCut(subMenuDef); - UpdateAction[] actions = ActionUtils.createFloatInsertAction(ElementCasePane.class, this); + UpdateAction[] actions = ActionFactory.createFloatInsertAction(ElementCasePane.class, this); for (int i = 0; i < actions.length; i++) { subMenuDef.addShortCut(actions[i]); } diff --git a/designer/src/com/fr/start/Designer.java b/designer/src/com/fr/start/Designer.java index 6b2db03d9..cea142126 100644 --- a/designer/src/com/fr/start/Designer.java +++ b/designer/src/com/fr/start/Designer.java @@ -3,7 +3,7 @@ package com.fr.start; import com.fr.base.BaseUtils; import com.fr.base.FRContext; import com.fr.design.DesignerEnvManager; -import com.fr.design.actions.core.ActionUtils; +import com.fr.design.actions.core.ActionFactory; import com.fr.design.actions.file.WebPreviewUtils; import com.fr.design.actions.file.newReport.NewPolyReportAction; import com.fr.design.actions.file.newReport.NewWorkBookAction; @@ -111,8 +111,8 @@ public class Designer extends BaseDesigner { if (FRContext.getCurrentEnv().isRoot()) { menuDef.addShortCut(new ServerConfigManagerAction(), new StyleListAction(), new WidgetManagerAction()); - if (ActionUtils.getChartPreStyleAction() != null) { - menuDef.addShortCut(ActionUtils.getChartPreStyleAction()); + if (ActionFactory.getChartPreStyleAction() != null) { + menuDef.addShortCut(ActionFactory.getChartPreStyleAction()); } } diff --git a/designer_base/src/com/fr/design/ExtraDesignClassManager.java b/designer_base/src/com/fr/design/ExtraDesignClassManager.java index c761430e9..771dbec7a 100644 --- a/designer_base/src/com/fr/design/ExtraDesignClassManager.java +++ b/designer_base/src/com/fr/design/ExtraDesignClassManager.java @@ -128,6 +128,8 @@ public class ExtraDesignClassManager extends XMLFileManager implements ExtraDesi private TableDataTreePaneProcessor tableDataTreePaneProcessor; + private Set elementUIProviders; + public TableDataTreePaneProcessor getTableDataTreePaneProcessor() { return tableDataTreePaneProcessor; } @@ -719,6 +721,21 @@ public class ExtraDesignClassManager extends XMLFileManager implements ExtraDesi cellAttributeProvider = (CellAttributeProvider) level; } + public ElementUIProvider[] getElementUIProviders() { + if (elementUIProviders == null) { + return new ElementUIProvider[0]; + } + return elementUIProviders.toArray(new ElementUIProvider[elementUIProviders.size()]); + } + + public void addElementUIProvider(Level level, PluginSimplify simplify) throws Exception { + if (elementUIProviders == null) { + elementUIProviders = new HashSet(); + } + validAPILevel(level, ElementUIProvider.CURRENT_LEVEL, simplify.getPluginName()); + elementUIProviders.add((ElementUIProvider) level); + } + /** * 文件名 * @@ -809,6 +826,8 @@ public class ExtraDesignClassManager extends XMLFileManager implements ExtraDesi setEnvProcessor(impl, simplify); } else if (tagName.equals(TableDataTreePaneProcessor.XML_TAG)) { setTableDataSourceOPProcessor(impl, simplify); + } else if (tagName.equals(ElementUIProvider.MARK_STRING)) { + addElementUIProvider(impl, simplify); } } catch (PluginInvalidLevelException e) { PluginMessage.remindUpdate(e.getMessage()); diff --git a/designer_base/src/com/fr/design/actions/UpdateAction.java b/designer_base/src/com/fr/design/actions/UpdateAction.java index 921854092..72cd74c53 100644 --- a/designer_base/src/com/fr/design/actions/UpdateAction.java +++ b/designer_base/src/com/fr/design/actions/UpdateAction.java @@ -7,7 +7,7 @@ import com.fr.base.NameStyle; import com.fr.base.ScreenResolution; import com.fr.base.Style; import com.fr.design.constants.UIConstants; -import com.fr.design.actions.core.ActionUtils; +import com.fr.design.actions.core.ActionFactory; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.imenu.UICheckBoxMenuItem; import com.fr.design.gui.imenu.UIMenuItem; @@ -272,7 +272,7 @@ public abstract class UpdateAction extends ShortCut implements Action { button.setEnabled(this.isEnabled()); //peter:产生tooltip - button.setToolTipText(ActionUtils.createButtonToolTipText(this)); + button.setToolTipText(ActionFactory.createButtonToolTipText(this)); object = button; } diff --git a/designer_base/src/com/fr/design/actions/core/ActionFactory.java b/designer_base/src/com/fr/design/actions/core/ActionFactory.java new file mode 100644 index 000000000..4b3eecb3c --- /dev/null +++ b/designer_base/src/com/fr/design/actions/core/ActionFactory.java @@ -0,0 +1,216 @@ +package com.fr.design.actions.core; + +import com.fr.base.FRContext; +import com.fr.base.Utils; +import com.fr.design.actions.UpdateAction; +import com.fr.design.file.HistoryTemplateListPane; +import com.fr.design.mainframe.JTemplate; +import com.fr.design.selection.QuickEditor; + +import javax.swing.*; +import java.awt.event.KeyEvent; +import java.lang.reflect.Constructor; +import java.util.*; + +/** + * 插入单元格元素和插入悬浮元素的一些集合方法 + */ +public class ActionFactory { + private static LinkedHashSet> actionClasses = new LinkedHashSet<>(); + private static LinkedHashSet> floatActionClasses = new LinkedHashSet<>(); + + private ActionFactory() { + } + + private static Map floatEditor = new HashMap(); + + private static Class chartCollectionClass = null; + + private static Map cellEditor = new HashMap(); + + private static UpdateAction chartPreStyleAction = null; + + /** + * 待说明 + * + * @param clazz 待说明 + * @param editor 待说明 + */ + public static void registerCellEditor(Class clazz, QuickEditor editor) { + cellEditor.put(clazz, editor); + } + + /** + * 待说明 + * + * @param clazz 待说明 + * @param editor 待说明 + */ + public static void registerFloatEditor(Class clazz, QuickEditor editor) { + floatEditor.put(clazz, editor); + } + + /** + * 注册图表的 预定义样式. + * + * @param action 注册的图表预定义样式action + */ + public static void registerChartPreStyleAction(UpdateAction action) { + chartPreStyleAction = action; + } + + /** + * 返回 图表预定义样式Action + */ + public static UpdateAction getChartPreStyleAction() { + return chartPreStyleAction; + } + + /** + * kunsnat: 图表注册 悬浮元素编辑器 , 因为ChartCollecion和ChartQuickEditor一个在Chart,一个在Designer, 所以分开注册. + * + * @param clazz 待说明 + */ + public static void registerChartCollection(Class clazz) { + chartCollectionClass = clazz; + } + + public static Class getChartCollectionClass() { + return chartCollectionClass; + } + + /** + * kunsnat: 图表注册 悬浮元素编辑器 , 因为ChartCollecion和ChartQuickEditor一个在Chart,一个在Designer, 所以分开注册. + * + * @param editor 待说明 + */ + public static void registerChartFloatEditorInEditor(QuickEditor editor) { + if (chartCollectionClass != null) { + floatEditor.put(chartCollectionClass, editor); + } + } + + /** + * kunsnat: 图表注册 悬浮元素编辑器 , 因为ChartCollecion和ChartQuickEditor一个在Chart,一个在Designer, 所以分开注册. + * + * @param editor 待说明 + */ + public static void registerChartCellEditorInEditor(QuickEditor editor) { + if (chartCollectionClass != null) { + cellEditor.put(chartCollectionClass, editor); + } + } + + /** + * 返回 悬浮元素选中的Editor + */ + public static QuickEditor getFloatEditor(Class clazz) { + return floatEditor.get(clazz); + } + + public static QuickEditor getCellEditor(Class clazz) { + return cellEditor.get(clazz); + } + + /** + * peter:从Action来产生ToolTipText. + * + * @param action 动作 + * @return 字符 + */ + public static String createButtonToolTipText(Action action) { + StringBuffer buttonToolTipTextBuf = new StringBuffer(); + + //peter:把中文后面的(U),alt 快捷键的括号去掉,这个方法是临时的做法. + String actionName = (String) action.getValue(Action.NAME); + if (actionName.lastIndexOf("(") != -1) { + buttonToolTipTextBuf.append(actionName.substring(0, actionName.lastIndexOf("("))); + } else { + buttonToolTipTextBuf.append(actionName); + } + + //peter:产生快捷键的ToolTip. + KeyStroke keyStroke = (KeyStroke) action.getValue(Action.ACCELERATOR_KEY); + if (keyStroke != null) { + buttonToolTipTextBuf.append(" ("); + buttonToolTipTextBuf.append(KeyEvent.getKeyModifiersText(keyStroke.getModifiers())); + buttonToolTipTextBuf.append('+'); + buttonToolTipTextBuf.append(KeyEvent.getKeyText(keyStroke.getKeyCode())); + buttonToolTipTextBuf.append(')'); + } + + return Utils.objectToString(buttonToolTipTextBuf); + } + + /** + * 纪录插入元素的种类 + * + * @param cls 类型数组 + */ + public static void registerCellInsertActionClass(Class[] cls) { + if (cls != null) { + Collections.addAll(actionClasses, cls); + } + } + + /** + * 生成单元格插入相关的Action + * 表单中报表块编辑需要屏蔽掉"插入子报表" + * + * @param cls 构造函数参数类型 + * @param obj 构造函数参数值 + * @return 相关Action组成的一个数组 + */ + public static UpdateAction[] createCellInsertAction(Class cls, Object obj) { + List actions = new ArrayList<>(); + JTemplate jTemplate = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); + for (Class clazz : actionClasses) { + if (clazz == null) { + continue; + } + if (jTemplate.acceptToolbarItem(clazz)) { + try { + Constructor c = (Constructor)clazz.getConstructor(cls); + actions.add(c.newInstance(obj)); + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage(), e); + } + } + } + return actions.toArray(new UpdateAction[actions.size()]); + } + + /** + * 登记悬浮元素插入类型 + * + * @param cls 插入类型数组 + */ + public static void registerFloatInsertActionClass(Class[] cls) { + if (cls != null) { + Collections.addAll(floatActionClasses, cls); + } + } + + /** + * 生成悬浮元素插入相关的Action + * + * @param cls 构造函数参数类型 + * @param obj 构造函数参数值 + * @return 相关Action组成的一个数组 + */ + public static UpdateAction[] createFloatInsertAction(Class cls, Object obj) { + List actions = new ArrayList<>(); + for (Class clazz : floatActionClasses) { + if (clazz == null) { + continue; + } + try { + Constructor c = (Constructor)clazz.getConstructor(cls); + actions.add(c.newInstance(obj)); + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage(), e); + } + } + return actions.toArray(new UpdateAction[actions.size()]); + } +} \ No newline at end of file diff --git a/designer_base/src/com/fr/design/actions/core/ActionUtils.java b/designer_base/src/com/fr/design/actions/core/ActionUtils.java deleted file mode 100644 index ea9550544..000000000 --- a/designer_base/src/com/fr/design/actions/core/ActionUtils.java +++ /dev/null @@ -1,202 +0,0 @@ -package com.fr.design.actions.core; - -import java.awt.event.KeyEvent; -import java.lang.reflect.Constructor; -import java.util.HashMap; -import java.util.Map; - -import javax.swing.Action; -import javax.swing.KeyStroke; - -import com.fr.base.FRContext; -import com.fr.base.Utils; -import com.fr.design.actions.UpdateAction; -import com.fr.design.file.HistoryTemplateListPane; -import com.fr.design.mainframe.JTemplate; -import com.fr.design.selection.QuickEditor; - -/** - * 一些ActionUtils - */ -public class ActionUtils { - private static Class[] actionClasses; - private static Class[] floatActionClasses; - - private ActionUtils() { - } - - private static Map floatEditor = new HashMap(); - - private static Class chartCollectionClass = null; - - private static Map cellEditor = new HashMap(); - - private static UpdateAction chartPreStyleAction = null; - - /** - * 待说明 - * @param clzz 待说明 - * @param editor 待说明 - */ - public static void registerCellEditor(Class clzz, QuickEditor editor) { - cellEditor.put(clzz, editor); - } - - /** - * 待说明 - * @param clzz 待说明 - * @param editor 待说明 - */ - public static void registerFloatEditor(Class clzz, QuickEditor editor) { - floatEditor.put(clzz, editor); - } - - /** - * 注册图表的 预定义样式. - * @param action 注册的图表预定义样式action - */ - public static void registerChartPreStyleAction(UpdateAction action) { - chartPreStyleAction = action; - } - - /** - * 返回 图表预定义样式Action - */ - public static UpdateAction getChartPreStyleAction() { - return chartPreStyleAction; - } - - /** - * kunsnat: 图表注册 悬浮元素编辑器 , 因为ChartCollecion和ChartQuickEditor一个在Chart,一个在Designer, 所以分开注册. - * @param clzz 待说明 - */ - public static void registerChartCollection(Class clzz) { - chartCollectionClass = clzz; - } - - public static Class getChartCollectionClass() { - return chartCollectionClass; - } - - /** - * kunsnat: 图表注册 悬浮元素编辑器 , 因为ChartCollecion和ChartQuickEditor一个在Chart,一个在Designer, 所以分开注册. - * @param editor 待说明 - */ - public static void registerChartFloatEditorInEditor(QuickEditor editor) { - if(chartCollectionClass != null) { - floatEditor.put(chartCollectionClass, editor); - } - } - - /** - * kunsnat: 图表注册 悬浮元素编辑器 , 因为ChartCollecion和ChartQuickEditor一个在Chart,一个在Designer, 所以分开注册. - * @param editor 待说明 - */ - public static void registerChartCellEditorInEditor(QuickEditor editor) { - if(chartCollectionClass != null) { - cellEditor.put(chartCollectionClass, editor); - } - } - - /** - * 返回 悬浮元素选中的Editor - */ - public static QuickEditor getFloatEditor(Class clazz) { - return floatEditor.get(clazz); - } - - public static QuickEditor getCellEditor(Class clazz) { - return cellEditor.get(clazz); - } - - /** - * peter:从Action来产生ToolTipText. - * @param action 动作 - * @return 字符 - */ - public static String createButtonToolTipText(Action action) { - StringBuffer buttonToolTipTextBuf = new StringBuffer(); - - //peter:把中文后面的(U),alt 快捷键的括号去掉,这个方法是临时的做法. - String actionName = (String) action.getValue(Action.NAME); - if (actionName.lastIndexOf("(") != -1) { - buttonToolTipTextBuf.append(actionName.substring(0, actionName.lastIndexOf("("))); - } else { - buttonToolTipTextBuf.append(actionName); - } - - //peter:产生快捷键的ToolTip. - KeyStroke keyStroke = (KeyStroke) action.getValue(Action.ACCELERATOR_KEY); - if (keyStroke != null) { - buttonToolTipTextBuf.append(" ("); - buttonToolTipTextBuf.append(KeyEvent.getKeyModifiersText(keyStroke.getModifiers())); - buttonToolTipTextBuf.append('+'); - buttonToolTipTextBuf.append(KeyEvent.getKeyText(keyStroke.getKeyCode())); - buttonToolTipTextBuf.append(')'); - } - - return Utils.objectToString(buttonToolTipTextBuf); - } - - /** - * 纪录插入元素的种类 - * - * @param cls 类型数组 - */ - public static void registerCellInsertActionClass(Class[] cls) { - actionClasses = cls; - } - - /** - * 生成单元格插入相关的Action - * - * @param cls 构造函数参数类型 - * @param obj 构造函数参数值 - * @return 相关Action组成的一个数组 - */ - public static UpdateAction[] createCellInsertAction(Class cls, Object obj) { - int length = 0; - JTemplate jTemplate = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); - //表单中报表块编辑屏蔽掉 插入子报表 - length = jTemplate.isJWorkBook()? actionClasses.length : actionClasses.length - 1; - UpdateAction[] actions = new UpdateAction[length]; - for (int i = 0; i < length; i++) { - try { - Constructor c = actionClasses[i].getConstructor(cls); - actions[i] = c.newInstance(obj); - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage(), e); - } - } - return actions; - } - - /** - * 登记悬浮元素插入类型 - * - * @param cls 插入类型数组 - */ - public static void registerFloatInsertActionClass(Class[] cls) { - floatActionClasses = cls; - } - - /** - * 生成悬浮元素插入相关的Action - * - * @param cls 构造函数参数类型 - * @param obj 构造函数参数值 - * @return 相关Action组成的一个数组 - */ - public static UpdateAction[] createFloatInsertAction(Class cls, Object obj) { - UpdateAction[] actions = new UpdateAction[floatActionClasses.length]; - for (int i = 0; i < floatActionClasses.length; i++) { - try { - Constructor c = floatActionClasses[i].getConstructor(cls); - actions[i] = c.newInstance(obj); - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage(), e); - } - } - return actions; - } -} \ No newline at end of file diff --git a/designer_base/src/com/fr/design/actions/core/WorkBookSupportable.java b/designer_base/src/com/fr/design/actions/core/WorkBookSupportable.java new file mode 100644 index 000000000..21f56372c --- /dev/null +++ b/designer_base/src/com/fr/design/actions/core/WorkBookSupportable.java @@ -0,0 +1,7 @@ +package com.fr.design.actions.core; + +/** + * Created by richie on 16/4/25. + */ +public interface WorkBookSupportable { +} diff --git a/designer_base/src/com/fr/design/fun/ElementUIProvider.java b/designer_base/src/com/fr/design/fun/ElementUIProvider.java new file mode 100644 index 000000000..e52721858 --- /dev/null +++ b/designer_base/src/com/fr/design/fun/ElementUIProvider.java @@ -0,0 +1,26 @@ +package com.fr.design.fun; + +import com.fr.design.actions.UpdateAction; +import com.fr.design.selection.QuickEditor; +import com.fr.stable.fun.Level; + + +/** + * Created by richie on 16/4/25. + */ +public interface ElementUIProvider extends Level { + + String MARK_STRING = "ElementUIProvider"; + + int CURRENT_LEVEL = 1; + + Class targetCellEditorClass(); + + Class targetObjectClass(); + + QuickEditor quickEditor(); + + Class actionForInsertCellElement(); + + Class actionForInsertFloatElement(); +} diff --git a/designer_base/src/com/fr/design/fun/impl/AbstractElementUIProvider.java b/designer_base/src/com/fr/design/fun/impl/AbstractElementUIProvider.java new file mode 100644 index 000000000..b76459928 --- /dev/null +++ b/designer_base/src/com/fr/design/fun/impl/AbstractElementUIProvider.java @@ -0,0 +1,20 @@ +package com.fr.design.fun.impl; + +import com.fr.design.fun.ElementUIProvider; +import com.fr.stable.fun.impl.AbstractProvider; + +/** + * Created by richie on 16/4/25. + */ +public abstract class AbstractElementUIProvider extends AbstractProvider implements ElementUIProvider { + + @Override + public int currentAPILevel() { + return CURRENT_LEVEL; + } + + @Override + public String mark4Provider() { + return this.getClass().getName(); + } +} diff --git a/designer_base/src/com/fr/design/mainframe/JTemplate.java b/designer_base/src/com/fr/design/mainframe/JTemplate.java index 5819a3c10..8478e2500 100644 --- a/designer_base/src/com/fr/design/mainframe/JTemplate.java +++ b/designer_base/src/com/fr/design/mainframe/JTemplate.java @@ -9,6 +9,7 @@ import com.fr.design.DesignModelAdapter; import com.fr.design.DesignState; import com.fr.design.DesignerEnvManager; import com.fr.design.actions.TableDataSourceAction; +import com.fr.design.actions.core.WorkBookSupportable; import com.fr.design.actions.edit.RedoAction; import com.fr.design.actions.edit.UndoAction; import com.fr.design.actions.file.SaveAsTemplateAction; @@ -952,4 +953,8 @@ public abstract class JTemplate> ex } return pp; } + + public boolean acceptToolbarItem(Class clazz) { + return true; + } } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/module/DesignModule.java b/designer_base/src/com/fr/design/module/DesignModule.java index 24e14e8b8..74e8944a2 100644 --- a/designer_base/src/com/fr/design/module/DesignModule.java +++ b/designer_base/src/com/fr/design/module/DesignModule.java @@ -1,14 +1,28 @@ package com.fr.design.module; import com.fr.design.ExtraDesignClassManager; +import com.fr.design.actions.core.ActionFactory; +import com.fr.design.fun.ElementUIProvider; +import com.fr.design.gui.controlpane.NameObjectCreator; +import com.fr.design.gui.controlpane.NameableCreator; +import com.fr.design.hyperlink.ReportletHyperlinkPane; +import com.fr.design.hyperlink.WebHyperlinkPane; +import com.fr.design.javascript.EmailPane; +import com.fr.design.javascript.JavaScriptImplPane; +import com.fr.design.javascript.ParameterJavaScriptPane; import com.fr.design.mainframe.App; import com.fr.design.mainframe.DesignerFrame; +import com.fr.general.Inter; import com.fr.general.ModuleContext; +import com.fr.js.*; import com.fr.module.TopModule; import com.fr.stable.ArrayUtils; import com.fr.stable.bridge.StableFactory; import com.fr.stable.plugin.ExtraDesignClassManagerProvider; +import java.util.ArrayList; +import java.util.List; + /** * Created by IntelliJ IDEA. * Author : Richer @@ -26,6 +40,9 @@ public abstract class DesignModule extends TopModule { } ModuleContext.registerStartedModule(DesignModule.class.getName(), this); StableFactory.registerMarkedClass(ExtraDesignClassManagerProvider.XML_TAG, ExtraDesignClassManager.class); + ActionFactory.registerCellInsertActionClass(actionsForInsertCellElement()); + ActionFactory.registerFloatInsertActionClass(actionsForInsertFloatElement()); + DesignModuleFactory.registerCreators4Hyperlink(hyperlinkTypes()); } public boolean isStarted() { @@ -47,5 +64,32 @@ public abstract class DesignModule extends TopModule { return ArrayUtils.EMPTY_STRING_ARRAY; } + public Class[] actionsForInsertCellElement() { + List> classes = new ArrayList<>(); + ElementUIProvider[] providers = ExtraDesignClassManager.getInstance().getElementUIProviders(); + for (ElementUIProvider provider : providers) { + classes.add(provider.actionForInsertCellElement()); + } + return classes.toArray(new Class[classes.size()]); + } + + public Class[] actionsForInsertFloatElement() { + List> classes = new ArrayList<>(); + ElementUIProvider[] providers = ExtraDesignClassManager.getInstance().getElementUIProviders(); + for (ElementUIProvider provider : providers) { + classes.add(provider.actionForInsertFloatElement()); + } + return classes.toArray(new Class[classes.size()]); + } + + public NameableCreator[] hyperlinkTypes() { + return new NameableCreator[]{ + new NameObjectCreator(Inter.getLocText("FR-Hyperlink_Reportlet"), ReportletHyperlink.class, ReportletHyperlinkPane.CHART_NO_RENAME.class), + new NameObjectCreator(Inter.getLocText("FR-Designer_Email"), EmailJavaScript.class, EmailPane.class), + new NameObjectCreator(Inter.getLocText("Hyperlink-Web_link"), WebHyperlink.class, WebHyperlinkPane.CHART_NO_RENAME.class), + new NameObjectCreator(Inter.getLocText("JavaScript-Dynamic_Parameters"), ParameterJavaScript.class, ParameterJavaScriptPane.CHART_NO_RENAME.class), + new NameObjectCreator("JavaScript", JavaScriptImpl.class, JavaScriptImplPane.CHART_NO_RENAME.class) + }; + } } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/utils/gui/GUICoreUtils.java b/designer_base/src/com/fr/design/utils/gui/GUICoreUtils.java index eb8dc556d..8d03f039e 100644 --- a/designer_base/src/com/fr/design/utils/gui/GUICoreUtils.java +++ b/designer_base/src/com/fr/design/utils/gui/GUICoreUtils.java @@ -8,7 +8,7 @@ import com.fr.base.Style; import com.fr.base.background.ColorBackground; import com.fr.data.util.function.*; import com.fr.design.actions.UpdateAction; -import com.fr.design.actions.core.ActionUtils; +import com.fr.design.actions.core.ActionFactory; import com.fr.design.border.UITitledBorder; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ibutton.UIToggleButton; @@ -214,7 +214,7 @@ public abstract class GUICoreUtils{ button.setText(StringUtils.EMPTY); button.setEnabled(updateAction.isEnabled()); - button.setToolTipText(ActionUtils.createButtonToolTipText(updateAction)); + button.setToolTipText(ActionFactory.createButtonToolTipText(updateAction)); object = button; } diff --git a/designer_chart/src/com/fr/design/module/ChartDesignerModule.java b/designer_chart/src/com/fr/design/module/ChartDesignerModule.java index e00f6dfd3..7a209855f 100644 --- a/designer_chart/src/com/fr/design/module/ChartDesignerModule.java +++ b/designer_chart/src/com/fr/design/module/ChartDesignerModule.java @@ -1 +1 @@ -package com.fr.design.module; import com.fr.chart.base.ChartInternationalNameContentBean; import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.ChartCollection; import com.fr.chart.charttypes.ChartTypeManager; import com.fr.design.ChartTypeInterfaceManager; import com.fr.design.actions.core.ActionUtils; import com.fr.design.chart.ChartDialog; import com.fr.design.chart.gui.ChartComponent; import com.fr.design.chart.gui.ChartWidgetOption; import com.fr.design.gui.core.WidgetOption; import com.fr.design.mainframe.App; import com.fr.design.mainframe.ChartAndWidgetPropertyPane; import com.fr.design.mainframe.ChartPropertyPane; import com.fr.form.ui.ChartEditor; import com.fr.general.GeneralContext; import com.fr.general.IOUtils; import com.fr.general.Inter; import com.fr.stable.bridge.StableFactory; import com.fr.stable.plugin.ExtraChartDesignClassManagerProvider; import com.fr.stable.plugin.PluginReadListener; import javax.swing.*; /** * Created by IntelliJ IDEA. * Author : Richer * Version: 7.0.3 * Date: 13-7-8 * Time: 上午9:13 */ public class ChartDesignerModule extends DesignModule { public void start() { super.start(); dealBeforeRegister(); register(); registerFloatEditor(); } protected void dealBeforeRegister(){ StableFactory.registerMarkedClass(ExtraChartDesignClassManagerProvider.XML_TAG, ChartTypeInterfaceManager.class); } private void register(){ DesignModuleFactory.registerHyperlinkGroupType(new ChartHyperlinkGroup()); GeneralContext.addPluginReadListener(new PluginReadListener() { @Override public void success() { DesignModuleFactory.registerExtraWidgetOptions(options4Show()); } }); DesignModuleFactory.registerChartEditorClass(ChartEditor.class); DesignModuleFactory.registerChartComponentClass(ChartComponent.class); DesignModuleFactory.registerChartDialogClass(ChartDialog.class); DesignModuleFactory.registerChartAndWidgetPropertyPane(ChartAndWidgetPropertyPane.class); DesignModuleFactory.registerChartPropertyPaneClass(ChartPropertyPane.class); ActionUtils.registerChartPreStyleAction(new ChartPreStyleAction()); } protected void registerFloatEditor() { ActionUtils.registerChartCollection(ChartCollection.class); } /** * 返回设计器能打开的模板类型的一个数组列表 * * @return 可以打开的模板类型的数组 */ public App[] apps4TemplateOpener() { return new App[0]; } protected WidgetOption[] options4Show() { ChartInternationalNameContentBean[] typeName = ChartTypeManager.getInstance().getAllChartBaseNames(); ChartWidgetOption[] child = new ChartWidgetOption[typeName.length]; for (int i = 0; i < typeName.length; i++) { String plotID = typeName[i].getPlotID(); Chart[] rowChart = ChartTypeManager.getInstance().getChartTypes(plotID); String iconPath = ChartTypeInterfaceManager.getInstance().getIconPath(plotID); Icon icon = IOUtils.readIcon(iconPath); child[i] = new ChartWidgetOption(Inter.getLocText(typeName[i].getName()), icon, ChartEditor.class, rowChart[0]); } return child; } public String getInterNationalName() { return Inter.getLocText("FR-Chart-Design_ChartModule"); } } \ No newline at end of file +package com.fr.design.module; import com.fr.chart.base.ChartInternationalNameContentBean; import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.ChartCollection; import com.fr.chart.charttypes.ChartTypeManager; import com.fr.design.ChartTypeInterfaceManager; import com.fr.design.actions.core.ActionFactory; import com.fr.design.chart.ChartDialog; import com.fr.design.chart.gui.ChartComponent; import com.fr.design.chart.gui.ChartWidgetOption; import com.fr.design.gui.core.WidgetOption; import com.fr.design.mainframe.App; import com.fr.design.mainframe.ChartAndWidgetPropertyPane; import com.fr.design.mainframe.ChartPropertyPane; import com.fr.form.ui.ChartEditor; import com.fr.general.GeneralContext; import com.fr.general.IOUtils; import com.fr.general.Inter; import com.fr.stable.bridge.StableFactory; import com.fr.stable.plugin.ExtraChartDesignClassManagerProvider; import com.fr.stable.plugin.PluginReadListener; import javax.swing.*; /** * Created by IntelliJ IDEA. * Author : Richer * Version: 7.0.3 * Date: 13-7-8 * Time: 上午9:13 */ public class ChartDesignerModule extends DesignModule { public void start() { super.start(); dealBeforeRegister(); register(); registerFloatEditor(); } protected void dealBeforeRegister(){ StableFactory.registerMarkedClass(ExtraChartDesignClassManagerProvider.XML_TAG, ChartTypeInterfaceManager.class); } private void register(){ DesignModuleFactory.registerHyperlinkGroupType(new ChartHyperlinkGroup()); GeneralContext.addPluginReadListener(new PluginReadListener() { @Override public void success() { DesignModuleFactory.registerExtraWidgetOptions(options4Show()); } }); DesignModuleFactory.registerChartEditorClass(ChartEditor.class); DesignModuleFactory.registerChartComponentClass(ChartComponent.class); DesignModuleFactory.registerChartDialogClass(ChartDialog.class); DesignModuleFactory.registerChartAndWidgetPropertyPane(ChartAndWidgetPropertyPane.class); DesignModuleFactory.registerChartPropertyPaneClass(ChartPropertyPane.class); ActionFactory.registerChartPreStyleAction(new ChartPreStyleAction()); } protected void registerFloatEditor() { ActionFactory.registerChartCollection(ChartCollection.class); } /** * 返回设计器能打开的模板类型的一个数组列表 * * @return 可以打开的模板类型的数组 */ public App[] apps4TemplateOpener() { return new App[0]; } protected WidgetOption[] options4Show() { ChartInternationalNameContentBean[] typeName = ChartTypeManager.getInstance().getAllChartBaseNames(); ChartWidgetOption[] child = new ChartWidgetOption[typeName.length]; for (int i = 0; i < typeName.length; i++) { String plotID = typeName[i].getPlotID(); Chart[] rowChart = ChartTypeManager.getInstance().getChartTypes(plotID); String iconPath = ChartTypeInterfaceManager.getInstance().getIconPath(plotID); Icon icon = IOUtils.readIcon(iconPath); child[i] = new ChartWidgetOption(Inter.getLocText(typeName[i].getName()), icon, ChartEditor.class, rowChart[0]); } return child; } public String getInterNationalName() { return Inter.getLocText("FR-Chart-Design_ChartModule"); } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/mainframe/JForm.java b/designer_form/src/com/fr/design/mainframe/JForm.java index 55be571fb..e7342fc87 100644 --- a/designer_form/src/com/fr/design/mainframe/JForm.java +++ b/designer_form/src/com/fr/design/mainframe/JForm.java @@ -2,6 +2,7 @@ package com.fr.design.mainframe; import com.fr.base.BaseUtils; import com.fr.design.DesignState; +import com.fr.design.actions.core.WorkBookSupportable; import com.fr.design.actions.file.WebPreviewUtils; import com.fr.design.cell.FloatElementsProvider; import com.fr.design.constants.UIConstants; @@ -742,4 +743,8 @@ public class JForm extends JTemplate implements BaseJForm { return BaseUtils.readIcon("/com/fr/web/images/form/new_form3.png"); } + @Override + public boolean acceptToolbarItem(Class clazz) { + return WorkBookSupportable.class.isAssignableFrom(clazz); + } } \ No newline at end of file