diff --git a/designer-base/src/main/java/com/fr/design/DesignModelAdapter.java b/designer-base/src/main/java/com/fr/design/DesignModelAdapter.java index 013c703fb2..bd4130a853 100644 --- a/designer-base/src/main/java/com/fr/design/DesignModelAdapter.java +++ b/designer-base/src/main/java/com/fr/design/DesignModelAdapter.java @@ -276,22 +276,28 @@ public abstract class DesignModelAdapter map, Filter filter) { Iterator it = this.getBook().getTableDataNameIterator(); + List names = new ArrayList<>(); try { - // 清空下缓存 - tableDataParametersMap.clear(); + List tableDatas = new ArrayList<>(); while (it.hasNext()) { String name = it.next(); TableData tableData = this.getBook().getTableData(name); - ParameterProvider[] parameterProviders = DataOperator.getInstance().getTableDataParameters(tableData); + tableDatas.add(tableData); + names.add(name); + } + ParameterProvider[][] totalParameterProviders = DataOperator.getInstance().getTotalTableDataParameters(tableDatas); + tableDataParametersMap.clear(); + for (int i = 0; i < totalParameterProviders.length; i++) { + ParameterProvider[] parameterProviders = totalParameterProviders[i]; if (filter != null) { ParameterApplyHelper.addPara2Map(map, parameterProviders, filter, null, ParameterSource.DEFAULT_SOURCE); } else { ParameterApplyHelper.addPara2Map(map, parameterProviders, null, ParameterSource.TEMPLATE_SOURCE); } - tableDataParametersMap.put(name, parameterProviders); + tableDataParametersMap.put(names.get(i), parameterProviders); } } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e, e.getMessage()); } } diff --git a/designer-base/src/main/java/com/fr/design/actions/help/AboutPane.java b/designer-base/src/main/java/com/fr/design/actions/help/AboutPane.java index 6158540888..dbb7798f3b 100644 --- a/designer-base/src/main/java/com/fr/design/actions/help/AboutPane.java +++ b/designer-base/src/main/java/com/fr/design/actions/help/AboutPane.java @@ -126,8 +126,8 @@ public class AboutPane extends JPanel { if (GeneralContext.getLocale().equals(Locale.TAIWAN)) { return; } - boxCenterAlignmentPane = new BoxCenterAligmentPane("QQ: " + CloudCenter.getInstance().acquireUrlByKind("help.qq")); - contentPane.add(boxCenterAlignmentPane); + JPanel servicePlatformPane = getURLActionPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Service_Platform"), CloudCenter.getInstance().acquireUrlByKind("service.platform")); + contentPane.add(servicePlatformPane); } // 是否显示鸣谢面板 diff --git a/designer-base/src/main/java/com/fr/design/gui/controlpane/UIControlPane.java b/designer-base/src/main/java/com/fr/design/gui/controlpane/UIControlPane.java index f9a3ed0db3..12f904922d 100644 --- a/designer-base/src/main/java/com/fr/design/gui/controlpane/UIControlPane.java +++ b/designer-base/src/main/java/com/fr/design/gui/controlpane/UIControlPane.java @@ -31,7 +31,6 @@ import java.awt.Color; import java.awt.Cursor; import java.awt.Dimension; import java.awt.FlowLayout; -import java.awt.Font; import java.awt.Frame; import java.awt.Graphics; import java.awt.Graphics2D; @@ -241,51 +240,12 @@ public abstract class UIControlPane extends JControlPane { } private void hideDialog() { - // 检查是否有子弹窗,如果有,则不隐藏 - for (Window window : getOwnedWindows()) { - if (window.isVisible()) { - return; - } - } - // 如果有可见模态对话框,则不隐藏 - for (Window window : DesignerContext.getDesignerFrame().getOwnedWindows()) { - if (window instanceof JDialog && window.isVisible() && ((JDialog) window).isModal()) { - return; - } - } - - try { - //没有指定owner的弹出框用的是SwingUtilities.getSharedOwnerFrame() - Frame sharedOwnerFrame = Reflect.on(SwingUtilities.class).call("getSharedOwnerFrame").get(); - for (Window window : sharedOwnerFrame.getOwnedWindows()) { - if (window instanceof JDialog && window.isVisible() && ((JDialog) window).isModal()) { - // 如果有可见模态对话框,则不隐藏 - return; - } - } - } catch (Exception ignore) { - //do nothing - } - - // 要隐藏 先检查有没有非法输入 - // 非法输入检查放在最后,因为可能出现面板弹出新弹框而失去焦点的情况,比如 输入公式时,弹出公式编辑对话框 - try { - checkValid(); - } catch (Exception exp) { - // 存在非法输入 拒绝隐藏 - this.setAlwaysOnTop(true); - FineJOptionPane.showMessageDialog(this, exp.getMessage()); - this.requestFocus(); - return; - } - if (JavaFxNativeFileChooser.isShowDialogState()) { - JavaFxNativeFileChooser.setShowDialogState(false); - return; + if (needToHidePopupEditDialog()) { + saveSettings(); + setVisible(false); + PopupDialogSaveAction saveAction = OSSupportCenter.getAction(PopupDialogSaveAction.class); + saveAction.unregister(); } - saveSettings(); - setVisible(false); - PopupDialogSaveAction saveAction = OSSupportCenter.getAction(PopupDialogSaveAction.class); - saveAction.unregister(); } private void initListener() { @@ -302,6 +262,54 @@ public abstract class UIControlPane extends JControlPane { } } + /** + * 是否需要隐藏popupEditDialog + */ + protected boolean needToHidePopupEditDialog() { + // 检查是否有子弹窗,如果有,则不隐藏 + for (Window window : popupEditDialog.getOwnedWindows()) { + if (window.isVisible()) { + return false; + } + } + // 如果有可见模态对话框,则不隐藏 + for (Window window : DesignerContext.getDesignerFrame().getOwnedWindows()) { + if (window instanceof JDialog && window.isVisible() && ((JDialog) window).isModal()) { + return false; + } + } + + try { + //没有指定owner的弹出框用的是SwingUtilities.getSharedOwnerFrame() + Frame sharedOwnerFrame = Reflect.on(SwingUtilities.class).call("getSharedOwnerFrame").get(); + for (Window window : sharedOwnerFrame.getOwnedWindows()) { + if (window instanceof JDialog && window.isVisible() && ((JDialog) window).isModal()) { + // 如果有可见模态对话框,则不隐藏 + return false; + } + } + } catch (Exception ignore) { + //do nothing + } + + // 要隐藏 先检查有没有非法输入 + // 非法输入检查放在最后,因为可能出现面板弹出新弹框而失去焦点的情况,比如 输入公式时,弹出公式编辑对话框 + try { + checkValid(); + } catch (Exception exp) { + // 存在非法输入 拒绝隐藏 + popupEditDialog.setAlwaysOnTop(true); + FineJOptionPane.showMessageDialog(this, exp.getMessage()); + popupEditDialog.requestFocus(); + return false; + } + if (JavaFxNativeFileChooser.isShowDialogState()) { + JavaFxNativeFileChooser.setShowDialogState(false); + return false; + } + return true; + } + // 移动弹出编辑面板的工具条 private class PopupToolPane extends JPanel { private JDialog parentDialog; // 如果不在对话框中,值为null diff --git a/designer-base/src/main/java/com/fr/design/gui/ispinner/UISpinner.java b/designer-base/src/main/java/com/fr/design/gui/ispinner/UISpinner.java index 18207011fe..a19db05060 100644 --- a/designer-base/src/main/java/com/fr/design/gui/ispinner/UISpinner.java +++ b/designer-base/src/main/java/com/fr/design/gui/ispinner/UISpinner.java @@ -321,6 +321,16 @@ public class UISpinner extends JPanel implements UIObserver, GlobalNameObserver textField.setMaxValue(maxValue); } + /** + * 设置最小值 + * + * @param minValue 最小值 + */ + public void setMinValue(double minValue) { + this.minValue = minValue; + textField.setMinValue(minValue); + } + private void componentInitListeners() { preButton.addActionListener(new ActionListener() { @Override diff --git a/designer-base/src/main/java/com/fr/design/javascript/JSContentPane.java b/designer-base/src/main/java/com/fr/design/javascript/JSContentPane.java index c9344f5ca8..31c45da762 100644 --- a/designer-base/src/main/java/com/fr/design/javascript/JSContentPane.java +++ b/designer-base/src/main/java/com/fr/design/javascript/JSContentPane.java @@ -24,9 +24,12 @@ import com.fr.design.javascript.jsapi.JSImplUpdateAction; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.DesignerContext; import com.fr.general.IOUtils; - import com.fr.js.JavaScriptImpl; +import javax.swing.JPanel; +import javax.swing.KeyStroke; +import javax.swing.SwingConstants; +import javax.swing.SwingWorker; import java.awt.BorderLayout; import java.awt.Cursor; import java.awt.Dimension; @@ -36,10 +39,6 @@ import java.awt.event.FocusListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.ArrayList; -import javax.swing.JPanel; -import javax.swing.KeyStroke; -import javax.swing.SwingConstants; -import javax.swing.SwingWorker; public class JSContentPane extends BasicPane { protected RSyntaxTextArea contentTextArea; diff --git a/designer-base/src/main/java/com/fr/design/javascript/JavaScriptImplPane.java b/designer-base/src/main/java/com/fr/design/javascript/JavaScriptImplPane.java index 6a83ad3d24..37bca2f6eb 100644 --- a/designer-base/src/main/java/com/fr/design/javascript/JavaScriptImplPane.java +++ b/designer-base/src/main/java/com/fr/design/javascript/JavaScriptImplPane.java @@ -14,21 +14,18 @@ import com.fr.design.javascript.jsapi.JSImplUpdateAction; import com.fr.design.mainframe.DesignerContext; import com.fr.design.scrollruler.ModLineBorder; import com.fr.design.utils.gui.GUICoreUtils; - import com.fr.js.JavaScriptImpl; import com.fr.stable.ParameterProvider; import com.fr.stable.StringUtils; - -import java.awt.BorderLayout; -import java.awt.Dimension; -import java.awt.GridBagConstraints; -import java.awt.GridLayout; import javax.swing.BorderFactory; import javax.swing.JPanel; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; - +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.GridBagConstraints; +import java.awt.GridLayout; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -149,8 +146,6 @@ public class JavaScriptImplPane extends AbstractHyperLinkPane { return importedJsPane; } - - /** * 参数改变 * diff --git a/designer-base/src/main/java/com/fr/design/mainframe/platform/ServicePlatformAction.java b/designer-base/src/main/java/com/fr/design/mainframe/platform/ServicePlatformAction.java new file mode 100644 index 0000000000..7912354501 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/platform/ServicePlatformAction.java @@ -0,0 +1,30 @@ +package com.fr.design.mainframe.platform; + +import com.fr.design.actions.UpdateAction; +import com.fr.design.i18n.Toolkit; +import com.fr.design.utils.BrowseUtils; +import com.fr.general.CloudCenter; +import com.fr.log.FineLoggerFactory; + +import java.awt.Desktop; +import java.awt.event.ActionEvent; +import java.net.URI; + +/** + * 帮助-服务平台 + * + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-12-14 + */ +public class ServicePlatformAction extends UpdateAction { + public ServicePlatformAction() { + this.setName(Toolkit.i18nText("Fine-Design_Basic_Service_Platform_Title")); + this.setSmallIcon("/com/fr/design/images/platform/platform"); + } + + @Override + public void actionPerformed(ActionEvent e) { + BrowseUtils.browser(CloudCenter.getInstance().acquireUrlByKind("service.platform")); + } +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java b/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java index 904c281560..3c75eff39d 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java @@ -56,6 +56,7 @@ import com.fr.design.gui.itoolbar.UIToolbar; import com.fr.design.locale.impl.SupportLocaleImpl; import com.fr.design.mainframe.JTemplate; import com.fr.design.mainframe.ToolBarNewTemplatePane; +import com.fr.design.mainframe.platform.ServicePlatformAction; import com.fr.design.menu.MenuDef; import com.fr.design.menu.SeparatorDef; import com.fr.design.menu.ShortCut; @@ -571,9 +572,14 @@ public abstract class ToolBarMenuDock { if (AlphaFineConfigManager.isALPHALicAvailable()) { shortCuts.add(new AlphaFineAction()); } - + shortCuts.add(new EnvDetectorAction()); - + //服务平台(仅针对中国大陆) + if (GeneralContext.getLocale().equals(Locale.CHINA)) { + shortCuts.add(new ServicePlatformAction()); + } + + shortCuts.add(SeparatorDef.DEFAULT); if (DesignerEnvManager.getEnvManager().isOpenDebug()) { OSSupportCenter.buildAction(objects -> shortCuts.add(new FineUIAction()), SupportOSImpl.FINEUI); diff --git a/designer-base/src/main/java/com/fr/design/update/ui/dialog/UpdateMainDialog.java b/designer-base/src/main/java/com/fr/design/update/ui/dialog/UpdateMainDialog.java index 0dd70e03cd..1fa37f60f8 100644 --- a/designer-base/src/main/java/com/fr/design/update/ui/dialog/UpdateMainDialog.java +++ b/designer-base/src/main/java/com/fr/design/update/ui/dialog/UpdateMainDialog.java @@ -488,7 +488,7 @@ public class UpdateMainDialog extends UIDialog { continue; } } - if (isValidLogInfo(updateInfo[UpdateInfoTable.UPDATE_TITLE_INDEX]) && curJarDate != null) { + if (isValid(updateInfo, GeneralUtils.objectToString(curJarDate))) { updateInfoList.add(new Object[]{UPDATELOG_FORMAT.format(updateTime), updateInfo[UpdateInfoTable.UPDATE_VERSION_INDEX], updateInfo[UpdateInfoTable.UPDATE_TITLE_INDEX], updateTime.after(curJarDate)}); } } @@ -499,6 +499,11 @@ public class UpdateMainDialog extends UIDialog { } } + + private boolean isValid(String[] updateInfo, String curJarDate) { + return isValidLogInfo(updateInfo[UpdateInfoTable.UPDATE_TITLE_INDEX]) && curJarDate != null && curJarDate.compareTo(updateInfo[UpdateInfoTable.UPDATE_DATE_INDEX]) <= 0; + } + private void updateCachedInfoFile(JSONArray jsonArray) throws Exception { String cacheDirPath = StableUtils.pathJoin(WorkContext.getCurrent().getPath(), "resources", "offlineres"); File cacheFileDir = new File(cacheDirPath); @@ -554,13 +559,18 @@ public class UpdateMainDialog extends UIDialog { continue; } } - if (isValidLogInfo(updateTitle)) { + Date curDate = UPDATE_INFO_TABLE_FORMAT.parse(currentNO, new ParsePosition(currentNO.indexOf("-") + 1)); + if (isValid4GenerateInfo(updateTitle, GeneralUtils.objectToString(curDate), updateTimeStr)) { updateInfoList.add(new Object[]{updateTimeStr, updateVersionStr, updateTitle, updateTime.after(curJarDate)}); } } return new ArrayList<>(updateInfoList); } + private boolean isValid4GenerateInfo(String updateTitle, String curDate, String updateTimeStr) { + return isValidLogInfo(updateTitle) && curDate.compareTo(updateTimeStr) <= 0; + } + private boolean containsKeyword(String str, String keyword) { return str.toUpperCase().contains(keyword.toUpperCase()); } diff --git a/designer-base/src/main/resources/com/fr/design/images/platform/platform_normal.svg b/designer-base/src/main/resources/com/fr/design/images/platform/platform_normal.svg new file mode 100644 index 0000000000..ab95e95f3c --- /dev/null +++ b/designer-base/src/main/resources/com/fr/design/images/platform/platform_normal.svg @@ -0,0 +1,3 @@ + + + diff --git a/designer-chart/src/main/java/com/fr/van/chart/custom/component/VanChartHyperLinkPane.java b/designer-chart/src/main/java/com/fr/van/chart/custom/component/VanChartHyperLinkPane.java index 6e5b346a18..7b74d1576a 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/custom/component/VanChartHyperLinkPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/custom/component/VanChartHyperLinkPane.java @@ -39,6 +39,8 @@ import com.fr.stable.Nameable; import com.fr.stable.bridge.StableFactory; import com.fr.van.chart.designer.component.VanChartUIListControlPane; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; @@ -186,6 +188,16 @@ public class VanChartHyperLinkPane extends VanChartUIListControlPane { } this.populate(nameObjects.toArray(new NameObject[nameObjects.size()])); + if (popupEditDialog instanceof HyperDialog) { + popupEditDialog.addWindowFocusListener(new WindowAdapter() { + @Override + public void windowLostFocus(WindowEvent e) { + if (needToHidePopupEditDialog()) { + popupEditDialog.setVisible(false); + } + } + }); + } doLayout(); } 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 6b452bd08d..d1198d6094 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 @@ -51,7 +51,6 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme public XElementCase(ElementCaseEditor widget, Dimension initSize) { super(widget, initSize); - widget.getElementCaseImage().adjustImageSize(initSize.width, initSize.height, false); } protected void initXCreatorProperties() { diff --git a/designer-form/src/main/java/com/fr/design/mainframe/widget/ui/FormSingleWidgetCardPane.java b/designer-form/src/main/java/com/fr/design/mainframe/widget/ui/FormSingleWidgetCardPane.java index 81e3a53641..98c539f278 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/widget/ui/FormSingleWidgetCardPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/widget/ui/FormSingleWidgetCardPane.java @@ -28,9 +28,11 @@ import com.fr.design.widget.Operator; import com.fr.design.widget.ui.designer.component.WidgetAbsoluteBoundPane; import com.fr.design.widget.ui.designer.component.WidgetBoundPane; import com.fr.design.widget.ui.designer.component.WidgetCardTagBoundPane; +import com.fr.form.main.WidgetUtil; import com.fr.form.ui.ChartEditor; import com.fr.form.ui.Widget; import com.fr.form.ui.container.WScaleLayout; +import com.fr.form.ui.container.WSortLayout; import com.fr.form.ui.container.WTitleLayout; import com.fr.form.ui.widget.CRBoundsWidget; import com.fr.general.ComparatorUtils; @@ -241,7 +243,12 @@ public class FormSingleWidgetCardPane extends FormWidgetCardPane { showNameInvalidDialog(Toolkit.i18nText("Fine-Design_Form_Chart_Widget_Rename_Failure")); return; } + String oldName = widget.getWidgetName(); widgetPropertyPane.update(widget); + Widget innerWidget = WidgetUtil.getInnerWidget(widget); + if (!StringUtils.equals(oldName, innerWidget.getWidgetName())) { + innerWidget.setMobileOldWidgetName(oldName); + } // 上面一行更新了组件 这里必须重新调用getWidgetName xCreator.resetCreatorName(widget.getWidgetName()); xCreator.resetVisible(widget.isVisible()); diff --git a/designer-realize/src/main/java/com/fr/design/condition/HyperlinkPane.java b/designer-realize/src/main/java/com/fr/design/condition/HyperlinkPane.java index 643ad78906..41e2ada868 100644 --- a/designer-realize/src/main/java/com/fr/design/condition/HyperlinkPane.java +++ b/designer-realize/src/main/java/com/fr/design/condition/HyperlinkPane.java @@ -9,12 +9,16 @@ import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.itextfield.UITextField; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.HyperlinkGroupPaneActionImpl; - -import com.fr.js.*; +import com.fr.js.EmailJavaScript; +import com.fr.js.JavaScript; +import com.fr.js.JavaScriptImpl; +import com.fr.js.NameJavaScriptGroup; +import com.fr.js.ReportletHyperlink; +import com.fr.js.WebHyperlink; import com.fr.report.cell.cellattr.highlight.HighlightAction; import com.fr.report.cell.cellattr.highlight.HyperlinkHighlightAction; -import javax.swing.*; +import javax.swing.SwingUtilities; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -47,6 +51,7 @@ public class HyperlinkPane extends ConditionAttrSingleConditionPane { Dimension size = new Dimension(43, 21); if (start instanceof UISpinner) { start.setPreferredSize(size); + ((UISpinner) start).addChangeListener(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + updateEndValue(); + } + }); } if (end instanceof UISpinner) { end.setPreferredSize(size); + ((UISpinner) end).addChangeListener(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + updateEndValue(); + } + }); } this.setLayout(FRGUIPaneFactory.createBoxFlowLayout()); this.add(start); @@ -63,9 +77,20 @@ public abstract class FreezeAndRepeatPane extends BasicBeanPane { * 给UISpinner添加Listener */ public void addListener(ChangeListener l) { + if (start instanceof UISpinner) { + ((UISpinner) start).addChangeListener(l); + } if (end instanceof UISpinner) { ((UISpinner) end).addChangeListener(l); } } + + private void updateEndValue() { + if (end instanceof UISpinner) { + ((UISpinner) end).setMinValue(((UISpinner) start).getValue()); + ((UISpinner) end).setValue(((UISpinner) end).getValue()); + + } + } } \ No newline at end of file diff --git a/designer-realize/src/main/java/com/fr/design/report/freeze/FreezePagePane.java b/designer-realize/src/main/java/com/fr/design/report/freeze/FreezePagePane.java index edfacb396e..f40e384f04 100644 --- a/designer-realize/src/main/java/com/fr/design/report/freeze/FreezePagePane.java +++ b/designer-realize/src/main/java/com/fr/design/report/freeze/FreezePagePane.java @@ -4,11 +4,13 @@ import com.fr.design.gui.ilable.UILabel; import javax.swing.SwingConstants; +import com.fr.design.i18n.Toolkit; import com.fr.stable.FT; import com.fr.stable.StableUtils; public class FreezePagePane extends FreezeAndRepeatPane { private boolean isNumber; + private boolean foot; public FreezePagePane(boolean isNumber) { this.isNumber = isNumber; @@ -17,6 +19,20 @@ public class FreezePagePane extends FreezeAndRepeatPane { super.initComponent(); } + public FreezePagePane(boolean isNumber, boolean foot) { + this.foot = foot; + this.isNumber = isNumber; + if (foot) { + start = new UILabel(isNumber ? com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Frozen_N.O.")+" 1" : com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Frozen_N.O.")+" A", SwingConstants.CENTER); + end = new UILabel(); + } else { + start = new UILabel(isNumber ? com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Frozen_N.O.")+" 1" : com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Frozen_N.O.")+" A", SwingConstants.CENTER); + end = new UILabel(isNumber ? " 1"+com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Row") : " A"+com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Column"), SwingConstants.CENTER); + } + + super.initComponent(); + } + @Override protected String title4PopupWindow() { return "FreezePage"; @@ -24,10 +40,18 @@ public class FreezePagePane extends FreezeAndRepeatPane { @Override public void populateBean(FT ob) { - if (isNumber) { - ((UILabel) end).setText(String.valueOf(ob.getTo() + 1)+com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Row")); + if (foot) { + if (isNumber) { + ((UILabel) start).setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Frozen_N.O.")+String.valueOf(ob.getFrom() + 1)); + } else { + ((UILabel) start).setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Frozen_N.O.")+StableUtils.convertIntToABC(ob.getFrom() + 1)); + } } else { - ((UILabel) end).setText(StableUtils.convertIntToABC(ob.getTo() + 1)+com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Column")); + if (isNumber) { + ((UILabel) end).setText(String.valueOf(ob.getTo() + 1)+com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Row")); + } else { + ((UILabel) end).setText(StableUtils.convertIntToABC(ob.getTo() + 1)+com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Column")); + } } } @@ -42,6 +66,11 @@ public class FreezePagePane extends FreezeAndRepeatPane { @Override public String getLabeshow() { - return isNumber ? com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Row_To") : com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Column_To"); + if (foot) { + return isNumber ? com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Last_Row") : com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Last_Col"); + } else { + return isNumber ? com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Row_To") : com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Column_To"); + } + } } diff --git a/designer-realize/src/main/java/com/fr/design/report/freeze/RepeatAndFreezeSettingPane.java b/designer-realize/src/main/java/com/fr/design/report/freeze/RepeatAndFreezeSettingPane.java index 17cf8566a9..0d5ca8de7f 100644 --- a/designer-realize/src/main/java/com/fr/design/report/freeze/RepeatAndFreezeSettingPane.java +++ b/designer-realize/src/main/java/com/fr/design/report/freeze/RepeatAndFreezeSettingPane.java @@ -1,11 +1,14 @@ package com.fr.design.report.freeze; import com.fr.base.FRContext; +import com.fr.design.constants.UIConstants; import com.fr.design.dialog.BasicPane; import com.fr.design.extra.WebViewDlgHelper; +import com.fr.design.gui.frpane.UITabbedPane; import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.gui.ilable.ActionLabel; import com.fr.design.gui.ilable.UILabel; +import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.page.ReportPageAttrProvider; @@ -29,6 +32,9 @@ public class RepeatAndFreezeSettingPane extends BasicPane { //边框高度 private static final int LABEL_HEIGHT = 45; + //tab + private UITabbedPane tabbedPane; + // 重复标题行 private RepeatRowPane repeatTitleRowPane; // 重复标题列 @@ -41,6 +47,10 @@ public class RepeatAndFreezeSettingPane extends BasicPane { private FreezePagePane freezePageRowPane; // 分页冻结列 private FreezePagePane freezePageColPane; + //分页冻结结尾行 + private FreezePagePane freezeFootRowPane; + //分页冻结结尾列 + private FreezePagePane freezeFootColPane; // 填报冻结行 private FreezeWriteRowPane freezeWriteRowPane; // 填报冻结列 @@ -53,12 +63,21 @@ public class RepeatAndFreezeSettingPane extends BasicPane { private UICheckBox useRepeatFinisCCheckBox; // 分页冻结 - private UICheckBox usePageFrozenCCheckBox; - private UICheckBox usePageFrozenRCheckBox; + private UICheckBox usePageHeadFrozenCCheckBox; + private UICheckBox usePageHeadFrozenRCheckBox; + private UICheckBox usePageFootFrozenCCheckBox; + private UICheckBox usePageFootFrozenRCheckBox; // 填报冻结 private UICheckBox useWriteFrozenCCheckBox; private UICheckBox useWriteFrozenRCheckBox; + private static final int REPEAT_AND_FROZEN_WIDTH = 600, REPEAT_AND_FROZEN_HEIGHT = 100; + + //标题区域 + private static final String REPEAT_AND_FROZEN_HEAD = Toolkit.i18nText("Fine-Design_Report_Repeat_Head"); + //结尾区域 + private static final String REPEAT_AND_FROZEN_FOOT = Toolkit.i18nText("Fine-Design_Report_Repeat_Foot"); + /** * 重复标题行 */ @@ -137,30 +156,41 @@ public class RepeatAndFreezeSettingPane extends BasicPane { * 分页冻结Pane */ private JPanel initPageFrozenPane() { - JPanel pagePanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); // 分页冻结 - UILabel pageLabel = new UILabel(getPageFrozenTitle()); - JPanel pageLabelPanel = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); - pageLabelPanel.add(pageLabel); - pagePanel.add(pageLabelPanel, BorderLayout.NORTH); JPanel pagecon = FRGUIPaneFactory.createNColumnGridInnerContainer_S_Pane(1); pagecon.setBorder(BorderFactory.createEmptyBorder(0, 20, 0, 0)); - pagePanel.add(pagecon, BorderLayout.CENTER); - UILabel warningx = new UILabel("(" + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Engine_Please_Set_Repeat_First") + ")"); - warningx.setForeground(Color.red); - pageLabelPanel.add(warningx); JPanel pageRowGridPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); - pageRowGridPane.add(this.usePageFrozenRCheckBox = new UICheckBox()); - pagecon.add(pageRowGridPane); + pageRowGridPane.add(this.usePageHeadFrozenRCheckBox = new UICheckBox()); // 显示行冻结信息的panel freezePageRowPane = new FreezePagePane(true); pageRowGridPane.add(freezePageRowPane); + pagecon.add(pageRowGridPane); addPageFrozenCol(pagecon); + addBorder(pagecon, REPEAT_AND_FROZEN_HEAD); + return pagecon; + } - return pagePanel; + private JPanel initPageFrozenFootPane() { + JPanel pageContentPanel = FRGUIPaneFactory.createNColumnGridInnerContainer_S_Pane(1); + pageContentPanel.setBorder(BorderFactory.createEmptyBorder(0, 20, 0, 0)); + // 行冻结 + JPanel pageRowPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); + pageRowPane.add(this.usePageFootFrozenRCheckBox = new UICheckBox()); + // 列冻结 + JPanel pageColPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); + pageColPane.add(this.usePageFootFrozenCCheckBox = new UICheckBox()); + pageContentPanel.add(pageRowPane); + freezeFootRowPane = new FreezePagePane(true, true); + pageRowPane.add(freezeFootRowPane); + pageContentPanel.add(pageColPane); + freezeFootColPane = new FreezePagePane(false, true); + pageColPane.add(freezeFootColPane); + addBorder(pageContentPanel, REPEAT_AND_FROZEN_FOOT); + return pageContentPanel; } + /** * 分页冻结列 */ @@ -168,7 +198,7 @@ public class RepeatAndFreezeSettingPane extends BasicPane { // 显示列冻结信息的panel freezePageColPane = new FreezePagePane(false); JPanel pageColGridPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); - pageColGridPane.add(this.usePageFrozenCCheckBox = new UICheckBox()); + pageColGridPane.add(this.usePageHeadFrozenCCheckBox = new UICheckBox()); pagecon.add(pageColGridPane); pageColGridPane.add(freezePageColPane); } @@ -176,7 +206,7 @@ public class RepeatAndFreezeSettingPane extends BasicPane { /** * 填报冻结Pane */ - private JPanel initWriteFrozenPane() { + protected JPanel initWriteFrozenPane() { JPanel writePanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); // 填报冻结 UILabel writeLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Face_Write_Frozen") + ":"); @@ -209,13 +239,18 @@ public class RepeatAndFreezeSettingPane extends BasicPane { JPanel cenrepeatPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); outrepeatPanel.add(cenrepeatPanel); JPanel outfreezePanel = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Engine_Frozen")); - this.add(outrepeatPanel, BorderLayout.NORTH); - this.add(outfreezePanel, BorderLayout.CENTER); - JPanel repeatPanel = FRGUIPaneFactory.createNColumnGridInnerContainer_S_Pane(1); - repeatPanel.setBorder(BorderFactory.createEmptyBorder(0, 20, 0, 0)); - JPanel freezePanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); - - outfreezePanel.add(freezePanel); + JPanel pagePanel = new JPanel(FRGUIPaneFactory.createBorderLayout()); + JPanel repeatHeadPanel = FRGUIPaneFactory.createNColumnGridInnerContainer_S_Pane(1); + JPanel repeatFootPanel = FRGUIPaneFactory.createNColumnGridInnerContainer_S_Pane(1); + tabbedPane = new UITabbedPane(); + + //添加上方的边界线 + addBorder(repeatHeadPanel, REPEAT_AND_FROZEN_HEAD); + addBorder(repeatFootPanel, REPEAT_AND_FROZEN_FOOT); + + pagePanel.add(outrepeatPanel, BorderLayout.NORTH); + pagePanel.add(outfreezePanel, BorderLayout.CENTER); + // 重复打印部分 // 重复打印标题的起始行 JPanel labelPanel = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); @@ -223,17 +258,24 @@ public class RepeatAndFreezeSettingPane extends BasicPane { UILabel warning = new UILabel("(" + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Engine_FreezeWarning") + ")"); warning.setForeground(Color.red); labelPanel.add(warning); - cenrepeatPanel.add(labelPanel, BorderLayout.NORTH); - cenrepeatPanel.add(repeatPanel, BorderLayout.CENTER); + cenrepeatPanel.add(repeatHeadPanel, BorderLayout.NORTH); + cenrepeatPanel.add(repeatFootPanel, BorderLayout.CENTER); - repeatPanel.add(initRowStartPane()); - addColStart(repeatPanel); - repeatPanel.add(initFootRowStarPane()); - addFootColStart(repeatPanel); + repeatHeadPanel.add(initRowStartPane()); + addColStart(repeatHeadPanel); + repeatFootPanel.add(initFootRowStarPane()); + addFootColStart(repeatFootPanel); - freezePanel.add(initPageFrozenPane(), BorderLayout.NORTH); - addWriteFrozen(freezePanel); + outfreezePanel.add(initPageFrozenPane(), BorderLayout.NORTH); + outfreezePanel.add(initPageFrozenFootPane(),BorderLayout.CENTER); + outfreezePanel.add(new UILabel(" "+ Toolkit.i18nText("Fine-Design_Report_Engine_Freeze_Tip") + ""),BorderLayout.SOUTH); + JPanel writePanel = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Engine_Frozen")); + addWriteFrozen(writePanel, pagePanel); + + if (tabbedPane.getTabSize() == 0) { + this.add(pagePanel); + } initPageRwoListener(); initPageColListener(); initWriteListener(); @@ -253,8 +295,11 @@ public class RepeatAndFreezeSettingPane extends BasicPane { private void initPageRwoListener() { repeatTitleRowPane.addListener(freezePageRowListener); - // 分页重复冻结行 - usePageFrozenRCheckBox.addChangeListener(usePageFrozenRListener); + repeatFinisRowPane.addListener(freezePageFootRowListener); + // 分页重复冻结标题行 + usePageHeadFrozenRCheckBox.addChangeListener(usePageFrozenRListener); + //分页重复冻结结尾行 + usePageFootFrozenRCheckBox.addChangeListener(freezePageFootRowListener); //重复标题行 useRepeatTitleRCheckBox.addChangeListener(useRepeatTitleRListener); //重复结尾行 @@ -263,16 +308,24 @@ public class RepeatAndFreezeSettingPane extends BasicPane { protected void initPageColListener() { repeatTitleColPane.addListener(freezePageColListener); - // 分页重复冻结列 - usePageFrozenCCheckBox.addChangeListener(usePageFrozenCListener); + repeatFinisColPane.addListener(freezePageFootColListener); + // 分页重复冻结标题列 + usePageHeadFrozenCCheckBox.addChangeListener(usePageFrozenCListener); + //分页重复冻结结尾列 + usePageFootFrozenCCheckBox.addChangeListener(freezePageFootColListener); //重复标题列 useRepeatTitleCCheckBox.addChangeListener(useRepeatTitleCListener); //重复结尾列 useRepeatFinisCCheckBox.addChangeListener(useRepeatFinisCListener); } - protected void addWriteFrozen(JPanel freezePanel) { + protected void addWriteFrozen(JPanel freezePanel, JPanel pagePanel) { freezePanel.add(initWriteFrozenPane(), BorderLayout.CENTER); + tabbedPane.addTab(Toolkit.i18nText("Fine-Design_Basic_M_Page_Preview"), pagePanel); + tabbedPane.addTab(Toolkit.i18nText("Fine-Design_Basic_M_Write_Preview"), freezePanel); + //去除对应的焦点虚线边框 + tabbedPane.setFocusable(false); + this.add(tabbedPane); } protected void addFootColStart(JPanel repeatPanel) { @@ -287,7 +340,14 @@ public class RepeatAndFreezeSettingPane extends BasicPane { @Override public void stateChanged(ChangeEvent e) { - repeatFinisColPane.setEnabled(useRepeatFinisCCheckBox.isSelected()); + boolean flag = useRepeatFinisCCheckBox.isSelected(); + repeatFinisColPane.setEnabled(flag); + if (!flag) { + usePageFootFrozenCCheckBox.setSelected(false); + usePageFootFrozenCCheckBox.setEnabled(false); + } else { + usePageFootFrozenCCheckBox.setEnabled(true); + } } }; @@ -296,8 +356,14 @@ public class RepeatAndFreezeSettingPane extends BasicPane { @Override public void stateChanged(ChangeEvent e) { - repeatFinisRowPane.setEnabled(useRepeatFinisRCheckBox.isSelected()); - + boolean flag = useRepeatFinisRCheckBox.isSelected(); + repeatFinisRowPane.setEnabled(flag); + if (!flag) { + usePageFootFrozenRCheckBox.setSelected(false); + usePageFootFrozenRCheckBox.setEnabled(false); + } else { + usePageFootFrozenRCheckBox.setEnabled(true); + } } }; @@ -308,10 +374,10 @@ public class RepeatAndFreezeSettingPane extends BasicPane { boolean flag = useRepeatTitleCCheckBox.isSelected(); repeatTitleColPane.setEnabled(flag); if (!flag) { - usePageFrozenCCheckBox.setSelected(false); - usePageFrozenCCheckBox.setEnabled(false); + usePageHeadFrozenCCheckBox.setSelected(false); + usePageHeadFrozenCCheckBox.setEnabled(false); } else { - usePageFrozenCCheckBox.setEnabled(true); + usePageHeadFrozenCCheckBox.setEnabled(true); } } }; @@ -323,10 +389,10 @@ public class RepeatAndFreezeSettingPane extends BasicPane { boolean flag = useRepeatTitleRCheckBox.isSelected(); repeatTitleRowPane.setEnabled(flag); if (!flag) { - usePageFrozenRCheckBox.setSelected(false); - usePageFrozenRCheckBox.setEnabled(false); + usePageHeadFrozenRCheckBox.setSelected(false); + usePageHeadFrozenRCheckBox.setEnabled(false); } else { - usePageFrozenRCheckBox.setEnabled(true); + usePageHeadFrozenRCheckBox.setEnabled(true); } } }; @@ -352,14 +418,14 @@ public class RepeatAndFreezeSettingPane extends BasicPane { ChangeListener usePageFrozenCListener = new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { - freezePageColPane.setEnabled(usePageFrozenCCheckBox.isSelected()); + freezePageColPane.setEnabled(usePageHeadFrozenCCheckBox.isSelected()); } }; ChangeListener usePageFrozenRListener = new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { - freezePageRowPane.setEnabled(usePageFrozenRCheckBox.isSelected()); + freezePageRowPane.setEnabled(usePageHeadFrozenRCheckBox.isSelected()); } }; @@ -383,6 +449,28 @@ public class RepeatAndFreezeSettingPane extends BasicPane { } }; + // 分页重复冻结列数据联动(结尾行) + ChangeListener freezePageFootRowListener = new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + FT ft = repeatFinisRowPane.updateBean(); + int to = ft.getTo(); + int maxFrom = Math.max(ft.getFrom(), -1); + freezeFootRowPane.populateBean(new FT(maxFrom, Math.max(maxFrom, to))); + } + }; + + // 分页重复冻结列数据联动(结尾列) + ChangeListener freezePageFootColListener = new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + FT ft = repeatFinisColPane.updateBean(); + int to = ft.getTo(); + int maxFrom = Math.max(ft.getFrom(), -1); + freezeFootColPane.populateBean(new FT(maxFrom, Math.max(maxFrom, to))); + } + }; + /** * 窗口标题 * @@ -407,7 +495,7 @@ public class RepeatAndFreezeSettingPane extends BasicPane { if (isDefalut(ft)) { this.repeatTitleRowPane.populateBean(defaultFT); this.repeatTitleRowPane.setEnabled(false); - usePageFrozenRCheckBox.setEnabled(false); + usePageHeadFrozenRCheckBox.setEnabled(false); } else { this.repeatTitleRowPane.populateBean(ft); useRepeatTitleRCheckBox.setSelected(true); @@ -418,12 +506,14 @@ public class RepeatAndFreezeSettingPane extends BasicPane { this.repeatFinisRowPane.populateBean(defaultFT); this.repeatFinisRowPane.setEnabled(false); useRepeatFinisRCheckBox.setSelected(false); + usePageFootFrozenRCheckBox.setEnabled(false); } else { this.repeatFinisRowPane.populateBean(ft); useRepeatFinisRCheckBox.setSelected(true); } - this.usePageFrozenRCheckBox.setSelected(attribute.isUsePageFrozenRow()); + this.usePageHeadFrozenRCheckBox.setSelected(attribute.isUsePageFrozenRow()); + this.usePageFootFrozenRCheckBox.setSelected(attribute.isUsePageFootRowFrozen()); this.freezePageRowPane.setEnabled(attribute.isUsePageFrozenRow()); } @@ -432,7 +522,7 @@ public class RepeatAndFreezeSettingPane extends BasicPane { if (isDefalut(ft)) { this.repeatTitleColPane.populateBean(defaultFT); this.repeatTitleColPane.setEnabled(false); - usePageFrozenCCheckBox.setEnabled(false); + usePageHeadFrozenCCheckBox.setEnabled(false); } else { this.repeatTitleColPane.populateBean(ft); useRepeatTitleCCheckBox.setSelected(true); @@ -443,12 +533,14 @@ public class RepeatAndFreezeSettingPane extends BasicPane { this.repeatFinisColPane.populateBean(defaultFT); this.repeatFinisColPane.setEnabled(false); useRepeatFinisCCheckBox.setSelected(false); + usePageFootFrozenCCheckBox.setEnabled(false); } else { this.repeatFinisColPane.populateBean(ft); useRepeatFinisCCheckBox.setSelected(true); } - this.usePageFrozenCCheckBox.setSelected(attribute.isUsePageFrozenColumn()); + this.usePageHeadFrozenCCheckBox.setSelected(attribute.isUsePageFrozenColumn()); + this.usePageFootFrozenCCheckBox.setSelected(attribute.isUsePageFootColFrozen()); this.freezePageColPane.setEnabled(attribute.isUsePageFrozenColumn()); } @@ -491,9 +583,64 @@ public class RepeatAndFreezeSettingPane extends BasicPane { updateRowPane(attribute); updateColPane(attribute); + //单独将重复、分页、填报处理一下,原先的判断逻辑比较混乱,抽出来方便判断 + updateUseAttr(attribute); + return attribute; } + private void updateUseAttr(ReportPageAttrProvider attribute) { + attribute.setUseRepeat(isUseRepeat()); + attribute.setUsePageFrozen(isUsePageFrozen()); + attribute.setUseWriteFrozen(isUseWriteFrozen()); + } + + /** + * 是否使用填报冻结 + * + * @return 使用则返回true + */ + private boolean isUseWriteFrozen() { + return this.useWriteFrozenCCheckBox.isSelected() + || this.useWriteFrozenRCheckBox.isSelected(); + } + + + /** + * 是否使用分页冻结 + * + * @return 使用则返回true + */ + private boolean isUsePageFrozen() { + return this.usePageHeadFrozenRCheckBox.isSelected() + || this.usePageHeadFrozenCCheckBox.isSelected() + || this.usePageFootFrozenRCheckBox.isSelected() + || this.usePageFootFrozenCCheckBox.isSelected(); + } + + /** + * 是否使用重复 + * + * @return 使用返回true + */ + private boolean isUseRepeat() { + return this.useRepeatTitleRCheckBox.isSelected() + || this.useRepeatFinisRCheckBox.isSelected() + || this.useRepeatTitleCCheckBox.isSelected() + || this.useRepeatFinisCCheckBox.isSelected(); + } + + /** + * 给内部的重复与冻结选项添加指定的边框 + * + * @param jPanel 重复或冻结对应的界面 + * @param title 边框的文字 + */ + public static void addBorder(JPanel jPanel, String title) { + jPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createMatteBorder(1,0,0,0, UIConstants.TITLED_BORDER_COLOR), title)); + jPanel.setPreferredSize(new Dimension(REPEAT_AND_FROZEN_WIDTH,REPEAT_AND_FROZEN_HEIGHT)); + } + protected void updateRowPane(ReportPageAttrProvider attribute) { // 重复标题行 int titleFrom = valid(useRepeatTitleRCheckBox, this.repeatTitleRowPane.updateBean().getFrom()); @@ -506,7 +653,10 @@ public class RepeatAndFreezeSettingPane extends BasicPane { attribute.setRepeatFooterRowFrom(finishFrom); attribute.setRepeatFooterRowTo(finishTo); - attribute.setUsePageFrozenRow(this.usePageFrozenRCheckBox.isSelected()); + attribute.setUsePageFrozenRow(this.usePageHeadFrozenRCheckBox.isSelected()); + attribute.setUsePageFootFrozen(this.usePageFootFrozenRCheckBox.isSelected() || this.usePageFootFrozenCCheckBox.isSelected()); + + attribute.setUsePageFootRowFrozen(this.usePageFootFrozenRCheckBox.isSelected()); } private int valid(UICheckBox checkBox, int num) { @@ -524,7 +674,10 @@ public class RepeatAndFreezeSettingPane extends BasicPane { attribute.setRepeatFooterColumnFrom(finishFrom); attribute.setRepeatFooterColumnTo(finishTo); - attribute.setUsePageFrozenColumn(this.usePageFrozenCCheckBox.isSelected()); + attribute.setUsePageFrozenColumn(this.usePageHeadFrozenCCheckBox.isSelected()); + attribute.setUsePageFootFrozen(this.usePageFootFrozenRCheckBox.isSelected() || this.usePageFootFrozenCCheckBox.isSelected()); + + attribute.setUsePageFootColFrozen(this.usePageFootFrozenCCheckBox.isSelected()); } /** diff --git a/designer-realize/src/main/java/com/fr/start/MainDesigner.java b/designer-realize/src/main/java/com/fr/start/MainDesigner.java index 02116dc41c..d90ceb0556 100644 --- a/designer-realize/src/main/java/com/fr/start/MainDesigner.java +++ b/designer-realize/src/main/java/com/fr/start/MainDesigner.java @@ -368,7 +368,7 @@ public class MainDesigner extends BaseDesigner { @Override protected void upButtonClickEvent() { JTemplate jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); - if (jt == null) { + if (jt == null || jt.isSaving()) { return; } WebPreviewUtils.preview(jt);