From 5d045ae857b97c816027c9bf330fedcb9d671002 Mon Sep 17 00:00:00 2001 From: lemon Date: Wed, 7 Aug 2024 10:51:15 +0800 Subject: [PATCH 1/7] =?UTF-8?q?REPORT-127437=20feat:=20fvs=20=E9=80=82?= =?UTF-8?q?=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/file/MultiTemplateTabPane.java | 15 +++-- .../com/fr/design/fun/ToolBarHandler.java | 59 +++++++++++++++++ .../mainframe/CenterRegionContainerPane.java | 2 - .../fr/design/mainframe/DesignerFrame.java | 2 +- .../mainframe/toolbar/ToolBarMenuDock.java | 65 +++++++++++++++++++ .../java/com/fr/design/menu/ToolBarDef.java | 12 ++++ .../toolbar/ToolBarMenuDockTest.java | 10 +++ .../NewWorkBookToolBarAction.java | 31 +++++++++ .../main/java/com/fr/start/MainDesigner.java | 12 +++- 9 files changed, 200 insertions(+), 8 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/fun/ToolBarHandler.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/toolbar/multitemplate/NewWorkBookToolBarAction.java diff --git a/designer-base/src/main/java/com/fr/design/file/MultiTemplateTabPane.java b/designer-base/src/main/java/com/fr/design/file/MultiTemplateTabPane.java index ef9fb8fcc6..13a77138ab 100644 --- a/designer-base/src/main/java/com/fr/design/file/MultiTemplateTabPane.java +++ b/designer-base/src/main/java/com/fr/design/file/MultiTemplateTabPane.java @@ -10,14 +10,16 @@ import com.fr.design.actions.UpdateAction; import com.fr.design.actions.file.LocateAction; import com.fr.design.constants.UIConstants; import com.fr.design.dialog.FineJOptionPane; -import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.imenu.UIMenuItem; import com.fr.design.gui.imenu.UIPopupMenu; import com.fr.design.gui.imenu.UIScrollPopUpMenu; +import com.fr.design.gui.itoolbar.UIToolbar; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.JTemplate; import com.fr.design.mainframe.manager.search.TemplateTreeSearchManager; +import com.fr.design.mainframe.toolbar.ToolBarMenuDock; +import com.fr.design.menu.ToolBarDef; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.design.worker.WorkerManager; import com.fr.design.worker.save.CallbackSaveWorker; @@ -114,6 +116,7 @@ public class MultiTemplateTabPane extends Row { private Icon clodeIcon = new LazyIcon("clear"); private boolean isShowList = false; private JButton leadingActionButton; + public UIToolbar toolBar = ToolBarDef.createJToolBar(); //自动新建的模板B若没有进行任何编辑,切换到其他 // @@ -176,16 +179,20 @@ public class MultiTemplateTabPane extends Row { } } }); + getToolBarMenuDock().createTemplateToolBarDef().updateToolBar(toolBar); + add( - Layouts.cell(new UIButton(new LazyIcon("add_worksheet"))).with(it -> { + Layouts.cell(toolBar).with(it -> { it.putClientProperty(BUTTON_TYPE, BUTTON_TYPE_TOOLBAR_BUTTON); FineUIStyle.setStyle(it, BUTTON_TAB_ACTION); - it.setFocusPainted(false); - leadingActionButton = it; }) ); } + public ToolBarMenuDock getToolBarMenuDock() { + return DesignerContext.getDesignerFrame().getToolBarMenuDock(); + } + /** * 为前导动作添加监听 * diff --git a/designer-base/src/main/java/com/fr/design/fun/ToolBarHandler.java b/designer-base/src/main/java/com/fr/design/fun/ToolBarHandler.java new file mode 100644 index 0000000000..a9e81e95d5 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/fun/ToolBarHandler.java @@ -0,0 +1,59 @@ +package com.fr.design.fun; + +import com.fr.design.menu.ShortCut; +import com.fr.stable.fun.mark.Mutable; + +/** + * @author lemon + * @since + * Created on + * 设计器工具按钮插件接口 + */ +public interface ToolBarHandler extends Mutable { + + String MARK_STRING = "ToolBarHandler"; + + int CURRENT_LEVEL = 1; + + + int LAST = -1; + int HIDE =-2; + + String MULTI_TEMPLATE = "multi_template"; + + /** + * 插入工具按钮的位置 + * + * @param total 插入的位置 + * @return 插入位置,如果想放到最后,则返回-1 + */ + int insertPosition(int total); + + /** + * 是否在插入的工具按钮前插入一个分割符 + * + * @return 是否插入分隔符 + */ + boolean insertSeparatorBefore(); + + /** + * 是否在插入的工具按钮后插入一个分割符 + * + * @return 是否插入分隔符 + */ + boolean insertSeparatorAfter(); + + /** + * 所属的工具按钮分类 + * + * @return 分类工具按钮名 + */ + String category(); + + /** + * 具体的工具按钮项内容 + * + * @return 工具按钮项内容 + */ + ShortCut shortcut(); +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/CenterRegionContainerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/CenterRegionContainerPane.java index 99a57b5b9f..5d197201c7 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/CenterRegionContainerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/CenterRegionContainerPane.java @@ -93,8 +93,6 @@ public class CenterRegionContainerPane extends JPanel { private MultiTemplateTabPane initTemplateTabPane() { MultiTemplateTabPane templateTabPane = MultiTemplateTabPane.getInstance(); - templateTabPane.addLeadingAction(e -> - DesignerContext.getDesignerFrame().addAndActivateJTemplate()); return templateTabPane; } 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 e20debacb7..6f867ccbf6 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 @@ -620,7 +620,7 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta this.ad.updateToolBarDef(); } - ToolBarMenuDock getToolBarMenuDock() { + public ToolBarMenuDock getToolBarMenuDock() { return this.ad; } 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 b15e7f9ed6..72ab22eae1 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 @@ -49,6 +49,7 @@ import com.fr.design.fun.MenuHandler; import com.fr.design.fun.OemProcessor; import com.fr.design.fun.PluginManagerProvider; import com.fr.design.fun.TableDataPaneProcessor; +import com.fr.design.fun.ToolBarHandler; import com.fr.design.gui.UILookAndFeel; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ibutton.UICombinationButton; @@ -396,6 +397,64 @@ public abstract class ToolBarMenuDock { return plus.menus4Target(); } + /** + * 创建新建模板的工具按钮 + * @return + */ + public ToolBarDef createTemplateToolBarDef() { + ToolBarDef toolBarDef = ShortCut.asToolBarDef(createNewTemplateShortCuts()); + insertToolBar(toolBarDef, ToolBarHandler.MULTI_TEMPLATE); + return toolBarDef; + } + + /** + * 新增插件中的工具按钮 + * @return + */ + protected void insertToolBar(ToolBarDef toolBarDef, String anchor) { + Set set = ExtraDesignClassManager.getInstance().getArray(ToolBarHandler.MARK_STRING); + addExtraToolBar(toolBarDef, anchor, set); + + } + + private void addExtraToolBar(ToolBarDef toolBarDef, String anchor, Set set) { + + List target = new ArrayList<>(); + for (ToolBarHandler handler : set) { + if (ComparatorUtils.equals(handler.category(), anchor)) { + target.add(handler); + } + } + + for (ToolBarHandler handler : target) { + int insertPosition = handler.insertPosition(toolBarDef.getShortCutCount()); + if (insertPosition == MenuHandler.HIDE) { + return; + } + ShortCut shortCut = handler.shortcut(); + if (shortCut == null) { + continue; + } + + if (insertPosition == MenuHandler.LAST) { + if (handler.insertSeparatorBefore()) { + toolBarDef.addShortCut(SeparatorDef.DEFAULT); + } + toolBarDef.addShortCut(shortCut); + } else { + toolBarDef.insertShortCut(insertPosition, shortCut); + if (handler.insertSeparatorBefore()) { + toolBarDef.insertShortCut(insertPosition, SeparatorDef.DEFAULT); + insertPosition++; + } + if (handler.insertSeparatorAfter()) { + insertPosition++; + toolBarDef.insertShortCut(insertPosition, SeparatorDef.DEFAULT); + } + } + } + } + public MenuDef createFileMenuDef(ToolBarMenuDockPlus plus) { if (DesignerMode.isVcsMode()) { MenuDef menuDef = VcsScene.createFileMenuDef(plus); @@ -463,6 +522,12 @@ public abstract class ToolBarMenuDock { * @return 菜单 */ public abstract ShortCut[] createNewFileShortCuts(); + /** + * 创建新建文件的工具按钮 + * + * @return 工具按钮 + */ + public abstract ShortCut[] createNewTemplateShortCuts(); /** * 创建论坛登录面板, chart那边不需要 diff --git a/designer-base/src/main/java/com/fr/design/menu/ToolBarDef.java b/designer-base/src/main/java/com/fr/design/menu/ToolBarDef.java index 5f66743441..95d0d995a5 100644 --- a/designer-base/src/main/java/com/fr/design/menu/ToolBarDef.java +++ b/designer-base/src/main/java/com/fr/design/menu/ToolBarDef.java @@ -38,6 +38,18 @@ public class ToolBarDef { public ToolBarDef() { } + /** + * 插入工具按钮项 + * + * @param index 插入的位置 + * @param shortCut 工具按钮信息 + */ + public void insertShortCut(int index, ShortCut shortCut) { + int size = this.shortcutList.size(); + index = Math.min(index, size); + this.shortcutList.add(index, shortCut); + } + public int getShortCutCount() { return this.shortcutList.size(); } diff --git a/designer-base/src/test/java/com/fr/design/mainfarme/toolbar/ToolBarMenuDockTest.java b/designer-base/src/test/java/com/fr/design/mainfarme/toolbar/ToolBarMenuDockTest.java index a198dace8f..4441a9a388 100644 --- a/designer-base/src/test/java/com/fr/design/mainfarme/toolbar/ToolBarMenuDockTest.java +++ b/designer-base/src/test/java/com/fr/design/mainfarme/toolbar/ToolBarMenuDockTest.java @@ -101,6 +101,11 @@ public class ToolBarMenuDockTest { public ShortCut[] createNewFileShortCuts() { return new ShortCut[0]; } + + @Override + public ShortCut[] createNewTemplateShortCuts() { + return new ShortCut[0]; + } }; ShortCut[] shortCuts = new ShortCut[] { @@ -154,6 +159,11 @@ public class ToolBarMenuDockTest { public ShortCut[] createNewFileShortCuts() { return new ShortCut[0]; } + + @Override + public ShortCut[] createNewTemplateShortCuts() { + return new ShortCut[0]; + } }; ShortCut[] shortCuts = new ShortCut[] { diff --git a/designer-realize/src/main/java/com/fr/design/actions/toolbar/multitemplate/NewWorkBookToolBarAction.java b/designer-realize/src/main/java/com/fr/design/actions/toolbar/multitemplate/NewWorkBookToolBarAction.java new file mode 100644 index 0000000000..113d9418ce --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/toolbar/multitemplate/NewWorkBookToolBarAction.java @@ -0,0 +1,31 @@ +package com.fr.design.actions.toolbar.multitemplate; + +import com.fine.theme.icon.LazyIcon; +import com.fr.design.actions.UpdateAction; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.JWorkBook; + +import javax.swing.Icon; +import java.awt.event.ActionEvent; + +/** + * @author lemon + * @since + * Created on + * 新建报表文件 + */ +public class NewWorkBookToolBarAction extends UpdateAction { + public NewWorkBookToolBarAction() { + this.setName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_M_New_WorkBook")); + this.setSmallIcon(icon()); + } + + protected Icon icon() { + return new LazyIcon("add_worksheet"); + } + + @Override + public void actionPerformed(ActionEvent e) { + DesignerContext.getDesignerFrame().addAndActivateJTemplate(new JWorkBook()); + } +} 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 dccf53bbef..0b9d487209 100644 --- a/designer-realize/src/main/java/com/fr/start/MainDesigner.java +++ b/designer-realize/src/main/java/com/fr/start/MainDesigner.java @@ -1,7 +1,6 @@ package com.fr.start; -import com.fanruan.gui.UiInspector; import com.fine.theme.icon.LazyIcon; import com.fr.base.function.UITerminator; import com.fr.base.vcs.DesignerMode; @@ -9,6 +8,7 @@ import com.fr.design.DesignerEnvManager; import com.fr.design.actions.file.WebPreviewUtils; import com.fr.design.actions.file.newReport.NewPolyReportAction; import com.fr.design.actions.file.newReport.NewWorkBookAction; +import com.fr.design.actions.toolbar.multitemplate.NewWorkBookToolBarAction; import com.fr.design.actions.server.ServerConfigManagerAction; import com.fr.design.actions.server.TemplateThemeManagerAction; import com.fr.design.actions.server.WidgetManagerAction; @@ -204,6 +204,16 @@ public class MainDesigner extends BaseDesigner { }); } + /** + * 创建新建文件的按钮数组。 + * @return + */ + public ShortCut[] createNewTemplateShortCuts() { + ArrayList shortCuts = new ArrayList(); + shortCuts.add(new NewWorkBookToolBarAction()); + return shortCuts.toArray(new ShortCut[0]); + } + /** * 创建新建文件的快捷方式数组。 * From d07d04ed89ef7a33f83c9f15d946316ee0156ea8 Mon Sep 17 00:00:00 2001 From: lemon Date: Wed, 7 Aug 2024 11:45:11 +0800 Subject: [PATCH 2/7] =?UTF-8?q?REPORT-127437=20feat:=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=B7=A5=E5=85=B7=E6=8C=89=E9=92=AE=E6=8F=92=E4=BB=B6=E9=80=82?= =?UTF-8?q?=E9=85=8D=E6=8A=BD=E8=B1=A1=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/file/MultiTemplateTabPane.java | 4 +- .../fun/impl/AbstractToolBarHandler.java | 37 +++++++++++++++++++ .../mainframe/CenterRegionContainerPane.java | 2 +- .../mainframe/toolbar/ToolBarMenuDock.java | 35 ++++++++++-------- .../mainframe/vcs/ui/FileVersionsPanel.java | 2 +- 5 files changed, 60 insertions(+), 20 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/fun/impl/AbstractToolBarHandler.java diff --git a/designer-base/src/main/java/com/fr/design/file/MultiTemplateTabPane.java b/designer-base/src/main/java/com/fr/design/file/MultiTemplateTabPane.java index 13a77138ab..e71cf8e22d 100644 --- a/designer-base/src/main/java/com/fr/design/file/MultiTemplateTabPane.java +++ b/designer-base/src/main/java/com/fr/design/file/MultiTemplateTabPane.java @@ -204,8 +204,8 @@ public class MultiTemplateTabPane extends Row { leadingActionButton.addActionListener(newTemplateAction); } - public void setLeadingActionEnable(boolean enable) { - leadingActionButton.setEnabled(enable); + public void setToolBarEnable(boolean enable) { + toolBar.setEnabled(enable); } diff --git a/designer-base/src/main/java/com/fr/design/fun/impl/AbstractToolBarHandler.java b/designer-base/src/main/java/com/fr/design/fun/impl/AbstractToolBarHandler.java new file mode 100644 index 0000000000..a0e7f67b8f --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/fun/impl/AbstractToolBarHandler.java @@ -0,0 +1,37 @@ +package com.fr.design.fun.impl; + +import com.fr.design.fun.ToolBarHandler; +import com.fr.design.menu.ShortCut; +import com.fr.stable.fun.impl.AbstractProvider; +import com.fr.stable.fun.mark.API; + +/** + * @author lemon + * @since + * Created on + * 工具按钮插件适配抽象类 + */ +@API(level = ToolBarHandler.CURRENT_LEVEL) +public abstract class AbstractToolBarHandler extends AbstractProvider implements ToolBarHandler { + /** + * 当前接口的API等级,用于判断是否需要升级插件 + * @return API等级 + */ + public int currentAPILevel() { + return CURRENT_LEVEL; + } + + @Override + public String mark4Provider() { + return this.getClass().getName(); + } + + /** + * 获取当前工具按钮对应的Action + * + * @return 工具按钮 Action + */ + public ShortCut shortcut() { + return null; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/CenterRegionContainerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/CenterRegionContainerPane.java index 5d197201c7..f38e675b14 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/CenterRegionContainerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/CenterRegionContainerPane.java @@ -273,7 +273,7 @@ public class CenterRegionContainerPane extends JPanel { * 判断是否在权限编辑状态,若是在权限编辑状态,则需要有虚线框和关闭突变 */ protected void needToAddAuhtorityPaint() { - MultiTemplateTabPane.getInstance().setLeadingActionEnable(DesignModeContext.isAuthorityEditing()); + MultiTemplateTabPane.getInstance().setToolBarEnable(DesignModeContext.isAuthorityEditing()); } 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 72ab22eae1..8716de2a35 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 @@ -418,7 +418,6 @@ public abstract class ToolBarMenuDock { } private void addExtraToolBar(ToolBarDef toolBarDef, String anchor, Set set) { - List target = new ArrayList<>(); for (ToolBarHandler handler : set) { if (ComparatorUtils.equals(handler.category(), anchor)) { @@ -436,21 +435,25 @@ public abstract class ToolBarMenuDock { continue; } - if (insertPosition == MenuHandler.LAST) { - if (handler.insertSeparatorBefore()) { - toolBarDef.addShortCut(SeparatorDef.DEFAULT); - } - toolBarDef.addShortCut(shortCut); - } else { - toolBarDef.insertShortCut(insertPosition, shortCut); - if (handler.insertSeparatorBefore()) { - toolBarDef.insertShortCut(insertPosition, SeparatorDef.DEFAULT); - insertPosition++; - } - if (handler.insertSeparatorAfter()) { - insertPosition++; - toolBarDef.insertShortCut(insertPosition, SeparatorDef.DEFAULT); - } + insertSeparatorIfNeed(toolBarDef, handler, shortCut, insertPosition); + } + } + + private void insertSeparatorIfNeed(ToolBarDef toolBarDef, ToolBarHandler handler, ShortCut shortCut, int insertPosition) { + if (insertPosition == MenuHandler.LAST) { + if (handler.insertSeparatorBefore()) { + toolBarDef.addShortCut(SeparatorDef.DEFAULT); + } + toolBarDef.addShortCut(shortCut); + } else { + toolBarDef.insertShortCut(insertPosition, shortCut); + if (handler.insertSeparatorBefore()) { + toolBarDef.insertShortCut(insertPosition, SeparatorDef.DEFAULT); + insertPosition++; + } + if (handler.insertSeparatorAfter()) { + insertPosition++; + toolBarDef.insertShortCut(insertPosition, SeparatorDef.DEFAULT); } } } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionsPanel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionsPanel.java index f97ec6803c..58393a3067 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionsPanel.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionsPanel.java @@ -155,7 +155,7 @@ public class FileVersionsPanel extends BasicPane { DesignModeContext.switchTo(isExit ? DesignerMode.NORMAL : DesignerMode.VCS); // MutilTempalteTabPane & NewTemplatePane 是否可点 - MultiTemplateTabPane.getInstance().setLeadingActionEnable(!isExit); + MultiTemplateTabPane.getInstance().setToolBarEnable(!isExit); JTemplate currentEditingTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); if (currentEditingTemplate.isJWorkBook()) { From 3522de6978474492cdf58b4a7759297243ddb499 Mon Sep 17 00:00:00 2001 From: lemon Date: Wed, 7 Aug 2024 16:39:20 +0800 Subject: [PATCH 3/7] =?UTF-8?q?REPORT-127437=20fix:=20=E8=A7=A3=E5=86=B3?= =?UTF-8?q?=20fvs=20=E9=80=82=E9=85=8D=E7=9A=84=20UI=20=E9=97=AE=E9=A2=98?= =?UTF-8?q?=20&=20=E9=80=82=E9=85=8D=20TemplateTabStoryBoard?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../theme/light/ui/FineTemplateTabPaneUI.java | 10 ++--- .../fr/design/file/MultiTemplateTabPane.java | 45 ++++++++++++++++--- .../components/TemplateTabStoryBoard.java | 40 ++++++++++++++++- .../main/java/com/fr/start/MainDesigner.java | 1 + 4 files changed, 83 insertions(+), 13 deletions(-) diff --git a/designer-base/src/main/java/com/fine/theme/light/ui/FineTemplateTabPaneUI.java b/designer-base/src/main/java/com/fine/theme/light/ui/FineTemplateTabPaneUI.java index a1ecd9a5a8..f4dd3fbf7b 100644 --- a/designer-base/src/main/java/com/fine/theme/light/ui/FineTemplateTabPaneUI.java +++ b/designer-base/src/main/java/com/fine/theme/light/ui/FineTemplateTabPaneUI.java @@ -85,7 +85,6 @@ public class FineTemplateTabPaneUI extends PanelUI { private Icon closeHoverIcon; - private int leadingWidth; private int trailingWidth; protected FineTemplateTabPaneUI() { @@ -112,7 +111,6 @@ public class FineTemplateTabPaneUI extends PanelUI { moreAction = new LazyIcon("tool_more"); moreHoverAction = new LazyIcon("tool_more_hover"); fileIcon = new LazyIcon("cpt_icon"); - leadingWidth = scale(LEADING_WIDTH); trailingWidth = scale(TRAILING_WIDTH); borderWidth = FineUIUtils.getUIInt("TemplateTabPane.borderWidth", "TemplateTabPane.borderWidth"); @@ -138,7 +136,7 @@ public class FineTemplateTabPaneUI extends PanelUI { @Override public void update(Graphics g, JComponent c) { super.update(g, c); - double maxWidth = c.getWidth() - leadingWidth - trailingWidth; + double maxWidth = c.getWidth() - scale(LEADING_WIDTH) - trailingWidth; Graphics2D g2d = (Graphics2D) g; paintDefaultBackground(g2d); paintPaneUnderLine(c.getWidth(), g2d); @@ -170,7 +168,7 @@ public class FineTemplateTabPaneUI extends PanelUI { if (tabPane.getSelectedIndex() < 0) { tabPane.setSelectedIndex(0); } - double templateStartX = leadingWidth; + double templateStartX = scale(LEADING_WIDTH); //从可以开始展示在tab面板上的tab开始画 @@ -203,7 +201,7 @@ public class FineTemplateTabPaneUI extends PanelUI { private void paintSeparators(Graphics2D g2d) { g2d.setPaint(borderColor); - float x = leadingWidth; + float x = scale(LEADING_WIDTH); Pair viewRange = tabPane.getViewRange(); for (int i = viewRange.getFirst(); i <= viewRange.getSecond(); i++) { if (i != tabPane.getSelectedIndex() @@ -216,7 +214,7 @@ public class FineTemplateTabPaneUI extends PanelUI { private void paintTrailingAction(Graphics2D g2d, double tabPaneWidth) { - int x = leadingWidth + (int) tabPaneWidth + (trailingWidth - moreAction.getIconWidth()) / 2; + int x = scale(LEADING_WIDTH) + (int) tabPaneWidth + (trailingWidth - moreAction.getIconWidth()) / 2; int y = (tabHeight - moreAction.getIconHeight()) / 2; if (tabPane.isHoverMoreAction()) { moreHoverAction.paintIcon(tabPane, g2d, x, y); diff --git a/designer-base/src/main/java/com/fr/design/file/MultiTemplateTabPane.java b/designer-base/src/main/java/com/fr/design/file/MultiTemplateTabPane.java index e71cf8e22d..c463a8cc2c 100644 --- a/designer-base/src/main/java/com/fr/design/file/MultiTemplateTabPane.java +++ b/designer-base/src/main/java/com/fr/design/file/MultiTemplateTabPane.java @@ -4,7 +4,9 @@ package com.fr.design.file; import com.fine.swing.ui.layout.Layouts; import com.fine.swing.ui.layout.Row; import com.fine.theme.icon.LazyIcon; +import com.fine.theme.utils.FineUIScale; import com.fine.theme.utils.FineUIStyle; +import com.formdev.flatlaf.util.ScaledEmptyBorder; import com.fr.base.vcs.DesignerMode; import com.fr.design.actions.UpdateAction; import com.fr.design.actions.file.LocateAction; @@ -16,6 +18,7 @@ import com.fr.design.gui.imenu.UIScrollPopUpMenu; import com.fr.design.gui.itoolbar.UIToolbar; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.DesignerFrame; import com.fr.design.mainframe.JTemplate; import com.fr.design.mainframe.manager.search.TemplateTreeSearchManager; import com.fr.design.mainframe.toolbar.ToolBarMenuDock; @@ -41,6 +44,7 @@ import javax.swing.ToolTipManager; import java.awt.AWTEvent; import java.awt.Color; import java.awt.Dimension; +import java.awt.FlowLayout; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -81,8 +85,10 @@ public class MultiTemplateTabPane extends Row { /** * 前导动作区宽度 + * 最终宽度 = {@linkplain #SINGLE_BUTTON_WIDTH} * {@literal toolBar.getComponentCount()} */ - public static final int LEADING_WIDTH = 38; + public static int LEADING_WIDTH = 38; + public static int SINGLE_BUTTON_WIDTH = 38; //每个标签页的最大的长度和最小长度。这些长度均为均分 @@ -116,7 +122,7 @@ public class MultiTemplateTabPane extends Row { private Icon clodeIcon = new LazyIcon("clear"); private boolean isShowList = false; private JButton leadingActionButton; - public UIToolbar toolBar = ToolBarDef.createJToolBar(); + private final UIToolbar toolBar = new UIToolbar(); //自动新建的模板B若没有进行任何编辑,切换到其他 // @@ -179,18 +185,26 @@ public class MultiTemplateTabPane extends Row { } } }); - getToolBarMenuDock().createTemplateToolBarDef().updateToolBar(toolBar); - + ToolBarMenuDock toolBarMenuDock = getToolBarMenuDock(); + if (toolBarMenuDock != null) { + updateMultiTemplateToolBar(getToolBarMenuDock().createTemplateToolBarDef()); + } add( - Layouts.cell(toolBar).with(it -> { + Layouts.cell(getToolBar()).with(it -> { it.putClientProperty(BUTTON_TYPE, BUTTON_TYPE_TOOLBAR_BUTTON); + it.setOpaque(false); + it.setBorder(new ScaledEmptyBorder(3, -7, 3, -7)); FineUIStyle.setStyle(it, BUTTON_TAB_ACTION); }) ); } public ToolBarMenuDock getToolBarMenuDock() { - return DesignerContext.getDesignerFrame().getToolBarMenuDock(); + DesignerFrame designerFrame = DesignerContext.getDesignerFrame(); + if (designerFrame == null) { + return null; + } + return designerFrame.getToolBarMenuDock(); } /** @@ -970,4 +984,23 @@ public class MultiTemplateTabPane extends Row { public Pair getViewRange() { return new Pair<>(minPaintIndex, maxPaintIndex); } + + /** + * 获取多模板工具按钮 + * + * @return 工具按钮 + */ + public UIToolbar getToolBar() { + return this.toolBar; + } + + /** + * 生成多模板工具按钮 + * @param toolBarDef + */ + public void updateMultiTemplateToolBar(ToolBarDef toolBarDef) { + toolBarDef.updateToolBar(getToolBar()); + LEADING_WIDTH = getToolBar().getComponentCount() * SINGLE_BUTTON_WIDTH; + getToolBar().setLayout(new FlowLayout(FlowLayout.LEFT, FineUIScale.scale(14), 0)); + } } diff --git a/designer-base/src/test/java/com/fr/design/gui/storybook/components/TemplateTabStoryBoard.java b/designer-base/src/test/java/com/fr/design/gui/storybook/components/TemplateTabStoryBoard.java index 31e2406682..4985296af6 100644 --- a/designer-base/src/test/java/com/fr/design/gui/storybook/components/TemplateTabStoryBoard.java +++ b/designer-base/src/test/java/com/fr/design/gui/storybook/components/TemplateTabStoryBoard.java @@ -1,11 +1,20 @@ package com.fr.design.gui.storybook.components; +import com.fine.theme.icon.LazyIcon; +import com.fr.design.actions.UpdateAction; import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.file.MultiTemplateTabPane; import com.fr.design.gui.storybook.Story; import com.fr.design.gui.storybook.StoryBoard; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.JWorkBook; +import com.fr.design.mainframe.toolbar.ToolBarMenuDock; +import com.fr.design.menu.ShortCut; import com.fr.value.NullableLazyValue; +import javax.swing.Icon; +import java.awt.event.ActionEvent; + /** * 新建模版Tab * @@ -29,7 +38,36 @@ public class TemplateTabStoryBoard extends StoryBoard { super("新建模版Tab"); init.getValue(); - add(MultiTemplateTabPane.getInstance()); + MultiTemplateTabPane multiTemplateTabPane = MultiTemplateTabPane.getInstance(); + multiTemplateTabPane.updateMultiTemplateToolBar(new ToolBarMenuDock() { + @Override + public ShortCut[] createNewFileShortCuts() { + return new ShortCut[0]; + } + + @Override + public ShortCut[] createNewTemplateShortCuts() { + return new ShortCut[]{new NewWorkBookToolBarAction()}; + } + }.createTemplateToolBarDef()); + multiTemplateTabPane.repaint(); + add(multiTemplateTabPane); + } + + public class NewWorkBookToolBarAction extends UpdateAction { + public NewWorkBookToolBarAction() { + this.setName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_M_New_WorkBook")); + this.setSmallIcon(icon()); + } + + protected Icon icon() { + return new LazyIcon("add_worksheet"); + } + + @Override + public void actionPerformed(ActionEvent e) { + DesignerContext.getDesignerFrame().addAndActivateJTemplate(new JWorkBook()); + } } 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 0b9d487209..301da77587 100644 --- a/designer-realize/src/main/java/com/fr/start/MainDesigner.java +++ b/designer-realize/src/main/java/com/fr/start/MainDesigner.java @@ -1,6 +1,7 @@ package com.fr.start; +import com.fanruan.gui.UiInspector; import com.fine.theme.icon.LazyIcon; import com.fr.base.function.UITerminator; import com.fr.base.vcs.DesignerMode; From b15b0f4df2dea471401be21f3971b1b196c2e715 Mon Sep 17 00:00:00 2001 From: lemon Date: Wed, 7 Aug 2024 20:59:21 +0800 Subject: [PATCH 4/7] =?UTF-8?q?REPORT-127437=20feat:=E7=BF=BB=E6=96=B0?= =?UTF-8?q?=E9=A2=84=E8=A7=88=E7=95=8C=E9=9D=A2=20&=20=E7=BA=B8=E5=BC=A0?= =?UTF-8?q?=E8=83=8C=E6=99=AF=EF=BC=8C=E6=B8=90=E5=8F=98=E8=89=B2=E5=B8=83?= =?UTF-8?q?=E5=B1=80=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/datapane/preview/CopyableJTable.java | 2 +- .../datapane/preview/PreviewTablePane.java | 33 +++++++++---------- .../view/PreviewTableDesensitizationPane.java | 15 +++++---- .../fr/design/gui/itable/SortableJTable.java | 1 + .../ColorBackgroundQuickPane.java | 2 ++ .../gradient/GradientBackgroundPane.java | 11 +++---- .../report/NewReportBackgroundPane.java | 29 +++++++--------- 7 files changed, 43 insertions(+), 50 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/preview/CopyableJTable.java b/designer-base/src/main/java/com/fr/design/data/datapane/preview/CopyableJTable.java index a452a4d371..65e4123b5c 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/preview/CopyableJTable.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/preview/CopyableJTable.java @@ -72,7 +72,7 @@ public class CopyableJTable extends SortableJTable { public CopyableJTable(TableSorter tableModel) { super(tableModel); initListener(); - this.getTableHeader().setDefaultRenderer(new CopyableTableHeaderCellRenderer(this.getTableHeader().getDefaultRenderer())); + setShowGrid(true); } private void initListener() { diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/preview/PreviewTablePane.java b/designer-base/src/main/java/com/fr/design/data/datapane/preview/PreviewTablePane.java index ffac1388c6..e062935f80 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/preview/PreviewTablePane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/preview/PreviewTablePane.java @@ -3,8 +3,9 @@ */ package com.fr.design.data.datapane.preview; +import com.fine.theme.icon.LazyIcon; +import com.fine.theme.utils.FineUIUtils; import com.fr.base.TableData; -import com.fr.base.svg.IconUtils; import com.fr.data.TableDataSource; import com.fr.data.desensitize.base.DesensitizationTableData; import com.fr.data.impl.DBTableData; @@ -67,6 +68,9 @@ import java.util.List; import java.util.Objects; import java.util.concurrent.CancellationException; +import static com.fine.swing.ui.layout.Layouts.cell; +import static com.fine.swing.ui.layout.Layouts.row; + /** * august: PreviewTablePane一共提供5个共有的静态方法,用来预览。 */ @@ -143,9 +147,9 @@ public class PreviewTablePane extends BasicPane { } private PreviewTablePane() { - this.setLayout(FRGUIPaneFactory.createBorderLayout()); + this.setLayout(new BorderLayout(0, 10)); // northPane - this.add(initNorthPane(), BorderLayout.NORTH); + this.add(FineUIUtils.wrapComponentWithTitle(initNorthPane(), Toolkit.i18nText("Fine-Design_Basic_Data")), BorderLayout.NORTH); // centerPane this.add(initCenterPane(), BorderLayout.CENTER); // dialog @@ -174,20 +178,14 @@ public class PreviewTablePane extends BasicPane { * @return */ private JComponent initPreviewNumberPane() { - JPanel previewNumberPanel = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); + JPanel previewNumberPanel = new JPanel(new BorderLayout()); // 当前行数 - JPanel currentPreviewPanel = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); - currentPreviewPanel.add(new UILabel(Toolkit.i18nText("Fine-Design_Basic_Current_Preview_Rows") + ":")); currentRowsField = new UINumberField(); - currentPreviewPanel.add(currentRowsField); currentRowsField.setEditable(false); currentRowsField.setColumns(4); currentRowsField.setInteger(true); // 最大行数 - JPanel maxPanel = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); - maxPanel.add(new UILabel(Toolkit.i18nText("Fine-Design_Basic_Datasource_Maximum_Number_of_Preview_Rows") + ":")); maxPreviewNumberField = new UINumberField(); - maxPanel.add(maxPreviewNumberField); maxPreviewNumberField.setColumns(4); maxPreviewNumberField.setInteger(true); maxPreviewNumberField.setValue(DesignerEnvManager.getEnvManager().getMaxNumberOrPreviewRow()); @@ -198,14 +196,17 @@ public class PreviewTablePane extends BasicPane { // 刷新按钮 initRefreshLabel(); - previewNumberPanel.add(currentPreviewPanel); - previewNumberPanel.add(maxPanel); - previewNumberPanel.add(refreshLabel); + previewNumberPanel.add(row(20, + row(4, cell(new UILabel(Toolkit.i18nText("Fine-Design_Basic_Current_Preview_Rows") + ":")), cell(currentRowsField)), + row(4, cell(new UILabel(Toolkit.i18nText("Fine-Design_Basic_Datasource_Maximum_Number_of_Preview_Rows") + ":")), cell(maxPreviewNumberField)), + cell(refreshLabel) + ).getComponent()); + return previewNumberPanel; } private void initRefreshLabel() { - Icon refreshImage = IconUtils.readIcon("/com/fr/design/images/control/refresh"); + Icon refreshImage = new LazyIcon("refresh"); refreshLabel = new UILabel(refreshImage); refreshLabel.addMouseListener(refreshLabelMouseAdapter); } @@ -434,7 +435,6 @@ public class PreviewTablePane extends BasicPane { */ public static EmbeddedTableData previewTableData(TableData tableData, final int keyIndex, final int valueIndex) { PreviewTablePane previewTablePane = new PreviewTablePane(); - previewTablePane.setBorder(BorderFactory.createTitledBorder(Toolkit.i18nText("Fine-Design_Basic_Data"))); try { previewTablePane.populate(tableData); previewTablePane.resetPreviewTableColumnColor(); @@ -646,7 +646,6 @@ public class PreviewTablePane extends BasicPane { public static void previewDataModel(final DataModel dataModel, final int keyIndex, final int valueIndex) { final PreviewTablePane previewTablePane = new PreviewTablePane(); previewTablePane.dataModel = dataModel; - previewTablePane.setBorder(BorderFactory.createTitledBorder(Toolkit.i18nText("Fine-Design_Basic_Data"))); try { previewTablePane.setRowsLimitTableModel(); @@ -675,8 +674,6 @@ public class PreviewTablePane extends BasicPane { // 单个结果集的展示面板 PreviewTablePane previewTablePane = new PreviewTablePane(); previewTablePane.dataModel = nameDataModel; - // 数据 - previewTablePane.setBorder(BorderFactory.createTitledBorder(Toolkit.i18nText("Fine-Design_Basic_Data"))); try { // 带行数限制的数据集结果预览对象 previewTablePane.setRowsLimitTableModel(); diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/PreviewTableDesensitizationPane.java b/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/PreviewTableDesensitizationPane.java index 01c92e333f..8cfdebd201 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/PreviewTableDesensitizationPane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/PreviewTableDesensitizationPane.java @@ -1,6 +1,6 @@ package com.fr.design.data.datapane.preview.desensitization.view; -import com.fr.base.svg.IconUtils; +import com.fine.theme.icon.LazyIcon; import com.fr.design.constants.UIConstants; import com.fr.design.data.datapane.preview.PreviewTablePane; import com.fr.design.gui.ibutton.UIToggleButton; @@ -12,11 +12,14 @@ import com.fr.design.menu.ToolBarDef; import javax.swing.Icon; import javax.swing.JPanel; +import java.awt.BorderLayout; import java.awt.Component; -import java.awt.FlowLayout; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; +import static com.fine.swing.ui.layout.Layouts.cell; +import static com.fine.swing.ui.layout.Layouts.row; + /** * 数据集预览-脱敏配置面板,主要展示当前脱敏开启状态、当前脱敏设定数量等 * @@ -56,10 +59,8 @@ public class PreviewTableDesensitizationPane extends JPanel { * 初始化面板 */ private void initComponents() { - this.setLayout(new FlowLayout(FlowLayout.LEFT)); - this.add(initDesensitizationLabel()); - this.add(initToolBar()); - this.add(initPreviewButton()); + this.setLayout(new BorderLayout()); + this.add(row(cell(initDesensitizationLabel()), cell(initToolBar()), cell(initPreviewButton())).getComponent()); } /** @@ -100,7 +101,7 @@ public class PreviewTableDesensitizationPane extends JPanel { * @return */ private UIToggleButton initPreviewButton() { - previewToggle = new UIToggleButton(new Icon[]{IconUtils.readIcon("/com/fr/design/images/m_file/preview"), IconUtils.readIcon("/com/fr/design/images/m_file/preview")}, true); + previewToggle = new UIToggleButton(new Icon[]{new LazyIcon("preview"), new LazyIcon("preview")}, true); previewToggle.setToolTipText(Toolkit.i18nText("Fine-Design_Report_Desensitization_Preview")); previewToggle.setSelected(false); previewToggle.addActionListener(e -> { diff --git a/designer-base/src/main/java/com/fr/design/gui/itable/SortableJTable.java b/designer-base/src/main/java/com/fr/design/gui/itable/SortableJTable.java index 71ffa8832e..fd22f74521 100644 --- a/designer-base/src/main/java/com/fr/design/gui/itable/SortableJTable.java +++ b/designer-base/src/main/java/com/fr/design/gui/itable/SortableJTable.java @@ -6,5 +6,6 @@ public class SortableJTable extends JTable{ public SortableJTable(TableSorter tableModel){ super(tableModel); tableModel.setTableHeader(getTableHeader()); + setShowGrid(true); } } \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/mainframe/backgroundpane/ColorBackgroundQuickPane.java b/designer-base/src/main/java/com/fr/design/mainframe/backgroundpane/ColorBackgroundQuickPane.java index 086a07da48..d0f8f88c93 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/backgroundpane/ColorBackgroundQuickPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/backgroundpane/ColorBackgroundQuickPane.java @@ -1,5 +1,6 @@ package com.fr.design.mainframe.backgroundpane; +import com.formdev.flatlaf.ui.FlatUIUtils; import com.fr.base.background.ColorBackground; import com.fr.design.event.UIObserverListener; import com.fr.design.layout.FRGUIPaneFactory; @@ -29,6 +30,7 @@ public class ColorBackgroundQuickPane extends BackgroundQuickPane { return false; } }; + colorSelectBox.setBackground(FlatUIUtils.getUIColor("background.normal", Color.WHITE)); this.add(colorSelectBox, BorderLayout.NORTH); } diff --git a/designer-base/src/main/java/com/fr/design/style/background/gradient/GradientBackgroundPane.java b/designer-base/src/main/java/com/fr/design/style/background/gradient/GradientBackgroundPane.java index 705a9f9eb9..ffd5588b8b 100644 --- a/designer-base/src/main/java/com/fr/design/style/background/gradient/GradientBackgroundPane.java +++ b/designer-base/src/main/java/com/fr/design/style/background/gradient/GradientBackgroundPane.java @@ -11,14 +11,11 @@ import com.fr.design.utils.gui.UIComponentUtils; import com.fr.design.widget.FRWidgetFactory; import com.fr.general.Background; -import javax.swing.BorderFactory; import javax.swing.ButtonGroup; import javax.swing.JPanel; -import javax.swing.SwingConstants; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import java.awt.BorderLayout; -import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -56,20 +53,20 @@ public class GradientBackgroundPane extends BackgroundDetailPane { toggle.add(top2bottom); JPanel jpanel = column( + 10, row( cell(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Drag_To_Select_Gradient"))), flex() ), - fix(100), row( - flex(), cell(gradientBar), flex() ), - fix(100), + fix(10), row( 5, cell(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Gradient_Direction") + ":")), + fix(20), cell(left2right), cell(top2bottom), flex() @@ -77,7 +74,7 @@ public class GradientBackgroundPane extends BackgroundDetailPane { ) ).getComponent(); - jpanel.setPreferredSize(FineUIScale.scale(new Dimension(600, 450))); + this.setLayout(new BorderLayout()); this.add(FineUIUtils.wrapComponentWithTitle(jpanel, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Style_Background_Choose_Gradient_Color"))); } diff --git a/designer-realize/src/main/java/com/fr/design/report/NewReportBackgroundPane.java b/designer-realize/src/main/java/com/fr/design/report/NewReportBackgroundPane.java index b8e2a8fb47..3f6a6d71bd 100644 --- a/designer-realize/src/main/java/com/fr/design/report/NewReportBackgroundPane.java +++ b/designer-realize/src/main/java/com/fr/design/report/NewReportBackgroundPane.java @@ -19,14 +19,12 @@ import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; -import com.fr.design.mainframe.theme.ui.BorderUtils; import com.fr.general.Background; import com.fr.page.ReportSettingsProvider; import com.fr.report.stable.ReportSettings; import javax.swing.BorderFactory; import javax.swing.JPanel; -import javax.swing.border.CompoundBorder; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; @@ -36,6 +34,9 @@ import java.awt.Graphics2D; import java.awt.Shape; import java.awt.geom.Rectangle2D; +import static com.fine.swing.ui.layout.Layouts.cell; +import static com.fine.swing.ui.layout.Layouts.column; + public class NewReportBackgroundPane extends BasicPane { private final UICheckBox isPrintBackgroundCheckBox; private final UICheckBox isExportBackgroundCheckBox; @@ -44,14 +45,12 @@ public class NewReportBackgroundPane extends BasicPane { public NewReportBackgroundPane() { setLayout(FRGUIPaneFactory.createBorderLayout()); setBorder(BorderFactory.createEmptyBorder()); - setPreferredSize(FineUIScale.scale(new Dimension(600, 570))); profilePane = new BackgroundProfilePane(); isPrintBackgroundCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Print_Background")); isExportBackgroundCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Export_Background")); - add(profilePane, BorderLayout.CENTER); - add(createBottomPane(), BorderLayout.SOUTH); + add(column(10, cell(profilePane).weight(1), cell(createBottomPane())).getComponent()); } private JPanel createBottomPane() { @@ -144,9 +143,9 @@ public class NewReportBackgroundPane extends BasicPane { } }); - JPanel contentContainer = Layouts.column( + JPanel contentContainer = column( 10, - Layouts.row(10, Layouts.cell(createLeftPane()), Layouts.cell(createRightPane())) + Layouts.row(10, cell(createLeftPane()).weight(1), cell(createRightPane())).weight(1) ).getComponent(); contentContainer.setPreferredSize(FineUIScale.scale(new Dimension(600, 540))); @@ -167,23 +166,19 @@ public class NewReportBackgroundPane extends BasicPane { } private JPanel createLeftPane() { - JPanel panel = new JPanel(); - panel.add(previewPane, BorderLayout.NORTH); - previewPane.setBorder(new FineRoundBorder()); - JPanel titledPane = Layouts.column( + JPanel panel = new JPanel(new BorderLayout()); + panel.add(previewPane, BorderLayout.CENTER); + + return column( 10, - Layouts.cell(new UILabel(Toolkit.i18nText("Fine-Design_Basic_Preview"))), - Layouts.cell(previewPane) + cell(new UILabel(Toolkit.i18nText("Fine-Design_Basic_Preview"))), + cell(panel).weight(1).with(it -> it.setBorder(new FineRoundBorder())) ).getComponent(); - previewPane.setPreferredSize(FineUIScale.scale(new Dimension(367, 480))); - - return titledPane; } private JPanel createRightPane() { JPanel container = FRGUIPaneFactory.createBorderLayout_S_Pane(); container.setBorder(BorderFactory.createEmptyBorder()); - container.setPreferredSize(FineUIScale.scale(new Dimension(263, 502))); container.add(themePane, BorderLayout.NORTH); return container; } From 92156ccebc9fa5a2dfb77464e1592c585a9edd50 Mon Sep 17 00:00:00 2001 From: lemon Date: Thu, 8 Aug 2024 10:23:19 +0800 Subject: [PATCH 5/7] =?UTF-8?q?REPORT-127437=20fix:=E7=BA=B8=E5=BC=A0?= =?UTF-8?q?=E8=83=8C=E6=99=AF=E5=B8=83=E5=B1=80=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/gui/style/FollowingThemePane.java | 3 ++- .../java/com/fr/design/report/NewReportBackgroundPane.java | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/gui/style/FollowingThemePane.java b/designer-base/src/main/java/com/fr/design/gui/style/FollowingThemePane.java index e464110b47..d4b7db8281 100644 --- a/designer-base/src/main/java/com/fr/design/gui/style/FollowingThemePane.java +++ b/designer-base/src/main/java/com/fr/design/gui/style/FollowingThemePane.java @@ -17,10 +17,10 @@ import com.fr.design.layout.TableLayoutHelper; import com.fr.design.mainframe.JTemplate; import com.fr.design.widget.FRWidgetFactory; -import javax.swing.BorderFactory; import javax.swing.JPanel; import java.awt.BorderLayout; import java.awt.Component; +import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; @@ -78,6 +78,7 @@ public class FollowingThemePane extends BasicPane implements UIObserver { TableLayoutHelper.createGapTableLayoutPane( new Component[][]{new Component[] { followingThemeLabel, FRGUIPaneFactory.createBorderLayoutNorthPaneWithComponent(followingThemeButtonGroup)}}, new double[] { p }, new double[] {FineUIScale.scale(SETTING_LABEL_WIDTH), f }, 10, 0); followingThemePane.setVisible(false); + followingThemePane.setPreferredSize(new Dimension(FineUIScale.scale(275), (int) followingThemePane.getPreferredSize().getHeight())); add(followingThemePane, BorderLayout.NORTH); container = FRGUIPaneFactory.createBorderLayout_S_Pane(); diff --git a/designer-realize/src/main/java/com/fr/design/report/NewReportBackgroundPane.java b/designer-realize/src/main/java/com/fr/design/report/NewReportBackgroundPane.java index 3f6a6d71bd..0aadbb2d63 100644 --- a/designer-realize/src/main/java/com/fr/design/report/NewReportBackgroundPane.java +++ b/designer-realize/src/main/java/com/fr/design/report/NewReportBackgroundPane.java @@ -121,7 +121,7 @@ public class NewReportBackgroundPane extends BasicPane { uiLabelPane.add(uiLabel, BorderLayout.NORTH); uiLabelPane.setBorder(new ScaledEmptyBorder(10, 0, 0, 0)); backgroundPane = new ReportBackgroundSpecialPane(); - backgroundPane.setBorder(new ScaledEmptyBorder(10, 0, 0, 10)); + backgroundPane.setBorder(new ScaledEmptyBorder(10, 0, 0, 0)); backgroundLabeledPane = TableLayoutHelper.createCommonTableLayoutPane( new Component[][]{ new Component[] { uiLabelPane, backgroundPane } }, new double[] { p }, new double[] { FineUIScale.scale(SETTING_LABEL_WIDTH), f}, IntervalConstants.INTERVAL_L1 From 4d9a70c9510ac4032ec34c3b5bf66dae4c50b064 Mon Sep 17 00:00:00 2001 From: lemon Date: Thu, 8 Aug 2024 11:13:44 +0800 Subject: [PATCH 6/7] =?UTF-8?q?REPORT-127437=20fix:=E3=80=90fvs=20?= =?UTF-8?q?=E9=80=82=E9=85=8D=E3=80=91=E6=A0=B9=E6=8D=AE=20mr=20=E6=84=8F?= =?UTF-8?q?=E8=A7=81=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../theme/light/ui/FineTemplateTabPaneUI.java | 10 +- .../template/NewWorkBookToolButtonAction.java | 12 +- .../datapane/preview/PreviewTablePane.java | 3 +- .../fr/design/file/MultiTemplateTabPane.java | 110 +++++++++++++----- ....java => MultiTemplateTabPaneHandler.java} | 24 +--- ... AbstractMultiTemplateTabPaneHandler.java} | 9 +- .../mainframe/toolbar/ToolBarMenuDock.java | 68 ----------- .../components/TemplateTabStoryBoard.java | 41 +------ .../toolbar/ToolBarMenuDockTest.java | 10 -- .../main/java/com/fr/start/MainDesigner.java | 11 -- 10 files changed, 105 insertions(+), 193 deletions(-) rename designer-realize/src/main/java/com/fr/design/actions/toolbar/multitemplate/NewWorkBookToolBarAction.java => designer-base/src/main/java/com/fr/design/actions/template/NewWorkBookToolButtonAction.java (71%) rename designer-base/src/main/java/com/fr/design/fun/{ToolBarHandler.java => MultiTemplateTabPaneHandler.java} (57%) rename designer-base/src/main/java/com/fr/design/fun/impl/{AbstractToolBarHandler.java => AbstractMultiTemplateTabPaneHandler.java} (69%) diff --git a/designer-base/src/main/java/com/fine/theme/light/ui/FineTemplateTabPaneUI.java b/designer-base/src/main/java/com/fine/theme/light/ui/FineTemplateTabPaneUI.java index f4dd3fbf7b..05225dd602 100644 --- a/designer-base/src/main/java/com/fine/theme/light/ui/FineTemplateTabPaneUI.java +++ b/designer-base/src/main/java/com/fine/theme/light/ui/FineTemplateTabPaneUI.java @@ -26,7 +26,7 @@ import java.awt.geom.Rectangle2D; import static com.fine.theme.utils.FineUIScale.scale; import static com.fine.theme.utils.FineUIUtils.paintRoundTabBorder; import static com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; -import static com.fr.design.file.MultiTemplateTabPane.LEADING_WIDTH; +import static com.fr.design.file.MultiTemplateTabPane.leadingWidth; import static com.fr.design.file.MultiTemplateTabPane.TRAILING_WIDTH; /** @@ -136,7 +136,7 @@ public class FineTemplateTabPaneUI extends PanelUI { @Override public void update(Graphics g, JComponent c) { super.update(g, c); - double maxWidth = c.getWidth() - scale(LEADING_WIDTH) - trailingWidth; + double maxWidth = c.getWidth() - scale(leadingWidth) - trailingWidth; Graphics2D g2d = (Graphics2D) g; paintDefaultBackground(g2d); paintPaneUnderLine(c.getWidth(), g2d); @@ -168,7 +168,7 @@ public class FineTemplateTabPaneUI extends PanelUI { if (tabPane.getSelectedIndex() < 0) { tabPane.setSelectedIndex(0); } - double templateStartX = scale(LEADING_WIDTH); + double templateStartX = scale(leadingWidth); //从可以开始展示在tab面板上的tab开始画 @@ -201,7 +201,7 @@ public class FineTemplateTabPaneUI extends PanelUI { private void paintSeparators(Graphics2D g2d) { g2d.setPaint(borderColor); - float x = scale(LEADING_WIDTH); + float x = scale(leadingWidth); Pair viewRange = tabPane.getViewRange(); for (int i = viewRange.getFirst(); i <= viewRange.getSecond(); i++) { if (i != tabPane.getSelectedIndex() @@ -214,7 +214,7 @@ public class FineTemplateTabPaneUI extends PanelUI { private void paintTrailingAction(Graphics2D g2d, double tabPaneWidth) { - int x = scale(LEADING_WIDTH) + (int) tabPaneWidth + (trailingWidth - moreAction.getIconWidth()) / 2; + int x = scale(leadingWidth) + (int) tabPaneWidth + (trailingWidth - moreAction.getIconWidth()) / 2; int y = (tabHeight - moreAction.getIconHeight()) / 2; if (tabPane.isHoverMoreAction()) { moreHoverAction.paintIcon(tabPane, g2d, x, y); diff --git a/designer-realize/src/main/java/com/fr/design/actions/toolbar/multitemplate/NewWorkBookToolBarAction.java b/designer-base/src/main/java/com/fr/design/actions/template/NewWorkBookToolButtonAction.java similarity index 71% rename from designer-realize/src/main/java/com/fr/design/actions/toolbar/multitemplate/NewWorkBookToolBarAction.java rename to designer-base/src/main/java/com/fr/design/actions/template/NewWorkBookToolButtonAction.java index 113d9418ce..15d7eaf9d1 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/toolbar/multitemplate/NewWorkBookToolBarAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/template/NewWorkBookToolButtonAction.java @@ -1,21 +1,21 @@ -package com.fr.design.actions.toolbar.multitemplate; +package com.fr.design.actions.template; import com.fine.theme.icon.LazyIcon; import com.fr.design.actions.UpdateAction; import com.fr.design.mainframe.DesignerContext; -import com.fr.design.mainframe.JWorkBook; import javax.swing.Icon; import java.awt.event.ActionEvent; /** + * 工具按钮 - 新建报表文件 + * * @author lemon * @since * Created on - * 新建报表文件 */ -public class NewWorkBookToolBarAction extends UpdateAction { - public NewWorkBookToolBarAction() { +public class NewWorkBookToolButtonAction extends UpdateAction { + public NewWorkBookToolButtonAction() { this.setName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_M_New_WorkBook")); this.setSmallIcon(icon()); } @@ -26,6 +26,6 @@ public class NewWorkBookToolBarAction extends UpdateAction { @Override public void actionPerformed(ActionEvent e) { - DesignerContext.getDesignerFrame().addAndActivateJTemplate(new JWorkBook()); + DesignerContext.getDesignerFrame().addAndActivateJTemplate(); } } diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/preview/PreviewTablePane.java b/designer-base/src/main/java/com/fr/design/data/datapane/preview/PreviewTablePane.java index e062935f80..ef7a81fb93 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/preview/PreviewTablePane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/preview/PreviewTablePane.java @@ -4,6 +4,7 @@ package com.fr.design.data.datapane.preview; import com.fine.theme.icon.LazyIcon; +import com.fine.theme.utils.FineUIScale; import com.fine.theme.utils.FineUIUtils; import com.fr.base.TableData; import com.fr.data.TableDataSource; @@ -147,7 +148,7 @@ public class PreviewTablePane extends BasicPane { } private PreviewTablePane() { - this.setLayout(new BorderLayout(0, 10)); + this.setLayout(new BorderLayout(0, FineUIScale.scale(10))); // northPane this.add(FineUIUtils.wrapComponentWithTitle(initNorthPane(), Toolkit.i18nText("Fine-Design_Basic_Data")), BorderLayout.NORTH); // centerPane diff --git a/designer-base/src/main/java/com/fr/design/file/MultiTemplateTabPane.java b/designer-base/src/main/java/com/fr/design/file/MultiTemplateTabPane.java index c463a8cc2c..dd318e311d 100644 --- a/designer-base/src/main/java/com/fr/design/file/MultiTemplateTabPane.java +++ b/designer-base/src/main/java/com/fr/design/file/MultiTemplateTabPane.java @@ -8,20 +8,23 @@ import com.fine.theme.utils.FineUIScale; import com.fine.theme.utils.FineUIStyle; import com.formdev.flatlaf.util.ScaledEmptyBorder; import com.fr.base.vcs.DesignerMode; +import com.fr.design.ExtraDesignClassManager; import com.fr.design.actions.UpdateAction; import com.fr.design.actions.file.LocateAction; +import com.fr.design.actions.template.NewWorkBookToolButtonAction; import com.fr.design.constants.UIConstants; import com.fr.design.dialog.FineJOptionPane; +import com.fr.design.fun.MenuHandler; +import com.fr.design.fun.MultiTemplateTabPaneHandler; import com.fr.design.gui.imenu.UIMenuItem; import com.fr.design.gui.imenu.UIPopupMenu; import com.fr.design.gui.imenu.UIScrollPopUpMenu; import com.fr.design.gui.itoolbar.UIToolbar; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.DesignerContext; -import com.fr.design.mainframe.DesignerFrame; import com.fr.design.mainframe.JTemplate; import com.fr.design.mainframe.manager.search.TemplateTreeSearchManager; -import com.fr.design.mainframe.toolbar.ToolBarMenuDock; +import com.fr.design.menu.ShortCut; import com.fr.design.menu.ToolBarDef; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.design.worker.WorkerManager; @@ -51,8 +54,10 @@ import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; +import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Set; import static com.fine.theme.utils.FineClientProperties.BUTTON_TYPE_TOOLBAR_BUTTON; import static com.fine.theme.utils.FineUIScale.scale; @@ -87,7 +92,8 @@ public class MultiTemplateTabPane extends Row { * 前导动作区宽度 * 最终宽度 = {@linkplain #SINGLE_BUTTON_WIDTH} * {@literal toolBar.getComponentCount()} */ - public static int LEADING_WIDTH = 38; + public static int leadingWidth; + // 每个按钮固定宽度大小 public static int SINGLE_BUTTON_WIDTH = 38; //每个标签页的最大的长度和最小长度。这些长度均为均分 @@ -122,7 +128,7 @@ public class MultiTemplateTabPane extends Row { private Icon clodeIcon = new LazyIcon("clear"); private boolean isShowList = false; private JButton leadingActionButton; - private final UIToolbar toolBar = new UIToolbar(); + private final UIToolbar leadingToolBar = new UIToolbar(); //自动新建的模板B若没有进行任何编辑,切换到其他 // @@ -185,12 +191,9 @@ public class MultiTemplateTabPane extends Row { } } }); - ToolBarMenuDock toolBarMenuDock = getToolBarMenuDock(); - if (toolBarMenuDock != null) { - updateMultiTemplateToolBar(getToolBarMenuDock().createTemplateToolBarDef()); - } + preProcessMultiTemplateTabPane(); add( - Layouts.cell(getToolBar()).with(it -> { + Layouts.cell(getLeadingToolBar()).with(it -> { it.putClientProperty(BUTTON_TYPE, BUTTON_TYPE_TOOLBAR_BUTTON); it.setOpaque(false); it.setBorder(new ScaledEmptyBorder(3, -7, 3, -7)); @@ -199,12 +202,8 @@ public class MultiTemplateTabPane extends Row { ); } - public ToolBarMenuDock getToolBarMenuDock() { - DesignerFrame designerFrame = DesignerContext.getDesignerFrame(); - if (designerFrame == null) { - return null; - } - return designerFrame.getToolBarMenuDock(); + private void preProcessMultiTemplateTabPane() { + updateLeadingToolBar(); } /** @@ -219,7 +218,7 @@ public class MultiTemplateTabPane extends Row { } public void setToolBarEnable(boolean enable) { - toolBar.setEnabled(enable); + leadingToolBar.setEnabled(enable); } @@ -505,7 +504,7 @@ public class MultiTemplateTabPane extends Row { @Override public void paintComponent(Graphics g) { - double maxWidth = getWidth() - scale(TRAILING_WIDTH) - scale(LEADING_WIDTH); //最大宽度 + double maxWidth = getWidth() - scale(TRAILING_WIDTH) - scale(leadingWidth); //最大宽度 int maxTemplateNum = (int) (maxWidth) / scale(MINWIDTH); calMinAndMaxIndex(maxTemplateNum); calculateRealAverageWidth(maxWidth, maxTemplateNum); @@ -515,7 +514,7 @@ public class MultiTemplateTabPane extends Row { private void calculateClosePosition() { startX = new int[maxPaintIndex - minPaintIndex + 1]; - double templateStartX = scale(LEADING_WIDTH); + double templateStartX = scale(leadingWidth); for (int i = getViewRange().getFirst(); i <= getViewRange().getSecond(); i++) { int closePosition = (int) templateStartX + getTabWidth() - clodeIcon.getIconWidth() - GAP; startX[i - minPaintIndex] = closePosition; @@ -703,7 +702,7 @@ public class MultiTemplateTabPane extends Row { private boolean isOverListDown(int evtX) { - int maxWidth = getWidth() - scale(LEADING_WIDTH); + int maxWidth = getWidth() - scale(leadingWidth); return evtX >= (maxWidth + SMALLGAP) && evtX <= (getWidth() - SMALLGAP); } @@ -715,13 +714,13 @@ public class MultiTemplateTabPane extends Row { */ private boolean isOverBlank(int evtX) { int tabWidths = (maxPaintIndex - minPaintIndex + 1) * tabWidth; - int leftX = tabWidths + scale(LEADING_WIDTH); + int leftX = tabWidths + scale(leadingWidth); return evtX >= leftX && evtX <= getWidth() - scale(TRAILING_WIDTH); } private int getTemplateIndex(int evtX) { - int textX = scale(LEADING_WIDTH); + int textX = scale(leadingWidth); for (int i = minPaintIndex; i <= maxPaintIndex; i++) { int textWidth = tabWidth; if (evtX >= textX && evtX < textX + textWidth) { @@ -986,21 +985,72 @@ public class MultiTemplateTabPane extends Row { } /** - * 获取多模板工具按钮 + * 获取前导区多模板工具按钮 * * @return 工具按钮 */ - public UIToolbar getToolBar() { - return this.toolBar; + public UIToolbar getLeadingToolBar() { + return this.leadingToolBar; + } + + /** + * 生成前导区多模板工具按钮 + */ + public void updateLeadingToolBar() { + createLeadingToolBarDef().updateToolBar(getLeadingToolBar()); + leadingWidth = getLeadingToolBar().getComponentCount() * SINGLE_BUTTON_WIDTH; + getLeadingToolBar().setLayout(new FlowLayout(FlowLayout.LEFT, FineUIScale.scale(14), 0)); + } + + /** + * 创建新建模板的前导区工具按钮 + * @return + */ + private ToolBarDef createLeadingToolBarDef() { + ToolBarDef toolBarDef = ShortCut.asToolBarDef(createNewTemplateShortCuts()); + insertLeadingToolButton(toolBarDef, MultiTemplateTabPaneHandler.LEADING_LOCATION); + return toolBarDef; + } + + /** + * 创建新建文件的按钮数组 + * @return + */ + public ShortCut[] createNewTemplateShortCuts() { + ArrayList shortCuts = new ArrayList(); + shortCuts.add(new NewWorkBookToolButtonAction()); + return shortCuts.toArray(new ShortCut[0]); } + /** - * 生成多模板工具按钮 - * @param toolBarDef + * 插入插件中的按钮 + * @return */ - public void updateMultiTemplateToolBar(ToolBarDef toolBarDef) { - toolBarDef.updateToolBar(getToolBar()); - LEADING_WIDTH = getToolBar().getComponentCount() * SINGLE_BUTTON_WIDTH; - getToolBar().setLayout(new FlowLayout(FlowLayout.LEFT, FineUIScale.scale(14), 0)); + protected void insertLeadingToolButton(ToolBarDef toolBarDef, String anchor) { + Set set = ExtraDesignClassManager.getInstance().getArray(MultiTemplateTabPaneHandler.MARK_STRING); + List target = new ArrayList<>(); + for (MultiTemplateTabPaneHandler handler : set) { + if (ComparatorUtils.equals(handler.category(), anchor)) { + target.add(handler); + } + } + + for (MultiTemplateTabPaneHandler handler : target) { + int insertPosition = handler.insertPosition(toolBarDef.getShortCutCount()); + if (insertPosition == MenuHandler.HIDE) { + return; + } + ShortCut shortCut = handler.shortcut(); + if (shortCut == null) { + continue; + } + + if (insertPosition == MenuHandler.LAST) { + toolBarDef.addShortCut(shortCut); + } else { + toolBarDef.insertShortCut(insertPosition, shortCut); + } + } } } diff --git a/designer-base/src/main/java/com/fr/design/fun/ToolBarHandler.java b/designer-base/src/main/java/com/fr/design/fun/MultiTemplateTabPaneHandler.java similarity index 57% rename from designer-base/src/main/java/com/fr/design/fun/ToolBarHandler.java rename to designer-base/src/main/java/com/fr/design/fun/MultiTemplateTabPaneHandler.java index a9e81e95d5..f14bf809ef 100644 --- a/designer-base/src/main/java/com/fr/design/fun/ToolBarHandler.java +++ b/designer-base/src/main/java/com/fr/design/fun/MultiTemplateTabPaneHandler.java @@ -4,14 +4,15 @@ import com.fr.design.menu.ShortCut; import com.fr.stable.fun.mark.Mutable; /** + * 设计器 Multi_template 按钮插件接口 + * * @author lemon * @since * Created on - * 设计器工具按钮插件接口 */ -public interface ToolBarHandler extends Mutable { +public interface MultiTemplateTabPaneHandler extends Mutable { - String MARK_STRING = "ToolBarHandler"; + String MARK_STRING = "MultiTemplateToolButtonHandler"; int CURRENT_LEVEL = 1; @@ -19,7 +20,8 @@ public interface ToolBarHandler extends Mutable { int LAST = -1; int HIDE =-2; - String MULTI_TEMPLATE = "multi_template"; + String LEADING_LOCATION = "leading_location"; + String TRAILING_LOCATION = "trailing_location"; /** * 插入工具按钮的位置 @@ -29,20 +31,6 @@ public interface ToolBarHandler extends Mutable { */ int insertPosition(int total); - /** - * 是否在插入的工具按钮前插入一个分割符 - * - * @return 是否插入分隔符 - */ - boolean insertSeparatorBefore(); - - /** - * 是否在插入的工具按钮后插入一个分割符 - * - * @return 是否插入分隔符 - */ - boolean insertSeparatorAfter(); - /** * 所属的工具按钮分类 * diff --git a/designer-base/src/main/java/com/fr/design/fun/impl/AbstractToolBarHandler.java b/designer-base/src/main/java/com/fr/design/fun/impl/AbstractMultiTemplateTabPaneHandler.java similarity index 69% rename from designer-base/src/main/java/com/fr/design/fun/impl/AbstractToolBarHandler.java rename to designer-base/src/main/java/com/fr/design/fun/impl/AbstractMultiTemplateTabPaneHandler.java index a0e7f67b8f..c13a2af584 100644 --- a/designer-base/src/main/java/com/fr/design/fun/impl/AbstractToolBarHandler.java +++ b/designer-base/src/main/java/com/fr/design/fun/impl/AbstractMultiTemplateTabPaneHandler.java @@ -1,18 +1,19 @@ package com.fr.design.fun.impl; -import com.fr.design.fun.ToolBarHandler; +import com.fr.design.fun.MultiTemplateTabPaneHandler; import com.fr.design.menu.ShortCut; import com.fr.stable.fun.impl.AbstractProvider; import com.fr.stable.fun.mark.API; /** + * 多模板工具按钮插件适配抽象类 + * * @author lemon * @since * Created on - * 工具按钮插件适配抽象类 */ -@API(level = ToolBarHandler.CURRENT_LEVEL) -public abstract class AbstractToolBarHandler extends AbstractProvider implements ToolBarHandler { +@API(level = MultiTemplateTabPaneHandler.CURRENT_LEVEL) +public abstract class AbstractMultiTemplateTabPaneHandler extends AbstractProvider implements MultiTemplateTabPaneHandler { /** * 当前接口的API等级,用于判断是否需要升级插件 * @return API等级 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 8716de2a35..b15e7f9ed6 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 @@ -49,7 +49,6 @@ import com.fr.design.fun.MenuHandler; import com.fr.design.fun.OemProcessor; import com.fr.design.fun.PluginManagerProvider; import com.fr.design.fun.TableDataPaneProcessor; -import com.fr.design.fun.ToolBarHandler; import com.fr.design.gui.UILookAndFeel; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ibutton.UICombinationButton; @@ -397,67 +396,6 @@ public abstract class ToolBarMenuDock { return plus.menus4Target(); } - /** - * 创建新建模板的工具按钮 - * @return - */ - public ToolBarDef createTemplateToolBarDef() { - ToolBarDef toolBarDef = ShortCut.asToolBarDef(createNewTemplateShortCuts()); - insertToolBar(toolBarDef, ToolBarHandler.MULTI_TEMPLATE); - return toolBarDef; - } - - /** - * 新增插件中的工具按钮 - * @return - */ - protected void insertToolBar(ToolBarDef toolBarDef, String anchor) { - Set set = ExtraDesignClassManager.getInstance().getArray(ToolBarHandler.MARK_STRING); - addExtraToolBar(toolBarDef, anchor, set); - - } - - private void addExtraToolBar(ToolBarDef toolBarDef, String anchor, Set set) { - List target = new ArrayList<>(); - for (ToolBarHandler handler : set) { - if (ComparatorUtils.equals(handler.category(), anchor)) { - target.add(handler); - } - } - - for (ToolBarHandler handler : target) { - int insertPosition = handler.insertPosition(toolBarDef.getShortCutCount()); - if (insertPosition == MenuHandler.HIDE) { - return; - } - ShortCut shortCut = handler.shortcut(); - if (shortCut == null) { - continue; - } - - insertSeparatorIfNeed(toolBarDef, handler, shortCut, insertPosition); - } - } - - private void insertSeparatorIfNeed(ToolBarDef toolBarDef, ToolBarHandler handler, ShortCut shortCut, int insertPosition) { - if (insertPosition == MenuHandler.LAST) { - if (handler.insertSeparatorBefore()) { - toolBarDef.addShortCut(SeparatorDef.DEFAULT); - } - toolBarDef.addShortCut(shortCut); - } else { - toolBarDef.insertShortCut(insertPosition, shortCut); - if (handler.insertSeparatorBefore()) { - toolBarDef.insertShortCut(insertPosition, SeparatorDef.DEFAULT); - insertPosition++; - } - if (handler.insertSeparatorAfter()) { - insertPosition++; - toolBarDef.insertShortCut(insertPosition, SeparatorDef.DEFAULT); - } - } - } - public MenuDef createFileMenuDef(ToolBarMenuDockPlus plus) { if (DesignerMode.isVcsMode()) { MenuDef menuDef = VcsScene.createFileMenuDef(plus); @@ -525,12 +463,6 @@ public abstract class ToolBarMenuDock { * @return 菜单 */ public abstract ShortCut[] createNewFileShortCuts(); - /** - * 创建新建文件的工具按钮 - * - * @return 工具按钮 - */ - public abstract ShortCut[] createNewTemplateShortCuts(); /** * 创建论坛登录面板, chart那边不需要 diff --git a/designer-base/src/test/java/com/fr/design/gui/storybook/components/TemplateTabStoryBoard.java b/designer-base/src/test/java/com/fr/design/gui/storybook/components/TemplateTabStoryBoard.java index 4985296af6..062bdf0ba2 100644 --- a/designer-base/src/test/java/com/fr/design/gui/storybook/components/TemplateTabStoryBoard.java +++ b/designer-base/src/test/java/com/fr/design/gui/storybook/components/TemplateTabStoryBoard.java @@ -1,20 +1,11 @@ package com.fr.design.gui.storybook.components; -import com.fine.theme.icon.LazyIcon; -import com.fr.design.actions.UpdateAction; import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.file.MultiTemplateTabPane; import com.fr.design.gui.storybook.Story; import com.fr.design.gui.storybook.StoryBoard; -import com.fr.design.mainframe.DesignerContext; -import com.fr.design.mainframe.JWorkBook; -import com.fr.design.mainframe.toolbar.ToolBarMenuDock; -import com.fr.design.menu.ShortCut; import com.fr.value.NullableLazyValue; -import javax.swing.Icon; -import java.awt.event.ActionEvent; - /** * 新建模版Tab * @@ -38,37 +29,7 @@ public class TemplateTabStoryBoard extends StoryBoard { super("新建模版Tab"); init.getValue(); - MultiTemplateTabPane multiTemplateTabPane = MultiTemplateTabPane.getInstance(); - multiTemplateTabPane.updateMultiTemplateToolBar(new ToolBarMenuDock() { - @Override - public ShortCut[] createNewFileShortCuts() { - return new ShortCut[0]; - } - - @Override - public ShortCut[] createNewTemplateShortCuts() { - return new ShortCut[]{new NewWorkBookToolBarAction()}; - } - }.createTemplateToolBarDef()); - multiTemplateTabPane.repaint(); - add(multiTemplateTabPane); + add(MultiTemplateTabPane.getInstance()); } - public class NewWorkBookToolBarAction extends UpdateAction { - public NewWorkBookToolBarAction() { - this.setName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_M_New_WorkBook")); - this.setSmallIcon(icon()); - } - - protected Icon icon() { - return new LazyIcon("add_worksheet"); - } - - @Override - public void actionPerformed(ActionEvent e) { - DesignerContext.getDesignerFrame().addAndActivateJTemplate(new JWorkBook()); - } - } - - } diff --git a/designer-base/src/test/java/com/fr/design/mainfarme/toolbar/ToolBarMenuDockTest.java b/designer-base/src/test/java/com/fr/design/mainfarme/toolbar/ToolBarMenuDockTest.java index 4441a9a388..a198dace8f 100644 --- a/designer-base/src/test/java/com/fr/design/mainfarme/toolbar/ToolBarMenuDockTest.java +++ b/designer-base/src/test/java/com/fr/design/mainfarme/toolbar/ToolBarMenuDockTest.java @@ -101,11 +101,6 @@ public class ToolBarMenuDockTest { public ShortCut[] createNewFileShortCuts() { return new ShortCut[0]; } - - @Override - public ShortCut[] createNewTemplateShortCuts() { - return new ShortCut[0]; - } }; ShortCut[] shortCuts = new ShortCut[] { @@ -159,11 +154,6 @@ public class ToolBarMenuDockTest { public ShortCut[] createNewFileShortCuts() { return new ShortCut[0]; } - - @Override - public ShortCut[] createNewTemplateShortCuts() { - return new ShortCut[0]; - } }; ShortCut[] shortCuts = new ShortCut[] { 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 301da77587..dccf53bbef 100644 --- a/designer-realize/src/main/java/com/fr/start/MainDesigner.java +++ b/designer-realize/src/main/java/com/fr/start/MainDesigner.java @@ -9,7 +9,6 @@ import com.fr.design.DesignerEnvManager; import com.fr.design.actions.file.WebPreviewUtils; import com.fr.design.actions.file.newReport.NewPolyReportAction; import com.fr.design.actions.file.newReport.NewWorkBookAction; -import com.fr.design.actions.toolbar.multitemplate.NewWorkBookToolBarAction; import com.fr.design.actions.server.ServerConfigManagerAction; import com.fr.design.actions.server.TemplateThemeManagerAction; import com.fr.design.actions.server.WidgetManagerAction; @@ -205,16 +204,6 @@ public class MainDesigner extends BaseDesigner { }); } - /** - * 创建新建文件的按钮数组。 - * @return - */ - public ShortCut[] createNewTemplateShortCuts() { - ArrayList shortCuts = new ArrayList(); - shortCuts.add(new NewWorkBookToolBarAction()); - return shortCuts.toArray(new ShortCut[0]); - } - /** * 创建新建文件的快捷方式数组。 * From 2e9a4c6ee102f7efe0c3bd9a2d6cb4e64babbe9e Mon Sep 17 00:00:00 2001 From: lemon Date: Thu, 8 Aug 2024 14:28:54 +0800 Subject: [PATCH 7/7] =?UTF-8?q?REPORT-127437=20feat:=E5=93=8D=E5=BA=94?= =?UTF-8?q?=E6=8F=92=E4=BB=B6=E5=AE=89=E8=A3=85=E5=8D=B8=E8=BD=BD=E4=BA=8B?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/file/MultiTemplateTabPane.java | 8 ++++++++ .../fr/design/mainframe/CenterRegionContainerPane.java | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/designer-base/src/main/java/com/fr/design/file/MultiTemplateTabPane.java b/designer-base/src/main/java/com/fr/design/file/MultiTemplateTabPane.java index dd318e311d..c68bb5dbab 100644 --- a/designer-base/src/main/java/com/fr/design/file/MultiTemplateTabPane.java +++ b/designer-base/src/main/java/com/fr/design/file/MultiTemplateTabPane.java @@ -202,6 +202,14 @@ public class MultiTemplateTabPane extends Row { ); } + /** + * 重置多工作簿面板 + */ + public void resetMultiTemplateTabPane() { + preProcessMultiTemplateTabPane(); + MultiTemplateTabPane.getInstance().repaint(); + } + private void preProcessMultiTemplateTabPane() { updateLeadingToolBar(); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/CenterRegionContainerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/CenterRegionContainerPane.java index f38e675b14..35ff25489f 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/CenterRegionContainerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/CenterRegionContainerPane.java @@ -121,6 +121,13 @@ public class CenterRegionContainerPane extends JPanel { plus.insertToCombineUpToolbar(combineUp); } + /** + * 重置多工作簿面板 + */ + private void resetMultiTemplateTablePane() { + MultiTemplateTabPane.getInstance().resetMultiTemplateTabPane(); + } + /** * 填充上工具栏的中的工具 @@ -219,6 +226,7 @@ public class CenterRegionContainerPane extends JPanel { */ protected void resetToolkitByPlus(ToolBarMenuDockPlus plus, ToolBarMenuDock ad, ToolKitConfigStrategy strategy) { + resetMultiTemplateTablePane(); resetCombineUpTooBar(ad.resetUpToolBar(plus), plus); if (toolbarComponent != null) {