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..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; /** @@ -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(leadingWidth) - 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(leadingWidth); //从可以开始展示在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(leadingWidth); 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(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-base/src/main/java/com/fr/design/actions/template/NewWorkBookToolButtonAction.java b/designer-base/src/main/java/com/fr/design/actions/template/NewWorkBookToolButtonAction.java new file mode 100644 index 0000000000..15d7eaf9d1 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/actions/template/NewWorkBookToolButtonAction.java @@ -0,0 +1,31 @@ +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 javax.swing.Icon; +import java.awt.event.ActionEvent; + +/** + * 工具按钮 - 新建报表文件 + * + * @author lemon + * @since + * Created on + */ +public class NewWorkBookToolButtonAction extends UpdateAction { + public NewWorkBookToolButtonAction() { + 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(); + } +} 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..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 @@ -3,8 +3,10 @@ */ 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.base.svg.IconUtils; import com.fr.data.TableDataSource; import com.fr.data.desensitize.base.DesensitizationTableData; import com.fr.data.impl.DBTableData; @@ -67,6 +69,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 +148,9 @@ public class PreviewTablePane extends BasicPane { } private PreviewTablePane() { - this.setLayout(FRGUIPaneFactory.createBorderLayout()); + this.setLayout(new BorderLayout(0, FineUIScale.scale(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 +179,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 +197,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 +436,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 +647,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 +675,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/file/MultiTemplateTabPane.java b/designer-base/src/main/java/com/fr/design/file/MultiTemplateTabPane.java index ef9fb8fcc6..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 @@ -4,20 +4,28 @@ 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.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.gui.ibutton.UIButton; +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.JTemplate; import com.fr.design.mainframe.manager.search.TemplateTreeSearchManager; +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; import com.fr.design.worker.save.CallbackSaveWorker; @@ -39,14 +47,17 @@ 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; 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; @@ -79,8 +90,11 @@ public class MultiTemplateTabPane extends Row { /** * 前导动作区宽度 + * 最终宽度 = {@linkplain #SINGLE_BUTTON_WIDTH} * {@literal toolBar.getComponentCount()} */ - public static final int LEADING_WIDTH = 38; + public static int leadingWidth; + // 每个按钮固定宽度大小 + public static int SINGLE_BUTTON_WIDTH = 38; //每个标签页的最大的长度和最小长度。这些长度均为均分 @@ -114,6 +128,7 @@ public class MultiTemplateTabPane extends Row { private Icon clodeIcon = new LazyIcon("clear"); private boolean isShowList = false; private JButton leadingActionButton; + private final UIToolbar leadingToolBar = new UIToolbar(); //自动新建的模板B若没有进行任何编辑,切换到其他 // @@ -176,16 +191,29 @@ public class MultiTemplateTabPane extends Row { } } }); + preProcessMultiTemplateTabPane(); add( - Layouts.cell(new UIButton(new LazyIcon("add_worksheet"))).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)); FineUIStyle.setStyle(it, BUTTON_TAB_ACTION); - it.setFocusPainted(false); - leadingActionButton = it; }) ); } + /** + * 重置多工作簿面板 + */ + public void resetMultiTemplateTabPane() { + preProcessMultiTemplateTabPane(); + MultiTemplateTabPane.getInstance().repaint(); + } + + private void preProcessMultiTemplateTabPane() { + updateLeadingToolBar(); + } + /** * 为前导动作添加监听 * @@ -197,8 +225,8 @@ public class MultiTemplateTabPane extends Row { leadingActionButton.addActionListener(newTemplateAction); } - public void setLeadingActionEnable(boolean enable) { - leadingActionButton.setEnabled(enable); + public void setToolBarEnable(boolean enable) { + leadingToolBar.setEnabled(enable); } @@ -484,7 +512,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); @@ -494,7 +522,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; @@ -682,7 +710,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); } @@ -694,13 +722,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) { @@ -963,4 +991,74 @@ public class MultiTemplateTabPane extends Row { public Pair getViewRange() { return new Pair<>(minPaintIndex, maxPaintIndex); } + + /** + * 获取前导区多模板工具按钮 + * + * @return 工具按钮 + */ + 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]); + } + + + /** + * 插入插件中的按钮 + * @return + */ + 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/MultiTemplateTabPaneHandler.java b/designer-base/src/main/java/com/fr/design/fun/MultiTemplateTabPaneHandler.java new file mode 100644 index 0000000000..f14bf809ef --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/fun/MultiTemplateTabPaneHandler.java @@ -0,0 +1,47 @@ +package com.fr.design.fun; + +import com.fr.design.menu.ShortCut; +import com.fr.stable.fun.mark.Mutable; + +/** + * 设计器 Multi_template 按钮插件接口 + * + * @author lemon + * @since + * Created on + */ +public interface MultiTemplateTabPaneHandler extends Mutable { + + String MARK_STRING = "MultiTemplateToolButtonHandler"; + + int CURRENT_LEVEL = 1; + + + int LAST = -1; + int HIDE =-2; + + String LEADING_LOCATION = "leading_location"; + String TRAILING_LOCATION = "trailing_location"; + + /** + * 插入工具按钮的位置 + * + * @param total 插入的位置 + * @return 插入位置,如果想放到最后,则返回-1 + */ + int insertPosition(int total); + + /** + * 所属的工具按钮分类 + * + * @return 分类工具按钮名 + */ + String category(); + + /** + * 具体的工具按钮项内容 + * + * @return 工具按钮项内容 + */ + ShortCut shortcut(); +} diff --git a/designer-base/src/main/java/com/fr/design/fun/impl/AbstractMultiTemplateTabPaneHandler.java b/designer-base/src/main/java/com/fr/design/fun/impl/AbstractMultiTemplateTabPaneHandler.java new file mode 100644 index 0000000000..c13a2af584 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/fun/impl/AbstractMultiTemplateTabPaneHandler.java @@ -0,0 +1,38 @@ +package com.fr.design.fun.impl; + +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 = MultiTemplateTabPaneHandler.CURRENT_LEVEL) +public abstract class AbstractMultiTemplateTabPaneHandler extends AbstractProvider implements MultiTemplateTabPaneHandler { + /** + * 当前接口的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/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/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-base/src/main/java/com/fr/design/mainframe/CenterRegionContainerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/CenterRegionContainerPane.java index 99a57b5b9f..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 @@ -93,8 +93,6 @@ public class CenterRegionContainerPane extends JPanel { private MultiTemplateTabPane initTemplateTabPane() { MultiTemplateTabPane templateTabPane = MultiTemplateTabPane.getInstance(); - templateTabPane.addLeadingAction(e -> - DesignerContext.getDesignerFrame().addAndActivateJTemplate()); return templateTabPane; } @@ -123,6 +121,13 @@ public class CenterRegionContainerPane extends JPanel { plus.insertToCombineUpToolbar(combineUp); } + /** + * 重置多工作簿面板 + */ + private void resetMultiTemplateTablePane() { + MultiTemplateTabPane.getInstance().resetMultiTemplateTabPane(); + } + /** * 填充上工具栏的中的工具 @@ -221,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) { @@ -275,7 +281,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/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/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/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()) { 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/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-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..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 @@ -32,5 +32,4 @@ public class TemplateTabStoryBoard extends StoryBoard { add(MultiTemplateTabPane.getInstance()); } - } 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..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 @@ -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() { @@ -122,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 @@ -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; }