Browse Source

KERNEL-10254 FVS表格编辑器改成表单报表块的表格编辑器

【问题原因】
将报表块表格编辑器等组件与JForm/XElementCase解耦,
方便fvs复用

【改动思路】
同上
feature/x
Starryi 3 years ago
parent
commit
37cbf75c64
  1. 7
      designer-base/src/main/java/com/fr/design/mainframe/BaseJForm.java
  2. 10
      designer-base/src/main/java/com/fr/design/mainframe/JDashboard.java
  3. 11
      designer-realize/src/main/java/com/fr/design/mainframe/form/FormElementCaseDesigner.java
  4. 21
      designer-realize/src/main/java/com/fr/design/mainframe/form/FormElementCasePaneDelegate.java
  5. 33
      designer-realize/src/main/java/com/fr/design/mainframe/form/FormReportComponentComposite.java
  6. 23
      designer-realize/src/main/java/com/fr/design/mainframe/form/FormTabPane.java

7
designer-base/src/main/java/com/fr/design/mainframe/BaseJForm.java

@ -10,7 +10,7 @@ import javax.swing.JComponent;
* Date: 13-7-15 * Date: 13-7-15
* Time: 上午10:28 * Time: 上午10:28
*/ */
public interface BaseJForm<T> extends JTemplateProvider<T> { public interface BaseJForm<T> extends JTemplateProvider<T>, JDashboard {
String XML_TAG = "JForm"; String XML_TAG = "JForm";
int FORM_TAB = 0; int FORM_TAB = 0;
@ -58,4 +58,9 @@ public interface BaseJForm<T> extends JTemplateProvider<T> {
* @param ecContainer ElementCase所在container * @param ecContainer ElementCase所在container
*/ */
void tabChanged(int index, FormElementCaseContainerProvider ecContainer); void tabChanged(int index, FormElementCaseContainerProvider ecContainer);
@Override
default void switchToDashBoardEditor() {
tabChanged(FORM_TAB);
}
} }

10
designer-base/src/main/java/com/fr/design/mainframe/JDashboard.java

@ -0,0 +1,10 @@
package com.fr.design.mainframe;
/**
* @author Starryi
* @version 1.0
* Created by Starryi on 2022/3/1
*/
public interface JDashboard {
void switchToDashBoardEditor();
}

11
designer-realize/src/main/java/com/fr/design/mainframe/form/FormElementCaseDesigner.java

@ -30,6 +30,7 @@ import com.fr.design.selection.SelectableElement;
import com.fr.design.selection.Selectedable; import com.fr.design.selection.Selectedable;
import com.fr.design.selection.SelectionListener; import com.fr.design.selection.SelectionListener;
import com.fr.form.FormElementCaseProvider; import com.fr.form.FormElementCaseProvider;
import com.fr.form.fit.common.LightTool;
import com.fr.form.main.Form; import com.fr.form.main.Form;
import com.fr.grid.Grid; import com.fr.grid.Grid;
import com.fr.grid.selection.CellSelection; import com.fr.grid.selection.CellSelection;
@ -69,8 +70,12 @@ public class FormElementCaseDesigner
} }
public FormElementCaseDesigner(T sheet, Form form) { public FormElementCaseDesigner(T sheet, Form form) {
this(sheet, form.getFormMobileAttr().isMobileOnly(), LightTool.containNewFormFlag(form));
}
public FormElementCaseDesigner(T sheet, boolean isMobileOnly, boolean isNewForm) {
super(sheet); super(sheet);
elementCasePane = initElementCasePane(sheet, form); elementCasePane = initElementCasePane(sheet, isMobileOnly, isNewForm);
this.setLayout(FRGUIPaneFactory.createBorderLayout()); this.setLayout(FRGUIPaneFactory.createBorderLayout());
elementCasePane.setSelection(getDefaultSelectElement()); elementCasePane.setSelection(getDefaultSelectElement());
this.add(elementCasePane, BorderLayout.CENTER); this.add(elementCasePane, BorderLayout.CENTER);
@ -84,8 +89,8 @@ public class FormElementCaseDesigner
} }
protected FormElementCasePaneDelegate initElementCasePane(T sheet, Form form){ protected FormElementCasePaneDelegate initElementCasePane(T sheet, boolean isMobileOnly, boolean isNewForm){
return new FormElementCasePaneDelegate((FormElementCase) sheet, form); return new FormElementCasePaneDelegate((FormElementCase) sheet, isMobileOnly, isNewForm);
} }
@Override @Override

21
designer-realize/src/main/java/com/fr/design/mainframe/form/FormElementCasePaneDelegate.java

@ -9,6 +9,7 @@ import com.fr.design.actions.form.FormECFrozenAction;
import com.fr.design.designer.creator.XElementCase; import com.fr.design.designer.creator.XElementCase;
import com.fr.design.event.TargetModifiedEvent; import com.fr.design.event.TargetModifiedEvent;
import com.fr.design.event.TargetModifiedListener; import com.fr.design.event.TargetModifiedListener;
import com.fr.design.file.HistoryTemplateListCache;
import com.fr.design.fit.NewUIModeCellElementPainter; import com.fr.design.fit.NewUIModeCellElementPainter;
import com.fr.design.fit.common.FormDesignerUtil; import com.fr.design.fit.common.FormDesignerUtil;
import com.fr.design.gui.frpane.HyperlinkGroupPane; import com.fr.design.gui.frpane.HyperlinkGroupPane;
@ -40,13 +41,16 @@ import java.awt.Rectangle;
*/ */
public class FormElementCasePaneDelegate extends ElementCasePane<FormElementCase>{ public class FormElementCasePaneDelegate extends ElementCasePane<FormElementCase>{
public FormElementCasePaneDelegate(FormElementCase sheet, Form form) { public FormElementCasePaneDelegate(FormElementCase sheet, Form form) {
this(sheet, form.getFormMobileAttr().isMobileOnly(), LightTool.containNewFormFlag(form));
}
public FormElementCasePaneDelegate(FormElementCase sheet, boolean isMobileOnly, boolean isNewForm) {
super(sheet); super(sheet);
this.getGrid().setPaginateLineShowType(form.getFormMobileAttr().isMobileOnly() this.getGrid().setPaginateLineShowType(isMobileOnly
? Grid.SINGLE_HORIZONTAL_PAGINATE_LINE ? Grid.SINGLE_HORIZONTAL_PAGINATE_LINE
: Grid.NO_PAGINATE_LINE); : Grid.NO_PAGINATE_LINE);
if (LightTool.containNewFormFlag(form)){ if (isNewForm){
this.getGrid().setCellElementPainter(new NewUIModeCellElementPainter()); this.getGrid().setCellElementPainter(new NewUIModeCellElementPainter());
} }
this.addSelectionChangeListener(new SelectionListener() { this.addSelectionChangeListener(new SelectionListener() {
@ -68,8 +72,17 @@ public class FormElementCasePaneDelegate extends ElementCasePane<FormElementCase
} }
private Rectangle getBoundsLineRect(TemplateElementCase elementCase) { private Rectangle getBoundsLineRect(TemplateElementCase elementCase) {
FormDesigner designer = WidgetPropertyPane.getInstance().getEditingFormDesigner();
final Rectangle rectangle = new Rectangle(); final Rectangle rectangle = new Rectangle();
JTemplate<?, ?> template = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate();
if (!(template instanceof JForm)) {
return rectangle;
}
FormDesigner designer = ((JForm) template).getFormDesign();
if (designer == null) {
return rectangle;
}
XElementCase xElementCase = FormDesignerUtil.getXelementCase(designer.getRootComponent(), (FormElementCase) elementCase); XElementCase xElementCase = FormDesignerUtil.getXelementCase(designer.getRootComponent(), (FormElementCase) elementCase);
if (xElementCase != null) { if (xElementCase != null) {
rectangle.setBounds(xElementCase.getBounds()); rectangle.setBounds(xElementCase.getBounds());

33
designer-realize/src/main/java/com/fr/design/mainframe/form/FormReportComponentComposite.java

@ -2,7 +2,6 @@ package com.fr.design.mainframe.form;
import com.fr.base.DynamicUnitList; import com.fr.base.DynamicUnitList;
import com.fr.base.ScreenResolution; import com.fr.base.ScreenResolution;
import com.fr.common.inputevent.InputEventBaseOnOS;
import com.fr.design.cell.bar.DynamicScrollBar; import com.fr.design.cell.bar.DynamicScrollBar;
import com.fr.design.event.TargetModifiedEvent; import com.fr.design.event.TargetModifiedEvent;
import com.fr.design.event.TargetModifiedListener; import com.fr.design.event.TargetModifiedListener;
@ -11,9 +10,11 @@ import com.fr.design.mainframe.BaseJForm;
import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.DesignerContext;
import com.fr.design.mainframe.DesignerUIModeConfig; import com.fr.design.mainframe.DesignerUIModeConfig;
import com.fr.design.mainframe.ElementCasePane; import com.fr.design.mainframe.ElementCasePane;
import com.fr.design.mainframe.JDashboard;
import com.fr.design.mainframe.JForm;
import com.fr.design.mainframe.JFormSliderPane; import com.fr.design.mainframe.JFormSliderPane;
import com.fr.design.mainframe.ReportComponent; import com.fr.design.mainframe.JTemplate;
import com.fr.design.mainframe.ReportComponentCompositeMouseWheelHandler; import com.fr.design.mainframe.JTemplateProvider;
import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus;
import com.fr.form.FormElementCaseContainerProvider; import com.fr.form.FormElementCaseContainerProvider;
import com.fr.form.FormElementCaseProvider; import com.fr.form.FormElementCaseProvider;
@ -24,11 +25,11 @@ import com.fr.report.worksheet.FormElementCase;
import com.fr.stable.AssistUtils; import com.fr.stable.AssistUtils;
import com.fr.stable.Constants; import com.fr.stable.Constants;
import javax.swing.*; import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener; import javax.swing.event.ChangeListener;
import java.awt.*; import java.awt.BorderLayout;
import java.awt.event.*;
/** /**
* 整个FormElementCase编辑区域 包括滚动条中间的grid或者聚合块下面的sheetTab * 整个FormElementCase编辑区域 包括滚动条中间的grid或者聚合块下面的sheetTab
@ -40,19 +41,19 @@ public class FormReportComponentComposite extends JComponent implements TargetMo
private static final int MIN = 10; private static final int MIN = 10;
private static final int DIR = 10; private static final int DIR = 10;
private static final double MIN_TIME = 0.4; private static final double MIN_TIME = 0.4;
public FormElementCaseDesigner elementCaseDesigner; public final FormElementCaseDesigner elementCaseDesigner;
private BaseJForm jForm; private final JTemplateProvider jTemplate;
private FormTabPane sheetNameTab; private final FormTabPane sheetNameTab;
private JPanel hbarContainer; private JPanel hbarContainer;
private JFormSliderPane jSliderContainer; private JFormSliderPane jSliderContainer;
public FormReportComponentComposite(BaseJForm jform, FormElementCaseDesigner elementCaseDesign, FormElementCaseContainerProvider ecContainer) { public FormReportComponentComposite(JTemplateProvider jTemplate, JDashboard jDashboard, FormElementCaseDesigner<?,?,?> elementCaseDesign, String ecContainerName) {
this.jForm = jform; this.jTemplate = jTemplate;
this.setLayout(FRGUIPaneFactory.createBorderLayout()); this.setLayout(FRGUIPaneFactory.createBorderLayout());
this.elementCaseDesigner = elementCaseDesign; this.elementCaseDesigner = elementCaseDesign;
this.add(elementCaseDesigner, BorderLayout.CENTER); this.add(elementCaseDesigner, BorderLayout.CENTER);
sheetNameTab = new FormTabPane(ecContainer, jform); sheetNameTab = new FormTabPane(ecContainerName, jDashboard);
this.add(createSouthControlPane(), BorderLayout.SOUTH); this.add(createSouthControlPane(), BorderLayout.SOUTH);
jSliderContainer.addValueChangeListener(showValSpinnerChangeListener); jSliderContainer.addValueChangeListener(showValSpinnerChangeListener);
this.elementCaseDesigner.elementCasePane.getGrid().addMouseWheelListener(new FormReportComponentCompositeMouseWheelHandler(this)); this.elementCaseDesigner.elementCasePane.getGrid().addMouseWheelListener(new FormReportComponentCompositeMouseWheelHandler(this));
@ -60,6 +61,10 @@ public class FormReportComponentComposite extends JComponent implements TargetMo
this.jSliderContainer.setShowValue((ScreenResolution.getScreenResolution() * HUND) / Constants.DEFAULT_WEBWRITE_AND_SCREEN_RESOLUTION); this.jSliderContainer.setShowValue((ScreenResolution.getScreenResolution() * HUND) / Constants.DEFAULT_WEBWRITE_AND_SCREEN_RESOLUTION);
} }
public FormReportComponentComposite(BaseJForm jform, FormElementCaseDesigner elementCaseDesign, FormElementCaseContainerProvider ecContainer) {
this(jform, jform, elementCaseDesign, ecContainer.getElementCaseContainerName());
}
ChangeListener showValSpinnerChangeListener = new ChangeListener() { ChangeListener showValSpinnerChangeListener = new ChangeListener() {
@Override @Override
public void stateChanged(ChangeEvent e) { public void stateChanged(ChangeEvent e) {
@ -167,7 +172,7 @@ public class FormReportComponentComposite extends JComponent implements TargetMo
} }
public void setComposite() { public void setComposite() {
DesignerContext.getDesignerFrame().resetToolkitByPlus((ToolBarMenuDockPlus) jForm); DesignerContext.getDesignerFrame().resetToolkitByPlus((ToolBarMenuDockPlus) jTemplate);
this.validate(); this.validate();
this.repaint(40); this.repaint(40);
} }
@ -182,7 +187,7 @@ public class FormReportComponentComposite extends JComponent implements TargetMo
* 模板更新 * 模板更新
*/ */
public void fireTargetModified() { public void fireTargetModified() {
jForm.fireTargetModified(); jTemplate.fireTargetModified();
} }
public JFormSliderPane getSliderContainer() { public JFormSliderPane getSliderContainer() {

23
designer-realize/src/main/java/com/fr/design/mainframe/form/FormTabPane.java

@ -5,6 +5,7 @@ import com.fr.base.GraphHelper;
import com.fr.design.constants.UIConstants; import com.fr.design.constants.UIConstants;
import com.fr.design.mainframe.BaseJForm; import com.fr.design.mainframe.BaseJForm;
import com.fr.design.mainframe.JDashboard;
import com.fr.form.FormElementCaseContainerProvider; import com.fr.form.FormElementCaseContainerProvider;
@ -27,8 +28,8 @@ public class FormTabPane extends JComponent implements MouseListener, MouseMotio
private static final int GAP = 5; //间隔 private static final int GAP = 5; //间隔
private BaseJForm form; private JDashboard jDashboard;
private FormElementCaseContainerProvider elementCase; private final String elementCaseContainerName;
//选了30度和60度的特殊角度的x,y作为经过的两个点的坐标 //选了30度和60度的特殊角度的x,y作为经过的两个点的坐标
private double specialLocation1 = 2.5; private double specialLocation1 = 2.5;
@ -48,8 +49,12 @@ public class FormTabPane extends JComponent implements MouseListener, MouseMotio
private int selectedIndex = -1; private int selectedIndex = -1;
public FormTabPane(FormElementCaseContainerProvider elementCase, BaseJForm form){ public FormTabPane(FormElementCaseContainerProvider elementCase, BaseJForm form){
this.elementCase = elementCase; this(elementCase.getElementCaseContainerName(), form);
this.form = form; }
public FormTabPane(String elementCaseContainerName, JDashboard jDashboard){
this.elementCaseContainerName = elementCaseContainerName;
this.jDashboard = jDashboard;
this.setLayout(new BorderLayout(0, 0)); this.setLayout(new BorderLayout(0, 0));
this.addMouseListener(this); this.addMouseListener(this);
this.addMouseMotionListener(this); this.addMouseMotionListener(this);
@ -57,12 +62,16 @@ public class FormTabPane extends JComponent implements MouseListener, MouseMotio
this.setForeground(new Color(99, 99, 99)); this.setForeground(new Color(99, 99, 99));
} }
public String getElementCaseContainerName() {
return elementCaseContainerName;
}
public void paintComponent(Graphics g){ public void paintComponent(Graphics g){
super.paintComponent(g); super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g; Graphics2D g2d = (Graphics2D) g;
calculateECWidth(); calculateECWidth();
paintFormTab(g2d, 0, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Form"), POLY_SHEET_ICON); paintFormTab(g2d, 0, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Form"), POLY_SHEET_ICON);
paintECTab(g2d, formTabWidth, elementCase.getElementCaseContainerName(), WORK_SHEET_ICON); paintECTab(g2d, formTabWidth, getElementCaseContainerName(), WORK_SHEET_ICON);
} }
/** /**
@ -165,7 +174,7 @@ public class FormTabPane extends JComponent implements MouseListener, MouseMotio
private void calculateECWidth() { private void calculateECWidth() {
FontMetrics fm = GraphHelper.getFontMetrics(this.getFont()); FontMetrics fm = GraphHelper.getFontMetrics(this.getFont());
int charWidth = fm.charWidth('M'); int charWidth = fm.charWidth('M');
String ECName = elementCase.getElementCaseContainerName(); String ECName = getElementCaseContainerName();
ecTabWidth = Math.max(ecTabWidth,fm.stringWidth(ECName) + charWidth * 2 + ADD_WIDTH_BY_SHEETNAME) ; ecTabWidth = Math.max(ecTabWidth,fm.stringWidth(ECName) + charWidth * 2 + ADD_WIDTH_BY_SHEETNAME) ;
} }
@ -177,7 +186,7 @@ public class FormTabPane extends JComponent implements MouseListener, MouseMotio
public void mouseClicked(MouseEvent e) { public void mouseClicked(MouseEvent e) {
selectedIndex = getTabIndex(e.getX()); selectedIndex = getTabIndex(e.getX());
if (selectedIndex == FORM_INDEX) { if (selectedIndex == FORM_INDEX) {
form.tabChanged(FORM_INDEX); jDashboard.switchToDashBoardEditor();
} }
repaint(); repaint();
} }

Loading…
Cancel
Save