From eb4fbebd72f7fef3db22c6bb388fae730e19ba70 Mon Sep 17 00:00:00 2001 From: kerry Date: Fri, 19 Nov 2021 16:20:25 +0800 Subject: [PATCH 1/3] REPORT-62926 && REPORT-62920 && REPORT-62967 && REPORT-62964 --- .../share/ui/block/PreviewWidgetBlock.java | 2 +- .../online/OnlineWidgetPopupPreviewPane.java | 34 +------------ .../share/ui/online/PreviewImagePane.java | 41 +++++++++++++++ .../share/ui/online/embed/EmbedPane.java | 50 ++++++++++++++++--- .../embed/OnlineEmbedFilterShowPane.java | 2 +- .../share/ui/online/embed/PreviewDialog.java | 15 +++--- 6 files changed, 95 insertions(+), 49 deletions(-) create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/PreviewImagePane.java diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/PreviewWidgetBlock.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/PreviewWidgetBlock.java index 425e3e1ca..e77ea8112 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/PreviewWidgetBlock.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/block/PreviewWidgetBlock.java @@ -237,7 +237,7 @@ public abstract class PreviewWidgetBlock extends JPanel implements MouseListe lastStallTime = System.currentTimeMillis(); Dimension dimension = getCoverDimension(); Rectangle containerRec = new Rectangle(0, 0, dimension.width, dimension.height); - if (!isRightClickPopupMenuVisible()) { + if (!isRightClickPopupMenuVisible() && !FirstDragAnimateStateManager.getInstance().animating()) { if (containerRec.contains(e.getX(), e.getY())) { this.showPreviewPane(); } else { diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineWidgetPopupPreviewPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineWidgetPopupPreviewPane.java index ab1793519..d7311db3e 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineWidgetPopupPreviewPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineWidgetPopupPreviewPane.java @@ -23,11 +23,8 @@ import javax.swing.plaf.basic.BasicLabelUI; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; -import java.awt.Graphics; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; -import java.awt.Image; -import java.awt.Toolkit; /** * @author Starryi @@ -35,7 +32,7 @@ import java.awt.Toolkit; * Created by Starryi on 2021/9/14 */ public class OnlineWidgetPopupPreviewPane extends AbstractWidgetPopupPreviewPane { - private static final int POPUP_WIDTH = 412; + public static final int POPUP_WIDTH = 412; private static final int POPUP_TOP_HEIGHT = 28; private static final int POPUP_BOTTOM_HEIGHT = 54; @@ -221,33 +218,4 @@ public class OnlineWidgetPopupPreviewPane extends AbstractWidgetPopupPreviewPane compatibleEnVersionLabel.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Share_Compatible_Designer_Version") + ": " + compatibleEnVersion); } - - private static class PreviewImagePane extends JPanel { - private static final Image DEFAULT_IMAGE = IOUtils.readImage("com/fr/base/images/share/component_error.png"); - private static final int PREVIEW_IMAGE_WIDTH = POPUP_WIDTH - 20; - private static final int STANDARD_DPI = 128; - - private Image previewImage; - - public void setPreviewImage(Image previewImage) { - this.previewImage = previewImage; - if (this.previewImage == null) { - this.previewImage = DEFAULT_IMAGE; - } - - int dpi = Toolkit.getDefaultToolkit().getScreenResolution(); - int imageWidth = this.previewImage.getWidth(null); - int imageHeight = this.previewImage.getHeight(null); - - double imageAspectRatio = (double) imageWidth / imageHeight; - int width = (PREVIEW_IMAGE_WIDTH * dpi) / STANDARD_DPI; - int height = (int) (width / imageAspectRatio); - setPreferredSize(new Dimension(width, height)); - } - - @Override - public void paint(Graphics g) { - g.drawImage(this.previewImage, 0, 0, getWidth(), getHeight(), null); - } - } } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/PreviewImagePane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/PreviewImagePane.java new file mode 100644 index 000000000..bedcb4e2f --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/PreviewImagePane.java @@ -0,0 +1,41 @@ +package com.fr.design.mainframe.share.ui.online; + +import com.fr.general.IOUtils; + +import javax.swing.JPanel; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Image; +import java.awt.Toolkit; + +/** + * Created by kerry on 2021/11/19 + */ +public class PreviewImagePane extends JPanel { + private static final Image DEFAULT_IMAGE = IOUtils.readImage("com/fr/base/images/share/component_error.png"); + private static final int PREVIEW_IMAGE_WIDTH = OnlineWidgetPopupPreviewPane.POPUP_WIDTH - 20; + private static final int STANDARD_DPI = 128; + + private Image previewImage; + + public void setPreviewImage(Image previewImage) { + this.previewImage = previewImage; + if (this.previewImage == null) { + this.previewImage = DEFAULT_IMAGE; + } + + int dpi = Toolkit.getDefaultToolkit().getScreenResolution(); + int imageWidth = this.previewImage.getWidth(null); + int imageHeight = this.previewImage.getHeight(null); + + double imageAspectRatio = (double) imageWidth / imageHeight; + int width = (PREVIEW_IMAGE_WIDTH * dpi) / STANDARD_DPI; + int height = (int) (width / imageAspectRatio); + setPreferredSize(new Dimension(width, height)); + } + + @Override + public void paint(Graphics g) { + g.drawImage(this.previewImage, 0, 0, getWidth(), getHeight(), null); + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/embed/EmbedPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/embed/EmbedPane.java index bf535b367..c725e7bd2 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/embed/EmbedPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/embed/EmbedPane.java @@ -7,6 +7,7 @@ import com.fr.design.gui.ibutton.UIButtonUI; import com.fr.design.gui.ilable.UILabel; import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.share.collect.ComponentCollector; import com.fr.design.mainframe.share.ui.widgetfilter.FilterConfigPane; import com.fr.design.mainframe.share.util.OnlineShopUtils; @@ -21,6 +22,7 @@ import javax.swing.UIManager; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; +import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Image; import java.awt.Point; @@ -54,7 +56,6 @@ public class EmbedPane extends JPanel { private JPanel initCenterPane(OnlineEmbedFilterShowPane showPane) { JPanel jPanel = new JPanel(FRGUIPaneFactory.createBorderLayout()); jPanel.setBackground(Color.WHITE); - jPanel.setPreferredSize(new Dimension(200, 200)); jPanel.setBorder(BorderFactory.createEmptyBorder(5, 0, 5, 0)); FilterConfigPane filterConfigPane = new FilterConfigPane(OnlineShopUtils.getEmbPaneShowFilterTypeInfos(), false) { @@ -65,9 +66,9 @@ public class EmbedPane extends JPanel { }; UIButton searchBtn = initSearchBtn(filterConfigPane, showPane); filterConfigPane.setBorder(null); - UILabel tipLabel = new UILabel(Toolkit.i18nText("Fine-Design_Share_Online_Embed_Filter_Tip")); - tipLabel.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5)); - jPanel.add(tipLabel, BorderLayout.NORTH); + JPanel tipPane = getFilterTipPane(); + tipPane.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5)); + jPanel.add(tipPane, BorderLayout.NORTH); jPanel.add(filterConfigPane, BorderLayout.CENTER); JPanel southPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); southPane.setBorder(BorderFactory.createEmptyBorder(0, 8, 0, 8)); @@ -79,6 +80,43 @@ public class EmbedPane extends JPanel { return jPanel; } + private JPanel getFilterTipPane() { + String remark = Toolkit.i18nText("Fine-Design_Share_Online_Embed_Filter_Tip"); + UILabel label = new UILabel(); + label.setSize(new Dimension(212, 30)); + + //用THML标签进行拼接,以实现自动换行 + StringBuilder builder = new StringBuilder(""); + char[] chars = remark.toCharArray(); + //获取字体计算大小 + FontMetrics fontMetrics = label.getFontMetrics(label.getFont()); + int start = 0; + int len = 0; + while (start + len < remark.length()) { + while (true) { + len++; + if (start + len > remark.length()) + break; + if (fontMetrics.charsWidth(chars, start, len) + > label.getWidth()) { + break; + } + } + builder.append(chars, start, len - 1).append("
"); + start = start + len - 1; + len = 0; + } + //拼接剩余部分 + builder.append(chars, start, remark.length() - start); + builder.append(""); + + JPanel jPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); + label.setText(builder.toString()); + jPanel.add(label); + + return jPanel; + } + private UIButton initSearchBtn(FilterConfigPane filterConfigPane, OnlineEmbedFilterShowPane showPane) { UIButton searchBtn = new UIButton(Toolkit.i18nText("Fine-Design_Share_Online_Query_Recommend_Component")); searchBtn.setUI(new UIButtonUI() { @@ -86,7 +124,7 @@ public class EmbedPane extends JPanel { protected void paintBorder(Graphics g, UIButton b) { Color oldColor = g.getColor(); g.setColor(SEARCH_BUTTON_COLOR); - g.drawRoundRect(0, 0, b.getWidth() - 4, b.getHeight() - 4, 2, 2); + g.drawRoundRect(2, 2, b.getWidth() - 4, b.getHeight() - 4, 2, 2); g.setColor(oldColor); } }); @@ -96,7 +134,7 @@ public class EmbedPane extends JPanel { public void actionPerformed(ActionEvent e) { String filterStr = filterConfigPane.assembleFilter(); if (StringUtils.isEmpty(filterStr)) { - FineJOptionPane.showMessageDialog(EmbedPane.this, + FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Toolkit.i18nText("Fine-Design_Share_Online_Embed_Filter_Warning_Tip"), Toolkit.i18nText("Fine-Design_Basic_Message"), WARNING_MESSAGE, UIManager.getIcon("OptionPane.warningIcon")); diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/embed/OnlineEmbedFilterShowPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/embed/OnlineEmbedFilterShowPane.java index 9141bf98a..62adbb76e 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/embed/OnlineEmbedFilterShowPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/embed/OnlineEmbedFilterShowPane.java @@ -21,7 +21,7 @@ public class OnlineEmbedFilterShowPane extends JPanel { this.setLayout(FRGUIPaneFactory.createBorderLayout()); embedPane = new EmbedPane(this); embedPane.setLocation(10, 0); - embedPane.setSize(228, 273); + embedPane.setSize(228, embedPane.getPreferredSize().height); this.add(embedPane); this.onlineWidgetShowPane = onlineWidgetShowPane; this.add(onlineWidgetShowPane, BorderLayout.CENTER); diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/embed/PreviewDialog.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/embed/PreviewDialog.java index 3ef29c8cb..2edd7d094 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/embed/PreviewDialog.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/embed/PreviewDialog.java @@ -1,10 +1,8 @@ package com.fr.design.mainframe.share.ui.online.embed; -import com.fr.design.gui.ilable.UILabel; import com.fr.design.mainframe.DesignerContext; -import com.fr.design.mainframe.EastRegionContainerPane; +import com.fr.design.mainframe.share.ui.online.PreviewImagePane; -import javax.swing.ImageIcon; import javax.swing.JDialog; import java.awt.Dimension; import java.awt.Image; @@ -25,12 +23,13 @@ public class PreviewDialog extends JDialog { public void setImage(Image image, Point point) { this.getContentPane().removeAll(); - this.getContentPane().add(new UILabel(new ImageIcon(image))); - int width = image.getWidth(null); - this.setSize(width, image.getHeight(null)); - this.setLocation(point.x - width, point.y + OFFSET_Y); + PreviewImagePane previewImagePane = new PreviewImagePane(); + previewImagePane.setPreviewImage(image); + Dimension dimension = previewImagePane.getPreferredSize(); + this.getContentPane().add(previewImagePane); + setSize(new Dimension(dimension.width, dimension.height)); + this.setLocation(point.x - dimension.width, point.y + OFFSET_Y); this.doLayout(); - this.validate(); this.repaint(); } From dc1f4cd0ff03280707233c9f763825f8a3e12ad6 Mon Sep 17 00:00:00 2001 From: kerry Date: Fri, 19 Nov 2021 17:37:17 +0800 Subject: [PATCH 2/3] =?UTF-8?q?REPORT-62970=E3=80=90=E6=8E=A5=E8=A7=A6?= =?UTF-8?q?=E7=82=B9=E4=BC=98=E5=8C=96=E3=80=91=E7=AD=9B=E9=80=89=E5=8A=A8?= =?UTF-8?q?=E6=95=88=E9=97=AE=E9=A2=98=EF=BC=8C=E4=BA=A4=E4=BA=92=E7=9C=8B?= =?UTF-8?q?=E4=B8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/mainframe/share/ui/online/embed/EmbedPane.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/embed/EmbedPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/embed/EmbedPane.java index c725e7bd2..825eb22a5 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/embed/EmbedPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/embed/EmbedPane.java @@ -19,11 +19,13 @@ import com.fr.stable.StringUtils; import javax.swing.BorderFactory; import javax.swing.JPanel; import javax.swing.UIManager; +import java.awt.AlphaComposite; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.FontMetrics; import java.awt.Graphics; +import java.awt.Graphics2D; import java.awt.Image; import java.awt.Point; import java.awt.event.ActionEvent; @@ -43,7 +45,9 @@ public class EmbedPane extends JPanel { private static final String EMBED_PANE_TIMER = "EMBED_PANE_TIMER"; private static final Color BORDER_COLOR = Color.decode("#D9DADD"); private static final Color SEARCH_BUTTON_COLOR = Color.decode("#419BF9"); + private static final float DELTA_ALPHA = 0.13F; private Image image; + private float alpha = 1.0F; public EmbedPane(OnlineEmbedFilterShowPane showPane) { this.addMouseListener(new MouseAdapter() { @@ -172,6 +176,7 @@ public class EmbedPane extends JPanel { Dimension newDimension = new Dimension(dimension.width - 25, dimension.height - 30); EmbedPane.this.setSize(newDimension); EmbedPane.this.setLocation(point.x + 25, 0); + alpha -= DELTA_ALPHA; }); }, 0, 60, TimeUnit.MILLISECONDS); @@ -179,6 +184,8 @@ public class EmbedPane extends JPanel { @Override public void paint(Graphics g) { + AlphaComposite composite = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha); + ((Graphics2D) g).setComposite(composite); super.paint(g); if (image != null) { g.drawImage(image, 0, 0, EmbedPane.this.getWidth(), EmbedPane.this.getHeight(), null); From 427fb1aa96942d417238b8cb65ee794cab6e4f1e Mon Sep 17 00:00:00 2001 From: kerry Date: Fri, 19 Nov 2021 18:50:58 +0800 Subject: [PATCH 3/3] =?UTF-8?q?REPORT-62398=20=E3=80=90=E6=8E=A5=E8=A7=A6?= =?UTF-8?q?=E7=82=B9=E4=BC=98=E5=8C=96=E3=80=91=E7=AD=9B=E9=80=89=E9=9D=A2?= =?UTF-8?q?=E6=9D=BF=E5=AD=98=E5=9C=A8=E6=97=B6=EF=BC=8C=E4=B8=8A=E4=B8=8B?= =?UTF-8?q?=E6=BB=91=E5=8A=A8=E9=BC=A0=E6=A0=87=E6=98=BE=E7=A4=BA=E5=BC=82?= =?UTF-8?q?=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/online/AbstractOnlineWidgetShowPane.java | 14 ++++++++++---- .../mainframe/share/ui/online/embed/EmbedPane.java | 4 ++-- .../ui/online/embed/OnlineEmbedFilterShowPane.java | 11 ++++++++++- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/AbstractOnlineWidgetShowPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/AbstractOnlineWidgetShowPane.java index 1e5899f46..ef61c1e94 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/AbstractOnlineWidgetShowPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/AbstractOnlineWidgetShowPane.java @@ -43,6 +43,7 @@ public abstract class AbstractOnlineWidgetShowPane extends JPanel { protected FilterPane filterPane; private JPanel centerPane; private SortTabPane sortTabPane; + private JPanel toolBarPane; private final JPanel loadingPane = new LoadingPane(); @@ -77,10 +78,10 @@ public abstract class AbstractOnlineWidgetShowPane extends JPanel { FlexSearchFieldPane flexSearchPane = new FlexSearchFieldPane(filterPane); initSearchTextFieldPaneListener(flexSearchPane); - JPanel northPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); - northPane.add(flexSearchPane, BorderLayout.CENTER); - northPane.add(sortTabPane, BorderLayout.SOUTH); - initNorthPane(jPanel, northPane); + toolBarPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + toolBarPane.add(flexSearchPane, BorderLayout.CENTER); + toolBarPane.add(sortTabPane, BorderLayout.SOUTH); + initNorthPane(jPanel, toolBarPane); this.searchResultShowPane = initSearchResultShowPane(sharableWidgetProviders); mainCardLayout = new CardLayout(); @@ -93,10 +94,15 @@ public abstract class AbstractOnlineWidgetShowPane extends JPanel { return jPanel; } + protected void initNorthPane(JPanel jPanel, JPanel northPane) { jPanel.add(northPane, BorderLayout.NORTH); } + public void setToolBarPaneVisible(boolean flag){ + this.toolBarPane.setVisible(flag); + } + protected AbstractOnlineWidgetSelectPane createOnlineWidgetSelectPane(OnlineShareWidget[] sharableWidgetProviders) { return new OnlineWidgetSelectPane(sharableWidgetProviders, filterPane, 50); diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/embed/EmbedPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/embed/EmbedPane.java index 825eb22a5..c9562b1da 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/embed/EmbedPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/embed/EmbedPane.java @@ -60,7 +60,7 @@ public class EmbedPane extends JPanel { private JPanel initCenterPane(OnlineEmbedFilterShowPane showPane) { JPanel jPanel = new JPanel(FRGUIPaneFactory.createBorderLayout()); jPanel.setBackground(Color.WHITE); - jPanel.setBorder(BorderFactory.createEmptyBorder(5, 0, 5, 0)); + jPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 0)); FilterConfigPane filterConfigPane = new FilterConfigPane(OnlineShopUtils.getEmbPaneShowFilterTypeInfos(), false) { @Override @@ -184,7 +184,7 @@ public class EmbedPane extends JPanel { @Override public void paint(Graphics g) { - AlphaComposite composite = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha); + AlphaComposite composite = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, Math.max(0, alpha)); ((Graphics2D) g).setComposite(composite); super.paint(g); if (image != null) { diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/embed/OnlineEmbedFilterShowPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/embed/OnlineEmbedFilterShowPane.java index 62adbb76e..640d84d73 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/embed/OnlineEmbedFilterShowPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/embed/OnlineEmbedFilterShowPane.java @@ -22,13 +22,22 @@ public class OnlineEmbedFilterShowPane extends JPanel { embedPane = new EmbedPane(this); embedPane.setLocation(10, 0); embedPane.setSize(228, embedPane.getPreferredSize().height); - this.add(embedPane); + this.add(embedPane, BorderLayout.NORTH); this.onlineWidgetShowPane = onlineWidgetShowPane; + this.onlineWidgetShowPane.setToolBarPaneVisible(false); this.add(onlineWidgetShowPane, BorderLayout.CENTER); } public void filterStateChanged(String filterStr) { + this.removeAll(); + this.add(embedPane); + this.add(onlineWidgetShowPane, BorderLayout.CENTER); + this.validate(); + this.doLayout(); + this.repaint(); + onlineWidgetShowPane.setToolBarPaneVisible(true); selectPane = onlineWidgetShowPane.animate(filterStr); + } public void animate(List selectedFilters) throws InterruptedException {