package com.fr.widgettheme.theme.panel; import com.fr.base.CellBorderSourceFlag; import com.fr.base.theme.ReportTheme; import com.fr.base.theme.TemplateTheme; import com.fr.base.theme.settings.ThemedCellStyleList; import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.theme.preview.ThemePreviewed; import com.fr.design.mainframe.theme.preview.UINoOpaquePanel; import com.fr.design.mainframe.theme.preview.ecpreview.AbstractECPreviewPane; import com.fr.design.mainframe.theme.preview.ecpreview.cell.AbstractPreviewCell; import com.fr.design.mainframe.theme.preview.ecpreview.cell.CornerPreviewCell; import com.fr.design.mainframe.theme.preview.ecpreview.cell.PreviewCell; import javax.swing.BorderFactory; import javax.swing.JPanel; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.Point; import java.awt.geom.Point2D; import java.util.ArrayList; import java.util.List; /** * 主题界面report里的那个表格,做了简单修改,削减了几行重复内容,腾出控件参数面板的空间 * * @author John.Ying * @since 1.0 * Created on 2021/3/18 */ public class WidgetThemeECReportPreviewPane extends UINoOpaquePanel implements ThemePreviewed { private final List headerTitleCellList = new ArrayList<>(); // 大标题样式单元格 private final List headerCellList = new ArrayList<>(); // 表头样式单元格 private final List titleCellList = new ArrayList<>(); // 小标题样式单元格 private final List contentCellList = new ArrayList<>(); // 正文样式单元格 private final List highLightCellList = new ArrayList<>(); // 高亮文本样式单元格 private final List assistCellList = new ArrayList<>(); // 辅助信息样式单元格 private static final int CONTENT_ROW_COUNT = 3; private static final int COL_COUNT = 3; private final PreviewPane previewPane; public WidgetThemeECReportPreviewPane() { this.setLayout(FRGUIPaneFactory.createBorderLayout()); previewPane = new PreviewPane(); this.add(previewPane, BorderLayout.CENTER); } @Override public void refresh(ReportTheme theme) { previewPane.refresh(theme); } class PreviewPane extends AbstractECPreviewPane { public PreviewPane() { this.setPreferredSize(new Dimension(517, 208)); this.setBorder(BorderFactory.createEmptyBorder(5, 10, 5, 10)); this.setLayout(FRGUIPaneFactory.createBorderLayout()); JPanel northPane = createNorthPane(); JPanel centerPane = createCenterPane(); JPanel southPane = createSouthPane(); this.add(northPane, BorderLayout.NORTH); this.add(centerPane, BorderLayout.CENTER); this.add(southPane, BorderLayout.SOUTH); } private JPanel createNorthPane() { JPanel northPane = FRGUIPaneFactory.createBorderLayout_NO_Opaque_Pane(); AbstractPreviewCell bigTitleCell = new PreviewCell(Toolkit.i18nText("Fine-Design_Basic_Template_Theme_Profile_Pane_Cell_Style_Big_Title")); bigTitleCell.setBorderSourceFlag(CellBorderSourceFlag.ALL_BORDER_SOURCE_OUTER); bigTitleCell.setPreferredSize(new Dimension(615, 46)); headerTitleCellList.add(bigTitleCell); northPane.add(bigTitleCell, BorderLayout.NORTH); CornerPreviewCell cornerCell = createCornerPreviewCell(); titleCellList.add(cornerCell); northPane.add(cornerCell, BorderLayout.WEST); JPanel centerPane = FRGUIPaneFactory.createBorderLayout_NO_Opaque_Pane(); northPane.add(centerPane, BorderLayout.CENTER); PreviewCell cell = new PreviewCell(Toolkit.i18nText("Fine-Design_Basic_Predefined_Style_Small_Title")); cell.setBorderSourceFlag(CellBorderSourceFlag.ALL_BORDER_SOURCE_OUTER); titleCellList.add(cell); cell.setPreferredSize(new Dimension(308, 38)); centerPane.add(cell, BorderLayout.NORTH); JPanel eastSouthPane = new UINoOpaquePanel(new GridLayout()); for (int c = 0; c < CONTENT_ROW_COUNT; c++) { PreviewCell headerCell = createPreviewCellHeader(c); headerCellList.add(headerCell); eastSouthPane.add(headerCell); } centerPane.add(eastSouthPane, BorderLayout.CENTER); return northPane; } /** * 创建CornerPreviewCell */ private CornerPreviewCell createCornerPreviewCell() { CornerPreviewCell cornerCell = new CornerPreviewCell(new String[]{Toolkit.i18nText("Fine-Design_Basic_Column_Name"), Toolkit.i18nText("Fine-Design_Basic_Template_Theme_Profile_Pane_EC_Data"), Toolkit.i18nText("Fine-Design_Basic_Template_Theme_Profile_Pane_Row_Name")}, new Point2D[]{new Point(159, 71), new Point(225, 49)}); cornerCell.setBorderSourceFlag(CellBorderSourceFlag.INVALID_BORDER_SOURCE); cornerCell.setPreferredSize(new Dimension(225, 71)); return cornerCell; } /** * 创建预览单元格标题 * * @param c 文本行数 * @return PreviewCell */ private PreviewCell createPreviewCellHeader(int c) { PreviewCell headerCell = new PreviewCell(Toolkit.i18nText("Fine-Design_Basic_Predefined_Style_Header")); int flag = CellBorderSourceFlag.ALL_BORDER_SOURCE_OUTER; if (c > 0) { flag |= CellBorderSourceFlag.LEFT_BORDER_SOURCE_INNER; } if (c < CONTENT_ROW_COUNT - 1) { flag |= CellBorderSourceFlag.RIGHT_BORDER_SOURCE_INNER; } headerCell.setBorderSourceFlag(flag); return headerCell; } private JPanel createCenterPane() { JPanel centerPane = FRGUIPaneFactory.createBorderLayout_NO_Opaque_Pane(); JPanel westPane = FRGUIPaneFactory.createBorderLayout_NO_Opaque_Pane(); centerPane.add(westPane, BorderLayout.WEST); PreviewCell cell1 = new PreviewCell(Toolkit.i18nText("Fine-Design_Basic_Predefined_Style_Small_Title")); titleCellList.add(cell1); cell1.setPreferredSize(new Dimension(112, 93)); westPane.add(cell1, BorderLayout.WEST); JPanel gridPane = createGridPane(); westPane.add(gridPane, BorderLayout.CENTER); JPanel innerCenterPane = new UINoOpaquePanel(new GridLayout(3, 3)); centerPane.add(innerCenterPane, BorderLayout.CENTER); for (int i = 0; i < COL_COUNT*CONTENT_ROW_COUNT; i++) { PreviewCell cell ; int r = i / CONTENT_ROW_COUNT; int c = i % CONTENT_ROW_COUNT; if (c == CONTENT_ROW_COUNT - 1) { cell = createPreviewCellHighlight(r); highLightCellList.add(cell); } else { cell = createPreviewCellMain(r, c); contentCellList.add(cell); } cell.setPreferredSize(new Dimension(123, 31)); innerCenterPane.add(cell); } return centerPane; } /** * 创建高亮预览单元格 * * @param r 计算标志位 * @return 单元格 */ private PreviewCell createPreviewCellHighlight(int r) { PreviewCell cell = new PreviewCell(Toolkit.i18nText("Fine-Design_Basic_Predefined_Style_Highlight_Text")); int flag = CellBorderSourceFlag.ALL_BORDER_SOURCE_OUTER; if (r != 0) { flag |= CellBorderSourceFlag.TOP_BORDER_SOURCE_INNER; } if (r != COL_COUNT - 1) { flag |= CellBorderSourceFlag.BOTTOM_BORDER_SOURCE_INNER; } cell.setBorderSourceFlag(flag); return cell; } /** * 创建正文预览单元格 * * @param r 计算标志位 * @param c 计算标志位 * @return 单元格 */ private PreviewCell createPreviewCellMain(int r, int c) { PreviewCell cell = new PreviewCell(Toolkit.i18nText("Fine-Design_Basic_Predefined_Style_Main_Text")); int flag = CellBorderSourceFlag.ALL_BORDER_SOURCE_OUTER; if (r > 0) { flag |= CellBorderSourceFlag.TOP_BORDER_SOURCE_INNER; } if (r < COL_COUNT - 1) { flag |= CellBorderSourceFlag.BOTTOM_BORDER_SOURCE_INNER; } if (c > 0) { flag |= CellBorderSourceFlag.LEFT_BORDER_SOURCE_INNER; } if (c < 1) { flag |= CellBorderSourceFlag.RIGHT_BORDER_SOURCE_INNER; } cell.setBorderSourceFlag(flag); return cell; } private JPanel createGridPane() { int rowCount = 3; int columnCount = 1; JPanel gridPane = new UINoOpaquePanel(new GridLayout(rowCount, columnCount)); for (int r = 0; r < rowCount; r++) { PreviewCell cell = new PreviewCell(Toolkit.i18nText("Fine-Design_Basic_Predefined_Style_Header")); int flag = CellBorderSourceFlag.ALL_BORDER_SOURCE_OUTER; if (r > 0) { flag |= CellBorderSourceFlag.TOP_BORDER_SOURCE_INNER; } if (r < COL_COUNT - 1) { flag |= CellBorderSourceFlag.BOTTOM_BORDER_SOURCE_INNER; } cell.setBorderSourceFlag(flag); cell.setPreferredSize(new Dimension(113, 31)); headerCellList.add(cell); gridPane.add(cell); } return gridPane; } private JPanel createSouthPane(){ JPanel southPane = FRGUIPaneFactory.createBorderLayout_NO_Opaque_Pane(); PreviewCell assistCell = new PreviewCell(Toolkit.i18nText("Fine-Design_Basic_Predefined_Style_Assist_Text")); assistCell.setBorderSourceFlag(CellBorderSourceFlag.ALL_BORDER_SOURCE_OUTER); assistCell.setPreferredSize(new Dimension(123, 30)); assistCellList.add(assistCell); southPane.add(assistCell, BorderLayout.CENTER); return southPane; } @Override public void refresh(TemplateTheme theme) { ThemedCellStyleList cellStyleConfig = theme.getCellStyleList(); refresh(headerTitleCellList, cellStyleConfig.getUse4BigTitle()); refresh(headerCellList, cellStyleConfig.getUse4Header()); refresh(contentCellList, cellStyleConfig.getUse4MainText()); refresh(titleCellList, cellStyleConfig.getUse4SmallTitle()); refresh(highLightCellList, cellStyleConfig.getUse4HighlightText()); refresh(assistCellList, cellStyleConfig.getUse4SupportInfo()); } } }