From 8856e44221d57233d895592fe6d09559d5682464 Mon Sep 17 00:00:00 2001 From: "Henry.Wang" Date: Tue, 14 Jun 2022 11:36:43 +0800 Subject: [PATCH] =?UTF-8?q?REPORT-71331=20=E5=9C=A8=E9=80=89=E6=8B=A9?= =?UTF-8?q?=E8=A1=A8=E5=A4=B4=E5=8C=BA=E5=9F=9F=E6=97=B6=E9=A2=84=E8=A7=88?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF=EF=BC=8C=E9=A2=84=E8=A7=88=E6=95=88=E6=9E=9C?= =?UTF-8?q?=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/mainframe/JTemplate.java | 19 ++++++++- .../mainframe/JTemplateActionListener.java | 12 ++++-- .../design/sort/common/SortColumnRowPane.java | 39 ++++++++++++++++--- 3 files changed, 60 insertions(+), 10 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java b/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java index aacbd2fbf..d6ceb3417 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java @@ -1014,7 +1014,7 @@ public abstract class JTemplate> // 过滤掉本地文件 boolean localFile = getEditingFILE() instanceof FileFILE; boolean inconsistent = !localFile && getEditingFILE().exists() - && !WorkContext.getCurrent().get(LockInfoOperator.class).isConsistentLock(getEditingFILE().getPath()); + && !WorkContext.getCurrent().get(LockInfoOperator.class).isConsistentLock(getEditingFILE().getPath()); if (inconsistent) { throw new InconsistentLockException(); } @@ -1112,6 +1112,20 @@ public abstract class JTemplate> this.listenerList.remove(JTemplateActionListener.class, l); } + /** + * 模板保存前触发 + */ + public void fireJTemplateSaveBefore() { + Object[] listeners = listenerList.getListenerList(); + + for (int i = listeners.length - 2; i >= 0; i -= 2) { + if (listeners[i] == JTemplateActionListener.class) { + ((JTemplateActionListener) listeners[i + 1]).templateSaveBefore(this); + } + } + this.repaint(30); + } + /** * 触发模板关闭 */ @@ -1622,6 +1636,7 @@ public abstract class JTemplate> } private CallbackSaveWorker save(boolean showLoc) { + fireJTemplateSaveBefore(); FILE editingFILE = this.getEditingFILE(); // carl:editingFILE没有,当然不存了,虽然不会有这种情况 if (editingFILE == null) { @@ -1917,7 +1932,7 @@ public abstract class JTemplate> } - public void setDesignerUIMode(){ + public void setDesignerUIMode() { DesignerUIModeConfig.getInstance().setAbsoluteMeasureUIMode(); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/JTemplateActionListener.java b/designer-base/src/main/java/com/fr/design/mainframe/JTemplateActionListener.java index 5e1787369..ecfd52dbe 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/JTemplateActionListener.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/JTemplateActionListener.java @@ -4,9 +4,15 @@ import java.util.EventListener; public interface JTemplateActionListener extends EventListener { - public void templateOpened(JTemplate jt); + default void templateOpened(JTemplate jt) { + } - public void templateSaved(JTemplate jt); + default void templateSaved(JTemplate jt) { + } - public void templateClosed(JTemplate jt); + default void templateClosed(JTemplate jt) { + } + + default void templateSaveBefore(JTemplate jt) { + } } \ No newline at end of file diff --git a/designer-realize/src/main/java/com/fr/design/sort/common/SortColumnRowPane.java b/designer-realize/src/main/java/com/fr/design/sort/common/SortColumnRowPane.java index e9ebbd882..19b8ad50a 100644 --- a/designer-realize/src/main/java/com/fr/design/sort/common/SortColumnRowPane.java +++ b/designer-realize/src/main/java/com/fr/design/sort/common/SortColumnRowPane.java @@ -3,13 +3,14 @@ package com.fr.design.sort.common; import com.fr.base.Style; import com.fr.base.background.ColorBackground; import com.fr.base.svg.IconUtils; -import com.fr.design.designer.TargetComponent; import com.fr.design.event.UIObserver; import com.fr.design.event.UIObserverListener; import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ilable.UILabel; import com.fr.design.mainframe.ElementCasePane; +import com.fr.design.mainframe.JTemplate; +import com.fr.design.mainframe.JTemplateActionListener; import com.fr.design.selection.SelectionEvent; import com.fr.design.selection.SelectionListener; import com.fr.design.sort.header.HeaderAreaPane; @@ -18,10 +19,6 @@ import com.fr.grid.selection.Selection; import com.fr.log.FineLoggerFactory; import com.fr.report.cell.DefaultTemplateCellElement; import com.fr.report.cell.TemplateCellElement; -import com.fr.report.cell.cellattr.CellExpandAttr; -import com.fr.report.cell.cellattr.core.group.DSColumn; -import com.fr.report.core.sort.common.CellSortable; -import com.fr.report.core.sort.header.SortHeader; import com.fr.report.elementcase.TemplateElementCase; import com.fr.stable.ColumnRow; import com.fr.stable.EssentialUtils; @@ -157,6 +154,7 @@ public class SortColumnRowPane extends JPanel implements UIObserver { class SelectActionListener extends MouseAdapter { SortColumnRowPane columnRowPane; ColumnRow oldColumnRow; + JTemplateActionListener jTemplateActionListener; Map disableHeaderCellsStyleMap = new HashMap<>(); java.util.List tempHeaderCells = new ArrayList<>(); @@ -178,13 +176,44 @@ public class SortColumnRowPane extends JPanel implements UIObserver { @Override public void selectionChanged(SelectionEvent e) { completeSelectHeader(elementCasePane); + removeJTemplateActionListener(); } }; elementCasePane.addSelectionChangeListener(gridSelectionChangeListener); + this.addJTemplateActionListener(); isAlreadyAddListener = true; } } + + private void addJTemplateActionListener() { + JTemplate jTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); + if (jTemplate != null) { + removeJTemplateActionListener(); + jTemplateActionListener = new JTemplateActionListener() { + @Override + public void templateSaveBefore(JTemplate jt) { + ElementCasePane elementCasePane = SortUtils.getCurrentElementCase(); + if (elementCasePane != null) { + recoverSelectHeader(elementCasePane); + } + removeJTemplateActionListener(); + } + }; + jTemplate.addJTemplateActionListener(jTemplateActionListener); + } + } + + private void removeJTemplateActionListener() { + JTemplate jTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); + if (jTemplate != null) { + if (jTemplateActionListener != null) { + jTemplate.removeJTemplateActionListener(jTemplateActionListener); + } + } + } + + private void prepareSelectHeader(ElementCasePane elementCasePane) { ashDisableHeaderCellsStyle(elementCasePane.getEditingElementCase()); oldSelection = (CellSelection) elementCasePane.getSelection();