Browse Source

Pull request #13931: REPORT-111995 【NewUI】数据列面板翻新

Merge in DESIGN/design from ~LEVY.XIE/design:newui to newui

* commit '8eb2df765fe532ed642d3ce2a0495baf0a886abf':
  REPORT-111995 【NewUI】数据列面板翻新
newui
Levy.Xie-解安森 4 weeks ago
parent
commit
febd91da59
  1. 2
      designer-base/src/main/java/com/fine/theme/light/ui/FineLightIconSet.java
  2. 19
      designer-base/src/main/java/com/fine/theme/utils/FineUIUtils.java
  3. 196
      designer-base/src/main/java/com/fr/design/condition/LiteConditionPane.java
  4. 6
      designer-base/src/main/java/com/fr/design/formula/FormulaPane.java
  5. 4
      designer-base/src/main/resources/com/fine/theme/icon/toolbar/bracket.svg
  6. 4
      designer-base/src/main/resources/com/fine/theme/icon/toolbar/bracket_disable.svg
  7. 11
      designer-base/src/main/resources/com/fine/theme/icon/toolbar/unBracket.svg
  8. 11
      designer-base/src/main/resources/com/fine/theme/icon/toolbar/unBracket_disable.svg
  9. 176
      designer-realize/src/main/java/com/fr/design/dscolumn/DSColumnAdvancedPane.java
  10. 47
      designer-realize/src/main/java/com/fr/design/dscolumn/DSColumnBasicPane.java
  11. 46
      designer-realize/src/main/java/com/fr/design/dscolumn/DSColumnConditionsPane.java
  12. 41
      designer-realize/src/main/java/com/fr/design/dscolumn/ResultSetGroupPopUpPane.java
  13. 41
      designer-realize/src/main/java/com/fr/design/dscolumn/SelectedDataColumnPane.java
  14. 46
      designer-realize/src/main/java/com/fr/design/expand/ConditionParentPane.java
  15. 26
      designer-realize/src/main/java/com/fr/design/expand/ExpandDirectionPane.java

2
designer-base/src/main/java/com/fine/theme/light/ui/FineLightIconSet.java

@ -187,6 +187,8 @@ public class FineLightIconSet extends AbstractIconSet {
new SvgIconSource("tool_more_hover", "com/fine/theme/icon/toolbar/more_hover.svg"),
new SvgIconSource("tool_config", "com/fine/theme/icon/toolbar/config.svg", true),
new SvgIconSource("add_popup", "com/fine/theme/icon/toolbar/add_popup.svg", true),
new SvgIconSource("bracket", "com/fine/theme/icon/toolbar/bracket.svg", true),
new SvgIconSource("unBracket", "com/fine/theme/icon/toolbar/unBracket.svg", true),
// 参数面板
new SvgIconSource("param_edit", "com/fine/theme/icon/param/edit.svg", true, 24),

19
designer-base/src/main/java/com/fine/theme/utils/FineUIUtils.java

@ -3,7 +3,9 @@ package com.fine.theme.utils;
import com.fine.theme.light.ui.CollapsibleScrollBarLayerUI;
import com.formdev.flatlaf.ui.FlatUIUtils;
import com.fr.design.border.FineBorderFactory;
import com.fr.design.constants.LayoutConstants;
import com.fr.design.gui.icontainer.UIScrollPane;
import com.fr.design.gui.ilable.UILabel;
import com.fr.stable.os.OperatingSystem;
import com.fr.value.AtomicClearableLazyValue;
@ -23,6 +25,8 @@ import java.awt.geom.Path2D;
import java.awt.geom.RoundRectangle2D;
import java.lang.reflect.Field;
import static com.fine.swing.ui.layout.Layouts.cell;
import static com.fine.swing.ui.layout.Layouts.column;
import static com.fine.theme.light.ui.FineButtonUI.isLeftRoundButton;
import static com.formdev.flatlaf.util.UIScale.scale;
@ -380,6 +384,21 @@ public class FineUIUtils {
FineUIStyle.setStyle(label, FineUIStyle.LABEL_BOLD);
}
/**
* 面板元素头部添加小标题
*
* @param component 面板元素
* @param title 标题文本
* @return 包装面板
*/
public static Component wrapComponentWithTitle(Component component, String title) {
UILabel label = new UILabel(title);
wrapBoldLabelWithUnderline(label);
return column(LayoutConstants.VERTICAL_GAP,
cell(label), cell(component)
).getComponent();
}
/**
* 基于组件创建一个UIScrollPane的装饰层内部的ScrollPane仅当悬浮时显示滚动条
*

196
designer-base/src/main/java/com/fr/design/condition/LiteConditionPane.java

@ -1,7 +1,12 @@
package com.fr.design.condition;
import com.fine.theme.icon.LazyIcon;
import com.fine.theme.light.ui.FineRoundBorder;
import com.fine.theme.utils.FineUIScale;
import com.fine.theme.utils.FineUIUtils;
import com.formdev.flatlaf.ui.FlatUIUtils;
import com.formdev.flatlaf.util.ScaledEmptyBorder;
import com.fr.base.BaseFormula;
import com.fr.base.BaseUtils;
import com.fr.data.DataConstants;
import com.fr.data.condition.CommonCondition;
import com.fr.data.condition.FormulaCondition;
@ -9,6 +14,8 @@ import com.fr.data.condition.JoinCondition;
import com.fr.data.condition.ListCondition;
import com.fr.data.condition.ObjectCondition;
import com.fr.design.beans.BasicBeanPane;
import com.fr.design.border.FineBorderFactory;
import com.fr.design.constants.LayoutConstants;
import com.fr.design.dialog.DialogActionAdapter;
import com.fr.design.dialog.FineJOptionPane;
import com.fr.design.formula.FormulaFactory;
@ -20,7 +27,6 @@ import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.itextarea.UITextArea;
import com.fr.design.gui.itree.refreshabletree.ExpandMutableTreeNode;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.scrollruler.ModLineBorder;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.general.ComparatorUtils;
@ -46,6 +52,11 @@ import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import static com.fine.swing.ui.layout.Layouts.cell;
import static com.fine.swing.ui.layout.Layouts.column;
import static com.fine.swing.ui.layout.Layouts.flex;
import static com.fine.swing.ui.layout.Layouts.row;
/**
* peter: LiteCondition Pane.
*/
@ -60,6 +71,7 @@ public abstract class LiteConditionPane<T extends Condition> extends BasicBeanPa
private JPanel conditionCardPane;
protected BasicBeanPane<T> defaultConditionPane;
// card2
private UILabel conditionTitleLabel;
private UITextArea formulaTextArea;
private UIButton modifyButton;
private UIButton addButton;
@ -71,10 +83,6 @@ public abstract class LiteConditionPane<T extends Condition> extends BasicBeanPa
private UIButton moveDownButton;
private UIButton bracketButton;
private UIButton unBracketButton;
private static final int DOWN_PADDING = 4;
private static final int STRUT_ONE = 35;
private static final int STRUT_TWO = 4;
private static final int ADD_CONTROL_PANE_PADDING_RIGHT = -5;
private ActionListener actionListener1 = new ActionListener() {
@ -407,74 +415,82 @@ public abstract class LiteConditionPane<T extends Condition> extends BasicBeanPa
protected abstract VariableResolver variableResolver4FormulaPane();
protected void initComponents() {
this.setLayout(FRGUIPaneFactory.createBorderLayout());
this.setLayout(new BorderLayout(0, FineUIScale.scale(10)));
// north
initNorth();
//center
JPanel centerPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
JPanel centerPane = new JPanel(new BorderLayout(0, FineUIScale.scale(10)));
this.add(centerPane, BorderLayout.CENTER);
centerPane.setLayout(FRGUIPaneFactory.createBorderLayout());
// Control
JPanel controlPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
centerPane.add(controlPane, BorderLayout.NORTH);
// controlPane.setLayout(FRGUIPaneFactory.createBorderLayout());
// conditionCardPane
initConditionCardPane(controlPane);
initConditionCardPane();
centerPane.add(conditionCardPane, BorderLayout.NORTH);
// addControlPane, contains or,and Radio, add,modify Button
initControlPane(controlPane);
// northButtonPane, contains or,and Radio, add,modify Button
JPanel northButtonPane = initNorthButtonPane();
// Preview
JPanel previewPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
centerPane.add(previewPane, BorderLayout.CENTER);
previewPane.setBorder(BorderFactory.createEmptyBorder(0, 2, 2, 0));
// conTreeScrollPane.setPreferredSize(new Dimension(400, 125));
previewPane.add(iniTreeScrollPane(), BorderLayout.CENTER);
JPanel buttonPane = initButtonPane();
JScrollPane treeScrollPane = iniTreeScrollPane();
// 滚动面板不能直接加入row-col布局,需设定宽高
treeScrollPane.setPreferredSize(FineUIScale.scale(new Dimension(600, 250)));
JPanel previewPane = column(
cell(northButtonPane),
row(
cell(treeScrollPane).weight(0.75), cell(buttonPane).weight(0.25)
)
).with(it -> {
it.setBorder(new FineRoundBorder());
it.setOpaque(true);
it.setBackground(FlatUIUtils.getUIColor("fill.normal", Color.WHITE));
}).getComponent();
conditionsTree.addTreeSelectionListener(treeSelectionListener);
JPanel buttonPane = FRGUIPaneFactory.createNColumnGridInnerContainer_S_Pane(1);
previewPane.add(GUICoreUtils.createBorderPane(buttonPane, BorderLayout.NORTH), BorderLayout.EAST);
initButtonPane(buttonPane);
centerPane.add(previewPane, BorderLayout.CENTER);
// peter:必须要检查Enabled.
checkButtonEnabledForList();
}
private void initButtonPane(JPanel buttonPane) {
private JPanel initButtonPane() {
removeButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Remove"));
buttonPane.add(removeButton);
removeButton.setIcon(BaseUtils.readIcon("com/fr/base/images/cell/control/remove.png"));
removeButton.setIcon(new LazyIcon("remove"));
removeButton.setDisabledIcon(new LazyIcon("remove").disabled());
removeButton.setEnabled(false);
removeButton.addActionListener(actionListener3);
moveUpButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Utils_Move_Up"));
buttonPane.add(moveUpButton);
moveUpButton.setIcon(BaseUtils.readIcon("com/fr/design/images/control/up.png"));
moveUpButton.setIcon(new LazyIcon("move_up"));
moveUpButton.setDisabledIcon(new LazyIcon("move_up").disabled());
moveUpButton.addActionListener(actionListener4);
moveDownButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Utils_Move_Down"));
buttonPane.add(moveDownButton);
moveDownButton.setIcon(BaseUtils.readIcon("com/fr/design/images/control/down.png"));
moveDownButton.setIcon(new LazyIcon("move_down"));
moveDownButton.setDisabledIcon(new LazyIcon("move_down").disabled());
moveDownButton.addActionListener(actionListener5);
// peter:加括号
bracketButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_ConditionB_Add_bracket"));
buttonPane.add(bracketButton);
bracketButton.setIcon(BaseUtils.readIcon("com/fr/design/images/condition/bracket.png"));
bracketButton.setIcon(new LazyIcon("bracket"));
bracketButton.setDisabledIcon(new LazyIcon("bracket").disabled());
bracketButton.addActionListener(actionListener6);
// peter:去掉括号
unBracketButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_ConditionB_Remove_bracket"));
buttonPane.add(unBracketButton);
unBracketButton.setIcon(BaseUtils.readIcon("com/fr/design/images/condition/unBracket.png"));
unBracketButton.setIcon(new LazyIcon("unBracket"));
unBracketButton.setDisabledIcon(new LazyIcon("unBracket").disabled());
unBracketButton.addActionListener(actionListener7);
return column(LayoutConstants.VERTICAL_GAP,
cell(removeButton),
cell(moveUpButton),
cell(moveDownButton),
cell(bracketButton),
cell(unBracketButton)
).with(it -> it.setBorder(new ScaledEmptyBorder(5, 5, 0, 5))).getComponent();
}
private JScrollPane iniTreeScrollPane() {
@ -484,26 +500,28 @@ public abstract class LiteConditionPane<T extends Condition> extends BasicBeanPa
conditionsTree.setSelectionModel(new ContinuousTreeSelectionModel());
conditionsTree.addTreeExpansionListener(treeExpansionListener);
conditionsTree.setShowsRootHandles(true);
return new JScrollPane(conditionsTree);
conditionsTree.setBackground(FlatUIUtils.getUIColor("fill.normal", Color.WHITE));
JScrollPane scrollPane = new JScrollPane(conditionsTree);
scrollPane.setBorder(BorderFactory.createMatteBorder(0, 0, 0, 1,
FineUIUtils.getUIColor("Label.borderColor", "defaultBorderColor")));
return scrollPane;
}
private void initNorth() {
conditonTypePane = FRGUIPaneFactory.createBorderLayout_S_Pane();
this.add(conditonTypePane, BorderLayout.NORTH);
conditonTypePane.setBorder(new ModLineBorder(ModLineBorder.BOTTOM));
conditionTitleLabel = new UILabel();
FineUIUtils.wrapBoldLabelWithUnderline(conditionTitleLabel);
UILabel conditionTypeLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Type") + ":");
conditonTypePane.add(conditionTypeLabel, BorderLayout.WEST);
conditionTypeLabel.setBorder(BorderFactory.createEmptyBorder(0, 0, DOWN_PADDING, 0));
JPanel northPane = FRGUIPaneFactory.createNColumnGridInnerContainer_S_Pane(2);
conditonTypePane.add(northPane, BorderLayout.CENTER);
northPane.setBorder(BorderFactory.createEmptyBorder(0, 0, DOWN_PADDING, 0));
northPane.add(GUICoreUtils.createFlowPane(commonRadioButton, FlowLayout.CENTER));
northPane.add(GUICoreUtils.createFlowPane(formulaRadioButton, FlowLayout.CENTER));
commonRadioButton.addActionListener(radioActionListener);
formulaRadioButton.addActionListener(radioActionListener);
conditonTypePane = row(10,
cell(conditionTypeLabel).weight(0.15), cell(commonRadioButton), cell(formulaRadioButton), flex()
).getComponent();
JPanel conditionWrapperPane = column(10,
cell(conditionTitleLabel),
cell(conditonTypePane)
).getComponent();
this.add(conditionWrapperPane, BorderLayout.NORTH);
ButtonGroup mainBg = new ButtonGroup();
mainBg.add(commonRadioButton);
@ -511,74 +529,58 @@ public abstract class LiteConditionPane<T extends Condition> extends BasicBeanPa
commonRadioButton.setSelected(true);
}
private void initConditionCardPane(JPanel controlPane) {
private void initConditionCardPane() {
conditionCardPane = FRGUIPaneFactory.createCardLayout_S_Pane();
controlPane.add(conditionCardPane, BorderLayout.CENTER);
conditionCardPane.setLayout(new CardLayout());
conditionCardPane.setBorder(BorderFactory.createEmptyBorder(1, 0, 1, 0));
// defaultConditionPane
conditionCardPane.add(defaultConditionPane = createUnFormulaConditionPane(), "DEFAULT");
// formulaConditionPane
JPanel formulaConditionPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
conditionCardPane.add(formulaConditionPane, "FORMULA");
// formulaConditionPane.setLayout(FRGUIPaneFactory.createBorderLayout());
// formulaPane
JPanel formulaPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
// 95106 公式区域限定宽高, 显示两行即可, 在新窗口编辑.
formulaPane.setPreferredSize(new Dimension(450, 40));
formulaConditionPane.add(formulaPane, BorderLayout.CENTER);
formulaPane.setBorder(BorderFactory.createEmptyBorder(2, 0, 2, 2));
formulaPane.add(GUICoreUtils.createBorderPane(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Lite_Condition_Formula") + "="), BorderLayout.NORTH), BorderLayout.WEST);
formulaTextArea = new UITextArea();
formulaPane.add(new JScrollPane(formulaTextArea), BorderLayout.CENTER);
UIButton editFormulaButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Lite_Condition_Define"));
formulaPane.add(GUICoreUtils.createBorderPane(editFormulaButton, BorderLayout.NORTH), BorderLayout.EAST);
formulaConditionPane.add(row(10,
cell(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Lite_Condition_Formula") + " =")),
cell(formulaTextArea).weight(2),
cell(editFormulaButton))
.getComponent());
editFormulaButton.addActionListener(actionListener1);
applyCardsPane();
}
private void initControlPane(JPanel controlPane) {
JPanel addControlPane = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane();
addControlPane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, ADD_CONTROL_PANE_PADDING_RIGHT));
JPanel splitPane = new JPanel();
splitPane.setBorder(new ModLineBorder(ModLineBorder.TOP));
JPanel addControlPaneWrapper = new JPanel(new BorderLayout());
addControlPaneWrapper.add(addControlPane, BorderLayout.CENTER);
addControlPaneWrapper.add(splitPane, BorderLayout.NORTH);
controlPane.add(addControlPaneWrapper, BorderLayout.SOUTH);
private JPanel initNorthButtonPane() {
ButtonGroup bg = new ButtonGroup();
bg.add(andRadioButton);
bg.add(orRadioButton);
andRadioButton.setSelected(true);
JPanel radioPane = FRGUIPaneFactory.createNColumnGridInnerContainer_S_Pane(2);
addControlPane.add(radioPane);
radioPane.add(andRadioButton);
radioPane.add(orRadioButton);
addControlPane.add(Box.createHorizontalStrut(STRUT_ONE));
addButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Add"), BaseUtils.readIcon("com/fr/base/images/cell/control/add.png"));
addButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Add"), new LazyIcon("add"));
addButton.setDisabledIcon(new LazyIcon("add").disabled());
addButton.setMnemonic('A');
addControlPane.add(addButton);
addButton.addActionListener(actionListener2);
addControlPane.add(Box.createHorizontalStrut(STRUT_TWO));
modifyButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Modify"), BaseUtils.readIcon("com/fr/base/images/cell/control/rename.png"));
modifyButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Modify"), new LazyIcon("edit"));
modifyButton.setDisabledIcon(new LazyIcon("edit").disabled());
modifyButton.setMnemonic('M');
addControlPane.add(modifyButton);
modifyButton.addActionListener(actionListener8);
// peter:当鼠标进入修改按钮的时候,如果是ListConditon内容编辑区域不可编辑
// peter:当鼠标进入修改按钮的时候,如果是ListCondition内容编辑区域不可编辑
modifyButton.addMouseListener(mouseAdapter);
return row(
row(5,
cell(andRadioButton).weight(0.5),
cell(orRadioButton).weight(0.5)
).weight(0.25),
flex(0.5),
row(5,
cell(addButton).weight(0.5),
cell(modifyButton).weight(0.5)
).with(it -> it.setBorder(new ScaledEmptyBorder(0, 8, 0, 0))).weight(0.25)
).with(it -> it.setBorder(BorderFactory.createCompoundBorder(
FineBorderFactory.createDefaultUnderlineBorder(),
new ScaledEmptyBorder(5, 5, 5, 5))
)).getComponent();
}
@ -662,10 +664,10 @@ public abstract class LiteConditionPane<T extends Condition> extends BasicBeanPa
private void applyCardsPane() {
CardLayout cl = (CardLayout) (conditionCardPane.getLayout());
if (this.commonRadioButton.isSelected()) {
this.setBorder(GUICoreUtils.createTitledBorder(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Lite_Condition_Common_Condition"), null));
conditionTitleLabel.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Lite_Condition_Common_Condition"));
cl.show(conditionCardPane, "DEFAULT");
} else {
this.setBorder(GUICoreUtils.createTitledBorder(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Lite_Condition_Formula_Condition"), null));
conditionTitleLabel.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Lite_Condition_Formula_Condition"));
cl.show(conditionCardPane, "FORMULA");
}
}

6
designer-base/src/main/java/com/fr/design/formula/FormulaPane.java

@ -749,9 +749,9 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula {
public BasicDialog showLargeWindow(Window window, DialogActionListener l) {
int width = 900;
int height = 900;
BasicDialog basicDialog = super.showWindowWithCustomSize(window, l, new Dimension(width, height));
basicDialog.setMinimumSize(new Dimension(width, height));
int height = 640;
BasicDialog basicDialog = super.showWindowWithCustomSize(window, l, FineUIScale.scale(new Dimension(width, height)));
basicDialog.setMinimumSize(FineUIScale.scale(new Dimension(width, height)));
basicDialog.setResizable(true);
return basicDialog;
}

4
designer-base/src/main/resources/com/fine/theme/icon/toolbar/bracket.svg

@ -0,0 +1,4 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M30.0005 15.9863C30.0005 21.117 27.8277 25.2953 24.483 28.5692C24.2132 28.8332 23.8068 28.8947 23.4653 28.7339C22.8734 28.4552 22.7492 27.666 23.1984 27.1903C26.1013 24.1162 27.8405 20.4084 27.8405 15.9863C27.8405 11.5889 26.1013 7.88355 23.1984 4.80968C22.7492 4.33403 22.8734 3.54479 23.4653 3.2661C23.8068 3.1053 24.2132 3.1668 24.483 3.43084C27.8277 6.70464 30.0005 10.8818 30.0005 15.9863Z" fill="#0A1C38" fill-opacity="0.9"/>
<path d="M2 15.9863C2 10.8818 4.17272 6.70464 7.51751 3.43084C7.78727 3.1668 8.19363 3.1053 8.53515 3.2661C9.12704 3.54479 9.25125 4.33403 8.80206 4.80968C5.89919 7.88355 4.16 11.5889 4.16 15.9863C4.16 20.4084 5.89919 24.1162 8.80207 27.1903C9.25124 27.666 9.12704 28.4552 8.53515 28.7339C8.19363 28.8947 7.78727 28.8332 7.51751 28.5692C4.17272 25.2953 2 21.117 2 15.9863Z" fill="#0A1C38" fill-opacity="0.9"/>
</svg>

After

Width:  |  Height:  |  Size: 954 B

4
designer-base/src/main/resources/com/fine/theme/icon/toolbar/bracket_disable.svg

@ -0,0 +1,4 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M30.0005 15.9863C30.0005 21.117 27.8277 25.2953 24.483 28.5692C24.2132 28.8332 23.8068 28.8947 23.4653 28.7339C22.8734 28.4552 22.7492 27.666 23.1984 27.1903C26.1013 24.1162 27.8405 20.4084 27.8405 15.9863C27.8405 11.5889 26.1013 7.88355 23.1984 4.80968C22.7492 4.33403 22.8734 3.54479 23.4653 3.2661C23.8068 3.1053 24.2132 3.1668 24.483 3.43084C27.8277 6.70464 30.0005 10.8818 30.0005 15.9863Z" fill="#0A1C38" fill-opacity="0.29"/>
<path d="M2 15.9863C2 10.8818 4.17272 6.70464 7.51751 3.43084C7.78727 3.1668 8.19363 3.1053 8.53515 3.2661C9.12704 3.54479 9.25125 4.33403 8.80206 4.80968C5.89919 7.88355 4.16 11.5889 4.16 15.9863C4.16 20.4084 5.89919 24.1162 8.80207 27.1903C9.25124 27.666 9.12704 28.4552 8.53515 28.7339C8.19363 28.8947 7.78727 28.8332 7.51751 28.5692C4.17272 25.2953 2 21.117 2 15.9863Z" fill="#0A1C38" fill-opacity="0.29"/>
</svg>

After

Width:  |  Height:  |  Size: 956 B

11
designer-base/src/main/resources/com/fine/theme/icon/toolbar/unBracket.svg

@ -0,0 +1,11 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_5516_63926)">
<path d="M0.706956 5.70711C1.09748 5.31658 1.73064 5.31658 2.12117 5.70711L26.1628 29.7487C26.5533 30.1393 26.5533 30.7724 26.1628 31.163C25.7723 31.5535 25.1391 31.5535 24.7486 31.163L0.706956 7.12132C0.316432 6.7308 0.316431 6.09763 0.706956 5.70711Z" fill="#0A1C38" fill-opacity="0.9"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M5.81511 5.15826C6.33779 4.49534 6.9049 3.86268 7.51049 3.26012C7.78362 2.98835 8.19909 2.9251 8.54669 3.09133C9.13685 3.37356 9.26132 4.16056 8.81543 4.63923C8.23913 5.25788 7.70855 5.90176 7.22818 6.57132L5.81511 5.15826ZM2.26731 12.9242C2.09201 13.9115 2 14.9385 2 16.0055C2 21.2129 4.16968 25.4544 7.51049 28.7786C7.78362 29.0503 8.19909 29.1136 8.54669 28.9473C9.13685 28.6651 9.26131 27.8781 8.81544 27.3994C5.90453 24.2743 4.16 20.5038 4.16 16.0055C4.16 15.617 4.17316 15.2338 4.19909 14.8559L2.26731 12.9242ZM26.7642 26.1074C28.7816 23.2691 30.0005 19.9086 30.0005 16.0055C30.0005 10.8245 27.8308 6.58421 24.49 3.26013C24.2169 2.98836 23.8014 2.92511 23.4538 3.09134C22.8636 3.37357 22.7392 4.16058 23.1851 4.63924C26.096 7.76412 27.8405 11.5323 27.8405 16.0055C27.8405 19.2615 26.9265 22.1362 25.3177 24.6609L26.7642 26.1074Z" fill="#0A1C38" fill-opacity="0.9"/>
</g>
<defs>
<clipPath id="clip0_5516_63926">
<rect width="32" height="32" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

11
designer-base/src/main/resources/com/fine/theme/icon/toolbar/unBracket_disable.svg

@ -0,0 +1,11 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_5830_167077)">
<path d="M0.706956 5.70711C1.09748 5.31658 1.73064 5.31658 2.12117 5.70711L26.1628 29.7487C26.5533 30.1393 26.5533 30.7724 26.1628 31.163C25.7723 31.5535 25.1391 31.5535 24.7486 31.163L0.706956 7.12132C0.316432 6.7308 0.316431 6.09763 0.706956 5.70711Z" fill="#0A1C38" fill-opacity="0.29"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M5.81511 5.15826C6.33779 4.49534 6.9049 3.86268 7.51049 3.26012C7.78362 2.98835 8.19909 2.9251 8.54669 3.09133C9.13685 3.37356 9.26132 4.16056 8.81543 4.63923C8.23913 5.25788 7.70855 5.90176 7.22818 6.57132L5.81511 5.15826ZM2.26731 12.9242C2.09201 13.9115 2 14.9385 2 16.0055C2 21.2129 4.16968 25.4544 7.51049 28.7786C7.78362 29.0503 8.19909 29.1136 8.54669 28.9473C9.13685 28.6651 9.26131 27.8781 8.81544 27.3994C5.90453 24.2743 4.16 20.5038 4.16 16.0055C4.16 15.617 4.17316 15.2338 4.19909 14.8559L2.26731 12.9242ZM26.7642 26.1074C28.7816 23.2691 30.0005 19.9086 30.0005 16.0055C30.0005 10.8245 27.8308 6.58421 24.49 3.26013C24.2169 2.98836 23.8014 2.92511 23.4538 3.09134C22.8636 3.37357 22.7392 4.16058 23.1851 4.63924C26.096 7.76412 27.8405 11.5323 27.8405 16.0055C27.8405 19.2615 26.9265 22.1362 25.3177 24.6609L26.7642 26.1074Z" fill="#0A1C38" fill-opacity="0.29"/>
</g>
<defs>
<clipPath id="clip0_5830_167077">
<rect width="32" height="32" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

176
designer-realize/src/main/java/com/fr/design/dscolumn/DSColumnAdvancedPane.java

@ -1,7 +1,7 @@
package com.fr.design.dscolumn;
import com.formdev.flatlaf.util.ScaledEmptyBorder;
import com.fr.base.BaseFormula;
import com.fr.design.border.UITitledBorder;
import com.fr.design.data.DesignTableDataManager;
import com.fr.design.dialog.BasicPane;
import com.fr.design.dialog.DialogActionAdapter;
@ -16,37 +16,31 @@ 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.sort.celldscolumn.CellDSColumnSortPane;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.report.cell.CellElement;
import com.fr.report.cell.TemplateCellElement;
import com.fr.report.cell.cellattr.CellExpandAttr;
import com.fr.report.cell.cellattr.core.group.DSColumn;
import com.fr.report.cell.cellattr.core.group.SelectCount;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import static com.fine.swing.ui.layout.Layouts.cell;
import static com.fine.swing.ui.layout.Layouts.column;
import static com.fine.swing.ui.layout.Layouts.row;
import static com.fine.theme.utils.FineUIUtils.wrapComponentWithTitle;
import static com.fr.report.cell.cellattr.core.group.FilterTypeEnum.BOTTOM;
import static com.fr.report.cell.cellattr.core.group.FilterTypeEnum.SPECIFY;
import static com.fr.report.cell.cellattr.core.group.FilterTypeEnum.TOP;
public class DSColumnAdvancedPane extends BasicPane {
private static final String InsetText = " ";
private SortPane sortPane;
private SelectCountPane selectCountPane;
private ValuePane valuePane;
@ -66,78 +60,55 @@ public class DSColumnAdvancedPane extends BasicPane {
}
private void initScrollPane() {
ScrollPane scrollPane = new ScrollPane(contentPane);
this.setLayout(new BorderLayout());
UIScrollPane scrollPane = new UIScrollPane(contentPane);
this.add(scrollPane);
}
private void initContentPane(int setting) {
contentPane = new JPanel();
contentPane.setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));
contentPane.setLayout(FRGUIPaneFactory.createBorderLayout());
sortPane = new SortPane();
sortPane.setBorder(UITitledBorder.createBorderWithTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Sort_Sort_Order")));
if (setting > DSColumnPane.SETTING_DSRELATED) {
selectCountPane = new SelectCountPane();
selectCountPane.setBorder(UITitledBorder.createBorderWithTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Bind_Column_Results_Filter")));
}
valuePane = new ValuePane();
valuePane.setBorder(UITitledBorder.createBorderWithTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Bind_Column_Custom_Data_Appearance")));
JPanel extendablePane = null;
Component extendablePane = null;
if (setting > DSColumnPane.SETTING_DSRELATED) {
// extendableDirectionPane
JPanel extendableDirectionPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane();
extendableDirectionPane.add(horizontalExtendableCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_ExpandD_Horizontal_Extendable")));
extendableDirectionPane.add(verticalExtendableCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_ExpandD_Vertical_Extendable")));
extendablePane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_ExpandD_Expandable"));
extendablePane.setLayout(new BorderLayout());
extendablePane.add(extendableDirectionPane, BorderLayout.CENTER);
horizontalExtendableCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_ExpandD_Horizontal_Extendable"));
verticalExtendableCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_ExpandD_Vertical_Extendable"));
extendablePane = row(10,
cell(horizontalExtendableCheckBox), cell(verticalExtendableCheckBox)
).getComponent();
}
JPanel multiNumPane = null;
Component multiNumPane = null;
if (setting > DSColumnPane.SETTING_DSRELATED) {
multiNumPane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Fill_Blank_Data"));
useMultiplyNumCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Column_Multiple"));
multiNumPane.add(useMultiplyNumCheckBox);
multiNumPane.add(new UILabel(InsetText));
multiNumSpinner = new UISpinner(1, 10000, 1, 1);
multiNumPane.add(multiNumSpinner);
useMultiplyNumCheckBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
checkButtonEnabled();
}
});
multiNumPane = row(10,
cell(useMultiplyNumCheckBox), cell(multiNumSpinner)
).getComponent();
useMultiplyNumCheckBox.addActionListener(e -> checkButtonEnabled());
}
Component[][] components = null;
// 基于row-column布局的特性,null面板不渲染
if (setting > DSColumnPane.SETTING_DSRELATED) {
components = new Component[][]{
{sortPane},
{selectCountPane},
{valuePane},
{extendablePane},
{multiNumPane}
};
contentPane.add(column(20,
cell(wrapComponentWithTitle(sortPane, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Sort_Sort_Order"))),
cell(wrapComponentWithTitle(selectCountPane, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Bind_Column_Results_Filter"))),
cell(wrapComponentWithTitle(valuePane, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Bind_Column_Custom_Data_Appearance"))),
cell(wrapComponentWithTitle(extendablePane, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_ExpandD_Expandable"))),
cell(wrapComponentWithTitle(multiNumPane, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Fill_Blank_Data")))
).getComponent());
} else {
components = new Component[][]{
{sortPane},
{valuePane},
};
contentPane.add(column(20,
cell(wrapComponentWithTitle(sortPane, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Sort_Sort_Order"))),
cell(wrapComponentWithTitle(valuePane, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Bind_Column_Custom_Data_Appearance")))
).getComponent());
}
double[] rowSize = {TableLayout.PREFERRED, TableLayout.PREFERRED,
TableLayout.PREFERRED, TableLayout.PREFERRED, TableLayout.PREFERRED, TableLayout.PREFERRED};
double[] columnSize = {TableLayout.FILL};
contentPane.add(TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize), BorderLayout.CENTER);
contentPane.setBorder(new ScaledEmptyBorder(10, 10, 10, 10));
}
@Override
@ -234,21 +205,8 @@ public class DSColumnAdvancedPane extends BasicPane {
}
}
private static class ScrollPane extends UIScrollPane {
ScrollPane(Component component) {
super(component);
this.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
}
@Override
public Dimension getPreferredSize() {
return new Dimension(DSColumnPane.DEFAULT_DIMENSION.width - 20, DSColumnPane.DEFAULT_DIMENSION.height - 100);
}
}
private static class SortPane extends CellDSColumnSortPane {
SortPane() {
this.setLayout(new FlowLayout(FlowLayout.LEFT));
}
protected boolean needSortHeaderPane() {
@ -259,7 +217,6 @@ public class DSColumnAdvancedPane extends BasicPane {
private static class SelectCountPane extends JPanel {
CellElement cellElement;
// private Comparator sortComparator;
private UIComboBox selectCountComboBox;
private JPanel selectCountCardPane;
private UITextField serialTextField;
@ -299,25 +256,24 @@ public class DSColumnAdvancedPane extends BasicPane {
});
selectCountCardPane = FRGUIPaneFactory.createCardLayout_S_Pane();
this.add(GUICoreUtils.createFlowPane(new JComponent[]{new UILabel(InsetText), selectCountComboBox,
new UILabel(InsetText), selectCountCardPane}, FlowLayout.LEFT), BorderLayout.WEST);
// selectCountCardPane.setLayout(new CardLayout());
this.add(row(10,
cell(selectCountComboBox),cell(selectCountCardPane)
).getComponent());
//not define pane
JPanel undefinedPane = row(cell(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Undefined")))).getComponent();
JPanel undefinedPane = GUICoreUtils.createFlowPane(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Undefined")), FlowLayout.LEFT);
topFormulaPane = new JFormulaField("-1");
bottomFormulaPane = new JFormulaField("-1");
serialTextField = new UITextField(18);
JPanel oddPane = GUICoreUtils.createFlowPane(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Bind_Column_Result_Serial_Number_Start_From_1")
+ " " + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Bind_Column_Odd_Selected_(1,3,5...)")), FlowLayout.LEFT);
JPanel evenPane = GUICoreUtils.createFlowPane(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Bind_Column_Result_Serial_Number_Start_From_1")
+ " " + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Bind_Column_Even_Selected_(2,4,6...)")), FlowLayout.LEFT);
JPanel specifyPane = GUICoreUtils.createFlowPane(new JComponent[]{
serialTextField, new UILabel(
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_DSColumn_Result_Group_Format", "1,2-3,5,8", "$__count__")
)
}, FlowLayout.LEFT);
JPanel oddPane = row(cell(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Bind_Column_Result_Serial_Number_Start_From_1")
+ " " + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Bind_Column_Odd_Selected_(1,3,5...)")))).getComponent();
JPanel evenPane = row(cell(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Bind_Column_Result_Serial_Number_Start_From_1")
+ " " + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Bind_Column_Even_Selected_(2,4,6...)")))).getComponent();
JPanel specifyPane = row(10,
cell(serialTextField),
cell(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_DSColumn_Result_Group_Format", "1,2-3,5,8", "$__count__")))
).getComponent();
serialTextField.setToolTipText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Format") + ":=JOINARRAY(GREPARRAY(RANGE($__count__), item!=4), \",\")");
selectCountCardPane.add(undefinedPane, "UNDEFINE");
selectCountCardPane.add(topFormulaPane, "TOP");
@ -337,7 +293,7 @@ public class DSColumnAdvancedPane extends BasicPane {
this.cellElement = cellElement;
Object value = cellElement.getValue();
if (value == null || !(value instanceof DSColumn)) {
if (!(value instanceof DSColumn)) {
return;
}
DSColumn dSColumn = (DSColumn) (cellElement.getValue());
@ -362,7 +318,7 @@ public class DSColumnAdvancedPane extends BasicPane {
return;
}
Object value = cellElement.getValue();
if (value == null || !(value instanceof DSColumn)) {
if (!(value instanceof DSColumn)) {
return;
}
DSColumn dSColumn = (DSColumn) (cellElement.getValue());
@ -394,19 +350,18 @@ public class DSColumnAdvancedPane extends BasicPane {
public JFormulaField(String defaultValue) {
this.defaultValue = defaultValue;
this.setLayout(FRGUIPaneFactory.createBoxFlowLayout());
this.setLayout(new BorderLayout());
UILabel bottomLabel = new UILabel("=");
bottomLabel.setFont(new Font("Dialog", Font.BOLD, 12));
this.add(bottomLabel);
formulaTextField = new UITextField(24);
this.add(formulaTextField);
formulaTextField.setText(defaultValue);
UIButton bottomFrmulaButton = new UIButton("...");
this.add(bottomFrmulaButton);
bottomFrmulaButton.setToolTipText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Formula") + "...");
bottomFrmulaButton.setPreferredSize(new Dimension(25, formulaTextField.getPreferredSize().height));
bottomFrmulaButton.addActionListener(formulaButtonActionListener);
UIButton bottomFormulaButton = new UIButton("...");
bottomFormulaButton.setToolTipText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Formula") + "...");
bottomFormulaButton.addActionListener(formulaButtonActionListener);
this.add(row(10,
cell(bottomLabel), cell(formulaTextField), cell(bottomFormulaButton)
).getComponent());
}
public void populate(String formulaContent) {
@ -438,7 +393,7 @@ public class DSColumnAdvancedPane extends BasicPane {
return;
}
Object value = cellElement.getValue();
if (value == null || !(value instanceof DSColumn)) {
if (!(value instanceof DSColumn)) {
return;
}
DSColumn dsColumn = (DSColumn) value;
@ -465,11 +420,12 @@ public class DSColumnAdvancedPane extends BasicPane {
private JFormulaField formulaField;
public ValuePane() {
this.setLayout(FRGUIPaneFactory.createBoxFlowLayout());
this.add(new UILabel(InsetText + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Value") + ":"));
this.add(Box.createHorizontalStrut(2));
this.add((formulaField = new JFormulaField("$$$")));
this.setLayout(new BorderLayout());
formulaField = new JFormulaField("$$$");
this.add(row(10,
cell(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Value") + ":")),
cell(formulaField)
).getComponent());
}
public void populate(CellElement cellElement) {
@ -478,7 +434,7 @@ public class DSColumnAdvancedPane extends BasicPane {
}
Object value = cellElement.getValue();
if (value == null || !(value instanceof DSColumn)) {
if (!(value instanceof DSColumn)) {
return;
}
DSColumn dSColumn = (DSColumn) value;
@ -497,7 +453,7 @@ public class DSColumnAdvancedPane extends BasicPane {
return;
}
Object value = cellElement.getValue();
if (value == null || !(value instanceof DSColumn)) {
if (!(value instanceof DSColumn)) {
return;
}
DSColumn dSColumn = (DSColumn) (cellElement.getValue());
@ -508,10 +464,6 @@ public class DSColumnAdvancedPane extends BasicPane {
}
private void checkButtonEnabled() {
if (useMultiplyNumCheckBox.isSelected()) {
multiNumSpinner.setEnabled(true);
} else {
multiNumSpinner.setEnabled(false);
}
multiNumSpinner.setEnabled(useMultiplyNumCheckBox.isSelected());
}
}

47
designer-realize/src/main/java/com/fr/design/dscolumn/DSColumnBasicPane.java

@ -1,25 +1,23 @@
package com.fr.design.dscolumn;
import com.formdev.flatlaf.util.ScaledEmptyBorder;
import com.fr.data.TableDataSource;
import com.fr.design.dialog.BasicPane;
import com.fr.design.expand.ConditionParentPane;
import com.fr.design.expand.ExpandDirectionPane;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
import com.fr.design.mainframe.ElementCasePane;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.report.cell.CellElement;
import com.fr.report.cell.TemplateCellElement;
import com.fr.report.cell.cellattr.CellExpandAttr;
import javax.swing.BorderFactory;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import static com.fine.swing.ui.layout.Layouts.cell;
import static com.fine.swing.ui.layout.Layouts.column;
import static com.fine.theme.utils.FineUIUtils.wrapComponentWithTitle;
public class DSColumnBasicPane extends BasicPane {
private SelectedDataColumnPane selectDataColumnPane;
@ -57,7 +55,7 @@ public class DSColumnBasicPane extends BasicPane {
public DSColumnBasicPane(int setting) {
this.setLayout(FRGUIPaneFactory.createBorderLayout());
this.setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));
this.setBorder(new ScaledEmptyBorder(10, 10, 10, 10));
if (setting > DSColumnPane.SETTING_DSRELATED) {
selectDataColumnPane = new SelectedDataColumnPane();
@ -65,43 +63,30 @@ public class DSColumnBasicPane extends BasicPane {
selectDataColumnPane = new SelectedConfirmedDataColumnPane();
}
selectDataColumnPane.setBorder(GUICoreUtils.createTitledBorder(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Select_Data_Column"), null));
if (setting > DSColumnPane.SETTING_DSRELATED) {
conditionParentPane = new ConditionParentPane();
conditionParentPane.setBorder(GUICoreUtils.createTitledBorder(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_ParentCell_Setting"), null));
}
resultSetGroupPane = new ResultSetGroupPopUpPane(setting > DSColumnPane.SETTING_DSRELATED);
resultSetGroupPane.setBorder(GUICoreUtils.createTitledBorder(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Data_Setting"), null));
if (setting > DSColumnPane.SETTING_DSRELATED) {
expandDirectionPane = new ExpandDirectionPane();
expandDirectionPane.setBorder(GUICoreUtils.createTitledBorder(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_ExpandD_Expand_Direction"), null));
}
double[] rowSize = {TableLayout.PREFERRED, TableLayout.PREFERRED,
TableLayout.PREFERRED, TableLayout.PREFERRED};
double[] columnSize = {TableLayout.FILL};
Component[][] components = null;
if (setting > DSColumnPane.SETTING_DSRELATED) {
components = new Component[][]{
{selectDataColumnPane},
{conditionParentPane},
{resultSetGroupPane},
{expandDirectionPane}
};
this.add(column(20,
cell(wrapComponentWithTitle(selectDataColumnPane, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Select_Data_Column"))),
cell(wrapComponentWithTitle(conditionParentPane, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_ParentCell_Setting"))),
cell(wrapComponentWithTitle(resultSetGroupPane, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Data_Setting"))),
cell(wrapComponentWithTitle(expandDirectionPane, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_ExpandD_Expand_Direction")))
).getComponent());
} else {
components = new Component[][]{
{selectDataColumnPane},
{resultSetGroupPane},
};
this.add(column(20,
cell(wrapComponentWithTitle(selectDataColumnPane, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Select_Data_Column"))),
cell(wrapComponentWithTitle(resultSetGroupPane, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Data_Setting")))
).getComponent());
}
this.add(TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize), BorderLayout.CENTER);
this.resultSetGroupPane.addListeners(summaryDirectionActionlistener, othergroupDirectionActionlistener, sdcupdateActionlistener);
}

46
designer-realize/src/main/java/com/fr/design/dscolumn/DSColumnConditionsPane.java

@ -1,21 +1,22 @@
package com.fr.design.dscolumn;
import com.fine.swing.ui.layout.Column;
import com.fine.theme.utils.FineUIUtils;
import com.formdev.flatlaf.util.ScaledEmptyBorder;
import com.fr.data.TableDataSource;
import com.fr.design.condition.DSColumnLiteConditionPane;
import com.fr.design.condition.DSColumnSimpleLiteConditionPane;
import com.fr.design.data.DesignTableDataManager;
import com.fr.design.dialog.BasicPane;
import com.fr.design.gui.icheckbox.UICheckBox;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.general.data.Condition;
import com.fr.report.cell.CellElement;
import com.fr.report.cell.cellattr.core.group.DSColumn;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import static com.fine.swing.ui.layout.Layouts.cell;
import static com.fine.swing.ui.layout.Layouts.row;
public class DSColumnConditionsPane extends BasicPane {
//peter: Lite Condition.
@ -24,15 +25,24 @@ public class DSColumnConditionsPane extends BasicPane {
//marks:是否继承父格条件
private UICheckBox reselectExpandCheckBox;
//marks:作为布局的空字符串
private static final String INSET_TEXT = " ";
public DSColumnConditionsPane() {
this(DSColumnPane.SETTING_ALL);
}
public DSColumnConditionsPane(int setting) {
this.setLayout(FRGUIPaneFactory.createM_BorderLayout());
this.setLayout(new BorderLayout());
Column column = new Column();
column.setSpacing(10);
if (setting > DSColumnPane.SETTING_DSRELATED) {
//alex:ReSelect
reselectExpandCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Bind_Column_Extend_The_Conditions_of_Father_Cell(Applied_To_The_Data_Contains_Other_Data)"), false);
reselectExpandCheckBox.setSelected(true);
column.add(FineUIUtils.wrapComponentWithTitle(
row(cell(reselectExpandCheckBox)).getComponent(),
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Bind_Column_The_Conditions_Of_Father_Cell")));
}
if (setting > DSColumnPane.SETTING_DSRELATED) {
liteConditionPane = new DSColumnLiteConditionPane() {
protected boolean isNeedDoWithCondition(Condition liteCondition) {
@ -42,22 +52,10 @@ public class DSColumnConditionsPane extends BasicPane {
} else {
liteConditionPane = new DSColumnSimpleLiteConditionPane();
}
this.add(liteConditionPane, BorderLayout.CENTER);
column.add(liteConditionPane);
column.setBorder(new ScaledEmptyBorder(10, 10, 10, 10));
this.add(column);
if (setting > DSColumnPane.SETTING_DSRELATED) {
//alex:ReSelect
JPanel pane = FRGUIPaneFactory.createX_AXISBoxInnerContainer_S_Pane();
// pane.setLayout(new BoxLayout(pane, BoxLayout.X_AXIS));
pane.add(new UILabel(INSET_TEXT));
reselectExpandCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Bind_Column_Extend_The_Conditions_of_Father_Cell(Applied_To_The_Data_Contains_Other_Data)"), false);
pane.add(reselectExpandCheckBox);
reselectExpandCheckBox.setSelected(true);
JPanel reSelectPane = GUICoreUtils.createFlowPane(pane, FlowLayout.LEFT);
this.add(reSelectPane, BorderLayout.NORTH);
reSelectPane.setBorder(GUICoreUtils.createTitledBorder(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Bind_Column_The_Conditions_Of_Father_Cell"), null));
}
}
@Override
@ -70,7 +68,7 @@ public class DSColumnConditionsPane extends BasicPane {
return;
}
Object value = cellElement.getValue();
if (value == null || !(value instanceof DSColumn)) {
if (!(value instanceof DSColumn)) {
return;
}
DSColumn linearDSColumn = (DSColumn) value;
@ -90,7 +88,7 @@ public class DSColumnConditionsPane extends BasicPane {
return;
}
Object value = cellElement.getValue();
if (value == null || !(value instanceof DSColumn)) {
if (!(value instanceof DSColumn)) {
return;
}
DSColumn linearDSColumn = (DSColumn) value;

41
designer-realize/src/main/java/com/fr/design/dscolumn/ResultSetGroupPopUpPane.java

@ -1,37 +1,38 @@
package com.fr.design.dscolumn;
import com.fr.design.constants.LayoutConstants;
import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.ibutton.UIRadioButton;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.icombobox.FunctionComboBox;
import com.fr.design.i18n.Toolkit;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.report.cell.TemplateCellElement;
import com.fr.report.cell.cellattr.core.group.*;
import com.fr.stable.StringUtils;
import com.fr.design.utils.gui.GUICoreUtils;
import javax.swing.*;
import java.awt.*;
import com.fr.report.cell.cellattr.core.group.CustomGrouper;
import com.fr.report.cell.cellattr.core.group.DSColumn;
import com.fr.report.cell.cellattr.core.group.FunctionGrouper;
import com.fr.report.cell.cellattr.core.group.RecordGrouper;
import com.fr.report.cell.cellattr.core.group.SummaryGrouper;
import javax.swing.ButtonGroup;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import static com.fine.swing.ui.layout.Layouts.cell;
import static com.fine.swing.ui.layout.Layouts.column;
import static com.fine.swing.ui.layout.Layouts.row;
public class ResultSetGroupPopUpPane extends ResultSetGroupPane {
private UIRadioButton groupRadioButton;
private UIButton advancedButton;
private UIRadioButton listRadioButton;
private UIRadioButton summaryRadioButton;
private FunctionComboBox functionComboBox;
private String InsertText = StringUtils.BLANK;
public ResultSetGroupPopUpPane() {
this(true);
}
@ -43,7 +44,7 @@ public class ResultSetGroupPopUpPane extends ResultSetGroupPane {
}
public void initComponents(boolean isGroup) {
this.setLayout(FRGUIPaneFactory.create1ColumnGridLayout());
this.setLayout(new BorderLayout());
// 分组
groupRadioButton = new UIRadioButton(Toolkit.i18nText("Fine-Design_Report_Bind_Column_Group(Merger_The_Items_Which_Have_The_Same_Value_in_Column)"));
@ -56,22 +57,25 @@ public class ResultSetGroupPopUpPane extends ResultSetGroupPane {
});
advancedButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Custom"));
advancedButton.addActionListener(groupAdvancedListener);
this.add(GUICoreUtils.createFlowPane(
new JComponent[]{new UILabel(InsertText), groupRadioButton, groupComboBox, advancedButton}, FlowLayout.LEFT));
// 列表
listRadioButton = new UIRadioButton(Toolkit.i18nText("Fine-Design_Report_Bind_Column_Select(Regardless_of_Having_the_Same_Value,Display_All_Item_in_Column)"));
listRadioButton.addActionListener(checkEnabledActionListener);
this.add(GUICoreUtils.createFlowPane(
new JComponent[]{new UILabel(InsertText), listRadioButton}, FlowLayout.LEFT));
// 汇总
summaryRadioButton = new UIRadioButton(Toolkit.i18nText("Fine-Design_Report_Bind_Column_Summary(Including_SUM_,_AVERAGE_,_MAX_,_MIN_And_So_On)"), true);
summaryRadioButton.addActionListener(checkEnabledActionListener);
functionComboBox = new FunctionComboBox(GUICoreUtils.getFunctionArray());
this.add(GUICoreUtils.createFlowPane(
new JComponent[]{new UILabel(InsertText), summaryRadioButton, functionComboBox}, FlowLayout.LEFT));
this.add(column(LayoutConstants.VERTICAL_GAP,
row(10,
cell(groupRadioButton), cell(groupComboBox), cell(advancedButton)
),
cell(listRadioButton),
row(10,
cell(summaryRadioButton), cell(functionComboBox)
)
).getComponent());
ButtonGroup resultSetGroupButtonGroup = new ButtonGroup();
resultSetGroupButtonGroup.add(groupRadioButton);
@ -142,7 +146,6 @@ public class ResultSetGroupPopUpPane extends ResultSetGroupPane {
SummaryGrouper summaryGrouper = new SummaryGrouper();
summaryGrouper.setFunction(functionComboBox.getFunction());
recordGrouper = summaryGrouper;
} else {
}
dSColumn.setGrouper(recordGrouper);

41
designer-realize/src/main/java/com/fr/design/dscolumn/SelectedDataColumnPane.java

@ -1,6 +1,5 @@
package com.fr.design.dscolumn;
import com.fine.swing.ui.layout.Layouts;
import com.fr.base.Parameter;
import com.fr.data.SimpleDSColumn;
import com.fr.data.TableDataSource;
@ -16,8 +15,6 @@ import com.fr.design.gui.icombobox.LazyComboBox;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.itableeditorpane.ParameterTableModel;
import com.fr.design.gui.itableeditorpane.UITableEditorPane;
import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
import com.fr.design.mainframe.DesignerContext;
import com.fr.design.mainframe.ElementCasePane;
import com.fr.design.widget.FRWidgetFactory;
@ -29,9 +26,7 @@ import com.fr.stable.ParameterProvider;
import com.fr.stable.StringUtils;
import javax.swing.DefaultComboBoxModel;
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;
@ -43,6 +38,7 @@ import java.util.Objects;
import java.util.regex.Pattern;
import static com.fine.swing.ui.layout.Layouts.cell;
import static com.fine.swing.ui.layout.Layouts.column;
import static com.fine.swing.ui.layout.Layouts.row;
/**
@ -157,28 +153,21 @@ public class SelectedDataColumnPane extends BasicPane {
};
columnNameComboBox.setEditable(true);
double p = TableLayout.PREFERRED;
UILabel dsLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_TableData") + ":");
UILabel dcLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Data_Column") + ":");
if (showParameterButton) {
dsLabel.setPreferredSize(new Dimension(200, 25));
dcLabel.setPreferredSize(new Dimension(200, 25));
}
if (showParameterButton) {
Component[][] comps = {{dsLabel, null, dcLabel}, {tableNameComboBox, paramButton, columnNameComboBox}};
this.add(TableLayoutHelper.createTableLayoutPane(comps, new double[]{p, p}, new double[]{p, p, p}));
} else {
double f = TableLayout.FILL;
double[] columnSize = {p, f};
double[] rowSize = {p, p};
Component[][] components = new Component[][]{
new Component[]{dsLabel, tableNameComboBox},
new Component[]{dcLabel, columnNameComboBox}
};
JPanel jPanel = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize);
this.setLayout(new BorderLayout());
this.add(jPanel, BorderLayout.CENTER);
}
paramButton.setVisible(showParameterButton);
this.setLayout(new BorderLayout());
this.add(row(10,
row(
cell(dsLabel).weight(0.1),
cell(tableNameComboBox).weight(0.3)
).weight(0.3),
cell(paramButton).weight(0.2),
row(
cell(dcLabel).weight(0.1),
cell(columnNameComboBox).weight(0.3)
).weight(0.3)
).getComponent());
}
@ -200,7 +189,7 @@ public class SelectedDataColumnPane extends BasicPane {
UILabel dpLabel = FRWidgetFactory.createLineWrapLabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Dynamic_Parameter"));
UILabel dcLabel = FRWidgetFactory.createLineWrapLabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Data_Column"));
this.setLayout(new BorderLayout());
this.add(Layouts.column(LayoutConstants.VERTICAL_GAP,
this.add(column(LayoutConstants.VERTICAL_GAP,
row(
cell(dsLabel).weight(1.2), cell(tableNameComboBox).weight(3)
),

46
designer-realize/src/main/java/com/fr/design/expand/ConditionParentPane.java

@ -1,19 +1,18 @@
package com.fr.design.expand;
import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import javax.swing.JComponent;
import com.fr.design.gui.ilable.UILabel;
import javax.swing.JPanel;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.mainframe.ElementCasePane;
import com.fr.report.cell.TemplateCellElement;
import com.fr.report.cell.cellattr.CellExpandAttr;
import com.fr.design.utils.gui.GUICoreUtils;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.event.ActionListener;
import static com.fine.swing.ui.layout.Layouts.cell;
import static com.fine.swing.ui.layout.Layouts.flex;
import static com.fine.swing.ui.layout.Layouts.row;
public class ConditionParentPane extends JPanel {
private ParentPane leftParentPane;
@ -29,21 +28,20 @@ public class ConditionParentPane extends JPanel {
public void initComponents(ActionListener listener) {
JPanel innerthis=FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane();
this.add(innerthis);
JPanel eastPane =FRGUIPaneFactory.createNormalFlowInnerContainer_M_Pane();
innerthis.add(eastPane);
eastPane.add(GUICoreUtils.createFlowPane(new JComponent[] {
new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Left_Parent") + ": "),
leftParentPane = new ParentPane(ParentPane.LEFT, listener) }, FlowLayout.LEFT));
eastPane.add(GUICoreUtils.createFlowPane(
new JComponent[] {
new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Up_Parent") + ": "),
upParentPane = new ParentPane(ParentPane.UP, listener) }, FlowLayout.LEFT));
this.setLayout(new BorderLayout());
leftParentPane = new ParentPane(ParentPane.LEFT, listener);
upParentPane = new ParentPane(ParentPane.UP, listener);
this.add(row(10,
row(
cell(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Left_Parent") + ": ")).weight(0.1),
cell(leftParentPane).weight(0.3)
).weight(0.3),
row(
cell(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Up_Parent") + ": ")).weight(0.1),
cell(upParentPane).weight(0.3)
).weight(0.3),
flex(0.2)
).getComponent());
}
public void putElementcase(ElementCasePane t){
leftParentPane.putElementcase(t);

26
designer-realize/src/main/java/com/fr/design/expand/ExpandDirectionPane.java

@ -1,18 +1,16 @@
package com.fr.design.expand;
import com.fr.design.gui.ibutton.UIRadioButton;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.report.cell.cellattr.CellExpandAttr;
import com.fr.stable.Constants;
import com.fr.stable.StringUtils;
import javax.swing.ButtonGroup;
import javax.swing.JPanel;
import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.BorderLayout;
import static com.fine.swing.ui.layout.Layouts.cell;
import static com.fine.swing.ui.layout.Layouts.row;
/**
*
* @editor zhou
@ -23,7 +21,6 @@ public class ExpandDirectionPane extends JPanel {
private UIRadioButton t2bRadioButton;
private UIRadioButton l2rRadioButton;
private UIRadioButton noneRadioButton;
private String InsertText = StringUtils.BLANK;
public ExpandDirectionPane() {
super();
@ -31,9 +28,7 @@ public class ExpandDirectionPane extends JPanel {
}
public void initComponents() {
this.setLayout(new GridLayout(1, 3));
JPanel innerthis=FRGUIPaneFactory.createNormalFlowInnerContainer_M_Pane();
this.add(innerthis);
this.setLayout(new BorderLayout());
t2bRadioButton = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Utils_Top_To_Bottom"));
l2rRadioButton = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("FIne-Design_Report_Utils_Left_To_Right"));
noneRadioButton = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_ExpandD_Not_Expand"));
@ -41,12 +36,9 @@ public class ExpandDirectionPane extends JPanel {
bg.add(t2bRadioButton);
bg.add(l2rRadioButton);
bg.add(noneRadioButton);
innerthis.add(GUICoreUtils.createFlowPane(new Component[]{new UILabel(InsertText), t2bRadioButton},
FlowLayout.LEFT));
innerthis.add(GUICoreUtils.createFlowPane(new Component[]{new UILabel(InsertText), l2rRadioButton},
FlowLayout.LEFT));
innerthis.add(GUICoreUtils.createFlowPane(new Component[]{new UILabel(InsertText), noneRadioButton},
FlowLayout.LEFT));
this.add(row(10,
cell(t2bRadioButton), cell(l2rRadioButton), cell(noneRadioButton)
).getComponent());
}
public void populate(CellExpandAttr cellExpandAttr) {

Loading…
Cancel
Save