From 02d6e3050c6020a0f2492e53245d3014ca889862 Mon Sep 17 00:00:00 2001 From: XiaXiang Date: Wed, 31 Oct 2018 18:02:05 +0800 Subject: [PATCH] =?UTF-8?q?REPORT-10591=20=E8=87=AA=E9=80=82=E5=BA=94?= =?UTF-8?q?=E6=8F=92=E4=BB=B6=E5=86=85=E7=BD=AE=20=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E9=83=A8=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/conf/FitAttrState.java | 76 ++++++ .../fun/FormElementCaseEditorProcessor.java | 2 +- .../fun/FormElementCaseEditorProvider.java | 2 +- ...bstractFormElementCaseEditorProcessor.java | 2 +- ...AbstractFormElementCaseEditorProvider.java | 2 +- .../menupane/BrowserFitAttrPane.java | 232 ++++++++++++++++++ .../mainframe/menupane/FitPreviewPane.java | 74 ++++++ .../mainframe/menupane/FitRadioGroup.java | 80 ++++++ .../mainframe/menupane/FontRadioGroup.java | 17 ++ .../menupane/ReportFitAttrAction.java | 107 ++++++++ .../mainframe/menupane/ReportFitAttrPane.java | 56 +++++ .../menupane/TemplateBrowserFitAttrPane.java | 77 ++++++ .../menupane/TemplateFitAttrPane.java | 55 +++++ .../fr/design/images/reportfit.preview/00.png | Bin 0 -> 745 bytes .../fr/design/images/reportfit.preview/10.png | Bin 0 -> 1643 bytes .../fr/design/images/reportfit.preview/11.png | Bin 0 -> 740 bytes .../fr/design/images/reportfit.preview/20.png | Bin 0 -> 2459 bytes .../fr/design/images/reportfit.preview/21.png | Bin 0 -> 788 bytes .../fr/design/images/reportfit.preview/30.png | Bin 0 -> 788 bytes .../images/reportfit.preview/gray/00.png | Bin 0 -> 745 bytes .../images/reportfit.preview/gray/10.png | Bin 0 -> 1507 bytes .../images/reportfit.preview/gray/11.png | Bin 0 -> 740 bytes .../images/reportfit.preview/gray/20.png | Bin 0 -> 2277 bytes .../images/reportfit.preview/gray/21.png | Bin 0 -> 782 bytes .../images/reportfit.preview/gray/30.png | Bin 0 -> 783 bytes .../design/designer/creator/XElementCase.java | 23 +- .../java/com/fr/design/mainframe/JForm.java | 5 +- .../BrowserFitAlignmentItems.java | 21 ++ .../widget/propertypane/BrowserFitEditor.java | 47 ++++ .../BrowserFitPropertyEditor.java | 45 ++++ .../widget/propertypane/BrowserFitRender.java | 10 + .../propertypane/BrowserFitWrapper.java | 9 + .../com/fr/design/mainframe/JWorkBook.java | 2 + 33 files changed, 927 insertions(+), 17 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/conf/FitAttrState.java create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/menupane/BrowserFitAttrPane.java create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/menupane/FitPreviewPane.java create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/menupane/FitRadioGroup.java create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/menupane/FontRadioGroup.java create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/menupane/ReportFitAttrAction.java create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/menupane/ReportFitAttrPane.java create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/menupane/TemplateBrowserFitAttrPane.java create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/menupane/TemplateFitAttrPane.java create mode 100644 designer-base/src/main/resources/com/fr/design/images/reportfit.preview/00.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/reportfit.preview/10.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/reportfit.preview/11.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/reportfit.preview/20.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/reportfit.preview/21.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/reportfit.preview/30.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/reportfit.preview/gray/00.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/reportfit.preview/gray/10.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/reportfit.preview/gray/11.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/reportfit.preview/gray/20.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/reportfit.preview/gray/21.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/reportfit.preview/gray/30.png create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/widget/propertypane/BrowserFitAlignmentItems.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/widget/propertypane/BrowserFitEditor.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/widget/propertypane/BrowserFitPropertyEditor.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/widget/propertypane/BrowserFitRender.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/widget/propertypane/BrowserFitWrapper.java diff --git a/designer-base/src/main/java/com/fr/conf/FitAttrState.java b/designer-base/src/main/java/com/fr/conf/FitAttrState.java new file mode 100644 index 0000000000..9ad42fd6e7 --- /dev/null +++ b/designer-base/src/main/java/com/fr/conf/FitAttrState.java @@ -0,0 +1,76 @@ +package com.fr.conf; + +import com.fr.design.designer.properties.items.Item; +import com.fr.report.fun.ReportFitAttrProvider; +import com.fr.stable.StringUtils; + +/** + * Created by Administrator on 2016/4/13/0013. + */ +public enum FitAttrState { + DEFAULT(0) { + @Override + public String description() { + return com.fr.design.i18n.Toolkit.i18nText("FR-Designer_Fit_Default"); + } + + }, + // 横向自适应, 纵向根据横向的比例来适配 + HORIZONTAL_FIT(1) { + @Override + public String description() { + return com.fr.design.i18n.Toolkit.i18nText("FR-Designer_Fit_Horizontal"); + } + }, + // 双向自适应, 横纵向都是根据页面宽高来计算 + DOUBLE_FIT(2) { + @Override + public String description() { + return com.fr.design.i18n.Toolkit.i18nText("FR-Designer_Fit_Horizontal_Vertical"); + } + }, + + NOT_FIT(3) { + @Override + public String description() { + return com.fr.design.i18n.Toolkit.i18nText("FR-Designer_Fit_No"); + } + }; + + + private int state; + + + FitAttrState(int state) { + this.state = state; + } + + public static FitAttrState parse(ReportFitAttrProvider attr) { + + if (attr == null) { + return DEFAULT; + } + + for (FitAttrState attrState : values()) { + if (attrState.state == attr.fitStateInPC()) { + return attrState; + } + } + + return DEFAULT; + } + + public int getState() { + return this.state; + } + + + public String description() { + return StringUtils.EMPTY; + } + + public Item propertyItem() { + return new Item(this.description(), this.getState()); + } + +} diff --git a/designer-base/src/main/java/com/fr/design/fun/FormElementCaseEditorProcessor.java b/designer-base/src/main/java/com/fr/design/fun/FormElementCaseEditorProcessor.java index 21866a2c32..28d763bf71 100644 --- a/designer-base/src/main/java/com/fr/design/fun/FormElementCaseEditorProcessor.java +++ b/designer-base/src/main/java/com/fr/design/fun/FormElementCaseEditorProcessor.java @@ -1,6 +1,6 @@ package com.fr.design.fun; -import com.fr.stable.fun.ReportFitAttrProvider; +import com.fr.report.fun.ReportFitAttrProvider; import com.fr.stable.fun.mark.Immutable; import java.beans.PropertyDescriptor; diff --git a/designer-base/src/main/java/com/fr/design/fun/FormElementCaseEditorProvider.java b/designer-base/src/main/java/com/fr/design/fun/FormElementCaseEditorProvider.java index 92a1a835f4..6a0cf7bba1 100644 --- a/designer-base/src/main/java/com/fr/design/fun/FormElementCaseEditorProvider.java +++ b/designer-base/src/main/java/com/fr/design/fun/FormElementCaseEditorProvider.java @@ -2,7 +2,7 @@ package com.fr.design.fun; import com.fr.form.FormProvider; import com.fr.form.ui.ElementCaseEditorProvider; -import com.fr.stable.fun.ReportFitAttrProvider; +import com.fr.report.fun.ReportFitAttrProvider; import com.fr.stable.fun.mark.Mutable; import java.beans.PropertyDescriptor; diff --git a/designer-base/src/main/java/com/fr/design/fun/impl/AbstractFormElementCaseEditorProcessor.java b/designer-base/src/main/java/com/fr/design/fun/impl/AbstractFormElementCaseEditorProcessor.java index 08a5a1606f..191f513908 100644 --- a/designer-base/src/main/java/com/fr/design/fun/impl/AbstractFormElementCaseEditorProcessor.java +++ b/designer-base/src/main/java/com/fr/design/fun/impl/AbstractFormElementCaseEditorProcessor.java @@ -1,7 +1,7 @@ package com.fr.design.fun.impl; import com.fr.design.fun.FormElementCaseEditorProcessor; -import com.fr.stable.fun.ReportFitAttrProvider; +import com.fr.report.fun.ReportFitAttrProvider; import com.fr.stable.fun.mark.API; import java.beans.PropertyDescriptor; diff --git a/designer-base/src/main/java/com/fr/design/fun/impl/AbstractFormElementCaseEditorProvider.java b/designer-base/src/main/java/com/fr/design/fun/impl/AbstractFormElementCaseEditorProvider.java index 8764eaf898..f9d3e1b173 100644 --- a/designer-base/src/main/java/com/fr/design/fun/impl/AbstractFormElementCaseEditorProvider.java +++ b/designer-base/src/main/java/com/fr/design/fun/impl/AbstractFormElementCaseEditorProvider.java @@ -3,7 +3,7 @@ package com.fr.design.fun.impl; import com.fr.design.fun.FormElementCaseEditorProvider; import com.fr.form.FormProvider; import com.fr.form.ui.ElementCaseEditorProvider; -import com.fr.stable.fun.ReportFitAttrProvider; +import com.fr.report.fun.ReportFitAttrProvider; import com.fr.stable.fun.mark.API; import java.beans.PropertyDescriptor; diff --git a/designer-base/src/main/java/com/fr/design/mainframe/menupane/BrowserFitAttrPane.java b/designer-base/src/main/java/com/fr/design/mainframe/menupane/BrowserFitAttrPane.java new file mode 100644 index 0000000000..eeaa3047ca --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/menupane/BrowserFitAttrPane.java @@ -0,0 +1,232 @@ +package com.fr.design.mainframe.menupane; + +import com.fr.conf.FitAttrState; +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.ibutton.UIRadioButton; +import com.fr.design.gui.icheckbox.UICheckBox; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.log.FineLoggerFactory; +import com.fr.main.ReportFitAttr; +import com.fr.main.ReportFitConfig; +import com.fr.report.fun.ReportFitAttrProvider; + +import javax.swing.BorderFactory; +import javax.swing.ButtonGroup; +import javax.swing.JPanel; +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Cursor; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; + +/** + * Created by Administrator on 2016/5/5/0005. + */ +public class BrowserFitAttrPane extends BasicBeanPane { + + protected FontRadioGroup fontRadioGroup; + protected FitRadioGroup fitRadionGroup; + protected UICheckBox globalCheck; + protected FitPreviewPane fitPreviewPane; + protected ReportFitAttrProvider localFitAttr; + protected UIRadioButton defaultRadio; + protected UIRadioButton horizonRadio; + protected UIRadioButton doubleRadio; + protected UIRadioButton notFitRadio; + protected UIRadioButton fontFitRadio; + protected UIRadioButton fontNotFitRadio; + private UIButton editGlobalOps; + private JPanel borderPane; + private JPanel globalOpsPane; + private JPanel fitOpsPane; + + public BrowserFitAttrPane() { + initComponents(ReportFitConfig.getInstance().getFrmFitAttr()); + } + + protected void initComponents(ReportFitAttr globalFitAttr) { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + globalOpsPane = initGlobalOpsPane(globalFitAttr); + this.add(globalOpsPane, BorderLayout.NORTH); + fitOpsPane = initFitOpsPane(); + + } + + protected void initBorderPane(String title) { + borderPane = FRGUIPaneFactory.createTitledBorderPaneCenter(title); + borderPane.add(fitOpsPane, BorderLayout.CENTER); + fitPreviewPane = new FitPreviewPane(); + borderPane.add(fitPreviewPane, BorderLayout.SOUTH); + this.add(borderPane, BorderLayout.CENTER); + } + + private JPanel initFitOpsPane() { + double p = TableLayout.PREFERRED; + double[] rowSize = {p, p}; + double[] columnSize = {p, p, p, p, p}; + + ActionListener actionListener = getPreviewActionListener(); + + fontRadioGroup = new FontRadioGroup(); + fontFitRadio = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("FR-Plugin_Fit")); + fontFitRadio.setSelected(true); + fontNotFitRadio = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("FR-Designer_Fit_No")); + addRadioToGroup(fontRadioGroup, fontFitRadio, fontNotFitRadio); + fontRadioGroup.addActionListener(actionListener); + + fitRadionGroup = new FitRadioGroup(); + defaultRadio = new UIRadioButton(FitAttrState.DEFAULT.description()); + horizonRadio = new UIRadioButton(FitAttrState.HORIZONTAL_FIT.description()); + doubleRadio = new UIRadioButton(FitAttrState.DOUBLE_FIT.description()); + notFitRadio = new UIRadioButton(FitAttrState.NOT_FIT.description()); + addRadioToGroup(fitRadionGroup, defaultRadio, horizonRadio, doubleRadio, notFitRadio); + fitRadionGroup.addActionListener(actionListener); + + + JPanel fitOpsPane = TableLayoutHelper.createTableLayoutPane(initFitComponents(), rowSize, columnSize); + fitOpsPane.setBorder(BorderFactory.createEmptyBorder(10, 13, 10, 10)); + return fitOpsPane; + } + + protected Component[][] initFitComponents() { + Component[][] components = new Component[][]{ + new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("FR-Plugin_Fit-Font")), fontFitRadio, null, fontNotFitRadio}, + new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("FR-Plugin_Fit-Element")), defaultRadio, horizonRadio, doubleRadio, notFitRadio} + }; + return components; + } + + private void addRadioToGroup(ButtonGroup buttonGroup, UIRadioButton... radios) { + for (UIRadioButton radio : radios) { + buttonGroup.add(radio); + } + } + + private JPanel initGlobalOpsPane(final ReportFitAttr globalFitAttr) { + final JPanel globalOpsPane = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane(); + globalCheck = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("FR-Plugin_Use-Global")); + globalOpsPane.add(globalCheck); + globalCheck.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + boolean isLocalConfig = !globalCheck.isSelected(); + //勾选全局时,采用全局保存的自适应属性更新界面 + if (!isLocalConfig) { + ReportFitAttrProvider attr = globalFitAttr; + fontRadioGroup.selectFontFit(((ReportFitAttr) attr).isFitFont()); + fitRadionGroup.selectIndexButton(attr.fitStateInPC()); + fitPreviewPane.refreshPreview(getCurrentFitOptions(), fitRadionGroup.isEnabled()); + remove(BrowserFitAttrPane.this.borderPane); + initBorderPane(com.fr.design.i18n.Toolkit.i18nText("FR-Plugin_Global")); + } else { + ReportFitAttrProvider attr = localFitAttr; + fontRadioGroup.selectFontFit(((ReportFitAttr) attr).isFitFont()); + fitRadionGroup.selectIndexButton(attr.fitStateInPC()); + fitPreviewPane.refreshPreview(getCurrentFitOptions(), fitRadionGroup.isEnabled()); + remove(BrowserFitAttrPane.this.borderPane); + initBorderPane(com.fr.design.i18n.Toolkit.i18nText("FR-Plugin_Local")); + } + fontRadioGroup.setEnabled(isLocalConfig); + fitRadionGroup.setEnabled(isLocalConfig); + editGlobalOps.setVisible(!isLocalConfig); + String fitOptions = getCurrentFitOptions(); + fitPreviewPane.refreshPreview(fitOptions, fitRadionGroup.isEnabled()); + } + }); + + editGlobalOps = new UIButton(com.fr.design.i18n.Toolkit.i18nText("FR-Plugin_Edit-Global")); + editGlobalOps.setVisible(false); + editGlobalOps.addMouseListener(new MouseAdapter() { + public void mouseClicked(MouseEvent evt) { + fontRadioGroup.setEnabled(true); + fitRadionGroup.setEnabled(true); + String fitOptions = getCurrentFitOptions(); + + fitPreviewPane.refreshPreview(fitOptions, fitRadionGroup.isEnabled()); + } + + public void mouseEntered(MouseEvent e) { + setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + } + + public void mouseExited(MouseEvent e) { + setCursor(Cursor.getDefaultCursor()); + } + }); + globalOpsPane.add(editGlobalOps); + return globalOpsPane; + } + + @Override + protected String title4PopupWindow() { + return com.fr.design.i18n.Toolkit.i18nText("FR-Plugin_Attr-Set"); + } + + @Override + public void populateBean(ReportFitAttrProvider attr) { + if (attr == null) { + //如果为空, 就用全局的 + attr = ReportFitConfig.getInstance().getFrmFitAttr(); + populateGlobalComponents(); + } else { + initBorderPane(com.fr.design.i18n.Toolkit.i18nText("FR-Plugin_Local")); + } + this.localFitAttr = attr; + fontRadioGroup.selectFontFit(((ReportFitAttr) attr).isFitFont()); + fitRadionGroup.selectIndexButton(attr.fitStateInPC()); + fitPreviewPane.refreshPreview(getCurrentFitOptions(), fitRadionGroup.isEnabled()); + } + + protected void populateGlobalComponents() { + globalCheck.setSelected(true); + fontRadioGroup.setEnabled(false); + fitRadionGroup.setEnabled(false); + editGlobalOps.setVisible(true); + initBorderPane(com.fr.design.i18n.Toolkit.i18nText("FR-Plugin_Global")); + } + + //有八种组合, 不过有意义的就是6种, 以此为key去缓存里找对应的预览图片 + public String getCurrentFitOptions() { + return fitRadionGroup.getSelectRadioIndex() + "" + fontRadioGroup.getSelectRadioIndex(); + } + + private ActionListener getPreviewActionListener() { + return new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + String fitOptions = getCurrentFitOptions(); + fitPreviewPane.refreshPreview(fitOptions, fontRadioGroup.isEnabled()); + } + }; + } + + @Override + public ReportFitAttrProvider updateBean() { + ReportFitAttr attr = new ReportFitAttr(); + attr.setFitFont(fontRadioGroup.isFontFit()); + attr.setFitStateInPC(fitRadionGroup.getSelectRadioIndex()); + + // 直接用全局的 + if (globalCheck.isSelected()) { + updateGlobalConfig(attr); + return null; + } + this.localFitAttr = attr; + return attr; + } + + private void updateGlobalConfig(ReportFitAttr attr) { + try { + ReportFitConfig manager = ReportFitConfig.getInstance(); + manager.setFrmFitAttr(attr); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage()); + } + } +} \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/mainframe/menupane/FitPreviewPane.java b/designer-base/src/main/java/com/fr/design/mainframe/menupane/FitPreviewPane.java new file mode 100644 index 0000000000..fbc12c3b3d --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/menupane/FitPreviewPane.java @@ -0,0 +1,74 @@ +package com.fr.design.mainframe.menupane; + +import com.fr.design.dialog.BasicPane; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.general.IOUtils; + +import javax.swing.ImageIcon; +import java.util.HashMap; +import java.util.Map; + +/** + * Created by Administrator on 2016/5/5/0005. + */ +public class FitPreviewPane extends BasicPane { + private static final String DEFAULT_FONT_TAG = "00"; + private static final String DEFAULT_TAG = "01"; + private static final String HORIZON_FONT_TAG = "10"; + private static final String HORIZON_TAG = "11"; + private static final String DOUBLE_FONT_TAG = "20"; + private static final String DOUBLE_TAG = "21"; + private static final String NOT_FONT_TAG = "30"; + private static final String NOT_TAG = "31"; + + private UILabel imageLabel; + private Map cachedPreviewImage = new HashMap(); + private Map globalCachedPreviewImage = new HashMap(); + + public FitPreviewPane() { + //初始化缓存图片, 有些无意义的组合. + initCacheImage(); + //初始化组件 + initComponents(); + } + + //默认和不自适应时,字体自适应不起效,只有6张图 + private void initCacheImage() { + globalCachedPreviewImage.put(DEFAULT_FONT_TAG, new ImageIcon(IOUtils.readImage("/com/fr/design/images/reportfit/preview/gray/" + DEFAULT_FONT_TAG + ".png"))); + globalCachedPreviewImage.put(DEFAULT_TAG, new ImageIcon(IOUtils.readImage("/com/fr/design/images/reportfit/preview/gray/" + DEFAULT_FONT_TAG + ".png"))); + globalCachedPreviewImage.put(HORIZON_FONT_TAG, new ImageIcon(IOUtils.readImage("/com/fr/design/images/reportfit/preview/gray/" + HORIZON_FONT_TAG + ".png"))); + globalCachedPreviewImage.put(HORIZON_TAG, new ImageIcon(IOUtils.readImage("/com/fr/design/images/reportfit/preview/gray/" + HORIZON_TAG + ".png"))); + globalCachedPreviewImage.put(DOUBLE_FONT_TAG, new ImageIcon(IOUtils.readImage("/com/fr/design/images/reportfit/preview/gray/" + DOUBLE_FONT_TAG + ".png"))); + globalCachedPreviewImage.put(DOUBLE_TAG, new ImageIcon(IOUtils.readImage("/com/fr/design/images/reportfit/preview/gray/" + DOUBLE_TAG + ".png"))); + globalCachedPreviewImage.put(NOT_FONT_TAG, new ImageIcon(IOUtils.readImage("/com/fr/design/images/reportfit/preview/gray/" + NOT_FONT_TAG + ".png"))); + globalCachedPreviewImage.put(NOT_TAG, new ImageIcon(IOUtils.readImage("/com/fr/design/images/reportfit/preview/gray/" + NOT_FONT_TAG + ".png"))); + cachedPreviewImage.put(DEFAULT_FONT_TAG, new ImageIcon(IOUtils.readImage("/com/fr/design/images/reportfit/preview/" + DEFAULT_FONT_TAG + ".png"))); + cachedPreviewImage.put(DEFAULT_TAG, new ImageIcon(IOUtils.readImage("/com/fr/design/images/reportfit/preview/" + DEFAULT_FONT_TAG + ".png"))); + cachedPreviewImage.put(HORIZON_FONT_TAG, new ImageIcon(IOUtils.readImage("/com/fr/design/images/reportfit/preview/" + HORIZON_FONT_TAG + ".png"))); + cachedPreviewImage.put(HORIZON_TAG, new ImageIcon(IOUtils.readImage("/com/fr/design/images/reportfit/preview/" + HORIZON_TAG + ".png"))); + cachedPreviewImage.put(DOUBLE_FONT_TAG, new ImageIcon(IOUtils.readImage("/com/fr/design/images/reportfit/preview/" + DOUBLE_FONT_TAG + ".png"))); + cachedPreviewImage.put(DOUBLE_TAG, new ImageIcon(IOUtils.readImage("/com/fr/design/images/reportfit/preview/" + DOUBLE_TAG + ".png"))); + cachedPreviewImage.put(NOT_FONT_TAG, new ImageIcon(IOUtils.readImage("/com/fr/design/images/reportfit/preview/" + NOT_FONT_TAG + ".png"))); + cachedPreviewImage.put(NOT_TAG, new ImageIcon(IOUtils.readImage("/com/fr/design/images/reportfit/preview/" + NOT_FONT_TAG + ".png"))); + } + + private void initComponents() { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + imageLabel = new UILabel(); + imageLabel.setIcon(cachedPreviewImage.get(DEFAULT_TAG)); + this.add(imageLabel); + } + + public void refreshPreview(String index, boolean isEditedable) { + ImageIcon newImageIcon = isEditedable ? cachedPreviewImage.get(index) : globalCachedPreviewImage.get(index); + imageLabel.setIcon(newImageIcon); + } + + @Override + protected String title4PopupWindow() { + return com.fr.design.i18n.Toolkit.i18nText("FR-Plugin_Preview"); + } + + +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/menupane/FitRadioGroup.java b/designer-base/src/main/java/com/fr/design/mainframe/menupane/FitRadioGroup.java new file mode 100644 index 0000000000..e2612f794c --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/menupane/FitRadioGroup.java @@ -0,0 +1,80 @@ +package com.fr.design.mainframe.menupane; + +import com.fr.design.gui.ibutton.UIRadioButton; + +import javax.swing.AbstractButton; +import javax.swing.ButtonGroup; +import java.awt.event.ActionListener; +import java.util.ArrayList; +import java.util.List; + +/** + * 自适应四个按钮选项的group + *

+ * Created by Administrator on 2016/5/5/0005. + */ +public class FitRadioGroup extends ButtonGroup { + + private List radioButtons = new ArrayList(); + + @Override + public void add(AbstractButton button) { + super.add(button); + + UIRadioButton radioButton = (UIRadioButton) button; + radioButtons.add(radioButton); + } + + /** + * 设置按钮状态 + */ + public boolean isEnabled() { + return radioButtons.get(0).isEnabled(); + } + + /** + * 设置按钮状态 + */ + public void setEnabled(boolean enabled) { + for (UIRadioButton radioButton : radioButtons) { + radioButton.setEnabled(enabled); + } + } + + /** + * 获取当前选中的按钮index + * + * @return 按钮index + */ + public int getSelectRadioIndex() { + for (int i = 0, len = radioButtons.size(); i < len; i++) { + if (radioButtons.get(i).isSelected()) { + return i; + } + } + + return 0; + } + + /** + * 选中指定index的按钮 + */ + public void selectIndexButton(int index) { + if (index < 0 || index > radioButtons.size() - 1) { + return; + } + + UIRadioButton button = radioButtons.get(index); + button.setSelected(true); + } + + /** + * 给所有的按钮加上监听 + */ + public void addActionListener(ActionListener actionListener) { + for (UIRadioButton radioButton : radioButtons) { + radioButton.addActionListener(actionListener); + } + } + +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/menupane/FontRadioGroup.java b/designer-base/src/main/java/com/fr/design/mainframe/menupane/FontRadioGroup.java new file mode 100644 index 0000000000..5bb7d55052 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/menupane/FontRadioGroup.java @@ -0,0 +1,17 @@ +package com.fr.design.mainframe.menupane; + +/** + * 字体的两个选项组成的group + *

+ * Created by Administrator on 2016/5/5/0005. + */ +public class FontRadioGroup extends FitRadioGroup { + + public void selectFontFit(boolean isFontFit) { + selectIndexButton(isFontFit ? 0 : 1); + } + + public boolean isFontFit() { + return getSelectRadioIndex() == 0; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/menupane/ReportFitAttrAction.java b/designer-base/src/main/java/com/fr/design/mainframe/menupane/ReportFitAttrAction.java new file mode 100644 index 0000000000..3c4d977fab --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/menupane/ReportFitAttrAction.java @@ -0,0 +1,107 @@ +package com.fr.design.mainframe.menupane; + +import com.fr.base.BaseUtils; +import com.fr.design.actions.JTemplateAction; +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.dialog.DialogActionAdapter; +import com.fr.design.dialog.UIDialog; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.JTemplate; +import com.fr.design.menu.MenuKeySet; +import com.fr.report.fun.FitProvider; +import com.fr.report.fun.ReportFitAttrProvider; + +import javax.swing.KeyStroke; +import java.awt.Dimension; +import java.awt.event.ActionEvent; + +/** + * Created by Administrator on 2015/7/6 0006. + */ +public class ReportFitAttrAction extends JTemplateAction { + private static final Dimension MEDIUM = new Dimension(430, 400); + private static final MenuKeySet REPORT_FIT_ATTR = new MenuKeySet() { + @Override + public char getMnemonic() { + return 'T'; + } + + @Override + public String getMenuName() { + return com.fr.design.i18n.Toolkit.i18nText("FR-Designer_Fit-Template"); + } + + @Override + public KeyStroke getKeyStroke() { + return null; + } + }; + private static final MenuKeySet REPORT_FIT_ATTR_ELEMENTCASE = new MenuKeySet() { + @Override + public char getMnemonic() { + return 'T'; + } + + @Override + public String getMenuName() { + return com.fr.design.i18n.Toolkit.i18nText("FR-Designer_Fit-Elementcase"); + } + + @Override + public KeyStroke getKeyStroke() { + return null; + } + }; + + public ReportFitAttrAction(JTemplate jTemplate) { + super(jTemplate); + initMenuStyle(); + } + + private void initMenuStyle() { + JTemplate jTemplate = getEditingComponent(); + if (jTemplate.isJWorkBook()) { + this.setMenuKeySet(REPORT_FIT_ATTR); + } else { + this.setMenuKeySet(REPORT_FIT_ATTR_ELEMENTCASE); + } + this.setName(getMenuKeySet().getMenuKeySetName() + "..."); + this.setMnemonic(getMenuKeySet().getMnemonic()); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_report/fit.png")); + } + + /** + * Action触发事件 + * + * @param e 事件 + */ + public void actionPerformed(ActionEvent e) { + final JTemplate jwb = getEditingComponent(); + if (jwb == null) { + return; + } + final FitProvider wbTpl = (FitProvider) jwb.getTarget(); + ReportFitAttrProvider fitAttr = wbTpl.getFitAttr(); + if (jwb.isJWorkBook()) { + final TemplateFitAttrPane attrPane = new TemplateFitAttrPane(); + showReportFitDialog(fitAttr, jwb, wbTpl, attrPane); + } else { + final ReportFitAttrPane attrPane = new ReportFitAttrPane(); + showReportFitDialog(fitAttr, jwb, wbTpl, attrPane); + } + } + + private void showReportFitDialog(ReportFitAttrProvider fitAttr, final JTemplate jwb, final FitProvider wbTpl, final BasicBeanPane attrPane) { + attrPane.populateBean(fitAttr); + UIDialog dialog = attrPane.showUnsizedWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() { + @Override + public void doOk() { + wbTpl.setFitAttr(attrPane.updateBean()); + jwb.fireTargetModified(); + } + }); + dialog.setSize(MEDIUM); + dialog.setVisible(true); + } + +} \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/mainframe/menupane/ReportFitAttrPane.java b/designer-base/src/main/java/com/fr/design/mainframe/menupane/ReportFitAttrPane.java new file mode 100644 index 0000000000..27faf6fa87 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/menupane/ReportFitAttrPane.java @@ -0,0 +1,56 @@ +package com.fr.design.mainframe.menupane; + +import com.fr.design.beans.BasicBeanPane; +import com.fr.report.fun.ReportFitAttrProvider; + +import javax.swing.BorderFactory; +import javax.swing.BoxLayout; + +/** + * Created by Administrator on 2015/7/6 0006. + */ +public class ReportFitAttrPane extends BasicBeanPane { + + private BrowserFitAttrPane attrPane; + + + public ReportFitAttrPane() { + initComponents(); + } + + private void initComponents() { + this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); + this.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); + attrPane = new BrowserFitAttrPane(); + this.add(attrPane); + + } + + /** + * 展示界面 + * + * @param fitAttr 自适应属性 + */ + public void populateBean(ReportFitAttrProvider fitAttr) { + attrPane.populateBean(fitAttr); + } + + /** + * 提交数据 + * + * @return 界面上的更新数据 + */ + public ReportFitAttrProvider updateBean() { + return attrPane.updateBean(); + } + + /** + * 标题 + * + * @return 标题 + */ + protected String title4PopupWindow() { + return com.fr.design.i18n.Toolkit.i18nText("FR-Designer_Fit-Attr"); + } + +} \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/mainframe/menupane/TemplateBrowserFitAttrPane.java b/designer-base/src/main/java/com/fr/design/mainframe/menupane/TemplateBrowserFitAttrPane.java new file mode 100644 index 0000000000..e37ce09a37 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/menupane/TemplateBrowserFitAttrPane.java @@ -0,0 +1,77 @@ +package com.fr.design.mainframe.menupane; + +import com.fr.design.gui.ilable.UILabel; +import com.fr.log.FineLoggerFactory; +import com.fr.main.ReportFitAttr; +import com.fr.main.ReportFitConfig; +import com.fr.report.fun.ReportFitAttrProvider; + +import java.awt.Component; + +/** + * Created by 夏翔 on 2016/6/24. + */ +public class TemplateBrowserFitAttrPane extends BrowserFitAttrPane { + + public TemplateBrowserFitAttrPane() { + initComponents(ReportFitConfig.getInstance().getCptFitAttr()); + } + + + @Override + protected Component[][] initFitComponents() { + Component[][] components = new Component[][]{ + new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("FR-Plugin_Fit-Font")), fontFitRadio, null, fontNotFitRadio}, + new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("FR-Plugin_Fit-Element")), horizonRadio, doubleRadio, notFitRadio} + }; + return components; + } + + @Override + public void populateBean(ReportFitAttrProvider attr) { + //模板界面,自适应选项去掉了默认,这边的判断为了兼容之前的设置 + if (attr != null && attr.fitStateInPC() == 0) { + attr.setFitStateInPC(3); + } + ReportFitAttrProvider fitAttr = ReportFitConfig.getInstance().getCptFitAttr(); + if (attr == null) { + //如果为空, 就用全局的 + attr = fitAttr; + populateGlobalComponents(); + } else if (fitAttr.fitStateInPC() == 0) { + attr = new ReportFitAttr(); + attr.setFitStateInPC(3); + initBorderPane(com.fr.design.i18n.Toolkit.i18nText("FR-Plugin_Local")); + } else { + initBorderPane(com.fr.design.i18n.Toolkit.i18nText("FR-Plugin_Local")); + } + this.localFitAttr = attr; + fontRadioGroup.selectFontFit((attr).isFitFont()); + fitRadionGroup.selectIndexButton(attr.fitStateInPC()); + fitPreviewPane.refreshPreview(getCurrentFitOptions(), fitRadionGroup.isEnabled()); + } + + @Override + public ReportFitAttrProvider updateBean() { + ReportFitAttr attr = new ReportFitAttr(); + attr.setFitFont(fontRadioGroup.isFontFit()); + attr.setFitStateInPC(fitRadionGroup.getSelectRadioIndex()); + + // 直接用全局的 + if (globalCheck.isSelected()) { + updateGlobalConfig(attr); + return null; + } + this.localFitAttr = attr; + return attr; + } + + private void updateGlobalConfig(ReportFitAttr attr) { + try { + ReportFitConfig manager = ReportFitConfig.getInstance(); + manager.setCptFitAttr(attr); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage()); + } + } +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/menupane/TemplateFitAttrPane.java b/designer-base/src/main/java/com/fr/design/mainframe/menupane/TemplateFitAttrPane.java new file mode 100644 index 0000000000..675af9c541 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/menupane/TemplateFitAttrPane.java @@ -0,0 +1,55 @@ +package com.fr.design.mainframe.menupane; + +import com.fr.design.beans.BasicBeanPane; +import com.fr.report.fun.ReportFitAttrProvider; + +import javax.swing.BorderFactory; +import javax.swing.BoxLayout; + +/** + * Created by 夏翔 on 2016/6/24. + */ +public class TemplateFitAttrPane extends BasicBeanPane { + private TemplateBrowserFitAttrPane attrPane; + + + public TemplateFitAttrPane() { + initComponents(); + } + + private void initComponents() { + this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); + this.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); + attrPane = new TemplateBrowserFitAttrPane(); + this.add(attrPane); + + } + + /** + * 展示界面 + * + * @param fitAttr 自适应属性 + */ + public void populateBean(ReportFitAttrProvider fitAttr) { + attrPane.populateBean(fitAttr); + } + + + /** + * 提交数据 + * + * @return 界面上的更新数据 + */ + public ReportFitAttrProvider updateBean() { + return attrPane.updateBean(); + } + + /** + * 标题 + * + * @return 标题 + */ + protected String title4PopupWindow() { + return com.fr.design.i18n.Toolkit.i18nText("FR-Designer_Fit-Attr"); + } +} diff --git a/designer-base/src/main/resources/com/fr/design/images/reportfit.preview/00.png b/designer-base/src/main/resources/com/fr/design/images/reportfit.preview/00.png new file mode 100644 index 0000000000000000000000000000000000000000..58033c96a2867f61277c7bbd00abc054caefe261 GIT binary patch literal 745 zcmeAS@N?(olHy`uVBq!ia0vp^AAooP2NRIoyR*y)NO2Z;L>4nJa0`PlBg3pY5A!ydkGr}~$MpHT-+$d# z>|I@6m;dq8oc8kNEmh0CWVMd`%eJ4Zc=lnE<-wxGbDq5@k1RbWD0_bUe2G)hM!WCk z_vrnr482&UdwCA?yC~T|5kar|xbC$}W}Rbv-?zijU;S#o|7FK#GN1ca>{?thXSQi| zp1Exr&+W^_yDxrJJF(7n_j}>=j`j-wzaJ8KNcf;`TnteP3QJ&rLD7+ z?-D(n^fvL@RrkYsKV~MM^Izwi_4T4VfBO0LS1fFAZ1^$f^yBTU=lT8JEPqRUPpDD4 zmv%03{)&|7+LEduiMK1WW?8b|F1ZL6mTEWr+MasxV20L1JCyBEZS>Jxy)1gbAUkplBJg}T`sl}WPup2ywVZMoS3 ePd;cLV0h5Ee%`3dVtmW1$*Qeu_ zYr{BBp((?VqAjf)Y-}!@j{Bj<^PF@3IscsV$NTwwpZAaVulIf4bVqwQXt&yK002O? zHZZ46&u&(MwD=}z)Too2+I7{&{TcwsC~TD&kdvpf*;I|Nx)|Xc>K7616^;eY`i6RA zHEe^ua9Ag-mv3ws9cu;vl7HC3&Z1&Qrt_h8X!wDy;Ptn4N4)~GQuTsl33(taLS@o= zXAu}l1S9cA&Z?$S{-jJfBXKW_N|`(GQ>ww*Xj}}@LN;rOC~;%@I7162<}FSUqln3? z0bAJCU-_Ow)4E%9;`rDKAqm`wjw}lqS{fD9xCgfJz=A#PpUP)Pa%bvWqRN%YdsNPI z7g_9?a@SEw6F=RFOhw9PCH-x_@jg)}CNENh1|6Mel^#05rv*S9hA3;snq)=YFx|__Sc;+BL6<@q z{Nveyg$KWVKk_$Hgc-Ooh#AQH`we$-JSg9JIk-HUCDD zjDaZVGxlAN8=ue;ufjkIKW4>$rl#8F;~H4ZbcQFg0Z*EFIP=2QZYDhk;%6bk6e4Z=dc`&+BSytii&|vjP$} z29vT&VAc2V{eF{UudkaundWeHwOuymIWV0f1Gm;JZd+!&Nlk zCRV1lnBY;$=5`kK>%VySC~?FJ-`AP}Jydc^N7e;JGiIAq(MdLOi^@1r_2wn96Fp^} z?N3&4L}0u-sO;sj)Xg)KNN7%+=4Wc0wW*7tnXdX&@w)9h35_P`%fotmW~n6CxwzuW zitI3B9hB*kD1+`uJyK&r{_gf-$j|Y;cf#9pFsEl5Vo3gTaoB=UzG<1JlxJf*6Yk1UCzqznssAAo%d%%FY--xjb>)*3i$h_UIXUDCq zcQA!WB12xjvEKJZ28+JLv>66X1!aB_wse4*uj}vjc!Yu&0VSB~?{!NXqh+W}?s=k< zuf*h7n4JCI4xR`Sk>SYK=IXY#jcYr$JmQEBjy2D;bYw$)lFKaoE&PELsjt}9-?NJJ z;BwltluFlMh=^1RiyhO`)B2x*&OSgIl)Qy){eSuEq;33{EPu2kpdO*9p|-Ac1-Mq} VKGTiaz-&GWz}CthR%v4nJa0`PlBg3pY5ZZ9qm$~?`Wbg3+ z`$_HBe`_zEZGSIxi|=WZ=MA&3vD}}2W!K)O$)BChT0XceX#V2ml3yP)txn8IwiEoF zr!V_F(bi_$?03d(uP-O>zW7h=#4^|Fcf#i_!!AVsn9tCC?xwW%5~U2FW7!;=VeV#g zRED@4=7lra`D^oyHeUNKHAiLltvRwq4!ac`KTj@ws~h+K?)=Tq#edCvmouaG+}D5B z=jLqIjnjWr`b_3qtJk)pua~p8UW{9{Y-aHR-^~?&-J1Pu((~6$=z=*IBcM5?fWA>= z$gZ8N{o?e~OWW2uPH@mXs>t5A5E2n!--4J>k2_ufM;N{^K#E54bo+YwmTNARV6m*> bG+@};xqf5sUHOZ^6w2V~>gTe~DWM4f&lND! literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/images/reportfit.preview/20.png b/designer-base/src/main/resources/com/fr/design/images/reportfit.preview/20.png new file mode 100644 index 0000000000000000000000000000000000000000..7a39d66d58a978280a5213209d03d3ef7173c188 GIT binary patch literal 2459 zcmb_eSyU3-8l^!i%$!Tf#36?qOU;VR5mGTo4F?=>$Qg%Ha4N0Lp|COwHBEjq1vMp0 zP(suG`b$l7R>+Cc2EmbX%8^U0?&`kWweG`x_|CW2{?_@P&faHVcR<>R13^Fl03dE> z3w089zOWu_-z+>Em@$UJw&R>FIvM~FllfVj0Qm*-LQ(+-bHkm948+CyMg;&Y{UiMX zloP4^5d0x)zYZ4?5jJ# zWBT4hg6|)Pc>2m8-yNl`C83YdK6S7K>n}Q2O=nN#yw1BnCkOaq1s5oJn-L_h^qiny zZW-kkKt;4P4;uRf19pmEF52{;2#_ZFn-ikHyM9f7A%HySpz*&EzTfJe~sDb^!8h5_+-EbPT_AovVDtL>F#JY<)W_F#SVMnaR_RQ#|QrN5D zZ{72)BiB8jdrI#i)i{5chP|B}4%^Mnk4!@6$1{;Bi?r0orfwR^X%=U#t4nKIQ~hDL zkINhza4#OK`oQuHz9zFi-M{DfqXsN-Fmd=c$~gXzcZ)T| zG%7<`*r5di3)u4=hf|}k6f~XJdtkw9XZ4Vs{NCsxM!79 z@K1fz=o%RQpB8^4FV}^`tq3v0Fq_qK6u62Q#~(6Zb@ z!+9miY349l-Mv^69@loRFX;KYUJ^~wr4w%05VL%Xp+NlXRVQ%Qp;|mGkZ5ai4Pv6R z%c?4_CGk$a<*PeRf^ekJh7iLkAQ6+1uo329| zV%uCmUi@L_vWiP>o3YXTR4qaJ=USH}G9@h>9~ii&6}VGe9wgM!FA@GhLc#s!{%2t- z0nJM@fDR_IN&JFB{av6WFvOT-ckHs_|7pEb`eJKyVO7VwaPIn>wKQr-m~Big%4@2u zY4=N&8iSEb4aD{(hU+$!8bKP1*YVtw&78PlEyIRi=*AdQ0yaIn#0xd0e|fEq)AV`?!MUll@OH!>4H9I zP1z9H$mcrk1K;V;Txv16uxBf1T?tWT z46eFZctd?^J9X;JS%N)tK1#5_uV1NSU>s)^NtpgG(4bs(pXmLuK1cacdO+vhXRTc-4vAV}MvZ|n&MU)ScS85-% z5qloYLe^V)<-!fu_D>d+h)g%r9oEiC!LYLSVIB($&AFM4K?~HT=uw-fZN|Bu4G#4T zAh29h36sE+5G#9!Hg8fZ%XFfi@+=k}=hN#3qLvgNzLT>>ybzL5)UO%+RH8Ghdw_B{ zS>DlnO*cKwd;xWU+@`Z)(1s>g>vL|xR|YedpNpAnQup1Rb|Kg|SDv?Cb{^j2VONw%P|ukYNqK0Ss8JMnTQk9ew@lO`K?Gxm?OnC@Wm zuGJ<2GSU0U=x_m1j%Qiw2MSu~x!oW;2ZfA5a;;M$!ffwhs@s(2jLO4A2tbhi_dX=d zh|4J^1xTSwrP%e2$c}XrOh^l9z%P zlZQ2e4+Vy;!e@n_3TII&FY7J!`cN$;&Qw-1fMmXXV{hHEn+h0Ih}Nr%D<8gO7!GVb z%}F1TmDV5j(5@5nnI7Hm5?&V0#8{wX5osK;HTx~ZjV9@5$LzE@$M2Rk_? zVDd%SWA}H?!DOtoSGRtq0#9otd9mxg1FzOlr_kJax(d`3dFk`T58?B8&aqpSjR_=n zM4~}@N%Yve_GQwYSboM#kqC5`O_0)ZYW3#dA>fyJ{fYy>ZA=&p{utUH^k1#*a{8-I g-owpAaRKlkU<8B5IWhKPg~1A72SY+1Tlpma3!q1bF#rGn literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/images/reportfit.preview/21.png b/designer-base/src/main/resources/com/fr/design/images/reportfit.preview/21.png new file mode 100644 index 0000000000000000000000000000000000000000..b8165ae99ce91d14edf2c31f6352e401cbd4ee65 GIT binary patch literal 788 zcmeAS@N?(olHy`uVBq!ia0vp^AAooP2NRIoyR*y)NO2Z;L>4nJa0`PlBg3pY5~)xf__b%0Z;z z;jIsMVqezn61?MIzEpa{1Wz?#hiuLVg+KOf;Wdk6Zr^_*SN>T+j=p?A_p;xAe*QD+ z2%UQ_-1%PGx%tZ+d|7%II9^c55HM+Cb8H4PS$LsL4k;*8&;-g<2C4%y-N0Hnq?%Z3 zt>ULw{i~193ZFKs`1{{4g0Ei8nmb=N?YyOavq+Zb619+ym)W!Y{EY2&)FbkyT$cG0 z9X7Yv<@mRv?uB zbT-`698yqEL;at)t-?2m;% znicc?mY-U;_PvF*NoBtIzO*NAtG}0Be7Ah@+^?>n;NCU2Q?%r0{_D0qXXpG)Y+VHp r4pPzp)TcAn#!osVvf|i!24;p{iRCXg2tO(Wrf3FFS3j3^P64nJa0`PlBg3pY5~)xfAI3%0Z$b z(4e-=wDzmux5sJ~Eq`~grm?5#}W+0iw311%0=Qllm`E>5ylk@M%=qEhuJD&WxB|BoxZYj|} z(O)Niy_KVrz;A2o{5Mnk>yx{C<4l)tdRJ$-v{rNdJI&?SS3RuQwOl6lxscsn%UvhS z_KNV8<;%sV=h<29J)v88yWnxv#+l5&K)p?87fg$c5Ur8Ko)+&#WBH(H-% zn+zn}f!=TgM*-MJASTpvju*i3gYYL%0g`Ft>qf*m$#&aBUf$a-ut#9ZL-z(o2Hn_w V^RIJzodu?722WQ%mvv4FO#lavMe6_n literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/images/reportfit.preview/gray/00.png b/designer-base/src/main/resources/com/fr/design/images/reportfit.preview/gray/00.png new file mode 100644 index 0000000000000000000000000000000000000000..cc90692cca5b0cdcbddf02d95bc0886663d88ff0 GIT binary patch literal 745 zcmeAS@N?(olHy`uVBq!ia0vp^AAooP2NRIoyR*y)NO2Z;L>4nJa0`PlBg3pY53*g3ZaI(d5|QnLDbsb`-57xd1 zDwxE4{enV7G%paOhHf@TWpEG?Yqy<;>78Hu%sGmF2qrMFept4; UtBgerm`oWwUHx3vIVCg!01R<7lmGw# literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/images/reportfit.preview/gray/10.png b/designer-base/src/main/resources/com/fr/design/images/reportfit.preview/gray/10.png new file mode 100644 index 0000000000000000000000000000000000000000..603b9dbcdadc9d09400ad761a042278e79707bd4 GIT binary patch literal 1507 zcma)+do&XY9LIO52y5Lq9(nW<7ng2w)i&=u+I6VLHBwkv+6ZA-V=lXNOUR+Qc};mN z?ILbkG;>h9ZM(CDSsshZ8s=4F@)(!!-#z!-^EtoY@0{QH{{Hy=&iDLop7Hhos_j(+ z002PPDOdPfomq=ARi(Au(iCsKR(3|83Wx;&)HT=R8$e;P?pjkX&dop0C+c!s0x|{# za1M>Sh}sXkiVQ=+QOHo-H5SSa0N5T4b9MGj?4J-Fh}QHpP#OMQ_22|X*ZfdhZrd-e ze%dN~GH?Ik+Us{Pv)n58ZV063tlrLD#-9}?(AZc_-9$QC-u`x;n-8;MRW3*p@Xw3* zq7t42%D*LAHZU?Wf8lPat?pLqBT4a1C8^pd0l$*vMBL;Me?R}ReZ16;E8&rc=(yO` z6-5}YR5Tnp)Phe)PF8#tbBILZ>X$n?`y8#bGaawL3J#rtQ0N@7b%GVbG!I6&Hx}1_ zu8iiYrg+z(!hMsGw7O!S<(9&UIXpnN!yV)wA5$#N>*(lM)6jW$tr(T)*5+o6IUfhZ zA;s-dVI7Cr7x9!vL)emJzE;!I(~e1B9^*fO@gEHq-@nZ4c^IzTa8#$%F@-=Nlm>D{ z>>Au~H|4a4epQ>a*p%(P7}zBPgTV`nbK&v+ge;~?I{JjnDBs*82-p8Q;(J6+b~Ze{ z_$54h>Nj5UE)YmYT7Io5wm%UBD~S9xpw3T1W_yoUG{MzNG*EV*K7Oz95)z0u8!IG=4`EwPVYN zdo0{|%v#HPwIdizq5I*2a6bz0qyYSvQ~cd>>c>Fak+PWqT9kM~{=o}8gjF;Zf9ZNq z0m11nBf48FJ5kqXnWno}djqm-kI|mi_rJMlZ0jqrrsQ8{5R`2~%ccjL@=}(FQZhTW zlypeIat?;z(w;S9J9E#tlW)dwc|Mr=`z*jWIAZ z#8T*y7p?1#5i?e*e<+Z#eb`TqN+c3-s-h%cuN(f%MpOj%*mNsUY0Ix2(}NAY$1Ur76M&52;F`{6gVB>4PG0x%23y0+o&MT&JQ0b5 zqM3B`!yj>V>7C&}@|5T0^0oECQ;i0b9Hx&z;o8Vo1Hri0^`E};G_oCV0ZoNe1|kl4 zVUolCD}xf%Pyh>U^ec3cagTjBI~zAy6*o%t zdV6(D#iG^USK%%vYmc@ORr&@fr^!q^!}>8u4mJI0VzMW8s*{k6B9(tsu_*VaGj4BR z0{tzXux~qOC>CQ@nGilvh>KoRI)rsZ?s#67?YoZDp@bgn5j~pYjZNO)AdXLy?-`;IsN!_uD zdztel-(K0h$%bS-|A*{4nJa0`PlBg3pY5WuU{{6`O4~F`|KUXt`_W$ThF#} zFrNT_8N;vYAEJRb1TdyL0oKd~9y*-Y0zCGVDU+Pjj~2XK!+AFHy<>ySaIRAjHiW z&R_F7=eqgK8(;Ub=TEwudrr@?fEVOR92#EOpWYi{dw)*+?(J(;W8&nCSMIvso6I`5 zer44<%lT>C>B)avBBx(>k6tw|r}FRQ)o*pz*MBMb_Gi)irzhL4KDV*2KR&Z~+taT~ z_tMWL{tr00ZBJcgpoHVTr(X@vD@?mCZ}Q?u@wY=l)8KDgdTX22WQ%mvv4FO#tm8D;59% literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/images/reportfit.preview/gray/20.png b/designer-base/src/main/resources/com/fr/design/images/reportfit.preview/gray/20.png new file mode 100644 index 0000000000000000000000000000000000000000..ac11df1caf192627d4429292bc52992ef342038c GIT binary patch literal 2277 zcmb7`dpHw(8^;%UTb>Y$*?6Bu4mszUh{|YN&WAbVOk_ioLz_@kgq)^E^fc$K867N# zXRJb^S)!bTeo1I0KoQ~Iz`pQ{(Cv<}^dJBLKY{+V9RNy!yf6qMqTPwk;W%Qn|9LFH zJTN=}3$r@sAB1(n`Ul2FwquV00KoHBD07#Xk%dAf$1%@+DIxnsP(jaRF$v{>T~s)1 z1fp^z!Ut1T&5}uLJ*DjCa`lX=jN-hR3rus)R!mklHGMUzyDR?ALbcS0irw>74pCj< z0wD*neSEbbpU9v7@+HRlu8u7~oIr3^vZlZNsCE9Z3Bpw@1O)Xos7+0g>+MngQK66- zf5n63b#-;Kv$KPPgQ<#m z91b@yIEcwleyp%AOb^a;y1SdMY&Sw1ww|J=O^+VM=h;xGggAWvl)Ab)gTW}Y5AyeK z2Kr1xen~t97(b20swM|215;iOSXfvjM_W2eYJjUVNF>q%w1D&?P0h&2Xj;j}#s>Nr zAO{9VM@OGwzx@a@H1LBcw+wwo;S&vtD#Me?y7jYap7}0*_(1cKM zc5**`uxw|>2S;R2+LQ6H$}re+Ky3i_uHR~C6}Fte^Ij3_sA9HDmNyHblKX6Qbo43J zXK_uh{6>d%=(%&UzP7cQlzCgwO1UL-UZM0ICkOA}j|xED4PrP-tBNqYixD?+#A0PC5vkf{A9qS9pp` zXt`A7*6dne%6<5zx@Mkt)zBei+Y(qdY|){!volhyTFZE(TpcLiD%HqcvOx7#lLqb# z9B64*TOk$jQZEXKuade09a^|tZgcYvEt*+cfkUUEThN&8n-iyyU}`T8oQ&Cd3>fI+ z7GHq+4`v?hvSOkAUQ?1jt0 zL4Qj4cs84&Vq#KrEq=o}Ke)0X(3z=Z!=a@F$+$QovGu<6<9%}1Rge+SkDMEV_C6V} z?5&MRJwQC+oHcc)uu%2)z2VhbEyFR;-m0k0Ys8wl)eSc{H`HEbVl3)MX%(QX=fGGq1(4Au`c;dG1YOsynC<=`P1&u{438rlLgG1%9ZS z%UeuTvQq`-SnI{c?1v?N(~{(CU!=9tAmk+a;VZuJeJF7R&u%n#xu@jhTvy((XBgs4 zcjvFH`|G9V2W8gqf(0t(DaUSiTQ4;Iq7%}e5js;d5>=c1#H)?gIc_>5`tLsJt*2ubtB18xtQ zUW#MglP8gf>vl@5N8j4FYgVo1xSuGk%dtX}eJ^Ml!ly4- z()#8o^J6K%<3>i{i<7yRW`fEU#l*$zRALJlW0@h7QU3160#;f-Du{J6J*SEfR~;{K z8PMJp^>Qxw=VrZ2N-#HMATu>Pfqu5|fK+@1g|Oylmdh_$sT`aqk(z^of~p+P*2Sur zY|Ew_5vP%0Fql36xm-~cB0j}f;DlLjFaOat=6cnoB&oGuF6m~y4?fiFVh>SaN7|U~ zrL!Ir+AmEX6@P9b)1*!6lz8r5UP$b|H01-SHr4MIi|;FeIwwoygIA=UHQhOR#O1H2Ym#T9=Dfes z!y)-BP2rH{c!^S?^*o4rTnM4{8#g6Uz(pKx|(~oG>Pm14nJa0`PlBg3pY5~)xf|%$>>%P0 zm>m&&{fK-{=B~Y5Gp8tQ>0tR_X{&zGCpq`gW2>V-45v@I#6D%wE4y{qS3AnQD%&mj z$+GyL39FY<1`BT!n`83=K@$!sFjF~00K#;;pa5a^E^vf0f$AVkuolM)0y;0Y<$kaF zmmmLX?HkkQ-xRO-hwuG)HRtapt#>in?#qnqRNi%-t)Jd_x5_;BIM$47TWvCcPs{&42QS$>*#lQU+e zRn8Tk+`c|8>*4C>-NsM$KHKw5>(9wKtLwj%P5a(#TK%DBbK-Z){_pQCiu-^8=61OH z&Y>SJHRt9W{V{!+q=u`W#48ziG3zx@FMTr#wNX~oA>$8 z-dw*XK*SLm`M6^o8c0}zV)j?}pcza@e+VTov`k*eXm|Ez1TZZ#c)I$ztaD0e0sve@ BO2hyF literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/images/reportfit.preview/gray/30.png b/designer-base/src/main/resources/com/fr/design/images/reportfit.preview/gray/30.png new file mode 100644 index 0000000000000000000000000000000000000000..c6f452a8a00f8e18900a3da1a0ac32a38dda4a80 GIT binary patch literal 783 zcmeAS@N?(olHy`uVBq!ia0vp^AAooP2NRIoyR*y)NO2Z;L>4nJa0`PlBg3pY5~)xs#an%0Z+d zPRU0!JXT!vDhY$A+)o|NkDn z*Y(PtW= z+x_qJ3wN#CU1u8`Q}gTj_AVjooHu(OD!22`-hcV!mgo9l)Lg zs{(lrsG&`%d0nn_`h#s(eQTq&<||%)yI3^uaY%8Qo%d!}-QRQV`}682J1n$H zjKkxmOxNG~dHtzBp%y7|?tLqi+uts3+gdB4_46nf$dS;{wmG-S?G)Fp%vsxV|0)zb zVE~6cSRUaYpre(+5d+r+RL~2KBc$kp27%)RvUCfWK!b*4-4BnJJ$Cmx$=_sD!)d^v YePAu;$(*Doz{Jep>FVdQ&MBb@09bBFjsO4v literal 0 HcmV?d00001 diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XElementCase.java b/designer-form/src/main/java/com/fr/design/designer/creator/XElementCase.java index 1797ce9fbd..a9e655e5b2 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XElementCase.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XElementCase.java @@ -13,6 +13,7 @@ import com.fr.design.mainframe.*; import com.fr.design.mainframe.widget.editors.ElementCaseToolBarEditor; import com.fr.design.mainframe.widget.editors.PaddingMarginEditor; import com.fr.design.mainframe.widget.editors.WLayoutBorderStyleEditor; +import com.fr.design.mainframe.widget.propertypane.BrowserFitPropertyEditor; import com.fr.form.FormElementCaseContainerProvider; import com.fr.form.FormElementCaseProvider; import com.fr.form.FormProvider; @@ -22,8 +23,8 @@ import com.fr.form.ui.ElementCaseEditorProvider; import com.fr.stable.ArrayUtils; import com.fr.stable.CoreGraphHelper; import com.fr.stable.core.PropertyChangeAdapter; -import com.fr.stable.fun.FitProvider; -import com.fr.stable.fun.ReportFitAttrProvider; +import com.fr.report.fun.FitProvider; +import com.fr.report.fun.ReportFitAttrProvider; import javax.swing.*; import java.awt.*; @@ -104,19 +105,18 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme new CRPropertyDescriptor("toolBars", this.data.getClass()).setEditorClass(ElementCaseToolBarEditor.class) .setI18NName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_EC_Toolbar")) .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Fine-Design_Basic_Advanced") + + }; CRPropertyDescriptor[] extraTableEditor = getExtraTableEditor(); - return (CRPropertyDescriptor[]) ArrayUtils.addAll(propertyTableEditor, extraTableEditor); + return ArrayUtils.addAll(propertyTableEditor, extraTableEditor); } + public CRPropertyDescriptor[] getExtraTableEditor(){ CRPropertyDescriptor[] extraTableEditor = resolveCompatible(); - FormElementCaseEditorProcessor processor = ExtraDesignClassManager.getInstance().getSingle(FormElementCaseEditorProcessor.MARK_STRING); - if (processor == null) { - return extraTableEditor; - } this.designer = WidgetPropertyPane.getInstance().getEditingFormDesigner(); - FitProvider wbTpl = (FitProvider) designer.getTarget(); + FitProvider wbTpl = designer.getTarget(); ReportFitAttrProvider fitAttr = wbTpl.getFitAttr(); ElementCaseEditor editor = this.toData(); //兼容之前报表块(之前三个选项为:默认 横向 双向 现在是:横向 双向 不自适应) @@ -128,11 +128,12 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme reportFit = fitAttr.fitInBrowser() ? editor.getReportFitAttr() : fitAttr; } ReportFitAttrProvider reportFitAttr = editor.getReportFitAttr() == null ? fitAttr : reportFit; - PropertyDescriptor[] extraEditor = processor.createPropertyDescriptor(this.data.getClass(), reportFitAttr); + BrowserFitPropertyEditor browserFitPropertyEditor = new BrowserFitPropertyEditor(); + CRPropertyDescriptor extraEditor = browserFitPropertyEditor.createPropertyDescriptor(this.data.getClass(), reportFitAttr); if (editor.getReportFitAttr() == null) { - editor.setReportFitInPc(processor.getFitStateInPC(fitAttr)); + editor.setReportFitInPc(browserFitPropertyEditor.getFitStateInPC(fitAttr)); } - return (CRPropertyDescriptor[]) ArrayUtils.addAll(extraTableEditor, extraEditor); + return ArrayUtils.addAll(extraTableEditor, new CRPropertyDescriptor[] {extraEditor}); } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/JForm.java b/designer-form/src/main/java/com/fr/design/mainframe/JForm.java index 2fb5febd3c..b755edec73 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/JForm.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/JForm.java @@ -36,6 +36,7 @@ import com.fr.design.mainframe.actions.FormMobileAttrAction; import com.fr.design.mainframe.actions.TemplateParameterAction; import com.fr.design.mainframe.form.FormECCompositeProvider; import com.fr.design.mainframe.form.FormECDesignerProvider; +import com.fr.design.mainframe.menupane.ReportFitAttrAction; import com.fr.design.mainframe.templateinfo.JFormProcessInfo; import com.fr.design.mainframe.templateinfo.TemplateProcessInfo; import com.fr.design.mainframe.toolbar.ToolBarMenuDock; @@ -503,9 +504,9 @@ public class JForm extends JTemplate implements BaseJForm { @Override public ShortCut[] shortcut4TemplateMenu() { if (this.index == FORM_TAB) { - return (ShortCut[]) ArrayUtils.addAll(new ShortCut[]{new TemplateParameterAction(this), new FormMobileAttrAction(this)}, new ShortCut[0]); + return (ShortCut[]) ArrayUtils.addAll(new ShortCut[]{new TemplateParameterAction(this), new ReportFitAttrAction(this), new ReportFitAttrAction(this)}, new ShortCut[0]); } else { - return (ShortCut[]) ArrayUtils.addAll(new ShortCut[]{new TemplateParameterAction(this), new FormMobileAttrAction(this)}, this.elementCaseDesign.shortcut4TemplateMenu()); + return (ShortCut[]) ArrayUtils.addAll(new ShortCut[]{new TemplateParameterAction(this), new ReportFitAttrAction(this)}, this.elementCaseDesign.shortcut4TemplateMenu()); } } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/widget/propertypane/BrowserFitAlignmentItems.java b/designer-form/src/main/java/com/fr/design/mainframe/widget/propertypane/BrowserFitAlignmentItems.java new file mode 100644 index 0000000000..ca6fd2ca14 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/widget/propertypane/BrowserFitAlignmentItems.java @@ -0,0 +1,21 @@ +package com.fr.design.mainframe.widget.propertypane; + +import com.fr.conf.FitAttrState; +import com.fr.design.designer.properties.items.Item; +import com.fr.design.designer.properties.items.ItemProvider; + +public class BrowserFitAlignmentItems implements ItemProvider { + + private static Item[] VALUE_ITEMS = { + FitAttrState.HORIZONTAL_FIT.propertyItem(), + FitAttrState.DOUBLE_FIT.propertyItem(), + FitAttrState.NOT_FIT.propertyItem(), + }; + + @Override + public Item[] getItems() { + return VALUE_ITEMS; + } + + +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/widget/propertypane/BrowserFitEditor.java b/designer-form/src/main/java/com/fr/design/mainframe/widget/propertypane/BrowserFitEditor.java new file mode 100644 index 0000000000..4b3a7488ac --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/widget/propertypane/BrowserFitEditor.java @@ -0,0 +1,47 @@ +package com.fr.design.mainframe.widget.propertypane; + +import com.fr.design.designer.properties.items.Item; +import com.fr.design.designer.properties.items.ItemProvider; +import com.fr.design.mainframe.widget.editors.ComboEditor; + +import java.util.Vector; + +public class BrowserFitEditor extends ComboEditor { + public BrowserFitEditor() { + this(new BrowserFitAlignmentItems()); + } + + public BrowserFitEditor(ItemProvider provider) { + this(provider.getItems()); + } + + public BrowserFitEditor(Item[] items) { + super(items); + } + + public BrowserFitEditor(Vector items) { + super(items); + } + + @Override + public Object getValue() { + Item item = (Item) comboBox.getSelectedItem(); + return item.getValue(); + } + + @Override + public void setValue(Object value) { + Item item = new Item("", value); + comboBox.setSelectedItem(item); + } + + /** + * 是否立即刷新 + * + * @return 是或者否 + */ + @Override + public boolean refreshInTime() { + return false; + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/widget/propertypane/BrowserFitPropertyEditor.java b/designer-form/src/main/java/com/fr/design/mainframe/widget/propertypane/BrowserFitPropertyEditor.java new file mode 100644 index 0000000000..1ffa7a0e1b --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/widget/propertypane/BrowserFitPropertyEditor.java @@ -0,0 +1,45 @@ +package com.fr.design.mainframe.widget.propertypane; + +import com.fr.design.designer.creator.CRPropertyDescriptor; +import com.fr.design.form.util.XCreatorConstants; +import com.fr.main.ReportFitConfig; +import com.fr.report.fun.ReportFitAttrProvider; + +import java.beans.IntrospectionException; + +/** + * Created by zhouping on 2015/9/10. + */ +public class BrowserFitPropertyEditor { + + /** + * 生成属性表 + * + * @param temp 传入当前操作的class + * @param reportFitAttr 传入的自适应属性 + * @return 返回属性表 + */ + public CRPropertyDescriptor createPropertyDescriptor(Class temp, ReportFitAttrProvider reportFitAttr) { + if (getFitStateInPC(reportFitAttr) == 0) { + return null; + } + try { + CRPropertyDescriptor propertyDescriptors = new CRPropertyDescriptor("fitStateInPC", temp).setEditorClass(BrowserFitEditor.class) + .setRendererClass(BrowserFitRender.class).setI18NName(com.fr.design.i18n.Toolkit.i18nText("FR-Designer_Fit-In-Web")) + .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced"); + return propertyDescriptors; + } catch (IntrospectionException e) { + return null; + } + } + + public int getFitStateInPC(ReportFitAttrProvider fitAttrProvider) { + if (fitAttrProvider != null) { + return fitAttrProvider.fitStateInPC(); + } + return ReportFitConfig.getInstance().getFrmFitAttr().fitStateInPC(); + + } + + +} \ No newline at end of file diff --git a/designer-form/src/main/java/com/fr/design/mainframe/widget/propertypane/BrowserFitRender.java b/designer-form/src/main/java/com/fr/design/mainframe/widget/propertypane/BrowserFitRender.java new file mode 100644 index 0000000000..f8dce2acc1 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/widget/propertypane/BrowserFitRender.java @@ -0,0 +1,10 @@ +package com.fr.design.mainframe.widget.propertypane; + +import com.fr.design.mainframe.widget.renderer.EncoderCellRenderer; + +public class BrowserFitRender extends EncoderCellRenderer { + + public BrowserFitRender() { + super(new BrowserFitWrapper()); + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/widget/propertypane/BrowserFitWrapper.java b/designer-form/src/main/java/com/fr/design/mainframe/widget/propertypane/BrowserFitWrapper.java new file mode 100644 index 0000000000..7e1f63b8ac --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/widget/propertypane/BrowserFitWrapper.java @@ -0,0 +1,9 @@ +package com.fr.design.mainframe.widget.propertypane; + +import com.fr.design.designer.properties.ItemWrapper; + +public class BrowserFitWrapper extends ItemWrapper { + public BrowserFitWrapper() { + super(new BrowserFitAlignmentItems()); + } +} diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/JWorkBook.java b/designer-realize/src/main/java/com/fr/design/mainframe/JWorkBook.java index bfc01d0bf9..0e33e1891d 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/JWorkBook.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/JWorkBook.java @@ -41,6 +41,7 @@ import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.icontainer.UIModeControlContainer; import com.fr.design.gui.imenu.UIMenuItem; import com.fr.design.mainframe.cell.QuickEditorRegion; +import com.fr.design.mainframe.menupane.ReportFitAttrAction; import com.fr.design.mainframe.templateinfo.JWorkBookProcessInfo; import com.fr.design.mainframe.templateinfo.TemplateProcessInfo; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; @@ -698,6 +699,7 @@ public class JWorkBook extends JTemplate { new ReportWebAttrAction(this), new ReportExportAttrAction(this), new ReportParameterAction(this), + new ReportFitAttrAction(this), new ReportMobileAttrAction(this), new ReportPrintSettingAction(this), new ReportWatermarkAction(this),