Browse Source

Merge branch 'fbp/release' of ssh://code.fineres.com:7999/~renekton/design into fbp/release

fbp/release
renekton 2 months ago
parent
commit
49d7bc3b19
  1. 59
      designer-base/src/main/java/com/fine/theme/light/ui/FineCalendarPaneUI.java
  2. 140
      designer-base/src/main/java/com/fine/theme/light/ui/FineDayLabelUI.java
  3. 1
      designer-base/src/main/java/com/fine/theme/utils/FineUIStyle.java
  4. 10
      designer-base/src/main/java/com/fr/design/DesignerEnvManager.java
  5. 12
      designer-base/src/main/java/com/fr/design/data/datapane/connect/ConnectionListPane.java
  6. 12
      designer-base/src/main/java/com/fr/design/data/datapane/preview/PreviewTablePane.java
  7. 10
      designer-base/src/main/java/com/fr/design/gui/date/CalendarNumberField.java
  8. 495
      designer-base/src/main/java/com/fr/design/gui/date/UICalendarPanel.java
  9. 3
      designer-base/src/main/java/com/fr/design/gui/date/UIDatePicker.java
  10. 74
      designer-base/src/main/java/com/fr/design/gui/date/UIDayLabel.java
  11. 2
      designer-base/src/main/java/com/fr/design/gui/style/TextFormatPane.java
  12. 49
      designer-base/src/main/java/com/fr/design/hyperlink/popup/MobilePopupRegularPane.java
  13. 52
      designer-base/src/main/java/com/fr/design/hyperlink/popup/StyleSettingPane.java
  14. 7
      designer-base/src/main/java/com/fr/design/javascript/JSContentWithDescriptionPane.java
  15. 10
      designer-base/src/main/java/com/fr/design/javascript/JavaScriptImplPane.java
  16. 3
      designer-base/src/main/resources/com/fine/theme/icon/left_arrow.svg
  17. 3
      designer-base/src/main/resources/com/fine/theme/icon/right_arrow.svg
  18. 2
      designer-base/src/main/resources/com/fine/theme/light/ui/fine_light.icon.json
  19. 2
      designer-base/src/main/resources/com/fine/theme/light/ui/laf/FineLaf.properties
  20. 20
      designer-base/src/main/resources/com/fine/theme/light/ui/laf/FineLightLaf.properties
  21. 32
      designer-base/src/test/java/com/fr/design/gui/storybook/components/UICalendarPaneStoryBoard.java
  22. 2
      designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartHtmlLabelPane.java
  23. 6
      designer-chart/src/main/java/com/fr/van/chart/designer/style/VanChartPlotLegendPane.java
  24. 4
      designer-chart/src/main/java/com/fr/van/chart/designer/style/VanChartTitlePane.java
  25. 7
      designer-form/src/main/java/com/fr/design/mainframe/widget/ui/BasicSetVisiblePropertyPane.java
  26. 12
      designer-form/src/main/java/com/fr/design/parameter/RootDesignDefinePane.java
  27. 2
      designer-form/src/main/java/com/fr/design/widget/ui/designer/ButtonGroupDictPane.java
  28. 3
      designer-form/src/main/java/com/fr/design/widget/ui/designer/CheckBoxGroupDefinePane.java
  29. 4
      designer-form/src/main/java/com/fr/design/widget/ui/designer/ComboCheckBoxDefinePane.java
  30. 5
      designer-form/src/main/java/com/fr/design/widget/ui/designer/CustomWritableRepeatEditorPane.java
  31. 4
      designer-form/src/main/java/com/fr/design/widget/ui/designer/DirectWriteEditorDefinePane.java
  32. 2
      designer-form/src/main/java/com/fr/design/widget/ui/designer/FieldEditorDefinePane.java
  33. 4
      designer-form/src/main/java/com/fr/design/widget/ui/designer/LabelDefinePane.java
  34. 30
      designer-realize/src/main/java/com/fr/design/dscolumn/SpecifiedGroupAttrPane.java
  35. 6
      designer-realize/src/main/java/com/fr/design/mainframe/ElementCasePane.java
  36. 4
      designer-realize/src/main/java/com/fr/design/widget/ui/WritableRepeatEditorPane.java

59
designer-base/src/main/java/com/fine/theme/light/ui/FineCalendarPaneUI.java

@ -0,0 +1,59 @@
package com.fine.theme.light.ui;
import com.formdev.flatlaf.ui.FlatUIUtils;
import com.fr.design.gui.date.UICalendarPanel;
import javax.swing.JComponent;
import javax.swing.UIManager;
import javax.swing.border.LineBorder;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.PanelUI;
import java.awt.Color;
/**
* {@link UICalendarPanel} UI 样式
*
* @author lemon
* @since 12.0
* Created on 2024/09/22
*/
public class FineCalendarPaneUI extends PanelUI {
protected Color defaultBackground;
/**
* @param shared
* @since 2
*/
protected FineCalendarPaneUI() {
super();
}
/**
* 创建UI
*
* @param c 组件
* @return ComponentUI
*/
public static ComponentUI createUI(JComponent c) {
return FlatUIUtils.createSharedUI(FineCalendarPaneUI.class, FineCalendarPaneUI::new);
}
/**
* @param c the component where this UI delegate is being installed
*/
public void installUI(JComponent c) {
super.installUI(c);
defaultBackground = UIManager.getColor("Calendar.background");
//renderer this
c.setBackground(defaultBackground);
c.setBorder(new LineBorder(FlatUIUtils.getUIColor("defaultBorderColor", Color.BLACK)));
}
@Override
public void uninstallUI(JComponent c) {
super.uninstallUI(c);
}
}

140
designer-base/src/main/java/com/fine/theme/light/ui/FineDayLabelUI.java

@ -0,0 +1,140 @@
package com.fine.theme.light.ui;
import com.formdev.flatlaf.ui.FlatLabelUI;
import com.formdev.flatlaf.ui.FlatRoundBorder;
import com.formdev.flatlaf.ui.FlatUIUtils;
import com.fr.design.gui.date.UIDayLabel;
import javax.swing.JComponent;
import javax.swing.UIManager;
import javax.swing.plaf.ComponentUI;
import java.awt.Color;
import java.awt.Component;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
/**
* {@link UIDayLabel} UI 样式
*
* @author lemon
* @since 12.0
* Created on 2024/09/22
*/
public class FineDayLabelUI extends FlatLabelUI {
protected Color defaultBackground;
protected Color selectedBackground;
protected Color hoverBackground;
protected Color pressedBackground;
protected Color otherMonthForeground;
protected int arc;
/**
* @since 2
*/
protected FineDayLabelUI() {
super(false);
}
/**
* 创建UI
*
* @param c 组件
* @return ComponentUI
*/
public static ComponentUI createUI(JComponent c) {
return FlatUIUtils.createSharedUI(FineDayLabelUI.class, FineDayLabelUI::new);
}
/**
* @param c the component where this UI delegate is being installed
*/
public void installUI(JComponent c) {
super.installUI(c);
selectedBackground = UIManager.getColor("Calendar.day.selectedBackground");
hoverBackground = UIManager.getColor("Calendar.day.hoverBackground");
pressedBackground = UIManager.getColor("Calendar.day.pressedBackground");
defaultBackground = UIManager.getColor("Calendar.background");
otherMonthForeground = UIManager.getColor("Calendar.dayOtherMonth.foreground");
arc = UIManager.getInt("Calendar.day.arc");
}
@Override
public void uninstallUI(JComponent c) {
super.uninstallUI(c);
}
/**
* UICalendarPanel paint, 目前只对 {@link UIDayLabel} 样式自定义其余使用默认样式
*
* @param g the <code>Graphics</code> context in which to paint
* @param c the component being painted;
* this argument is often ignored,
* but might be used if the UI object is stateless
* and shared by multiple components
*/
public void paint(Graphics g, JComponent c) {
super.paint(g, c);
if (c instanceof UIDayLabel) {
paintDayLabel((UIDayLabel) c);
}
}
private void paintDayLabel(UIDayLabel label) {
if (!label.isSmallLabel()) {
label.setBackground(getBackgroundColor(label));
return;
}
label.setBorder(new DayLabelRoundedBorder());
if (!label.isCurrentMonth()) {
label.setForeground(otherMonthForeground);
}
}
private Color getBackgroundColor(UIDayLabel dayLabel) {
if (dayLabel.isSelected()) {
return selectedBackground;
}
if (dayLabel.isHovered()) {
return hoverBackground;
}
if (dayLabel.isPressed()) {
return pressedBackground;
}
return defaultBackground;
}
/**
* {@link UIDayLabel} border 样式
*/
private class DayLabelRoundedBorder extends FlatRoundBorder {
public DayLabelRoundedBorder() {
}
@Override
public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
Graphics2D g2 = (Graphics2D) g.create();
try {
FlatUIUtils.setRenderingHints(g2);
g2.setColor(getBackgroundColor((UIDayLabel) c));
g2.fillRoundRect(0, 0, width, height, arc, arc);
// 避免文字被背景色覆盖
UIDayLabel dayLabel = (UIDayLabel) c;
g2.setColor(dayLabel.getForeground());
FontMetrics metrics = g2.getFontMetrics(dayLabel.getFont());
int x1 = (width - metrics.stringWidth(dayLabel.getText())) / 2;
int y1 = ((height - metrics.getHeight()) / 2) + metrics.getAscent();
g2.drawString(dayLabel.getText(), x1, y1);
} finally {
g2.dispose();
}
}
}
}

1
designer-base/src/main/java/com/fine/theme/utils/FineUIStyle.java

@ -51,6 +51,7 @@ public interface FineUIStyle {
String DEFAULT_TABLE = "defaultTable"; String DEFAULT_TABLE = "defaultTable";
String WHITE_BUTTON = "whiteButton"; String WHITE_BUTTON = "whiteButton";
String ORIGINAL_BUTTON = "originalButton"; String ORIGINAL_BUTTON = "originalButton";
String GRAY_BUTTON = "grayButton";
String DETAIL_LABEL = "detailLabel"; String DETAIL_LABEL = "detailLabel";
String WIDGET_EVENT_LABEL = "widgetEventLabel"; String WIDGET_EVENT_LABEL = "widgetEventLabel";

10
designer-base/src/main/java/com/fr/design/DesignerEnvManager.java

@ -159,7 +159,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter, AsyncXmlReada
private boolean rowHeaderVisible = true; private boolean rowHeaderVisible = true;
private boolean verticalScrollBarVisible = true; private boolean verticalScrollBarVisible = true;
private boolean horizontalScrollBarVisible = true; private boolean horizontalScrollBarVisible = true;
private Color gridLineColor = Color.lightGray; // line color. private Color gridLineColor = new Color(230, 233, 239); // line color.
private Color paginationLineColor = Color.black; // line color of paper private Color paginationLineColor = Color.black; // line color of paper
private boolean supportCellEditorDef = false; private boolean supportCellEditorDef = false;
private boolean isDragPermited = false; private boolean isDragPermited = false;
@ -2167,10 +2167,10 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter, AsyncXmlReada
this.setUndoLimit(reader.getAttrAsInt("undoLimit", 5)); this.setUndoLimit(reader.getAttrAsInt("undoLimit", 5));
this.setStartWithEmptyFile(reader.getAttrAsBoolean("startWithEmptyFile", false)); this.setStartWithEmptyFile(reader.getAttrAsBoolean("startWithEmptyFile", false));
this.setDefaultStringToFormula(reader.getAttrAsBoolean("defaultStringToFormula", false)); this.setDefaultStringToFormula(reader.getAttrAsBoolean("defaultStringToFormula", false));
if ((tmpVal = reader.getAttrAsString("gridLineColor", null)) != null) { if ((tmpVal = reader.getAttrAsString("uiGridLineColor", null)) != null) {
this.setGridLineColor(new Color(Integer.parseInt(tmpVal))); this.setGridLineColor(new Color(Integer.parseInt(tmpVal)));
} }
if ((tmpVal = reader.getAttrAsString("paginationLineColor", null)) != null) { if ((tmpVal = reader.getAttrAsString("uiPaginationLineColor", null)) != null) {
this.setPaginationLineColor(new Color(Integer.parseInt(tmpVal))); this.setPaginationLineColor(new Color(Integer.parseInt(tmpVal)));
} }
} }
@ -2602,8 +2602,8 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter, AsyncXmlReada
.attr("horizontalScrollBarVisible", this.isHorizontalScrollBarVisible()) .attr("horizontalScrollBarVisible", this.isHorizontalScrollBarVisible())
.attr("supportCellEditorDef", this.isSupportCellEditorDef()) .attr("supportCellEditorDef", this.isSupportCellEditorDef())
.attr("isDragPermited", this.isDragPermited()) .attr("isDragPermited", this.isDragPermited())
.attr("gridLineColor", this.getGridLineColor().getRGB()) .attr("uiGridLineColor", this.getGridLineColor().getRGB())
.attr("paginationLineColor", this.getPaginationLineColor().getRGB()) .attr("uiPaginationLineColor", this.getPaginationLineColor().getRGB())
.attr("undoLimit", this.getUndoLimit()) .attr("undoLimit", this.getUndoLimit())
.attr("startWithEmptyFile", this.isStartWithEmptyFile()) .attr("startWithEmptyFile", this.isStartWithEmptyFile())
.end(); .end();

12
designer-base/src/main/java/com/fr/design/data/datapane/connect/ConnectionListPane.java

@ -13,6 +13,8 @@ import com.fr.design.ExtraDesignClassManager;
import com.fr.design.data.MapCompareUtils; import com.fr.design.data.MapCompareUtils;
import com.fr.design.data.datapane.preview.ConnectionInfoBeanHelper; import com.fr.design.data.datapane.preview.ConnectionInfoBeanHelper;
import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.BasicDialog;
import com.fr.design.dialog.FineJOptionPane;
import com.fr.design.editlock.EditLockUtils;
import com.fr.design.fun.ConnectionProvider; import com.fr.design.fun.ConnectionProvider;
import com.fr.design.gui.controlpane.JListControlPane; import com.fr.design.gui.controlpane.JListControlPane;
import com.fr.design.gui.controlpane.NameObjectCreator; import com.fr.design.gui.controlpane.NameObjectCreator;
@ -26,6 +28,7 @@ import com.fr.license.database.DBTypes;
import com.fr.license.database.DataBaseTypePointManager; import com.fr.license.database.DataBaseTypePointManager;
import com.fr.license.exception.DataBaseNotSupportedException; import com.fr.license.exception.DataBaseNotSupportedException;
import com.fr.log.FineLoggerFactory; import com.fr.log.FineLoggerFactory;
import com.fr.report.LockItem;
import com.fr.stable.ArrayUtils; import com.fr.stable.ArrayUtils;
import com.fr.stable.Nameable; import com.fr.stable.Nameable;
import com.fr.stable.StringUtils; import com.fr.stable.StringUtils;
@ -36,6 +39,7 @@ import com.fr.workspace.server.entity.connection.ConnectionBean;
import com.fr.workspace.server.repository.connection.ConnectionRepository; import com.fr.workspace.server.repository.connection.ConnectionRepository;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import javax.swing.JOptionPane;
import javax.swing.SwingWorker; import javax.swing.SwingWorker;
import java.awt.Window; import java.awt.Window;
import java.util.ArrayList; import java.util.ArrayList;
@ -366,8 +370,8 @@ public class ConnectionListPane extends JListControlPane implements ConnectionSh
} }
} }
public static void showDialog(Window parent) { public static void showDialog(Window parent) {
try {
final Map<String, Connection> connectionMap = ConnectionInfoBeanHelper.createConnectionMap(ConnectionRepository.getInstance().getAll()); final Map<String, Connection> connectionMap = ConnectionInfoBeanHelper.createConnectionMap(ConnectionRepository.getInstance().getAll());
final ConnectionManagerPane connectionManagerPane = new ConnectionManagerPane() { final ConnectionManagerPane connectionManagerPane = new ConnectionManagerPane() {
@Override @Override
@ -378,6 +382,12 @@ public class ConnectionListPane extends JListControlPane implements ConnectionSh
final BasicDialog connectionListDialog = connectionManagerPane.showLargeWindow(parent, null); final BasicDialog connectionListDialog = connectionManagerPane.showLargeWindow(parent, null);
connectionListDialog.addDialogActionListener(new ConnectionListDialogActionAdapter(connectionManagerPane, connectionListDialog, connectionMap)); connectionListDialog.addDialogActionListener(new ConnectionListDialogActionAdapter(connectionManagerPane, connectionListDialog, connectionMap));
connectionListDialog.setVisible(true); connectionListDialog.setVisible(true);
} catch (Exception e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
FineJOptionPane.showMessageDialog(null, Toolkit.i18nText("Fine-Design_Remote_Data_Error"),
Toolkit.i18nText("Fine-Design_Basic_Error"), JOptionPane.ERROR_MESSAGE);
EditLockUtils.unlock(LockItem.CONNECTION);
}
} }
@Override @Override

12
designer-base/src/main/java/com/fr/design/data/datapane/preview/PreviewTablePane.java

@ -706,11 +706,21 @@ public class PreviewTablePane extends BasicPane {
}; };
previewPane.setLayout(FRGUIPaneFactory.createBorderLayout()); previewPane.setLayout(FRGUIPaneFactory.createBorderLayout());
if (nameDataModels.length > 0) { if (nameDataModels.length > 0) {
previewPane.add(tabbedPane.withHeadRatio(0.8f).withTabLayout(buildTabLayout(nameDataModels)).build(), BorderLayout.CENTER); int[] tabLayout = buildTabLayout(nameDataModels);
float headRatio = buildHeadRatio(tabLayout);
previewPane.add(tabbedPane.withHeadRatio(headRatio).withTabLayout(tabLayout).build(), BorderLayout.CENTER);
} }
previewPane.showWindow(new JFrame()).setVisible(true); previewPane.showWindow(new JFrame()).setVisible(true);
} }
private static float buildHeadRatio(int[] tabLayout) {
float maxLen = 0.8f;
if (tabLayout.length == 1) {
return (float) tabLayout[0] / TAB_MAX_COUNT_WITH_LINE;
}
return maxLen;
}
private static int[] buildTabLayout(NameDataModel[] nameDataModels) { private static int[] buildTabLayout(NameDataModel[] nameDataModels) {
int length = nameDataModels.length; int length = nameDataModels.length;
int size = (length + TAB_MAX_COUNT_WITH_LINE - 1) / TAB_MAX_COUNT_WITH_LINE; int size = (length + TAB_MAX_COUNT_WITH_LINE - 1) / TAB_MAX_COUNT_WITH_LINE;

10
designer-base/src/main/java/com/fr/design/gui/date/CalendarNumberField.java

@ -12,6 +12,8 @@ import java.awt.Toolkit;
import java.awt.event.FocusAdapter; import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent; import java.awt.event.FocusEvent;
import static com.fine.theme.utils.FineUIScale.createScaleDimension;
/** /**
* Created with IntelliJ IDEA. * Created with IntelliJ IDEA.
* User: 小灰灰 * User: 小灰灰
@ -19,12 +21,13 @@ import java.awt.event.FocusEvent;
* Time: 上午11:06 * Time: 上午11:06
* To change this template use File | Settings | File Templates. * To change this template use File | Settings | File Templates.
*/ */
public class CalendarNumberField extends UINumberField { class CalendarNumberField extends UINumberField {
private static final int NUM_TEN = 10; private static final int NUM_TEN = 10;
public CalendarNumberField(double maxValue) { public CalendarNumberField(double maxValue) {
super(2, 0, 0, maxValue); super(2, 0, 0, maxValue);
this.setHorizontalAlignment(CENTER);
this.setBorderPainted(false); this.setBorderPainted(false);
addFocusListener(new FocusAdapter() { addFocusListener(new FocusAdapter() {
@Override @Override
@ -32,7 +35,6 @@ public class CalendarNumberField extends UINumberField {
setValue(getIntValue()); setValue(getIntValue());
} }
}); });
this.setFont(DesignUtils.getDefaultGUIFont());
} }
public void setValue(int value) { public void setValue(int value) {
@ -96,7 +98,7 @@ public class CalendarNumberField extends UINumberField {
} }
public Dimension getPreferredSize() { public Dimension getPreferredSize() {
return new Dimension(24, 11); return createScaleDimension(24, 24);
} }
public boolean shouldResponseChangeListener() { public boolean shouldResponseChangeListener() {
@ -104,7 +106,7 @@ public class CalendarNumberField extends UINumberField {
} }
public Insets getInsets() { public Insets getInsets() {
return new Insets(0, 6, 0, 4); return new Insets(0, 0, 0, 0);
} }
} }

495
designer-base/src/main/java/com/fr/design/gui/date/UICalendarPanel.java

@ -1,53 +1,41 @@
package com.fr.design.gui.date; package com.fr.design.gui.date;
import com.fanruan.product.ProductConstantsBase; import com.fanruan.product.ProductConstantsBase;
import com.formdev.flatlaf.ui.FlatUIUtils; import com.fine.theme.icon.LazyIcon;
import com.fine.theme.light.ui.FineRoundBorder;
import com.fine.theme.utils.FineUIStyle;
import com.fine.theme.utils.FineUIUtils;
import com.formdev.flatlaf.util.ScaledEmptyBorder; import com.formdev.flatlaf.util.ScaledEmptyBorder;
import com.fr.base.BaseUtils; import com.fr.design.border.FineBorderFactory;
import com.fr.base.background.GradientBackground;
import com.fr.design.carton.MonthlyCartonFile; import com.fr.design.carton.MonthlyCartonFile;
import com.fr.design.carton.SwitchForSwingChecker; import com.fr.design.carton.SwitchForSwingChecker;
import com.fr.design.constants.UIConstants;
import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.itextfield.UITextField;
import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.utils.DesignUtils; import com.fr.design.utils.DesignUtils;
import com.fr.design.utils.gui.GUIPaintUtils;
import com.fr.general.GeneralUtils; import com.fr.general.GeneralUtils;
import com.fr.stable.Constants;
import com.fr.stable.StableUtils; import com.fr.stable.StableUtils;
import com.fr.stable.StringUtils; import com.fr.stable.StringUtils;
import javax.swing.BorderFactory;
import javax.swing.Box; import javax.swing.Box;
import javax.swing.Icon; import javax.swing.Icon;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.SwingConstants; import javax.swing.SwingConstants;
import javax.swing.UIManager;
import javax.swing.border.LineBorder;
import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener; import javax.swing.event.ChangeListener;
import javax.swing.event.EventListenerList; import javax.swing.event.EventListenerList;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import java.awt.Color; import java.awt.Color;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font; import java.awt.Font;
import java.awt.Graphics; import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout; import java.awt.GridLayout;
import java.awt.Insets; import java.awt.Insets;
import java.awt.Rectangle;
import java.awt.Shape;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter; import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.awt.event.MouseListener; import java.awt.event.MouseListener;
import java.awt.geom.RoundRectangle2D;
import java.io.File; import java.io.File;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Calendar; import java.util.Calendar;
@ -55,25 +43,24 @@ import java.util.Date;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
import static com.fine.swing.ui.layout.Layouts.cell;
import static com.fine.swing.ui.layout.Layouts.fix;
import static com.fine.swing.ui.layout.Layouts.flex;
import static com.fine.swing.ui.layout.Layouts.row;
import static com.fine.theme.utils.FineUIScale.createScaleDimension;
import static com.fine.theme.utils.FineUIScale.scale; import static com.fine.theme.utils.FineUIScale.scale;
import static com.fine.theme.utils.FineUIStyle.STYLE_TEXT;
import static com.fine.theme.utils.FineUIStyle.setStyle;
public class UICalendarPanel extends JPanel { public class UICalendarPanel extends JPanel {
private static final Font FONT_UI = DesignUtils.getDefaultGUIFont().applySize(scale(12)); private static final String UI_CLASS_ID = "CalendarPaneUI";
private static final Font FONT_BLACK = new Font(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Black_Font"), Font.PLAIN, scale(12));
private static final int WEEKDAY_COUNT = 7; private static final int WEEKDAY_COUNT = 7;
private static final int TOTAL_DAYS_COUNT = 42; private static final int TOTAL_DAYS_COUNT = 42;
protected final Insets defaultInsets = new Insets(0, 6, 0, 6);
private static final int WIDTH = scale(31);
private static final int HEIGHT = scale(19);
private static final int START_X = scale(30);
private static final int START_Y = scale(19);
//卡顿日志所在地址 //卡顿日志所在地址
private static final String JOURNAL_FILE_PATH = StableUtils.pathJoin(ProductConstantsBase.getEnvHome(), "journal_log"); private static final String JOURNAL_FILE_PATH = StableUtils.pathJoin(ProductConstantsBase.getEnvHome(), "journal_log");
protected Color selectedBackground;
protected Color selectedForeground;
protected Color background;
protected Color foreground;
private Calendar calendar = null; private Calendar calendar = null;
private UILabel monthLabel = null; private UILabel monthLabel = null;
@ -83,9 +70,11 @@ public class UICalendarPanel extends JPanel {
private boolean isSupportDateChangeListener = false; private boolean isSupportDateChangeListener = false;
private java.util.Date selectedDate = null; private java.util.Date selectedDate = null;
private boolean isTimePicker; private boolean isTimePicker;
private final Color LABEL_FORGE_GROUND = new Color(0x6F6F6);
private MouseListener todayListener; private MouseListener todayListener;
private UIDayLabel lbToday; private UIDayLabel lbToday;
private static final int WEEK_LABEL_WIDTH = 24;
private static final int WEEK_LABEL_HEIGHT = 24;
private final int ICON_WIDTH = 12;
/** /**
* 一个int类型用于判断日历是否是专门用于处理卡顿的设计器反馈箱中的日历 * 一个int类型用于判断日历是否是专门用于处理卡顿的设计器反馈箱中的日历
* 0表示是 * 0表示是
@ -125,26 +114,12 @@ public class UICalendarPanel extends JPanel {
this.selectedDate = selectedDate; this.selectedDate = selectedDate;
this.isTimePicker = isTimerPicker; this.isTimePicker = isTimerPicker;
calendar = Calendar.getInstance(); calendar = Calendar.getInstance();
selectedBackground = UIManager.getColor(
"ComboBox.selectionBackground");
selectedForeground = UIManager.getColor(
"ComboBox.selectionForeground");
background = UIManager.getColor("ComboBox.background");
foreground = UIManager.getColor("ComboBox.foreground");
dayBttListener = createDayBttListener(); dayBttListener = createDayBttListener();
//renderer this
setPreferredSize(scale(new Dimension(218, 179)));
setBackground(FlatUIUtils.getUIColor("fill.normal", Color.WHITE));
setBorder(new LineBorder(FlatUIUtils.getUIColor("defaultBorderColor", Color.BLACK)));
setLayout(FRGUIPaneFactory.createBorderLayout()); setLayout(FRGUIPaneFactory.createBorderLayout());
add(BorderLayout.NORTH, createNorthPane()); add(BorderLayout.NORTH, createNorthPane());
add(BorderLayout.CENTER, createCenterPane()); add(BorderLayout.CENTER, createCenterPane());
if (isTimerPicker) { if (isTimerPicker) {
setPreferredSize(scale(new Dimension(218, 209)));
add(BorderLayout.SOUTH, createSouthPane()); add(BorderLayout.SOUTH, createSouthPane());
updateHMS(); updateHMS();
} }
@ -158,45 +133,23 @@ public class UICalendarPanel extends JPanel {
// << < yyyy/MM/dd > >> // << < yyyy/MM/dd > >>
private JPanel createNorthPane() { private JPanel createNorthPane() {
JPanel pNorth = FRGUIPaneFactory.createX_AXISBoxInnerContainer_S_Pane(); JPanel pNorth = FRGUIPaneFactory.createX_AXISBoxInnerContainer_S_Pane();
pNorth.setBackground(new Color(0xFFFFFF)); pNorth.setPreferredSize(new Dimension(pNorth.getPreferredSize().width, scale(40)));
pNorth.setPreferredSize(scale(new Dimension(1, 22))); pNorth.setOpaque(false);
pNorth.add(Box.createHorizontalStrut(5)); pNorth.add(Box.createHorizontalStrut(5));
pNorth.add(createSkipButton(Calendar.YEAR, -1, new Icon[]{ pNorth.add(createSkipButton(Calendar.YEAR, -1, new LazyIcon("drag_left")));
BaseUtils.readIcon("/com/fr/design/images/calender/year_reduce.png"),
BaseUtils.readIcon("/com/fr/design/images/calender/year_reduce_hover.png"),
BaseUtils.readIcon("/com/fr/design/images/calender/year_reduce_click.png")
}));
pNorth.add(Box.createHorizontalStrut(11)); pNorth.add(Box.createHorizontalStrut(11));
UILabel monthMinus = createSkipButton(Calendar.MONTH, -1, new Icon[]{ UIButton monthMinus = createSkipButton(Calendar.MONTH, -1, new LazyIcon("left_arrow"));
BaseUtils.readIcon("/com/fr/design/images/calender/month_reduce.png"),
BaseUtils.readIcon("/com/fr/design/images/calender/month_reduce_hover.png"),
BaseUtils.readIcon("/com/fr/design/images/calender/month_reduce_click.png")
});
monthMinus.setPreferredSize(scale(new Dimension(20, 20)));
pNorth.add(monthMinus); pNorth.add(monthMinus);
monthLabel = new UILabel("", UILabel.CENTER); monthLabel = new UILabel("", UILabel.CENTER);
monthLabel.setBackground(new Color(0xFFFFFF));
monthLabel.setForeground(new Color(0x000000));
monthLabel.setFont(FONT_UI);
pNorth.add(Box.createHorizontalGlue()); pNorth.add(Box.createHorizontalGlue());
pNorth.add(monthLabel); pNorth.add(monthLabel);
pNorth.add(Box.createHorizontalGlue()); pNorth.add(Box.createHorizontalGlue());
UILabel monthPlus = createSkipButton(Calendar.MONTH, 1, new Icon[]{ UIButton monthPlus = createSkipButton(Calendar.MONTH, 1, new LazyIcon("right_arrow"));
BaseUtils.readIcon("/com/fr/design/images/calender/month_add.png"),
BaseUtils.readIcon("/com/fr/design/images/calender/month_add_hover.png"),
BaseUtils.readIcon("/com/fr/design/images/calender/month_add_click.png")
});
monthPlus.setPreferredSize(scale(new Dimension(20, 20)));
monthPlus.setHorizontalAlignment(SwingConstants.RIGHT); monthPlus.setHorizontalAlignment(SwingConstants.RIGHT);
pNorth.add(monthPlus); pNorth.add(monthPlus);
pNorth.add(Box.createHorizontalStrut(11)); pNorth.add(Box.createHorizontalStrut(11));
pNorth.add(createSkipButton(Calendar.YEAR, 1, new Icon[]{ pNorth.add(createSkipButton(Calendar.YEAR, 1, new LazyIcon("drag_right")));
BaseUtils.readIcon("/com/fr/design/images/calender/year_add.png"),
BaseUtils.readIcon("/com/fr/design/images/calender/year_add_hover.png"),
BaseUtils.readIcon("/com/fr/design/images/calender/year_add_click.png")
}));
pNorth.add(Box.createHorizontalStrut(5)); pNorth.add(Box.createHorizontalStrut(5));
return pNorth; return pNorth;
@ -205,10 +158,8 @@ public class UICalendarPanel extends JPanel {
private JPanel createCenterPane() { private JPanel createCenterPane() {
//星期日 星期一 星期二 星期三 星期四 星期五 星期六 //星期日 星期一 星期二 星期三 星期四 星期五 星期六
JPanel pWeeks = new JPanel(new GridLayout(1, 7, 1, 0)); JPanel pWeeks = new JPanel(new GridLayout(1, 7, 9, 0));
pWeeks.setPreferredSize(scale(new Dimension(216, 22))); pWeeks.setOpaque(false);
pWeeks.setBackground(new Color(0xFFFFFF));
pWeeks.setOpaque(true);
String[] strWeeks = new String[]{StringUtils.EMPTY, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Sun"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Mon"), String[] strWeeks = new String[]{StringUtils.EMPTY, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Sun"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Mon"),
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Tue"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Wed"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Thu"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Tue"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Wed"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Thu"),
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Fri"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Sat") com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Fri"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Sat")
@ -216,61 +167,47 @@ public class UICalendarPanel extends JPanel {
for (int i = 1; i <= WEEKDAY_COUNT; i++) { for (int i = 1; i <= WEEKDAY_COUNT; i++) {
UILabel label = new UILabel(); UILabel label = new UILabel();
label.setHorizontalAlignment(UILabel.CENTER); label.setHorizontalAlignment(UILabel.CENTER);
label.setForeground(new Color(0x4D4C4C));
label.setFont(FONT_BLACK);
label.setText(strWeeks[i]); label.setText(strWeeks[i]);
label.setPreferredSize(createScaleDimension(WEEK_LABEL_WIDTH, WEEK_LABEL_HEIGHT));
pWeeks.add(label); pWeeks.add(label);
} }
pWeeks.setBorder(new ScaledEmptyBorder(3, 9, 3, 9));
//中间放日期的面板 //中间放日期的面板
days = new DayPane(); days = new DayPane();
days.setOpaque(true); days.setOpaque(false);
days.setPreferredSize(scale(new Dimension(216, 115))); days.setPreferredSize(new Dimension(pWeeks.getPreferredSize().width, scale(165)));
JPanel pCenter = FRGUIPaneFactory.createBorderLayout_S_Pane(); JPanel pCenter = FRGUIPaneFactory.createBorderLayout_S_Pane();
pCenter.setOpaque(true); pCenter.setOpaque(false);
pCenter.add(pWeeks, BorderLayout.NORTH); pCenter.add(pWeeks, BorderLayout.NORTH);
pCenter.add(days, BorderLayout.CENTER); pCenter.add(days, BorderLayout.CENTER);
//显示今天的日期,直接单击图标跳到今天 //显示今天的日期,直接单击图标跳到今天
GradientPane pToday = new GradientPane(new GradientBackground(new Color(0x097BDA), new Color(0x40A3EE), GradientBackground.TOP2BOTTOM), false);
pToday.setPreferredSize(scale(new Dimension(216, 18)));
pToday.setLayout(new BorderLayout());
lbToday = new UIDayLabel(new Date(), false); lbToday = new UIDayLabel(new Date(), false);
lbToday.setForeground(new Color(0x000000)); lbToday.setPreferredSize(new Dimension(lbToday.getPreferredSize().width, scale(30)));
todayListener = createTodayListener(pToday, lbToday); lbToday.setBorder(FineBorderFactory.createDefaultTopBorder());
todayListener = createTodayListener(lbToday);
lbToday.addMouseListener(todayListener); lbToday.addMouseListener(todayListener);
pToday.setBackground(new Color(0xF0F0F0)); pCenter.add(lbToday, BorderLayout.SOUTH);
pToday.add(lbToday, BorderLayout.CENTER);
pCenter.add(pToday, BorderLayout.SOUTH);
return pCenter; return pCenter;
} }
private JPanel createSouthPane() { private JPanel createSouthPane() {
JPanel sPane = new JPanel(); JPanel sPane = new JPanel();
sPane.setPreferredSize(scale(new Dimension(216, 30))); sPane.setOpaque(false);
sPane.setBackground(Color.WHITE); sPane.setLayout(new BorderLayout());
sPane.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 6));
UILabel timeLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Time") + ":"); UILabel timeLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Time") + ":");
timeLabel.setBorder(new ScaledEmptyBorder(0, 9, 0, 5));
timeLabel.setFont(FONT_UI);
sPane.add(timeLabel);
hms = new HMSPane(); hms = new HMSPane();
sPane.add(hms);
UILabel gap = new UILabel();
gap.setPreferredSize(scale(new Dimension(26, 1)));
sPane.add(gap);
UIButton okButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_OK")) { UIButton okButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_OK")) {
public Dimension getPreferredSize() { public Dimension getPreferredSize() {
return scale(new Dimension(32, 18)); return createScaleDimension(48, 24);
} }
public Insets getInsets() { public Insets getInsets() {
return new Insets(0, 0, 0, 0); return new Insets(0, 0, 0, 0);
} }
}; };
okButton.setFont(FONT_UI);
okButton.setVerticalAlignment(SwingConstants.CENTER); okButton.setVerticalAlignment(SwingConstants.CENTER);
okButton.addActionListener(new ActionListener() { okButton.addActionListener(new ActionListener() {
@ -282,18 +219,11 @@ public class UICalendarPanel extends JPanel {
} }
}); });
sPane.add(okButton); sPane.add(row(cell(timeLabel).weight(36), cell(hms).weight(180), flex(), cell(okButton).weight(48)).getComponent());
sPane.setBorder(new ScaledEmptyBorder(10, 12, 10, 12));
return sPane; return sPane;
} }
public void resetHMSPaneSelectedNumberField() {
if (this.hms != null) {
this.hms.selectedNumberField = this.hms.hField;
this.hms.nextButton.requestFocus();
}
}
/** /**
* 创建上一月,下一月,上一年,下一年"按钮" * 创建上一月,下一月,上一年,下一年"按钮"
* *
@ -301,37 +231,20 @@ public class UICalendarPanel extends JPanel {
* @param amount int * @param amount int
* @return UILabel * @return UILabel
*/ */
protected UILabel createSkipButton(final int field, final int amount, final Icon[] icons) { protected UIButton createSkipButton(final int field, final int amount, final Icon icon) {
if (icons.length != 3) { UIButton button = new UIButton();
return new UILabel(); FineUIStyle.setStyle(button, FineUIStyle.ORIGINAL_BUTTON);
} button.setIcon(icon);
UILabel label = new UILabel(); button.setRequestFocusEnabled(false);
label.setIcon(icons[0]); button.addMouseListener(createSkipListener(field, amount));
label.setRequestFocusEnabled(false); return button;
label.addMouseListener(createSkipListener(label, field, amount, icons));
return label;
} }
protected MouseListener createSkipListener(final UILabel label, final int field, protected MouseListener createSkipListener(final int field, final int amount) {
final int amount, final Icon[] icons) {
return new MouseAdapter() { return new MouseAdapter() {
public void mouseReleased(MouseEvent e) { public void mouseReleased(MouseEvent e) {
label.setIcon(icons[1]);
calendar.add(field, amount); calendar.add(field, amount);
updateDays(); updateDays();
resetHMSPaneSelectedNumberField();
}
public void mouseEntered(MouseEvent e) {
label.setIcon(icons[1]);
}
public void mouseExited(MouseEvent e) {
label.setIcon(icons[0]);
}
public void mousePressed(MouseEvent e) {
label.setIcon(icons[2]);
} }
}; };
} }
@ -383,10 +296,6 @@ public class UICalendarPanel extends JPanel {
} }
} else { } else {
label.addMouseListener(dayBttListener); label.addMouseListener(dayBttListener);
label.setEnabled(isCurrentMonth);
}
if (!isCurrentMonth) {
label.setForeground(LABEL_FORGE_GROUND);
} }
} }
/** /**
@ -432,30 +341,23 @@ public class UICalendarPanel extends JPanel {
} }
for (int i = 0; i < TOTAL_DAYS_COUNT; i++) { for (int i = 0; i < TOTAL_DAYS_COUNT; i++) {
setupCalendar.add(Calendar.DATE, 1); setupCalendar.add(Calendar.DATE, 1);
GradientPane gp = new GradientPane(new GradientBackground(new Color(0xFEFEFE), new Color(0xF3F2F3), GradientBackground.TOP2BOTTOM), true);
gp.setIndex(i);
gp.setLayout(new BorderLayout());
gp.setBorder(null);
UIDayLabel label = new UIDayLabel(setupCalendar.getTime()); UIDayLabel label = new UIDayLabel(setupCalendar.getTime());
label.setHorizontalAlignment(SwingConstants.RIGHT); label.setIndex(i);
label.setBorder(new ScaledEmptyBorder(0, 0, 0, 9));
if ("1".equals(label.getText())) { if ("1".equals(label.getText())) {
isCurrentMonth = !isCurrentMonth; isCurrentMonth = !isCurrentMonth;
} }
setUIDayLabel(label, isCurrentMonth, setupCalendar, logSet); setUIDayLabel(label, isCurrentMonth, setupCalendar, logSet);
label.setCurrentMonth(isCurrentMonth);
days.add(label);
//当前选择的日期 //当前选择的日期
if (setupCalendar.get(Calendar.DAY_OF_MONTH) == selectedCalendar.get(Calendar.DAY_OF_MONTH) && isCurrentMonth) { if (setupCalendar.get(Calendar.DAY_OF_MONTH) == selectedCalendar.get(Calendar.DAY_OF_MONTH) && isCurrentMonth) {
gp.setGradientBackground(new GradientBackground(new Color(0x097BD9), new Color(0x41A3EE), GradientBackground.TOP2BOTTOM));
gp.add(label, BorderLayout.CENTER);
days.add(gp);
days.setSelectedIndex(i); days.setSelectedIndex(i);
label.setSelected(true);
this.selectedDate = label.getDate(); this.selectedDate = label.getDate();
this.calendar.setTime(this.selectedDate); this.calendar.setTime(this.selectedDate);
} else {
gp.add(label, BorderLayout.CENTER);
days.add(gp);
} }
} }
days.setBorder(new ScaledEmptyBorder(3, 9, 3, 9));
days.validate(); days.validate();
} }
@ -466,33 +368,11 @@ public class UICalendarPanel extends JPanel {
} }
} }
protected MouseListener createTodayListener(final GradientPane jp, final UIDayLabel label) { protected MouseListener createTodayListener(final UIDayLabel label) {
return new MouseAdapter() { return new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
jp.setBorder(BorderFactory.createLineBorder(new Color(0x3868AA)));
jp.setPaintGradientBackground(true);
jp.repaint();
label.setForeground(new Color(0xFFFFFF));
}
@Override
public void mouseExited(MouseEvent e) {
jp.setBackground(new Color(0xF0F0F0));
}
@Override
public void mouseEntered(MouseEvent e) {
jp.setBackground(new Color(0xC8DDEE));
}
@Override @Override
public void mouseReleased(MouseEvent e) { public void mouseReleased(MouseEvent e) {
jp.setBackground(new Color(0xF0F0F0));
label.setForeground(new Color(0x000000));
jp.setBorder(null);
jp.setPaintGradientBackground(false);
jp.repaint();
if (isTimePicker) { if (isTimePicker) {
UICalendarPanel.this.setSelectedDate(label.getDate()); UICalendarPanel.this.setSelectedDate(label.getDate());
updateDays(); updateDays();
@ -501,7 +381,6 @@ public class UICalendarPanel extends JPanel {
UICalendarPanel.this.setSelectedDate(label.getDate()); UICalendarPanel.this.setSelectedDate(label.getDate());
UICalendarPanel.this.isSupportDateChangeListener = false; UICalendarPanel.this.isSupportDateChangeListener = false;
} }
resetHMSPaneSelectedNumberField();
} }
}; };
} }
@ -511,12 +390,11 @@ public class UICalendarPanel extends JPanel {
public void mousePressed(MouseEvent e) { public void mousePressed(MouseEvent e) {
if (isEnabled()) { if (isEnabled()) {
UIDayLabel com = (UIDayLabel) e.getComponent(); UIDayLabel com = (UIDayLabel) e.getComponent();
GradientPane gp = (GradientPane) com.getParent(); days.setSelectedIndex(com.getIndex());
if (days.selectedIndex != -1) { com.setHovered(false);
((GradientPane) days.getComponent(days.selectedIndex)).setGradientBackground(new GradientBackground(new Color(0xFEFEFE), new Color(0xF3F2F3), GradientBackground.TOP2BOTTOM)); com.setPressed(true);
} com.getParent().validate();
gp.setGradientBackground(new GradientBackground(new Color(0x097BD9), new Color(0x41A3EE), GradientBackground.TOP2BOTTOM)); com.getParent().repaint();
days.setSelectedIndex(gp.getIndex());
} }
} }
@ -530,31 +408,30 @@ public class UICalendarPanel extends JPanel {
UICalendarPanel.this.setSelectedDate(com.getDate()); UICalendarPanel.this.setSelectedDate(com.getDate());
UICalendarPanel.this.isSupportDateChangeListener = false; UICalendarPanel.this.isSupportDateChangeListener = false;
} }
resetHMSPaneSelectedNumberField();
} }
public void mouseEntered(MouseEvent e) { public void mouseEntered(MouseEvent e) {
if (isEnabled()) { if (isEnabled()) {
JComponent com = (JComponent) e.getComponent(); UIDayLabel com = (UIDayLabel) e.getComponent();
GradientPane gp = (GradientPane) com.getParent(); com.setHovered(true);
if (gp.getIndex() == days.selectedIndex) { if (com.getIndex() == days.selectedIndex) {
return; return;
} }
gp.setGradientBackground(new GradientBackground(new Color(0xFFFFFF), new Color(0xEAF4FC), GradientBackground.TOP2BOTTOM)); days.setFloatIndex(com.getIndex());
days.setFloatIndex(gp.getIndex()); com.getParent().validate();
com.getParent().repaint();
} }
} }
public void mouseExited(MouseEvent e) { public void mouseExited(MouseEvent e) {
if (isEnabled()) { if (isEnabled()) {
JComponent com = (JComponent) e.getComponent(); UIDayLabel com = (UIDayLabel) e.getComponent();
GradientPane gp = (GradientPane) com.getParent(); com.setHovered(false);
if (gp.getIndex() != days.selectedIndex) { com.setPressed(false);
gp.setGradientBackground(new GradientBackground(new Color(0xFEFEFE), new Color(0xF3F2F3), GradientBackground.TOP2BOTTOM));
}
days.setFloatIndex(-1); days.setFloatIndex(-1);
days.repaint(); com.getParent().validate();
com.getParent().repaint();
} }
} }
}; };
@ -596,127 +473,34 @@ public class UICalendarPanel extends JPanel {
return selectedDate; return selectedDate;
} }
private class GradientPane extends JPanel {
private int index;
private boolean isGradientBackground;
private GradientBackground gradientBackground;
public GradientPane() {
}
public GradientPane(GradientBackground gradientBackground, boolean isGradientBackground) {
super();
this.gradientBackground = gradientBackground;
this.isGradientBackground = isGradientBackground;
}
public void paint(Graphics g) {
super.paint(g);
if (isGradientBackground && gradientBackground != null) {
gradientBackground.paint(g, new Rectangle(this.getWidth(), this.getHeight()));
}
paintChildren(g);
}
public void setPaintGradientBackground(boolean flag) {
this.isGradientBackground = flag;
}
public void setGradientBackground(GradientBackground gradientBackground) {
this.gradientBackground = gradientBackground;
}
public void setIndex(int i) {
this.index = i;
}
public int getIndex() {
return this.index;
}
public void setForeground(Color c) {
super.setForeground(c);
if (getComponentCount() > 0) {
getComponent(0).setForeground(c);
}
}
}
private class DayPane extends JPanel { private class DayPane extends JPanel {
private Color floatColor = new Color(0xC5E2F9); private Color floatColor = new Color(0xC5E2F9);
private Color selectedColor = new Color(0x41A3EE);
private int floateIndex; private int floateIndex;
private int selectedIndex; private int selectedIndex;
public DayPane() { public DayPane() {
floateIndex = -1; floateIndex = -1;
selectedIndex = -1; selectedIndex = -1;
this.setLayout(new GridLayout(6, 7, 1, 1)); this.setLayout(new GridLayout(6, 7, scale(9), scale(3)));
this.setBackground(new Color(0xFFFFFF));
this.setBorder(BorderFactory.createMatteBorder(1, 0, 1, 0, new Color(0xDADADA)));
} }
public void paint(Graphics g) { public void paint(Graphics g) {
super.paint(g); super.paint(g);
int width = UICalendarPanel.WIDTH;
int height = UICalendarPanel.HEIGHT;
Color oldColor = g.getColor(); Color oldColor = g.getColor();
g.setColor(new Color(0xDADADA));
int start_x = UICalendarPanel.START_X;
int start_y = UICalendarPanel.START_Y;
for (int i = 0; i < 6; i++) {
g.drawLine(start_x, 0, start_x, getHeight());
start_x += width;
}
for (int i = 0; i < 5; i++) {
g.drawLine(0, start_y, getWidth(), start_y);
start_y += height;
}
if (floateIndex > -1) { if (floateIndex > -1) {
g.setColor(floatColor); g.setColor(floatColor);
paintChindPane(g, floateIndex);
}
if (selectedIndex > -1) {
g.setColor(selectedColor);
paintChindPane(g, selectedIndex);
} }
g.setColor(oldColor); g.setColor(oldColor);
} }
private void paintChindPane(Graphics g, int index) {
if (index % 7 == 0) {
int y1 = index / 7 * UICalendarPanel.HEIGHT;
g.drawLine(0, y1, UICalendarPanel.START_X, y1);
g.drawLine(0, y1 + UICalendarPanel.HEIGHT, UICalendarPanel.START_X, y1 + UICalendarPanel.HEIGHT);
g.drawLine(UICalendarPanel.START_X, y1, UICalendarPanel.START_X, y1 + UICalendarPanel.HEIGHT);
} else if (index % 7 == 6) {
int y1 = index / 7 * UICalendarPanel.HEIGHT;
g.drawLine(scale(185), y1, scale(216), y1);
g.drawLine(scale(185), y1 + UICalendarPanel.HEIGHT, scale(216), y1 + UICalendarPanel.HEIGHT);
g.drawLine(scale(185), y1, scale(185), y1 + UICalendarPanel.HEIGHT);
} else {
int x1 = index % 7 * UICalendarPanel.WIDTH - 1;
int y1 = index / 7 * UICalendarPanel.HEIGHT;
g.drawRect(x1, y1, UICalendarPanel.WIDTH, UICalendarPanel.HEIGHT);
}
}
public void setFloatIndex(int index) { public void setFloatIndex(int index) {
this.floateIndex = index; this.floateIndex = index;
repaint(); repaint();
} }
public void setSelectedIndex(int index) { public void setSelectedIndex(int index) {
if (this.selectedIndex != -1 && this.selectedIndex < getComponentCount()) {
this.getComponent(selectedIndex).setForeground(Color.black);
}
if (index != -1 && index < getComponentCount()) {
this.getComponent(index).setForeground(Color.WHITE);
}
this.selectedIndex = index; this.selectedIndex = index;
repaint(); repaint();
} }
@ -725,17 +509,13 @@ public class UICalendarPanel extends JPanel {
private class HMSPane extends JPanel { private class HMSPane extends JPanel {
private boolean isRolOver; private boolean isRolOver;
private UIButton preButton;
private UIButton nextButton;
private CalendarNumberField hField; private CalendarNumberField hField;
private CalendarNumberField mField; private CalendarNumberField mField;
private CalendarNumberField sField; private CalendarNumberField sField;
private CalendarNumberField selectedNumberField;
public HMSPane() { public HMSPane() {
this.setPreferredSize(scale(new Dimension(101, 18)));
this.setLayout(new BorderLayout(0, 0)); this.setLayout(new BorderLayout(0, 0));
this.setBackground(null); this.setOpaque(false);
initComponents(); initComponents();
initListener(); initListener();
@ -757,49 +537,68 @@ public class UICalendarPanel extends JPanel {
} }
private void initComponents() { private void initComponents() {
JPanel jp = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 2));
jp.setBackground(null);
jp.setBorder(null);
hField = new CalendarNumberField(23); hField = new CalendarNumberField(23);
mField = new CalendarNumberField(59); mField = new CalendarNumberField(59);
sField = new CalendarNumberField(59); sField = new CalendarNumberField(59);
selectedNumberField = hField; this.add(row(cell(combineFieldArrowPane(hField)), cell(createGapLabel()), cell(combineFieldArrowPane(mField)),
cell(createGapLabel()), cell(combineFieldArrowPane(sField)), fix(4)).getComponent(), BorderLayout.CENTER);
}
private JPanel combineFieldArrowPane(CalendarNumberField field) {
JPanel panel = new JPanel(new BorderLayout());
panel.setOpaque(false);
Insets insets = FineUIUtils.getUIInsets("InputTextField.borderInsets", defaultInsets);
field.setBorder(new ScaledEmptyBorder(insets.top, insets.left, insets.bottom, insets.right));
UIButton preButton = createArrowButton(new LazyIcon("up_arrow", ICON_WIDTH));
UIButton nextButton = createArrowButton(new LazyIcon("down_arrow", ICON_WIDTH));
JPanel arrowPane = createArrowPane(preButton, nextButton);
panel.add(field, BorderLayout.CENTER);
panel.add(arrowPane, BorderLayout.EAST);
panel.setBorder(new FineRoundBorder());
jp.add(hField); nextButton.addActionListener(new ActionListener() {
jp.add(createGapLabel()); @Override
jp.add(mField); public void actionPerformed(ActionEvent e) {
jp.add(createGapLabel()); field.setValue(field.getIntValue() - 1);
jp.add(sField); field.requestFocus();
field.selectAll();
this.add(jp, BorderLayout.CENTER);
preButton = new UIButton(UIConstants.ARROW_UP_ICON) {
public boolean shouldResponseChangeListener() {
return false;
} }
}; });
preButton.setRoundBorder(true, Constants.LEFT); preButton.addActionListener(new ActionListener() {
nextButton = new UIButton(UIConstants.ARROW_DOWN_ICON) { @Override
public boolean shouldResponseChangeListener() { public void actionPerformed(ActionEvent e) {
return false; field.setValue(field.getIntValue() + 1);
field.requestFocus();
field.selectAll();
} }
}; });
nextButton.setRoundBorder(true, Constants.LEFT); return panel;
}
private JPanel createArrowPane(UIButton preButton, UIButton nextButton) {
JPanel arrowPane = new JPanel(); JPanel arrowPane = new JPanel();
arrowPane.setPreferredSize(scale(new Dimension(11, 18))); arrowPane.setPreferredSize(createScaleDimension(12, 24));
arrowPane.setLayout(new GridLayout(2, 1)); arrowPane.setLayout(new GridLayout(2, 1));
arrowPane.add(preButton); arrowPane.add(preButton);
arrowPane.add(nextButton); arrowPane.add(nextButton);
this.add(arrowPane, BorderLayout.EAST); arrowPane.setOpaque(false);
return arrowPane;
} }
private void initListener() { private UIButton createArrowButton(Icon icon) {
MouseAdapter backgroundAdapter = new MouseAdapter() { UIButton arrowButton = new UIButton(icon) {
@Override public boolean shouldResponseChangeListener() {
public void mousePressed(MouseEvent e) { return false;
HMSPane.this.selectedNumberField = (CalendarNumberField) e.getComponent();
} }
};
setStyle(arrowButton, STYLE_TEXT);
return arrowButton;
}
private void initListener() {
MouseAdapter backgroundAdapter = new MouseAdapter() {
@Override @Override
public void mouseExited(MouseEvent e) { public void mouseExited(MouseEvent e) {
isRolOver = false; isRolOver = false;
@ -815,32 +614,10 @@ public class UICalendarPanel extends JPanel {
hField.addMouseListener(backgroundAdapter); hField.addMouseListener(backgroundAdapter);
mField.addMouseListener(backgroundAdapter); mField.addMouseListener(backgroundAdapter);
sField.addMouseListener(backgroundAdapter); sField.addMouseListener(backgroundAdapter);
nextButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
HMSPane.this.selectedNumberField.setValue(HMSPane.this.selectedNumberField.getIntValue() - 1);
HMSPane.this.selectedNumberField.requestFocus();
HMSPane.this.selectedNumberField.selectAll();
}
});
preButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
HMSPane.this.selectedNumberField.setValue(HMSPane.this.selectedNumberField.getIntValue() + 1);
HMSPane.this.selectedNumberField.requestFocus();
HMSPane.this.selectedNumberField.selectAll();
}
});
} }
private UILabel createGapLabel() { private JPanel createGapLabel() {
UILabel uiLabel = new UILabel(":"); return row(fix(4), cell(new UILabel(":")), fix(4)).getComponent();
uiLabel.setHorizontalAlignment(SwingConstants.CENTER);
uiLabel.setBackground(null);
uiLabel.setBorder(null);
uiLabel.setPreferredSize(scale(new Dimension(6, 10)));
return uiLabel;
} }
public Insets getInsets() { public Insets getInsets() {
@ -849,17 +626,6 @@ public class UICalendarPanel extends JPanel {
public void paint(Graphics g) { public void paint(Graphics g) {
super.paint(g); super.paint(g);
paintBorder(g);
}
public void paintBorder(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
if (isRolOver) {
Shape shape = new RoundRectangle2D.Double(1, 1, 86, 15, UIConstants.ARC, UIConstants.ARC);
GUIPaintUtils.paintBorderShadow(g2d, 3, shape, UIConstants.HOVER_BLUE, Color.WHITE);
} else {
GUIPaintUtils.drawBorder(g2d, 0, 0, 101, 18, true, 3);
}
} }
public void populate(Calendar calendar) { public void populate(Calendar calendar) {
@ -875,21 +641,8 @@ public class UICalendarPanel extends JPanel {
} }
} }
public static void main(String[] args) { @Override
JFrame frame = new JFrame(); public String getUIClassID() {
UICalendarPanel calendarPanel = new UICalendarPanel(); return UI_CLASS_ID;
final UITextField field = new UITextField();
field.setPreferredSize(new Dimension(120, 25));
calendarPanel.addDateChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
Date selectedDate = (Date) e.getSource();
SimpleDateFormat f = new SimpleDateFormat("yyyy/MM/dd");
field.setText(f.format(selectedDate));
}
});
frame.getContentPane().setLayout(FRGUIPaneFactory.createCenterFlowLayout());
frame.getContentPane().add(field);
frame.getContentPane().add(calendarPanel);
frame.setVisible(true);
} }
} }

3
designer-base/src/main/java/com/fr/design/gui/date/UIDatePicker.java

@ -235,9 +235,6 @@ public class UIDatePicker extends UIComboBox implements Serializable {
if (willHide || UIDatePicker.this.isEnabled() == false) { if (willHide || UIDatePicker.this.isEnabled() == false) {
return; return;
} }
if (calendarPanel != null) {
calendarPanel.resetHMSPaneSelectedNumberField();
}
super.show(); super.show();
} }

74
designer-base/src/main/java/com/fr/design/gui/date/UIDayLabel.java

@ -1,18 +1,48 @@
package com.fr.design.gui.date; package com.fr.design.gui.date;
import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilable.UILabel;
import com.fr.design.utils.DesignUtils;
import java.awt.Dimension;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import static com.fine.theme.utils.FineUIScale.scale;
/**
* 日期控件day label
*
* @author lemon
* @since 12.0
* Created on 2024/09/22
*/
public class UIDayLabel extends UILabel { public class UIDayLabel extends UILabel {
private static final String UI_CLASS_ID = "DayLabelUI";
private Date date = null; private Date date = null;
private int index;
private boolean pressed = false;
private boolean hovered = false;
private boolean selected = false;
private boolean currentMonth = false;
private boolean smallLabel = false;
public boolean isHovered() {
return hovered;
}
public boolean isPressed() {
return pressed;
}
public boolean isSelected() {
return selected;
}
public boolean isCurrentMonth() {
return currentMonth;
}
public boolean isSmallLabel() {
return smallLabel;
}
/** /**
* 日期格式TODAY/TIP用 * 日期格式TODAY/TIP用
@ -28,11 +58,11 @@ public class UIDayLabel extends UILabel {
} }
public UIDayLabel(Date date, boolean isSmallLabel) { public UIDayLabel(Date date, boolean isSmallLabel) {
setOpaque(false);
setHorizontalAlignment(UILabel.CENTER); setHorizontalAlignment(UILabel.CENTER);
setFont(DesignUtils.getDefaultGUIFont().applySize(scale(12)));
this.date = date; this.date = date;
setPreferredSize(scale(new Dimension(30, 18))); this.smallLabel = isSmallLabel;
if (isSmallLabel) { if (smallLabel) {
setText(dayFormat.format(date)); setText(dayFormat.format(date));
} else { } else {
setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Today") + ":" + dateFormat.format(new Date())); setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Today") + ":" + dateFormat.format(new Date()));
@ -44,8 +74,38 @@ public class UIDayLabel extends UILabel {
return date; return date;
} }
public void setHovered(boolean hovered) {
this.hovered = hovered;
}
public void setPressed(boolean pressed) {
this.pressed = pressed;
}
public void setSelected(boolean selected) {
this.selected = selected;
}
public void setCurrentMonth(boolean currentMonth) {
this.currentMonth = currentMonth;
}
public void setDate(Date date) { public void setDate(Date date) {
this.date = date; this.date = date;
} }
public void setIndex(int i) {
this.index = i;
}
public int getIndex() {
return this.index;
}
@Override
public String getUIClassID() {
return UI_CLASS_ID;
}
} }

2
designer-base/src/main/java/com/fr/design/gui/style/TextFormatPane.java

@ -132,7 +132,7 @@ public class TextFormatPane extends AbstractBasicStylePane implements GlobalName
cell(textField), cell(textField),
row( row(
cell(new UILabel(Toolkit.i18nText("Fine-Design_Report_Base_Option"))).weight(LEFT_WEIGHT), cell(new UILabel(Toolkit.i18nText("Fine-Design_Report_Base_Option"))).weight(LEFT_WEIGHT),
row(cell(roundingBox)).weight(RIGHT_WEIGHT) cell(roundingBox).weight(RIGHT_WEIGHT)
), ),
cell(previewLabel) cell(previewLabel)
).getComponent()); ).getComponent());

49
designer-base/src/main/java/com/fr/design/hyperlink/popup/MobilePopupRegularPane.java

@ -1,11 +1,13 @@
package com.fr.design.hyperlink.popup; package com.fr.design.hyperlink.popup;
import com.fine.theme.utils.FineUIStyle;
import com.formdev.flatlaf.util.ScaledEmptyBorder;
import com.fr.design.constants.LayoutConstants;
import com.fr.design.dialog.BasicPane; import com.fr.design.dialog.BasicPane;
import com.fr.design.gui.ibutton.UIRadioButton; import com.fr.design.gui.ibutton.UIRadioButton;
import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.ispinner.UISpinner; import com.fr.design.gui.ispinner.UISpinner;
import com.fr.design.i18n.Toolkit; import com.fr.design.i18n.Toolkit;
import com.fr.design.layout.VerticalFlowLayout;
import com.fr.stable.StringUtils; import com.fr.stable.StringUtils;
import javax.swing.*; import javax.swing.*;
@ -13,6 +15,11 @@ import java.awt.*;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import static com.fine.swing.ui.layout.Layouts.column;
import static com.fine.swing.ui.layout.Layouts.cell;
import static com.fine.swing.ui.layout.Layouts.row;
import static com.fine.swing.ui.layout.Layouts.flex;
public class MobilePopupRegularPane extends BasicPane { public class MobilePopupRegularPane extends BasicPane {
private String label; private String label;
@ -35,13 +42,15 @@ public class MobilePopupRegularPane extends BasicPane {
private void initComponent() { private void initComponent() {
this.setLayout(new BorderLayout()); this.setLayout(new BorderLayout());
this.add(this.createRadioButtonGroupPane(), BorderLayout.NORTH);
spinnerGroupPane = this.createSpinnerPane(); spinnerGroupPane = this.createSpinnerPane();
this.add(spinnerGroupPane, BorderLayout.CENTER); this.add(column(LayoutConstants.VERTICAL_GAP,
cell(this.createRadioButtonGroupPane()),
row(flex(1), cell(spinnerGroupPane).weight(3))
).getComponent());
} }
private JPanel createRadioButtonGroupPane() { private JPanel createRadioButtonGroupPane() {
radiosPane = new JPanel(new FlowLayout(FlowLayout.LEFT, 5, 5)); radiosPane = new JPanel(new BorderLayout());
customRadio = new UIRadioButton(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Custom")); customRadio = new UIRadioButton(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Custom"));
customRadio.addActionListener(radioActionListener); customRadio.addActionListener(radioActionListener);
@ -52,10 +61,8 @@ public class MobilePopupRegularPane extends BasicPane {
radioButtons.add(customRadio); radioButtons.add(customRadio);
radioButtons.add(autoRadio); radioButtons.add(autoRadio);
radiosPane.add(customRadio); radiosPane.add(row(30, cell(customRadio), cell(autoRadio), flex()).getComponent());
radiosPane.add(autoRadio); return row(cell(new UILabel(this.label, FineUIStyle.LABEL_SECONDARY)).weight(1), cell(radiosPane).weight(3)).getComponent();
return MobilePopupUIUtils.createLeftTileRightContentPanel(this.label, radiosPane, Color.GRAY, 20);
} }
private ActionListener radioActionListener = new ActionListener() { private ActionListener radioActionListener = new ActionListener() {
@ -66,40 +73,32 @@ public class MobilePopupRegularPane extends BasicPane {
}; };
private JPanel createSpinnerPane() { private JPanel createSpinnerPane() {
JPanel spinnerPane = new JPanel(new FlowLayout(FlowLayout.LEFT, 15, 5)); JPanel spinnerPane = new JPanel(new FlowLayout(FlowLayout.LEFT, 15, 0));
spinnerPane.setBorder(BorderFactory.createEmptyBorder(0, MobilePopupUIUtils.Left_Title_width, 0, 0)); spinnerPane.setBorder(new ScaledEmptyBorder(0, 0, 0, 0));
widthSpinner = new UISpinner(0, 100, 1, 95); widthSpinner = new UISpinner(0, 100, 1, 95);
widthSpinnerPane = this.createSpinnerLabelPane(widthSpinner, Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Width")); widthSpinnerPane = this.createSpinnerLabelPane(widthSpinner, Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Width"));
heightSpinner = new UISpinner(0, 100, 1, 95); heightSpinner = new UISpinner(0, 100, 1, 95);
heightSpinnerPane = this.createSpinnerLabelPane(heightSpinner, Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Height")); heightSpinnerPane = this.createSpinnerLabelPane(heightSpinner, Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Height"));
spinnerPane.add(row(cell(widthSpinnerPane), cell(heightSpinnerPane)).getComponent());
spinnerPane.add(widthSpinnerPane);
spinnerPane.add(heightSpinnerPane);
return spinnerPane; return spinnerPane;
} }
private JPanel createSpinnerLabelPane(UISpinner spinner, String labelText) { private JPanel createSpinnerLabelPane(UISpinner spinner, String labelText) {
JPanel spinnerLabelPane = new JPanel(new VerticalFlowLayout(VerticalFlowLayout.TOP, 0, 5)); JPanel spinnerLabelPane = new JPanel(new BorderLayout());
JPanel spinnerPane = new JPanel(new FlowLayout(FlowLayout.LEFT, 2,0));
UILabel percent = new UILabel("%"); UILabel percent = new UILabel("%");
spinnerPane.add(spinner);
spinnerPane.add(percent);
UILabel label = new UILabel(labelText); UILabel label = new UILabel(labelText);
label.setHorizontalAlignment(SwingConstants.CENTER); label.setHorizontalAlignment(SwingConstants.CENTER);
spinnerLabelPane.add(column(LayoutConstants.VGAP_SMALL,
spinnerLabelPane.add(spinnerPane); row(cell(spinner).weight(1), cell(percent)).weight(1),
spinnerLabelPane.add(label); cell(label)
).getComponent());
return spinnerLabelPane; return spinnerLabelPane;
} }
private void resetSpinnerGroupPane(boolean showHeightSpinnerPane) { private void resetSpinnerGroupPane(boolean showHeightSpinnerPane) {
spinnerGroupPane.removeAll(); spinnerGroupPane.removeAll();
spinnerGroupPane.add(widthSpinnerPane); spinnerGroupPane.add(widthSpinnerPane);
if(showHeightSpinnerPane) { if (showHeightSpinnerPane) {
spinnerGroupPane.add(heightSpinnerPane); spinnerGroupPane.add(heightSpinnerPane);
} }
spinnerGroupPane.revalidate(); spinnerGroupPane.revalidate();

52
designer-base/src/main/java/com/fr/design/hyperlink/popup/StyleSettingPane.java

@ -1,6 +1,8 @@
package com.fr.design.hyperlink.popup; package com.fr.design.hyperlink.popup;
import com.fine.theme.utils.FineUIStyle;
import com.fr.design.beans.BasicBeanPane; import com.fr.design.beans.BasicBeanPane;
import com.fr.design.constants.LayoutConstants;
import com.fr.design.gui.frpane.UINumberDragPane; import com.fr.design.gui.frpane.UINumberDragPane;
import com.fr.design.gui.icombobox.LineComboBox; import com.fr.design.gui.icombobox.LineComboBox;
import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilable.UILabel;
@ -57,10 +59,7 @@ public class StyleSettingPane extends BasicBeanPane<MobilePopupHyperlink> {
JPanel typePane = FRGUIPaneFactory.createBorderLayout_S_Pane(); JPanel typePane = FRGUIPaneFactory.createBorderLayout_S_Pane();
popupTypeLabel = new UILabel(""); popupTypeLabel = new UILabel("");
UILabel typeLabel = new UILabel(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Type")); UILabel typeLabel = new UILabel(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Type"));
typePane.add(row(44, typePane.add(row(cell(typeLabel).weight(1), row(cell(popupTypeLabel), flex()).weight(6)).getComponent());
cell(typeLabel),
cell(popupTypeLabel)
).getComponent());
return typePane; return typePane;
} }
@ -82,14 +81,11 @@ public class StyleSettingPane extends BasicBeanPane<MobilePopupHyperlink> {
borderColor = new NewColorSelectBox(100); borderColor = new NewColorSelectBox(100);
borderRadiusSpinner = new UISpinner(0, maxBorderRadius, 1, 20); borderRadiusSpinner = new UISpinner(0, maxBorderRadius, 1, 20);
UILabel borderLabel = new UILabel(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Border")); UILabel borderLabel = new UILabel(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Border"));
borderPane.add(row(44,
column(10, borderPane.add(column(LayoutConstants.VERTICAL_GAP,
cell(borderLabel).weight(0.3), row(cell(borderLabel).weight(1), cell(new UILabel(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Line"), FineUIStyle.LABEL_SECONDARY)).weight(1), cell(borderType).weight(2), flex(3)),
flex().weight(0.7)), row(flex(1), cell(new UILabel(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Colors"), FineUIStyle.LABEL_SECONDARY)).weight(1), cell(borderColor).weight(2), flex(3)),
column(10, row(flex(1), cell(new UILabel(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Radius"), FineUIStyle.LABEL_SECONDARY)).weight(1), cell(borderRadiusSpinner).weight(2), flex(3))
cell(MobilePopupUIUtils.createLeftTileRightContentPanel(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Line"), borderType, Color.GRAY, 64)),
cell(MobilePopupUIUtils.createLeftTileRightContentPanel(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Colors"), borderColor, Color.GRAY, 64)),
cell(MobilePopupUIUtils.createLeftTileRightContentPanel(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Radius"), borderRadiusSpinner, Color.GRAY, 64)))
).getComponent()); ).getComponent());
return borderPane; return borderPane;
} }
@ -99,39 +95,31 @@ public class StyleSettingPane extends BasicBeanPane<MobilePopupHyperlink> {
bgPane.setLayout(new BorderLayout()); bgPane.setLayout(new BorderLayout());
bgColor = new NewColorSelectBox(100); bgColor = new NewColorSelectBox(100);
JPanel transparencyPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); JPanel transparencyPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
this.numberDragPane = new UINumberDragPane(0,100); this.numberDragPane = new UINumberDragPane(0, 100);
transparencyPane.add(numberDragPane, BorderLayout.CENTER); transparencyPane.add(numberDragPane, BorderLayout.CENTER);
transparencyPane.add(new UILabel(" %"), BorderLayout.EAST); transparencyPane.add(new UILabel(" %"), BorderLayout.EAST);
JLabel bgLabel = new JLabel(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Background")); JLabel bgLabel = new JLabel(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Background"));
bgPane.add(row(44,
column(10, bgPane.add(column(LayoutConstants.VERTICAL_GAP,
cell(bgLabel).weight(0.6), row(cell(bgLabel).weight(1), cell(new UILabel(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Colors"), FineUIStyle.LABEL_SECONDARY)).weight(1), cell(bgColor).weight(2), flex(3)),
flex().weight(0.4)), row(flex(1), cell(new UILabel(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Opacity"), FineUIStyle.LABEL_SECONDARY)).weight(1), cell(transparencyPane).weight(3), flex(2))
column(10,
cell(MobilePopupUIUtils.createLeftTileRightContentPanel(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Colors"), bgColor, Color.GRAY, 64)),
cell(MobilePopupUIUtils.createLeftTileRightContentPanel(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Opacity"), transparencyPane, Color.GRAY, 64))
)
).getComponent()); ).getComponent());
return bgPane; return bgPane;
} }
private JPanel createPopupSizePane() { private JPanel createPopupSizePane() {
JPanel sizePane = new JPanel(new BorderLayout()); JPanel sizePane = new JPanel(new BorderLayout());
mobileRegularPane = new MobilePopupRegularPane(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Mobile_Rules")); mobileRegularPane = new MobilePopupRegularPane(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Mobile_Rules"));
padRegularPane = new MobilePopupRegularPane(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Pad_Rules")); padRegularPane = new MobilePopupRegularPane(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Pad_Rules"));
JLabel sizeLabel = new JLabel(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Size")); JLabel sizeLabel = new JLabel(Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Size"));
sizePane.add(row(20, sizePane.add(column(LayoutConstants.VERTICAL_GAP,
column(10, row(
cell(sizeLabel).weight(0.16), column(LayoutConstants.VERTICAL_GAP, cell(sizeLabel), flex()).weight(1),
flex().weight(0.84)), cell(mobileRegularPane).weight(4), flex(2)
column(10, ),
cell(mobileRegularPane), row(flex(1), cell(padRegularPane).weight(4), flex(2))
cell(padRegularPane)
)
).getComponent()); ).getComponent());
return sizePane; return sizePane;
} }
@ -204,7 +192,7 @@ public class StyleSettingPane extends BasicBeanPane<MobilePopupHyperlink> {
private void updateBackgroundSettingBean(MobilePopupHyperlink link) { private void updateBackgroundSettingBean(MobilePopupHyperlink link) {
link.setBgColor(bgColor.getSelectObject()); link.setBgColor(bgColor.getSelectObject());
link.setBgOpacity((float)(numberDragPane.updateBean() / maxNumber)); link.setBgOpacity((float) (numberDragPane.updateBean() / maxNumber));
} }
private void populatePopupSizeBean(MobilePopupHyperlink link) { private void populatePopupSizeBean(MobilePopupHyperlink link) {

7
designer-base/src/main/java/com/fr/design/javascript/JSContentWithDescriptionPane.java

@ -1,5 +1,6 @@
package com.fr.design.javascript; package com.fr.design.javascript;
import com.fine.theme.utils.FineUIScale;
import com.fr.base.svg.IconUtils; import com.fr.base.svg.IconUtils;
import com.fr.design.border.UIRoundedBorder; import com.fr.design.border.UIRoundedBorder;
import com.fr.design.constants.UIConstants; import com.fr.design.constants.UIConstants;
@ -140,7 +141,7 @@ public class JSContentWithDescriptionPane extends JSContentPane implements KeyLi
//js函数声明面板 //js函数声明面板
JPanel jsParaPane = createJSParaPane(); JPanel jsParaPane = createJSParaPane();
jsParaPane.setPreferredSize(new Dimension(650, 80)); jsParaPane.setPreferredSize(FineUIScale.createScaleDimension(650, 80));
//右上角的搜索提示面板 //右上角的搜索提示面板
JPanel tipsPane = createTipsPane(); JPanel tipsPane = createTipsPane();
@ -153,7 +154,7 @@ public class JSContentWithDescriptionPane extends JSContentPane implements KeyLi
UIScrollPane contentTextAreaPanel = createContentTextAreaPanel(); UIScrollPane contentTextAreaPanel = createContentTextAreaPanel();
initContextAreaListener(); initContextAreaListener();
contentTextAreaPanel.setPreferredSize(new Dimension(850, 250)); contentTextAreaPanel.setPreferredSize(FineUIScale.createScaleDimension(850, 250));
//js函数结束标签 //js函数结束标签
UILabel endBracketsLabel = new UILabel(); UILabel endBracketsLabel = new UILabel();
endBracketsLabel.setText("}"); endBracketsLabel.setText("}");
@ -173,7 +174,7 @@ public class JSContentWithDescriptionPane extends JSContentPane implements KeyLi
//函数分类和函数说明面板================================== //函数分类和函数说明面板==================================
JPanel functionNameAndDescriptionPanel = createInterfaceAndDescriptionPanel(); JPanel functionNameAndDescriptionPanel = createInterfaceAndDescriptionPanel();
functionNameAndDescriptionPanel.setPreferredSize(new Dimension(880, 220)); functionNameAndDescriptionPanel.setPreferredSize(FineUIScale.createScaleDimension(880, 220));
this.add(functionNameAndDescriptionPanel, BorderLayout.SOUTH); this.add(functionNameAndDescriptionPanel, BorderLayout.SOUTH);
} }

10
designer-base/src/main/java/com/fr/design/javascript/JavaScriptImplPane.java

@ -13,13 +13,11 @@ import com.fr.design.hyperlink.AbstractHyperLinkPane;
import com.fr.design.javascript.jsapi.JSImplPopulateAction; import com.fr.design.javascript.jsapi.JSImplPopulateAction;
import com.fr.design.javascript.jsapi.JSImplUpdateAction; import com.fr.design.javascript.jsapi.JSImplUpdateAction;
import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.DesignerContext;
import com.fr.design.scrollruler.ModLineBorder;
import com.fr.design.utils.gui.GUICoreUtils; import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.js.JavaScriptImpl; import com.fr.js.JavaScriptImpl;
import com.fr.stable.ParameterProvider; import com.fr.stable.ParameterProvider;
import com.fr.stable.StringUtils; import com.fr.stable.StringUtils;
import javax.swing.BorderFactory;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener; import javax.swing.event.TableModelListener;
@ -30,7 +28,6 @@ import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import static com.fine.swing.ui.layout.Layouts.column;
import static com.fine.swing.ui.layout.Layouts.row; import static com.fine.swing.ui.layout.Layouts.row;
import static com.fine.swing.ui.layout.Layouts.cell; import static com.fine.swing.ui.layout.Layouts.cell;
@ -76,12 +73,11 @@ public class JavaScriptImplPane extends AbstractHyperLinkPane<JavaScriptImpl> {
cell(FineUIUtils.wrapComponentWithTitle(importedJsPane, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_ReportServerP_Import_JavaScript"))).weight(0.5), cell(FineUIUtils.wrapComponentWithTitle(importedJsPane, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_ReportServerP_Import_JavaScript"))).weight(0.5),
cell(FineUIUtils.wrapComponentWithTitle(parameterPane, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Parameter"))).weight(0.5) cell(FineUIUtils.wrapComponentWithTitle(parameterPane, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Parameter"))).weight(0.5)
).getComponent()); ).getComponent());
topPane.setPreferredSize(new Dimension(super.getPreferredSize().width, 150));
this.setLayout(new BorderLayout()); this.setLayout(new BorderLayout());
this.add(column(10, this.add(topPane, BorderLayout.NORTH);
cell(topPane).weight(0.5), this.add(FineUIUtils.wrapComponentWithTitle(jsPane, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_JavaScript")), BorderLayout.CENTER);
cell(FineUIUtils.wrapComponentWithTitle(jsPane, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_JavaScript"))).weight(0.5)
).getComponent());
this.reLayoutForChart(); this.reLayoutForChart();
} }

3
designer-base/src/main/resources/com/fine/theme/icon/left_arrow.svg

@ -0,0 +1,3 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M19.8033 24.4853C19.4128 24.8758 18.7796 24.8758 18.3891 24.4853L9.90381 16L18.3891 7.51473C18.7796 7.12421 19.4128 7.12419 19.8033 7.51473C20.1938 7.90527 20.1938 8.53842 19.8033 8.92894L12.7322 16L19.8033 23.0711C20.1938 23.4616 20.1938 24.0948 19.8033 24.4853Z" fill="#0A1C38" fill-opacity="0.9"/>
</svg>

After

Width:  |  Height:  |  Size: 413 B

3
designer-base/src/main/resources/com/fine/theme/icon/right_arrow.svg

@ -0,0 +1,3 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12.1967 7.51474C12.5872 7.12421 13.2204 7.12422 13.6109 7.51474L22.0962 16L13.6109 24.4853C13.2204 24.8758 12.5872 24.8758 12.1967 24.4853C11.8062 24.0948 11.8062 23.4616 12.1967 23.0711L19.2678 16L12.1967 8.92895C11.8062 8.53843 11.8062 7.90526 12.1967 7.51474Z" fill="#0A1C38" fill-opacity="0.9"/>
</svg>

After

Width:  |  Height:  |  Size: 413 B

2
designer-base/src/main/resources/com/fine/theme/light/ui/fine_light.icon.json

@ -29,6 +29,8 @@
"drag_right": "drag_right.svg", "drag_right": "drag_right.svg",
"down_arrow": "down_arrow.svg", "down_arrow": "down_arrow.svg",
"up_arrow": "up_arrow.svg", "up_arrow": "up_arrow.svg",
"left_arrow": "left_arrow.svg",
"right_arrow": "right_arrow.svg",
"select": "select.svg", "select": "select.svg",
"recycle": "recycle.svg", "recycle": "recycle.svg",
"time": "time.svg", "time": "time.svg",

2
designer-base/src/main/resources/com/fine/theme/light/ui/laf/FineLaf.properties

@ -7,6 +7,8 @@ ColorChooserUI=com.formdev.flatlaf.ui.FlatColorChooserUI
ComboBoxUI=com.fine.theme.light.ui.FineComboBoxUI ComboBoxUI=com.fine.theme.light.ui.FineComboBoxUI
DesktopIconUI=com.formdev.flatlaf.ui.FlatDesktopIconUI DesktopIconUI=com.formdev.flatlaf.ui.FlatDesktopIconUI
DesktopPaneUI=com.formdev.flatlaf.ui.FlatDesktopPaneUI DesktopPaneUI=com.formdev.flatlaf.ui.FlatDesktopPaneUI
CalendarPaneUI=com.fine.theme.light.ui.FineCalendarPaneUI
DayLabelUI=com.fine.theme.light.ui.FineDayLabelUI
EditorPaneUI=com.formdev.flatlaf.ui.FlatEditorPaneUI EditorPaneUI=com.formdev.flatlaf.ui.FlatEditorPaneUI
FileChooserUI=com.formdev.flatlaf.ui.FlatFileChooserUI FileChooserUI=com.formdev.flatlaf.ui.FlatFileChooserUI
FormattedTextFieldUI=com.formdev.flatlaf.ui.FlatFormattedTextFieldUI FormattedTextFieldUI=com.formdev.flatlaf.ui.FlatFormattedTextFieldUI

20
designer-base/src/main/resources/com/fine/theme/light/ui/laf/FineLightLaf.properties

@ -410,6 +410,14 @@ Label.strongHintColor = #FF0000
Label.warningColor = #F1393C Label.warningColor = #F1393C
Label.secondaryColor = #0A1C38A8 Label.secondaryColor = #0A1C38A8
# ---- Calendar ----
Calendar.background = $fill.normal
Calendar.day.selectedBackground = #2576EF
Calendar.day.hoverBackground = #E6E9EF
Calendar.day.pressedBackground = #DADEE7
Calendar.dayOtherMonth.foreground = fade(@foreground, 29%)
Calendar.day.arc = 6
#---- HelpButton ---- #---- HelpButton ----
HelpButton.questionMarkColor = @accentCheckmarkColor HelpButton.questionMarkColor = @accentCheckmarkColor
@ -1401,8 +1409,16 @@ chart.selectedBorderColor = #2576EF
background: $fill.normal background: $fill.normal
[style]Button.originalButton = \ [style]Button.originalButton = \
border: 4,4,4,4; \ borderColor: null; \
background: null; background: $fill.normal; \
hoverBorderColor: null;
[style]Button.grayButton = \
foreground: fade(@foreground, 29%); \
borderColor: null; \
background: $fill.normal; \
hoverBorderColor: null;
[style]Label.detailLabel = \ [style]Label.detailLabel = \
foreground: fade(@foreground, 90%); \ foreground: fade(@foreground, 90%); \

32
designer-base/src/test/java/com/fr/design/gui/storybook/components/UICalendarPaneStoryBoard.java

@ -0,0 +1,32 @@
package com.fr.design.gui.storybook.components;
import com.fine.theme.light.ui.FineRoundBorder;
import com.fr.design.gui.date.UICalendarPanel;
import com.fr.design.gui.date.UIDatePicker;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.storybook.StoryBoard;
import javax.swing.*;
import java.awt.*;
import java.util.Date;
import static com.fine.swing.ui.layout.Layouts.*;
public class UICalendarPaneStoryBoard extends StoryBoard {
public UICalendarPaneStoryBoard() {
super("日期控件");
UICalendarPanel calendarPanel = new UICalendarPanel(true);
calendarPanel.setSelectedDate(new Date());
add(
cell(new UILabel("日期下拉框")).with(this::h3),
row(cell(new UIDatePicker(2)).with(this::setFixSize), flex()),
cell(new UILabel("日期")).with(this::h3),
row(cell(calendarPanel), flex())
);
}
private void setFixSize(JComponent component) {
component.setPreferredSize(new Dimension(240, component.getHeight()));
component.setBorder(new FineRoundBorder());
}
}

2
designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartHtmlLabelPane.java

@ -151,7 +151,7 @@ public class VanChartHtmlLabelPane extends JPanel {
new Component[]{isCustomWidth, customWidth}, new Component[]{isCustomWidth, customWidth},
new Component[]{isCustomHeight, customHeight}, new Component[]{isCustomHeight, customHeight},
}; };
return FineLayoutBuilder.compatibleTableLayout(10, components, new double[]{1, 1}); return FineLayoutBuilder.compatibleTableLayout(10, components, new double[]{1.4, 0.6});
} }
private void checkWidth() { private void checkWidth() {

6
designer-chart/src/main/java/com/fr/van/chart/designer/style/VanChartPlotLegendPane.java

@ -32,6 +32,7 @@ import com.fr.van.chart.designer.component.border.VanChartBorderWithRadiusPane;
import javax.swing.Icon; import javax.swing.Icon;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener; import javax.swing.event.ChangeListener;
import java.awt.BorderLayout; import java.awt.BorderLayout;
@ -153,7 +154,7 @@ public class VanChartPlotLegendPane extends BasicPane {
return FineLayoutBuilder.asBorderLayoutWrapped(column); return FineLayoutBuilder.asBorderLayoutWrapped(column);
} }
protected VanChartBackgroundPane creatBackgroundPane(){ protected VanChartBackgroundPane creatBackgroundPane() {
return new VanChartBackgroundWithOutImagePane(); return new VanChartBackgroundWithOutImagePane();
} }
@ -252,7 +253,7 @@ public class VanChartPlotLegendPane extends BasicPane {
customFloatPositionButton.setSelected(true); customFloatPositionButton.setSelected(true);
checkLayoutPaneVisible(); checkLayoutPaneVisible();
checkDisplayStrategyUse(); checkDisplayStrategyUse();
SwingUtilities.invokeLater(() -> {
if (customFloatPositionPane == null) { if (customFloatPositionPane == null) {
customFloatPositionPane = new VanChartFloatPositionPane(); customFloatPositionPane = new VanChartFloatPositionPane();
} }
@ -267,6 +268,7 @@ public class VanChartPlotLegendPane extends BasicPane {
}; };
} }
uiBubbleFloatPane.show(VanChartPlotLegendPane.this, null); uiBubbleFloatPane.show(VanChartPlotLegendPane.this, null);
});
} }
}); });
} }

4
designer-chart/src/main/java/com/fr/van/chart/designer/style/VanChartTitlePane.java

@ -35,6 +35,7 @@ import com.fr.van.chart.designer.component.background.VanChartBackgroundWithOutS
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.SwingConstants; import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener; import javax.swing.event.ChangeListener;
import java.awt.BorderLayout; import java.awt.BorderLayout;
@ -220,7 +221,7 @@ public class VanChartTitlePane extends AbstractVanChartScrollPane<VanChart> {
alignmentPane.setSelectedIndex(-1); alignmentPane.setSelectedIndex(-1);
customFloatPositionButton.setSelected(true); customFloatPositionButton.setSelected(true);
checkDisplayStrategyUse(); checkDisplayStrategyUse();
SwingUtilities.invokeLater(() -> {
if (customFloatPositionPane == null) { if (customFloatPositionPane == null) {
customFloatPositionPane = new VanChartFloatPositionPane(); customFloatPositionPane = new VanChartFloatPositionPane();
} }
@ -235,6 +236,7 @@ public class VanChartTitlePane extends AbstractVanChartScrollPane<VanChart> {
}; };
} }
uiBubbleFloatPane.show(VanChartTitlePane.this, null); uiBubbleFloatPane.show(VanChartTitlePane.this, null);
});
} }
}); });
} }

7
designer-form/src/main/java/com/fr/design/mainframe/widget/ui/BasicSetVisiblePropertyPane.java

@ -3,6 +3,9 @@ package com.fr.design.mainframe.widget.ui;
import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.gui.icheckbox.UICheckBox;
import com.fr.form.ui.Widget; import com.fr.form.ui.Widget;
import static com.fine.swing.ui.layout.Layouts.cell;
import static com.fine.swing.ui.layout.Layouts.row;
/** /**
* Created by kerry on 2017/9/30. * Created by kerry on 2017/9/30.
@ -17,12 +20,12 @@ public class BasicSetVisiblePropertyPane extends FormBasicPropertyPane {
protected void initComponent() { protected void initComponent() {
UICheckBox otherOtherConfig = createOtherConfig(); UICheckBox otherOtherConfig = createOtherConfig();
if(otherOtherConfig != null){ if(otherOtherConfig != null){
corePane.add(otherOtherConfig); corePane.add(row(cell(otherOtherConfig)).getComponent());
} }
visibleCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Widget_Visible"), true); visibleCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Widget_Visible"), true);
visibleCheckBox.setGlobalName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Basic")); visibleCheckBox.setGlobalName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Basic"));
corePane.add(visibleCheckBox); corePane.add(row(cell(visibleCheckBox)).getComponent());
} }
public UICheckBox createOtherConfig(){ public UICheckBox createOtherConfig(){

12
designer-form/src/main/java/com/fr/design/parameter/RootDesignDefinePane.java

@ -182,9 +182,9 @@ public class RootDesignDefinePane extends AbstractDataModify<WParameterLayout> {
cell(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Base_Background"))).weight(LEFT_WEIGHT), cell(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Base_Background"))).weight(LEFT_WEIGHT),
cell(backgroundPane).weight(RIGHT_WEIGHT) cell(backgroundPane).weight(RIGHT_WEIGHT)
), ),
cell(displayReport), row(cell(displayReport)),
cell(useParamsTemplate), row(cell(useParamsTemplate)),
cell(fireAfterEditor), row(cell(fireAfterEditor)),
row( row(
cell(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Widget_Display_Position"))).weight(LEFT_WEIGHT), cell(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Widget_Display_Position"))).weight(LEFT_WEIGHT),
cell(hAlignmentPane).weight(RIGHT_WEIGHT) cell(hAlignmentPane).weight(RIGHT_WEIGHT)
@ -275,9 +275,9 @@ public class RootDesignDefinePane extends AbstractDataModify<WParameterLayout> {
cell(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Base_Background"))).weight(LEFT_WEIGHT), cell(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Base_Background"))).weight(LEFT_WEIGHT),
cell(backgroundPane).weight(RIGHT_WEIGHT) cell(backgroundPane).weight(RIGHT_WEIGHT)
), ),
cell(displayReport), row(cell(displayReport)),
cell(useParamsTemplate), row(cell(useParamsTemplate)),
cell(fireAfterEditor) row(cell(fireAfterEditor))
).getComponent(); ).getComponent();
} }

2
designer-form/src/main/java/com/fr/design/widget/ui/designer/ButtonGroupDictPane.java

@ -42,7 +42,7 @@ public class ButtonGroupDictPane extends JPanel {
cell(columnLabel).weight(LEFT_WEIGHT), cell(columnSpinner).weight(RIGHT_WEIGHT) cell(columnLabel).weight(LEFT_WEIGHT), cell(columnSpinner).weight(RIGHT_WEIGHT)
).getComponent(); ).getComponent();
this.add(column(VERTICAL_GAP, this.add(column(VERTICAL_GAP,
cell(adaptiveCheckbox), row(cell(adaptiveCheckbox)),
cell(columnSettingRow) cell(columnSettingRow)
).getComponent()); ).getComponent());

3
designer-form/src/main/java/com/fr/design/widget/ui/designer/CheckBoxGroupDefinePane.java

@ -13,6 +13,7 @@ import javax.swing.JPanel;
import static com.fine.swing.ui.layout.Layouts.cell; import static com.fine.swing.ui.layout.Layouts.cell;
import static com.fine.swing.ui.layout.Layouts.column; import static com.fine.swing.ui.layout.Layouts.column;
import static com.fine.swing.ui.layout.Layouts.row;
import static com.fr.design.constants.LayoutConstants.VERTICAL_GAP; import static com.fr.design.constants.LayoutConstants.VERTICAL_GAP;
public class CheckBoxGroupDefinePane extends ButtonGroupDefinePane<CheckBoxGroup> { public class CheckBoxGroupDefinePane extends ButtonGroupDefinePane<CheckBoxGroup> {
@ -41,7 +42,7 @@ public class CheckBoxGroupDefinePane extends ButtonGroupDefinePane<CheckBoxGroup
checkbox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Widget_Choose_Type_All")); checkbox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Widget_Choose_Type_All"));
returnTypePane = new ReturnTypePane(); returnTypePane = new ReturnTypePane();
return column(VERTICAL_GAP, return column(VERTICAL_GAP,
cell(checkbox), row(cell(checkbox)),
cell(returnTypePane) cell(returnTypePane)
).getComponent(); ).getComponent();
} }

4
designer-form/src/main/java/com/fr/design/widget/ui/designer/ComboCheckBoxDefinePane.java

@ -13,6 +13,7 @@ import javax.swing.JPanel;
import java.awt.Component; import java.awt.Component;
import static com.fine.swing.ui.layout.Layouts.cell; import static com.fine.swing.ui.layout.Layouts.cell;
import static com.fine.swing.ui.layout.Layouts.row;
import static com.fine.swing.ui.layout.Layouts.column; import static com.fine.swing.ui.layout.Layouts.column;
import static com.fr.design.constants.LayoutConstants.VERTICAL_GAP; import static com.fr.design.constants.LayoutConstants.VERTICAL_GAP;
@ -42,7 +43,8 @@ public class ComboCheckBoxDefinePane extends DictEditorDefinePane<ComboCheckBox>
returnTypePane = new ReturnTypePane(); returnTypePane = new ReturnTypePane();
return column(VERTICAL_GAP, return column(VERTICAL_GAP,
cell(supportTagCheckBox),cell(returnTypePane) row(cell(supportTagCheckBox)),
cell(returnTypePane)
).getComponent(); ).getComponent();
} }

5
designer-form/src/main/java/com/fr/design/widget/ui/designer/CustomWritableRepeatEditorPane.java

@ -7,6 +7,9 @@ import com.fr.form.ui.CustomWriteAbleRepeatEditor;
import javax.swing.JPanel; import javax.swing.JPanel;
import static com.fine.swing.ui.layout.Layouts.row;
import static com.fine.swing.ui.layout.Layouts.cell;
/** /**
* Author : Shockway * Author : Shockway
* Date: 13-9-18 * Date: 13-9-18
@ -24,7 +27,7 @@ public abstract class CustomWritableRepeatEditorPane<T extends CustomWriteAbleRe
public JPanel setValidatePane(){ public JPanel setValidatePane(){
this.customDataCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Allow_Custom_Data"), false); this.customDataCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Allow_Custom_Data"), false);
JPanel otherContentPane = super.setValidatePane(); JPanel otherContentPane = super.setValidatePane();
otherContentPane.add(customDataCheckBox); otherContentPane.add(row(cell(customDataCheckBox)).getComponent());
return otherContentPane; return otherContentPane;
} }

4
designer-form/src/main/java/com/fr/design/widget/ui/designer/DirectWriteEditorDefinePane.java

@ -52,7 +52,7 @@ public abstract class DirectWriteEditorDefinePane<T extends DirectWriteEditor> e
cell(dicPane[0]).weight(LEFT_WEIGHT), cell(dicPane[0]).weight(LEFT_WEIGHT),
cell(dicPane[1]).weight(RIGHT_WEIGHT) cell(dicPane[1]).weight(RIGHT_WEIGHT)
), ),
cell(repeatCheckBox) row(cell(repeatCheckBox))
).getComponent(); ).getComponent();
if (waterMarkComponent[0] != null && waterMarkComponent[1] != null) { if (waterMarkComponent[0] != null && waterMarkComponent[1] != null) {
panel.add(row( panel.add(row(
@ -115,7 +115,7 @@ public abstract class DirectWriteEditorDefinePane<T extends DirectWriteEditor> e
public JPanel setValidatePane(){ public JPanel setValidatePane(){
directWriteCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Allow_Edit"), false); directWriteCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Allow_Edit"), false);
JPanel otherContentPane = column(LayoutConstants.VERTICAL_GAP).getComponent(); JPanel otherContentPane = column(LayoutConstants.VERTICAL_GAP).getComponent();
otherContentPane.add(directWriteCheckBox); otherContentPane.add(row(cell(directWriteCheckBox)).getComponent());
return otherContentPane; return otherContentPane;
} }

2
designer-form/src/main/java/com/fr/design/widget/ui/designer/FieldEditorDefinePane.java

@ -154,7 +154,7 @@ public abstract class FieldEditorDefinePane<T extends FieldEditor> extends Abstr
}); });
validatePane.add(column(VERTICAL_GAP, validatePane.add(column(VERTICAL_GAP,
cell(allowBlankCheckBox), row(cell(allowBlankCheckBox)),
cell(errorTipPane) cell(errorTipPane)
).getComponent()); ).getComponent());

4
designer-form/src/main/java/com/fr/design/widget/ui/designer/LabelDefinePane.java

@ -82,8 +82,8 @@ public class LabelDefinePane extends AbstractDataModify<Label> {
return column(VERTICAL_GAP, return column(VERTICAL_GAP,
cell(formWidgetValuePane), cell(formWidgetValuePane),
cell(isStyleAlignmentWrapText), row(cell(isStyleAlignmentWrapText)),
cell(isPageSetupVertically), row(cell(isPageSetupVertically)),
row( row(
cell(FRWidgetFactory.createLineWrapLabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Widget_Display_Position_Similar"))).weight(LEFT_WEIGHT), cell(FRWidgetFactory.createLineWrapLabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Widget_Display_Position_Similar"))).weight(LEFT_WEIGHT),
cell(hAlignmentPane).weight(RIGHT_WEIGHT) cell(hAlignmentPane).weight(RIGHT_WEIGHT)

30
designer-realize/src/main/java/com/fr/design/dscolumn/SpecifiedGroupAttrPane.java

@ -1,5 +1,7 @@
package com.fr.design.dscolumn; package com.fr.design.dscolumn;
import com.fine.theme.utils.FineLayoutBuilder;
import com.fine.theme.utils.FineUIUtils;
import com.fr.base.BaseFormula; import com.fr.base.BaseFormula;
import com.fr.design.beans.BasicBeanPane; import com.fr.design.beans.BasicBeanPane;
import com.fr.design.condition.DSColumnLiteConditionPane; import com.fr.design.condition.DSColumnLiteConditionPane;
@ -36,6 +38,9 @@ import java.awt.event.ItemEvent;
import java.awt.event.ItemListener; import java.awt.event.ItemListener;
import java.util.ArrayList; import java.util.ArrayList;
import static com.fine.theme.utils.FineClientProperties.ADAPTIVE_COMBO_BOX;
import static com.fine.theme.utils.FineClientProperties.COMBO_BOX_TYPE;
/** /**
* SpecifiedGroupAttrDialog * SpecifiedGroupAttrDialog
*/ */
@ -86,10 +91,11 @@ public class SpecifiedGroupAttrPane extends BasicPane {
} }
protected void initComponents() { protected void initComponents() {
this.setLayout(FRGUIPaneFactory.createBorderLayout()); this.setLayout(FRGUIPaneFactory.createScaledBorderLayout(0, 10));
specifiedComboBox = new UIComboBox(new String[] { specifiedComboBox = new UIComboBox(new String[] {
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Condition_Group"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Formula_Group") com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Condition_Group"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Formula_Group")
}); });
specifiedComboBox.putClientProperty(COMBO_BOX_TYPE, ADAPTIVE_COMBO_BOX);
specifiedComboBox.addItemListener(new ItemListener() { specifiedComboBox.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) { public void itemStateChanged(ItemEvent e) {
@ -101,9 +107,8 @@ public class SpecifiedGroupAttrPane extends BasicPane {
} }
}); });
JPanel northPane = GUICoreUtils.createFlowPane( JPanel northPane = FineLayoutBuilder.createHorizontalLayout(10,
new JComponent[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Select_Specified_Grouping") + ":"), new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Select_Specified_Grouping") + ":"), specifiedComboBox);
specifiedComboBox}, FlowLayout.LEFT);
this.add(northPane, BorderLayout.NORTH); this.add(northPane, BorderLayout.NORTH);
cardLayout = new CardLayout(); cardLayout = new CardLayout();
@ -124,6 +129,7 @@ public class SpecifiedGroupAttrPane extends BasicPane {
otherComboBox = new UIComboBox(new String[] {com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_SpecifiedG-Discard_All_Others"), otherComboBox = new UIComboBox(new String[] {com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_SpecifiedG-Discard_All_Others"),
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_SpecifiedG_Leave_In_Their_Own_Groups"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_SpecifiedG_Put_All_Others_Together")}); com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_SpecifiedG_Leave_In_Their_Own_Groups"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_SpecifiedG_Put_All_Others_Together")});
otherComboBox.addItemListener(otherItemListener); otherComboBox.addItemListener(otherItemListener);
UILabel label = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_OtherGroup_Name") + ":"); UILabel label = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_OtherGroup_Name") + ":");
otherTextField = new UITextField(8); otherTextField = new UITextField(8);
southPane.add(otherComboBox); southPane.add(otherComboBox);
@ -132,9 +138,9 @@ public class SpecifiedGroupAttrPane extends BasicPane {
// 公式分组 // 公式分组
formulaGroupPane = new FormulaGroupPane(); formulaGroupPane = new FormulaGroupPane();
centerCardPane.add("Condition", conditionsGroupPane); centerCardPane.add("Condition", conditionsGroupPane);
centerCardPane.add("Formula", formulaGroupPane); centerCardPane.add("Formula", FineUIUtils.wrapComponentWithTitle(formulaGroupPane,
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_D_Dispaly_Divide_Result_Set_into_Groups")));
this.add(centerCardPane, BorderLayout.CENTER); this.add(centerCardPane, BorderLayout.CENTER);
} }
@ -310,7 +316,6 @@ public class SpecifiedGroupAttrPane extends BasicPane {
private JPanel southPane; private JPanel southPane;
public FormulaGroupPane() { public FormulaGroupPane() {
this.setBorder(BorderFactory.createTitledBorder(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_D_Dispaly_Divide_Result_Set_into_Groups")));
this.setLayout(FRGUIPaneFactory.createM_BorderLayout()); this.setLayout(FRGUIPaneFactory.createM_BorderLayout());
JPanel contentPane = FRGUIPaneFactory.createNColumnGridInnerContainer_S_Pane(1); JPanel contentPane = FRGUIPaneFactory.createNColumnGridInnerContainer_S_Pane(1);
this.add(contentPane, BorderLayout.NORTH); this.add(contentPane, BorderLayout.NORTH);
@ -319,9 +324,9 @@ public class SpecifiedGroupAttrPane extends BasicPane {
northPane.setLayout(FRGUIPaneFactory.createBorderLayout()); northPane.setLayout(FRGUIPaneFactory.createBorderLayout());
contentPane.add(northPane); contentPane.add(northPane);
modeComboBox = new UIComboBox(displayModeNames); modeComboBox = new UIComboBox(displayModeNames);
modeComboBox.putClientProperty(COMBO_BOX_TYPE, ADAPTIVE_COMBO_BOX);
northPane.add(GUICoreUtils.createFlowPane(new JComponent[] { new UILabel(InsertText), new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Display_Modes") + ": "), northPane.add(FineLayoutBuilder.createHorizontalLayout(10,
modeComboBox }, FlowLayout.LEFT), BorderLayout.WEST); new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Display_Modes") + ":"), modeComboBox));
UILabel label = new UILabel("="); UILabel label = new UILabel("=");
label.setFont(new Font("Dialog", Font.BOLD, 12)); label.setFont(new Font("Dialog", Font.BOLD, 12));
@ -330,7 +335,6 @@ public class SpecifiedGroupAttrPane extends BasicPane {
UIButton formulaButton = new UIButton("..."); UIButton formulaButton = new UIButton("...");
formulaButton.setToolTipText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Formula") + "..."); formulaButton.setToolTipText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Formula") + "...");
formulaButton.setPreferredSize(new Dimension(25, valueField.getPreferredSize().height));
formulaButton.addActionListener(new ActionListener() { formulaButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) { public void actionPerformed(ActionEvent evt) {
BaseFormula valueFormula = BaseFormula.createFormulaBuilder().build(); BaseFormula valueFormula = BaseFormula.createFormulaBuilder().build();
@ -358,8 +362,8 @@ public class SpecifiedGroupAttrPane extends BasicPane {
} }
}); });
southPane = GUICoreUtils.createFlowPane(new JComponent[] {new UILabel(InsertText), //new UILabel(com.fr.design.i18n.Toolkit.i18nText("I-Message_FunctionGrouper_2")), southPane = FineLayoutBuilder.createHorizontalLayout(10,
new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Custom_Value") + ": "), label, valueField, formulaButton}, FlowLayout.LEFT); new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Custom_Value") + ": "), label, valueField, formulaButton);
contentPane.add(southPane); contentPane.add(southPane);
} }

6
designer-realize/src/main/java/com/fr/design/mainframe/ElementCasePane.java

@ -4,7 +4,6 @@
package com.fr.design.mainframe; package com.fr.design.mainframe;
import com.fine.theme.icon.LazyIcon; import com.fine.theme.icon.LazyIcon;
import com.formdev.flatlaf.ui.FlatUIUtils;
import com.fr.base.BaseFormula; import com.fr.base.BaseFormula;
import com.fr.base.DynamicUnitList; import com.fr.base.DynamicUnitList;
import com.fr.base.Formula; import com.fr.base.Formula;
@ -410,9 +409,8 @@ public abstract class ElementCasePane<T extends TemplateElementCase> extends Tar
grid.setDefaultFloatEditor(CellImagePainter.class, new ImageFloatEditor()); grid.setDefaultFloatEditor(CellImagePainter.class, new ImageFloatEditor());
DesignerEnvManager designerEnvManager = DesignerEnvManager.getEnvManager(); DesignerEnvManager designerEnvManager = DesignerEnvManager.getEnvManager();
// todo: 主题化与env.xml内定义的属性优先级问题 grid.setGridLineColor(designerEnvManager.getGridLineColor());
grid.setGridLineColor(FlatUIUtils.getUIColor("Center.ZoneBorderColor", designerEnvManager.getGridLineColor())); grid.setPaginationLineColor(designerEnvManager.getPaginationLineColor());
grid.setPaginationLineColor(FlatUIUtils.getUIColor("Center.PageLineColor", designerEnvManager.getPaginationLineColor()));
} }
private void addExtraCellEditor(Grid grid) { private void addExtraCellEditor(Grid grid) {

4
designer-realize/src/main/java/com/fr/design/widget/ui/WritableRepeatEditorPane.java

@ -5,6 +5,8 @@ import com.fr.form.ui.WriteAbleRepeatEditor;
import javax.swing.JPanel; import javax.swing.JPanel;
import static com.fine.swing.ui.layout.Layouts.cell;
import static com.fine.swing.ui.layout.Layouts.row;
import static com.fine.swing.ui.layout.Layouts.column; import static com.fine.swing.ui.layout.Layouts.column;
public abstract class WritableRepeatEditorPane<E extends WriteAbleRepeatEditor> extends DirectWriteEditorDefinePane<E> { public abstract class WritableRepeatEditorPane<E extends WriteAbleRepeatEditor> extends DirectWriteEditorDefinePane<E> {
@ -19,7 +21,7 @@ public abstract class WritableRepeatEditorPane<E extends WriteAbleRepeatEditor>
JPanel contentPane = column(LayoutConstants.VERTICAL_GAP).getComponent(); JPanel contentPane = column(LayoutConstants.VERTICAL_GAP).getComponent();
JPanel otherContentPane = this.setThirdContentPane(); JPanel otherContentPane = this.setThirdContentPane();
if (otherContentPane != null) { if (otherContentPane != null) {
contentPane.add(otherContentPane); contentPane.add(row(cell(otherContentPane)).getComponent());
} }
return contentPane; return contentPane;
} }

Loading…
Cancel
Save