From 18a88dc422b332cd28ea7d1eda31df4df251f1de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=96=B9=E7=A3=8A?= <294531121@qq.com> Date: Mon, 30 Aug 2021 16:40:10 +0800 Subject: [PATCH 01/17] =?UTF-8?q?CHART-20476=20=E6=8A=A5=E8=A1=A8=E5=9D=97?= =?UTF-8?q?=E5=86=85=E5=9B=BE=E8=A1=A8-=E8=B6=85=E9=93=BE=E6=82=AC?= =?UTF-8?q?=E6=B5=AE=E7=AA=97=E8=AE=BE=E7=BD=AE=E9=A1=B9=E6=B2=A1=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/module/ChartHyperlinkGroup.java | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/designer-chart/src/main/java/com/fr/design/module/ChartHyperlinkGroup.java b/designer-chart/src/main/java/com/fr/design/module/ChartHyperlinkGroup.java index 7611f3300d..06c1010091 100644 --- a/designer-chart/src/main/java/com/fr/design/module/ChartHyperlinkGroup.java +++ b/designer-chart/src/main/java/com/fr/design/module/ChartHyperlinkGroup.java @@ -65,14 +65,17 @@ public class ChartHyperlinkGroup extends BaseHyperlinkGroup { return !ComparatorUtils.equals(clazz, formHyperlink.getClass()); } else { // 如果是决策报表 - if (template.getEditingReportIndex() == BaseJForm.FORM_TAB) { - // 编辑的是决策报表中的图表,那么没有ChartHyperRelateFloatLink 和 ChartHyperRelateCellLink 选项,有FormHyperlink 选项 - Class[] classes = new Class[]{ChartHyperRelateCellLink.class, ChartHyperRelateFloatLink.class}; - return !ArrayUtils.contains(classes, clazz); - } else if (template.getEditingReportIndex() == BaseJForm.ELEMENTCASE_TAB) { - // 编辑的是决策报表中的报表块,那么没有 ChartHyperPoplink 和 ChartHyperRelateFloatLink - Class[] classes = new Class[]{ChartHyperPoplink.class, ChartHyperRelateFloatLink.class}; - return !ArrayUtils.contains(classes, clazz); + Class[] classes = new Class[]{ChartHyperRelateCellLink.class, ChartHyperRelateFloatLink.class}; + for (Class aClass : classes) { + if (template.getEditingReportIndex() == BaseJForm.FORM_TAB) { + // 编辑的是决策报表中的图表,那么没有ChartHyperRelateFloatLink 和 ChartHyperRelateCellLink 选项,有FormHyperlink 选项 + if (ComparatorUtils.equals(aClass, clazz)) { + return false; + } + } else if (template.getEditingReportIndex() == BaseJForm.ELEMENTCASE_TAB) { + // 编辑的是决策报表中的报表块,那么没有 ChartHyperRelateFloatLink,有ChartHyperRelateCellLink 和 FormHyperlink 选项 + return !ComparatorUtils.equals(clazz, ChartHyperRelateFloatLink.class); + } } } return true; From 212cd97557c45987e71e149e059a02f667eca0fe Mon Sep 17 00:00:00 2001 From: kerry Date: Wed, 1 Sep 2021 19:56:23 +0800 Subject: [PATCH 02/17] =?UTF-8?q?REPORT-58395=E3=80=90=E4=B8=BB=E9=A2=98?= =?UTF-8?q?=E5=88=87=E6=8D=A2=E3=80=91frm=E4=B8=BB=E9=A2=98=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E7=BB=84=E4=BB=B6=E6=A0=87=E9=A2=98=E5=9B=BE=E6=A1=88?= =?UTF-8?q?=E4=BB=A5=E5=90=8E=EF=BC=8C=E5=B7=A6=E4=BE=A7=E9=A2=84=E8=A7=88?= =?UTF-8?q?=E5=9B=BE=E4=B8=8D=E7=94=9F=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/style/AbstractSelectBox.java | 1 - .../background/BackgroundJComponent.java | 32 ++++++++++--- .../style/color/NewColorSelectPane.java | 46 ++++++++++++------- 3 files changed, 54 insertions(+), 25 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/style/AbstractSelectBox.java b/designer-base/src/main/java/com/fr/design/style/AbstractSelectBox.java index 1d66094f15..cd2b8e47a8 100644 --- a/designer-base/src/main/java/com/fr/design/style/AbstractSelectBox.java +++ b/designer-base/src/main/java/com/fr/design/style/AbstractSelectBox.java @@ -40,7 +40,6 @@ public abstract class AbstractSelectBox extends AbstractPopBox implements Mou displayComponent = new BackgroundJComponent(); displayComponent.setEmptyBackground(); - displayComponent.setBorder(new TriggleLineBorder()); triggleButton = new UIButton(UIConstants.ARROW_DOWN_ICON) { public boolean shouldResponseChangeListener() { return false; diff --git a/designer-base/src/main/java/com/fr/design/style/background/BackgroundJComponent.java b/designer-base/src/main/java/com/fr/design/style/background/BackgroundJComponent.java index 9d3c31bd46..377da330c9 100644 --- a/designer-base/src/main/java/com/fr/design/style/background/BackgroundJComponent.java +++ b/designer-base/src/main/java/com/fr/design/style/background/BackgroundJComponent.java @@ -1,10 +1,12 @@ package com.fr.design.style.background; +import java.awt.Color; import java.awt.Graphics; +import java.awt.Insets; import java.awt.geom.Rectangle2D; import javax.swing.JComponent; - +import com.fr.design.border.UIRoundedBorder; import com.fr.general.Background; /** @@ -18,7 +20,7 @@ public class BackgroundJComponent extends JComponent { protected Background background ; public BackgroundJComponent() { - + this.setBorder(new UIRoundedBorder(Color.decode("#999999"), 2, 2)); } public BackgroundJComponent(Background background) { @@ -29,16 +31,32 @@ public class BackgroundJComponent extends JComponent { super.paint(g); if(background != null && this.getSize().getWidth() > 0 && this.getSize().getHeight() > 0) { - background.paint(g, new Rectangle2D.Double(1, 1, this.getSize().getWidth() - 2, - this.getSize().getHeight() - 2)); - } + background.paint(g, new Rectangle2D.Double(2, 2, this.getSize().getWidth() - 4, + this.getSize().getHeight() - 4)); + } + } - - public void setEmptyBackground() { + + @Override + protected void paintBorder(Graphics g) { +// Color oldColor = g.getColor(); +// Border border = getBorder(); +// if (border != null) { +// border.paintBorder(this, g, 0, 0, getWidth(), getHeight()); +// } + super.paintBorder(g); + } + + public void setEmptyBackground() { this.background = null; } public void setSelfBackground(Background background) { this.background = background; } + + @Override + public Insets getInsets() { + return new Insets(0,0,0,0); + } } \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/style/color/NewColorSelectPane.java b/designer-base/src/main/java/com/fr/design/style/color/NewColorSelectPane.java index 8abab768ab..7cf7a4708c 100644 --- a/designer-base/src/main/java/com/fr/design/style/color/NewColorSelectPane.java +++ b/designer-base/src/main/java/com/fr/design/style/color/NewColorSelectPane.java @@ -39,6 +39,8 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable { private static final long serialVersionUID = -8634152305687249392L; private static final float BRIGHTNESS_VALUE = 0.15F; private static final float PURITY_VALUE = 0.1F; + private static final int WIDTH = 197; + private static final int HEIGHT = 250; private FineColor color = null; // color // color setting action. @@ -49,9 +51,6 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable { private boolean isSupportThemeColor; - public final static int TRANSPARENT_WINDOW_HEIGHT = 165; - public final static int WINDOW_HEIGHT = 150; - // 最近使用颜色 private final NewUsedColorPane usedColorPane; private final JPanel menuColorPane; @@ -84,10 +83,12 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable { this.add(centerPane, BorderLayout.CENTER); menuColorPane = getMenuColorPane(); - centerPane.add(menuColorPane); + if(isSupportThemeColor){ - initThemeColorPane(); + JPanel themePane = initThemeColorPane(); + centerPane.add(themePane); }else { + centerPane.add(menuColorPane); initMenuColorPane(); } @@ -138,8 +139,14 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable { return jPanel; } - private void initThemeColorPane(){ + private JPanel initThemeColorPane(){ menuColorPane.removeAll(); + JPanel themeColorPane = new JPanel(new BorderLayout(0, 5)); + themeColorPane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); + themeColorPane.add(new UILabel(Toolkit.i18nText("Fine-Design_Basic_Theme_Color")), BorderLayout.CENTER); + + themeColorPane.add(menuColorPane, BorderLayout.SOUTH); + menuColorPane.setLayout(new BorderLayout(0, 10)); JPanel northPane = new JPanel(new GridLayout(1, 8, 3, 0)); JPanel centerPane = new JPanel(new GridLayout(1, 8, 3, 0)); @@ -147,10 +154,6 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable { menuColorPane.add(centerPane, BorderLayout.CENTER); Color[] colorArray = new Color[] { - // 2列灰度色 - Color.decode("#B3B3B3"), - Color.decode("#808080"), - // 8列主题色 Color.decode("#FFFFFF"), Color.decode("#CCCCCC"), @@ -160,13 +163,17 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable { Color.decode("#CCCCCC"), Color.decode("#FFFFFF"), Color.decode("#CCCCCC"), + + // 2列灰度色 + Color.decode("#808080"), + Color.decode("#B3B3B3"), }; if (themeColorCellGrid == null) { themeColorCellGrid = new ColorCell[colorArray.length][5]; for (int i = 0; i < colorArray.length; i++) { ColorCell[] colorCellColumn = new ColorCell[5]; - boolean isDefaultColor = (i == 0 || i == 1); + boolean isDefaultColor = (i == colorArray.length - 1 || i == colorArray.length - 2); Color color = colorArray[i]; colorCellColumn[0] = createFineColorCell(color, isDefaultColor, i, 2); colorCellColumn[2] = createFineColorCell(color = saturationDown(color, isDefaultColor, true), isDefaultColor, i, 1); @@ -191,6 +198,7 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable { } refreshThemeMenuColorPane(); + return themeColorPane; } private void refreshThemeMenuColorPane() { @@ -210,14 +218,14 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable { return; } - for (int i = 2; i < themeColorCellGrid.length; i++) { - Color color = standardColors.get(i - 2); + for (int i = 0; i < themeColorCellGrid.length - 2; i++) { + Color color = standardColors.get(i); themeColorCellGrid[i][0].setColor(color); themeColorCellGrid[i][2].setColor(color = saturationDown(color, false, true)); themeColorCellGrid[i][1].setColor(saturationDown(color, false, true)); - color = standardColors.get(i - 2); + color = standardColors.get(i); themeColorCellGrid[i][3].setColor(color = saturationDown(color, false, false)); themeColorCellGrid[i][4].setColor(saturationDown(color, false, false)); } @@ -225,7 +233,7 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable { private FineColorCell createFineColorCell(Color color, boolean isDefaultColor, int x, int y) { - return isDefaultColor ? new FineColorCell(color, this) : new FineColorCell(color, this, x - 2, y); + return isDefaultColor ? new FineColorCell(color, this) : new FineColorCell(color, this, x, y); } /** @@ -375,10 +383,14 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable { @Override public Dimension getPreferredSize() { + int height = HEIGHT; if (isSupportTransparent) { - return new Dimension(197, 265); + height += 15; + } + if (isSupportThemeColor) { + height += 25; } - return new Dimension(197, 250); + return new Dimension(WIDTH, height); } /** From 2bfdda603cb71f95c261dddef312d6576f61542b Mon Sep 17 00:00:00 2001 From: kuangshuai Date: Thu, 2 Sep 2021 14:44:55 +0800 Subject: [PATCH 03/17] =?UTF-8?q?REPORT-58655=20=E5=A4=8D=E7=94=A8?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E7=9A=84=E5=9C=A8=E7=BA=BF=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E9=9C=80=E8=A6=81=E5=9C=A8=E7=AD=9B=E9=80=89=E6=9D=A1=E4=BB=B6?= =?UTF-8?q?=E4=B8=8B=E6=90=9C=E7=B4=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../share/ui/online/AbstractOnlineWidgetShowPane.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/AbstractOnlineWidgetShowPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/AbstractOnlineWidgetShowPane.java index 7c090cac39..117ac0ab86 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/AbstractOnlineWidgetShowPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/online/AbstractOnlineWidgetShowPane.java @@ -47,14 +47,11 @@ public abstract class AbstractOnlineWidgetShowPane extends JPanel { private OnlineShareWidget[] sharableWidgetProviders; - //缓存一份用于搜索 - private final OnlineShareWidget[] sharableWidgetCache; //主面板和搜索面板的cardLayout private CardLayout mainCardLayout; public AbstractOnlineWidgetShowPane(OnlineShareWidget[] sharableWidgetProviders) { - this.sharableWidgetCache = sharableWidgetProviders; this.sharableWidgetProviders = sharableWidgetProviders; this.setLayout(FRGUIPaneFactory.createBorderLayout()); JPanel contentPane = initContentPane(); @@ -119,7 +116,7 @@ public abstract class AbstractOnlineWidgetShowPane extends JPanel { } List widgets = new ArrayList<>(); if (StringUtils.isNotEmpty(text)) { - for (OnlineShareWidget provider : sharableWidgetCache) { + for (OnlineShareWidget provider : sharableWidgetProviders) { if (provider.getName().toLowerCase().contains(text)) { widgets.add(provider); } From 26afc981ccce435c29025aa26eed946b0c86ee4f Mon Sep 17 00:00:00 2001 From: Starryi Date: Thu, 2 Sep 2021 14:25:45 +0800 Subject: [PATCH 04/17] =?UTF-8?q?REPORT-58667=20=E3=80=90=E4=B8=BB?= =?UTF-8?q?=E9=A2=98=E5=88=87=E6=8D=A2=E3=80=91=E4=BF=AE=E6=94=B9=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E4=B8=BB=E9=A2=98=E7=AE=A1=E7=90=86=E7=9A=84tab?= =?UTF-8?q?=E5=90=8D=E7=A7=B0=E3=80=81=E7=AA=97=E5=8F=A3=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 新增了聚合报表的主题,所以名称需要改下 【改动思路】 同上 --- .../mainframe/theme/dialog/TemplateThemeManageDialog.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/theme/dialog/TemplateThemeManageDialog.java b/designer-base/src/main/java/com/fr/design/mainframe/theme/dialog/TemplateThemeManageDialog.java index e7acb8d8ad..31762e72e6 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/theme/dialog/TemplateThemeManageDialog.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/theme/dialog/TemplateThemeManageDialog.java @@ -70,8 +70,8 @@ public class TemplateThemeManageDialog extends TemplateThemeDialog { reportThemesManagerPane = TemplateThemeManagePane.createReportThemesManagerPane(); reportThemesManagerPane.startListenThemeConfig(); - tabbedPane.addTab(Toolkit.i18nText("Fine-Design_Basic_Template_Theme_Manager_Dialog_FORM_TAB"), formThemesManagerPane); - tabbedPane.addTab(Toolkit.i18nText("Fine-Design_Basic_Template_Theme_Manager_Dialog_REPORT_TAB"), reportThemesManagerPane); + tabbedPane.addTab(Toolkit.i18nText("Fine-Design_Basic_Template_Theme_Manager_Dialog_Form_Tab"), formThemesManagerPane); + tabbedPane.addTab(Toolkit.i18nText("Fine-Design_Basic_Template_Theme_Manager_Dialog_Report_Tab"), reportThemesManagerPane); tabbedPane.setSelectedIndex(0); JTemplate template = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); From e26869085a774d02112afb33e31846397440b037 Mon Sep 17 00:00:00 2001 From: Starryi Date: Thu, 2 Sep 2021 15:07:40 +0800 Subject: [PATCH 05/17] =?UTF-8?q?CHART-20536=20=E5=9B=BE=E8=A1=A8=E9=A2=84?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=E9=85=8D=E8=89=B2=EF=BC=8C=E5=8D=87=E7=BA=A7?= =?UTF-8?q?=E5=85=BC=E5=AE=B9=E5=90=8E=EF=BC=8C=E4=B8=BB=E9=A2=98=E9=85=8D?= =?UTF-8?q?=E8=89=B2=E9=9D=A2=E6=9D=BF=E5=86=85=E5=AE=B9=E5=9B=BA=E5=AE=9A?= =?UTF-8?q?=E4=B8=8D=E5=8F=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 1. 兼容主题支持当前图表预定义配色 2. 图表预定义配色的数量导致主题色中实际颜色的数量可能 超过八个(但用户在界面上只能看到并编辑前八个),因此 需要调整下颜色选择面板等组件 【改动思路】 同上 --- .../theme/edit/ui/ColorListExtendedPane.java | 7 ++----- .../design/mainframe/theme/edit/ui/ColorListPane.java | 11 +++++++---- .../com/fr/design/style/color/NewColorSelectPane.java | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/theme/edit/ui/ColorListExtendedPane.java b/designer-base/src/main/java/com/fr/design/mainframe/theme/edit/ui/ColorListExtendedPane.java index 4aac8562d1..9d02180e7d 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/theme/edit/ui/ColorListExtendedPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/theme/edit/ui/ColorListExtendedPane.java @@ -66,10 +66,7 @@ public class ColorListExtendedPane extends JPanel implements MouseListener { public void populate(List colors) { if (colors.size() > 0) { colorList.clear(); - for (int i = 0; i < colorCount; i++) { - Color color = colors.get(i % colorCount); - colorList.add(color); - } + colorList.addAll(colors); repaint(); } } @@ -132,7 +129,7 @@ public class ColorListExtendedPane extends JPanel implements MouseListener { super.paint(g); Color oldColor = g.getColor(); - for (int i = 0; i < colorList.size(); i++) { + for (int i = 0; i < colorCount; i++) { int x = i * (boxSize + boxGap); for (int j = 0; j < extendedCount; j++) { Color color = extendedColorComputer.computeExtendedColor(colorList.get(i), j, extendedCount); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/theme/edit/ui/ColorListPane.java b/designer-base/src/main/java/com/fr/design/mainframe/theme/edit/ui/ColorListPane.java index 2bf1931f14..adeca3d7a5 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/theme/edit/ui/ColorListPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/theme/edit/ui/ColorListPane.java @@ -88,10 +88,13 @@ public class ColorListPane extends JPanel implements UIObserver { } public void populate(List colors) { - for (int i = 0; i < colors.size() && i < colorList.size(); i++) { - Color color = colors.get(i % colorCount); - colorList.set(i, color); - colorButtons.get(i).setSelectObject(color); + colorList.clear(); + for (int i = 0; i < colors.size(); i++) { + Color color = colors.get(i); + colorList.add(color); + if (i < colorCount) { + colorButtons.get(i).setSelectObject(color); + } } } diff --git a/designer-base/src/main/java/com/fr/design/style/color/NewColorSelectPane.java b/designer-base/src/main/java/com/fr/design/style/color/NewColorSelectPane.java index 8abab768ab..6a5bcb78bd 100644 --- a/designer-base/src/main/java/com/fr/design/style/color/NewColorSelectPane.java +++ b/designer-base/src/main/java/com/fr/design/style/color/NewColorSelectPane.java @@ -206,7 +206,7 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable { } } } - if (standardColors == null || standardColors.size() != 8) { + if (standardColors == null || standardColors.size() < 8) { return; } From bae26e337e9e306bf17bafbb57355e2f979d0fdf Mon Sep 17 00:00:00 2001 From: Starryi Date: Thu, 2 Sep 2021 15:36:17 +0800 Subject: [PATCH 06/17] =?UTF-8?q?REPORT-58539=20=E3=80=90=E4=B8=BB?= =?UTF-8?q?=E9=A2=98=E5=88=87=E6=8D=A2=E3=80=91=E6=82=AC=E6=B5=AE=E5=85=83?= =?UTF-8?q?=E7=B4=A0-=E6=A0=B7=E5=BC=8F=E7=AA=97=E5=8F=A3ui=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 修复悬浮元素样式面板的标题边框文字颜色为黑色的问题 【改动思路】 同上 --- .../src/main/java/com/fr/design/style/AlignmentPane.java | 7 ++++--- .../src/main/java/com/fr/design/style/BorderPane.java | 5 +++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/style/AlignmentPane.java b/designer-base/src/main/java/com/fr/design/style/AlignmentPane.java index 136de486a6..22f60b185c 100644 --- a/designer-base/src/main/java/com/fr/design/style/AlignmentPane.java +++ b/designer-base/src/main/java/com/fr/design/style/AlignmentPane.java @@ -5,6 +5,7 @@ package com.fr.design.style; import com.fr.base.BaseUtils; import com.fr.base.Style; +import com.fr.design.border.UITitledBorder; import com.fr.design.dialog.BasicPane; import com.fr.design.gui.ibutton.UIRadioButton; import com.fr.design.gui.icheckbox.UICheckBox; @@ -86,7 +87,7 @@ public class AlignmentPane extends BasicPane { //richer:文本控制和图片布局 JPanel textDirectionPanel = FRGUIPaneFactory.createY_AXISBoxInnerContainer_S_Pane(); contentPane.add(textDirectionPanel); - textDirectionPanel.setBorder(GUICoreUtils.createTitledBorder(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_StyleAlignment_Text_Rotation"), null)); + textDirectionPanel.setBorder(UITitledBorder.createBorderWithTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_StyleAlignment_Text_Rotation"))); JPanel isVerticalTextPanel = FRGUIPaneFactory.createMediumHGapFlowInnerContainer_M_Pane(); textDirectionPanel.add(isVerticalTextPanel); initVerticalPane(isVerticalTextPanel); @@ -131,7 +132,7 @@ public class AlignmentPane extends BasicPane { private void initSpacingPane (JPanel spacingPane) { spacingPane.setLayout(new GridLayout(1, 3)); - spacingPane.setBorder(BorderFactory.createTitledBorder(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Style_Spacing") + ":")); + spacingPane.setBorder(UITitledBorder.createBorderWithTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Style_Spacing") + ":")); spacingBeforeSpinner = new UIBasicSpinner(new SpinnerNumberModel(new Integer(0), new Integer(0), null, new Integer(1))); spacingBeforeSpinner.addChangeListener(changeListener); @@ -153,7 +154,7 @@ public class AlignmentPane extends BasicPane { private JPanel getIndentPane() { JPanel indentPane = FRGUIPaneFactory.createMediumHGapFlowInnerContainer_M_Pane(); - indentPane.setBorder(GUICoreUtils.createTitledBorder(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Sytle_Indentation"), null)); + indentPane.setBorder(UITitledBorder.createBorderWithTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Sytle_Indentation"))); Comparable maximum = null; leftIndentSpinner = new UIBasicSpinner(new SpinnerNumberModel(new Integer(0), new Integer(0), maximum, new Integer(1))); leftIndentSpinner.addChangeListener(changeListener); diff --git a/designer-base/src/main/java/com/fr/design/style/BorderPane.java b/designer-base/src/main/java/com/fr/design/style/BorderPane.java index 442f301894..c9dff2c3d2 100644 --- a/designer-base/src/main/java/com/fr/design/style/BorderPane.java +++ b/designer-base/src/main/java/com/fr/design/style/BorderPane.java @@ -7,6 +7,7 @@ import com.fr.base.BaseUtils; import com.fr.base.CellBorderStyle; import com.fr.base.GraphHelper; import com.fr.base.Style; +import com.fr.design.border.UITitledBorder; import com.fr.design.dialog.BasicPane; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.icombobox.LineComboBox; @@ -96,7 +97,7 @@ public class BorderPane extends BasicPane { JPanel centerPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); - centerPane.setBorder(GUICoreUtils.createTitledBorder(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preview"), null)); + centerPane.setBorder(UITitledBorder.createBorderWithTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preview"))); JPanel borderAllControlPane = FRGUIPaneFactory.createCenterFlowInnerContainer_S_Pane(); centerPane.add(borderAllControlPane, BorderLayout.NORTH); borderAllControlPane.setBorder(BorderFactory.createEmptyBorder(0, 0, 4, 0)); @@ -147,7 +148,7 @@ public class BorderPane extends BasicPane { JPanel northPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); - northPane.setBorder(GUICoreUtils.createTitledBorder(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Line"), null)); + northPane.setBorder(UITitledBorder.createBorderWithTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Line"))); JPanel rightTopPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); northPane.add(rightTopPane, BorderLayout.NORTH); JPanel first = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); From a2c89df2d535ea06afdb74975ec129316ac19ac5 Mon Sep 17 00:00:00 2001 From: Starryi Date: Thu, 2 Sep 2021 16:50:20 +0800 Subject: [PATCH 07/17] =?UTF-8?q?REPORT-58520=20FR11-=E4=BA=8C=E8=BD=AE?= =?UTF-8?q?=E5=9B=9E=E5=BD=92-=E6=A8=A1=E6=9D=BF-=E7=BA=B8=E5=BC=A0?= =?UTF-8?q?=E8=83=8C=E6=99=AF-=E8=83=8C=E6=99=AF=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E4=B8=8D=E5=85=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 左侧背景预览面板宽度应自适应 【改动思路】 同上 --- .../java/com/fr/design/report/NewReportBackgroundPane.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/design/report/NewReportBackgroundPane.java b/designer-realize/src/main/java/com/fr/design/report/NewReportBackgroundPane.java index 0e5b327890..cf514512da 100644 --- a/designer-realize/src/main/java/com/fr/design/report/NewReportBackgroundPane.java +++ b/designer-realize/src/main/java/com/fr/design/report/NewReportBackgroundPane.java @@ -140,11 +140,11 @@ public class NewReportBackgroundPane extends BasicPane { } }); - JPanel contentContainer = FRGUIPaneFactory.createBorderLayout_S_Pane(); + JPanel contentContainer = new JPanel(new BorderLayout(IntervalConstants.INTERVAL_L6, 0)); contentContainer.setBorder(BorderFactory.createEmptyBorder()); contentContainer.setBorder(BorderFactory.createEmptyBorder()); contentContainer.setPreferredSize(new Dimension(600, 540)); - contentContainer.add(createLeftPane(), BorderLayout.WEST); + contentContainer.add(createLeftPane(), BorderLayout.CENTER); contentContainer.add(createRightPane(), BorderLayout.EAST); addAttributeChangeListener(new AttributeChangeListener() { From 622c0456b3ebd8b66f498d05493636d8536d17cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=96=B9=E7=A3=8A?= <294531121@qq.com> Date: Thu, 2 Sep 2021 16:50:46 +0800 Subject: [PATCH 08/17] =?UTF-8?q?REPORT-57881=2010.0.19=E4=B8=80=E8=BD=AE?= =?UTF-8?q?=E5=86=92=E7=83=9F-=E6=96=AD=E7=BD=91=E6=97=B6=E6=89=93?= =?UTF-8?q?=E5=BC=80=E8=AE=BE=E8=AE=A1=E5=99=A8=E5=86=85=E7=BD=AE=E5=B8=AE?= =?UTF-8?q?=E5=8A=A9=E6=96=87=E6=A1=A3=EF=BC=8C=E6=97=A5=E5=BF=97=E4=B8=AD?= =?UTF-8?q?=E6=B2=A1=E6=9C=89=E7=A6=BB=E7=BA=BF=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/actions/help/TutorialAction.java | 5 +++++ .../java/com/fr/design/login/AbstractDesignerSSO.java | 11 +++++++++++ 2 files changed, 16 insertions(+) diff --git a/designer-base/src/main/java/com/fr/design/actions/help/TutorialAction.java b/designer-base/src/main/java/com/fr/design/actions/help/TutorialAction.java index cf4f02f405..3e08b13991 100644 --- a/designer-base/src/main/java/com/fr/design/actions/help/TutorialAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/help/TutorialAction.java @@ -1,5 +1,6 @@ package com.fr.design.actions.help; +import com.fr.design.i18n.Toolkit; import com.fr.design.login.AbstractDesignerSSO; import com.fr.design.menu.MenuKeySet; import com.fr.general.CloudCenter; @@ -52,6 +53,10 @@ public class TutorialAction extends AbstractDesignerSSO { } } + public String getOffLineWarnMessage() { + return Toolkit.i18nText("Fine-Design_Offline_Helptutorial_Msg"); + } + public static final MenuKeySet HELP_TUTORIAL = new MenuKeySet() { @Override public char getMnemonic() { diff --git a/designer-base/src/main/java/com/fr/design/login/AbstractDesignerSSO.java b/designer-base/src/main/java/com/fr/design/login/AbstractDesignerSSO.java index 2662198bbc..f38fc1d08c 100644 --- a/designer-base/src/main/java/com/fr/design/login/AbstractDesignerSSO.java +++ b/designer-base/src/main/java/com/fr/design/login/AbstractDesignerSSO.java @@ -6,6 +6,9 @@ import com.fr.design.actions.UpdateAction; import com.fr.design.login.utils.DesignerLoginUtils; import com.fr.design.os.impl.SupportOSImpl; import com.fr.design.utils.BrowseUtils; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.StringUtils; + import java.awt.event.ActionEvent; import java.util.HashMap; import java.util.Map; @@ -21,6 +24,10 @@ public abstract class AbstractDesignerSSO extends UpdateAction { public void actionPerformed(ActionEvent event) { String url = getJumpUrl(); if (!DesignerLoginUtils.isOnline()) { + String message = getOffLineWarnMessage(); + if (StringUtils.isNotEmpty(message)) { + FineLoggerFactory.getLogger().warn(message); + } BrowseUtils.browser(url); return; } @@ -47,4 +54,8 @@ public abstract class AbstractDesignerSSO extends UpdateAction { } public abstract String getJumpUrl(); + + public String getOffLineWarnMessage() { + return StringUtils.EMPTY; + } } From a4350ad4baab9b28b09939795391537184d56ea8 Mon Sep 17 00:00:00 2001 From: kerry Date: Thu, 2 Sep 2021 17:49:33 +0800 Subject: [PATCH 09/17] =?UTF-8?q?REPORT-58543=E3=80=90=E4=B8=BB=E9=A2=98?= =?UTF-8?q?=E5=88=87=E6=8D=A2=E3=80=91=E5=AD=97=E7=AC=A6=E9=A2=9C=E8=89=B2?= =?UTF-8?q?=E7=9A=84=E4=B8=BB=E9=A2=98=E8=89=B2=E6=8E=A7=E4=BB=B6=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=E8=89=B2=E5=9D=97=E6=B2=A1=E6=9C=89=E9=80=89=E4=B8=AD?= =?UTF-8?q?=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/gui/ibutton/UIColorButton.java | 1 + .../theme/preview/ComponentPreviewPane.java | 40 +++++++- .../ecpreview/cell/AbstractPreviewCell.java | 7 +- .../style/color/ColorControlWindow.java | 4 + .../color/ColorControlWindowWithAuto.java | 5 + .../style/color/NewColorSelectPane.java | 92 ++++++++----------- 6 files changed, 89 insertions(+), 60 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/gui/ibutton/UIColorButton.java b/designer-base/src/main/java/com/fr/design/gui/ibutton/UIColorButton.java index 8171f31cb7..31a6d963d9 100644 --- a/designer-base/src/main/java/com/fr/design/gui/ibutton/UIColorButton.java +++ b/designer-base/src/main/java/com/fr/design/gui/ibutton/UIColorButton.java @@ -136,6 +136,7 @@ public class UIColorButton extends UIButton implements PopupHider, UIObserver, G } popupWin = this.getColorControlWindow(); + popupWin.setColor(color); GUICoreUtils.showPopupMenu(popupWin, this, POPUP_MENU_SHIFT, this.getSize().height); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/theme/preview/ComponentPreviewPane.java b/designer-base/src/main/java/com/fr/design/mainframe/theme/preview/ComponentPreviewPane.java index da7f7bac58..d7bdfadfd9 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/theme/preview/ComponentPreviewPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/theme/preview/ComponentPreviewPane.java @@ -6,7 +6,6 @@ import com.fr.base.background.ImageBackground; import com.fr.base.theme.FormTheme; import com.fr.base.theme.settings.ThemedComponentStyle; import com.fr.design.border.UIRoundedBorder; -import com.fr.design.gui.ilable.UILabel; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.form.ui.Label; import com.fr.form.ui.LayoutBorderStyle; @@ -20,15 +19,20 @@ import javax.swing.BorderFactory; import javax.swing.JPanel; import javax.swing.SwingConstants; import javax.swing.border.Border; +import javax.swing.border.LineBorder; import java.awt.AlphaComposite; +import java.awt.BasicStroke; import java.awt.BorderLayout; +import java.awt.Color; import java.awt.Component; import java.awt.Composite; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; +import java.awt.RenderingHints; import java.awt.Shape; +import java.awt.Stroke; import java.awt.geom.Rectangle2D; import java.awt.geom.RoundRectangle2D; @@ -67,7 +71,11 @@ public abstract class ComponentPreviewPane extends UINoOpaquePanel implements Th ThemedComponentStyle componentStyle = theme.getComponentStyle(); style = componentStyle.getStyle(); - setBorder(new UIRoundedBorder(style.getBorder(), style.getColor(), style.getBorderRadius())); + if (style.getBorder() == 0) { + setBorder(null); + } else { + setBorder(new UIRoundedBorder(style.getBorder(), style.getColor(), style.getBorderRadius())); + } int paddingTop = componentStyle.getPaddingTop(); int paddingBottom = componentStyle.getPaddingBottom(); @@ -116,8 +124,10 @@ public abstract class ComponentPreviewPane extends UINoOpaquePanel implements Th data.setInsetImagePadding(titlePacker.getInsetImagePadding()); data.setInsetRelativeTextLeft(titlePacker.isInsetRelativeTextLeft()); data.setInsetRelativeTextRight(titlePacker.isInsetRelativeTextRight()); + this.setBorder(new BottomLineBorder(componentStyle.getStyle().getColor(), componentStyle.getStyle().getBorder())); } + @Override public void paintComponent(Graphics g) { super.paintComponent(g); @@ -145,6 +155,32 @@ public abstract class ComponentPreviewPane extends UINoOpaquePanel implements Th } + public static class BottomLineBorder extends LineBorder { + + private BottomLineBorder(Color color, int thickness) { + super(color, thickness); + } + + @Override + public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { + Graphics2D g2d = (Graphics2D) g; + + Color oldColor = g2d.getColor(); + Stroke oldStroke = g2d.getStroke(); + + g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + + g2d.setColor(getLineColor()); + g2d.setStroke(new BasicStroke(getThickness() * 2)); + g2d.drawLine(0, height, width, height); + + g2d.setStroke(oldStroke); + g2d.setColor(oldColor); + g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF); + } + } + + private static class Utils { private static void paintBackground(Graphics2D g2d, Background background, Shape shape, float opacity) { if (background != null) { diff --git a/designer-base/src/main/java/com/fr/design/mainframe/theme/preview/ecpreview/cell/AbstractPreviewCell.java b/designer-base/src/main/java/com/fr/design/mainframe/theme/preview/ecpreview/cell/AbstractPreviewCell.java index 9c7c335de6..a8a5f18924 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/theme/preview/ecpreview/cell/AbstractPreviewCell.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/theme/preview/ecpreview/cell/AbstractPreviewCell.java @@ -1,8 +1,6 @@ package com.fr.design.mainframe.theme.preview.ecpreview.cell; -import com.fr.base.ScreenResolution; import com.fr.base.Style; - import javax.swing.JComponent; import java.awt.Dimension; import java.awt.Graphics; @@ -10,6 +8,8 @@ import java.awt.Graphics2D; public abstract class AbstractPreviewCell extends JComponent { protected Style style = Style.DEFAULT_STYLE; + private static final int NO_SCALE_RESOLUTION = 100; + public void refresh(Style style) { this.style = style; @@ -17,9 +17,8 @@ public abstract class AbstractPreviewCell extends JComponent { public void paint(Graphics g) { Graphics2D g2d = (Graphics2D) g; - int resolution = ScreenResolution.getScreenResolution(); Style.paintBackground(g2d, style, getWidth(), getHeight()); - paintContent(g2d, resolution); + paintContent(g2d, NO_SCALE_RESOLUTION); Style.paintBorder(g2d, style, getWidth(), getHeight()); } diff --git a/designer-base/src/main/java/com/fr/design/style/color/ColorControlWindow.java b/designer-base/src/main/java/com/fr/design/style/color/ColorControlWindow.java index 43f994a65b..7fccbfde23 100644 --- a/designer-base/src/main/java/com/fr/design/style/color/ColorControlWindow.java +++ b/designer-base/src/main/java/com/fr/design/style/color/ColorControlWindow.java @@ -38,6 +38,10 @@ public abstract class ColorControlWindow extends JPopupMenu { return selectionPopupPane.getColor(); } + public void setColor(Color color) { + selectionPopupPane.setColor(color); + } + public PopupHider getPopupHider() { return popupHider; } diff --git a/designer-base/src/main/java/com/fr/design/style/color/ColorControlWindowWithAuto.java b/designer-base/src/main/java/com/fr/design/style/color/ColorControlWindowWithAuto.java index dc4eb9571b..01351bfedb 100644 --- a/designer-base/src/main/java/com/fr/design/style/color/ColorControlWindowWithAuto.java +++ b/designer-base/src/main/java/com/fr/design/style/color/ColorControlWindowWithAuto.java @@ -39,6 +39,11 @@ public abstract class ColorControlWindowWithAuto extends ColorControlWindow { return selectionPopupPaneWithAuto.getColor(); } + public void setColor(Color color) { + selectionPopupPaneWithAuto.setColor(color); + } + + protected void initSelectionPopupPane(boolean isSupportTransparent) { selectionPopupPaneWithAuto = new ColorSelectionPopupPaneWithAuto(isSupportTransparent); this.add(selectionPopupPaneWithAuto, BorderLayout.CENTER); diff --git a/designer-base/src/main/java/com/fr/design/style/color/NewColorSelectPane.java b/designer-base/src/main/java/com/fr/design/style/color/NewColorSelectPane.java index 7cf7a4708c..1b7af375fd 100644 --- a/designer-base/src/main/java/com/fr/design/style/color/NewColorSelectPane.java +++ b/designer-base/src/main/java/com/fr/design/style/color/NewColorSelectPane.java @@ -1,6 +1,7 @@ package com.fr.design.style.color; import com.fr.base.FineColor; +import com.fr.base.theme.FineColorDeriveState; import com.fr.base.theme.TemplateTheme; import com.fr.design.DesignerEnvManager; import com.fr.design.border.UIRoundedBorder; @@ -37,10 +38,11 @@ import java.util.List; */ public class NewColorSelectPane extends BasicPane implements ColorSelectable { private static final long serialVersionUID = -8634152305687249392L; - private static final float BRIGHTNESS_VALUE = 0.15F; - private static final float PURITY_VALUE = 0.1F; + private static final int WIDTH = 197; private static final int HEIGHT = 250; + //颜色衍生的数量 + private static final int DEFAULT_DERIVE_COUNT = 5; private FineColor color = null; // color // color setting action. @@ -56,7 +58,7 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable { private final JPanel menuColorPane; private ColorCell[][] themeColorCellGrid; - public static NewColorSelectPane createColorSelectPaneWithTheme(boolean supportTheme){ + public static NewColorSelectPane createColorSelectPaneWithTheme(boolean supportTheme) { return new NewColorSelectPane(true, supportTheme); } @@ -79,15 +81,15 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable { initSelectButton(isSupportTransparent); // center JPanel centerPane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_S_Pane(); - centerPane.setBorder(BorderFactory.createEmptyBorder(10, 4, 0 ,4)); + centerPane.setBorder(BorderFactory.createEmptyBorder(10, 4, 0, 4)); this.add(centerPane, BorderLayout.CENTER); menuColorPane = getMenuColorPane(); - if(isSupportThemeColor){ + if (isSupportThemeColor) { JPanel themePane = initThemeColorPane(); centerPane.add(themePane); - }else { + } else { centerPane.add(menuColorPane); initMenuColorPane(); } @@ -130,7 +132,7 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable { centerPane.add(centerPane1); } - private JPanel createStandardColorPane(){ + private JPanel createStandardColorPane() { JPanel jPanel = new JPanel(new GridLayout(1, 10, 3, 0)); Color[] colorArray = ColorFactory.STANDARD_COLORS; for (int i = 0; i < colorArray.length; i++) { @@ -139,7 +141,7 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable { return jPanel; } - private JPanel initThemeColorPane(){ + private JPanel initThemeColorPane() { menuColorPane.removeAll(); JPanel themeColorPane = new JPanel(new BorderLayout(0, 5)); themeColorPane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); @@ -153,7 +155,7 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable { menuColorPane.add(northPane, BorderLayout.NORTH); menuColorPane.add(centerPane, BorderLayout.CENTER); - Color[] colorArray = new Color[] { + Color[] colorArray = new Color[]{ // 8列主题色 Color.decode("#FFFFFF"), Color.decode("#CCCCCC"), @@ -165,22 +167,20 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable { Color.decode("#CCCCCC"), // 2列灰度色 - Color.decode("#808080"), - Color.decode("#B3B3B3"), + Color.decode("#333333"), + Color.decode("#FFFFFF"), }; if (themeColorCellGrid == null) { - themeColorCellGrid = new ColorCell[colorArray.length][5]; + themeColorCellGrid = new ColorCell[colorArray.length][DEFAULT_DERIVE_COUNT]; for (int i = 0; i < colorArray.length; i++) { - ColorCell[] colorCellColumn = new ColorCell[5]; + ColorCell[] colorCellColumn = new ColorCell[DEFAULT_DERIVE_COUNT]; boolean isDefaultColor = (i == colorArray.length - 1 || i == colorArray.length - 2); Color color = colorArray[i]; - colorCellColumn[0] = createFineColorCell(color, isDefaultColor, i, 2); - colorCellColumn[2] = createFineColorCell(color = saturationDown(color, isDefaultColor, true), isDefaultColor, i, 1); - colorCellColumn[1] = createFineColorCell(saturationDown(color, isDefaultColor, true), isDefaultColor, i, 0); - color = colorArray[i]; - colorCellColumn[3] = createFineColorCell(color = saturationDown(color, isDefaultColor, false), isDefaultColor, i, 3); - colorCellColumn[4] = createFineColorCell(saturationDown(color, isDefaultColor, false), isDefaultColor, i, 4); + Color[] deriveColorArr = FineColorDeriveState.getDeriveColorArr(color, isDefaultColor, DEFAULT_DERIVE_COUNT); + for (int j = 0; j < deriveColorArr.length; j++) { + colorCellColumn[j] = createFineColorCell(deriveColorArr[j], isDefaultColor, i, j); + } themeColorCellGrid[i] = colorCellColumn; } } @@ -189,11 +189,10 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable { northPane.add(themeColorCellGrid[i][0]); } for (int i = 0; i < colorArray.length; i++) { - JPanel columnPane = new JPanel(new GridLayout(4, 1, 0, 3)); - columnPane.add(themeColorCellGrid[i][1]); - columnPane.add(themeColorCellGrid[i][2]); - columnPane.add(themeColorCellGrid[i][3]); - columnPane.add(themeColorCellGrid[i][4]); + JPanel columnPane = new JPanel(new GridLayout(DEFAULT_DERIVE_COUNT - 1, 1, 0, 3)); + for (int j = 1; j < DEFAULT_DERIVE_COUNT; j++) { + columnPane.add(themeColorCellGrid[i][j]); + } centerPane.add(columnPane); } @@ -206,7 +205,7 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable { if (TemplateThemeProfileDialog.isEditingTheme()) { standardColors = TemplateThemeProfileDialog.getEditingColorScheme(); } else { - JTemplate template = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); + JTemplate template = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); if (template != null) { TemplateTheme theme = template.getTemplateTheme(); if (theme != null) { @@ -220,14 +219,10 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable { for (int i = 0; i < themeColorCellGrid.length - 2; i++) { Color color = standardColors.get(i); - - themeColorCellGrid[i][0].setColor(color); - themeColorCellGrid[i][2].setColor(color = saturationDown(color, false, true)); - themeColorCellGrid[i][1].setColor(saturationDown(color, false, true)); - - color = standardColors.get(i); - themeColorCellGrid[i][3].setColor(color = saturationDown(color, false, false)); - themeColorCellGrid[i][4].setColor(saturationDown(color, false, false)); + Color[] deriveColorArr = FineColorDeriveState.getDeriveColorArr(color, false, DEFAULT_DERIVE_COUNT); + for (int j = 0; j < deriveColorArr.length; j++) { + themeColorCellGrid[i][j].setColor(deriveColorArr[j]); + } } } @@ -236,21 +231,6 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable { return isDefaultColor ? new FineColorCell(color, this) : new FineColorCell(color, this, x, y); } - /** - * 调整明度和纯度,默认色只调整明度 - * @param color - * @param isDefaultColor - * @return - */ - public static Color saturationDown(Color color, boolean isDefaultColor, boolean isLight) { - float[] hsb = Color.RGBtoHSB(color.getRed(), color.getGreen(), color.getBlue(), new float[3]); - if (!isDefaultColor) { - hsb[1] = isLight ? Math.max(0, hsb[1] - PURITY_VALUE) : Math.min(1, hsb[1] + PURITY_VALUE); - } - hsb[2] = isLight ? Math.min(1, hsb[2] + BRIGHTNESS_VALUE) : Math.max(0, hsb[2] - BRIGHTNESS_VALUE); - Color color1 = Color.getHSBColor(hsb[0], hsb[1], hsb[2]); - return color1; - } private void initMenuColorPane() { menuColorPane.setLayout(new GridLayout(5, 8, 3, 3)); @@ -274,7 +254,7 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable { return true; } - protected void initSelectButton(boolean isSupportTransparent){ + protected void initSelectButton(boolean isSupportTransparent) { this.isSupportTransparent = isSupportTransparent; this.setLayout(FRGUIPaneFactory.createBorderLayout()); this.setBorder(new UIRoundedBorder(UIConstants.TOOLBAR_BORDER_COLOR, 1, 5)); @@ -288,6 +268,7 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable { /** * 添加监听 + * * @param changeListener 监听 */ public void addChangeListener(ChangeListener changeListener) { @@ -340,7 +321,7 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable { setFineColor(fineColor); } - private void setFineColor(FineColor fineColor){ + private void setFineColor(FineColor fineColor) { this.color = fineColor; // fire color change. @@ -351,7 +332,9 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable { changeListener.stateChanged(evt); } } - DesignerEnvManager.getEnvManager().getColorConfigManager().addToColorQueue(color); + if (color != null) { + DesignerEnvManager.getEnvManager().getColorConfigManager().addToColorQueue(color.getColor()); + } this.repaint(); } @@ -412,12 +395,12 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable { private boolean setColorRealTime; - public JPanel getPane(){ + public JPanel getPane() { return this.pane; } - public NewUsedColorPane(int columns, ColorSelectable selectable, boolean setColorRealTime){ + public NewUsedColorPane(int columns, ColorSelectable selectable, boolean setColorRealTime) { this.columns = columns; this.selectable = selectable; this.setColorRealTime = setColorRealTime; @@ -448,7 +431,7 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable { * 更新最近使用颜色 */ public void updateUsedColor() { - int total = columns ; + int total = columns; Color[] colors = DesignerEnvManager.getEnvManager().getColorConfigManager().getColors(); int size = colors.length; for (int i = 0; i < total; i++) { @@ -464,4 +447,5 @@ public class NewColorSelectPane extends BasicPane implements ColorSelectable { } } + } From 523b763e21e4ddea9b936fb4fe40d568e592e59f Mon Sep 17 00:00:00 2001 From: kerry Date: Thu, 2 Sep 2021 17:50:28 +0800 Subject: [PATCH 10/17] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/style/background/BackgroundJComponent.java | 9 --------- 1 file changed, 9 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/style/background/BackgroundJComponent.java b/designer-base/src/main/java/com/fr/design/style/background/BackgroundJComponent.java index 377da330c9..611953a20b 100644 --- a/designer-base/src/main/java/com/fr/design/style/background/BackgroundJComponent.java +++ b/designer-base/src/main/java/com/fr/design/style/background/BackgroundJComponent.java @@ -37,15 +37,6 @@ public class BackgroundJComponent extends JComponent { } - @Override - protected void paintBorder(Graphics g) { -// Color oldColor = g.getColor(); -// Border border = getBorder(); -// if (border != null) { -// border.paintBorder(this, g, 0, 0, getWidth(), getHeight()); -// } - super.paintBorder(g); - } public void setEmptyBackground() { this.background = null; From 37abccaea2409929a679cb0c12289ba2082f6123 Mon Sep 17 00:00:00 2001 From: hades Date: Fri, 3 Sep 2021 11:05:56 +0800 Subject: [PATCH 11/17] =?UTF-8?q?REPORT-58713=20=E5=86=B3=E7=AD=96?= =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E4=B8=AD=E5=85=AC=E5=BC=8F=E6=A8=A1=E6=8B=9F?= =?UTF-8?q?=E8=AE=A1=E7=AE=97=E7=9A=84=E5=8F=82=E6=95=B0=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E7=AA=97=E5=8F=A3=E4=BC=9A=E5=87=BA=E7=8E=B0=E2=80=9C=E9=97=AA?= =?UTF-8?q?=E5=B1=8F=E2=80=9D=E7=8E=B0=E8=B1=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/designer/creator/XCreator.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java b/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java index 55b9c191f3..e0e6e74a4a 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java @@ -802,7 +802,12 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo try { popup.setLocation(designer.getLocationOnScreen().x + designer.getPaintX() + extraX, designer.getLocationOnScreen().y + designer.getPaintY() + extraY); popup.updatePane(designer); - popup.setVisible(selected && accept && popup.hasVisibleButtons() && popup.isCanVisible() && !isShowPluginDialog()); + boolean needShowing = selected && accept && popup.hasVisibleButtons() && popup.isCanVisible() && !isShowPluginDialog(); + if (!popup.isVisible() && needShowing) { + popup.setVisible(true); + } else if (!needShowing) { + popup.setVisible(false); + } popup.setRelativeBounds(bounds); } catch (Exception ignored) { } From d44b2ed3aa33be21ddc483a65917191eef5283cb Mon Sep 17 00:00:00 2001 From: Starryi Date: Thu, 2 Sep 2021 17:20:16 +0800 Subject: [PATCH 12/17] =?UTF-8?q?REPORT-58586=20FR11-=E4=BA=8C=E8=BD=AE?= =?UTF-8?q?=E5=9B=9E=E5=BD=92-=E5=8D=95=E5=85=83=E6=A0=BC=E5=B1=9E?= =?UTF-8?q?=E6=80=A7-=E6=A0=B7=E5=BC=8F-=E5=88=87=E6=8D=A2=E6=88=90?= =?UTF-8?q?=E8=B7=9F=E9=9A=8F=E4=B8=BB=E9=A2=98=E5=90=8E=EF=BC=8C=E9=BC=A0?= =?UTF-8?q?=E6=A0=87=E6=97=A0=E6=B3=95=E4=B8=8A=E6=BB=91=E8=87=B3=E9=A1=B6?= =?UTF-8?q?=E9=83=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 内层多加了一个ScrollPane就会有这个BUG,和外层的ScrollPane冲突了。 先和之前的预定义样式列表的实现保持一致吧,只有最外层的能滚动, 看看后面能不能优化下 【改动思路】 同上 --- .../fr/design/mainframe/cell/settingpane/style/StylePane.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/style/StylePane.java b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/style/StylePane.java index 93bf523970..e559cfaa41 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/style/StylePane.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/style/StylePane.java @@ -7,7 +7,6 @@ import com.fr.design.dialog.BasicPane; import com.fr.design.event.UIObserver; import com.fr.design.event.UIObserverListener; import com.fr.design.gui.ibutton.UIButtonGroup; -import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.ilable.UILabel; import com.fr.design.i18n.Toolkit; import com.fr.design.layout.TableLayout; @@ -132,8 +131,7 @@ public class StylePane extends BasicPane implements UIObserver { uiLabel.setPreferredSize(new Dimension(uiLabel.getPreferredSize().width, 20)); container.add(uiLabel, BorderLayout.NORTH); themedCellStyleListPane.setBorder(BorderFactory.createEmptyBorder()); - UIScrollPane scrollPane = new UIScrollPane(themedCellStyleListPane); - container.add(scrollPane, BorderLayout.CENTER); + container.add(themedCellStyleListPane, BorderLayout.CENTER); return container; } From a242b1cd59484a6721ee9197bf35ca759109fa75 Mon Sep 17 00:00:00 2001 From: Starryi Date: Thu, 2 Sep 2021 18:22:59 +0800 Subject: [PATCH 13/17] =?UTF-8?q?REPORT-58389=20=E3=80=90FR11=E4=BA=8C?= =?UTF-8?q?=E8=BD=AE=E5=9B=9E=E5=BD=92=E3=80=91=E8=AE=BE=E8=AE=A1=E5=99=A8?= =?UTF-8?q?-frm=E6=A8=A1=E6=9D=BF=E6=92=A4=E9=94=80/=E5=88=87=E6=8D=A2?= =?UTF-8?q?=E4=B8=BB=E9=A2=98=EF=BC=8C=E8=AE=BE=E8=AE=A1=E7=94=BB=E5=B8=83?= =?UTF-8?q?=E9=83=BD=E4=BC=9A=E5=8F=98=E5=B0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 1. 主题功能仅负责撤销回退的数据模型修改,不进行界 面刷新,界面刷新依然由原来的撤销回退逻辑完成,优化 撤销回退的效率 2. 设计器修刷新界面后,需要恢复下画布尺寸和滚动条位置 【改动思路】 同上 --- .../java/com/fr/design/mainframe/JTemplate.java | 2 -- .../main/java/com/fr/design/mainframe/JForm.java | 15 +++++++++++++-- .../java/com/fr/design/mainframe/JWorkBook.java | 4 +++- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java b/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java index 4e0a8090eb..8bb23786f6 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java @@ -625,8 +625,6 @@ public abstract class JTemplate> */ public void redo() { this.getUndoManager().redo(); - // 重做前模版使用主题可能已经被删除或修改,需要重置模版样式 - checkAndResetTheme(); fireSuperTargetModified(); } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/JForm.java b/designer-form/src/main/java/com/fr/design/mainframe/JForm.java index 04dd922430..9d03edbc07 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/JForm.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/JForm.java @@ -664,9 +664,11 @@ public class JForm extends JTemplate implements BaseJForm implements BaseJForm implements BaseJForm { @Override protected void applyUndoState(WorkBookUndoState u) { try { - this.setTarget((WorkBook) u.getWorkBook().clone()); + WorkBook undoWorkBook = (WorkBook) u.getWorkBook().clone(); + undoWorkBook.checkAndResetTheme(); + this.setTarget(undoWorkBook); if (!DesignerMode.isAuthorityEditing()) { if (u.getAuthorityType() != BaseUndoState.NORMAL_STATE) { applyAll(u); From 0c6391f2d9831e22abe03a4950c6c807bbe888b8 Mon Sep 17 00:00:00 2001 From: Starryi Date: Thu, 2 Sep 2021 18:58:38 +0800 Subject: [PATCH 14/17] =?UTF-8?q?REPORT-58800=20=E3=80=90=E4=B8=BB?= =?UTF-8?q?=E9=A2=98=E5=88=87=E6=8D=A2=E3=80=91=E4=BC=98=E5=8C=96=E4=B8=BB?= =?UTF-8?q?=E9=A2=98=E9=80=89=E6=8B=A9=E7=95=8C=E9=9D=A2=20=E5=BA=94?= =?UTF-8?q?=E7=94=A8=E4=B8=BB=E9=A2=98=E7=9A=84=E4=BA=A4=E4=BA=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 交互变更: 直接点击主题列表中的主题块就可以切换当前模版使用的主题 【改动思路】 同上 --- .../theme/TemplateThemeListPane.java | 20 +++--- .../dialog/TemplateThemeUsingDialog.java | 65 ++----------------- 2 files changed, 18 insertions(+), 67 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/theme/TemplateThemeListPane.java b/designer-base/src/main/java/com/fr/design/mainframe/theme/TemplateThemeListPane.java index 524c272ac9..4930335126 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/theme/TemplateThemeListPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/theme/TemplateThemeListPane.java @@ -126,15 +126,17 @@ public class TemplateThemeListPane extends BasicPane { } private void setSelectedBlock(TemplateThemeBlock block) { - if (selectedBlock != null) { - selectedBlock.setSelected(false); - } - selectedBlock = block; - if (selectedBlock != null) { - selectedBlock.setSelected(true); - } - if (changeListener != null) { - changeListener.fireChanged(new ChangeEvent(this)); + if (selectedBlock != block) { + if (selectedBlock != null) { + selectedBlock.setSelected(false); + } + selectedBlock = block; + if (selectedBlock != null) { + selectedBlock.setSelected(true); + } + if (changeListener != null) { + changeListener.fireChanged(new ChangeEvent(this)); + } } } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/theme/dialog/TemplateThemeUsingDialog.java b/designer-base/src/main/java/com/fr/design/mainframe/theme/dialog/TemplateThemeUsingDialog.java index 1d17bb4eb2..e4f4b5fd27 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/theme/dialog/TemplateThemeUsingDialog.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/theme/dialog/TemplateThemeUsingDialog.java @@ -1,9 +1,8 @@ package com.fr.design.mainframe.theme.dialog; -import com.fr.base.theme.ThemedTemplate; import com.fr.base.theme.TemplateTheme; import com.fr.base.theme.TemplateThemeConfig; -import com.fr.design.base.mode.DesignModeContext; +import com.fr.base.theme.ThemedTemplate; import com.fr.design.event.ChangeEvent; import com.fr.design.event.ChangeListener; import com.fr.design.gui.ibutton.UIButton; @@ -11,7 +10,6 @@ import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.theme.TemplateThemeListPane; import com.fr.design.mainframe.theme.ui.BorderUtils; -import com.fr.stable.StringUtils; import com.fr.workspace.WorkContext; import javax.swing.BorderFactory; @@ -43,56 +41,27 @@ TemplateThemeUsingDialog extends TemplateThemeDialog { JPanel content = createContent(); UIButton openThemeManagerButton = createOpenThemeManagerButton(); - UIButton usingCurrentThemeButton = createUsingCurrentThemeButton(); UIButton completeButton = createCompleteButton(); setContentPane(createDialogContentPane(content, new UIButton[]{ openThemeManagerButton }, - new UIButton[]{ usingCurrentThemeButton, completeButton } + new UIButton[]{ completeButton } )); themeListPane.startListenThemeConfig(); - resetEnableCurrentThemeButton(themeListPane.getSelectedTheme(), usingCurrentThemeButton); themeListPane.setSelectedChangeListener(new ChangeListener() { @Override public void fireChanged(ChangeEvent event) { - resetEnableCurrentThemeButton(themeListPane.getSelectedTheme(), usingCurrentThemeButton); + TemplateTheme theme = themeListPane.getSelectedTheme(); + if (theme != null) { + currentTemplate.setTemplateTheme(theme); + themeListPane.repaint(); + } } }); } - private void resetEnableCurrentThemeButton(T selectedTheme, UIButton usingCurrentThemeButton) { - if (selectedTheme == null) { - usingCurrentThemeButton.setEnabled(false); - return; - } - String selectedThemeName = selectedTheme.getName(); - if (StringUtils.isEmpty(selectedThemeName)) { - usingCurrentThemeButton.setEnabled(false); - return; - } - - if (currentTemplate == null) { - usingCurrentThemeButton.setEnabled(false); - return; - } - - TemplateTheme templateUsingTheme = currentTemplate.getTemplateTheme(); - if (templateUsingTheme == null) { - usingCurrentThemeButton.setEnabled(true); - return; - } - - String templateUsingThemeName = templateUsingTheme.getName(); - if (StringUtils.isEmpty(templateUsingThemeName)) { - usingCurrentThemeButton.setEnabled(true); - return; - } - - usingCurrentThemeButton.setEnabled(!StringUtils.equals(templateUsingThemeName, selectedTheme.getName())); - } - private JPanel createContent() { JPanel container = FRGUIPaneFactory.createBorderLayout_S_Pane(); container.setBorder(BorderFactory.createEmptyBorder(10, 10, 0, 10)); @@ -123,17 +92,6 @@ TemplateThemeUsingDialog extends TemplateThemeDialog { return null; } - private UIButton createUsingCurrentThemeButton() { - UIButton button = new UIButton(Toolkit.i18nText("Fine-Design_Basic_Template_Theme_Using_Dialog_Use")); - button.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - apply2CurrentTemplate(button); - } - }); - return button; - } - private UIButton createCompleteButton() { UIButton button = new UIButton(Toolkit.i18nText("Fine-Design_Basic_Template_Theme_Using_Dialog_Complete")); button.addActionListener(new ActionListener() { @@ -150,13 +108,4 @@ TemplateThemeUsingDialog extends TemplateThemeDialog { themeListPane.stopAsyncFetchTheme(); super.exit(); } - - private void apply2CurrentTemplate(UIButton usingCurrentThemeButton) { - TemplateTheme theme = themeListPane.getSelectedTheme(); - if (theme != null) { - currentTemplate.setTemplateTheme(theme); - themeListPane.repaint(); - usingCurrentThemeButton.setEnabled(false); - } - } } \ No newline at end of file From e2534d993323efe587a1bba7f64483ff820c0ec5 Mon Sep 17 00:00:00 2001 From: Starryi Date: Fri, 3 Sep 2021 11:41:25 +0800 Subject: [PATCH 15/17] =?UTF-8?q?REPORT-58503=20=E3=80=90=E4=B8=BB?= =?UTF-8?q?=E9=A2=98=E5=88=87=E6=8D=A2=E3=80=91=E9=A2=84=E8=A7=88=E5=8C=BA?= =?UTF-8?q?ui=E6=94=B9=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 单元格样式预览显示透明块 【改动思路】 同上 --- .../fr/design/cell/CellStylePreviewPane.java | 82 ++++++++++++++++++ .../theme/edit/cell/CellStyleEditPane.java | 53 ++--------- .../design/images/transparent_background.png | Bin 0 -> 24823 bytes .../style/ThemedCellStyleListPane.java | 46 +--------- .../com/fr/design/report/ReportStylePane.java | 42 +-------- 5 files changed, 94 insertions(+), 129 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/cell/CellStylePreviewPane.java create mode 100644 designer-base/src/main/resources/com/fr/design/images/transparent_background.png diff --git a/designer-base/src/main/java/com/fr/design/cell/CellStylePreviewPane.java b/designer-base/src/main/java/com/fr/design/cell/CellStylePreviewPane.java new file mode 100644 index 0000000000..d566bbf987 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/cell/CellStylePreviewPane.java @@ -0,0 +1,82 @@ +package com.fr.design.cell; + +import com.fr.base.NameStyle; +import com.fr.base.ScreenResolution; +import com.fr.base.Style; +import com.fr.design.mainframe.theme.TemplateThemeBlock; +import com.fr.general.IOUtils; + +import javax.swing.Icon; +import javax.swing.JComponent; +import javax.swing.JPanel; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Image; +import java.awt.Toolkit; + +/** + * @author Starryi + * @version 1.0 + * Created by Starryi on 2021/9/3 + */ +public class CellStylePreviewPane extends JPanel { + + private static final Image transparentBackgroundImage = Toolkit.getDefaultToolkit().createImage(CellStylePreviewPane.class.getResource("/com/fr/design/images/transparent_background.png")); + private final float transparentBackgroundWidth; + private final float transparentBackgroundHeight; + private final float transparentBackgroundAspect; + private String paintText = "Report"; + private Style style = Style.DEFAULT_STYLE; + + public CellStylePreviewPane() { + transparentBackgroundWidth = transparentBackgroundImage.getWidth(null); + transparentBackgroundHeight = transparentBackgroundImage.getHeight(null); + transparentBackgroundAspect = 1.0F * transparentBackgroundImage.getWidth(null) / transparentBackgroundImage.getHeight(null); + } + + public void setStyle(Style style) { + this.style = style; + if (style instanceof NameStyle) { + paintText = ((NameStyle) style).getName(); + } + repaint(); + } + + @Override + public void paintComponent(Graphics g) { + Graphics2D g2d = (Graphics2D) g; + int resolution = ScreenResolution.getScreenResolution(); + + int width = getWidth(); + int height = getHeight(); + + float scaleWidth = 1.0F * getWidth() / transparentBackgroundWidth; + float scaleHeight = 1.0F * getHeight() / transparentBackgroundHeight; + float maxScale = Math.max(scaleWidth, scaleHeight); + + if (maxScale <= 1) { + scaleWidth = scaleHeight = 1; + } else { + scaleHeight = scaleWidth = maxScale; + } + g2d.drawImage(transparentBackgroundImage, 0, 0, (int) (transparentBackgroundWidth * scaleWidth), (int) (transparentBackgroundHeight * scaleHeight), null); + + if (style == Style.DEFAULT_STYLE) { + // 如果是默认的style,就只写"Report"上去 + Style.paintContent(g2d, paintText, style, width, height, resolution); + return; + } + + Style.paintBackground(g2d, style, width, height); + + Style.paintContent(g2d, paintText, style, width, height, resolution); + + Style.paintBorder(g2d, style, getWidth() - 3, getHeight() - 3); + } + + @Override + public Dimension getMinimumSize() { + return getPreferredSize(); + } +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/theme/edit/cell/CellStyleEditPane.java b/designer-base/src/main/java/com/fr/design/mainframe/theme/edit/cell/CellStyleEditPane.java index a2991a89f2..53e4d9a912 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/theme/edit/cell/CellStyleEditPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/theme/edit/cell/CellStyleEditPane.java @@ -1,8 +1,7 @@ package com.fr.design.mainframe.theme.edit.cell; -import com.fr.base.ScreenResolution; -import com.fr.base.Style; import com.fr.base.theme.settings.ThemedCellStyle; +import com.fr.design.cell.CellStylePreviewPane; import com.fr.design.constants.UIConstants; import com.fr.design.dialog.AttrScrollPane; import com.fr.design.dialog.BasicPane; @@ -18,12 +17,9 @@ import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.theme.ui.BorderUtils; import javax.swing.BorderFactory; -import javax.swing.JComponent; import javax.swing.JPanel; import java.awt.BorderLayout; import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Graphics2D; import java.awt.GridLayout; import java.util.ArrayList; import java.util.List; @@ -39,7 +35,7 @@ import static com.fr.design.i18n.Toolkit.i18nText; */ public class CellStyleEditPane extends MultiTabPane { private ThemedCellStyle cellStyle; - private PreviewArea previewArea; + private CellStylePreviewPane previewArea; private boolean populating; private AttributeChangeListener attributeChangeListener; @@ -78,7 +74,7 @@ public class CellStyleEditPane extends MultiTabPane { for (BasicPane basicPane : paneList) { ((AbstractBasicStylePane) basicPane).populateBean(ob.getStyle()); - previewArea.preview(ob.getStyle()); + previewArea.setStyle(ob.getStyle()); } this.populating = false; } @@ -112,7 +108,8 @@ public class CellStyleEditPane extends MultiTabPane { jPanel.setLayout(new BorderLayout(0, 4)); JPanel previewPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); - previewArea = new PreviewArea(); + previewArea = new CellStylePreviewPane(); + previewArea.setPreferredSize(new Dimension(223, 30)); previewPane.setBorder(BorderUtils.createTitleBorder(i18nText("Fine-Design_Basic_Preview"))); previewPane.add(previewArea, BorderLayout.CENTER); @@ -138,7 +135,7 @@ public class CellStyleEditPane extends MultiTabPane { } ThemedCellStyle cellStyle = updateBean(); if (cellStyle != null) { - previewArea.preview(cellStyle.getStyle()); + previewArea.setStyle(cellStyle.getStyle()); } fireAttrChangeListener(); } @@ -157,42 +154,4 @@ public class CellStyleEditPane extends MultiTabPane { @Override public void updateBean(ThemedCellStyle ob) {} - - private static class PreviewArea extends JComponent { - - private static final String paintText = "Report"; - private Style style = Style.DEFAULT_STYLE; - - public PreviewArea() { - setPreferredSize(new Dimension(223, 30)); - } - - public void preview(Style style) { - this.style = style; - repaint(); - } - - @Override - public void paintComponent(Graphics g) { - Graphics2D g2d = (Graphics2D) g; - int resolution = ScreenResolution.getScreenResolution(); - - if (style == Style.DEFAULT_STYLE) { - // 如果是默认的style,就只写"Report"上去 - Style.paintContent(g2d, paintText, style, getWidth() - 3, getHeight() - 3, resolution); - return; - } - - Style.paintBackground(g2d, style, getWidth() - 3, getHeight() - 3); - - Style.paintContent(g2d, paintText, style, getWidth() - 3, getHeight() - 3, resolution); - - Style.paintBorder(g2d, style, getWidth() - 3, getHeight() - 3); - } - - @Override - public Dimension getMinimumSize() { - return getPreferredSize(); - } - } } diff --git a/designer-base/src/main/resources/com/fr/design/images/transparent_background.png b/designer-base/src/main/resources/com/fr/design/images/transparent_background.png new file mode 100644 index 0000000000000000000000000000000000000000..cfb233f46e5e5e3c5349a7639004806f54c1eee2 GIT binary patch literal 24823 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 imp private static class RadioButtonListCellRenderer extends JPanel implements ListCellRenderer, Serializable { private final UIRadioButton button; - private final PreviewArea previewArea; + private final CellStylePreviewPane previewArea; public RadioButtonListCellRenderer() { super(); @@ -150,7 +147,7 @@ public class ThemedCellStyleListPane extends FurtherBasicBeanPane imp setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); setPreferredSize(new Dimension(getPreferredSize().width, 40)); button = new UIRadioButton(); - previewArea = new PreviewArea(); + previewArea = new CellStylePreviewPane(); add(button, BorderLayout.WEST); add(previewArea, BorderLayout.CENTER); } @@ -162,41 +159,4 @@ public class ThemedCellStyleListPane extends FurtherBasicBeanPane imp return this; } } - - private static class PreviewArea extends JComponent { - - private String paintText = "Report"; - private Style style = Style.DEFAULT_STYLE; - - public void setStyle(Style style) { - this.style = style; - if (style instanceof NameStyle) { - paintText = ((NameStyle) style).getName(); - } - repaint(); - } - - @Override - public void paintComponent(Graphics g) { - Graphics2D g2d = (Graphics2D) g; - int resolution = ScreenResolution.getScreenResolution(); - - if (style == Style.DEFAULT_STYLE) { - // 如果是默认的style,就只写"Report"上去 - Style.paintContent(g2d, paintText, style, getWidth() - 3, getHeight() - 3, resolution); - return; - } - - Style.paintBackground(g2d, style, getWidth() - 3, getHeight() - 3); - - Style.paintContent(g2d, paintText, style, getWidth() - 3, getHeight() - 3, resolution); - - Style.paintBorder(g2d, style, getWidth() - 3, getHeight() - 3); - } - - @Override - public Dimension getMinimumSize() { - return getPreferredSize(); - } - } } \ No newline at end of file diff --git a/designer-realize/src/main/java/com/fr/design/report/ReportStylePane.java b/designer-realize/src/main/java/com/fr/design/report/ReportStylePane.java index 91b3641ff3..94b18f969d 100644 --- a/designer-realize/src/main/java/com/fr/design/report/ReportStylePane.java +++ b/designer-realize/src/main/java/com/fr/design/report/ReportStylePane.java @@ -1,9 +1,9 @@ package com.fr.design.report; import com.fr.base.NameStyle; -import com.fr.base.ScreenResolution; import com.fr.base.Style; import com.fr.design.border.UIRoundedBorder; +import com.fr.design.cell.CellStylePreviewPane; import com.fr.design.constants.UIConstants; import com.fr.design.designer.IntervalConstants; import com.fr.design.dialog.BasicPane; @@ -52,8 +52,6 @@ import java.awt.CardLayout; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Graphics2D; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; @@ -66,7 +64,7 @@ public class ReportStylePane extends BasicPane { }; public static final int DEFAULT_SELECTED_INDEX = 0; - private final PreviewArea previewArea; + private final CellStylePreviewPane previewArea; private final UIButtonGroup followingThemeButtonGroup; private final CustomFloatStyleSettingPane customStylePane; private final ThemedCellStyleListPane themedCellStyleListPane; @@ -78,7 +76,7 @@ public class ReportStylePane extends BasicPane { setLayout(FRGUIPaneFactory.createBorderLayout()); setBorder(BorderFactory.createEmptyBorder(10, 10, 0, 10)); - previewArea = new PreviewArea(); + previewArea = new CellStylePreviewPane(); followingThemeButtonGroup = new UIButtonGroup<>(FOLLOWING_THEME_STRING_ARRAYS); customStylePane = new CustomFloatStyleSettingPane(); themedCellStyleListPane = new ThemedCellStyleListPane(); @@ -333,40 +331,6 @@ public class ReportStylePane extends BasicPane { previewArea.setStyle(updateBean()); } - private static class PreviewArea extends JComponent { - - private static final String paintText = "Report"; - private Style style = Style.DEFAULT_STYLE; - - public void setStyle(Style style) { - this.style = style; - repaint(); - } - - @Override - public void paintComponent(Graphics g) { - Graphics2D g2d = (Graphics2D) g; - int resolution = ScreenResolution.getScreenResolution(); - - if (style == Style.DEFAULT_STYLE) { - // 如果是默认的style,就只写"Report"上去 - Style.paintContent(g2d, paintText, style, getWidth() - 3, getHeight() - 3, resolution); - return; - } - - Style.paintBackground(g2d, style, getWidth() - 3, getHeight() - 3); - - Style.paintContent(g2d, paintText, style, getWidth() - 3, getHeight() - 3, resolution); - - Style.paintBorder(g2d, style, getWidth() - 3, getHeight() - 3); - } - - @Override - public Dimension getMinimumSize() { - return getPreferredSize(); - } - } - private static class CustomFloatStyleSettingPane extends BasicPane implements ChangeListener { private static final int ALIGNMENT_INDEX = 1; private static final int FONT_INDEX = 2; From 98768ff1088b7541169523f4086883456259cb73 Mon Sep 17 00:00:00 2001 From: hades Date: Fri, 3 Sep 2021 11:44:46 +0800 Subject: [PATCH 16/17] =?UTF-8?q?REPORT-58713=20=20=E5=8A=A0=E4=BA=9B?= =?UTF-8?q?=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/designer/creator/XCreator.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java b/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java index e0e6e74a4a..e825285585 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java @@ -803,6 +803,8 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo popup.setLocation(designer.getLocationOnScreen().x + designer.getPaintX() + extraX, designer.getLocationOnScreen().y + designer.getPaintY() + extraY); popup.updatePane(designer); boolean needShowing = selected && accept && popup.hasVisibleButtons() && popup.isCanVisible() && !isShowPluginDialog(); + // 当不可见时,且可以设置为可见状态,才去设置为可见 + // 避免已经是可见状态时,重复设置可见,造成闪屏 if (!popup.isVisible() && needShowing) { popup.setVisible(true); } else if (!needShowing) { From 95c13ae6a5dba90d8e7d81107194fc7c8f95f7e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E5=B2=B3?= <445798420@qq.com> Date: Fri, 3 Sep 2021 14:28:13 +0800 Subject: [PATCH 17/17] =?UTF-8?q?CHART-20565=20=E5=9B=BE=E8=A1=A8=E6=B8=90?= =?UTF-8?q?=E5=8F=98=E8=89=B2=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/mainframe/theme/TemplateThemeProfilePane.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/theme/TemplateThemeProfilePane.java b/designer-base/src/main/java/com/fr/design/mainframe/theme/TemplateThemeProfilePane.java index b7a8db48ae..fa6d087dbd 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/theme/TemplateThemeProfilePane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/theme/TemplateThemeProfilePane.java @@ -5,7 +5,6 @@ import com.fr.base.theme.TemplateTheme; import com.fr.base.theme.TemplateThemeConfig; import com.fr.base.theme.settings.ThemeThumbnail; import com.fr.base.theme.settings.ThemedCellStyleList; -import com.fr.base.theme.settings.ThemedChartStyle; import com.fr.base.theme.settings.ThemedColorScheme; import com.fr.design.designer.IntervalConstants; import com.fr.design.dialog.FineJOptionPane; @@ -27,12 +26,9 @@ import com.fr.design.mainframe.theme.edit.ui.ColorListPane; import com.fr.design.mainframe.theme.edit.ui.LabelUtils; import com.fr.design.mainframe.theme.ui.BorderUtils; import com.fr.design.utils.gui.GUICoreUtils; -import com.fr.general.Inter; import com.fr.log.FineLoggerFactory; import com.fr.stable.StringUtils; import com.fr.transaction.CallBackAdaptor; -import com.fr.transaction.Configurations; -import com.fr.transaction.WorkerFacade; import javax.swing.BorderFactory; import javax.swing.JComponent; @@ -44,6 +40,7 @@ import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; +import java.util.List; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; @@ -55,7 +52,6 @@ import java.awt.event.FocusAdapter; import java.awt.event.FocusEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; -import java.util.List; import static com.fr.design.i18n.Toolkit.i18nText; @@ -321,6 +317,9 @@ public abstract class TemplateThemeProfilePane extends FineColorManager.traverse(theme, replaceByColorScheme); populateBean(theme); + + //图表渐变色 + chartStyleSettingPane.populateGradientBar(colors); } public void populateBean(T theme) {