diff --git a/designer-base/src/main/java/com/fr/design/gui/style/TextFormatPane.java b/designer-base/src/main/java/com/fr/design/gui/style/TextFormatPane.java index ae0a947992..8c96c4c862 100644 --- a/designer-base/src/main/java/com/fr/design/gui/style/TextFormatPane.java +++ b/designer-base/src/main/java/com/fr/design/gui/style/TextFormatPane.java @@ -43,6 +43,7 @@ import java.awt.event.ItemListener; import java.math.RoundingMode; import java.text.Format; import java.text.SimpleDateFormat; +import java.util.Arrays; /** * @author Starryi @@ -151,16 +152,17 @@ public class TextFormatPane extends AbstractBasicStylePane implements GlobalName protected JPanel createContentPane (Component[][] components) { double f = TableLayout.FILL; double p = TableLayout.PREFERRED; - double[] rowSize = {p, p, p, p, p}; + double[] rowSize = new double[components.length]; + Arrays.fill(rowSize, p); double[] columnSize = {p, f}; - int[][] rowCount = {{1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}}; + int[][] rowCount = new int[components.length][2]; + Arrays.fill(rowCount, new int[] {1, 1}); return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_LARGE, LayoutConstants.VGAP_MEDIUM); } protected Component[][] getComponent (JPanel centerPane, JPanel typePane) { return new Component[][]{ - new Component[]{null, null}, new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Report_Base_Format"), SwingConstants.LEFT), typePane}, new Component[]{centerPane, null}, new Component[]{optionPane, null}, diff --git a/designer-base/src/main/java/com/fr/design/mainframe/theme/TemplateThemeGridControlPane.java b/designer-base/src/main/java/com/fr/design/mainframe/theme/TemplateThemeGridControlPane.java index 36f4fc1462..cdbd6d10f2 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/theme/TemplateThemeGridControlPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/theme/TemplateThemeGridControlPane.java @@ -22,6 +22,7 @@ import com.fr.design.menu.ToolBarDef; import com.fr.general.IOUtils; import com.fr.log.FineLoggerFactory; import com.fr.stable.StringUtils; +import com.fr.third.javax.annotation.Nullable; import com.fr.transaction.CallBackAdaptor; import javax.swing.BorderFactory; @@ -67,19 +68,19 @@ public class TemplateThemeGridControlPane extends Basic private final Window window; - public static TemplateThemeGridControlPane createFormThemesManagerPane(Window window) { + public static TemplateThemeGridControlPane createFormThemesManagerPane(@Nullable Window window) { FormThemeConfig config = FormThemeConfig.getInstance(); FormThemeProfilePane editPane = new FormThemeProfilePane(config); return new TemplateThemeGridControlPane<>(window, config, editPane); } - public static TemplateThemeGridControlPane createReportThemesManagerPane(Window window) { + public static TemplateThemeGridControlPane createReportThemesManagerPane(@Nullable Window window) { ReportThemeConfig config = ReportThemeConfig.getInstance(); ReportThemeProfilePane editPane = new ReportThemeProfilePane(config); return new TemplateThemeGridControlPane<>(window, config, editPane); } - public TemplateThemeGridControlPane(Window window, TemplateThemeConfig config, TemplateThemeProfilePane profilePane) { + public TemplateThemeGridControlPane(@Nullable Window window, TemplateThemeConfig config, TemplateThemeProfilePane profilePane) { this.window = window; this.config = config; this.profilePane = profilePane; @@ -124,13 +125,15 @@ public class TemplateThemeGridControlPane extends Basic } private void registerWindowListener() { - window.addWindowListener(new WindowAdapter() { - @Override - public void windowClosed(WindowEvent e) { - super.windowClosed(e); - asyncThemeFetcher.shutdown(); - } - }); + if (window != null) { + window.addWindowListener(new WindowAdapter() { + @Override + public void windowClosed(WindowEvent e) { + super.windowClosed(e); + asyncThemeFetcher.shutdown(); + } + }); + } } private void resetEnableRemoveAction(T selectedTheme, RemoveThemeAction removeAction) { diff --git a/designer-base/src/main/java/com/fr/design/mainframe/theme/TemplateThemeGridPagesPane.java b/designer-base/src/main/java/com/fr/design/mainframe/theme/TemplateThemeGridPagesPane.java index 330a2d0536..bfef5179a8 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/theme/TemplateThemeGridPagesPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/theme/TemplateThemeGridPagesPane.java @@ -22,6 +22,7 @@ import com.fr.design.mainframe.theme.provider.ThemeManageActionProvider; import com.fr.design.mainframe.theme.ui.BreadcrumbBar; import com.fr.stable.ArrayUtils; import com.fr.stable.unit.FU; +import com.fr.third.javax.annotation.Nullable; import com.fr.workspace.WorkContext; import javax.swing.BorderFactory; @@ -62,11 +63,15 @@ public class TemplateThemeGridPagesPane extends JPanel { private PageChangeListener pageChangeListener; private TemplateThemeGridPagePane currentTemplateThemeGridPagePane; - public TemplateThemeGridPagesPane(Window window) { + public TemplateThemeGridPagesPane() { + initializePane(null); + } + + public TemplateThemeGridPagesPane(@Nullable Window window) { initializePane(window); } - private void initializePane(Window window) { + private void initializePane(@Nullable Window window) { setLayout(new BorderLayout()); setBorder(BorderFactory.createEmptyBorder(10, 10, 0, 10)); @@ -234,7 +239,7 @@ public class TemplateThemeGridPagesPane extends JPanel { private final JTemplate template; public final TemplateThemeGridPane themeListPane; - public TemplateThemeUsingPane(Window window) { + public TemplateThemeUsingPane(@Nullable Window window) { super(); setLayout(new BorderLayout()); setBorder(new CompoundBorder( @@ -273,7 +278,7 @@ public class TemplateThemeGridPagesPane extends JPanel { public static class TemplateThemeManagingPane extends TemplateThemeGridPagePane { private final UITabbedPane tabbedPane; - public TemplateThemeManagingPane(Window window) { + public TemplateThemeManagingPane(@Nullable Window window) { setLayout(FRGUIPaneFactory.createBorderLayout()); tabbedPane = new UITabbedPane(); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/theme/TemplateThemeGridPane.java b/designer-base/src/main/java/com/fr/design/mainframe/theme/TemplateThemeGridPane.java index 5d5ea7052c..bce8590519 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/theme/TemplateThemeGridPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/theme/TemplateThemeGridPane.java @@ -9,6 +9,7 @@ import com.fr.design.event.ChangeListener; import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.stable.StringUtils; +import com.fr.third.javax.annotation.Nullable; import javax.swing.BorderFactory; import javax.swing.JPanel; @@ -56,7 +57,7 @@ public class TemplateThemeGridPane extends BasicPane { private final Window window; - public TemplateThemeGridPane(Window window, boolean displayTheme4NewTemplateMarker, TemplateThemeConfig config, TemplateThemeProfilePane profilePane) { + public TemplateThemeGridPane(@Nullable Window window, boolean displayTheme4NewTemplateMarker, TemplateThemeConfig config, TemplateThemeProfilePane profilePane) { this.window = window; this.displayTheme4NewTemplateMarker = displayTheme4NewTemplateMarker; this.config = config; @@ -90,21 +91,23 @@ public class TemplateThemeGridPane extends BasicPane { } private void registerWindowListener() { - window.addWindowListener(new WindowAdapter() { - @Override - public void windowOpened(WindowEvent e) { - super.windowOpened(e); - startListenThemeConfig(); - asyncFetchThemes(); - } + if (window != null) { + window.addWindowListener(new WindowAdapter() { + @Override + public void windowOpened(WindowEvent e) { + super.windowOpened(e); + startListenThemeConfig(); + asyncFetchThemes(); + } - @Override - public void windowClosed(WindowEvent e) { - super.windowClosed(e); - stopListenThemeConfig(); - asyncThemeFetcher.shutdown(); - } - }); + @Override + public void windowClosed(WindowEvent e) { + super.windowClosed(e); + stopListenThemeConfig(); + asyncThemeFetcher.shutdown(); + } + }); + } } public void fillContentListPane() { diff --git a/designer-realize/src/main/java/com/fr/quickeditor/cellquick/CellDSColumnEditor.java b/designer-realize/src/main/java/com/fr/quickeditor/cellquick/CellDSColumnEditor.java index 276f3ba743..0ede5114ff 100644 --- a/designer-realize/src/main/java/com/fr/quickeditor/cellquick/CellDSColumnEditor.java +++ b/designer-realize/src/main/java/com/fr/quickeditor/cellquick/CellDSColumnEditor.java @@ -42,6 +42,7 @@ import com.fr.report.cell.cellattr.core.group.DSColumn; import com.fr.report.cell.cellattr.core.group.FilterTypeEnum; import com.fr.report.cell.cellattr.core.group.SelectCount; import com.fr.stable.StringUtils; +import com.fr.third.jodd.util.ArraysUtil; import javax.swing.BorderFactory; import javax.swing.Icon; @@ -60,6 +61,7 @@ import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.util.ArrayList; +import java.util.Arrays; import static com.fr.report.cell.cellattr.core.group.FilterTypeEnum.BOTTOM; import static com.fr.report.cell.cellattr.core.group.FilterTypeEnum.EVEN; @@ -472,6 +474,7 @@ public class CellDSColumnEditor extends CellQuickEditor { if (cellElement != null) { sortPane.update(cellElement); valuePane.update(cellElement); + formatAttrPane.update(cellElement); filterPane.update(cellElement); //更新单元格扩展属性 updateExtendConfig(); @@ -486,6 +489,7 @@ public class CellDSColumnEditor extends CellQuickEditor { disableListener(); sortPane.populate(cellElement); valuePane.populate(cellElement); + formatAttrPane.populate(cellElement); filterPane.populate(cellElement); CellExpandAttr cellExpandAttr = cellElement.getCellExpandAttr(); if (cellExpandAttr == null) { @@ -614,15 +618,19 @@ public class CellDSColumnEditor extends CellQuickEditor { enableListener(); - double[] rowSize = {P, P, P, P, P, P}; - double[] columnSize = {F}; Component[][] components = new Component[][]{ {sortPane}, {filterPane}, {valuePane}, + {formatAttrPane}, {extendableDirectionPane}, {multiNumPane} }; + + double[] rowSize = new double[components.length]; + Arrays.fill(rowSize, P); + double[] columnSize = {F}; + return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, HGAP, VGAP); } @@ -1233,15 +1241,20 @@ public class CellDSColumnEditor extends CellQuickEditor { } public class FormatAttrPane extends AbstractAttrNoScrollPane { - private final TextFormatPane formatPane; + private TextFormatPane formatPane; - public FormatAttrPane() { + @Override + protected JPanel createContentPane() { this.formatPane = new TextFormatPane(); + return this.formatPane; } @Override - protected JPanel createContentPane() { - return formatPane; + public Dimension getPreferredSize() { + if (formatPane == null) { + return super.getPreferredSize(); + } + return formatPane.getPreferredSize(); } protected void initContentPane() { @@ -1253,13 +1266,13 @@ public class CellDSColumnEditor extends CellQuickEditor { } public void populate(CellElement cellElement) { - if (cellElement != null) { + if (cellElement != null && formatPane != null) { formatPane.populateBean(cellElement.getStyle()); } } public void update(CellElement cellElement) { - if (cellElement != null) { + if (cellElement != null && formatPane != null) { cellElement.setStyle(formatPane.update(cellElement.getStyle())); } } diff --git a/designer-realize/src/main/java/com/fr/quickeditor/cellquick/CellFormulaQuickEditor.java b/designer-realize/src/main/java/com/fr/quickeditor/cellquick/CellFormulaQuickEditor.java index 5695f1ba2e..30a5f0f558 100644 --- a/designer-realize/src/main/java/com/fr/quickeditor/cellquick/CellFormulaQuickEditor.java +++ b/designer-realize/src/main/java/com/fr/quickeditor/cellquick/CellFormulaQuickEditor.java @@ -8,8 +8,11 @@ import com.fr.design.actions.insert.cell.FormulaCellAction; import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.formula.FormulaFactory; import com.fr.design.formula.UIFormula; +import com.fr.design.gui.frpane.AbstractAttrNoScrollPane; +import com.fr.design.gui.frpane.AttributeChangeListener; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.itextfield.UITextField; +import com.fr.design.gui.style.TextFormatPane; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.design.mainframe.DesignerContext; @@ -35,6 +38,7 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; +import java.util.Arrays; /** * 公式快速编辑面板,同文本数字编辑拆分 @@ -46,6 +50,7 @@ import java.awt.event.KeyEvent; public class CellFormulaQuickEditor extends CellQuickEditor { //文本域 private UITextField formulaTextField; + private TextFormatPane formatPane; //编辑状态 private boolean isEditing = false; @@ -136,10 +141,59 @@ public class CellFormulaQuickEditor extends CellQuickEditor { pane.add(formulaButton, BorderLayout.EAST); content.add(pane, BorderLayout.NORTH); + + Component[][] componentLines = new Component[][] { + new Component[]{EMPTY_LABEL, content}, + new Component[]{createFormatPane(), null}, + }; + double[] rowSize = new double[componentLines.length]; + Arrays.fill(rowSize, TableLayout.PREFERRED); + double[] columnSize = new double[] {TableLayout.PREFERRED, TableLayout.FILL }; return TableLayoutHelper.createGapTableLayoutPane(new Component[][]{ - new Component[]{EMPTY_LABEL, content}}, - new double[]{TableLayout.PREFERRED}, - new double[]{TableLayout.PREFERRED, TableLayout.FILL}, HGAP, VGAP); + new Component[]{EMPTY_LABEL, content}, + new Component[]{createFormatPane(), null}, + }, + rowSize, columnSize, HGAP, VGAP); + } + + private JPanel createFormatPane() { + formatPane = new TextFormatPane(); + AbstractAttrNoScrollPane container = new AbstractAttrNoScrollPane() { + @Override + protected JPanel createContentPane() { + return formatPane; + } + + protected void initContentPane() { + leftContentPane = createContentPane(); + if (leftContentPane != null) { + leftContentPane.setBorder(BorderFactory.createEmptyBorder()); + this.add(leftContentPane, BorderLayout.CENTER); + } + } + }; + + container.addAttributeChangeListener(new AttributeChangeListener() { + @Override + public void attributeChange() { + isEditing = true; + + CellSelection cs1 = (CellSelection) tc.getSelection(); + cellElement = tc.getEditingElementCase().getTemplateCellElement(cs1.getColumn(), cs1.getRow()); + + if (cellElement == null) { + CellSelection cs = (CellSelection) tc.getSelection(); + cellElement = DefaultThemedTemplateCellElementCase.createInstance(cs.getColumn(), cs.getRow()); + tc.getEditingElementCase().addCellElement(cellElement, false); + } + + cellElement.setStyle(formatPane.update(cellElement.getStyle())); + + fireTargetModified(); + isEditing = false; + } + }); + return container; } @Override @@ -202,6 +256,11 @@ public class CellFormulaQuickEditor extends CellQuickEditor { } showText(str); formulaTextField.setEditable(tc.isSelectedOneCell()); + + if (cellElement != null) { + Style style = cellElement.getStyle(); + formatPane.populateBean(style); + } } /** diff --git a/designer-realize/src/main/java/com/fr/quickeditor/cellquick/CellStringQuickEditor.java b/designer-realize/src/main/java/com/fr/quickeditor/cellquick/CellStringQuickEditor.java index 76e0926e00..1b2c9ae4db 100644 --- a/designer-realize/src/main/java/com/fr/quickeditor/cellquick/CellStringQuickEditor.java +++ b/designer-realize/src/main/java/com/fr/quickeditor/cellquick/CellStringQuickEditor.java @@ -3,6 +3,7 @@ package com.fr.quickeditor.cellquick; import com.fr.base.BaseFormula; import com.fr.base.Style; import com.fr.base.TextFormat; +import com.fr.design.designer.IntervalConstants; import com.fr.design.gui.frpane.AbstractAttrNoScrollPane; import com.fr.design.gui.frpane.AttributeChangeListener; import com.fr.design.gui.itextarea.UITextArea; @@ -65,7 +66,7 @@ public class CellStringQuickEditor extends CellQuickEditor { */ @Override public JComponent createCenterBody() { - JPanel content = new JPanel(new BorderLayout()); + JPanel content = new JPanel(new BorderLayout(0, IntervalConstants.INTERVAL_L1)); stringTextArea = new UITextArea(); stringTextArea.addKeyListener(new KeyAdapter() {