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.
412 lines
18 KiB
412 lines
18 KiB
package com.fr.design.parameter; |
|
|
|
import com.fr.base.BaseUtils; |
|
import com.fr.design.ExtraDesignClassManager; |
|
import com.fr.design.beans.BasicBeanPane; |
|
import com.fr.design.data.DataCreatorUI; |
|
import com.fr.design.designer.IntervalConstants; |
|
import com.fr.design.designer.creator.CRPropertyDescriptor; |
|
import com.fr.design.designer.creator.PropertyGroupPane; |
|
import com.fr.design.designer.creator.XCreator; |
|
import com.fr.design.designer.creator.XWParameterLayout; |
|
import com.fr.design.designer.properties.PropertyTab; |
|
import com.fr.design.file.HistoryTemplateListPane; |
|
import com.fr.design.fit.common.TemplateTool; |
|
import com.fr.design.foldablepane.UIExpandablePane; |
|
import com.fr.design.fun.ParameterExpandablePaneUIProvider; |
|
import com.fr.design.fun.WidgetAdvancedPaneProvider; |
|
import com.fr.design.gui.ibutton.UIButtonGroup; |
|
import com.fr.design.gui.icheckbox.UICheckBox; |
|
import com.fr.design.gui.ilable.UILabel; |
|
import com.fr.design.gui.ispinner.UISpinner; |
|
import com.fr.design.gui.itextfield.UITextField; |
|
import com.fr.design.layout.FRGUIPaneFactory; |
|
import com.fr.design.layout.TableLayout; |
|
import com.fr.design.layout.TableLayoutHelper; |
|
import com.fr.design.mainframe.DesignerUIModeConfig; |
|
import com.fr.design.mainframe.FormDesigner; |
|
import com.fr.design.mainframe.FormSelection; |
|
import com.fr.design.mainframe.JTemplate; |
|
import com.fr.design.mainframe.widget.accessibles.AccessibleBackgroundEditor; |
|
import com.fr.design.widgettheme.processor.WidgetThemeParaCreatorPaneAdder; |
|
import com.fr.design.utils.gui.LayoutUtils; |
|
import com.fr.design.utils.gui.UIComponentUtils; |
|
import com.fr.design.widget.ui.designer.AbstractDataModify; |
|
import com.fr.design.widget.ui.designer.component.UIBoundSpinner; |
|
import com.fr.form.ui.container.WParameterLayout; |
|
import com.fr.general.Background; |
|
import com.fr.general.GeneralContext; |
|
import com.fr.plugin.observer.PluginEvent; |
|
import com.fr.plugin.observer.PluginEventListener; |
|
import com.fr.report.stable.FormConstants; |
|
|
|
import javax.swing.BorderFactory; |
|
import javax.swing.Icon; |
|
import javax.swing.JCheckBox; |
|
import javax.swing.JPanel; |
|
import java.awt.BorderLayout; |
|
import java.awt.Component; |
|
import java.awt.Rectangle; |
|
import java.util.ArrayList; |
|
import java.util.List; |
|
import java.util.Set; |
|
|
|
/** |
|
* Created by ibm on 2017/8/2. |
|
*/ |
|
public class RootDesignDefinePane extends AbstractDataModify<WParameterLayout> { |
|
private XWParameterLayout root; |
|
private UISpinner designerWidth; |
|
private UISpinner paraHeight; |
|
private UICheckBox displayReport; |
|
private UICheckBox useParamsTemplate; |
|
private JCheckBox fireAfterEditor; |
|
private AccessibleBackgroundEditor background; |
|
private UIButtonGroup hAlignmentPane; |
|
private UITextField labelNameTextField; |
|
//是否是新设计模式下决策报表 |
|
private boolean newForm; |
|
private PropertyGroupPane extraPropertyGroupPane; |
|
protected final List<BasicBeanPane<WParameterLayout>> extraPaneList = new ArrayList<>(); |
|
private JPanel backgroundPane; |
|
|
|
public RootDesignDefinePane(XCreator xCreator) { |
|
super(xCreator); |
|
newForm = TemplateTool.getCurrentEditingNewJForm() != null && DesignerUIModeConfig.getInstance().simulateWebUIMode(); |
|
this.root = (XWParameterLayout) xCreator; |
|
initComponent(); |
|
} |
|
|
|
|
|
public void initComponent() { |
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
|
if (newForm) { |
|
paraHeight = new UIBoundSpinner(0, Integer.MAX_VALUE, 1, 0); |
|
} else { |
|
designerWidth = new UIBoundSpinner(1, Integer.MAX_VALUE, 1); |
|
} |
|
JPanel advancePane = createAdvancePane(); |
|
UIExpandablePane advanceExpandablePane = new UIExpandablePane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Advanced"), 280, 20, advancePane); |
|
this.add(advanceExpandablePane, BorderLayout.NORTH); |
|
JPanel layoutPane = createBoundsPane(); |
|
UIExpandablePane layoutExpandablePane = new UIExpandablePane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Size"), 280, 20, layoutPane); |
|
this.add(layoutExpandablePane, BorderLayout.CENTER); |
|
this.addExtraUIExpandablePaneFromPlugin(); |
|
} |
|
|
|
private void addExtraUIExpandablePaneFromPlugin() { |
|
Set<ParameterExpandablePaneUIProvider> pluginCreators = ExtraDesignClassManager.getInstance().getArray(ParameterExpandablePaneUIProvider.XML_TAG); |
|
JPanel panel = FRGUIPaneFactory.createYBoxEmptyBorderPane(); |
|
for (ParameterExpandablePaneUIProvider provider : pluginCreators) { |
|
UIExpandablePane uiExpandablePane = provider.createUIExpandablePane(); |
|
PropertyTab propertyTab = provider.addToWhichPropertyTab(); |
|
if (uiExpandablePane != null && propertyTab == PropertyTab.ATTR) { |
|
panel.add(uiExpandablePane); |
|
} |
|
} |
|
this.add(panel, BorderLayout.SOUTH); |
|
} |
|
|
|
public JPanel createBoundsPane() { |
|
double f = TableLayout.FILL; |
|
double p = TableLayout.PREFERRED; |
|
double[] rowSize = {p}; |
|
double[] columnSize = {p, f}; |
|
int[][] rowCount = {{1, 1}}; |
|
Component[] component = newForm ? new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Designer_Fit_Design_Height")), paraHeight} : |
|
new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Desin_Width")), designerWidth}; |
|
Component[][] components = new Component[][]{component}; |
|
JPanel panel = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, IntervalConstants.INTERVAL_W1, IntervalConstants.INTERVAL_L1); |
|
JPanel jPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
|
panel.setBorder(BorderFactory.createEmptyBorder(10, 0, 10, 0)); |
|
jPanel.add(panel); |
|
return jPanel; |
|
} |
|
|
|
public JPanel createAdvancePane() { |
|
if (newForm) { |
|
return getNewFormAdvancePane(); |
|
} else { |
|
return getTemplateAdvancePane(); |
|
} |
|
} |
|
|
|
/** |
|
* @param |
|
* @Description: 获取的非新决策报表AdvancePane |
|
* @return: |
|
* @Author: Henry.Wang |
|
* @date: 2020/11/05 15:36 |
|
*/ |
|
private JPanel getTemplateAdvancePane() { |
|
JPanel jPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
|
labelNameTextField = new UITextField(); |
|
displayReport = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Display_Nothing_Before_Query")); |
|
UIComponentUtils.setLineWrap(displayReport); |
|
useParamsTemplate = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Use_Params_Template")); |
|
fireAfterEditor = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Trigger_Editing_End_Event")); |
|
fireAfterEditor.setEnabled(false); |
|
fireAfterEditor.setBorder(BorderFactory.createEmptyBorder(0, 30, 0, 0)); |
|
useParamsTemplate.addChangeListener(e -> { |
|
boolean isSelected = ((UICheckBox) e.getSource()).isSelected(); |
|
fireAfterEditor.setEnabled(isSelected); |
|
if (!isSelected) { |
|
fireAfterEditor.setSelected(false); |
|
} |
|
}); |
|
Icon[] hAlignmentIconArray = {BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/h_left_normal.png"), |
|
BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/h_center_normal.png"), |
|
BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/h_right_normal.png"),}; |
|
Integer[] hAlignment = new Integer[]{FormConstants.LEFTPOSITION, FormConstants.CENTERPOSITION, FormConstants.RIGHTPOSITION}; |
|
hAlignmentPane = new UIButtonGroup<Integer>(hAlignmentIconArray, hAlignment); |
|
hAlignmentPane.setAllToolTips(new String[]{com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_StyleAlignment_Left") |
|
, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_StyleAlignment_Center"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_StyleAlignment_Right")}); |
|
backgroundPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
|
this.initExtraPane(); |
|
double f = TableLayout.FILL; |
|
double p = TableLayout.PREFERRED; |
|
double[] rowSize = {p, p, p, p, p, p}; |
|
double[] columnSize = {p, f}; |
|
int[][] rowCount = {{1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}}; |
|
Component[][] components = new Component[][]{ |
|
new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Label_Name")), labelNameTextField}, |
|
new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Base_Background")), backgroundPane}, |
|
new Component[]{displayReport, null}, |
|
new Component[]{useParamsTemplate, null}, |
|
new Component[]{fireAfterEditor, null}, |
|
new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Widget_Display_Position")), hAlignmentPane} |
|
}; |
|
JPanel panel = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, IntervalConstants.INTERVAL_W0, IntervalConstants.INTERVAL_L1); |
|
panel.setBorder(BorderFactory.createEmptyBorder(IntervalConstants.INTERVAL_L1, 0, IntervalConstants.INTERVAL_L1, 0)); |
|
CRPropertyDescriptor[] extraTableEditor = new CRPropertyDescriptor[0]; |
|
extraTableEditor = root.getExtraTableEditor(); |
|
extraPropertyGroupPane = new PropertyGroupPane(extraTableEditor, root); |
|
|
|
jPanel.add(panel, BorderLayout.NORTH); |
|
jPanel.add(extraPropertyGroupPane, BorderLayout.CENTER); |
|
return jPanel; |
|
} |
|
|
|
private void initExtraPane() { |
|
initPluginListener(); |
|
refreshExtraAdvancedPane(); |
|
} |
|
|
|
private void initPluginListener() { |
|
GeneralContext.listenPluginRunningChanged(new PluginEventListener() { |
|
@Override |
|
public void on(PluginEvent event) { |
|
refreshExtraAdvancedPane(); |
|
} |
|
}, pluginContext -> pluginContext.getRuntime().contain(WidgetAdvancedPaneProvider.XML_TAG)); |
|
} |
|
|
|
private void refreshExtraAdvancedPane() { |
|
extraPaneList.clear(); |
|
backgroundPane.removeAll(); |
|
WidgetThemeParaCreatorPaneAdder.add(creator, extraPaneList); |
|
Set<WidgetAdvancedPaneProvider<WParameterLayout>> providers = ExtraDesignClassManager.getInstance().getArray(WidgetAdvancedPaneProvider.XML_TAG); |
|
for (WidgetAdvancedPaneProvider<WParameterLayout> provider : providers) { |
|
if (!provider.accept(creator)) { |
|
continue; |
|
} |
|
insertShortCut(provider.getInsertPosition(extraPaneList.size()), provider.createExtraAdvancedPane()); |
|
} |
|
if (extraPaneList.isEmpty()) { |
|
if (background == null) { |
|
background = new AccessibleBackgroundEditor(); |
|
} |
|
backgroundPane.add(background); |
|
} else { |
|
for (BasicBeanPane<WParameterLayout> pane : extraPaneList) { |
|
backgroundPane.add(pane); |
|
} |
|
} |
|
} |
|
|
|
/** |
|
* 插入配置项面板 |
|
* |
|
* @param index 插入的位置 |
|
* @param pane 配置项面板 |
|
*/ |
|
public void insertShortCut(int index, BasicBeanPane<WParameterLayout> pane) { |
|
int size = extraPaneList.size(); |
|
index = Math.min(index, size); |
|
extraPaneList.add(index, pane); |
|
} |
|
|
|
/** |
|
* @param |
|
* @Description: 获取新决策报表的AdvancePane |
|
* @return: |
|
* @Author: Henry.Wang |
|
* @date: 2020/11/05 15:36 |
|
*/ |
|
private JPanel getNewFormAdvancePane() { |
|
JPanel jPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
|
labelNameTextField = new UITextField(); |
|
displayReport = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Display_Nothing_Before_Query")); |
|
UIComponentUtils.setLineWrap(displayReport); |
|
useParamsTemplate = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Use_Params_Template")); |
|
fireAfterEditor = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Trigger_Editing_End_Event")); |
|
fireAfterEditor.setEnabled(false); |
|
fireAfterEditor.setBorder(BorderFactory.createEmptyBorder(0, 30, 0, 0)); |
|
useParamsTemplate.addChangeListener(e -> { |
|
boolean isSelected = ((UICheckBox) e.getSource()).isSelected(); |
|
fireAfterEditor.setEnabled(isSelected); |
|
if (!isSelected) { |
|
fireAfterEditor.setSelected(false); |
|
} |
|
}); |
|
backgroundPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
|
this.initExtraPane(); |
|
double f = TableLayout.FILL; |
|
double p = TableLayout.PREFERRED; |
|
double[] rowSize = {p, p, p, p, p}; |
|
double[] columnSize = {p, f}; |
|
int[][] rowCount = {{1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}}; |
|
Component[][] components = new Component[][]{ |
|
new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Label_Name")), labelNameTextField}, |
|
new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Base_Background")), backgroundPane}, |
|
new Component[]{displayReport, null}, |
|
new Component[]{useParamsTemplate, null}, |
|
new Component[]{fireAfterEditor, null}, |
|
}; |
|
JPanel panel = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, IntervalConstants.INTERVAL_W0, IntervalConstants.INTERVAL_L1); |
|
panel.setBorder(BorderFactory.createEmptyBorder(IntervalConstants.INTERVAL_L1, 0, IntervalConstants.INTERVAL_L1, 0)); |
|
|
|
jPanel.add(panel, BorderLayout.NORTH); |
|
|
|
return jPanel; |
|
} |
|
|
|
@Override |
|
public String title4PopupWindow() { |
|
return "parameter"; |
|
} |
|
|
|
@Override |
|
public void populateBean(WParameterLayout ob) { |
|
labelNameTextField.setText(ob.getLabelName()); |
|
if (extraPaneList.isEmpty()) { |
|
background.setValue(ob.getBackground()); |
|
} else { |
|
for (BasicBeanPane<WParameterLayout> pane : extraPaneList) { |
|
pane.populateBean(ob); |
|
} |
|
} |
|
displayReport.setSelected(ob.isDelayDisplayContent()); |
|
useParamsTemplate.setSelected(ob.isUseParamsTemplate()); |
|
fireAfterEditor.setEnabled(ob.isUseParamsTemplate()); |
|
fireAfterEditor.setSelected(ob.isParamsFireStopEdit()); |
|
if (newForm) { |
|
FormDesigner designer = TemplateTool.getCurrentEditingNewJForm().getFormDesign(); |
|
paraHeight.setValue(designer.getParaHeight()); |
|
} else { |
|
designerWidth.setValue(ob.getDesignWidth()); |
|
hAlignmentPane.setSelectedItem(ob.getPosition()); |
|
|
|
if (extraPropertyGroupPane != null) { |
|
extraPropertyGroupPane.populate(ob); |
|
} |
|
} |
|
} |
|
|
|
|
|
@Override |
|
public WParameterLayout updateBean() { |
|
if (newForm) { |
|
return updateNewFormBean(); |
|
} else { |
|
return updateTemplateBean(); |
|
} |
|
} |
|
|
|
/** |
|
* @param |
|
* @Description: 更新非新决策报表的bean |
|
* @return: |
|
* @Author: Henry.Wang |
|
* @date: 2020/11/05 15:36 |
|
*/ |
|
private WParameterLayout updateTemplateBean() { |
|
WParameterLayout wParameterLayout = (WParameterLayout) creator.toData(); |
|
wParameterLayout.setLabelName(labelNameTextField.getText()); |
|
if (isCompsOutOfDesignerWidth((int) designerWidth.getValue())) { |
|
designerWidth.setValue(wParameterLayout.getDesignWidth()); |
|
} else { |
|
wParameterLayout.setDesignWidth((int) designerWidth.getValue()); |
|
} |
|
wParameterLayout.setDelayDisplayContent(displayReport.isSelected()); |
|
wParameterLayout.setUseParamsTemplate(useParamsTemplate.isSelected()); |
|
wParameterLayout.setParamsFireStopEdit(fireAfterEditor.isSelected()); |
|
JTemplate jTemplate = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); |
|
jTemplate.needAddTemplateIdAttr(useParamsTemplate.isSelected()); |
|
wParameterLayout.setPosition((Integer) hAlignmentPane.getSelectedItem()); |
|
if (extraPaneList.isEmpty()) { |
|
wParameterLayout.setBackground((Background) background.getValue()); |
|
} else { |
|
for (BasicBeanPane<WParameterLayout> pane : extraPaneList) { |
|
pane.updateBean(wParameterLayout); |
|
} |
|
} |
|
return wParameterLayout; |
|
} |
|
|
|
/** |
|
* @param |
|
* @Description: 更新新决策报表的bean |
|
* @return: |
|
* @Author: Henry.Wang |
|
* @date: 2020/11/05 15:36 |
|
*/ |
|
private WParameterLayout updateNewFormBean() { |
|
WParameterLayout wParameterLayout = (WParameterLayout) creator.toData(); |
|
wParameterLayout.setLabelName(labelNameTextField.getText()); |
|
|
|
wParameterLayout.setDelayDisplayContent(displayReport.isSelected()); |
|
wParameterLayout.setUseParamsTemplate(useParamsTemplate.isSelected()); |
|
wParameterLayout.setParamsFireStopEdit(fireAfterEditor.isSelected()); |
|
JTemplate jTemplate = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); |
|
jTemplate.needAddTemplateIdAttr(useParamsTemplate.isSelected()); |
|
if (extraPaneList.isEmpty()) { |
|
wParameterLayout.setBackground((Background) background.getValue()); |
|
} else { |
|
for (BasicBeanPane<WParameterLayout> pane : extraPaneList) { |
|
pane.updateBean(wParameterLayout); |
|
} |
|
} |
|
//设置参数模板面板的高度 |
|
int height = (int) paraHeight.getTextField().getValue(); |
|
FormDesigner designer = TemplateTool.getCurrentEditingNewJForm().getFormDesign(); |
|
FormSelection selection = designer.getSelectionModel().getSelection(); |
|
XCreator creator = designer.getParaComponent(); |
|
Rectangle rectangle = creator.getBounds(); |
|
Rectangle newRectangle = new Rectangle(rectangle.x, rectangle.y, rectangle.width, height); |
|
creator.setBounds(newRectangle); |
|
if (paraHeight.getValue() != newRectangle.height) |
|
paraHeight.setValue(newRectangle.height); |
|
designer.setParaHeight(newRectangle.height); |
|
designer.getArea().doLayout(); |
|
LayoutUtils.layoutContainer(creator); |
|
selection.fixCreator(designer); |
|
designer.repaint(); |
|
return wParameterLayout; |
|
} |
|
|
|
private boolean isCompsOutOfDesignerWidth(int designerWidth) { |
|
for (int i = 0; i < root.getComponentCount(); i++) { |
|
Component comp = root.getComponent(i); |
|
if (comp.getX() + comp.getWidth() > designerWidth) { |
|
return true; |
|
} |
|
} |
|
return false; |
|
} |
|
|
|
@Override |
|
public DataCreatorUI dataUI() { |
|
return null; |
|
} |
|
}
|
|
|