From e9b1ad1f909bd10c0b09588f48674ff2ca4f696d Mon Sep 17 00:00:00 2001 From: Starryi Date: Mon, 12 Apr 2021 14:40:37 +0800 Subject: [PATCH 01/10] =?UTF-8?q?REPORT-50809=20frm=E6=A8=A1=E7=89=88?= =?UTF-8?q?=E4=B8=8Ecpt=E6=A8=A1=E7=89=88=E5=9C=A8=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E5=86=85=E9=A2=84=E8=A7=88=E5=9B=BE=E6=A0=87=E5=A4=A7?= =?UTF-8?q?=E5=B0=8F=E4=B8=8D=E4=B8=80=E8=87=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 CPT和FRM文件的预览按钮图标使用了不同的图片。 PagePreview类规定了CPT的分页预览图标为com/fr/design/images/buttonicon/pageb24.png,而 FormPreview类规定了FRM的预览图标为com/fr/design/images/buttonicon/run24.png. 这两个图片大小都为32x32,且图形内容大致相同,但是pageb24图形周围存在透明像素, 所以可见的图形大小小于run24.png 【改动思路】 将run24.png的内容替换为pageb24.png --- .../com/fr/design/images/buttonicon/run24.png | Bin 942 -> 736 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/designer-base/src/main/resources/com/fr/design/images/buttonicon/run24.png b/designer-base/src/main/resources/com/fr/design/images/buttonicon/run24.png index 8ebe92439eba1ae9355d11b8cc1477dcd782cd0f..67127219d8ecf3cdab46e61f8afbbfbbc3819008 100644 GIT binary patch delta 700 zcmV;t0z>_-2jB&eFn8j4^ynE-KbKZS-h6il+hoLoK=m9U$;*G?D7c5k*mVZV_n^CJ~Al?jef#kEYB8Wm8hw_5FFYLHxzSeJp(v#r?1QRkK9 zl5sjO;k0i>UVm$W4L<@c@p4XA2Q+sh3NRHGQM7Ca7~}iVWq`H|b7ltC^f>nK>VW;A z4L_sfn3&BX(R~6%u8USejp;H_Jp;jD5czx_Znt-hbhy8Q{eC}sdi!wm`{A{m1~S~U zR4RpJGFcLLQ)xXO559c*2u9$k`RX8bw6!iI-M?Po)_;{V)jW#zN}+%o58q+2_oN(e z+J$5*laoo+K&#mdt}w5bR>Td@fX~Ol(WQNIf+&Gybx}i`N#XVHLXv7<7e!G-PO?y{ z*N1f3B>w|k#swzu87|kc^=zw=z}xpo^&D5tlL^Be$hX_@>ccn0W~N9U8UF}>#cXT} zTy|QHX@3F32Fhgf_H(%RW)d$)1DK3P!1H-bM8bIbYy=}?VO;i}LSN!JI^(akv@1Eo zpP_5}gGs;JjE}b{u zw!0!;&PNYiM`)=715O9L{Q_8iNl`{FbPXX{pfw9K3=%dkuHJnNOJ*8^^N4EM#u!+Y io3o!+75<<2*MUF3y2bkI9sFndyEFL%yQxSa?|1^5g7IhPYb_%n$oE|N^+n@jkBoBy>6h!byM#R@bW zBXB6mH=P4hG=FNk+#9((UVUTsNadSRu>wkW0Gfi@VF6TX&_TMjt2a^<1;~*R)^UW6 zJw~AAEeMSk4Eu4r-B^vz$8ySPP@xHOO9ggC0iJrGqoV_@y{#xOFGq24C3HIW&e<_H zHwTl+g!cAYR8&+TbbqO04=4%{$YnuqZ!bDKJJHzKh=17FSb^JMFsz9xDk?%lLj#N_ zgIRx}AVv%n1@L=7MLD4FYr(nm)vyuj;5I!3M{qQs*Qe>XJfEpN^HiHV_8c}|D zRRMQo28KsQ`?$%%0|!%{?6A@oXsBc=!w!yhp@@>$5@0WDhQ@n*n;)p(-^@0Q6c z0SplWTiO{sY`G2F($6gx(ag2FibwbFfZ3A_T7MfU@(Q6>0=T6PvJ~?=BW~7Tz~HMs zFpTgZ#Z~7<{YAK3Zj|IEB7W%V`d%T-yNM)!N_ToR)3SR&_-Gr{zh)2>pUmzDfiTZZ zzzq$Sla3>Fx*Nv4biC+)j&MDR@q=|>h+v41W{PjYrc}|y8I=R>t6rJI(#i}}38%xP&BFUtfbI|FVe1%U?ptYSuu97~s_B!4X}snVgHGgQ75* zU4u_k7U-jNC@V}y#QP=*h1WeGVc5n%g(bjJP>Z%F-LTu2p|OriqIXpQmyOm&z+89* iPiJGXkW(!Y@EaMR2b1K<1?T_(002ovP6b4+LSTZpQ=#kt From 5f0d39ecb9c8560aa879639088ba682a655c0ef6 Mon Sep 17 00:00:00 2001 From: Yvan Date: Tue, 13 Apr 2021 17:16:59 +0800 Subject: [PATCH 02/10] =?UTF-8?q?REPORT-49686=20=E5=86=B3=E7=AD=96?= =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E8=87=AA=E9=80=82=E5=BA=94=E5=B8=83=E5=B1=80?= =?UTF-8?q?=EF=BC=8C=E6=B7=BB=E5=8A=A0=E5=8F=82=E6=95=B0=E9=9D=A2=E6=9D=BF?= =?UTF-8?q?=E5=90=8E=EF=BC=8C=E6=97=A0=E6=B3=95=E9=80=9A=E8=BF=87=E5=8F=B3?= =?UTF-8?q?=E4=BE=A7=E8=AE=BE=E7=BD=AE=E9=9D=A2=E6=9D=BF=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E7=BB=9D=E5=AF=B9=E7=94=BB=E5=B8=83=E5=9D=97=E7=9A=84=E5=A4=A7?= =?UTF-8?q?=E5=B0=8F=20=E3=80=90=E9=97=AE=E9=A2=98=E5=8E=9F=E5=9B=A0?= =?UTF-8?q?=E3=80=91=E8=BF=99=E9=87=8C=E7=BB=9D=E5=AF=B9=E7=94=BB=E5=B8=83?= =?UTF-8?q?=E5=9D=97=E7=9A=84=E9=AB=98=E5=BA=A6=E8=B0=83=E6=95=B4=E8=A6=81?= =?UTF-8?q?=E5=88=86=E4=B8=BA=E4=B8=A4=E7=A7=8D=E6=96=B9=E5=BC=8F=EF=BC=8C?= =?UTF-8?q?=E4=B8=80=E7=A7=8D=E6=98=AF=E6=8B=96=E6=8B=BD=E6=94=B9=E5=8F=98?= =?UTF-8?q?=EF=BC=8C=E5=8F=A6=E4=B8=80=E7=A7=8D=E6=98=AF=E5=9C=A8=E5=8F=B3?= =?UTF-8?q?=E4=BE=A7=E9=9D=A2=E6=9D=BF=E4=B8=AD=E6=94=B9=E5=8F=98=E9=AB=98?= =?UTF-8?q?=E5=BA=A6=E6=95=B0=E5=80=BC=EF=BC=8C=E9=97=AE=E9=A2=98=E7=9A=84?= =?UTF-8?q?=E5=8E=9F=E5=9B=A0=E6=98=AF=E6=AD=A4=E5=89=8DREPORT-7588?= =?UTF-8?q?=E4=B8=AD=EF=BC=8C=E6=8B=96=E6=8B=BD=E6=97=B6=E4=BC=9A=E8=B5=B0?= =?UTF-8?q?=E5=88=B0FormSelection#fixCreator()=EF=BC=8C=E8=BF=99=E9=87=8C?= =?UTF-8?q?=E9=9D=A2=E4=B8=BA=E7=BB=9D=E5=AF=B9=E7=94=BB=E5=B8=83=E5=9D=97?= =?UTF-8?q?=E5=81=9A=E7=89=B9=E6=AE=8A=E5=A4=84=E7=90=86=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E6=BC=8F=E7=AE=97=E4=BA=86=E5=8F=82=E6=95=B0=E9=9D=A2=E6=9D=BF?= =?UTF-8?q?=E7=9A=84=E9=AB=98=E5=BA=A6=EF=BC=8C=E7=84=B6=E5=90=8E=E5=9C=A8?= =?UTF-8?q?REPORT-34739=E4=B8=AD=EF=BC=8CFRFitLayoutAdapter#fix()=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E4=B8=AD=E5=A4=84=E7=90=86=E4=BA=86=E4=B8=80=E4=B8=8B?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E9=9D=A2=E6=9D=BF=E9=80=A0=E6=88=90=E7=9A=84?= =?UTF-8?q?=E5=81=8F=E7=A7=BB=EF=BC=8C=E6=89=80=E4=BB=A5=E6=8B=96=E6=8B=BD?= =?UTF-8?q?=E7=9A=84=E9=80=BB=E8=BE=91=E9=83=BD=E6=AD=A3=E5=B8=B8=EF=BC=9B?= =?UTF-8?q?=E4=BD=86=E6=98=AF=E5=A6=82=E6=9E=9C=E5=9C=A8=E5=8F=B3=E4=BE=A7?= =?UTF-8?q?=E9=9D=A2=E6=9D=BF=E4=B8=AD=E6=94=B9=E5=8F=98=E9=AB=98=E5=BA=A6?= =?UTF-8?q?=E6=97=B6=EF=BC=8C=E4=BC=9A=E7=9B=B4=E6=8E=A5=E8=B5=B0=E5=88=B0?= =?UTF-8?q?FRFitLayoutAdapter#fix()=E4=B8=AD=EF=BC=8C=E6=AD=A4=E6=97=B6?= =?UTF-8?q?=E6=98=AF=E6=B2=A1=E6=9C=89=E6=BC=8F=E7=AE=97=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E9=9D=A2=E6=9D=BF=E9=AB=98=E5=BA=A6=E7=9A=84=EF=BC=8C=E5=9B=A0?= =?UTF-8?q?=E6=AD=A4=E7=BB=8F=E8=BF=87=E5=A4=84=E7=90=86=E4=B9=8B=E5=90=8E?= =?UTF-8?q?=EF=BC=8C=E5=8F=8D=E8=80=8C=E7=BB=84=E4=BB=B6=E7=9A=84backupBou?= =?UTF-8?q?nd=E4=BC=9A=E5=A4=9A=E4=BA=86=E4=B8=AA=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E9=9D=A2=E6=9D=BF=E9=AB=98=E5=BA=A6=EF=BC=8C=E8=BF=99=E6=A0=B7?= =?UTF-8?q?=E4=BC=9A=E9=80=A0=E6=88=90=E6=AF=8F=E6=AC=A1=E6=94=B9=E5=8F=98?= =?UTF-8?q?=E9=83=BD=E5=8A=A0=E4=B8=8A=E8=BF=99=E4=B8=AA=E9=AB=98=E5=BA=A6?= =?UTF-8?q?=EF=BC=8C=E5=B0=B1=E5=87=BA=E7=8E=B0=E4=BA=86bug=E7=8E=B0?= =?UTF-8?q?=E8=B1=A1=20=E3=80=90=E6=94=B9=E5=8A=A8=E6=80=9D=E8=B7=AF?= =?UTF-8?q?=E3=80=91=E6=8A=8A=E5=88=A4=E6=96=AD=E5=8F=82=E6=95=B0=E9=9D=A2?= =?UTF-8?q?=E6=9D=BF=E6=98=AF=E5=90=A6=E6=BC=8F=E7=AE=97=E7=9A=84=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E6=94=BE=E5=88=B0FormSelection#fixCreator()=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adapters/layout/FRFitLayoutAdapter.java | 10 +--------- .../com/fr/design/mainframe/FormSelection.java | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java b/designer-form/src/main/java/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java index c0eb39297..22d74d774 100644 --- a/designer-form/src/main/java/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java +++ b/designer-form/src/main/java/com/fr/design/designer/beans/adapters/layout/FRFitLayoutAdapter.java @@ -347,15 +347,7 @@ public class FRFitLayoutAdapter extends FRBodyLayoutAdapter { //拖拽组件原大小、位置 Rectangle backupBound = creator.getBackupBound(); backupBound.x -= container.getX(); - // REPORT-34739 对绝对画布块的backupBound.y的调整还需要考虑一下参数面板块的高度造成的偏移 - int paraHeight = 0; - if (creator.acceptType(XWAbsoluteLayout.class)) { - JTemplate jTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); - if (jTemplate instanceof JForm) { - paraHeight = ((JForm) jTemplate).getFormDesign().getParaHeight(); - } - } - backupBound.y -= (container.getY() - paraHeight); + backupBound.y -= container.getY(); //当前拖拽组件的位置 int x = creator.getX(); int y = creator.getY(); diff --git a/designer-form/src/main/java/com/fr/design/mainframe/FormSelection.java b/designer-form/src/main/java/com/fr/design/mainframe/FormSelection.java index cbebbcba1..97228209a 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/FormSelection.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/FormSelection.java @@ -12,6 +12,7 @@ import com.fr.design.designer.creator.XWFitLayout; import com.fr.design.designer.creator.XWParameterLayout; import com.fr.design.designer.creator.cardlayout.XWCardTagLayout; import com.fr.design.designer.creator.cardlayout.XWTabFitLayout; +import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.utils.ComponentUtils; import com.fr.design.utils.gui.LayoutUtils; import com.fr.form.ui.Widget; @@ -270,7 +271,9 @@ public class FormSelection { LayoutAdapter layoutAdapter = AdapterBus.searchLayoutAdapter(designer, creator); if (layoutAdapter != null) { if (creator.acceptType(XWAbsoluteLayout.class) && recs.size() > i) { - creator.setBackupBound(recs.get(i)); + Rectangle rectangle = recs.get(i); + check4ParaPane(rectangle); + creator.setBackupBound(rectangle); } else { creator.setBackupBound(backupBounds); } @@ -280,6 +283,19 @@ public class FormSelection { } } + /** + * 检查下有没有参数面板,如果存在,处理下参数面板造成的偏移量 + * @param rectangle + */ + private void check4ParaPane(Rectangle rectangle) { + int paraHeight = 0; + JTemplate jTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); + if (jTemplate instanceof JForm) { + paraHeight = ((JForm) jTemplate).getFormDesign().getParaHeight(); + } + rectangle.y += paraHeight; + } + private void removeCreatorFromContainer(XCreator creator) { XLayoutContainer parent = XCreatorUtils.getParentXLayoutContainer(creator); if (parent == null) { From 1698c22c07eaf28cfcbce16cdc18de04b3213ff0 Mon Sep 17 00:00:00 2001 From: "Bruce.Deng" Date: Wed, 14 Apr 2021 09:39:47 +0800 Subject: [PATCH 03/10] =?UTF-8?q?REPORT-49067=20=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E7=BC=BA=E5=A4=B1=E5=AD=97=E4=BD=93=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/DesignerFrame.java | 16 +- .../com/fr/design/mainframe/JTemplate.java | 7 +- .../design/mainframe/check/CheckButton.java | 173 ++++++++++++++++++ .../mainframe/check/CheckFontInfoDialog.java | 139 ++++++++++++++ .../com/fr/design/images/buttonicon/check.png | Bin 0 -> 386 bytes .../com/fr/design/images/correct.png | Bin 0 -> 785 bytes .../resources/com/fr/design/images/error.png | Bin 0 -> 768 bytes .../com/fr/design/images/waiting.png | Bin 0 -> 1011 bytes .../fr/design/images/warnings/warning32.png | Bin 0 -> 942 bytes 9 files changed, 333 insertions(+), 2 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/check/CheckButton.java create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/check/CheckFontInfoDialog.java create mode 100644 designer-base/src/main/resources/com/fr/design/images/buttonicon/check.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/correct.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/error.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/waiting.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/warnings/warning32.png diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java index b826931b6..eec902c4c 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java @@ -84,13 +84,13 @@ import javax.swing.UIManager; import javax.swing.WindowConstants; import javax.swing.border.MatteBorder; import java.awt.BorderLayout; +import java.awt.Component; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Graphics; import java.awt.Insets; import java.awt.Point; import java.awt.Rectangle; -import java.awt.Component; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.dnd.DnDConstants; @@ -701,6 +701,8 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta } } } + //添加检测按钮 + addCheckButton(); //添加分享按钮 addShareButton(); //添加插件中的按钮 @@ -724,6 +726,18 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta } } + private void addCheckButton() { + JTemplate jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); + if (jt == null) { + return; + } + combineUp.addSeparator(new Dimension(2, 16)); + UIButton[] checkButtons = jt.createCheckButton(); + for (UIButton checkButton : checkButtons) { + combineUp.add(checkButton); + } + } + private void addShareButton() { JTemplate jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); 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 caeb32f49..0ff728580 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 @@ -38,6 +38,7 @@ import com.fr.design.gui.itree.filetree.TemplateFileTree; import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.chart.info.ChartInfoCollector; +import com.fr.design.mainframe.check.CheckButton; import com.fr.design.mainframe.template.info.TemplateInfoCollector; import com.fr.design.mainframe.template.info.TemplateProcessInfo; import com.fr.design.mainframe.template.info.TimeConsumeTimer; @@ -82,11 +83,11 @@ import javax.swing.JComponent; import javax.swing.JOptionPane; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.undo.UndoManager; +import java.awt.BorderLayout; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Set; -import java.awt.BorderLayout; /** * 报表设计和表单设计的编辑区域(设计器编辑的IO文件) @@ -1360,6 +1361,10 @@ public abstract class JTemplate> return uiButtons; } + public UIButton[] createCheckButton() { + return new UIButton[]{new CheckButton()}; + } + /** * 由于老版本的模板没有模板ID,当勾选使用参数模板时候,就加一个模板ID attr * diff --git a/designer-base/src/main/java/com/fr/design/mainframe/check/CheckButton.java b/designer-base/src/main/java/com/fr/design/mainframe/check/CheckButton.java new file mode 100644 index 000000000..f42d18d40 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/check/CheckButton.java @@ -0,0 +1,173 @@ +package com.fr.design.mainframe.check; + +import com.fr.base.BaseUtils; +import com.fr.design.dialog.FineJOptionPane; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.JTemplate; +import com.fr.file.FILE; +import com.fr.file.FileNodeFILE; +import com.fr.log.FineLoggerFactory; +import com.fr.rpc.ExceptionHandler; +import com.fr.rpc.RPCInvokerExceptionInfo; +import com.fr.workspace.WorkContext; +import com.fr.workspace.server.check.TemplateChecker; + +import javax.swing.BoxLayout; +import javax.swing.JDialog; +import javax.swing.JPanel; +import javax.swing.SwingUtilities; +import javax.swing.SwingWorker; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.util.Set; +import java.util.concurrent.ExecutionException; + +import static javax.swing.JOptionPane.OK_CANCEL_OPTION; +import static javax.swing.JOptionPane.OK_OPTION; +import static javax.swing.JOptionPane.WARNING_MESSAGE; + +public class CheckButton extends UIButton { + + private UILabel message; + private UIButton okButton; + private JDialog dialog; + private UILabel uiLabel; + + public CheckButton() { + this.setIcon(BaseUtils.readIcon("/com/fr/design/images/buttonicon/check.png")); + this.setToolTipText(Toolkit.i18nText("Fine_Designer_Check_Font")); + this.set4ToolbarButton(); + this.addActionListener(checkListener); + } + + private ActionListener checkListener = new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + + // Try check + final SwingWorker, Void> checkThread = new SwingWorker, Void>() { + @Override + protected Set doInBackground() throws Exception { + // 返回校验结果 + return check(DesignerContext.getDesignerFrame().getSelectedJTemplate()); + } + + @Override + protected void done() { + try { + Set set = get(); + if (set == null) { + return; + } + if(set.isEmpty()) { + okButton.setEnabled(true); + uiLabel.setIcon(BaseUtils.readIcon("com/fr/design/images/correct.png")); + message.setText("" + Toolkit.i18nText("Fine_Designer_Check_Font_Success") + ""); + } else { + dialog.dispose(); + StringBuilder textBuilder = new StringBuilder(); + textBuilder.append(Toolkit.i18nText("Fine_Designer_Check_Font_Missing_Font")).append("\n"); + for (String font : set) { + textBuilder.append(font).append("\n"); + } + String areaText = textBuilder.toString(); + CheckFontInfoDialog dialog = new CheckFontInfoDialog(DesignerContext.getDesignerFrame(), areaText); + dialog.setVisible(true); + } + } catch (InterruptedException | ExecutionException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } + }; + + JTemplate jtemplate = DesignerContext.getDesignerFrame().getSelectedJTemplate(); + if (jtemplate == null || jtemplate.getEditingFILE() == null) { + return; + } + FILE currentTemplate = jtemplate.getEditingFILE(); + if(currentTemplate instanceof FileNodeFILE){ + checkThread.execute(); + }else { + //模板不在报表环境下,提示保存 + int selVal = FineJOptionPane.showConfirmDialog( + DesignerContext.getDesignerFrame(), + Toolkit.i18nText("Fine-Design_Basic_Web_Preview_Message"), + Toolkit.i18nText("Fine_Designer_Check_Font"), + OK_CANCEL_OPTION, + WARNING_MESSAGE); + + if (OK_OPTION == selVal) { + //保存成功才执行检测 + if (jtemplate.saveAsTemplate2Env()) { + checkThread.execute(); + } + } + } + initDialogPane(); + okButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + dialog.dispose(); + } + }); + + dialog.addWindowListener(new WindowAdapter() { + public void windowClosed(WindowEvent e) { + checkThread.cancel(true); + } + }); + + dialog.setVisible(true); + dialog.dispose(); + } + }; + + private Set check(JTemplate jtemplate) { + String path = jtemplate.getEditingFILE().getEnvFullName(); + Set fontSet = WorkContext.getCurrent().get(TemplateChecker.class, new ExceptionHandler() { + + @Override + public Void callHandler(RPCInvokerExceptionInfo rpcInvokerExceptionInfo) { + uiLabel.setIcon(BaseUtils.readIcon("com/fr/design/images/error.png")); + message.setText("" + Toolkit.i18nText("Fine_Designer_Check_Font_Upgrade") + ""); + okButton.setEnabled(true); + return null; + } + }).checkFont(path); + return fontSet; + } + + private void initDialogPane() { + message = new UILabel(); + message.setText(Toolkit.i18nText("Fine-Designer_Check_Font_Checking") + "..."); + uiLabel = new UILabel(); + okButton = new UIButton(Toolkit.i18nText("Fine-Design_Report_OK")); + okButton.setEnabled(false); + dialog = new JDialog(); + dialog.setTitle(Toolkit.i18nText("Fine_Designer_Check_Font")); + dialog.setModal(true); + dialog.setSize(new Dimension(268, 118)); + JPanel jp = new JPanel(); + JPanel upPane = new JPanel(); + JPanel downPane = new JPanel(); + uiLabel = new UILabel(BaseUtils.readIcon("com/fr/design/images/waiting.png")); + upPane.setLayout(new FlowLayout(FlowLayout.LEFT, 10, 10)); + upPane.add(uiLabel); + upPane.add(message); + downPane.setLayout(new FlowLayout(FlowLayout.CENTER, 6, 0)); + downPane.add(okButton); + jp.setLayout(new BoxLayout(jp, BoxLayout.Y_AXIS)); + jp.add(upPane); + jp.add(downPane); + dialog.add(jp); + dialog.setResizable(false); + dialog.setLocationRelativeTo(SwingUtilities.getWindowAncestor(this)); + } +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/check/CheckFontInfoDialog.java b/designer-base/src/main/java/com/fr/design/mainframe/check/CheckFontInfoDialog.java new file mode 100644 index 000000000..837d48b28 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/check/CheckFontInfoDialog.java @@ -0,0 +1,139 @@ +package com.fr.design.mainframe.check; + +import com.fr.design.dialog.link.MessageWithLink; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.i18n.Toolkit; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.general.CloudCenter; +import com.fr.general.GeneralContext; +import com.fr.general.IOUtils; + +import javax.swing.BorderFactory; +import javax.swing.JDialog; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTextArea; +import javax.swing.UIManager; +import java.awt.BorderLayout; +import java.awt.Cursor; +import java.awt.Dimension; +import java.awt.Frame; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.util.Locale; + +/** + * 字体缺失检测的具体结果对话框 + * + */ +public class CheckFontInfoDialog extends JDialog implements ActionListener { + + private JPanel topPanel; + private JPanel upInTopPanel; + private JPanel downInTopPanel; + private JPanel hiddenPanel; + private JPanel bottomPanel; + + private UILabel imageLabel; + private UILabel directUiLabel; + private UILabel detailLabel; + + public CheckFontInfoDialog(Frame parent, String areaText) { + super(parent,true); + //提示信息 + JPanel imagePanel = new JPanel(); + imageLabel = new UILabel(IOUtils.readIcon("com/fr/design/images/warnings/warning32.png")); + imagePanel.add(imageLabel); + + JPanel messagePanel = FRGUIPaneFactory.createVerticalFlowLayout_S_Pane(true); + MessageWithLink linkMessage = new MessageWithLink(Toolkit.i18nText("Fine_Designer_Check_Font_Message"), + Toolkit.i18nText("Fine_Designer_Check_Font_Install_Font"), + CloudCenter.getInstance().acquireUrlByKind("help.install.font", "https://help.fanruan.com/finereport/doc-view-3999.html")); + linkMessage.setPreferredSize(new Dimension(380, 31)); + messagePanel.add(linkMessage); + + // 查看详情按钮 + directUiLabel = new UILabel(); + directUiLabel.setIcon(UIManager.getIcon("OptionPane.narrow.right")); + detailLabel = new UILabel(); + detailLabel.setText(Toolkit.i18nText("Fine_Designer_Look_Detail")); + + upInTopPanel = FRGUIPaneFactory.createBorderLayout_L_Pane(); + upInTopPanel.add(imageLabel, BorderLayout.WEST); + upInTopPanel.add(messagePanel, BorderLayout.CENTER); + + downInTopPanel = FRGUIPaneFactory.createBorderLayout_L_Pane(); + downInTopPanel.add(directUiLabel, BorderLayout.WEST); + downInTopPanel.add(detailLabel, BorderLayout.CENTER); + + topPanel = FRGUIPaneFactory.createVerticalFlowLayout_S_Pane(true); + topPanel.add(upInTopPanel, BorderLayout.NORTH); + topPanel.add(downInTopPanel, BorderLayout.SOUTH); + + //中间的详情展示(可隐藏) + hiddenPanel = FRGUIPaneFactory.createBorderLayout_L_Pane(); + hiddenPanel.setBorder(BorderFactory.createEmptyBorder(0,12,0,12)); + JScrollPane scrollPane = new JScrollPane(); + JTextArea checkArea = new JTextArea(areaText); + scrollPane.setViewportView(checkArea); + scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); + checkArea.setEnabled(false); + hiddenPanel.add(scrollPane); + hiddenPanel.setVisible(false); + + downInTopPanel.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + if (hiddenPanel.isVisible()) { + hiddenPanel.setVisible(false); + CheckFontInfoDialog.this.setSize(new Dimension(380, 185)); + detailLabel.setText(Toolkit.i18nText("Fine_Designer_Look_Detail")); + directUiLabel.setIcon(UIManager.getIcon("OptionPane.narrow.right")); + } else { + CheckFontInfoDialog.this.setSize(new Dimension(380, 280)); + hiddenPanel.setVisible(true); + detailLabel.setText(Toolkit.i18nText("Fine_Designer_Hide_Detail")); + directUiLabel.setIcon(UIManager.getIcon("OptionPane.narrow.down")); + } + } + + @Override + public void mouseEntered(MouseEvent e) { + detailLabel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + } + + @Override + public void mouseExited(MouseEvent e) { + detailLabel.setCursor(Cursor.getDefaultCursor()); + } + }); + + //底部的按钮面板 + UIButton okButton = new UIButton(Toolkit.i18nText("Fine-Design_Report_OK")); + JPanel buttonPanel = FRGUIPaneFactory.createBorderLayout_L_Pane(); + buttonPanel.setBorder(BorderFactory.createEmptyBorder(0,10,10,10)); + buttonPanel.add(okButton, BorderLayout.EAST); + okButton.addActionListener(this); + bottomPanel = FRGUIPaneFactory.createBorderLayout_L_Pane(); + bottomPanel.add(buttonPanel); + + this.setTitle(Toolkit.i18nText("Fine_Designer_Check_Font")); + this.setResizable(false); + + this.add(topPanel, BorderLayout.NORTH); + this.add(hiddenPanel, BorderLayout.CENTER); + this.add(bottomPanel, BorderLayout.SOUTH); + this.setSize(new Dimension(GeneralContext.getLocale().equals(Locale.US)? 400:380, 185)); + + GUICoreUtils.centerWindow(this); + } + + @Override + public void actionPerformed(ActionEvent e) { + this.dispose(); + } +} diff --git a/designer-base/src/main/resources/com/fr/design/images/buttonicon/check.png b/designer-base/src/main/resources/com/fr/design/images/buttonicon/check.png new file mode 100644 index 0000000000000000000000000000000000000000..36c4238a288e7bf5a1336e54a728f898b3bbb197 GIT binary patch literal 386 zcmV-|0e$|7P)FUn!XycSU0!EZqEZJ-?t4KQ-GIIfuX0oY*H0NjFTwbsT=!Ph4mf%nd!3r@6C z!$?%Z+#*o>yVsqKD*n|(Gq%{>NY zqA>6>K+PXeU_J!YS&}45*Uc7)b{Kpa$x&QzG literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/images/correct.png b/designer-base/src/main/resources/com/fr/design/images/correct.png new file mode 100644 index 0000000000000000000000000000000000000000..90f74f7a93b6190568e17fdd1f50d580e230322a GIT binary patch literal 785 zcmV+s1Md8ZP)eg96ue-AJx$?*HUpr{)7l2%4b4wNeu z%p?VLcZT8dxR)es9&QOBBjzAUMR>hD!l8BT1<-XJ@tI!;hk_8&A~y9#YGokbk#JHL z+YTtDGBVj5db>L@`#Xhz-)Hm!iF8&Z^5|F}Y}pmt0I7@!j%5*Cy9T5Y<)VVF4ILoa zPbZQ9boBK^K+|+f5S9RvTr`A8C`!r5o@H5Rnud5HiH$v7C|6X7xdK?00mreZR_6^U zGgyW}$if**09CDmbUq1&ror=`+KYvB7H$`Za#@Aj?J}Ot(#*RwjLM%dQJF>#GQLv@ z_-GyjTm-v3Te0821Adw}-etQ4i+wFBC1k~%kuhK+fF-Q#rc8+j$`2EdAyT9<7)Pi zZSlW9)Q$_$5#yji;^Z!nGzG_!S1fIBN~R;Ds`P-k`)S@Wz>~rl?&M$C&VIP>2ntmh z_hv_pGa99zPY*u7=@{Uga2sFBlePdZ_n*L--b1+d<1uc;pBZO#3S+6k*pOp@gEJQ~ zXVLX0nJIoZ@e-G&9@YbAg=j3~7+~n}-gWlhsr-#yJM4cYxIQ z!ser>&(b1ulP@DgV;znG7WY8CAWZbCD&w%-MfEG15~_`ie<430YHY{U7)Pc?ZidHbZCq P00000NkvXXu0mjfA?{=j literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/images/error.png b/designer-base/src/main/resources/com/fr/design/images/error.png new file mode 100644 index 0000000000000000000000000000000000000000..89601dfb13cc1eca9b46ff255be52404329d7af7 GIT binary patch literal 768 zcmV+b1ONPqP)>wmS%m@J!s9hL%jI=`+ zkf4AB;vs>Us2aB=^pQACow#ulUvyoZDs71pS4tRqhQyJt{eSmA=iCzx07hQErR=*= z5$ij`*;>}c7QmJRO?TkOgwoJ1*xM7S?1KLuU`flu=ktE;`726m5yleE&w>e1wnvmnoy<_=vj`huiHczj$sT1z8f2&le!el67sT#$75v7#)TD{vBLX3W%`_tV!7pi^BVHKyWldJf2M-^{m5S)K&ijq zIlxL+Bp`_*+QT7BOdKA9G(1#u4H)MyV9$-~&X3~7j0RC8@VMO|V`FgLzE!ihz0fr2 zx!u$8$5tD&4@a{=)8ILKX4Q5=ARRmav6$jjWNNa{F@Wb}4BXPvI=gLAiYW1bV*u~5qkw5{Sb*V? z7nV4Kn2nv-a1BRkv3n{mItJLR0~~0wTZso912nw`n%)Iy_Bmh;tEQfWe`~wpvtXm1 yVoo$<8djY;ng(HX1j6_@_=%t3ve}yc5BvdIrr9u~MbMi70000M4-XxpL zqpAW;Q?V@DgQ}Y<1Rbj=vnqgTTDYC>n(+Au2K5EU)3X@@ehtGg2?YG!eZ4dx%_1`W zE0O##VKap)%Qzy88S1ATeUL)eQ%E)9`C4-cZq>C^u8_&*yo_BXgbF`9uJ=U}55L#=D!!R7plO0o zFi2?T44q@|F9r`p(RRIzh(C%Fj3Fy&?8&p3e}4%^X5l$05+$5KmS@2+7F7{C{(UD9UH4HQIsk^dKitga@z7xML;zu)5GZ+(**k!LiPU z0haW@o;MKvN2m<#2dlIqg3_`Rb@!{7!*6d+4=kAie;dJrr?Ar_%wKp5?CM$KnFyc+ zyOD)dZR%^s_(rGT);*v^ccVY@1=6vwul|HnoWK`OAa*>9G%^^cpIe05j6L9bTeb=P zZD_k*!WSPv(L0fqSsZs0{__>g=N14qWfRuDHT^7Dsl!|)nsOT6X2z;rZ56!lfnfGL hS}BRoF0Sc&;9q-O{V<0rcHjU2002ovPDHLkV1oEO;voP4 literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/images/warnings/warning32.png b/designer-base/src/main/resources/com/fr/design/images/warnings/warning32.png new file mode 100644 index 0000000000000000000000000000000000000000..4d2a189b6eba699ce052ec50c27625148f3fb5f8 GIT binary patch literal 942 zcmV;f15x~mP)fKNK>p-v1rJH z@j*neD!!Ri-Pxigp@^-zv$kn4M57p#D%gO8qAiMX=g*Pdi8aaYWM(!Sa$o11@B7_z z&$)L9bG&Gd{V^keY%d0lnh|%>K*`X`%z)G8G$E&w#1 z&kS&rqGgP*5TOB>K~_r5m3+k{GeV#Ie!7te90npZfR&7GWTKyu^ zFQdez+d&`#SHRL^KQidUAff=DP&DJCAhCe}%u~^|5OnVO*a2escK}JQ2itJ^cTVuj z%?g^8xN+VO!WV#dKv?x^KY;p)Vp7W)(7YF2|0n;#?s<2L7hjeKj1{y4&U6sI0G6(9 zV&KqJ5oui)sPZ)z;Njn}&wgCs!>~6;v`asf48T7(&bPDjFaxg?0IWF-T2SKx+`j?) z{O3h{_?{fGtLdHJ|MP;FwgRTEb^zE~ELp_%K`eAHLud3)IL4R7J%~D#_{Fb71B|7j zRT7J<0Ol11SouA~qGlIhmm>uVBC6PHhHK@RV zyCGST*kyp;n6`VXKZUexb3Vkreh575_XhD5IcvO08(>e=EdaMo>T!-kM0G8yRBJUPN$+}zA6A1OQ|(7^B{vFfxH*gLcH$Ye$K5f;Qmmc zG=Q@LJp#Yi@K)!A*ik9i6@z-t;Ky4U+GQ Date: Wed, 14 Apr 2021 17:10:18 +0800 Subject: [PATCH 04/10] =?UTF-8?q?REPORT-50096=20=E5=A4=84=E7=90=86?= =?UTF-8?q?=E4=B8=8B=E5=88=87=E6=8D=A2=E6=95=B0=E6=8D=AE=E8=BF=9E=E6=8E=A5?= =?UTF-8?q?=E5=9C=BA=E6=99=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/data/datapane/connect/JDBCDefPane.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/connect/JDBCDefPane.java b/designer-base/src/main/java/com/fr/design/data/datapane/connect/JDBCDefPane.java index 94a612b66..c47a0d75c 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/connect/JDBCDefPane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/connect/JDBCDefPane.java @@ -100,6 +100,7 @@ public class JDBCDefPane extends JPanel { private IntegerEditor DBCP_MINEVICTABLEIDLETIMEMILLIS = new IntegerEditor(); private JDBCDatabaseConnection jdbcDatabase; + private boolean needRefresh = true; public JDBCDefPane() { this.setBorder(UITitledBorder.createBorderWithTitle("JDBC" + ":")); @@ -201,11 +202,11 @@ public class JDBCDefPane extends JPanel { } public void populate(JDBCDatabaseConnection jdbcDatabase) { + needRefresh = false; if (jdbcDatabase == null) { jdbcDatabase = new JDBCDatabaseConnection(); } this.jdbcDatabase = jdbcDatabase; - this.dbtypeComboBox.removeActionListener(dbtypeActionListener); if (ComparatorUtils.equals(jdbcDatabase.getDriver(), "sun.jdbc.odbc.JdbcOdbcDriver") && jdbcDatabase.getURL().startsWith("jdbc:odbc:Driver={Microsoft")) { this.dbtypeComboBox.setSelectedItem("Access"); @@ -230,7 +231,6 @@ public class JDBCDefPane extends JPanel { this.dbtypeComboBox.setSelectedItem(OTHER_DB); } } - this.dbtypeComboBox.addActionListener(dbtypeActionListener); this.driverComboBox.setSelectedItem(jdbcDatabase.getDriver()); this.urlTextField.setText(jdbcDatabase.getURL()); this.userNameTextField.setText(jdbcDatabase.getUser()); @@ -254,6 +254,7 @@ public class JDBCDefPane extends JPanel { this.DBCP_MINEVICTABLEIDLETIMEMILLIS.setValue(dbcpAttr.getMinEvictableIdleTimeMillis() / TIME_MULTIPLE); this.DBCP_NUMTESTSPEREVICTIONRUN.setValue(dbcpAttr.getNumTestsPerEvictionRun()); this.DBCP_TIMEBETWEENEVICTIONRUNSMILLS.setValue(dbcpAttr.getTimeBetweenEvictionRunsMillis()); + needRefresh = true; } public JDBCDatabaseConnection update() { @@ -306,7 +307,9 @@ public class JDBCDefPane extends JPanel { } } // 更改数据库类型后 数据库名称置空和之前逻辑保持一致 - jdbcDatabase.setDatabase(StringUtils.EMPTY); + if (needRefresh) { + jdbcDatabase.setDatabase(StringUtils.EMPTY); + } } }; From 887bd33a2f16e79ab432786d65a851b3a75e7114 Mon Sep 17 00:00:00 2001 From: lucian Date: Thu, 15 Apr 2021 09:58:18 +0800 Subject: [PATCH 05/10] =?UTF-8?q?REPORT-50908=20=E5=A1=AB=E6=8A=A5-?= =?UTF-8?q?=E5=A1=AB=E6=8A=A5=E5=B1=9E=E6=80=A7=E8=AE=BE=E7=BD=AE-?= =?UTF-8?q?=E5=A1=AB=E6=8A=A5=E5=B1=9E=E6=80=A7=E4=B8=AD=E5=AF=B9=E8=A1=A8?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E5=AE=9A=E4=BD=8D=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/data/datapane/ChoosePane.java | 21 ++++-- .../design/gui/icombobox/FRTreeComboBox.java | 13 +++- .../icombobox/SearchPreTaskTreeComboBox.java | 73 +++++++++++++++++++ 3 files changed, 100 insertions(+), 7 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/gui/icombobox/SearchPreTaskTreeComboBox.java diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/ChoosePane.java b/designer-base/src/main/java/com/fr/design/data/datapane/ChoosePane.java index fce7832ac..38801ec90 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/ChoosePane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/ChoosePane.java @@ -1,6 +1,7 @@ package com.fr.design.data.datapane; import com.fr.base.TableData; +import com.fr.concurrent.NamedThreadFactory; import com.fr.data.core.DataCoreUtils; import com.fr.data.core.db.DBUtils; import com.fr.data.core.db.TableProcedure; @@ -17,7 +18,7 @@ import com.fr.design.data.datapane.preview.PreviewLabel.Previewable; import com.fr.design.data.datapane.preview.PreviewTablePane; import com.fr.design.data.tabledata.Prepare4DataSourceChange; import com.fr.design.dialog.FineJOptionPane; -import com.fr.design.gui.icombobox.FRTreeComboBox; +import com.fr.design.gui.icombobox.SearchPreTaskTreeComboBox; import com.fr.design.gui.icombobox.FilterableComboBoxModel; import com.fr.design.gui.icombobox.UIComboBox; import com.fr.design.gui.icombobox.UIComboBoxEditor; @@ -59,6 +60,10 @@ import java.util.Collection; import java.util.Enumeration; import java.util.List; import java.util.Set; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.FutureTask; /** * @author zhou @@ -80,21 +85,25 @@ public class ChoosePane extends BasicBeanPane implements Refresha /** * 表名 */ - protected FRTreeComboBox tableNameComboBox; + protected SearchPreTaskTreeComboBox tableNameComboBox; private SwingWorker populateWorker; + private ExecutorService service = Executors.newSingleThreadExecutor(new NamedThreadFactory("ChoosePaneThread")); private PopupMenuListener popupMenuListener = new PopupMenuListener() { @Override public void popupMenuWillBecomeVisible(PopupMenuEvent e) { - new Thread() { + FutureTask task = new FutureTask(new Callable() { @Override - public void run() { + public Object call() { calculateTableDataNames(); + return null; } - }.start(); + }); + service.submit(task); + tableNameComboBox.setPreSearchTask(task); } @Override @@ -158,7 +167,7 @@ public class ChoosePane extends BasicBeanPane implements Refresha schemaBox = new StringUIComboBox(); schemaBox.setEditor(new ComboBoxEditor()); - tableNameComboBox = new FRTreeComboBox(new JTree(new DefaultMutableTreeNode()), tableNameTreeRenderer, false); + tableNameComboBox = new SearchPreTaskTreeComboBox(new JTree(new DefaultMutableTreeNode()), tableNameTreeRenderer, false); tableNameComboBox.setEditable(true); tableNameComboBox.setRenderer(listCellRenderer); registerDSChangeListener(); diff --git a/designer-base/src/main/java/com/fr/design/gui/icombobox/FRTreeComboBox.java b/designer-base/src/main/java/com/fr/design/gui/icombobox/FRTreeComboBox.java index a7a913335..f0c60d2e8 100644 --- a/designer-base/src/main/java/com/fr/design/gui/icombobox/FRTreeComboBox.java +++ b/designer-base/src/main/java/com/fr/design/gui/icombobox/FRTreeComboBox.java @@ -597,6 +597,10 @@ public class FRTreeComboBox extends UIComboBox { return this.item; } + public boolean isSetting() { + return setting; + } + public void insertUpdate(DocumentEvent e) { changeHandler(); } @@ -614,11 +618,18 @@ public class FRTreeComboBox extends UIComboBox { return; } setPopupVisible(true); + search(); + } + + /** + * 模糊搜索,选中首个匹配项 + */ + protected void search() { this.item = textField.getText(); TreeNode root = (TreeNode) tree.getModel().getRoot(); TreePath parent = new TreePath(root); TreeNode node = (TreeNode) parent.getLastPathComponent(); - dealSamePath(parent,node,textField); + dealSamePath(parent, node, textField); this.getEditorComponent().requestFocus(); } diff --git a/designer-base/src/main/java/com/fr/design/gui/icombobox/SearchPreTaskTreeComboBox.java b/designer-base/src/main/java/com/fr/design/gui/icombobox/SearchPreTaskTreeComboBox.java new file mode 100644 index 000000000..9e453471e --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/gui/icombobox/SearchPreTaskTreeComboBox.java @@ -0,0 +1,73 @@ +package com.fr.design.gui.icombobox; + +import com.fr.log.FineLoggerFactory; + +import javax.swing.JTree; +import javax.swing.SwingWorker; +import javax.swing.tree.TreeCellRenderer; +import java.util.concurrent.FutureTask; + +/** + * 模糊搜索前需执行完前置任务的TreeComboBox + * @author Lucian.Chen + * @version 10.0 + * Created by Lucian.Chen on 2021/4/14 + */ +public class SearchPreTaskTreeComboBox extends FRTreeComboBox { + + /** + * 模糊搜索前任务 + */ + private FutureTask preSearchTask; + + public SearchPreTaskTreeComboBox(JTree tree, TreeCellRenderer renderer, boolean editable) { + super(tree, renderer, editable); + } + + public FutureTask getPreSearchTask() { + return preSearchTask; + } + + public void setPreSearchTask(FutureTask preSearchTask) { + this.preSearchTask = preSearchTask; + } + + protected UIComboBoxEditor createEditor() { + return new SearchPreTaskComboBoxEditor(this); + } + + private class SearchPreTaskComboBoxEditor extends FrTreeSearchComboBoxEditor { + + public SearchPreTaskComboBoxEditor(FRTreeComboBox comboBox) { + super(comboBox); + } + + protected void changeHandler() { + if (isSetting()) { + return; + } + setPopupVisible(true); + // 模糊搜索异步 + new SwingWorker() { + @Override + protected Void doInBackground() { + FutureTask task = getPreSearchTask(); + try { + // 确保模糊搜索前任务执行完成后,再进行模糊搜索 + if (task != null) { + task.get(); + } + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + if (task != null) { + // 任务执行后置空,否则会被别的操作重复触发 + setPreSearchTask(null); + } + search(); + return null; + } + }.execute(); + } + } +} From 0fa461fb72fcf8ce054353ea4ee3f49eb9b23baa Mon Sep 17 00:00:00 2001 From: xiqiu Date: Thu, 15 Apr 2021 16:21:36 +0800 Subject: [PATCH 06/10] =?UTF-8?q?REPORT-51103=20=E5=8A=A0=E4=B8=8A?= =?UTF-8?q?=E9=81=97=E6=BC=8F=E7=9A=84mysql=E5=8F=A6=E4=B8=80=E7=A7=8D?= =?UTF-8?q?=E9=A9=B1=E5=8A=A8=EF=BC=9B=E4=BC=98=E5=8C=96=E5=B1=95=E7=A4=BA?= =?UTF-8?q?=E6=95=88=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/data/datapane/connect/DatabaseConnectionPane.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/connect/DatabaseConnectionPane.java b/designer-base/src/main/java/com/fr/design/data/datapane/connect/DatabaseConnectionPane.java index 16c992b0f..0a6b10d07 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/connect/DatabaseConnectionPane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/connect/DatabaseConnectionPane.java @@ -332,10 +332,10 @@ public abstract class DatabaseConnectionPane Date: Thu, 15 Apr 2021 20:46:39 +0800 Subject: [PATCH 07/10] =?UTF-8?q?REPORT-51103=20=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E7=95=8C=E9=9D=A2=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/datapane/connect/DatabaseConnectionPane.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/connect/DatabaseConnectionPane.java b/designer-base/src/main/java/com/fr/design/data/datapane/connect/DatabaseConnectionPane.java index 743b2b286..3e1e1f531 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/connect/DatabaseConnectionPane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/connect/DatabaseConnectionPane.java @@ -99,7 +99,7 @@ public abstract class DatabaseConnectionPane Date: Thu, 15 Apr 2021 23:15:43 +0800 Subject: [PATCH 08/10] =?UTF-8?q?REPORT-51103=20=20=E6=94=B9=E4=B8=AA?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=96=B9=E4=BE=BF=E5=AE=9A=E4=BD=8D=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/gui/UILookAndFeel.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/gui/UILookAndFeel.java b/designer-base/src/main/java/com/fr/design/gui/UILookAndFeel.java index 90bc60a29..b93953a99 100644 --- a/designer-base/src/main/java/com/fr/design/gui/UILookAndFeel.java +++ b/designer-base/src/main/java/com/fr/design/gui/UILookAndFeel.java @@ -205,7 +205,7 @@ public class UILookAndFeel extends MetalLookAndFeel { "com/fr/design/images/lookandfeel/" + fileName, UILookAndFeel.class); if (url == null) { - FineLoggerFactory.getLogger().error("Icon directory could not be resolved."); + FineLoggerFactory.getLogger().error(fileName + " :Icon directory could not be resolved."); return null; } } From 85cfe2f9a1895f26a5ad9faf890beea726c4d399 Mon Sep 17 00:00:00 2001 From: lucian Date: Fri, 16 Apr 2021 09:52:03 +0800 Subject: [PATCH 09/10] =?UTF-8?q?REPORT-50908=20=E5=A1=AB=E6=8A=A5-?= =?UTF-8?q?=E5=A1=AB=E6=8A=A5=E5=B1=9E=E6=80=A7=E8=AE=BE=E7=BD=AE-?= =?UTF-8?q?=E5=A1=AB=E6=8A=A5=E5=B1=9E=E6=80=A7=E4=B8=AD=E5=AF=B9=E8=A1=A8?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E5=AE=9A=E4=BD=8D=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/data/datapane/ChoosePane.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/ChoosePane.java b/designer-base/src/main/java/com/fr/design/data/datapane/ChoosePane.java index 38801ec90..6460cadb9 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/ChoosePane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/ChoosePane.java @@ -89,7 +89,7 @@ public class ChoosePane extends BasicBeanPane implements Refresha private SwingWorker populateWorker; - private ExecutorService service = Executors.newSingleThreadExecutor(new NamedThreadFactory("ChoosePaneThread")); + private static final ExecutorService SERVICE = Executors.newSingleThreadExecutor(new NamedThreadFactory("ChoosePaneThread")); private PopupMenuListener popupMenuListener = new PopupMenuListener() { @@ -102,7 +102,7 @@ public class ChoosePane extends BasicBeanPane implements Refresha return null; } }); - service.submit(task); + SERVICE.submit(task); tableNameComboBox.setPreSearchTask(task); } From af08d02b120c1912802df0f9d5f3c0ed7ff99548 Mon Sep 17 00:00:00 2001 From: xiqiu Date: Fri, 16 Apr 2021 13:55:43 +0800 Subject: [PATCH 10/10] =?UTF-8?q?REPORT-51103=20=20=E6=94=B9=E4=B8=8B?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=90=8D=E7=9A=84=E5=A4=A7=E5=B0=8F=E5=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/gui/UILookAndFeel.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/gui/UILookAndFeel.java b/designer-base/src/main/java/com/fr/design/gui/UILookAndFeel.java index b93953a99..4dbbc1af3 100644 --- a/designer-base/src/main/java/com/fr/design/gui/UILookAndFeel.java +++ b/designer-base/src/main/java/com/fr/design/gui/UILookAndFeel.java @@ -173,8 +173,8 @@ public class UILookAndFeel extends MetalLookAndFeel { table.put("FileChooser.upFolderIcon", loadIcon("ParentDirectoryIcon.png", this)); table.put("OptionPane.errorIcon", loadIcon("Information_Icon_Error_32x32.png", this)); table.put("OptionPane.informationIcon", loadIcon("Information_Icon_OK_32x32.png", this)); - table.put("OptionPane.narrow.right", loadIcon("icon_narrow_right_16x16.png", this)); - table.put("OptionPane.narrow.down", loadIcon("icon_narrow_down_16x16.png", this)); + table.put("OptionPane.narrow.right", loadIcon("Icon_Narrow_Right_16x16.png", this)); + table.put("OptionPane.narrow.down", loadIcon("Icon_Narrow_Down_16x16.png", this)); table.put("OptionPane.warningIcon", loadIcon("WarningIcon.png", this)); table.put("OptionPane.questionIcon", loadIcon("QuestionIcon.png", this)); table.put("ScrollPane.border", new UIScrollPaneBorder());