diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/menu/TemplateStoreMenu.java b/designer-base/src/main/java/com/fr/design/actions/community/TemplateStoreAction.java similarity index 83% rename from designer-form/src/main/java/com/fr/design/mainframe/share/ui/menu/TemplateStoreMenu.java rename to designer-base/src/main/java/com/fr/design/actions/community/TemplateStoreAction.java index 7346cb1f5..6a01b3f1c 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/menu/TemplateStoreMenu.java +++ b/designer-base/src/main/java/com/fr/design/actions/community/TemplateStoreAction.java @@ -1,8 +1,7 @@ -package com.fr.design.mainframe.share.ui.menu; +package com.fr.design.actions.community; import com.fr.base.BaseUtils; import com.fr.design.actions.UpdateAction; -import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.share.collect.ComponentCollector; import com.fr.design.menu.MenuKeySet; import com.fr.design.utils.BrowseUtils; @@ -14,9 +13,9 @@ import java.awt.event.ActionEvent; /** * created by Harrison on 2020/03/24 **/ -public class TemplateStoreMenu extends UpdateAction { +public class TemplateStoreAction extends UpdateAction { - public TemplateStoreMenu() { + public TemplateStoreAction() { this.setMenuKeySet(TEMPLATE); this.setName(getMenuKeySet().getMenuName()); @@ -29,7 +28,7 @@ public class TemplateStoreMenu extends UpdateAction { @Override public String getMenuName() { - return Toolkit.i18nText("Fine-Design_Share_Template_Store"); + return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Share_Template_Store"); } @Override diff --git a/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java index 8b9b1cf3a..94d79b2d1 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java @@ -13,8 +13,11 @@ import com.fr.design.gui.ibutton.UIButtonUI; import com.fr.design.gui.icontainer.UIEastResizableContainer; import com.fr.design.gui.ilable.UILabel; import com.fr.design.layout.VerticalFlowLayout; +import com.fr.design.mainframe.reuse.ReuseGuideDialog; +import com.fr.design.mainframe.reuse.SnapChatKeys; import com.fr.design.menu.SnapChatUtil; import com.fr.design.notification.SnapChat; +import com.fr.design.notification.SnapChatFactory; import com.fr.design.ui.util.UIUtil; import com.fr.design.utils.DesignUtils; import com.fr.design.utils.gui.GUICoreUtils; @@ -97,6 +100,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer { private JPanel defaultPane; // "无可用配置项"面板 private JPanel defaultAuthorityPane; // "该元素不支持权限编辑" private PropertyItem selectedItem; // 当前被选中的属性配置项 + private SnapChat widgetLibSnapChat; public enum PropertyMode { REPORT, // 报表 @@ -297,14 +301,21 @@ public class EastRegionContainerPane extends UIEastResizableContainer { "hyperlink", new PropertyMode[]{PropertyMode.REPORT, PropertyMode.REPORT_PARA, PropertyMode.REPORT_PARA_WIDGET, PropertyMode.REPORT_FLOAT, PropertyMode.POLY, PropertyMode.POLY_CHART}, new PropertyMode[]{PropertyMode.REPORT, PropertyMode.REPORT_FLOAT, PropertyMode.FORM_REPORT, PropertyMode.POLY_REPORT}); // 组件库 - PropertyItem widgetLib = new PropertyItem(KEY_WIDGET_LIB, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Widget_Library"), - "widgetlib", new PropertyMode[]{PropertyMode.FORM}, - new PropertyMode[]{PropertyMode.FORM}, new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - ComponentReuseNotifyUtil.enterWidgetLibExtraAction(); - } - }); + widgetLibSnapChat = SnapChatFactory.createSnapChat(false, SnapChatKeys.COMPONENT); + PropertyItem widgetLib = new PropertyItem( + KEY_WIDGET_LIB, + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Widget_Library"), + "widgetlib", + new PropertyMode[]{PropertyMode.FORM}, + new PropertyMode[]{PropertyMode.FORM}, + getWidgetLibSnapChat(), + getWidgetLibPromptWindow(), + new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + ComponentReuseNotifyUtil.enterWidgetLibExtraAction(); + } + }); // 权限编辑 PropertyItem authorityEdition = new PropertyItem(KEY_AUTHORITY_EDITION, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Permissions_Edition"), "authorityedit", new PropertyMode[]{PropertyMode.AUTHORITY_EDITION_DISABLED}, @@ -519,6 +530,17 @@ public class EastRegionContainerPane extends UIEastResizableContainer { propertyItemMap.get(KEY_WIDGET_LIB).replaceContentPane(pane); } + public SnapChat getWidgetLibSnapChat() { + return widgetLibSnapChat; + } + + public PromptWindow getWidgetLibPromptWindow() { + if (!getWidgetLibSnapChat().hasRead()) { + return new ReuseGuideDialog(DesignerContext.getDesignerFrame()); + } + return null; + } + public JComponent getWidgetLibPane() { return propertyItemMap.get(KEY_WIDGET_LIB).getContentPane(); } @@ -726,11 +748,14 @@ public class EastRegionContainerPane extends UIEastResizableContainer { this(name, title, btnIconName, ICON_BASE_DIR, visibleModes, enableModes, null, null); } + public PropertyItem(String name, String title, String btnIconName, PropertyMode[] visibleModes, PropertyMode[] enableModes, SnapChat snapChat, PromptWindow promptWindow, ActionListener actionListener) { + this(name, title, btnIconName, ICON_BASE_DIR, visibleModes, enableModes, snapChat, promptWindow, actionListener); + } + public PropertyItem(String name, String title, String btnIconName, PropertyMode[] visibleModes, PropertyMode[] enableModes, ActionListener actionListener) { this(name, title, btnIconName, ICON_BASE_DIR, visibleModes, enableModes, null, null, actionListener); } - public PropertyItem(String name, String title, String btnIconName, String iconBaseDir, PropertyMode[] visibleModes, PropertyMode[] enableModes, SnapChat snapChat, PromptWindow promptWindow) { this(name, title, btnIconName, iconBaseDir, visibleModes, enableModes, snapChat, promptWindow, null); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/reuse/ReuseGuideDialog.java b/designer-base/src/main/java/com/fr/design/mainframe/reuse/ReuseGuideDialog.java new file mode 100644 index 000000000..98e149e0c --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/reuse/ReuseGuideDialog.java @@ -0,0 +1,167 @@ +package com.fr.design.mainframe.reuse; + +import com.fr.base.background.ColorBackground; +import com.fr.design.dialog.UIDialog; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.i18n.Toolkit; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.PromptWindow; +import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.general.IOUtils; + +import javax.swing.BorderFactory; +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JPanel; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dialog; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.Font; +import java.awt.Frame; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Image; +import java.awt.RenderingHints; +import java.awt.geom.RoundRectangle2D; + +public class ReuseGuideDialog extends UIDialog implements PromptWindow { + InnerDialog innerDialog; + private static final Dimension DEFAULT = new Dimension(735, 510); + + public ReuseGuideDialog(Frame parent) { + super(parent); + } + + @Override + public void showWindow() { + innerDialog = new InnerDialog(this); + JPanel backGroundPane = new JPanel() { + @Override + protected void paintComponent(Graphics g) { + Image icon = IOUtils.readImage("com/fr/base/images/share/background.png");// 003.jpg是测试图片在项目的根目录下 + g.drawImage(icon, 0, 0, getSize().width, getSize().height, this);// 图片会自动缩放 + } + }; + add(backGroundPane, BorderLayout.CENTER); + initStyle(); + innerDialog.showWindow(); + } + + private void initStyle() { + setSize(DEFAULT); + setUndecorated(true); + setBackground(new Color(0, 0, 0, 0)); + GUICoreUtils.centerWindow(this); + } + + @Override + public void hideWindow() { + this.setVisible(false); + if (innerDialog != null) { + innerDialog.setVisible(false); + innerDialog.dispose(); + innerDialog = null; + } + this.dispose(); + } + + @Override + public void checkValid() { + + } + + class InnerDialog extends UIDialog { + private final Dimension DEFAULT = new Dimension(700, 475); + private static final int TITLE_FONT_SIZE = 20; + + public InnerDialog(Dialog dialog) { + super(dialog); + } + + public void showWindow() { + add(createCenterPanel(), BorderLayout.CENTER); + add(createSouthPanel(), BorderLayout.SOUTH); + add(createNorthPanel(), BorderLayout.NORTH); + showDialog(); + } + + private JPanel createNorthPanel() { + JPanel northPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); + + //右上角关闭按钮 + JButton button = new JButton(new ImageIcon(IOUtils.readImage("/com/fr/base/images/share/close.png").getScaledInstance(15, 15, Image.SCALE_SMOOTH))); + button.setBorder(null); + button.setOpaque(false); + button.addActionListener(e -> ReuseGuideDialog.this.hideWindow()); + + northPanel.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 15)); + northPanel.setOpaque(false); + northPanel.add(button); + return northPanel; + } + + private JPanel createCenterPanel() { + JPanel centerPanel = new JPanel(new BorderLayout()); + + UILabel titleLabel = new UILabel(Toolkit.i18nText("Fine-Design_Share_Drag_And_Make_Component")); + UILabel imageLabel = new UILabel(new ImageIcon(IOUtils.readImage("com/fr/base/images/share/guide.png").getScaledInstance(DEFAULT.width, DEFAULT.height, Image.SCALE_SMOOTH))); + titleLabel.setFont(new Font(titleLabel.getFont().getName(), Font.BOLD, TITLE_FONT_SIZE)); + titleLabel.setBorder(BorderFactory.createEmptyBorder()); + + JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER)); + panel.setOpaque(false); + panel.add(titleLabel); + + centerPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 10, 0)); + centerPanel.setOpaque(false); + centerPanel.add(imageLabel, BorderLayout.CENTER); + centerPanel.add(panel, BorderLayout.NORTH); + return centerPanel; + } + + private JPanel createSouthPanel() { + JPanel southPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); + + JButton button = new JButton(Toolkit.i18nText("Fine-Design_Share_Try_Drag")) { + @Override + public void paint(Graphics g) { + ColorBackground buttonBackground = ColorBackground.getInstance(Color.decode("#419BF9")); + Graphics2D g2d = (Graphics2D) g; + g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + buttonBackground.paint(g2d, new RoundRectangle2D.Double(0, 0, getWidth(), getHeight(), 8, 8)); + g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF); + super.paint(g); + } + }; + button.setBorder(null); + button.setForeground(Color.WHITE); + button.setOpaque(false); + button.addActionListener(e -> ReuseGuideDialog.this.hideWindow()); + + southPanel.setBorder(BorderFactory.createEmptyBorder(0, 290, 19, 290)); + southPanel.setPreferredSize(new Dimension(DEFAULT.width, 51)); + southPanel.setOpaque(false); + southPanel.add(button); + return southPanel; + } + + /** + * 显示窗口 + */ + private void showDialog() { + setSize(DEFAULT); + setUndecorated(true); + GUICoreUtils.centerWindow(this); + setModalityType(ModalityType.APPLICATION_MODAL); + ReuseGuideDialog.this.setVisible(true); + setVisible(true); + } + + @Override + public void checkValid() { + + } + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/menu/SnapChatKeys.java b/designer-base/src/main/java/com/fr/design/mainframe/reuse/SnapChatKeys.java similarity index 91% rename from designer-form/src/main/java/com/fr/design/mainframe/share/ui/menu/SnapChatKeys.java rename to designer-base/src/main/java/com/fr/design/mainframe/reuse/SnapChatKeys.java index cf563d2e8..8f07f503b 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/menu/SnapChatKeys.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/reuse/SnapChatKeys.java @@ -1,4 +1,4 @@ -package com.fr.design.mainframe.share.ui.menu; +package com.fr.design.mainframe.reuse; import com.fr.design.notification.SnapChatKey; diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/collect/CollectorManager.java b/designer-base/src/main/java/com/fr/design/mainframe/share/collect/CollectorManager.java similarity index 100% rename from designer-form/src/main/java/com/fr/design/mainframe/share/collect/CollectorManager.java rename to designer-base/src/main/java/com/fr/design/mainframe/share/collect/CollectorManager.java diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/collect/ComponentCollector.java b/designer-base/src/main/java/com/fr/design/mainframe/share/collect/ComponentCollector.java similarity index 100% rename from designer-form/src/main/java/com/fr/design/mainframe/share/collect/ComponentCollector.java rename to designer-base/src/main/java/com/fr/design/mainframe/share/collect/ComponentCollector.java diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/collect/ComponentSender.java b/designer-base/src/main/java/com/fr/design/mainframe/share/collect/ComponentSender.java similarity index 100% rename from designer-form/src/main/java/com/fr/design/mainframe/share/collect/ComponentSender.java rename to designer-base/src/main/java/com/fr/design/mainframe/share/collect/ComponentSender.java 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 3dbdac094..d6cdbd8e3 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 @@ -591,6 +591,7 @@ public abstract class ToolBarMenuDock { shortCuts.add(new TechSolutionAction()); shortCuts.add(SeparatorDef.DEFAULT); + shortCuts.add(new TemplateStoreAction()); LocaleCenter.buildAction(new LocaleAction() { @Override diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/ToolbarPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/ToolbarPane.java index 4a32b149e..c720e7f9c 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/ToolbarPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/ToolbarPane.java @@ -119,7 +119,7 @@ class ToolbarPane extends JPanel { private FilterPane createFilterPane() { filterPanel = FilterPane.createLocalFilterPane(); filterPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 10)); - filterPanel.registerChangeListerner(e -> LocalWidgetRepoPane.getInstance().refreshShowPanel()); + filterPanel.registerChangeListener(e -> LocalWidgetRepoPane.getInstance().refreshShowPanel()); return filterPanel; } 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 5a5d43234..fc2390d61 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 @@ -138,7 +138,7 @@ public abstract class AbstractOnlineWidgetShowPane extends JPanel { } public void initFilterPaneListener(FilterPane filterPane) { - filterPane.registerChangeListerner(new ChangeListener() { + filterPane.registerChangeListener(new ChangeListener() { @Override public void stateChanged(final ChangeEvent e) { String filterStr = e.getSource().toString(); diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineWidgetShowPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineWidgetShowPane.java index 691defde7..2325fb130 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineWidgetShowPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/OnlineWidgetShowPane.java @@ -90,7 +90,7 @@ public class OnlineWidgetShowPane extends AbstractOnlineWidgetShowPane { @Override public void initFilterPaneListener(FilterPane filterPane) { super.initFilterPaneListener(filterPane); - filterPane.registerChangeListerner(new ChangeListener() { + filterPane.registerChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { lastFilter = e.getSource().toString(); diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/widgetfilter/FilterPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/widgetfilter/FilterPane.java index ce976e217..4e8f9ffc5 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/widgetfilter/FilterPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/widgetfilter/FilterPane.java @@ -46,7 +46,7 @@ public class FilterPane extends JPanel { private Popup popup; private boolean showPopup = false; private FilterPopupPane filterPopupPane; - private ChangeListener changeListener; + private List changeListenerList = new ArrayList<>(); private final AWTEventListener awtEventListener; List listenerList = new ArrayList<>(); @@ -191,12 +191,14 @@ public class FilterPane extends JPanel { && !ComparatorUtils.equals(mv.getSource(), filterLabel); } - public void registerChangeListerner(ChangeListener changeListener) { - this.changeListener = changeListener; + public void registerChangeListener(ChangeListener changeListener) { + changeListenerList.add(changeListener); } public void fireChangeListener(ChangeEvent e) { - this.changeListener.stateChanged(e); + for (ChangeListener changeListener : changeListenerList) { + changeListener.stateChanged(e); + } } public void reset() { diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallComponentHelper.java b/designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallComponentHelper.java index 3f41afe36..d2846d93c 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallComponentHelper.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/util/InstallComponentHelper.java @@ -1,6 +1,6 @@ package com.fr.design.mainframe.share.util; -import com.fr.design.mainframe.share.ui.menu.SnapChatKeys; +import com.fr.design.mainframe.reuse.SnapChatKeys; import com.fr.design.notification.SnapChat; import com.fr.design.notification.SnapChatFactory; import com.fr.form.share.constants.ComponentPath; diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/config/ShareConfigPane.java b/designer-realize/src/main/java/com/fr/design/share/ui/config/ShareConfigPane.java index 9b55dc122..fa5606fe8 100644 --- a/designer-realize/src/main/java/com/fr/design/share/ui/config/ShareConfigPane.java +++ b/designer-realize/src/main/java/com/fr/design/share/ui/config/ShareConfigPane.java @@ -155,7 +155,7 @@ public class ShareConfigPane extends BasicPane { private JPanel createInfoPane() { JPanel infoPane = FRGUIPaneFactory.createTitledBorderPane(Toolkit.i18nText("Fine-Design_Share_Introduce")); PlaceholderTextArea textArea = new PlaceholderTextArea(); - textArea.setText(this.widget.getDescription()); + textArea.setText(getDescription()); textArea.setPlaceholder(Toolkit.i18nText("Fine-Design_Share_No_Introduction")); textArea.setEditable(false); UIScrollPane scrollPane = new UIScrollPane(textArea); diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/generate/EffectContent.java b/designer-realize/src/main/java/com/fr/design/share/ui/generate/EffectContent.java index 63098ffd5..4fef5f51a 100644 --- a/designer-realize/src/main/java/com/fr/design/share/ui/generate/EffectContent.java +++ b/designer-realize/src/main/java/com/fr/design/share/ui/generate/EffectContent.java @@ -17,6 +17,7 @@ import com.fr.locale.InterProviderFactory; import javax.swing.BorderFactory; import javax.swing.JComponent; import javax.swing.JPanel; +import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTree; import javax.swing.event.TreeSelectionListener; @@ -144,8 +145,8 @@ public class EffectContent extends JPanel { } private void setPaneDisabled(Component component) { - if (component instanceof UIScrollPane) { - UIScrollPane pane = (UIScrollPane) component; + if (component instanceof JScrollPane) { + JScrollPane pane = (JScrollPane) component; setPaneDisabled(pane.getViewport().getView()); return; }