Browse Source

REPORT-111619 控件增强-更多的样式配置--报表支撑

feature/x
obo 4 months ago
parent
commit
6b5a9dbee7
  1. 110
      designer-base/src/main/java/com/fr/widgettheme/theme/edit/widget/DesktopWidgetStyleEditPane.java
  2. 13
      designer-base/src/main/java/com/fr/widgettheme/theme/edit/widget/MobileWidgetStyleEditPane.java
  3. 58
      designer-base/src/main/java/com/fr/widgettheme/theme/edit/widget/WidgetStyleEditPane.java
  4. 2
      designer-base/src/main/java/com/fr/widgettheme/theme/panel/ButtonStyleDefinedPane.java
  5. 20
      designer-base/src/main/java/com/fr/widgettheme/theme/panel/ControlPreviewCell.java
  6. 9
      designer-base/src/main/java/com/fr/widgettheme/theme/panel/ControlPreviewCellWithIcon.java
  7. 3
      designer-base/src/main/java/com/fr/widgettheme/theme/panel/RoundControlPreviewCell.java
  8. 40
      designer-base/src/main/java/com/fr/widgettheme/util/ThemeTextStylePaneCreator.java
  9. 147
      designer-base/src/main/java/com/fr/widgettheme/util/WidgetStyleComponentCombiner.java
  10. 32
      designer-base/src/main/java/com/fr/widgettheme/util/WidgetThemeDesignerUtils.java
  11. 84
      designer-base/src/main/java/com/fr/widgettheme/widget/mobile/pane/DisplayEnhanceMobileStyleDefinePane.java
  12. 55
      designer-base/src/main/java/com/fr/widgettheme/widget/mobile/pane/FreeButtonMobileStyleDefinePane.java
  13. 36
      designer-base/src/main/java/com/fr/widgettheme/widget/mobile/pane/IconColorMobileStyleDefinePane.java
  14. 44
      designer-base/src/main/java/com/fr/widgettheme/widget/mobile/pane/LabelMobileStyleDefinePane.java
  15. 33
      designer-base/src/main/java/com/fr/widgettheme/widget/mobile/pane/TextAreaMobileStyleDefinePane.java
  16. 16
      designer-base/src/main/java/com/fr/widgettheme/widget/mobile/provider/DisplayEnhanceMobileStyleFactory.java
  17. 55
      designer-base/src/main/java/com/fr/widgettheme/widget/mobile/provider/WidgetThemeMobileStyleDefinePaneCreator.java
  18. 213
      designer-form/src/main/java/com/fr/design/widgettheme/BaseStyleSettingPane.java
  19. 15
      designer-form/src/main/java/com/fr/design/widgettheme/LabelSettingPane.java
  20. 6
      designer-form/src/main/java/com/fr/design/widgettheme/ParaButtonSettingPane.java
  21. 13
      designer-form/src/main/java/com/fr/design/widgettheme/ParaEditorSettingPane.java
  22. 3
      designer-form/src/main/java/com/fr/design/widgettheme/ParaNormalButtonSettingPane.java
  23. 10
      designer-form/src/main/java/com/fr/design/widgettheme/ParaSelectEditorSettingPane.java
  24. 2
      designer-form/src/main/java/com/fr/design/widgettheme/ParaTreeEditorSettingPane.java
  25. 42
      designer-form/src/main/java/com/fr/design/widgettheme/StyleSetting.java
  26. 9
      designer-form/src/main/java/com/fr/design/widgettheme/common/ButtonSettingPane.java
  27. 17
      designer-form/src/main/java/com/fr/design/widgettheme/common/EditorSettingPane.java
  28. 4
      designer-form/src/main/java/com/fr/design/widgettheme/common/NormalButtonSettingPane.java
  29. 8
      designer-form/src/main/java/com/fr/design/widgettheme/common/SelectEditorSettingPane.java
  30. 9
      designer-form/src/main/java/com/fr/design/widgettheme/common/TreeEditorSettingPane.java

110
designer-base/src/main/java/com/fr/widgettheme/theme/edit/widget/DesktopWidgetStyleEditPane.java

@ -2,20 +2,23 @@ package com.fr.widgettheme.theme.edit.widget;
import com.fr.base.background.ColorBackground;
import com.fr.base.theme.TemplateTheme;
import com.fr.design.gui.icombobox.UIComboBox;
import com.fr.design.style.color.NewColorSelectBox;
import com.fr.design.utils.DesignUtils;
import com.fr.locale.InterProviderFactory;
import com.fr.stable.StringUtils;
import com.fr.util.ColorUtils;
import com.fr.widgettheme.theme.widget.style.BorderStyle;
import com.fr.widgettheme.theme.widget.style.ButtonBackgroundStyle;
import com.fr.widgettheme.theme.widget.style.ThemeTextStyle;
import com.fr.widgettheme.theme.widget.style.ThemedWidgetStyle;
import com.fr.design.gui.ibutton.UIRadioButton;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.i18n.Toolkit;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.widgettheme.theme.widget.theme.WidgetThemeDisplayConstants;
import com.fr.widgettheme.util.ThemeTextStylePaneCreator;
import com.fr.widgettheme.util.WidgetStyleComponentCombiner;
import com.fr.widgettheme.util.WidgetThemeDesignerUtils;
import javax.swing.ButtonGroup;
import javax.swing.JPanel;
import java.awt.Color;
import java.awt.Component;
@ -27,52 +30,47 @@ import java.awt.Component;
* Created on 2023/3/28
*/
public class DesktopWidgetStyleEditPane<T extends TemplateTheme> extends WidgetStyleEditPane<T> {
// 风格1
protected UIRadioButton style1;
// 风格2
protected UIRadioButton style2;
/**
* 字体名选择器
*/
protected UIComboBox fontNameSelectBox;
/**
* 下拉面板背景颜色
*/
private NewColorSelectBox selectBackgroundColorBox;
public DesktopWidgetStyleEditPane() {
super();
}
@Override
public Component[][] generateComponent() {
initStyleEditor();
initSelectBackgroundColorBox();
// 容纳风格1和风格2的panel
JPanel stylePane = new JPanel(FRGUIPaneFactory.createBoxFlowLayout());
stylePane.add(style1);
stylePane.add(style2);
initFontNameSelectBox();
return new Component[][]{
new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Widget_Theme_Color")), colorSelectBox},
new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Widget_Theme_Style")), stylePane},
new Component[]{WidgetThemeDesignerUtils.createTopAlignmentLabel(Toolkit.i18nText("Fine-Design_Widget_Theme_Widget_Background")), WidgetStyleComponentCombiner.combineWidgetBackgroundComponent(widgetBgColorSelectBox, widgetBgAlphaDragPane, colorSelectBox.getPreferredSize().width)},
new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Widget_Theme_Border_Line")), lineComboBox},
new Component[]{null, lineComboColorSelectBox},
new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Widget_Theme_Border_Radius")), borderRadiusSpinner},
new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Widget_Theme_Text_Style")), ThemeTextStylePaneCreator.create(fontSizePane, fontColorButton)},
new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Widget_Theme_Icon_Color")), iconColorSelectBox},
new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Widget_Theme_Text_Style")), fontNameSelectBox},
new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Widget_Theme_Text_Style")), WidgetStyleComponentCombiner.combineTextStyleComponent(fontSizePane, fontColorButton, bold, italic)},
new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Widget_Background_Select_Box")), selectBackgroundColorBox}
};
}
private void initStyleEditor() {
style1 = new UIRadioButton(Toolkit.i18nText("Fine-Design_Widget_Theme_Style_1"));
style2 = new UIRadioButton(Toolkit.i18nText("Fine-Design_Widget_Theme_Style_2"));
ButtonGroup buttonGroup = new ButtonGroup();
buttonGroup.add(style1);
buttonGroup.add(style2);
}
private void initSelectBackgroundColorBox() {
selectBackgroundColorBox = new NewColorSelectBox(140, true);
selectBackgroundColorBox.setSelectObject(WidgetThemeDisplayConstants.DEFAULT_THEME_COLOR);
}
private void initFontNameSelectBox() {
fontNameSelectBox = new UIComboBox(DesignUtils.getAvailableFontFamilyNames4Report());
}
@Override
public void populateBean(T t) {
ThemedWidgetStyle style = (ThemedWidgetStyle) t.getWidgetStyle();
@ -80,17 +78,12 @@ public class DesktopWidgetStyleEditPane<T extends TemplateTheme> extends WidgetS
style = new ThemedWidgetStyle();
t.setWidgetStyle(style);
}
if (style.getStyleType() == 1) {
style1.setSelected(true);
} else {
style2.setSelected(true);
}
colorSelectBox.setSelectObject(style.getThemeColor());
lineComboBox.setSelectedLineStyle(style.getBorderStyle().getLineType());
borderRadiusSpinner.setValue(style.getBorderStyle().getRadius());
fontSizePane.setValue(style.getTextStyle().getFontSize());
fontColorButton.setColor(style.getTextStyle().getFontColor());
selectBackgroundColorBox.setSelectObject(style.getSelectBackgroundColor());
iconColorSelectBox.setSelectObject(style.getIconColor());
populateBorder(style);
populateTextStyle(style);
populateWidgetBackground(style);
}
@Override
@ -100,22 +93,65 @@ public class DesktopWidgetStyleEditPane<T extends TemplateTheme> extends WidgetS
style = new ThemedWidgetStyle();
t.setWidgetStyle(style);
}
updateBorderStyle(style);
updateTextStyle(style);
updateButtonBackground(style);
updateWidgetBackground(style);
style.setThemeColor(colorSelectBox.getSelectObject());
style.setSelectBackgroundColor(selectBackgroundColorBox.getSelectObject());
style.setIconColor(iconColorSelectBox.getSelectObject());
}
private void updateBorderStyle(ThemedWidgetStyle style) {
BorderStyle borderStyle = new BorderStyle();
borderStyle.setLineType(lineComboBox.getSelectedLineStyle());
borderStyle.setRadius((int) borderRadiusSpinner.getValue());
borderStyle.setBorderColor(lineComboColorSelectBox.getSelectObject());
style.setBorderStyle(borderStyle);
}
private void updateTextStyle(ThemedWidgetStyle style) {
ThemeTextStyle textStyle = new ThemeTextStyle();
textStyle.setFontSize(fontSizePane.getValue());
textStyle.setFontColor(fontColorButton.getColor());
textStyle.setName((String) fontNameSelectBox.getSelectedItem());
textStyle.setBold(bold.isSelected());
textStyle.setItalic(italic.isSelected());
style.setTextStyle(textStyle);
}
private void updateButtonBackground(ThemedWidgetStyle style) {
ButtonBackgroundStyle buttonBackgroundStyle = new ButtonBackgroundStyle();
ColorBackground buttonBackground = ColorBackground.getInstance(style.getThemeColor());
buttonBackgroundStyle.setInitialBackground(buttonBackground);
buttonBackgroundStyle.setOverBackground(buttonBackground);
buttonBackgroundStyle.setClickBackground(buttonBackground);
style.setButtonBackgroundStyle(buttonBackgroundStyle);
style.setStyleType(style1.isSelected() ? 1 : 2);
style.setSelectBackgroundColor(selectBackgroundColorBox.getSelectObject());
}
private void updateWidgetBackground(ThemedWidgetStyle style) {
Color bgColor = widgetBgColorSelectBox.getSelectObject();
style.setWidgetBackground(ColorUtils.createColorBackgroundWithAlpha(bgColor, widgetBgAlphaDragPane.updateBean()));
}
private void populateTextStyle(ThemedWidgetStyle style) {
ThemeTextStyle textStyle = style.getTextStyle();
fontSizePane.setValue(textStyle.getFontSize());
fontColorButton.setColor(textStyle.getFontColor());
bold.setSelected(textStyle.isBold());
italic.setSelected(textStyle.isItalic());
String fontName = StringUtils.isEmpty(textStyle.getName()) ? InterProviderFactory.getProvider().getLocText("Fine-Engine_Base_Song_TypeFace") : textStyle.getName();
fontNameSelectBox.setSelectedItem(fontName);
}
private void populateBorder(ThemedWidgetStyle style) {
lineComboBox.setSelectedLineStyle(style.getBorderStyle().getLineType());
lineComboColorSelectBox.setSelectObject(style.getBorderStyle().getBorderColor());
borderRadiusSpinner.setValue(style.getBorderStyle().getRadius());
}
private void populateWidgetBackground(ThemedWidgetStyle style) {
widgetBgColorSelectBox.setSelectObject(ColorUtils.ignoreColorAlpha(style.getWidgetBackground().getColor()));
widgetBgAlphaDragPane.populateBean(ColorUtils.roundColorAlphaDouble(style.getWidgetBackground().getColor()));
}
}

13
designer-base/src/main/java/com/fr/widgettheme/theme/edit/widget/MobileWidgetStyleEditPane.java

@ -1,16 +1,29 @@
package com.fr.widgettheme.theme.edit.widget;
import com.fr.base.background.ColorBackground;
import com.fr.base.theme.TemplateTheme;
import com.fr.design.gui.frpane.FontSizeComboPane;
import com.fr.design.utils.ColorUtils;
import com.fr.widgettheme.theme.widget.style.BorderStyle;
import com.fr.widgettheme.theme.widget.style.MobileThemedWidgetStyle;
import com.fr.design.gui.icombobox.LineComboBox;
import com.fr.widgettheme.theme.widget.style.StyleType;
import com.fr.widgettheme.theme.widget.style.ThemeTextStyle;
import com.fr.widgettheme.theme.widget.style.ThemedWidgetStyle;
import com.fr.widgettheme.theme.widget.theme.WidgetThemeDisplayConstants;
import com.fr.widgettheme.util.WidgetThemeDesignerUtils;
import java.awt.Color;
import java.util.Arrays;
import java.util.Vector;
import static com.fr.widgettheme.theme.widget.theme.WidgetThemeDisplayConstants.COLOR_00000000_HEX;
import static com.fr.widgettheme.theme.widget.theme.WidgetThemeDisplayConstants.COLOR_00FFFFFF_HEX;
import static com.fr.widgettheme.theme.widget.theme.WidgetThemeDisplayConstants.COLOR_26000000_HEX;
import static com.fr.widgettheme.theme.widget.theme.WidgetThemeDisplayConstants.COLOR_26FFFFFF_HEX;
import static com.fr.widgettheme.theme.widget.theme.WidgetThemeDisplayConstants.COLOR_CC000000_HEX;
import static com.fr.widgettheme.theme.widget.theme.WidgetThemeDisplayConstants.COLOR_CCFFFFFF_HEX;
/**
* 移动端控件样式编辑面板
*

58
designer-base/src/main/java/com/fr/widgettheme/theme/edit/widget/WidgetStyleEditPane.java

@ -4,8 +4,11 @@ import com.fr.base.theme.TemplateTheme;
import com.fr.design.beans.BasicBeanPane;
import com.fr.design.designer.IntervalConstants;
import com.fr.design.gui.frpane.FontSizeComboPane;
import com.fr.design.gui.frpane.UIPercentDragPane;
import com.fr.design.gui.ibutton.UIColorButton;
import com.fr.design.gui.ibutton.UIToggleButton;
import com.fr.design.gui.icombobox.LineComboBox;
import com.fr.design.gui.icontainer.UIScrollPane;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.ispinner.UISpinner;
import com.fr.design.gui.style.FRFontPane;
@ -14,9 +17,11 @@ import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
import com.fr.design.style.color.NewColorSelectBox;
import com.fr.general.IOUtils;
import com.fr.stable.StringUtils;
import com.fr.widgettheme.theme.widget.theme.WidgetThemeDisplayConstants;
import com.fr.widgettheme.util.ThemeTextStylePaneCreator;
import com.fr.widgettheme.util.WidgetStyleComponentCombiner;
import com.fr.widgettheme.util.WidgetThemeDesignerUtils;
import org.jetbrains.annotations.Nullable;
import javax.swing.BorderFactory;
@ -39,6 +44,11 @@ public class WidgetStyleEditPane<T extends TemplateTheme> extends BasicBeanPane<
// 边框线型
protected LineComboBox lineComboBox;
/**
* 边框颜色
*/
protected NewColorSelectBox lineComboColorSelectBox;
// 圆角边框
protected UISpinner borderRadiusSpinner;
/**
@ -48,6 +58,24 @@ public class WidgetStyleEditPane<T extends TemplateTheme> extends BasicBeanPane<
protected UIColorButton fontColorButton;
/**
* 控件背景和透明度配置面板
*/
protected NewColorSelectBox widgetBgColorSelectBox;
protected UIPercentDragPane widgetBgAlphaDragPane;
/**
* 图标颜色
*/
protected NewColorSelectBox iconColorSelectBox;
/**
* 字体粗体斜体配置
*/
protected UIToggleButton bold;
protected UIToggleButton italic;
protected JPanel leftPanel;
public WidgetStyleEditPane() {
initComponents();
}
@ -55,15 +83,17 @@ public class WidgetStyleEditPane<T extends TemplateTheme> extends BasicBeanPane<
private void initComponents() {
this.setLayout(FRGUIPaneFactory.createBorderLayout());
initCommonStyleEditor();
double f = TableLayout.PREFERRED;
double f = TableLayout.FILL;
final double p = TableLayout.PREFERRED;
double[] rowSize = {p, p, p, p, p, p};
double[] columnSize = {p, p};
int[][] rowCount = {{1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}};
double[] rowSize = {p, p, p, p, p, p, p, p, p};
double[] columnSize = {p, WidgetThemeDisplayConstants.THEME_WIDGET_COMPONENTS_COL_WIDTH};
int[][] rowCount = {{1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}};
Component[][] components = generateComponent();
JPanel customPane = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, IntervalConstants.INTERVAL_W1, IntervalConstants.INTERVAL_L1);
customPane.setBorder(BorderFactory.createEmptyBorder(20, 10, 0, 10));
customPane.setBorder(BorderFactory.createEmptyBorder(20, 10, 20, 10));
this.add(customPane, BorderLayout.NORTH);
UIScrollPane scrollPane = new UIScrollPane(customPane);
this.add(scrollPane);
}
/**
@ -72,21 +102,29 @@ public class WidgetStyleEditPane<T extends TemplateTheme> extends BasicBeanPane<
* @return components
*/
public Component[][] generateComponent() {
return new Component[][]{new Component[]{
new UILabel(Toolkit.i18nText("Fine-Design_Widget_Theme_Color")), colorSelectBox},
return new Component[][]{
new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Widget_Theme_Color")), colorSelectBox},
new Component[]{WidgetThemeDesignerUtils.createTopAlignmentLabel(Toolkit.i18nText("Fine-Design_Widget_Theme_Widget_Background")), WidgetStyleComponentCombiner.combineWidgetBackgroundComponent(widgetBgColorSelectBox, widgetBgAlphaDragPane, colorSelectBox.getPreferredSize().width)},
new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Widget_Theme_Border_Line")), lineComboBox},
new Component[]{null, lineComboColorSelectBox},
new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Widget_Theme_Border_Radius")), borderRadiusSpinner},
new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Widget_Theme_Text_Style")), ThemeTextStylePaneCreator.create(fontSizePane, fontColorButton)}
new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Widget_Theme_Icon_Color")), iconColorSelectBox},
new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Widget_Theme_Text_Style")), WidgetStyleComponentCombiner.combineTextStyleComponent(fontSizePane, fontColorButton, bold, italic)}
};
}
private void initCommonStyleEditor() {
colorSelectBox = new NewColorSelectBox(WidgetThemeDisplayConstants.THEME_WIDGET_COMPONENT_WIDTH, true);
colorSelectBox.setSelectObject(WidgetThemeDisplayConstants.DEFAULT_THEME_COLOR);
widgetBgColorSelectBox = new NewColorSelectBox(WidgetThemeDisplayConstants.THEME_WIDGET_COMPONENT_WIDTH, true);
widgetBgAlphaDragPane = new UIPercentDragPane();
initLineBox();
borderRadiusSpinner = new UISpinner(0, Integer.MAX_VALUE, 1);
iconColorSelectBox = new NewColorSelectBox(WidgetThemeDisplayConstants.THEME_WIDGET_COMPONENT_WIDTH, true);
initFontSizePane();
fontColorButton = new UIColorButton();
bold = new UIToggleButton(IOUtils.readIcon("/com/fr/design/images/m_format/cellstyle/bold.png"));
italic = new UIToggleButton(IOUtils.readIcon("/com/fr/design/images/m_format/cellstyle/italic.png"));
}
protected void initFontSizePane() {
@ -98,6 +136,8 @@ public class WidgetStyleEditPane<T extends TemplateTheme> extends BasicBeanPane<
*/
public void initLineBox() {
lineComboBox = new LineComboBox(WidgetThemeDisplayConstants.BORDER_LINE_STYLE_ARRAY);
lineComboColorSelectBox = new NewColorSelectBox(WidgetThemeDisplayConstants.THEME_WIDGET_COMPONENT_WIDTH, true);
lineComboBox.addItemListener(e -> lineComboColorSelectBox.setVisible(!Integer.valueOf(0).equals(e.getItem())));
}

2
designer-base/src/main/java/com/fr/widgettheme/theme/panel/ButtonStyleDefinedPane.java

@ -10,7 +10,6 @@ import com.fr.widgettheme.theme.bean.ButtonBackground;
import com.fr.design.mainframe.widget.accessibles.AccessibleImgBackgroundEditor;
import com.fr.general.Background;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.Component;
@ -48,7 +47,6 @@ public class ButtonStyleDefinedPane extends BasicPane {
new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Background_Click")), clickBackgroundPane},
};
JPanel panel = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, 7, 7);
panel.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 0));
this.add(panel, BorderLayout.CENTER);
}

20
designer-base/src/main/java/com/fr/widgettheme/theme/panel/ControlPreviewCell.java

@ -85,24 +85,16 @@ public class ControlPreviewCell extends JPanel {
this.paintBgColor(g, widgetStyle, DEFAULT_ALPHA);
}
public boolean isDefaultStyle() {
public Color getIconColor() {
ThemedWidgetStyle widgetStyle = (ThemedWidgetStyle) reportTheme.getWidgetStyle();
return widgetStyle.getStyleType() == ThemedWidgetStyle.DEFAULT_STYLE;
}
public Color getThemeColor() {
ThemedWidgetStyle widgetStyle = (ThemedWidgetStyle) reportTheme.getWidgetStyle();
return widgetStyle.getThemeColor();
return widgetStyle.getIconColor();
}
protected Icon setStyleTwoIcon(Icon icon, Icon defaultIcon) {
if (this.reportTheme != null && !isDefaultStyle()) {
if (this.reportTheme != null) {
if (icon instanceof ImageIcon) {
ImageIcon imageIcon = (ImageIcon) icon;
BufferedImage bufferedImage = ImageUtils.colorImage(ImageUtils.imageIconToBufferedImage(imageIcon), getThemeColor());
BufferedImage bufferedImage = ImageUtils.colorImage(ImageUtils.imageIconToBufferedImage(imageIcon), getIconColor());
return new ImageIcon(bufferedImage);
}
}
@ -113,9 +105,9 @@ public class ControlPreviewCell extends JPanel {
* 填充圆角矩形背景色
*/
public void paintBgColor(Graphics g, ThemedWidgetStyle widgetStyle, int alpha) {
Color themeColor = widgetStyle.getThemeColor();
Color themeColor = widgetStyle.getWidgetBackground().getColor();
g.setColor(new Color(themeColor.getRed(), themeColor.getGreen(), themeColor.getBlue(), alpha));
g.fillRoundRect(0, 0, getSize().width - 1, getSize().height - 1, widgetStyle.getBorderStyle().getRadius(), widgetStyle.getBorderStyle().getRadius());
g.fillRoundRect(0, 0, getSize().width - 1, getSize().height - 1, (int) widgetStyle.getBorderStyle().getRadius(), (int) widgetStyle.getBorderStyle().getRadius());
//需要重新绘制一遍字体,否则会被颜色填充给遮住
Graphics2D g2d = (Graphics2D) g.create();
FRFont font = FRFont.getInstance(FRFont.DEFAULT_FONTNAME, Font.PLAIN, widgetStyle.getTextStyle().getFontSize(), textColor);

9
designer-base/src/main/java/com/fr/widgettheme/theme/panel/ControlPreviewCellWithIcon.java

@ -5,7 +5,6 @@ import com.fr.base.svg.IconUtils;
import com.fr.widgettheme.theme.widget.style.ThemedWidgetStyle;
import com.fr.design.border.UIRoundedBorder;
import com.fr.stable.StringUtils;
import com.fr.widgettheme.theme.widget.theme.WidgetThemeDisplayConstants;
import javax.swing.Icon;
import javax.swing.JLabel;
@ -64,14 +63,12 @@ public class ControlPreviewCellWithIcon extends ControlPreviewCell {
super.paintComponent(g);
ThemedWidgetStyle widgetStyle = (ThemedWidgetStyle) reportTheme.getWidgetStyle();
//风格一边框不显示主题色
Color borderColor = isDefaultStyle() ? DEFAULT_COLOR : widgetStyle.getThemeColor();
Color borderColor = widgetStyle.getBorderStyle().getBorderColor();
this.setBorder(new UIRoundedBorder(widgetStyle.getBorderStyle().getLineType()
, borderColor, widgetStyle.getBorderStyle().getRadius()));
, borderColor, (int) widgetStyle.getBorderStyle().getRadius()));
icon = setStyleTwoIcon(icon, defaultIcon);
this.jLabel.setIcon(icon);
this.add(jLabel, BorderLayout.EAST);
if (widgetStyle.getStyleType() != ThemedWidgetStyle.DEFAULT_STYLE) {
paintBgColor(g, widgetStyle, CONTROL_ALPHA);
}
paintBgColor(g, widgetStyle, CONTROL_ALPHA);
}
}

3
designer-base/src/main/java/com/fr/widgettheme/theme/panel/RoundControlPreviewCell.java

@ -36,8 +36,7 @@ public class RoundControlPreviewCell extends ControlPreviewCell {
public void paintComponent(Graphics g) {
super.paintComponent(g);
ThemedWidgetStyle widgetStyle = (ThemedWidgetStyle) reportTheme.getWidgetStyle();
//风格一边框不显示主题色
Color borderColor = isDefaultStyle() ? DEFAULT_COLOR : widgetStyle.getThemeColor();
Color borderColor = widgetStyle.getBorderStyle().getBorderColor();
Graphics2D g2d = (Graphics2D) g.create();
g2d.setColor(borderColor);
g2d.drawOval(5, 9, 15, 15);

40
designer-base/src/main/java/com/fr/widgettheme/util/ThemeTextStylePaneCreator.java

@ -1,40 +0,0 @@
package com.fr.widgettheme.util;
import com.fr.design.gui.frpane.FontSizeComboPane;
import com.fr.design.gui.ibutton.UIColorButton;
import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
import javax.swing.Box;
import javax.swing.JPanel;
import java.awt.Component;
/**
* 创建主题文本样式的工具类
*
* @author obo
* @since 11.0
* Created on 2023/12/21
*/
public class ThemeTextStylePaneCreator {
private ThemeTextStylePaneCreator() {}
/**
* 创建主题文本样式配置面板
* 包含字体大小下拉框和字体颜色按钮
* 可以自适应布局
*
* @param fontSizePane 字体大小配置
* @param fontColorButton 字体颜色配置
* @return 文本样式面板
*/
public static JPanel create(FontSizeComboPane fontSizePane, UIColorButton fontColorButton) {
Component[][] components = {{fontSizePane, Box.createHorizontalStrut(5), fontColorButton}};
double f = TableLayout.FILL;
double p = TableLayout.PREFERRED;
double[] rowSize = {f};
double[] columnSize = {f, p, p};
int[][] rowCount = {{1, 1, 1}};
return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, 0, 0);
}
}

147
designer-base/src/main/java/com/fr/widgettheme/util/WidgetStyleComponentCombiner.java

@ -0,0 +1,147 @@
package com.fr.widgettheme.util;
import com.fr.design.designer.IntervalConstants;
import com.fr.design.gui.frpane.FontSizeComboPane;
import com.fr.design.gui.frpane.UIPercentDragPane;
import com.fr.design.gui.ibutton.UIColorButton;
import com.fr.design.gui.ibutton.UIToggleButton;
import com.fr.design.gui.icombobox.LineComboBox;
import com.fr.design.gui.icombobox.UIComboBox;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.i18n.Toolkit;
import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
import com.fr.design.mainframe.backgroundpane.BackgroundQuickPane;
import com.fr.design.style.color.NewColorSelectBox;
import com.fr.design.widget.FRWidgetFactory;
import com.fr.widgettheme.theme.widget.theme.WidgetThemeDisplayConstants;
import groovy.swing.factory.LayoutFactory;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.JComponent;
import javax.swing.JPanel;
import java.awt.CardLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.LayoutManager;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
/**
* 创建控件样式组合配置面板的工具类
*
* @author obo
* @since 11.0
* Created on 2023/12/21
*/
public class WidgetStyleComponentCombiner {
private static final double F = TableLayout.FILL;
private static final double P = TableLayout.PREFERRED;
private WidgetStyleComponentCombiner() {
}
/**
* 组合主题文本样式配置面板
* 包含字体大小下拉框和字体颜色按钮
*
* @param fontSizePane 字体大小配置
* @param fontColorButton 字体颜色配置
* @param bold 粗体
* @param italic 斜体
* @return 文本样式面板
*/
public static JPanel combineTextStyleComponent(FontSizeComboPane fontSizePane, UIColorButton fontColorButton, UIToggleButton bold, UIToggleButton italic) {
Component[][] components = {{fontSizePane, fontColorButton, bold, italic}};
double[] rowSize = {P};
double[] columnSize = {F, P, P, P};
int[][] rowCount = {{1, 1, 1, 1}};
return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, 5, 5);
}
/**
* 组合主题文本样式配置面板
* 包含字体大小下拉框和字体颜色按钮
*
* @param fontNameSelectBox 字体名配置
* @param fontSizePane 字体大小配置
* @param fontColorButton 字体颜色配置
* @param bold 粗体
* @param italic 斜体
* @return 文本样式面板
*/
public static JPanel combineTextStyleComponent(UIComboBox fontNameSelectBox, FontSizeComboPane fontSizePane, UIColorButton fontColorButton, UIToggleButton bold, UIToggleButton italic) {
Component[][] components = {
{fontNameSelectBox, null, null, null},
{fontSizePane, fontColorButton, bold, italic}
};
double[] rowSize = {P, P};
double[] columnSize = {F, P, P, P};
int[][] rowCount = {
{1, 1, 1, 1},
{1, 1, 1, 1}
};
return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, 5, 5);
}
/**
* 组合控件背景配置面板
*
* @param colorSelectBox 颜色下拉框
* @param alphaDragPane 透明度
* @param columnWidth 列宽
* @return 文本样式面板
*/
public static JPanel combineWidgetBackgroundComponent(NewColorSelectBox colorSelectBox,
UIPercentDragPane alphaDragPane,
double columnWidth) {
Component[][] components = {
{colorSelectBox},
{FRWidgetFactory.createLineWrapLabel(Toolkit.i18nText("Fine-Design_Form_Widget-Style_Alpha"))},
{alphaDragPane}
};
double[] rowSize = {P, P, P};
double[] columnSize = {columnWidth};
int[][] rowCount = {{1}, {1}, {1}};
return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, IntervalConstants.INTERVAL_L1, IntervalConstants.INTERVAL_L1);
}
/**
* 组合控件边框配置面板
*
* @param lineComboBox 字体大小配置
* @param lineComboColorSelectBox 字体颜色配置
* @return 文本样式面板
*/
public static JPanel combineWidgetBorderComponent(LineComboBox lineComboBox, NewColorSelectBox lineComboColorSelectBox) {
return combineWidgetBorderComponent(lineComboBox, lineComboColorSelectBox, P);
}
/**
* 组合控件边框配置面板
*
* @param lineComboBox 字体大小配置
* @param lineComboColorSelectBox 字体颜色配置
* @param columnWidth 指定的列宽
* @return 文本样式面板
*/
public static JPanel combineWidgetBorderComponent(LineComboBox lineComboBox,
NewColorSelectBox lineComboColorSelectBox,
double columnWidth) {
Component[][] components = {
{lineComboBox},
{lineComboColorSelectBox}
};
double[] rowSize = {P, P};
double[] columnSize = {columnWidth};
int[][] rowCount = {{1}, {1}};
return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, IntervalConstants.INTERVAL_L1, IntervalConstants.INTERVAL_L1);
}
}

32
designer-base/src/main/java/com/fr/widgettheme/util/WidgetThemeDesignerUtils.java

@ -2,10 +2,16 @@ package com.fr.widgettheme.util;
import com.fr.base.io.AttrMark;
import com.fr.base.io.IOFile;
import com.fr.base.theme.TemplateTheme;
import com.fr.design.file.HistoryTemplateListCache;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.mainframe.JTemplate;
import com.fr.stable.StringUtils;
import com.fr.widgettheme.control.attr.WidgetDisplayEnhanceMarkAttr;
import com.fr.widgettheme.theme.widget.theme.WidgetThemeDisplayConstants;
import javax.swing.SwingConstants;
import java.awt.Color;
/**
* 控件主题设计器部分工具类
@ -43,4 +49,30 @@ public class WidgetThemeDesignerUtils {
}
return false;
}
/**
* 返回当前编辑模版的主题深浅
*/
public static boolean isCurrentTemplateThemeDark() {
JTemplate<?, ?> jTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate();
if (JTemplate.isValid(jTemplate)) {
TemplateTheme theme = jTemplate.getTemplateTheme();
if (theme != null) {
return theme.isDark();
}
return false;
}
throw new IllegalArgumentException("The current template is not valid");
}
/**
* 创建垂直方向顶部对齐的label
*/
public static UILabel createTopAlignmentLabel(String labelName) {
if(StringUtils.isEmpty(labelName)) {
return null;
}
UILabel label = new UILabel(labelName);
label.setVerticalAlignment(SwingConstants.TOP);
return label;
}
}

84
designer-base/src/main/java/com/fr/widgettheme/widget/mobile/pane/DisplayEnhanceMobileStyleDefinePane.java

@ -1,6 +1,8 @@
package com.fr.widgettheme.widget.mobile.pane;
import com.fr.base.background.ColorBackground;
import com.fr.design.gui.frpane.UIPercentDragPane;
import com.fr.util.ColorUtils;
import com.fr.widgettheme.theme.widget.style.MobileThemedWidgetStyle;
import com.fr.widgettheme.theme.widget.mobile.style.WidgetThemeMobileCommonExtraStyle;
import com.fr.design.beans.BasicBeanPane;
@ -16,7 +18,6 @@ import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.layout.TableLayoutHelper;
import com.fr.design.mainframe.JTemplate;
import com.fr.design.mainframe.mobile.ui.MobileStyleCustomDefinePane;
import com.fr.design.style.color.ColorSelectBox;
import com.fr.design.style.color.NewColorSelectBox;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.form.ui.Widget;
@ -27,8 +28,11 @@ import com.fr.invoke.Reflect;
import com.fr.widgettheme.theme.widget.theme.WidgetThemeDisplayConstants;
import com.fr.stable.Constants;
import com.fr.stable.StringUtils;
import com.fr.widgettheme.util.WidgetStyleComponentCombiner;
import com.fr.widgettheme.util.WidgetThemeDesignerUtils;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;
import javax.swing.border.TitledBorder;
import java.awt.BorderLayout;
@ -40,6 +44,8 @@ import java.awt.Font;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import static com.fr.widgettheme.theme.widget.theme.WidgetThemeDisplayConstants.THEME_MOBILE_WIDGET_BACKGROUND_WIDTH;
/**
* <p> 开启控件显示增强后替换原通用属性面板
* <p> 参考{@link com.fr.design.mainframe.mobile.ui.MobileStyleDefinePane}
@ -59,9 +65,13 @@ public class DisplayEnhanceMobileStyleDefinePane extends BasicBeanPane<MobileSty
protected Color titleColor = new Color(47, 142, 241);
protected JPanel commonPane;
protected LineComboBox borderType;
protected NewColorSelectBox borderColorSelectBox;
protected UISpinner borderRadius;
protected MobileStyleFontConfigPane fontConfigPane;
protected ColorSelectBox widgetBackgroundSelectBox;
protected NewColorSelectBox widgetBackgroundSelectBox;
protected UIPercentDragPane widgetBgAlphaDragPane;
protected NewColorSelectBox iconColorSelectBox;
protected MobileStyle mobileStyle;
@ -94,7 +104,15 @@ public class DisplayEnhanceMobileStyleDefinePane extends BasicBeanPane<MobileSty
fontConfigPane.populateBean(style.getNewFont());
}
if (style.getWidgetBackground() != null) {
widgetBackgroundSelectBox.setSelectObject(((ColorBackground) style.getWidgetBackground()).getColor());
Color color = ((ColorBackground) style.getWidgetBackground()).getColor();
widgetBackgroundSelectBox.setSelectObject(ColorUtils.ignoreColorAlpha(color));
widgetBgAlphaDragPane.populateBean(ColorUtils.roundColorAlphaDouble(color));
}
if (style.getBorderColor() != null) {
borderColorSelectBox.setSelectObject(style.getBorderColor());
}
if (style.getIconColor() != null) {
iconColorSelectBox.setSelectObject(style.getIconColor());
}
}
this.customBeanPane.populateBean(ob);
@ -105,11 +123,12 @@ public class DisplayEnhanceMobileStyleDefinePane extends BasicBeanPane<MobileSty
mobileStyle = Reflect.on(mobileStyleClazz).create().get();
WidgetThemeMobileCommonExtraStyle extraStyle = new WidgetThemeMobileCommonExtraStyle();
extraStyle.setCustom(customCombo.getSelectedIndex() == 1);
extraStyle.setThemeColor(themeColorSelectBox.getSelectObject());
extraStyle.setBorderType(borderType.getSelectedLineStyle());
extraStyle.setBorderRadius(borderRadius.getValue());
extraStyle.setNewFont(fontConfigPane.updateBean());
extraStyle.setWidgetBackground(ColorBackground.getInstance(widgetBackgroundSelectBox.getSelectObject()));
setIconColor(extraStyle);
setBorderType(extraStyle);
setBorderRadius(extraStyle);
setBorderColor(extraStyle);
setFontConfig(extraStyle);
setWidgetBackground(extraStyle);
mobileStyle.setMobileCommonExtraStyle(extraStyle);
this.widget.setMobileStyle(mobileStyle);
this.customBeanPane.updateBean();
@ -190,10 +209,11 @@ public class DisplayEnhanceMobileStyleDefinePane extends BasicBeanPane<MobileSty
protected void createBackgroundPane() {
widgetBackgroundSelectBox = new ColorSelectBox(NORMAL_COMBO_WIDTH);
widgetBackgroundSelectBox = new NewColorSelectBox(NORMAL_COMBO_WIDTH);
widgetBgAlphaDragPane = new UIPercentDragPane();
JPanel widgetBackgroundComponent = WidgetStyleComponentCombiner.combineWidgetBackgroundComponent(widgetBackgroundSelectBox, widgetBgAlphaDragPane, THEME_MOBILE_WIDGET_BACKGROUND_WIDTH);
initBackgroundColor();
JPanel backgroundPane = createLeftRightComponentsPane(createConfigLabel(Toolkit.i18nText("Fine-Design_Mobile_Widget_Background")), widgetBackgroundSelectBox);
settingPane.add(backgroundPane);
settingPane.add(createLeftRightComponentsPane(createConfigLabel(Toolkit.i18nText("Fine-Design_Mobile_Widget_Background")), widgetBackgroundComponent));
}
protected void initBackgroundColor() {
@ -210,10 +230,12 @@ public class DisplayEnhanceMobileStyleDefinePane extends BasicBeanPane<MobileSty
protected void createBorderLinePane() {
borderType = new LineComboBox(WidgetThemeDisplayConstants.MOBILE_BORDER_LINE_STYLE_ARRAY);
borderColorSelectBox = new NewColorSelectBox(NORMAL_COMBO_WIDTH);
JPanel borderComponent = WidgetStyleComponentCombiner.combineWidgetBorderComponent(borderType, borderColorSelectBox);
initDefaultLineType();
borderType.setPreferredSize(new Dimension(NORMAL_COMBO_WIDTH + 15, 20));
// 边框线型
settingPane.add(createLeftRightComponentsPane(createConfigLabel(Toolkit.i18nText("Fine-Design_Mobile_Widget_BorderType")), borderType));
settingPane.add(createLeftRightComponentsPane(createConfigLabel(Toolkit.i18nText("Fine-Design_Mobile_Widget_BorderType")), borderComponent));
}
protected void initDefaultLineType() {
@ -245,6 +267,7 @@ public class DisplayEnhanceMobileStyleDefinePane extends BasicBeanPane<MobileSty
protected UILabel createConfigLabel(String title) {
UILabel label = new UILabel(title, UILabel.LEFT);
label.setVerticalAlignment(SwingConstants.TOP);
label.setPreferredSize(new Dimension(75, 20));
label.setBorder(new EmptyBorder(0, 15, 0, 0));
return label;
@ -270,4 +293,41 @@ public class DisplayEnhanceMobileStyleDefinePane extends BasicBeanPane<MobileSty
}
return themeColor;
}
protected void createIconColorSelectBox() {
iconColorSelectBox = new NewColorSelectBox(NORMAL_COMBO_WIDTH);
settingPane.add(createLeftRightComponentsPane(createConfigLabel(Toolkit.i18nText("Fine-Design_Widget_Theme_Icon_Color")), iconColorSelectBox));
}
protected void setIconColor(WidgetThemeMobileCommonExtraStyle extraStyle) {
if(iconColorSelectBox != null) {
extraStyle.setIconColor(iconColorSelectBox.getSelectObject());
}
}
protected void setBorderType(WidgetThemeMobileCommonExtraStyle extraStyle) {
if(borderType != null) {
extraStyle.setBorderType(borderType.getSelectedLineStyle());
}
}
protected void setBorderRadius(WidgetThemeMobileCommonExtraStyle extraStyle) {
if(borderRadius != null) {
extraStyle.setBorderRadius(borderRadius.getValue());
}
}
protected void setBorderColor(WidgetThemeMobileCommonExtraStyle extraStyle) {
if(borderColorSelectBox != null) {
extraStyle.setBorderColor(borderColorSelectBox.getSelectObject());
}
}
protected void setFontConfig(WidgetThemeMobileCommonExtraStyle extraStyle) {
if(fontConfigPane != null) {
extraStyle.setNewFont(fontConfigPane.updateBean());
}
}
protected void setWidgetBackground(WidgetThemeMobileCommonExtraStyle extraStyle) {
if(widgetBackgroundSelectBox != null && widgetBgAlphaDragPane != null) {
extraStyle.setWidgetBackground(ColorUtils.createColorBackgroundWithAlpha(widgetBackgroundSelectBox.getSelectObject(), widgetBgAlphaDragPane.updateBean()));
}
}
}

55
designer-base/src/main/java/com/fr/widgettheme/widget/mobile/pane/FreeButtonMobileStyleDefinePane.java

@ -1,14 +1,8 @@
package com.fr.widgettheme.widget.mobile.pane;
import com.fr.base.background.ColorBackground;
import com.fr.widgettheme.theme.widget.mobile.style.FreeButtonStyle;
import com.fr.design.i18n.Toolkit;
import com.fr.design.mainframe.mobile.ui.MobileStyleCustomDefinePane;
import com.fr.design.style.color.NewColorSelectBox;
import com.fr.form.ui.Widget;
import com.fr.form.ui.mobile.MobileCommonExtraStyle;
import com.fr.form.ui.mobile.MobileStyle;
import com.fr.invoke.Reflect;
import com.fr.widgettheme.theme.widget.theme.WidgetThemeDisplayConstants;
/**
@ -19,73 +13,24 @@ import com.fr.widgettheme.theme.widget.theme.WidgetThemeDisplayConstants;
* Created on 2023/5/25
*/
public class FreeButtonMobileStyleDefinePane extends DisplayEnhanceMobileStyleDefinePane {
private NewColorSelectBox borderColorSelectBox;
private NewColorSelectBox iconColorSelectBox;
public FreeButtonMobileStyleDefinePane(Widget widget, Class<? extends MobileStyleCustomDefinePane> customBeanPaneClass, Class<? extends MobileStyle> mobileStyleClazz) {
super(widget, customBeanPaneClass, mobileStyleClazz);
}
@Override
public void populateBean(MobileStyle ob) {
super.populateBean(ob);
MobileCommonExtraStyle extraStyle = ob.getMobileCommonExtraStyle();
if (extraStyle instanceof FreeButtonStyle) {
FreeButtonStyle style = (FreeButtonStyle) extraStyle;
if (style.getBorderColor() != null) {
borderColorSelectBox.setSelectObject(style.getBorderColor());
}
if (style.getIconColor() != null) {
iconColorSelectBox.setSelectObject(style.getIconColor());
}
}
}
@Override
public MobileStyle updateBean() {
mobileStyle = Reflect.on(mobileStyleClazz).create().get();
FreeButtonStyle extraStyle = new FreeButtonStyle();
extraStyle.setCustom(customCombo.getSelectedIndex() == 1);
extraStyle.setWidgetBackground(ColorBackground.getInstance(widgetBackgroundSelectBox.getSelectObject()));
extraStyle.setBorderType(borderType.getSelectedLineStyle());
extraStyle.setBorderColor(borderColorSelectBox.getSelectObject());
extraStyle.setBorderRadius(borderRadius.getValue());
extraStyle.setNewFont(fontConfigPane.updateBean());
extraStyle.setIconColor(iconColorSelectBox.getSelectObject());
mobileStyle.setMobileCommonExtraStyle(extraStyle);
this.widget.setMobileStyle(mobileStyle);
this.customBeanPane.updateBean();
return mobileStyle;
}
@Override
protected void createUniversalPane() {
createBackgroundPane();
createBorderLinePane();
initBorderColor();
createBorderRadiusPane();
initIconColor();
createFontPane(WidgetThemeDisplayConstants.DEFAULT_WHITE_COLOR);
}
private void initIconColor() {
iconColorSelectBox = new NewColorSelectBox(NORMAL_COMBO_WIDTH);
iconColorSelectBox.setSelectObject(WidgetThemeDisplayConstants.DEFAULT_WHITE_COLOR);
settingPane.add(createLeftRightComponentsPane(createConfigLabel(Toolkit.i18nText("Fine-Design_Mobile_Widget_Icon_Color")), iconColorSelectBox));
}
@Override
protected void initDefaultLineType() {
borderType.setSelectedLineStyle(com.fr.stable.Constants.LINE_NONE);
}
private void initBorderColor() {
borderColorSelectBox = new NewColorSelectBox(NORMAL_COMBO_WIDTH);
borderColorSelectBox.setSelectObject(WidgetThemeDisplayConstants.DEFAULT_THEME_COLOR);
settingPane.add(createLeftRightComponentsPane(createConfigLabel(Toolkit.i18nText("Fine-Design_Mobile_Widget_BorderColor")), borderColorSelectBox));
}
@Override
protected void initBackgroundColor() {
widgetBackgroundSelectBox.setSelectObject(getCurrentTemplateThemeColor());

36
designer-base/src/main/java/com/fr/widgettheme/widget/mobile/pane/IconColorMobileStyleDefinePane.java

@ -0,0 +1,36 @@
package com.fr.widgettheme.widget.mobile.pane;
import com.fr.design.mainframe.mobile.ui.MobileStyleCustomDefinePane;
import com.fr.form.ui.Widget;
import com.fr.form.ui.mobile.MobileStyle;
import com.fr.widgettheme.theme.widget.theme.WidgetThemeDisplayConstants;
/**
* 带有图标颜色的移动端控件通用配置面板
*
* @author obo
* @since 11.0
* Created on 2024/1/25
*/
public class IconColorMobileStyleDefinePane extends DisplayEnhanceMobileStyleDefinePane{
public IconColorMobileStyleDefinePane(Widget widget, Class<? extends MobileStyleCustomDefinePane> customBeanPaneClass, Class<? extends MobileStyle> mobileStyleClazz) {
super(widget, customBeanPaneClass, mobileStyleClazz);
}
@Override
protected void createUniversalPane() {
// 主题色
createThemePane();
// 组件背景
createBackgroundPane();
// 边框线型
createBorderLinePane();
// 圆角边框
createBorderRadiusPane();
//图标颜色
createIconColorSelectBox();
// 字体
createFontPane(WidgetThemeDisplayConstants.DEFAULT_FONT_COLOR_BLACK);
}
}

44
designer-base/src/main/java/com/fr/widgettheme/widget/mobile/pane/LabelMobileStyleDefinePane.java

@ -1,14 +1,8 @@
package com.fr.widgettheme.widget.mobile.pane;
import com.fr.base.background.ColorBackground;
import com.fr.widgettheme.theme.widget.mobile.style.LabelIconSettingStyle;
import com.fr.design.i18n.Toolkit;
import com.fr.design.mainframe.mobile.ui.MobileStyleCustomDefinePane;
import com.fr.design.style.color.NewColorSelectBox;
import com.fr.form.ui.Widget;
import com.fr.form.ui.mobile.MobileCommonExtraStyle;
import com.fr.form.ui.mobile.MobileStyle;
import com.fr.invoke.Reflect;
import com.fr.widgettheme.theme.widget.theme.WidgetThemeDisplayConstants;
/**
@ -19,57 +13,19 @@ import com.fr.widgettheme.theme.widget.theme.WidgetThemeDisplayConstants;
* Created on 2023/5/15
*/
public class LabelMobileStyleDefinePane extends DisplayEnhanceMobileStyleDefinePane {
private NewColorSelectBox borderColorSelectBox;
public LabelMobileStyleDefinePane(Widget widget, Class<? extends MobileStyleCustomDefinePane> customBeanPaneClass,
Class<? extends MobileStyle> mobileStyleClazz) {
super(widget, customBeanPaneClass, mobileStyleClazz);
}
@Override
public void populateBean(MobileStyle ob) {
super.populateBean(ob);
MobileCommonExtraStyle extraStyle = ob.getMobileCommonExtraStyle();
if (extraStyle instanceof LabelIconSettingStyle) {
LabelIconSettingStyle style = (LabelIconSettingStyle) extraStyle;
if (style.getBorderColor() != null) {
borderColorSelectBox.setSelectObject(style.getBorderColor());
}
}
}
@Override
public MobileStyle updateBean() {
mobileStyle = Reflect.on(mobileStyleClazz).create().get();
LabelIconSettingStyle extraStyle = new LabelIconSettingStyle();
extraStyle.setCustom(customCombo.getSelectedIndex() == 1);
extraStyle.setWidgetBackground(ColorBackground.getInstance(widgetBackgroundSelectBox.getSelectObject()));
extraStyle.setBorderType(borderType.getSelectedLineStyle());
extraStyle.setBorderColor(borderColorSelectBox.getSelectObject());
extraStyle.setBorderRadius(borderRadius.getValue());
extraStyle.setNewFont(fontConfigPane.updateBean());
mobileStyle.setMobileCommonExtraStyle(extraStyle);
this.widget.setMobileStyle(mobileStyle);
this.customBeanPane.updateBean();
return mobileStyle;
}
@Override
protected void createUniversalPane() {
createBackgroundPane();
createBorderLinePane();
initBorderColor();
createBorderRadiusPane();
createFontPane(WidgetThemeDisplayConstants.DEFAULT_FONT_COLOR_BLACK);
}
private void initBorderColor() {
borderColorSelectBox = new NewColorSelectBox(NORMAL_COMBO_WIDTH);
borderColorSelectBox.setSelectObject(WidgetThemeDisplayConstants.DEFAULT_TRANSPARENT_COLOR);
settingPane.add(createLeftRightComponentsPane(createConfigLabel(Toolkit.i18nText("Fine-Design_Mobile_Widget_BorderColor")), borderColorSelectBox));
}
@Override
protected void initDefaultLineType() {
borderType.setSelectedLineStyle(com.fr.stable.Constants.LINE_NONE);

33
designer-base/src/main/java/com/fr/widgettheme/widget/mobile/pane/TextAreaMobileStyleDefinePane.java

@ -0,0 +1,33 @@
package com.fr.widgettheme.widget.mobile.pane;
import com.fr.design.mainframe.mobile.ui.MobileStyleCustomDefinePane;
import com.fr.form.ui.Widget;
import com.fr.form.ui.mobile.MobileStyle;
import com.fr.widgettheme.theme.widget.theme.WidgetThemeDisplayConstants;
/**
* 文本域控件移动端配置面板
*
* @author obo
* @since 11.0
* Created on 2024/1/25
*/
public class TextAreaMobileStyleDefinePane extends DisplayEnhanceMobileStyleDefinePane{
public TextAreaMobileStyleDefinePane(Widget widget, Class<? extends MobileStyleCustomDefinePane> customBeanPaneClass, Class<? extends MobileStyle> mobileStyleClazz) {
super(widget, customBeanPaneClass, mobileStyleClazz);
}
@Override
protected void createUniversalPane() {
// 主题色
createThemePane();
// 组件背景
createBackgroundPane();
// 边框线型
createBorderLinePane();
// 圆角边框
createBorderRadiusPane();
// 字体
createFontPane(WidgetThemeDisplayConstants.DEFAULT_FONT_COLOR_BLACK);
}
}

16
designer-base/src/main/java/com/fr/widgettheme/widget/mobile/provider/DisplayEnhanceMobileStyleFactory.java

@ -1,11 +1,11 @@
package com.fr.widgettheme.widget.mobile.provider;
import com.fr.form.ui.TextArea;
import com.fr.widgettheme.theme.widget.mobile.style.WidgetThemeMobileCommonExtraStyle;
import com.fr.widgettheme.widget.mobile.pane.FileEditorMobileStyleDefinePane;
import com.fr.widgettheme.widget.mobile.pane.FreeButtonMobileStyleDefinePane;
import com.fr.widgettheme.widget.mobile.pane.LabelMobileStyleDefinePane;
import com.fr.widgettheme.theme.widget.mobile.style.FileEditorStyle;
import com.fr.widgettheme.theme.widget.mobile.style.FreeButtonStyle;
import com.fr.widgettheme.theme.widget.mobile.style.LabelIconSettingStyle;
import com.fr.design.beans.BasicBeanPane;
import com.fr.design.mainframe.mobile.ui.MobileStyleCustomDefinePane;
import com.fr.form.ui.FreeButton;
@ -14,6 +14,7 @@ import com.fr.form.ui.MultiFileEditor;
import com.fr.form.ui.Widget;
import com.fr.form.ui.mobile.MobileCommonExtraStyle;
import com.fr.form.ui.mobile.MobileStyle;
import com.fr.widgettheme.widget.mobile.pane.TextAreaMobileStyleDefinePane;
/**
* 样式创建工厂
@ -40,6 +41,9 @@ public class DisplayEnhanceMobileStyleFactory {
if (widget instanceof FreeButton) {
return new FreeButtonMobileStyleDefinePane(widget, customDefinePane, mobileStyle);
}
if (widget instanceof TextArea) {
return new TextAreaMobileStyleDefinePane(widget, customDefinePane, mobileStyle);
}
return null;
}
@ -50,16 +54,10 @@ public class DisplayEnhanceMobileStyleFactory {
* @return
*/
public static Class<? extends MobileCommonExtraStyle> classForWidgetCommonExtraStyle(Widget widget) {
if (widget instanceof Label) {
return LabelIconSettingStyle.class;
}
if (widget instanceof MultiFileEditor) {
return FileEditorStyle.class;
}
if (widget instanceof FreeButton) {
return FreeButtonStyle.class;
}
return null;
return WidgetThemeMobileCommonExtraStyle.class;
}
}

55
designer-base/src/main/java/com/fr/widgettheme/widget/mobile/provider/WidgetThemeMobileStyleDefinePaneCreator.java

@ -1,11 +1,18 @@
package com.fr.widgettheme.widget.mobile.provider;
import com.fr.base.io.IOFile;
import com.fr.form.ui.ComboBox;
import com.fr.form.ui.ComboCheckBox;
import com.fr.form.ui.DateEditor;
import com.fr.form.ui.NumberEditor;
import com.fr.form.ui.Password;
import com.fr.form.ui.TextArea;
import com.fr.form.ui.TextEditor;
import com.fr.form.ui.TreeEditor;
import com.fr.widgettheme.util.WidgetThemeDesignerUtils;
import com.fr.widgettheme.utils.WidgetThemeServerUtils;
import com.fr.widgettheme.widget.mobile.pane.DisplayEnhanceMobileStyleDefinePane;
import com.fr.widgettheme.theme.widget.mobile.style.WidgetThemeMobileCommonExtraStyle;
import com.fr.design.beans.BasicBeanPane;
import com.fr.design.file.HistoryTemplateListCache;
import com.fr.design.mainframe.JTemplate;
import com.fr.design.mainframe.mobile.ui.MobileStyleCustomDefinePane;
import com.fr.form.ui.FreeButton;
import com.fr.form.ui.Label;
@ -14,7 +21,7 @@ import com.fr.form.ui.Widget;
import com.fr.form.ui.mobile.MobileCommonExtraStyle;
import com.fr.form.ui.mobile.MobileStyle;
import com.fr.log.FineLoggerFactory;
import com.fr.widgettheme.control.attr.WidgetDisplayEnhanceMarkAttr;
import com.fr.widgettheme.widget.mobile.pane.IconColorMobileStyleDefinePane;
import org.jetbrains.annotations.NotNull;
/**
@ -39,16 +46,13 @@ public class WidgetThemeMobileStyleDefinePaneCreator {
*/
public static BasicBeanPane<MobileStyle> createBaseBeanPane(Widget widget, Class<? extends MobileStyleCustomDefinePane> customDefinePane, Class<? extends MobileStyle> mobileStyle) {
try {
JTemplate<?, ?> jTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate();
if (JTemplate.isValid(jTemplate)) {
IOFile ioFile = (IOFile) jTemplate.getTarget();
WidgetDisplayEnhanceMarkAttr mark = ioFile.getAttrMark(WidgetDisplayEnhanceMarkAttr.XML_TAG);
if (mark != null && mark.isWidgetEnhance()) {
if (commonWidget(widget)) {
return new DisplayEnhanceMobileStyleDefinePane(widget, customDefinePane, mobileStyle);
} else {
return DisplayEnhanceMobileStyleFactory.createWidgetMobileStyleDefinePane(widget, customDefinePane, mobileStyle);
}
if (WidgetThemeDesignerUtils.enableWidgetEnhance()) {
if (specialCommonWidget(widget)) {
return DisplayEnhanceMobileStyleFactory.createWidgetMobileStyleDefinePane(widget, customDefinePane, mobileStyle);
} else if (isIconWidget(widget)) {
return new IconColorMobileStyleDefinePane(widget, customDefinePane, mobileStyle);
} else {
return new DisplayEnhanceMobileStyleDefinePane(widget, customDefinePane, mobileStyle);
}
}
} catch (Exception e) {
@ -64,10 +68,10 @@ public class WidgetThemeMobileStyleDefinePaneCreator {
* @return class
*/
public static @NotNull Class<? extends MobileCommonExtraStyle> classForCommonExtraStyle(Widget widget) {
if (commonWidget(widget)) {
return WidgetThemeMobileCommonExtraStyle.class;
} else {
if (specialCommonWidget(widget)) {
return DisplayEnhanceMobileStyleFactory.classForWidgetCommonExtraStyle(widget);
} else {
return WidgetThemeMobileCommonExtraStyle.class;
}
}
@ -78,7 +82,20 @@ public class WidgetThemeMobileStyleDefinePaneCreator {
* @param widget 控件
* @return /
*/
private static boolean commonWidget(Widget widget) {
return !((widget instanceof FreeButton) || (widget instanceof Label) || (widget instanceof MultiFileEditor));
private static boolean specialCommonWidget(Widget widget) {
return widget instanceof FreeButton || widget instanceof Label || widget instanceof MultiFileEditor || widget instanceof TextArea;
}
/**
* 是否为带图标的控件
*
* @param widget 控件
* @return /
*/
private static boolean isIconWidget(Widget widget) {
return widget instanceof TextEditor || widget instanceof NumberEditor || widget instanceof Password ||
widget instanceof DateEditor || widget instanceof ComboBox || widget instanceof ComboCheckBox ||
widget instanceof TreeEditor ||
WidgetThemeServerUtils.isNewComboBoxTreeEditor(widget);
}
}

213
designer-form/src/main/java/com/fr/design/widgettheme/BaseStyleSettingPane.java

@ -1,9 +1,17 @@
package com.fr.design.widgettheme;
import com.fr.base.background.ColorBackground;
import com.fr.base.theme.TemplateTheme;
import com.fr.design.gui.frpane.FontSizeComboPane;
import com.fr.design.gui.frpane.UIPercentDragPane;
import com.fr.design.gui.ibutton.UIColorButton;
import com.fr.design.gui.ibutton.UIToggleButton;
import com.fr.design.gui.icombobox.UIComboBox;
import com.fr.general.IOUtils;
import com.fr.stable.StringUtils;
import com.fr.util.ColorUtils;
import com.fr.widgettheme.theme.widget.style.BorderStyle;
import com.fr.widgettheme.theme.widget.style.ButtonBackgroundStyle;
import com.fr.widgettheme.theme.widget.style.ThemeTextStyle;
import com.fr.widgettheme.theme.widget.style.ThemedWidgetStyle;
import com.fr.widgettheme.theme.bean.ButtonBackground;
@ -11,7 +19,6 @@ import com.fr.design.beans.BasicBeanPane;
import com.fr.design.designer.IntervalConstants;
import com.fr.design.file.HistoryTemplateListCache;
import com.fr.design.gui.ibutton.UIButtonGroup;
import com.fr.design.gui.ibutton.UIRadioButton;
import com.fr.design.gui.icombobox.LineComboBox;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.style.FRFontPane;
@ -26,11 +33,12 @@ import com.fr.form.ui.Widget;
import com.fr.general.FRFont;
import com.fr.widgettheme.theme.panel.ButtonStyleDefinedPane;
import com.fr.widgettheme.theme.widget.theme.WidgetThemeDisplayConstants;
import com.fr.widgettheme.util.ThemeTextStylePaneCreator;
import com.fr.widgettheme.util.WidgetStyleComponentCombiner;
import com.fr.widgettheme.util.WidgetThemeDesignerUtils;
import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
@ -38,6 +46,8 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.fr.widgettheme.theme.widget.theme.WidgetThemeDisplayConstants.THEME_PC_WIDGET_BACKGROUND_WIDTH;
/**
* 样式设置pane抽象类
*
@ -54,12 +64,12 @@ public abstract class BaseStyleSettingPane<T extends Widget> extends BasicBeanPa
protected JPanel customPane;
// 主题色
protected NewColorSelectBox colorSelectBox;
// 风格1
protected UIRadioButton style1;
// 风格2
protected UIRadioButton style2;
// 边框线型
protected LineComboBox lineComboBox;
/**
* 边框颜色
*/
protected NewColorSelectBox borderColorSelectBox;
// 圆角边框
protected UIBoundSpinner borderRadiusSpinner;
// 字体详细设置
@ -79,6 +89,33 @@ public abstract class BaseStyleSettingPane<T extends Widget> extends BasicBeanPa
*/
protected UIColorButton fontColorButton;
/**
* 字体名选择器
*/
protected UIComboBox fontNameSelectBox;
/**
* 字体粗体配置
*/
protected UIToggleButton bold;
/**
* 字体斜体配置
*/
protected UIToggleButton italic;
/**
* 控件背景颜色配置面板
*/
protected NewColorSelectBox widgetBgColorSelectBox;
/**
* 控件背景透明度配置面板
*/
protected UIPercentDragPane widgetBgAlphaDragPane;
/**
* 控件图标颜色
*/
protected NewColorSelectBox iconColorSelectBox;
private final Map<StyleSetting, UILabel> labelMap = new HashMap<>();
private final Map<StyleSetting, Component> paneMap = new HashMap<>();
public BaseStyleSettingPane(List<StyleSetting> styleSettingList) {
@ -97,34 +134,30 @@ public abstract class BaseStyleSettingPane<T extends Widget> extends BasicBeanPa
protected void initStyleEditor() {
initStyle();
colorSelectBox = new NewColorSelectBox(160, true);
colorSelectBox = new NewColorSelectBox(WidgetThemeDisplayConstants.THEME_WIDGET_COMPONENT_WIDTH, false);
lineComboBox = new LineComboBox(WidgetThemeDisplayConstants.BORDER_LINE_STYLE_ARRAY);
borderColorSelectBox = new NewColorSelectBox(WidgetThemeDisplayConstants.THEME_WIDGET_COMPONENT_WIDTH, true);
borderRadiusSpinner = new UIBoundSpinner(0, Integer.MAX_VALUE, 1);
frFontPane = new FRFontPane();
buttonStyleDefinedPane = new ButtonStyleDefinedPane();
selectBgColorBox = new NewColorSelectBox(160, true);
selectBgColorBox = new NewColorSelectBox(WidgetThemeDisplayConstants.THEME_WIDGET_COMPONENT_WIDTH, true);
iconColorSelectBox = new NewColorSelectBox(WidgetThemeDisplayConstants.THEME_WIDGET_COMPONENT_WIDTH, true);
fontSizePane = new FontSizeComboPane();
fontColorButton = new UIColorButton();
paneMap.put(StyleSetting.STYLE_TYPE, createStyleTypePane());
bold = new UIToggleButton(IOUtils.readIcon("/com/fr/design/images/m_format/cellstyle/bold.png"));
italic = new UIToggleButton(IOUtils.readIcon("/com/fr/design/images/m_format/cellstyle/italic.png"));
widgetBgColorSelectBox = new NewColorSelectBox(WidgetThemeDisplayConstants.THEME_WIDGET_COMPONENT_WIDTH, true);
widgetBgAlphaDragPane = new UIPercentDragPane();
paneMap.put(StyleSetting.THEME_COLOR, colorSelectBox);
paneMap.put(StyleSetting.LINE_TYPE, lineComboBox);
paneMap.put(StyleSetting.TEXT_STYLE, ThemeTextStylePaneCreator.create(fontSizePane, fontColorButton));
paneMap.put(StyleSetting.LINE_COLOR, borderColorSelectBox);
paneMap.put(StyleSetting.TEXT_STYLE, WidgetStyleComponentCombiner.combineTextStyleComponent(fontNameSelectBox, fontSizePane, fontColorButton, bold, italic));
paneMap.put(StyleSetting.BORDER_RADIUS, borderRadiusSpinner);
paneMap.put(StyleSetting.FONT, frFontPane);
paneMap.put(StyleSetting.BTN_BACKGROUND, buttonStyleDefinedPane);
paneMap.put(StyleSetting.SELECT_COLOR, selectBgColorBox);
}
/**
* 初始化style1和style2
*/
private void initStyle() {
style1 = new UIRadioButton(Toolkit.i18nText("Fine-Design_Widget_Theme_Style_1"));
style2 = new UIRadioButton(Toolkit.i18nText("Fine-Design_Widget_Theme_Style_2"));
ButtonGroup buttonGroup = new ButtonGroup();
buttonGroup.add(style1);
buttonGroup.add(style2);
paneMap.put(StyleSetting.WIDGET_BACKGROUND, WidgetStyleComponentCombiner.combineWidgetBackgroundComponent(widgetBgColorSelectBox, widgetBgAlphaDragPane, THEME_PC_WIDGET_BACKGROUND_WIDTH));
paneMap.put(StyleSetting.ICON_COLOR, iconColorSelectBox);
}
protected JPanel createHeadPane() {
@ -143,14 +176,6 @@ public abstract class BaseStyleSettingPane<T extends Widget> extends BasicBeanPa
return headPane;
}
protected JPanel createStyleTypePane() {
// 容纳风格1和风格2的panel
JPanel stylePane = new JPanel(FRGUIPaneFactory.createBoxFlowLayout());
stylePane.add(style1);
stylePane.add(style2);
return stylePane;
}
protected JPanel createCustomPane() {
int size = styleSettingList.size();
@ -212,92 +237,95 @@ public abstract class BaseStyleSettingPane<T extends Widget> extends BasicBeanPa
}
private void setThemedStyle(ThemedWidgetStyle widgetStyle) {
setColorSelectBox(widgetStyle);
setStyle(widgetStyle);
setLineComboBox(widgetStyle);
setBorderRadiusSpinner(widgetStyle);
setTextStylePane(widgetStyle);
setFrFontPane(widgetStyle);
setButtonStyleDefinedPane(widgetStyle);
setSelectBgColor(widgetStyle);
setColorSelectBox(widgetStyle.getThemeColor());
setLineComboBox(widgetStyle.getBorderStyle().getLineType());
setBorderRadiusSpinner(widgetStyle.getBorderStyle().getRadius());
setTextStylePane(widgetStyle.getTextStyle());
setFrFontPane(widgetStyle.getFontStyle().getFont());
setButtonStyleDefinedPane(widgetStyle.getButtonBackgroundStyle());
setSelectBgColor(widgetStyle.getSelectBackgroundColor());
setWidgetBackground(widgetStyle.getWidgetBackground());
setBorderColor(widgetStyle.getBorderStyle().getBorderColor());
setIconColor(widgetStyle.getIconColor());
}
private void setColorSelectBox(ThemedWidgetStyle widgetStyle) {
private void setColorSelectBox(Color themeColor) {
if (colorSelectBox != null) {
colorSelectBox.setSelectObject(widgetStyle.getThemeColor());
}
}
private void setStyle(ThemedWidgetStyle widgetStyle) {
if (widgetStyle.getStyleType() == ThemedWidgetStyle.DEFAULT_STYLE) {
if (style1 != null) {
style1.setSelected(true);
}
} else {
if (style2 != null) {
style2.setSelected(true);
}
colorSelectBox.setSelectObject(themeColor);
}
}
private void setLineComboBox(ThemedWidgetStyle widgetStyle) {
private void setLineComboBox(int lineType) {
if (lineComboBox != null) {
lineComboBox.setSelectedLineStyle(widgetStyle.getBorderStyle().getLineType());
lineComboBox.setSelectedLineStyle(lineType);
}
}
private void setBorderRadiusSpinner(ThemedWidgetStyle widgetStyle) {
private void setBorderRadiusSpinner(double radius) {
if (borderRadiusSpinner != null) {
borderRadiusSpinner.setValue(widgetStyle.getBorderStyle().getRadius());
borderRadiusSpinner.setValue(radius);
}
}
private void setTextStylePane(ThemedWidgetStyle widgetStyle) {
ThemeTextStyle textStyle = widgetStyle.getTextStyle();
this.fontSizePane.setValue(textStyle.getFontSize());
this.fontColorButton.setColor(textStyle.getFontColor());
private void setTextStylePane(ThemeTextStyle textStyle) {
if (fontSizePane != null) {
this.fontSizePane.setValue(textStyle.getFontSize());
}
if (fontColorButton != null) {
this.fontColorButton.setColor(textStyle.getFontColor());
}
}
private void setFrFontPane(ThemedWidgetStyle widgetStyle) {
private void setFrFontPane(FRFont font) {
if (frFontPane != null) {
frFontPane.populateBean(widgetStyle.getFontStyle().getFont());
frFontPane.populateBean(font);
}
}
private void setButtonStyleDefinedPane(ThemedWidgetStyle widgetStyle) {
private void setButtonStyleDefinedPane(ButtonBackgroundStyle backgroundStyle) {
if (buttonStyleDefinedPane != null) {
buttonStyleDefinedPane.populate(ButtonBackground.create(widgetStyle.getButtonBackgroundStyle()));
buttonStyleDefinedPane.populate(ButtonBackground.create(backgroundStyle));
}
}
private void setDefaultStyle() {
if (colorSelectBox != null) {
colorSelectBox.setSelectObject(ThemedWidgetStyle.DEFAULT_COLOR);
}
if (style1 != null) {
style1.setSelected(true);
}
if (lineComboBox != null) {
lineComboBox.setSelectedLineStyle(BorderStyle.DEFAULT_LINE_TYPE);
}
if (borderRadiusSpinner != null) {
borderRadiusSpinner.setValue(BorderStyle.DEFAULT_BORDER_RADIUS);
}
if (fontSizePane != null) {
fontSizePane.setValue(ThemeTextStyle.DEFAULT_FONT_SIZE);
setColorSelectBox(ThemedWidgetStyle.DEFAULT_COLOR);
setLineComboBox(BorderStyle.DEFAULT_LINE_TYPE);
setBorderRadiusSpinner(BorderStyle.DEFAULT_BORDER_RADIUS);
setTextStylePane(ThemeTextStyle.DEFAULT_WIDGET_STYLE);
setFrFontPane(FRFont.getInstance());
setSelectBgColor(WidgetThemeDisplayConstants.DEFAULT_TRANSPARENT_COLOR);
setWidgetBackground(WidgetThemeDisplayConstants.DEFAULT_COLOR_BACKGROUND);
setBorderColor(BorderStyle.DEFAULT_WIDGET_BORDER_COLOR);
setIconColor(Color.BLACK);
}
private void setSelectBgColor(Color selectBgColor) {
if (selectBgColorBox != null) {
selectBgColorBox.setSelectObject(selectBgColor);
}
if (fontColorButton != null) {
fontColorButton.setColor(Color.BLACK);
}
private void setWidgetBackground(ColorBackground background) {
if (widgetBgColorSelectBox != null) {
widgetBgColorSelectBox.setSelectObject(background.getColor());
}
if (frFontPane != null) {
frFontPane.populateBean(FRFont.getInstance());
if (widgetBgAlphaDragPane != null) {
//0-255,需要转化为
double alpha = ColorUtils.roundColorAlphaDouble(background.getColor());
widgetBgAlphaDragPane.populateBean(alpha);
}
if (selectBgColorBox != null) {
selectBgColorBox.setSelectObject(null);
}
private void setBorderColor(Color borderColor) {
if(borderColorSelectBox != null) {
borderColorSelectBox.setSelectObject(borderColor);
}
}
private void setSelectBgColor(ThemedWidgetStyle widgetStyle) {
if(selectBgColorBox != null) {
selectBgColorBox.setSelectObject(widgetStyle.getSelectBackgroundColor());
private void setIconColor(Color iconColor) {
if(iconColorSelectBox != null) {
iconColorSelectBox.setSelectObject(iconColor);
}
}
@ -305,13 +333,8 @@ public abstract class BaseStyleSettingPane<T extends Widget> extends BasicBeanPa
* 初始化枚举和UILabel对应的map
*/
private void initLabelMap() {
labelMap.put(StyleSetting.THEME_COLOR, new UILabel(Toolkit.i18nText("Fine-Design_Widget_Theme_Color")));
labelMap.put(StyleSetting.TEXT_STYLE, new UILabel(Toolkit.i18nText("Fine-Design_Widget_Theme_Text_Style")));
labelMap.put(StyleSetting.FONT, new UILabel(Toolkit.i18nText("Fine-Design_Widget_Theme_Font")));
labelMap.put(StyleSetting.STYLE_TYPE, new UILabel(Toolkit.i18nText("Fine-Design_Widget_Theme_Style")));
labelMap.put(StyleSetting.LINE_TYPE, new UILabel(Toolkit.i18nText("Fine-Design_Widget_Theme_Border_Line")));
labelMap.put(StyleSetting.BORDER_RADIUS, new UILabel(Toolkit.i18nText("Fine-Design_Widget_Theme_Border_Radius")));
labelMap.put(StyleSetting.BTN_BACKGROUND, new UILabel(Toolkit.i18nText("Fine-Design_Theme_Widget_Background")));
labelMap.put(StyleSetting.SELECT_COLOR, new UILabel(Toolkit.i18nText("Fine-Design_Widget_Background_Select_Box")));
for (StyleSetting setting : StyleSetting.values()) {
labelMap.put(setting, WidgetThemeDesignerUtils.createTopAlignmentLabel(Toolkit.i18nText(setting.getLabelI18nKey())));
}
}
}

15
designer-form/src/main/java/com/fr/design/widgettheme/LabelSettingPane.java

@ -1,11 +1,15 @@
package com.fr.design.widgettheme;
import com.fr.util.ColorUtils;
import com.fr.widgettheme.theme.widget.style.FontStyle;
import com.fr.form.ui.Label;
import com.fr.form.ui.Widget;
import com.fr.general.FRFont;
import com.fr.widgettheme.theme.widget.theme.LabelTheme;
import com.fr.widgettheme.theme.widget.theme.WidgetThemeDisplayConstants;
import com.fr.widgettheme.util.WidgetThemeDesignerUtils;
import java.awt.Color;
import java.util.Collections;
/**
@ -37,7 +41,7 @@ public class LabelSettingPane<T extends Widget> extends BaseStyleSettingPane<T>
private LabelTheme initLabelTheme(T t) {
LabelTheme widgetTheme = (LabelTheme) t.getWidgetTheme();
if (widgetTheme == null) {
widgetTheme = new LabelTheme();
widgetTheme = initLabelTheme();
Label label = (Label) t;
if (!label.getDefaultFont().equals(label.getFont())) {
widgetTheme.setFollowTheme(false);
@ -48,6 +52,15 @@ public class LabelSettingPane<T extends Widget> extends BaseStyleSettingPane<T>
return widgetTheme;
}
private LabelTheme initLabelTheme() {
LabelTheme labelTheme = new LabelTheme();
Color fontColor = WidgetThemeDesignerUtils.isCurrentTemplateThemeDark() ?
ColorUtils.hexToColor(WidgetThemeDisplayConstants.COLOR_FFFFFF_HEX) :
ColorUtils.hexToColor(WidgetThemeDisplayConstants.COLOR_091E40_HEX);
labelTheme.getFontStyle().setFont(FRFont.getInstance().applyForeground(fontColor));
return labelTheme;
}
@Override
public void updateBean(T t) {
LabelTheme widgetTheme = initLabelTheme(t);

6
designer-form/src/main/java/com/fr/design/widgettheme/ParaButtonSettingPane.java

@ -21,7 +21,7 @@ public class ParaButtonSettingPane<T extends Widget> extends ButtonSettingPane<T
public ParaButtonSettingPane() {
super(Arrays.asList(
StyleSetting.THEME_COLOR,
StyleSetting.STYLE_TYPE,
StyleSetting.WIDGET_BACKGROUND,
StyleSetting.TEXT_STYLE
));
}
@ -36,6 +36,8 @@ public class ParaButtonSettingPane<T extends Widget> extends ButtonSettingPane<T
ThemeTextStyle textStyle = ((ParaButtonTheme) buttonTheme).getTextStyle();
fontSizePane.setValue(textStyle.getFontSize());
fontColorButton.setColor(textStyle.getFontColor());
bold.setSelected(textStyle.isBold());
italic.setSelected(textStyle.isItalic());
}
@Override
@ -44,6 +46,8 @@ public class ParaButtonSettingPane<T extends Widget> extends ButtonSettingPane<T
ThemeTextStyle textStyle = new ThemeTextStyle();
textStyle.setFontSize(fontSizePane.getValue());
textStyle.setFontColor(fontColorButton.getColor());
textStyle.setBold(bold.isSelected());
textStyle.setItalic(italic.isSelected());
paraButtonTheme.setTextStyle(textStyle);
}

13
designer-form/src/main/java/com/fr/design/widgettheme/ParaEditorSettingPane.java

@ -2,13 +2,19 @@ package com.fr.design.widgettheme;
import com.fr.design.widgettheme.common.EditorSettingPane;
import com.fr.form.ui.Widget;
import com.fr.util.ColorUtils;
import com.fr.widgettheme.theme.widget.style.ThemeTextStyle;
import com.fr.widgettheme.theme.widget.theme.ParaEditorTheme;
import com.fr.widgettheme.theme.widget.theme.cell.EditorTheme;
import com.fr.widgettheme.util.WidgetThemeDesignerUtils;
import java.awt.Color;
import java.util.Arrays;
import java.util.List;
import static com.fr.widgettheme.theme.widget.theme.WidgetThemeDisplayConstants.COLOR_091E40_HEX;
import static com.fr.widgettheme.theme.widget.theme.WidgetThemeDisplayConstants.COLOR_FFFFFF_HEX;
/**
* 设计器控件属性的高级设置增加主题样式设置项包括
@ -23,8 +29,9 @@ public class ParaEditorSettingPane<T extends Widget> extends EditorSettingPane<T
public ParaEditorSettingPane() {
super(Arrays.asList(
StyleSetting.THEME_COLOR,
StyleSetting.STYLE_TYPE,
StyleSetting.WIDGET_BACKGROUND,
StyleSetting.LINE_TYPE,
StyleSetting.LINE_COLOR,
StyleSetting.BORDER_RADIUS,
StyleSetting.TEXT_STYLE
));
@ -39,6 +46,8 @@ public class ParaEditorSettingPane<T extends Widget> extends EditorSettingPane<T
ThemeTextStyle textStyle = ((ParaEditorTheme) widgetTheme).getTextStyle();
fontSizePane.setValue(textStyle.getFontSize());
fontColorButton.setColor(textStyle.getFontColor());
bold.setSelected(textStyle.isBold());
italic.setSelected(textStyle.isItalic());
}
@Override
@ -47,6 +56,8 @@ public class ParaEditorSettingPane<T extends Widget> extends EditorSettingPane<T
ThemeTextStyle textStyle = new ThemeTextStyle();
textStyle.setFontSize(fontSizePane.getValue());
textStyle.setFontColor(fontColorButton.getColor());
textStyle.setBold(bold.isSelected());
textStyle.setItalic(italic.isSelected());
paraEditorTheme.setTextStyle(textStyle);
}

3
designer-form/src/main/java/com/fr/design/widgettheme/ParaNormalButtonSettingPane.java

@ -1,5 +1,6 @@
package com.fr.design.widgettheme;
import com.fr.util.ColorUtils;
import com.fr.widgettheme.theme.widget.style.FontStyle;
import com.fr.design.widgettheme.common.NormalButtonSettingPane;
import com.fr.form.ui.FreeButton;
@ -10,6 +11,7 @@ import com.fr.widgettheme.theme.widget.theme.cell.NormalButtonTheme;
import java.util.Arrays;
import static com.fr.widgettheme.theme.widget.theme.WidgetThemeDisplayConstants.COLOR_FFFFFF_HEX;
/**
* 参数面板常规按钮设置窗口
*
@ -23,6 +25,7 @@ public class ParaNormalButtonSettingPane<T extends Widget> extends NormalButtonS
super(Arrays.asList(
StyleSetting.BTN_BACKGROUND,
StyleSetting.LINE_TYPE,
StyleSetting.LINE_COLOR,
StyleSetting.BORDER_RADIUS,
StyleSetting.FONT
));

10
designer-form/src/main/java/com/fr/design/widgettheme/ParaSelectEditorSettingPane.java

@ -16,12 +16,14 @@ public class ParaSelectEditorSettingPane<T extends Widget> extends ParaEditorSet
public ParaSelectEditorSettingPane() {
super(Arrays.asList(
StyleSetting.THEME_COLOR,
StyleSetting.SELECT_COLOR,
StyleSetting.STYLE_TYPE,
StyleSetting.WIDGET_BACKGROUND,
StyleSetting.LINE_TYPE,
StyleSetting.LINE_COLOR,
StyleSetting.BORDER_RADIUS,
StyleSetting.TEXT_STYLE
));
StyleSetting.ICON_COLOR,
StyleSetting.TEXT_STYLE,
StyleSetting.SELECT_COLOR
));
}
@Override

2
designer-form/src/main/java/com/fr/design/widgettheme/ParaTreeEditorSettingPane.java

@ -21,7 +21,7 @@ public class ParaTreeEditorSettingPane<T extends TreeEditor> extends TreeEditorS
public ParaTreeEditorSettingPane() {
super(Arrays.asList(
StyleSetting.THEME_COLOR,
StyleSetting.STYLE_TYPE,
StyleSetting.WIDGET_BACKGROUND,
StyleSetting.TEXT_STYLE
));
}

42
designer-form/src/main/java/com/fr/design/widgettheme/StyleSetting.java

@ -12,34 +12,56 @@ public enum StyleSetting {
/**
* 主题颜色
*/
THEME_COLOR,
THEME_COLOR("Fine-Design_Widget_Theme_Color"),
/**
* 风格
* 线型
*/
STYLE_TYPE,
LINE_TYPE("Fine-Design_Widget_Theme_Border_Line"),
/**
* 线型
* 线型颜色
*/
LINE_TYPE,
LINE_COLOR(""),
/**
* 边框圆角
*/
BORDER_RADIUS,
BORDER_RADIUS("Fine-Design_Widget_Theme_Border_Radius"),
/**
* 文本样式
*/
TEXT_STYLE,
TEXT_STYLE("Fine-Design_Widget_Theme_Text_Style"),
/**
* 字体
*/
FONT,
FONT("Fine-Design_Widget_Theme_Font"),
/**
* 按钮背景
*/
BTN_BACKGROUND,
BTN_BACKGROUND("Fine-Design_Theme_Widget_Background"),
/**
* 自定义下拉框颜色
*/
SELECT_COLOR
SELECT_COLOR("Fine-Design_Widget_Background_Select_Box"),
/**
* 控件背景
*/
WIDGET_BACKGROUND("Fine-Design_Widget_Theme_Widget_Background"),
/**
* 图标颜色
*/
ICON_COLOR("Fine-Design_Widget_Theme_Icon_Color");
/**
* label标签i18n key
*/
private final String labelI18nKey;
StyleSetting(String labelI18nKey) {
this.labelI18nKey = labelI18nKey;
}
public String getLabelI18nKey() {
return labelI18nKey;
}
}

9
designer-form/src/main/java/com/fr/design/widgettheme/common/ButtonSettingPane.java

@ -3,7 +3,6 @@ package com.fr.design.widgettheme.common;
import com.fr.design.widgettheme.StyleSetting;
import com.fr.design.widgettheme.BaseStyleSettingPane;
import com.fr.form.ui.Widget;
import com.fr.widgettheme.theme.widget.theme.WidgetThemeDisplayConstants;
import com.fr.widgettheme.theme.widget.theme.cell.ButtonTheme;
import org.jetbrains.annotations.Nullable;
@ -23,7 +22,7 @@ public class ButtonSettingPane<T extends Widget> extends BaseStyleSettingPane<T>
public ButtonSettingPane() {
super(Arrays.asList(
StyleSetting.THEME_COLOR,
StyleSetting.STYLE_TYPE
StyleSetting.WIDGET_BACKGROUND
));
}
@ -65,11 +64,6 @@ public class ButtonSettingPane<T extends Widget> extends BaseStyleSettingPane<T>
} else {
styleSettingHead.setSelectedIndex(1);
colorSelectBox.setSelectObject(buttonTheme.getThemeColor());
if (buttonTheme.getStyleType() == WidgetThemeDisplayConstants.STYLE_1) {
style1.setSelected(true);
} else {
style2.setSelected(true);
}
assignFontSizePane(buttonTheme);
}
switchCard();
@ -89,7 +83,6 @@ public class ButtonSettingPane<T extends Widget> extends BaseStyleSettingPane<T>
protected void updateButtonStyleBean(ButtonTheme buttonTheme) {
buttonTheme.setThemeColor(colorSelectBox.getSelectObject());
buttonTheme.setStyleType(style1.isSelected() ? WidgetThemeDisplayConstants.STYLE_1 : WidgetThemeDisplayConstants.STYLE_2);
assignFontSizeStyle(buttonTheme);
switchCard();
}

17
designer-form/src/main/java/com/fr/design/widgettheme/common/EditorSettingPane.java

@ -1,12 +1,13 @@
package com.fr.design.widgettheme.common;
import com.fr.util.ColorUtils;
import com.fr.widgettheme.theme.widget.style.BorderStyle;
import com.fr.design.widgettheme.BaseStyleSettingPane;
import com.fr.form.ui.Widget;
import com.fr.design.widgettheme.StyleSetting;
import com.fr.widgettheme.theme.widget.theme.WidgetThemeDisplayConstants;
import com.fr.widgettheme.theme.widget.theme.cell.EditorTheme;
import com.fr.widgettheme.util.WidgetThemeDesignerUtils;
import org.jetbrains.annotations.Nullable;
import java.util.Arrays;
@ -25,7 +26,7 @@ public class EditorSettingPane<T extends Widget> extends BaseStyleSettingPane<T>
public EditorSettingPane() {
super(Arrays.asList(
StyleSetting.THEME_COLOR,
StyleSetting.STYLE_TYPE,
StyleSetting.WIDGET_BACKGROUND,
StyleSetting.LINE_TYPE,
StyleSetting.BORDER_RADIUS
));
@ -74,13 +75,11 @@ public class EditorSettingPane<T extends Widget> extends BaseStyleSettingPane<T>
} else {
styleSettingHead.setSelectedIndex(1);
colorSelectBox.setSelectObject(editorTheme.getThemeColor());
if (editorTheme.getStyleType() == WidgetThemeDisplayConstants.STYLE_1) {
style1.setSelected(true);
} else {
style2.setSelected(true);
}
lineComboBox.setSelectedLineStyle(editorTheme.getBorderStyle().getLineType());
borderRadiusSpinner.setValue(editorTheme.getBorderStyle().getRadius());
widgetBgColorSelectBox.setSelectObject(ColorUtils.ignoreColorAlpha(editorTheme.getWidgetBackground().getColor()));
widgetBgAlphaDragPane.populateBean(ColorUtils.roundColorAlphaDouble(editorTheme.getWidgetBackground().getColor()));
iconColorSelectBox.setSelectObject(editorTheme.getIconColor());
selectBgColorBox.setSelectObject(editorTheme.getSelectBoxBgColor());
assignFontSizePane(editorTheme);
}
@ -108,8 +107,8 @@ public class EditorSettingPane<T extends Widget> extends BaseStyleSettingPane<T>
protected void updateEditorStyleBean(EditorTheme editorTheme) {
editorTheme.setThemeColor(colorSelectBox.getSelectObject());
editorTheme.setSelectBoxBgColor(selectBgColorBox.getSelectObject());
editorTheme.setStyleType(style1.isSelected() ? WidgetThemeDisplayConstants.STYLE_1 : WidgetThemeDisplayConstants.STYLE_2);
editorTheme.setBorderStyle(new BorderStyle((int) borderRadiusSpinner.getValue(), lineComboBox.getSelectedLineStyle()));
editorTheme.setBorderStyle(new BorderStyle((int) borderRadiusSpinner.getValue(), lineComboBox.getSelectedLineStyle(), borderColorSelectBox.getSelectObject()));
editorTheme.setWidgetBackground(ColorUtils.createColorBackgroundWithAlpha(widgetBgColorSelectBox.getSelectObject(), widgetBgAlphaDragPane.updateBean()));
assignFontSizeStyle(editorTheme);
switchCard();
}

4
designer-form/src/main/java/com/fr/design/widgettheme/common/NormalButtonSettingPane.java

@ -27,6 +27,7 @@ public class NormalButtonSettingPane<T extends Widget> extends BaseStyleSettingP
super(Arrays.asList(
StyleSetting.BTN_BACKGROUND,
StyleSetting.LINE_TYPE,
StyleSetting.LINE_COLOR,
StyleSetting.BORDER_RADIUS
));
}
@ -118,8 +119,7 @@ public class NormalButtonSettingPane<T extends Widget> extends BaseStyleSettingP
protected void updateNormalButtonStyleBean(NormalButtonTheme normalButtonTheme) {
assignFontStyle(normalButtonTheme);
normalButtonTheme.setButtonBackgroundStyle(buttonStyleDefinedPane.update());
normalButtonTheme.setBorderStyle(new BorderStyle((int) borderRadiusSpinner.getValue(), lineComboBox.getSelectedLineStyle()));
normalButtonTheme.setBorderStyle(new BorderStyle((int) borderRadiusSpinner.getValue(), lineComboBox.getSelectedLineStyle(), borderColorSelectBox.getSelectObject()));
switchCard();
}

8
designer-form/src/main/java/com/fr/design/widgettheme/common/SelectEditorSettingPane.java

@ -18,10 +18,12 @@ public class SelectEditorSettingPane <T extends Widget> extends EditorSettingPan
public SelectEditorSettingPane() {
super(Arrays.asList(
StyleSetting.THEME_COLOR,
StyleSetting.SELECT_COLOR,
StyleSetting.STYLE_TYPE,
StyleSetting.WIDGET_BACKGROUND,
StyleSetting.LINE_TYPE,
StyleSetting.BORDER_RADIUS
StyleSetting.LINE_COLOR,
StyleSetting.BORDER_RADIUS,
StyleSetting.ICON_COLOR,
StyleSetting.SELECT_COLOR
));
}

9
designer-form/src/main/java/com/fr/design/widgettheme/common/TreeEditorSettingPane.java

@ -3,7 +3,6 @@ package com.fr.design.widgettheme.common;
import com.fr.design.widgettheme.StyleSetting;
import com.fr.design.widgettheme.BaseStyleSettingPane;
import com.fr.form.ui.TreeEditor;
import com.fr.widgettheme.theme.widget.theme.WidgetThemeDisplayConstants;
import com.fr.widgettheme.theme.widget.theme.cell.TreeTheme;
import org.jetbrains.annotations.Nullable;
@ -23,7 +22,7 @@ public class TreeEditorSettingPane<T extends TreeEditor> extends BaseStyleSettin
public TreeEditorSettingPane() {
super(Arrays.asList(
StyleSetting.THEME_COLOR,
StyleSetting.STYLE_TYPE
StyleSetting.WIDGET_BACKGROUND
));
}
@ -57,11 +56,6 @@ public class TreeEditorSettingPane<T extends TreeEditor> extends BaseStyleSettin
} else {
styleSettingHead.setSelectedIndex(1);
colorSelectBox.setSelectObject(treeTheme.getThemeColor());
if (treeTheme.getStyleType() == WidgetThemeDisplayConstants.STYLE_1) {
style1.setSelected(true);
} else {
style2.setSelected(true);
}
assignFontSizePane(treeTheme);
}
switchCard();
@ -89,7 +83,6 @@ public class TreeEditorSettingPane<T extends TreeEditor> extends BaseStyleSettin
protected void updateTreeStyleBean(TreeTheme treeTheme) {
treeTheme.setThemeColor(colorSelectBox.getSelectObject());
treeTheme.setStyleType(style1.isSelected() ? WidgetThemeDisplayConstants.STYLE_1 : WidgetThemeDisplayConstants.STYLE_2);
assignFontSizeStyle(treeTheme);
switchCard();
}

Loading…
Cancel
Save