You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
248 lines
11 KiB
248 lines
11 KiB
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<ReportTheme> { |
|
private final List<AbstractPreviewCell> headerTitleCellList = new ArrayList<>(); // 大标题样式单元格 |
|
private final List<AbstractPreviewCell> headerCellList = new ArrayList<>(); // 表头样式单元格 |
|
private final List<AbstractPreviewCell> titleCellList = new ArrayList<>(); // 小标题样式单元格 |
|
private final List<AbstractPreviewCell> contentCellList = new ArrayList<>(); // 正文样式单元格 |
|
private final List<AbstractPreviewCell> highLightCellList = new ArrayList<>(); // 高亮文本样式单元格 |
|
private final List<AbstractPreviewCell> 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()); |
|
} |
|
} |
|
} |