diff --git a/designer-base/src/main/java/com/fine/theme/light/ui/FineComboBoxUI.java b/designer-base/src/main/java/com/fine/theme/light/ui/FineComboBoxUI.java index a335aba921..1e712238df 100644 --- a/designer-base/src/main/java/com/fine/theme/light/ui/FineComboBoxUI.java +++ b/designer-base/src/main/java/com/fine/theme/light/ui/FineComboBoxUI.java @@ -1,11 +1,16 @@ package com.fine.theme.light.ui; +import com.fine.theme.utils.FineClientProperties; +import com.fine.theme.utils.FineUIScale; import com.formdev.flatlaf.ui.FlatComboBoxUI; +import com.formdev.flatlaf.ui.FlatUIUtils; +import org.jetbrains.annotations.Nullable; -import javax.swing.JComponent; import javax.swing.JButton; +import javax.swing.JComponent; import javax.swing.SwingConstants; import javax.swing.plaf.ComponentUI; +import java.awt.Dimension; import java.awt.Graphics2D; /** @@ -38,4 +43,25 @@ public class FineComboBoxUI extends FlatComboBoxUI { super.paintArrow(g); } } + + @Override + public Dimension getMinimumSize(JComponent c) { + // ComboBox基于子组件计算适配尺寸性能一般,仅考虑部分ComboBox进行适配计算,其他采用默认值 + if (FineClientProperties.ADAPTIVE_COMBO_BOX.equals(getComboBoxTypeStr(c))) { + return super.getMinimumSize(c); + } + return FineUIScale.scale(new Dimension( + FlatUIUtils.getUIInt("ComboBox.minimumWidth", 72), + FlatUIUtils.getUIInt("ComboBox.comboHeight", 24) + )); + } + + @Nullable + static String getComboBoxTypeStr(JComponent c) { + Object value = c.getClientProperty(FineClientProperties.COMBO_BOX_TYPE); + if (value instanceof String) { + return (String) value; + } + return null; + } } diff --git a/designer-base/src/main/java/com/fine/theme/light/ui/FineTemplateTabPaneUI.java b/designer-base/src/main/java/com/fine/theme/light/ui/FineTemplateTabPaneUI.java index a1ecd9a5a8..05225dd602 100644 --- a/designer-base/src/main/java/com/fine/theme/light/ui/FineTemplateTabPaneUI.java +++ b/designer-base/src/main/java/com/fine/theme/light/ui/FineTemplateTabPaneUI.java @@ -26,7 +26,7 @@ import java.awt.geom.Rectangle2D; import static com.fine.theme.utils.FineUIScale.scale; import static com.fine.theme.utils.FineUIUtils.paintRoundTabBorder; import static com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; -import static com.fr.design.file.MultiTemplateTabPane.LEADING_WIDTH; +import static com.fr.design.file.MultiTemplateTabPane.leadingWidth; import static com.fr.design.file.MultiTemplateTabPane.TRAILING_WIDTH; /** @@ -85,7 +85,6 @@ public class FineTemplateTabPaneUI extends PanelUI { private Icon closeHoverIcon; - private int leadingWidth; private int trailingWidth; protected FineTemplateTabPaneUI() { @@ -112,7 +111,6 @@ public class FineTemplateTabPaneUI extends PanelUI { moreAction = new LazyIcon("tool_more"); moreHoverAction = new LazyIcon("tool_more_hover"); fileIcon = new LazyIcon("cpt_icon"); - leadingWidth = scale(LEADING_WIDTH); trailingWidth = scale(TRAILING_WIDTH); borderWidth = FineUIUtils.getUIInt("TemplateTabPane.borderWidth", "TemplateTabPane.borderWidth"); @@ -138,7 +136,7 @@ public class FineTemplateTabPaneUI extends PanelUI { @Override public void update(Graphics g, JComponent c) { super.update(g, c); - double maxWidth = c.getWidth() - leadingWidth - trailingWidth; + double maxWidth = c.getWidth() - scale(leadingWidth) - trailingWidth; Graphics2D g2d = (Graphics2D) g; paintDefaultBackground(g2d); paintPaneUnderLine(c.getWidth(), g2d); @@ -170,7 +168,7 @@ public class FineTemplateTabPaneUI extends PanelUI { if (tabPane.getSelectedIndex() < 0) { tabPane.setSelectedIndex(0); } - double templateStartX = leadingWidth; + double templateStartX = scale(leadingWidth); //从可以开始展示在tab面板上的tab开始画 @@ -203,7 +201,7 @@ public class FineTemplateTabPaneUI extends PanelUI { private void paintSeparators(Graphics2D g2d) { g2d.setPaint(borderColor); - float x = leadingWidth; + float x = scale(leadingWidth); Pair viewRange = tabPane.getViewRange(); for (int i = viewRange.getFirst(); i <= viewRange.getSecond(); i++) { if (i != tabPane.getSelectedIndex() @@ -216,7 +214,7 @@ public class FineTemplateTabPaneUI extends PanelUI { private void paintTrailingAction(Graphics2D g2d, double tabPaneWidth) { - int x = leadingWidth + (int) tabPaneWidth + (trailingWidth - moreAction.getIconWidth()) / 2; + int x = scale(leadingWidth) + (int) tabPaneWidth + (trailingWidth - moreAction.getIconWidth()) / 2; int y = (tabHeight - moreAction.getIconHeight()) / 2; if (tabPane.isHoverMoreAction()) { moreHoverAction.paintIcon(tabPane, g2d, x, y); diff --git a/designer-base/src/main/java/com/fine/theme/utils/FineClientProperties.java b/designer-base/src/main/java/com/fine/theme/utils/FineClientProperties.java index 038e53a8cf..3b1e5933b2 100644 --- a/designer-base/src/main/java/com/fine/theme/utils/FineClientProperties.java +++ b/designer-base/src/main/java/com/fine/theme/utils/FineClientProperties.java @@ -28,6 +28,10 @@ public interface FineClientProperties extends FlatClientProperties { String PANEL_TYPE = "panelType"; String ROUNDED_PANEL = "roundedPanel"; + //--------------------------- ComboBox ---------------------------- + String COMBO_BOX_TYPE = "comboBoxType"; + String ADAPTIVE_COMBO_BOX = "adaptiveComboBox"; + int GROUP_BUTTON_POSITION_INNER = 0; int GROUP_BUTTON_POSITION_LEFT = 1; int GROUP_BUTTON_POSITION_RIGHT = 2; diff --git a/designer-base/src/main/java/com/fine/theme/utils/FineUIStyle.java b/designer-base/src/main/java/com/fine/theme/utils/FineUIStyle.java index 5e15fffb0b..d2b64bea31 100644 --- a/designer-base/src/main/java/com/fine/theme/utils/FineUIStyle.java +++ b/designer-base/src/main/java/com/fine/theme/utils/FineUIStyle.java @@ -38,6 +38,7 @@ public interface FineUIStyle { String POPUP_MENU_TOOL_BAR = "popupMenuToolBar"; String POPUP_MENU_DROPDOWN = "dropdownPopupMenu"; String TRANSPARENT_TEXT_FIELD = "transparentTextField"; + String TRANSPARENT_BACKGROUND = "transparentBackground"; String PURE_LIST = "pureList"; String PURE_TREE = "pureTree"; String PASTEL_BUTTON = "pastelButton"; diff --git a/designer-base/src/main/java/com/fine/theme/utils/FineUIUtils.java b/designer-base/src/main/java/com/fine/theme/utils/FineUIUtils.java index 1ca238934e..bf48c66c6d 100644 --- a/designer-base/src/main/java/com/fine/theme/utils/FineUIUtils.java +++ b/designer-base/src/main/java/com/fine/theme/utils/FineUIUtils.java @@ -16,6 +16,7 @@ import javax.swing.UIManager; import java.awt.Color; import java.awt.Component; import java.awt.Composite; +import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GraphicsDevice; @@ -388,7 +389,7 @@ public class FineUIUtils { * 面板元素头部添加小标题 * * @param component 面板元素 - * @param title 标题文本 + * @param title 标题文本 * @return 包装面板 */ public static Component wrapComponentWithTitle(Component component, String title) { @@ -422,4 +423,16 @@ public class FineUIUtils { return new JLayer<>(new UIScrollPane(c, ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER), new CollapsibleScrollBarLayerUI(verticalPolicy, horizontalPolicy)); } + + /** + * 设置组件字体大小,已适配字体缩放 + * + * @param c 组件 + * @param size 字体大小 + */ + public static void setFontSize(Component c, int size) { + Font font = c.getFont(); + Font newSizeFont = font.deriveFont(font.getStyle(), scale(size)); + c.setFont(newSizeFont); + } } diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java index 82042e978c..6ea6b1775c 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java @@ -114,6 +114,8 @@ 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.fix; import static com.fine.swing.ui.layout.Layouts.row; +import static com.fine.theme.utils.FineClientProperties.COMBO_BOX_TYPE; +import static com.fine.theme.utils.FineClientProperties.ADAPTIVE_COMBO_BOX; import static com.fine.theme.utils.FineUIConstants.SCALE_FONT_SIZE_12; import static com.fr.design.i18n.Toolkit.i18nText; @@ -615,6 +617,7 @@ public class PreferencePane extends BasicPane { String[] undoTimes = {i18nText("Fine-Design_Basic_Max_Undo_Limit"), MAX_UNDO_LIMIT_5 + i18nText("Fine-Design_Basic_Time(s)"), MAX_UNDO_LIMIT_10 + i18nText("Fine-Design_Basic_Time(s)") , MAX_UNDO_LIMIT_15 + i18nText("Fine-Design_Basic_Time(s)"), MAX_UNDO_LIMIT_20 + i18nText("Fine-Design_Basic_Time(s)"), MAX_UNDO_LIMIT_50 + i18nText("Fine-Design_Basic_Time(s)")}; maxUndoLimit = new UIComboBox(undoTimes); + maxUndoLimit.putClientProperty(COMBO_BOX_TYPE, ADAPTIVE_COMBO_BOX); //不支持撤销则不能选择撤销可缓存,也不能设置最大撤销次数 supportUndoCheckBox.addActionListener(new ActionListener() { @@ -811,6 +814,7 @@ public class PreferencePane extends BasicPane { i++; } UIDictionaryComboBox languageComboBox = new UIDictionaryComboBox<>(keys, values); + languageComboBox.putClientProperty(COMBO_BOX_TYPE, ADAPTIVE_COMBO_BOX); languageComboBox.setFont(FRFont.getInstance("Dialog", Font.PLAIN, SCALE_FONT_SIZE_12));//为了在中文系统中显示韩文 return languageComboBox; } diff --git a/designer-base/src/main/java/com/fr/design/actions/template/NewWorkBookToolButtonAction.java b/designer-base/src/main/java/com/fr/design/actions/template/NewWorkBookToolButtonAction.java new file mode 100644 index 0000000000..15d7eaf9d1 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/actions/template/NewWorkBookToolButtonAction.java @@ -0,0 +1,31 @@ +package com.fr.design.actions.template; + +import com.fine.theme.icon.LazyIcon; +import com.fr.design.actions.UpdateAction; +import com.fr.design.mainframe.DesignerContext; + +import javax.swing.Icon; +import java.awt.event.ActionEvent; + +/** + * 工具按钮 - 新建报表文件 + * + * @author lemon + * @since + * Created on + */ +public class NewWorkBookToolButtonAction extends UpdateAction { + public NewWorkBookToolButtonAction() { + this.setName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_M_New_WorkBook")); + this.setSmallIcon(icon()); + } + + protected Icon icon() { + return new LazyIcon("add_worksheet"); + } + + @Override + public void actionPerformed(ActionEvent e) { + DesignerContext.getDesignerFrame().addAndActivateJTemplate(); + } +} diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/preview/CopyableJTable.java b/designer-base/src/main/java/com/fr/design/data/datapane/preview/CopyableJTable.java index a452a4d371..65e4123b5c 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/preview/CopyableJTable.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/preview/CopyableJTable.java @@ -72,7 +72,7 @@ public class CopyableJTable extends SortableJTable { public CopyableJTable(TableSorter tableModel) { super(tableModel); initListener(); - this.getTableHeader().setDefaultRenderer(new CopyableTableHeaderCellRenderer(this.getTableHeader().getDefaultRenderer())); + setShowGrid(true); } private void initListener() { diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/preview/PreviewTablePane.java b/designer-base/src/main/java/com/fr/design/data/datapane/preview/PreviewTablePane.java index ffac1388c6..ef7a81fb93 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/preview/PreviewTablePane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/preview/PreviewTablePane.java @@ -3,8 +3,10 @@ */ package com.fr.design.data.datapane.preview; +import com.fine.theme.icon.LazyIcon; +import com.fine.theme.utils.FineUIScale; +import com.fine.theme.utils.FineUIUtils; import com.fr.base.TableData; -import com.fr.base.svg.IconUtils; import com.fr.data.TableDataSource; import com.fr.data.desensitize.base.DesensitizationTableData; import com.fr.data.impl.DBTableData; @@ -67,6 +69,9 @@ import java.util.List; import java.util.Objects; import java.util.concurrent.CancellationException; +import static com.fine.swing.ui.layout.Layouts.cell; +import static com.fine.swing.ui.layout.Layouts.row; + /** * august: PreviewTablePane一共提供5个共有的静态方法,用来预览。 */ @@ -143,9 +148,9 @@ public class PreviewTablePane extends BasicPane { } private PreviewTablePane() { - this.setLayout(FRGUIPaneFactory.createBorderLayout()); + this.setLayout(new BorderLayout(0, FineUIScale.scale(10))); // northPane - this.add(initNorthPane(), BorderLayout.NORTH); + this.add(FineUIUtils.wrapComponentWithTitle(initNorthPane(), Toolkit.i18nText("Fine-Design_Basic_Data")), BorderLayout.NORTH); // centerPane this.add(initCenterPane(), BorderLayout.CENTER); // dialog @@ -174,20 +179,14 @@ public class PreviewTablePane extends BasicPane { * @return */ private JComponent initPreviewNumberPane() { - JPanel previewNumberPanel = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); + JPanel previewNumberPanel = new JPanel(new BorderLayout()); // 当前行数 - JPanel currentPreviewPanel = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); - currentPreviewPanel.add(new UILabel(Toolkit.i18nText("Fine-Design_Basic_Current_Preview_Rows") + ":")); currentRowsField = new UINumberField(); - currentPreviewPanel.add(currentRowsField); currentRowsField.setEditable(false); currentRowsField.setColumns(4); currentRowsField.setInteger(true); // 最大行数 - JPanel maxPanel = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); - maxPanel.add(new UILabel(Toolkit.i18nText("Fine-Design_Basic_Datasource_Maximum_Number_of_Preview_Rows") + ":")); maxPreviewNumberField = new UINumberField(); - maxPanel.add(maxPreviewNumberField); maxPreviewNumberField.setColumns(4); maxPreviewNumberField.setInteger(true); maxPreviewNumberField.setValue(DesignerEnvManager.getEnvManager().getMaxNumberOrPreviewRow()); @@ -198,14 +197,17 @@ public class PreviewTablePane extends BasicPane { // 刷新按钮 initRefreshLabel(); - previewNumberPanel.add(currentPreviewPanel); - previewNumberPanel.add(maxPanel); - previewNumberPanel.add(refreshLabel); + previewNumberPanel.add(row(20, + row(4, cell(new UILabel(Toolkit.i18nText("Fine-Design_Basic_Current_Preview_Rows") + ":")), cell(currentRowsField)), + row(4, cell(new UILabel(Toolkit.i18nText("Fine-Design_Basic_Datasource_Maximum_Number_of_Preview_Rows") + ":")), cell(maxPreviewNumberField)), + cell(refreshLabel) + ).getComponent()); + return previewNumberPanel; } private void initRefreshLabel() { - Icon refreshImage = IconUtils.readIcon("/com/fr/design/images/control/refresh"); + Icon refreshImage = new LazyIcon("refresh"); refreshLabel = new UILabel(refreshImage); refreshLabel.addMouseListener(refreshLabelMouseAdapter); } @@ -434,7 +436,6 @@ public class PreviewTablePane extends BasicPane { */ public static EmbeddedTableData previewTableData(TableData tableData, final int keyIndex, final int valueIndex) { PreviewTablePane previewTablePane = new PreviewTablePane(); - previewTablePane.setBorder(BorderFactory.createTitledBorder(Toolkit.i18nText("Fine-Design_Basic_Data"))); try { previewTablePane.populate(tableData); previewTablePane.resetPreviewTableColumnColor(); @@ -646,7 +647,6 @@ public class PreviewTablePane extends BasicPane { public static void previewDataModel(final DataModel dataModel, final int keyIndex, final int valueIndex) { final PreviewTablePane previewTablePane = new PreviewTablePane(); previewTablePane.dataModel = dataModel; - previewTablePane.setBorder(BorderFactory.createTitledBorder(Toolkit.i18nText("Fine-Design_Basic_Data"))); try { previewTablePane.setRowsLimitTableModel(); @@ -675,8 +675,6 @@ public class PreviewTablePane extends BasicPane { // 单个结果集的展示面板 PreviewTablePane previewTablePane = new PreviewTablePane(); previewTablePane.dataModel = nameDataModel; - // 数据 - previewTablePane.setBorder(BorderFactory.createTitledBorder(Toolkit.i18nText("Fine-Design_Basic_Data"))); try { // 带行数限制的数据集结果预览对象 previewTablePane.setRowsLimitTableModel(); diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/PreviewTableDesensitizationPane.java b/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/PreviewTableDesensitizationPane.java index 01c92e333f..8cfdebd201 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/PreviewTableDesensitizationPane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/PreviewTableDesensitizationPane.java @@ -1,6 +1,6 @@ package com.fr.design.data.datapane.preview.desensitization.view; -import com.fr.base.svg.IconUtils; +import com.fine.theme.icon.LazyIcon; import com.fr.design.constants.UIConstants; import com.fr.design.data.datapane.preview.PreviewTablePane; import com.fr.design.gui.ibutton.UIToggleButton; @@ -12,11 +12,14 @@ import com.fr.design.menu.ToolBarDef; import javax.swing.Icon; import javax.swing.JPanel; +import java.awt.BorderLayout; import java.awt.Component; -import java.awt.FlowLayout; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; +import static com.fine.swing.ui.layout.Layouts.cell; +import static com.fine.swing.ui.layout.Layouts.row; + /** * 数据集预览-脱敏配置面板,主要展示当前脱敏开启状态、当前脱敏设定数量等 * @@ -56,10 +59,8 @@ public class PreviewTableDesensitizationPane extends JPanel { * 初始化面板 */ private void initComponents() { - this.setLayout(new FlowLayout(FlowLayout.LEFT)); - this.add(initDesensitizationLabel()); - this.add(initToolBar()); - this.add(initPreviewButton()); + this.setLayout(new BorderLayout()); + this.add(row(cell(initDesensitizationLabel()), cell(initToolBar()), cell(initPreviewButton())).getComponent()); } /** @@ -100,7 +101,7 @@ public class PreviewTableDesensitizationPane extends JPanel { * @return */ private UIToggleButton initPreviewButton() { - previewToggle = new UIToggleButton(new Icon[]{IconUtils.readIcon("/com/fr/design/images/m_file/preview"), IconUtils.readIcon("/com/fr/design/images/m_file/preview")}, true); + previewToggle = new UIToggleButton(new Icon[]{new LazyIcon("preview"), new LazyIcon("preview")}, true); previewToggle.setToolTipText(Toolkit.i18nText("Fine-Design_Report_Desensitization_Preview")); previewToggle.setSelected(false); previewToggle.addActionListener(e -> { diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java b/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java index b4218705dc..96a7f12a9b 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java @@ -162,6 +162,10 @@ public class PreviewPerformedSqlPane extends JDialog implements ActionListener { public void windowClosing(WindowEvent e) { close(); } + @Override + public void windowActivated(WindowEvent e) { + toFront(); + } }); GUICoreUtils.centerWindow(this); diff --git a/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/DBTableDataPane.java b/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/DBTableDataPane.java index 480ba20aad..d587c2cafe 100644 --- a/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/DBTableDataPane.java +++ b/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/DBTableDataPane.java @@ -62,6 +62,8 @@ import com.fr.stable.ArrayUtils; import com.fr.stable.ParameterProvider; import com.fr.stable.StringUtils; import com.fr.workspace.WorkContext; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; import org.jetbrains.annotations.NotNull; import javax.swing.BorderFactory; @@ -88,6 +90,9 @@ import java.awt.event.KeyListener; import java.util.ArrayList; import java.util.List; +import static com.fine.theme.utils.FineClientProperties.COMBO_BOX_TYPE; +import static com.fine.theme.utils.FineClientProperties.ADAPTIVE_COMBO_BOX; + /** * @author rinoux * @version 10.0 @@ -335,6 +340,7 @@ public class DBTableDataPane extends AbstractTableDataPane implemen private void createToolbarEsdComponents(final UIToolbar editToolBar) { this.esdSettingsLabel = new UILabel(Toolkit.i18nText("Fine-Design_ESD_Cache_Settings")); this.esdConfigOption = new UIComboBox(StrategyConfigFrom.values()); + this.esdConfigOption.putClientProperty(COMBO_BOX_TYPE, ADAPTIVE_COMBO_BOX); this.esdEnabled = new UICheckBox(Toolkit.i18nText("Fine-Design_ESD_Enable_Cache")); this.barErrorTips = new UILabel(); this.barErrorTips.setForeground(Color.RED); @@ -647,6 +653,12 @@ public class DBTableDataPane extends AbstractTableDataPane implemen checkParameter(); } }); + dialog.addWindowListener(new WindowAdapter() { + @Override + public void windowActivated(WindowEvent e) { + dialog.toFront(); + } + }); dialog.setVisible(true); } } diff --git a/designer-base/src/main/java/com/fr/design/editor/ValueEditorPane.java b/designer-base/src/main/java/com/fr/design/editor/ValueEditorPane.java index b19e243850..354dc0313e 100644 --- a/designer-base/src/main/java/com/fr/design/editor/ValueEditorPane.java +++ b/designer-base/src/main/java/com/fr/design/editor/ValueEditorPane.java @@ -129,6 +129,7 @@ public class ValueEditorPane extends BasicPane implements UIObserver, GlobalName if (this.cards.length == 1) { this.remove(arrowButton); } + } public void setCurrentEditor(Class editorClass) { diff --git a/designer-base/src/main/java/com/fr/design/editor/editor/BooleanEditor.java b/designer-base/src/main/java/com/fr/design/editor/editor/BooleanEditor.java index 902a45d31d..1ce1b369a6 100644 --- a/designer-base/src/main/java/com/fr/design/editor/editor/BooleanEditor.java +++ b/designer-base/src/main/java/com/fr/design/editor/editor/BooleanEditor.java @@ -108,7 +108,7 @@ public class BooleanEditor extends Editor { @Override public String getIconId() { - return "type_boolean"; + return "type_boolean_popup"; } @Override diff --git a/designer-base/src/main/java/com/fr/design/editor/editor/ColumnIndexEditor.java b/designer-base/src/main/java/com/fr/design/editor/editor/ColumnIndexEditor.java index d9b2f1a2f7..ebd16e5d60 100644 --- a/designer-base/src/main/java/com/fr/design/editor/editor/ColumnIndexEditor.java +++ b/designer-base/src/main/java/com/fr/design/editor/editor/ColumnIndexEditor.java @@ -59,7 +59,7 @@ public class ColumnIndexEditor extends Editor { @Override public String getIconId(){ - return "ds_column_index"; + return "dsColumnIndex_popup"; } /** diff --git a/designer-base/src/main/java/com/fr/design/editor/editor/ColumnNameEditor.java b/designer-base/src/main/java/com/fr/design/editor/editor/ColumnNameEditor.java index 54f833b279..06dcca4ae5 100644 --- a/designer-base/src/main/java/com/fr/design/editor/editor/ColumnNameEditor.java +++ b/designer-base/src/main/java/com/fr/design/editor/editor/ColumnNameEditor.java @@ -78,7 +78,7 @@ public class ColumnNameEditor extends ColumnIndexEditor { @Override public String getIconId() { - return "ds_column_name"; + return "dsColumnName_popup"; } } \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/editor/editor/ColumnRowEditor.java b/designer-base/src/main/java/com/fr/design/editor/editor/ColumnRowEditor.java index 1fe29722f0..baa55e6b40 100644 --- a/designer-base/src/main/java/com/fr/design/editor/editor/ColumnRowEditor.java +++ b/designer-base/src/main/java/com/fr/design/editor/editor/ColumnRowEditor.java @@ -70,7 +70,7 @@ public class ColumnRowEditor extends Editor { @Override public String getIconId() { - return "cellelement"; + return "cellelement_popup"; } @Override diff --git a/designer-base/src/main/java/com/fr/design/editor/editor/ColumnSelectedEditor.java b/designer-base/src/main/java/com/fr/design/editor/editor/ColumnSelectedEditor.java index 00b92731b8..e6ffbadd66 100644 --- a/designer-base/src/main/java/com/fr/design/editor/editor/ColumnSelectedEditor.java +++ b/designer-base/src/main/java/com/fr/design/editor/editor/ColumnSelectedEditor.java @@ -89,7 +89,7 @@ public class ColumnSelectedEditor extends Editor implements Prep @Override public String getIconId() { - return "ds_column"; + return "bind_column_popup"; } @Override diff --git a/designer-base/src/main/java/com/fr/design/editor/editor/DateEditor.java b/designer-base/src/main/java/com/fr/design/editor/editor/DateEditor.java index c2ca7f3a9b..00e75b9e51 100644 --- a/designer-base/src/main/java/com/fr/design/editor/editor/DateEditor.java +++ b/designer-base/src/main/java/com/fr/design/editor/editor/DateEditor.java @@ -171,7 +171,7 @@ public class DateEditor extends Editor { @Override public String getIconId() { - return "date"; + return "date_popup"; } public void setUIDatePickerStyle(int style){ diff --git a/designer-base/src/main/java/com/fr/design/editor/editor/FormulaEditor.java b/designer-base/src/main/java/com/fr/design/editor/editor/FormulaEditor.java index 207562146f..860534cb5c 100644 --- a/designer-base/src/main/java/com/fr/design/editor/editor/FormulaEditor.java +++ b/designer-base/src/main/java/com/fr/design/editor/editor/FormulaEditor.java @@ -142,7 +142,7 @@ public class FormulaEditor extends Editor { @Override public String getIconId() { - return "formula"; + return "formula_popup"; } /** diff --git a/designer-base/src/main/java/com/fr/design/editor/editor/IntegerEditor.java b/designer-base/src/main/java/com/fr/design/editor/editor/IntegerEditor.java index 1c956719bb..db72713eb7 100644 --- a/designer-base/src/main/java/com/fr/design/editor/editor/IntegerEditor.java +++ b/designer-base/src/main/java/com/fr/design/editor/editor/IntegerEditor.java @@ -37,7 +37,7 @@ public class IntegerEditor extends NumberEditor { @Override public String getIconId(){ - return "ds_column_index"; + return "dsColumnIndex_popup"; } @Override diff --git a/designer-base/src/main/java/com/fr/design/editor/editor/NumberEditor.java b/designer-base/src/main/java/com/fr/design/editor/editor/NumberEditor.java index 9d049b08f0..632beff71f 100644 --- a/designer-base/src/main/java/com/fr/design/editor/editor/NumberEditor.java +++ b/designer-base/src/main/java/com/fr/design/editor/editor/NumberEditor.java @@ -112,7 +112,7 @@ public abstract class NumberEditor extends Editor { @Override public String getIconId(){ - return "type_double"; + return "type_double_popup"; } /** diff --git a/designer-base/src/main/java/com/fr/design/editor/editor/OldColumnIndexEditor.java b/designer-base/src/main/java/com/fr/design/editor/editor/OldColumnIndexEditor.java index e0361a7971..31a194d4c2 100644 --- a/designer-base/src/main/java/com/fr/design/editor/editor/OldColumnIndexEditor.java +++ b/designer-base/src/main/java/com/fr/design/editor/editor/OldColumnIndexEditor.java @@ -107,7 +107,7 @@ public class OldColumnIndexEditor extends Editor { @Override public String getIconId() { - return "ds_column"; + return "bind_column_popup"; } @Override diff --git a/designer-base/src/main/java/com/fr/design/editor/editor/ParameterEditor.java b/designer-base/src/main/java/com/fr/design/editor/editor/ParameterEditor.java index 3f399d1c98..cc02ceea50 100644 --- a/designer-base/src/main/java/com/fr/design/editor/editor/ParameterEditor.java +++ b/designer-base/src/main/java/com/fr/design/editor/editor/ParameterEditor.java @@ -58,7 +58,7 @@ public class ParameterEditor extends Editor { @Override public String getIconId() { - return "param"; + return "param_popup"; } @Override diff --git a/designer-base/src/main/java/com/fr/design/editor/editor/SpinnerIntegerEditor.java b/designer-base/src/main/java/com/fr/design/editor/editor/SpinnerIntegerEditor.java index c3eb305a50..03ba990b42 100644 --- a/designer-base/src/main/java/com/fr/design/editor/editor/SpinnerIntegerEditor.java +++ b/designer-base/src/main/java/com/fr/design/editor/editor/SpinnerIntegerEditor.java @@ -49,7 +49,7 @@ public class SpinnerIntegerEditor extends Editor { @Override public String getIconId(){ - return "ds_column_index"; + return "dsColumnIndex_popup"; } KeyListener textKeyListener = new KeyAdapter() { diff --git a/designer-base/src/main/java/com/fr/design/editor/editor/TextEditor.java b/designer-base/src/main/java/com/fr/design/editor/editor/TextEditor.java index 3108bbdd19..e3d0300bd9 100644 --- a/designer-base/src/main/java/com/fr/design/editor/editor/TextEditor.java +++ b/designer-base/src/main/java/com/fr/design/editor/editor/TextEditor.java @@ -149,7 +149,7 @@ public class TextEditor extends Editor { @Override public String getIconId() { - return "ds_column_name"; + return "dsColumnName_popup"; } /** diff --git a/designer-base/src/main/java/com/fr/design/file/MultiTemplateTabPane.java b/designer-base/src/main/java/com/fr/design/file/MultiTemplateTabPane.java index ef9fb8fcc6..c68bb5dbab 100644 --- a/designer-base/src/main/java/com/fr/design/file/MultiTemplateTabPane.java +++ b/designer-base/src/main/java/com/fr/design/file/MultiTemplateTabPane.java @@ -4,20 +4,28 @@ package com.fr.design.file; import com.fine.swing.ui.layout.Layouts; import com.fine.swing.ui.layout.Row; import com.fine.theme.icon.LazyIcon; +import com.fine.theme.utils.FineUIScale; import com.fine.theme.utils.FineUIStyle; +import com.formdev.flatlaf.util.ScaledEmptyBorder; import com.fr.base.vcs.DesignerMode; +import com.fr.design.ExtraDesignClassManager; import com.fr.design.actions.UpdateAction; import com.fr.design.actions.file.LocateAction; +import com.fr.design.actions.template.NewWorkBookToolButtonAction; import com.fr.design.constants.UIConstants; import com.fr.design.dialog.FineJOptionPane; -import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.fun.MenuHandler; +import com.fr.design.fun.MultiTemplateTabPaneHandler; import com.fr.design.gui.imenu.UIMenuItem; import com.fr.design.gui.imenu.UIPopupMenu; import com.fr.design.gui.imenu.UIScrollPopUpMenu; +import com.fr.design.gui.itoolbar.UIToolbar; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.JTemplate; import com.fr.design.mainframe.manager.search.TemplateTreeSearchManager; +import com.fr.design.menu.ShortCut; +import com.fr.design.menu.ToolBarDef; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.design.worker.WorkerManager; import com.fr.design.worker.save.CallbackSaveWorker; @@ -39,14 +47,17 @@ import javax.swing.ToolTipManager; import java.awt.AWTEvent; import java.awt.Color; import java.awt.Dimension; +import java.awt.FlowLayout; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; +import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Set; import static com.fine.theme.utils.FineClientProperties.BUTTON_TYPE_TOOLBAR_BUTTON; import static com.fine.theme.utils.FineUIScale.scale; @@ -79,8 +90,11 @@ public class MultiTemplateTabPane extends Row { /** * 前导动作区宽度 + * 最终宽度 = {@linkplain #SINGLE_BUTTON_WIDTH} * {@literal toolBar.getComponentCount()} */ - public static final int LEADING_WIDTH = 38; + public static int leadingWidth; + // 每个按钮固定宽度大小 + public static int SINGLE_BUTTON_WIDTH = 38; //每个标签页的最大的长度和最小长度。这些长度均为均分 @@ -114,6 +128,7 @@ public class MultiTemplateTabPane extends Row { private Icon clodeIcon = new LazyIcon("clear"); private boolean isShowList = false; private JButton leadingActionButton; + private final UIToolbar leadingToolBar = new UIToolbar(); //自动新建的模板B若没有进行任何编辑,切换到其他 // @@ -176,16 +191,29 @@ public class MultiTemplateTabPane extends Row { } } }); + preProcessMultiTemplateTabPane(); add( - Layouts.cell(new UIButton(new LazyIcon("add_worksheet"))).with(it -> { + Layouts.cell(getLeadingToolBar()).with(it -> { it.putClientProperty(BUTTON_TYPE, BUTTON_TYPE_TOOLBAR_BUTTON); + it.setOpaque(false); + it.setBorder(new ScaledEmptyBorder(3, -7, 3, -7)); FineUIStyle.setStyle(it, BUTTON_TAB_ACTION); - it.setFocusPainted(false); - leadingActionButton = it; }) ); } + /** + * 重置多工作簿面板 + */ + public void resetMultiTemplateTabPane() { + preProcessMultiTemplateTabPane(); + MultiTemplateTabPane.getInstance().repaint(); + } + + private void preProcessMultiTemplateTabPane() { + updateLeadingToolBar(); + } + /** * 为前导动作添加监听 * @@ -197,8 +225,8 @@ public class MultiTemplateTabPane extends Row { leadingActionButton.addActionListener(newTemplateAction); } - public void setLeadingActionEnable(boolean enable) { - leadingActionButton.setEnabled(enable); + public void setToolBarEnable(boolean enable) { + leadingToolBar.setEnabled(enable); } @@ -484,7 +512,7 @@ public class MultiTemplateTabPane extends Row { @Override public void paintComponent(Graphics g) { - double maxWidth = getWidth() - scale(TRAILING_WIDTH) - scale(LEADING_WIDTH); //最大宽度 + double maxWidth = getWidth() - scale(TRAILING_WIDTH) - scale(leadingWidth); //最大宽度 int maxTemplateNum = (int) (maxWidth) / scale(MINWIDTH); calMinAndMaxIndex(maxTemplateNum); calculateRealAverageWidth(maxWidth, maxTemplateNum); @@ -494,7 +522,7 @@ public class MultiTemplateTabPane extends Row { private void calculateClosePosition() { startX = new int[maxPaintIndex - minPaintIndex + 1]; - double templateStartX = scale(LEADING_WIDTH); + double templateStartX = scale(leadingWidth); for (int i = getViewRange().getFirst(); i <= getViewRange().getSecond(); i++) { int closePosition = (int) templateStartX + getTabWidth() - clodeIcon.getIconWidth() - GAP; startX[i - minPaintIndex] = closePosition; @@ -682,7 +710,7 @@ public class MultiTemplateTabPane extends Row { private boolean isOverListDown(int evtX) { - int maxWidth = getWidth() - scale(LEADING_WIDTH); + int maxWidth = getWidth() - scale(leadingWidth); return evtX >= (maxWidth + SMALLGAP) && evtX <= (getWidth() - SMALLGAP); } @@ -694,13 +722,13 @@ public class MultiTemplateTabPane extends Row { */ private boolean isOverBlank(int evtX) { int tabWidths = (maxPaintIndex - minPaintIndex + 1) * tabWidth; - int leftX = tabWidths + scale(LEADING_WIDTH); + int leftX = tabWidths + scale(leadingWidth); return evtX >= leftX && evtX <= getWidth() - scale(TRAILING_WIDTH); } private int getTemplateIndex(int evtX) { - int textX = scale(LEADING_WIDTH); + int textX = scale(leadingWidth); for (int i = minPaintIndex; i <= maxPaintIndex; i++) { int textWidth = tabWidth; if (evtX >= textX && evtX < textX + textWidth) { @@ -963,4 +991,74 @@ public class MultiTemplateTabPane extends Row { public Pair getViewRange() { return new Pair<>(minPaintIndex, maxPaintIndex); } + + /** + * 获取前导区多模板工具按钮 + * + * @return 工具按钮 + */ + public UIToolbar getLeadingToolBar() { + return this.leadingToolBar; + } + + /** + * 生成前导区多模板工具按钮 + */ + public void updateLeadingToolBar() { + createLeadingToolBarDef().updateToolBar(getLeadingToolBar()); + leadingWidth = getLeadingToolBar().getComponentCount() * SINGLE_BUTTON_WIDTH; + getLeadingToolBar().setLayout(new FlowLayout(FlowLayout.LEFT, FineUIScale.scale(14), 0)); + } + + /** + * 创建新建模板的前导区工具按钮 + * @return + */ + private ToolBarDef createLeadingToolBarDef() { + ToolBarDef toolBarDef = ShortCut.asToolBarDef(createNewTemplateShortCuts()); + insertLeadingToolButton(toolBarDef, MultiTemplateTabPaneHandler.LEADING_LOCATION); + return toolBarDef; + } + + /** + * 创建新建文件的按钮数组 + * @return + */ + public ShortCut[] createNewTemplateShortCuts() { + ArrayList shortCuts = new ArrayList(); + shortCuts.add(new NewWorkBookToolButtonAction()); + return shortCuts.toArray(new ShortCut[0]); + } + + + /** + * 插入插件中的按钮 + * @return + */ + protected void insertLeadingToolButton(ToolBarDef toolBarDef, String anchor) { + Set set = ExtraDesignClassManager.getInstance().getArray(MultiTemplateTabPaneHandler.MARK_STRING); + List target = new ArrayList<>(); + for (MultiTemplateTabPaneHandler handler : set) { + if (ComparatorUtils.equals(handler.category(), anchor)) { + target.add(handler); + } + } + + for (MultiTemplateTabPaneHandler handler : target) { + int insertPosition = handler.insertPosition(toolBarDef.getShortCutCount()); + if (insertPosition == MenuHandler.HIDE) { + return; + } + ShortCut shortCut = handler.shortcut(); + if (shortCut == null) { + continue; + } + + if (insertPosition == MenuHandler.LAST) { + toolBarDef.addShortCut(shortCut); + } else { + toolBarDef.insertShortCut(insertPosition, shortCut); + } + } + } } diff --git a/designer-base/src/main/java/com/fr/design/fun/MultiTemplateTabPaneHandler.java b/designer-base/src/main/java/com/fr/design/fun/MultiTemplateTabPaneHandler.java new file mode 100644 index 0000000000..c431cadaf3 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/fun/MultiTemplateTabPaneHandler.java @@ -0,0 +1,47 @@ +package com.fr.design.fun; + +import com.fr.design.menu.ShortCut; +import com.fr.stable.fun.mark.Mutable; + +/** + * 设计器 Multi_template 按钮插件接口 + * + * @author lemon + * @since + * Created on + */ +public interface MultiTemplateTabPaneHandler extends Mutable { + + String MARK_STRING = "MultiTemplateTabPaneHandler"; + + int CURRENT_LEVEL = 1; + + + int LAST = -1; + int HIDE =-2; + + String LEADING_LOCATION = "leading_location"; + String TRAILING_LOCATION = "trailing_location"; + + /** + * 插入工具按钮的位置 + * + * @param total 插入的位置 + * @return 插入位置,如果想放到最后,则返回-1 + */ + int insertPosition(int total); + + /** + * 所属的工具按钮分类 + * + * @return 分类工具按钮名 + */ + String category(); + + /** + * 具体的工具按钮项内容 + * + * @return 工具按钮项内容 + */ + ShortCut shortcut(); +} diff --git a/designer-base/src/main/java/com/fr/design/fun/impl/AbstractMultiTemplateTabPaneHandler.java b/designer-base/src/main/java/com/fr/design/fun/impl/AbstractMultiTemplateTabPaneHandler.java new file mode 100644 index 0000000000..c13a2af584 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/fun/impl/AbstractMultiTemplateTabPaneHandler.java @@ -0,0 +1,38 @@ +package com.fr.design.fun.impl; + +import com.fr.design.fun.MultiTemplateTabPaneHandler; +import com.fr.design.menu.ShortCut; +import com.fr.stable.fun.impl.AbstractProvider; +import com.fr.stable.fun.mark.API; + +/** + * 多模板工具按钮插件适配抽象类 + * + * @author lemon + * @since + * Created on + */ +@API(level = MultiTemplateTabPaneHandler.CURRENT_LEVEL) +public abstract class AbstractMultiTemplateTabPaneHandler extends AbstractProvider implements MultiTemplateTabPaneHandler { + /** + * 当前接口的API等级,用于判断是否需要升级插件 + * @return API等级 + */ + public int currentAPILevel() { + return CURRENT_LEVEL; + } + + @Override + public String mark4Provider() { + return this.getClass().getName(); + } + + /** + * 获取当前工具按钮对应的Action + * + * @return 工具按钮 Action + */ + public ShortCut shortcut() { + return null; + } +} diff --git a/designer-base/src/main/java/com/fr/design/gui/core/UserDefinedWidgetOption.java b/designer-base/src/main/java/com/fr/design/gui/core/UserDefinedWidgetOption.java index 40490702de..301c518355 100644 --- a/designer-base/src/main/java/com/fr/design/gui/core/UserDefinedWidgetOption.java +++ b/designer-base/src/main/java/com/fr/design/gui/core/UserDefinedWidgetOption.java @@ -1,8 +1,8 @@ package com.fr.design.gui.core; +import com.fine.theme.icon.LazyIcon; import javax.swing.Icon; -import com.fr.base.BaseUtils; import com.fr.form.ui.NameWidget; import com.fr.form.ui.Widget; @@ -21,7 +21,7 @@ public class UserDefinedWidgetOption extends WidgetOption { @Override public Icon optionIcon() { - return BaseUtils.readIcon("/com/fr/design/images/data/user_widget.png"); + return new LazyIcon("customButton"); } @Override diff --git a/designer-base/src/main/java/com/fr/design/gui/core/WidgetOption.java b/designer-base/src/main/java/com/fr/design/gui/core/WidgetOption.java index 5c6babf640..2dc0d630fc 100644 --- a/designer-base/src/main/java/com/fr/design/gui/core/WidgetOption.java +++ b/designer-base/src/main/java/com/fr/design/gui/core/WidgetOption.java @@ -1,5 +1,6 @@ package com.fr.design.gui.core; +import com.fine.theme.icon.LazyIcon; import com.fr.base.BaseUtils; import com.fr.form.ui.Button; import com.fr.form.ui.CheckBox; @@ -113,7 +114,7 @@ public abstract class WidgetOption implements Serializable { String name = nameIt.next(); WidgetConfig widgetConfig = mgr.getWidgetConfig(name); if (widgetConfig instanceof UserDefinedWidgetConfig) { - list.add(WidgetOptionFactory.createByWidgetClass(name, BaseUtils.readIcon("/com/fr/design/images/data/user_widget.png"), + list.add(WidgetOptionFactory.createByWidgetClass(name, new LazyIcon("customButton"), ((UserDefinedWidgetConfig) widgetConfig).getWidget().getClass())); } } diff --git a/designer-base/src/main/java/com/fr/design/gui/core/WidgetOptionFactory.java b/designer-base/src/main/java/com/fr/design/gui/core/WidgetOptionFactory.java index 9834d995a2..e58e9a4edf 100644 --- a/designer-base/src/main/java/com/fr/design/gui/core/WidgetOptionFactory.java +++ b/designer-base/src/main/java/com/fr/design/gui/core/WidgetOptionFactory.java @@ -1,7 +1,6 @@ package com.fr.design.gui.core; import com.fine.theme.icon.LazyIcon; -import com.fr.base.BaseUtils; import com.fr.base.svg.IconUtils; import com.fr.form.ui.Widget; @@ -10,7 +9,7 @@ import javax.swing.Icon; public class WidgetOptionFactory { public static WidgetOption createByWidgetClass(String optionName, Class widgetClass) { - return new CustomWidgetOption(optionName, BaseUtils.readIcon("/com/fr/design/images/data/user_widget.png"), widgetClass); + return new CustomWidgetOption(optionName, new LazyIcon("customButton"), widgetClass); } public static WidgetOption createByWidgetClass(String optionName, Icon optionIcon, Class widgetClass) { diff --git a/designer-base/src/main/java/com/fr/design/gui/frpane/FineTabbedPane.java b/designer-base/src/main/java/com/fr/design/gui/frpane/FineTabbedPane.java index 08cd1f5eb2..ac6a869a85 100644 --- a/designer-base/src/main/java/com/fr/design/gui/frpane/FineTabbedPane.java +++ b/designer-base/src/main/java/com/fr/design/gui/frpane/FineTabbedPane.java @@ -19,6 +19,8 @@ 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.FineClientProperties.PANEL_TYPE; +import static com.fine.theme.utils.FineClientProperties.ROUNDED_PANEL; /** * Tab面板组件 @@ -118,6 +120,7 @@ public class FineTabbedPane extends Column { private void initLayout() { cards = new CardLayout(); centerPane = new JPanel(cards); + centerPane.putClientProperty(PANEL_TYPE, ROUNDED_PANEL); tabComponents.forEach((key, value) -> { value.setOpaque(false); centerPane.add(value, key); diff --git a/designer-base/src/main/java/com/fr/design/gui/ibutton/UIButtonGroup.java b/designer-base/src/main/java/com/fr/design/gui/ibutton/UIButtonGroup.java index 1468e9255a..ddb402db2d 100644 --- a/designer-base/src/main/java/com/fr/design/gui/ibutton/UIButtonGroup.java +++ b/designer-base/src/main/java/com/fr/design/gui/ibutton/UIButtonGroup.java @@ -237,7 +237,6 @@ public class UIButtonGroup extends Column implements GlobalNameObserver, UIOb } protected void initButton(UIToggleButton labelButton, int index) { - labelButton.setBorder(new FineRoundBorder()); labelButton.setBorderPainted(false); labelButton.putClientProperty(BUTTON_TYPE, BUTTON_TYPE_GROUP); labelButton.putClientProperty(BUTTON_GROUP_POSITION, getGroupButtonPosition(index)); diff --git a/designer-base/src/main/java/com/fr/design/gui/iprogressbar/ProgressDialog.java b/designer-base/src/main/java/com/fr/design/gui/iprogressbar/ProgressDialog.java index 44e697d043..67f696569e 100644 --- a/designer-base/src/main/java/com/fr/design/gui/iprogressbar/ProgressDialog.java +++ b/designer-base/src/main/java/com/fr/design/gui/iprogressbar/ProgressDialog.java @@ -1,5 +1,6 @@ package com.fr.design.gui.iprogressbar; +import com.fine.theme.utils.FineUIScale; import com.fr.design.constants.UIConstants; import com.fr.design.dialog.UIDialog; import com.fr.design.gui.ilable.UILabel; @@ -58,7 +59,7 @@ public class ProgressDialog extends UIDialog { protected void initCenterDialog(Frame parent) { centerDialog = new JDialog(this); - centerDialog.setSize(new Dimension(482, 124)); + centerDialog.setSize(FineUIScale.scale(new Dimension(482, 124))); centerDialog.setUndecorated(true); centerDialog.setLocationRelativeTo(parent); centerDialog.getContentPane().add(progressPanel); @@ -66,7 +67,6 @@ public class ProgressDialog extends UIDialog { protected void initProgressBar() { progressBar = new JProgressBar(); - progressBar.setUI(new ModernUIProgressBarUI()); progressBar.setBorderPainted(false); progressBar.setOpaque(false); progressBar.setBorder(null); diff --git a/designer-base/src/main/java/com/fr/design/gui/itable/SortableJTable.java b/designer-base/src/main/java/com/fr/design/gui/itable/SortableJTable.java index 71ffa8832e..fd22f74521 100644 --- a/designer-base/src/main/java/com/fr/design/gui/itable/SortableJTable.java +++ b/designer-base/src/main/java/com/fr/design/gui/itable/SortableJTable.java @@ -6,5 +6,6 @@ public class SortableJTable extends JTable{ public SortableJTable(TableSorter tableModel){ super(tableModel); tableModel.setTableHeader(getTableHeader()); + setShowGrid(true); } } \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/gui/itree/filetree/FileTreeIcon.java b/designer-base/src/main/java/com/fr/design/gui/itree/filetree/FileTreeIcon.java index 4a2525d7c1..ca26e435aa 100644 --- a/designer-base/src/main/java/com/fr/design/gui/itree/filetree/FileTreeIcon.java +++ b/designer-base/src/main/java/com/fr/design/gui/itree/filetree/FileTreeIcon.java @@ -28,6 +28,7 @@ public class FileTreeIcon { public static final Icon FOLDER_OPEN_IMAGE_ICON = new LazyIcon("folder_open"); public static final Icon MODERN_CPT_FILE_IMAGE_ICON = new LazyIcon("cpt_icon"); public static final Icon MODERN_FRM_FILE_IMAGE_ICON = new LazyIcon("frm_icon"); + public static final Icon MODERN_FVS_FILE_IMAGE_ICON = new LazyIcon("fvs_icon"); public static final Icon FILE_IMAGE_ICON = UIManager.getIcon("FileView.fileIcon"); @@ -44,6 +45,10 @@ public class FileTreeIcon { public static final Icon MODERN_CHT_FILE_IMAGE_ICON = new LazyIcon("chtFile"); public static final Icon CPTX_ICON = new LazyIcon("cpt_icon"); + public static final Icon CPT_FILE_LOCK_ICON = new LazyIcon("cpt_locked"); + public static final Icon FRM_FILE_LOCK_ICON = new LazyIcon("frm_locked"); + public static final Icon FVS_FILE_LOCK_ICON = new LazyIcon("fvs_locked"); + // TODO: 以下Icon视觉暂未提供,需提供后替换 public static final Icon BLANK_IMAGE_ICON = BaseUtils.readIcon("/com/fr/design/images/gui/blank.gif"); public static final Icon FOLDER_HALF_IMAGE_ICON = IconUtils.readIcon("/com/fr/design/standard/fileicon/folder_half_authority.svg"); @@ -76,10 +81,6 @@ public class FileTreeIcon { new LockIcon(BaseUtils.readImage("/com/fr/design/images/gui/jpgFile.gif")); public static final LockIcon BMP_FILE_LOCK_ICON = new LockIcon(BaseUtils.readImage("/com/fr/design/images/gui/bmpFile.gif")); - public static final LockIcon CPT_FILE_LOCK_ICON = - new LockIcon(BaseUtils.readImage("/com/fr/base/images/oem/cptlocked.png")); - public static final LockIcon FRM_FILE_LOCK_ICON = - new LockIcon(BaseUtils.readImage("/com/fr/design/images/gui/frmlocked.png")); public static final LockIcon CHT_FILE_LOCK_ICON = new LockIcon(BaseUtils.readImage("/com/fr/design/images/gui/frmlocked.png")); /** @@ -110,6 +111,7 @@ public class FileTreeIcon { public final static int FRM_FILE = 12; //.form .frm public final static int CHT_FILE = 13; //.chart .cht public final static int CPTX_FILE = 14; //.cptx + public final static int FVS_FILE = 15; //.fvs public static Icon getIcon(File file) { return FileTreeIcon.getIcon(file, false); @@ -143,6 +145,20 @@ public class FileTreeIcon { return getIcon(node, showLock); } + /** + * 获取文件名对应的图标 + * + * @param filename 文件名 + * @return 文件的图标 + */ + public static Icon getIconByFileName(String filename) { + Icon icon = getExtraIcon(filename, false); + if (icon != null) { + return icon; + } + return getIcon(getFileType(filename), false); + } + /** * 获取文件节点对应的图标(含展开与否的属性) * @@ -298,6 +314,12 @@ public class FileTreeIcon { } else { return FileTreeIcon.MODERN_CHT_FILE_IMAGE_ICON; } + } else if (fileType == FVS_FILE) { // fvs + if (isLocked) { + return FileTreeIcon.FVS_FILE_LOCK_ICON; + } else { + return FileTreeIcon.MODERN_FVS_FILE_IMAGE_ICON; + } } else { if (isLocked) { return FileTreeIcon.FILE_LOCK_ICON; @@ -354,6 +376,8 @@ public class FileTreeIcon { return FRM_FILE; } else if (fileName.endsWith(".cht") || fileName.endsWith(".chart")) { return CHT_FILE; + } else if (fileName.endsWith(".fvs")) { + return FVS_FILE; } else { return TEXT_FILE; } diff --git a/designer-base/src/main/java/com/fr/design/gui/style/FollowingThemePane.java b/designer-base/src/main/java/com/fr/design/gui/style/FollowingThemePane.java index e464110b47..d4b7db8281 100644 --- a/designer-base/src/main/java/com/fr/design/gui/style/FollowingThemePane.java +++ b/designer-base/src/main/java/com/fr/design/gui/style/FollowingThemePane.java @@ -17,10 +17,10 @@ import com.fr.design.layout.TableLayoutHelper; import com.fr.design.mainframe.JTemplate; import com.fr.design.widget.FRWidgetFactory; -import javax.swing.BorderFactory; import javax.swing.JPanel; import java.awt.BorderLayout; import java.awt.Component; +import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; @@ -78,6 +78,7 @@ public class FollowingThemePane extends BasicPane implements UIObserver { TableLayoutHelper.createGapTableLayoutPane( new Component[][]{new Component[] { followingThemeLabel, FRGUIPaneFactory.createBorderLayoutNorthPaneWithComponent(followingThemeButtonGroup)}}, new double[] { p }, new double[] {FineUIScale.scale(SETTING_LABEL_WIDTH), f }, 10, 0); followingThemePane.setVisible(false); + followingThemePane.setPreferredSize(new Dimension(FineUIScale.scale(275), (int) followingThemePane.getPreferredSize().getHeight())); add(followingThemePane, BorderLayout.NORTH); container = FRGUIPaneFactory.createBorderLayout_S_Pane(); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/CenterRegionContainerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/CenterRegionContainerPane.java index 99a57b5b9f..35ff25489f 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/CenterRegionContainerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/CenterRegionContainerPane.java @@ -93,8 +93,6 @@ public class CenterRegionContainerPane extends JPanel { private MultiTemplateTabPane initTemplateTabPane() { MultiTemplateTabPane templateTabPane = MultiTemplateTabPane.getInstance(); - templateTabPane.addLeadingAction(e -> - DesignerContext.getDesignerFrame().addAndActivateJTemplate()); return templateTabPane; } @@ -123,6 +121,13 @@ public class CenterRegionContainerPane extends JPanel { plus.insertToCombineUpToolbar(combineUp); } + /** + * 重置多工作簿面板 + */ + private void resetMultiTemplateTablePane() { + MultiTemplateTabPane.getInstance().resetMultiTemplateTabPane(); + } + /** * 填充上工具栏的中的工具 @@ -221,6 +226,7 @@ public class CenterRegionContainerPane extends JPanel { */ protected void resetToolkitByPlus(ToolBarMenuDockPlus plus, ToolBarMenuDock ad, ToolKitConfigStrategy strategy) { + resetMultiTemplateTablePane(); resetCombineUpTooBar(ad.resetUpToolBar(plus), plus); if (toolbarComponent != null) { @@ -275,7 +281,7 @@ public class CenterRegionContainerPane extends JPanel { * 判断是否在权限编辑状态,若是在权限编辑状态,则需要有虚线框和关闭突变 */ protected void needToAddAuhtorityPaint() { - MultiTemplateTabPane.getInstance().setLeadingActionEnable(DesignModeContext.isAuthorityEditing()); + MultiTemplateTabPane.getInstance().setToolBarEnable(DesignModeContext.isAuthorityEditing()); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java index e20debacb7..6f867ccbf6 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java @@ -620,7 +620,7 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta this.ad.updateToolBarDef(); } - ToolBarMenuDock getToolBarMenuDock() { + public ToolBarMenuDock getToolBarMenuDock() { return this.ad; } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerUIModeConfig.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerUIModeConfig.java index cd99f728a2..99e7d0335b 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerUIModeConfig.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerUIModeConfig.java @@ -9,13 +9,18 @@ import com.fr.general.ComparatorUtils; */ public class DesignerUIModeConfig { private DesignerUIMode mode = AbsoluteMeasureUIMode.getInstance(); + private boolean uiDevMode = false; private static class DesignerUIModeConfigHolder { private static final DesignerUIModeConfig designerUIModeConfig = new DesignerUIModeConfig(); } private DesignerUIModeConfig() { + init(); + } + private void init() { + uiDevMode = Boolean.parseBoolean(System.getProperty("uiDevMode", "false")); } public static DesignerUIModeConfig getInstance() { @@ -32,6 +37,15 @@ public class DesignerUIModeConfig { return ComparatorUtils.equals(SimulateWebUIMode.getInstance(), mode); } + /** + * 判断是否是ui开发者模式 + * + * @return boolean + */ + public boolean isUIDevMode() { + return uiDevMode; + } + /** * 设置新ui模式 */ diff --git a/designer-base/src/main/java/com/fr/design/mainframe/backgroundpane/ColorBackgroundQuickPane.java b/designer-base/src/main/java/com/fr/design/mainframe/backgroundpane/ColorBackgroundQuickPane.java index 086a07da48..d0f8f88c93 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/backgroundpane/ColorBackgroundQuickPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/backgroundpane/ColorBackgroundQuickPane.java @@ -1,5 +1,6 @@ package com.fr.design.mainframe.backgroundpane; +import com.formdev.flatlaf.ui.FlatUIUtils; import com.fr.base.background.ColorBackground; import com.fr.design.event.UIObserverListener; import com.fr.design.layout.FRGUIPaneFactory; @@ -29,6 +30,7 @@ public class ColorBackgroundQuickPane extends BackgroundQuickPane { return false; } }; + colorSelectBox.setBackground(FlatUIUtils.getUIColor("background.normal", Color.WHITE)); this.add(colorSelectBox, BorderLayout.NORTH); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java b/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java index b15e7f9ed6..83ca502a1e 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java @@ -57,6 +57,7 @@ import com.fr.design.gui.imenu.UIMenu; import com.fr.design.gui.imenu.UIMenuBar; import com.fr.design.gui.itoolbar.UIToolbar; import com.fr.design.locale.impl.SupportLocaleImpl; +import com.fr.design.mainframe.DesignerUIModeConfig; import com.fr.design.mainframe.JTemplate; import com.fr.design.mainframe.platform.ServicePlatformAction; import com.fr.design.menu.MenuDef; @@ -295,7 +296,10 @@ public abstract class ToolBarMenuDock { } }, SupportLocaleImpl.COMMUNITY); - menuList.add(createLookAndFeel()); + // 当前仅UI开发者模式显示外观配置选项 + if (DesignerUIModeConfig.getInstance().isUIDevMode()) { + menuList.add(createLookAndFeel()); + } // 添加全部UpdateAction到actionmanager中 addAllUpdateActionsToList(menuList); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionsPanel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionsPanel.java index f97ec6803c..58393a3067 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionsPanel.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/FileVersionsPanel.java @@ -155,7 +155,7 @@ public class FileVersionsPanel extends BasicPane { DesignModeContext.switchTo(isExit ? DesignerMode.NORMAL : DesignerMode.VCS); // MutilTempalteTabPane & NewTemplatePane 是否可点 - MultiTemplateTabPane.getInstance().setLeadingActionEnable(!isExit); + MultiTemplateTabPane.getInstance().setToolBarEnable(!isExit); JTemplate currentEditingTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); if (currentEditingTemplate.isJWorkBook()) { diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java index 8340b53e01..ed6290b798 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java @@ -174,7 +174,6 @@ public class VcsMovePanel extends BasicPane { JPanel processPane = new JPanel(); JPanel body = FRGUIPaneFactory.createY_AXISBoxInnerContainer_L_Pane(); PROGRESS_BAR.setStringPainted(true); - PROGRESS_BAR.setUI(new ModernUIProgressBarUI()); PROGRESS_BAR.setBorderPainted(false); PROGRESS_BAR.setOpaque(false); PROGRESS_BAR.setBorder(null); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsProgressDialog.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsProgressDialog.java index 33b57e1f3e..8427d45569 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsProgressDialog.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsProgressDialog.java @@ -38,7 +38,6 @@ public class VcsProgressDialog{ }; JPanel body = FRGUIPaneFactory.createY_AXISBoxInnerContainer_L_Pane(); progressBar.setStringPainted(true); - progressBar.setUI(new ModernUIProgressBarUI()); progressBar.setBorderPainted(false); progressBar.setOpaque(false); progressBar.setBorder(null); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/widget/editors/DataBindingEditor.java b/designer-base/src/main/java/com/fr/design/mainframe/widget/editors/DataBindingEditor.java index 1a56928251..829292bf40 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/widget/editors/DataBindingEditor.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/widget/editors/DataBindingEditor.java @@ -159,6 +159,6 @@ public class DataBindingEditor extends Editor { @Override public String getIconId() { - return "bind_column"; + return "bind_column_popup"; } } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/widget/editors/DataTableEditor.java b/designer-base/src/main/java/com/fr/design/mainframe/widget/editors/DataTableEditor.java index d52d600a31..76ba836ca1 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/widget/editors/DataTableEditor.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/widget/editors/DataTableEditor.java @@ -83,7 +83,7 @@ public class DataTableEditor extends Editor { @Override public String getIconId() { - return "bind_column"; + return "bind_column_popup"; } } diff --git a/designer-base/src/main/java/com/fr/design/menu/ToolBarDef.java b/designer-base/src/main/java/com/fr/design/menu/ToolBarDef.java index 5f66743441..95d0d995a5 100644 --- a/designer-base/src/main/java/com/fr/design/menu/ToolBarDef.java +++ b/designer-base/src/main/java/com/fr/design/menu/ToolBarDef.java @@ -38,6 +38,18 @@ public class ToolBarDef { public ToolBarDef() { } + /** + * 插入工具按钮项 + * + * @param index 插入的位置 + * @param shortCut 工具按钮信息 + */ + public void insertShortCut(int index, ShortCut shortCut) { + int size = this.shortcutList.size(); + index = Math.min(index, size); + this.shortcutList.add(index, shortCut); + } + public int getShortCutCount() { return this.shortcutList.size(); } diff --git a/designer-base/src/main/java/com/fr/design/report/fit/BaseFitAttrPane.java b/designer-base/src/main/java/com/fr/design/report/fit/BaseFitAttrPane.java index 901f1b6010..128972b755 100644 --- a/designer-base/src/main/java/com/fr/design/report/fit/BaseFitAttrPane.java +++ b/designer-base/src/main/java/com/fr/design/report/fit/BaseFitAttrPane.java @@ -19,6 +19,8 @@ import java.util.stream.Collectors; import static com.fine.swing.ui.layout.Layouts.cell; import static com.fine.swing.ui.layout.Layouts.row; +import static com.fine.theme.utils.FineClientProperties.COMBO_BOX_TYPE; +import static com.fine.theme.utils.FineClientProperties.ADAPTIVE_COMBO_BOX; import static com.fr.design.i18n.Toolkit.i18nText; public abstract class BaseFitAttrPane extends BasicBeanPane { @@ -96,6 +98,7 @@ public abstract class BaseFitAttrPane extends BasicBeanPane { private void initItemChoose() { belowSetLabel = new UILabel(i18nText("Fine-Design_Report_Blow_Set")); itemChoose = new UIComboBox(getItemNames()); + itemChoose.putClientProperty(COMBO_BOX_TYPE, ADAPTIVE_COMBO_BOX); ItemListener itemListener = getItemListener(); itemChoose.addItemListener(itemListener); //以下设置横向布局 diff --git a/designer-base/src/main/java/com/fr/design/style/background/gradient/GradientBackgroundPane.java b/designer-base/src/main/java/com/fr/design/style/background/gradient/GradientBackgroundPane.java index 705a9f9eb9..ffd5588b8b 100644 --- a/designer-base/src/main/java/com/fr/design/style/background/gradient/GradientBackgroundPane.java +++ b/designer-base/src/main/java/com/fr/design/style/background/gradient/GradientBackgroundPane.java @@ -11,14 +11,11 @@ import com.fr.design.utils.gui.UIComponentUtils; import com.fr.design.widget.FRWidgetFactory; import com.fr.general.Background; -import javax.swing.BorderFactory; import javax.swing.ButtonGroup; import javax.swing.JPanel; -import javax.swing.SwingConstants; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import java.awt.BorderLayout; -import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -56,20 +53,20 @@ public class GradientBackgroundPane extends BackgroundDetailPane { toggle.add(top2bottom); JPanel jpanel = column( + 10, row( cell(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Drag_To_Select_Gradient"))), flex() ), - fix(100), row( - flex(), cell(gradientBar), flex() ), - fix(100), + fix(10), row( 5, cell(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Gradient_Direction") + ":")), + fix(20), cell(left2right), cell(top2bottom), flex() @@ -77,7 +74,7 @@ public class GradientBackgroundPane extends BackgroundDetailPane { ) ).getComponent(); - jpanel.setPreferredSize(FineUIScale.scale(new Dimension(600, 450))); + this.setLayout(new BorderLayout()); this.add(FineUIUtils.wrapComponentWithTitle(jpanel, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Style_Background_Choose_Gradient_Color"))); } diff --git a/designer-base/src/main/java/com/fr/design/widget/IconDefinePane.java b/designer-base/src/main/java/com/fr/design/widget/IconDefinePane.java index cface962b6..f22f1eb0a6 100644 --- a/designer-base/src/main/java/com/fr/design/widget/IconDefinePane.java +++ b/designer-base/src/main/java/com/fr/design/widget/IconDefinePane.java @@ -11,6 +11,8 @@ import com.fr.design.mainframe.DesignerContext; import com.fr.design.web.CustomIconPane; import com.fr.form.ui.WidgetInfoConfig; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; import javax.swing.Icon; import javax.swing.JPanel; import javax.swing.ImageIcon; @@ -47,6 +49,12 @@ public class IconDefinePane extends BasicPane { IconDefinePane.this.repaint(); } }); + editDialog.addWindowFocusListener(new WindowAdapter() { + @Override + public void windowGainedFocus(WindowEvent e) { + editDialog.toFront(); + } + }); editDialog.setVisible(true); } }); diff --git a/designer-base/src/main/java/com/fr/design/write/submit/DBManipulationPane.java b/designer-base/src/main/java/com/fr/design/write/submit/DBManipulationPane.java index b9aad8551e..f7f20e311c 100644 --- a/designer-base/src/main/java/com/fr/design/write/submit/DBManipulationPane.java +++ b/designer-base/src/main/java/com/fr/design/write/submit/DBManipulationPane.java @@ -3,6 +3,7 @@ package com.fr.design.write.submit; import com.fine.swing.ui.layout.Layouts; import com.fine.theme.icon.LazyIcon; import com.fine.swing.ui.layout.Spacer; +import com.fine.theme.utils.FineClientProperties; import com.fine.theme.utils.FineUIScale; import com.fine.theme.utils.FineUIUtils; import com.fr.base.BaseFormula; @@ -21,7 +22,6 @@ import com.fr.design.data.tabledata.tabledatapane.FormatExplanationPane; import com.fr.design.dialog.AttrScrollPane; import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.BasicPane; -import com.fr.design.dialog.BasicScrollPane; import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.dialog.FineJOptionPane; import com.fr.design.editor.ValueEditorPane; @@ -39,7 +39,6 @@ import com.fr.design.i18n.Toolkit; import com.fr.design.javascript.JavaScriptActionPane; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.DesignerContext; -import com.fr.design.scrollruler.ModLineBorder; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.ComparatorUtils; import com.fr.general.DateUtils; @@ -56,8 +55,9 @@ import com.fr.write.config.InsertConfig; import com.fr.write.config.IntelliDMLConfig; import com.fr.write.config.UpdateConfig; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; import javax.swing.AbstractCellEditor; -import javax.swing.BorderFactory; import javax.swing.DefaultCellEditor; import javax.swing.DefaultComboBoxModel; import javax.swing.Icon; @@ -80,8 +80,6 @@ import java.awt.BorderLayout; import java.awt.Component; import java.awt.Dimension; import java.awt.FlowLayout; -import java.awt.GridLayout; -import java.awt.Image; import java.awt.Window; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -98,10 +96,10 @@ import java.util.EventObject; import java.util.List; import java.util.stream.Collectors; -import static com.fine.swing.ui.layout.Layouts.fix; 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.column; +import static com.fine.swing.ui.layout.Layouts.row; //august:这个东西应该分成两类,一类是有单元格的情况,一类是没有单元格的情况 public class DBManipulationPane extends BasicBeanPane { @@ -157,6 +155,7 @@ public class DBManipulationPane extends BasicBeanPane { JPanel northPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); dmlConfigComboBox = new UIComboBox(DML_CONFIG_TYPES); + dmlConfigComboBox.putClientProperty(FineClientProperties.COMBO_BOX_TYPE, FineClientProperties.ADAPTIVE_COMBO_BOX); JPanel typePane = new JPanel(new BorderLayout()); typePane.add(row(10, @@ -166,7 +165,7 @@ public class DBManipulationPane extends BasicBeanPane { chooseTable.setTableNameComboBoxPopSize(FineUIScale.scale(160), FineUIScale.scale(320)); // peter:编辑的TablePane - JPanel editTablePane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + JPanel editTablePane = new JPanel(new BorderLayout(FineUIScale.scale(10), 0)); editTablePane.setBounds(0, 0, FineUIScale.scale(280), FineUIScale.scale(180)); keyColumnValuesTable = new KeyColumnNameValueTable(); editTablePane.add(new UIScrollPane(keyColumnValuesTable), BorderLayout.CENTER); @@ -345,6 +344,12 @@ public class DBManipulationPane extends BasicBeanPane { refreshConditionList(); } }); + dialog.addWindowFocusListener(new WindowAdapter() { + @Override + public void windowGainedFocus(WindowEvent e) { + dialog.toFront(); + } + }); dialog.setVisible(true); } }); @@ -705,6 +710,7 @@ public class DBManipulationPane extends BasicBeanPane { // 设置column1的editor columnsComboBox = new UIComboBox(new DefaultComboBoxModel()); + columnsComboBox.setRenderer(new UIComboBoxRenderer() { @Override diff --git a/designer-base/src/main/java/com/fr/start/common/DesignerOpenEmptyPanel.java b/designer-base/src/main/java/com/fr/start/common/DesignerOpenEmptyPanel.java index b42cc4ed8f..9ef7a9c1ef 100644 --- a/designer-base/src/main/java/com/fr/start/common/DesignerOpenEmptyPanel.java +++ b/designer-base/src/main/java/com/fr/start/common/DesignerOpenEmptyPanel.java @@ -1,36 +1,32 @@ package com.fr.start.common; +import com.fine.theme.utils.FineUIStyle; import com.fr.base.svg.IconUtils; import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.file.MultiTemplateTabPane; import com.fr.design.gui.ilable.UILabel; -import com.fr.design.i18n.DesignSizeI18nManager; import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.DesignerFrame; -import com.fr.design.utils.ColorUtils; import javax.swing.JButton; import javax.swing.JPanel; -import javax.swing.border.EmptyBorder; import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.RenderingHints; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import static com.fine.swing.ui.layout.Layouts.cell; +import static com.fine.swing.ui.layout.Layouts.flex; +import static com.fine.swing.ui.layout.Layouts.row; +import static com.fine.theme.utils.FineUIStyle.setStyle; + /** * created by Harrison on 2022/07/09 **/ public class DesignerOpenEmptyPanel extends JPanel { - private static final Color BUTTON_COLOR = new Color(63, 155, 249); - private static final int ARC = 4; - private final JPanel body; public DesignerOpenEmptyPanel() { @@ -38,20 +34,8 @@ public class DesignerOpenEmptyPanel extends JPanel { this.body = FRGUIPaneFactory.createBorderLayout_S_Pane(); UILabel createIcon = new UILabel(IconUtils.readIcon("/com/fr/design/startup/create_new_template.svg")); - JButton createButton = new JButton(Toolkit.i18nText("Fine-Design_New_Template")) { - @Override - public void paintComponent(Graphics g) { - Graphics2D g2d = (Graphics2D) g; - g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); - g2d.setColor(BUTTON_COLOR); - g2d.fillRoundRect(0, 0, getWidth(), getHeight(), ARC, ARC); - super.paintComponent(g2d); - } - }; - createButton.setPreferredSize(DesignSizeI18nManager.getInstance().i18nDimension("com.fr.start.common.DesignerOpenEmptyPanel.createButton")); - createButton.setForeground(Color.WHITE); - createButton.setBorderPainted(false); - createButton.setContentAreaFilled(false); + JButton createButton = new JButton(Toolkit.i18nText("Fine-Design_New_Template")); + setStyle(createButton, FineUIStyle.STYLE_PRIMARY); createButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { @@ -62,18 +46,14 @@ public class DesignerOpenEmptyPanel extends JPanel { MultiTemplateTabPane.getInstance().setTemTemplate(HistoryTemplateListPane.getInstance().getCurrentEditingTemplate()); } }); - createButton.setBorder(new EmptyBorder(0, 10, 0, 10)); - JPanel createButtonPanel = new JPanel(FRGUIPaneFactory.createCenterFlowLayout()); - createButtonPanel.add(createButton); - createButtonPanel.setBorder(new EmptyBorder(0, 0, 0, 0)); - createButtonPanel.setBackground(Color.WHITE); this.body.add(createIcon, BorderLayout.NORTH); - this.body.add(createButtonPanel, BorderLayout.SOUTH); + this.body.add(row( + flex(),cell(createButton),flex() + ).getComponent(), BorderLayout.SOUTH); setLayout(FRGUIPaneFactory.createCenterLayout(this.body, 0.4d, 0.4d)); - - ColorUtils.syncBackground(this, Color.WHITE); - + setStyle(this.body, FineUIStyle.NORMAL_COLOR); + setStyle(this, FineUIStyle.NORMAL_COLOR); add(this.body); } } diff --git a/designer-base/src/main/java/com/fr/startup/ui/StartupPageConstants.java b/designer-base/src/main/java/com/fr/startup/ui/StartupPageConstants.java index 8c414cecfe..2dab229850 100644 --- a/designer-base/src/main/java/com/fr/startup/ui/StartupPageConstants.java +++ b/designer-base/src/main/java/com/fr/startup/ui/StartupPageConstants.java @@ -10,7 +10,7 @@ public class StartupPageConstants { /** * 圆弧长度 */ - public static final int ARC_DIAMETER = 20; + public static final int ARC_DIAMETER = 10; /** * 内容宽度 diff --git a/designer-base/src/main/java/com/fr/startup/ui/StartupPageUtil.java b/designer-base/src/main/java/com/fr/startup/ui/StartupPageUtil.java index 153aa4ce0e..20bf1c8464 100644 --- a/designer-base/src/main/java/com/fr/startup/ui/StartupPageUtil.java +++ b/designer-base/src/main/java/com/fr/startup/ui/StartupPageUtil.java @@ -1,7 +1,8 @@ package com.fr.startup.ui; -import com.fr.base.svg.SVGIcon; +import com.fine.theme.icon.LazyIcon; import com.fr.design.env.DesignerWorkspaceType; +import com.fr.design.gui.itree.filetree.FileTreeIcon; import com.fr.log.FineLoggerFactory; import com.fr.stable.StringUtils; @@ -27,9 +28,9 @@ public class StartupPageUtil { public static Icon getIcon4RecentAreaByWorkspace(StartupWorkspaceBean workspaceBean) { if (workspaceBean.getType() == DesignerWorkspaceType.Local) { - return SVGIcon.readSVGIcon("/com/fr/design/startup/local_server_background_36.svg", 36, 36); + return new LazyIcon("local_server_background", 36); } - return SVGIcon.readSVGIcon("/com/fr/design/startup/remote_server_background_36.svg", 36, 36); + return new LazyIcon("remote_server_background", 36); } /** @@ -41,11 +42,11 @@ public class StartupPageUtil { public static Icon getIcon4DescAreaByWorkspace(StartupWorkspaceBean workspaceBean) { if (workspaceBean.getType() == DesignerWorkspaceType.Local) { - return SVGIcon.readSVGIcon("/com/fr/design/startup/local_server_background_28.svg", 28, 28); + return new LazyIcon("local_server_background", 28); } - return SVGIcon.readSVGIcon("/com/fr/design/startup/remote_server_background_28.svg", 28, 28); + return new LazyIcon("remote_server_background", 28); } - + /** * 返回 ip : port * diff --git a/designer-base/src/main/java/com/fr/startup/ui/StartupPageWindow.java b/designer-base/src/main/java/com/fr/startup/ui/StartupPageWindow.java index a2d9965e50..b758ac6c49 100644 --- a/designer-base/src/main/java/com/fr/startup/ui/StartupPageWindow.java +++ b/designer-base/src/main/java/com/fr/startup/ui/StartupPageWindow.java @@ -1,11 +1,14 @@ package com.fr.startup.ui; -import com.fr.base.svg.IconUtils; -import com.fr.concurrent.NamedThreadFactory; +import com.fine.theme.utils.FineUIStyle; +import com.fine.theme.utils.FineUIUtils; +import com.formdev.flatlaf.ui.FlatUIUtils; +import com.formdev.flatlaf.util.ScaledEmptyBorder; import com.fr.design.DesignerEnvManager; import com.fr.design.dialog.UIExpandDialog; import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.itree.filetree.FileTreeIcon; import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.VerticalFlowLayout; @@ -13,7 +16,6 @@ import com.fr.design.mainframe.messagecollect.StartErrorMessageCollector; import com.fr.design.mainframe.messagecollect.entity.DesignerErrorMessage; import com.fr.design.ui.util.UIUtil; import com.fr.design.utils.ColorUtils; -import com.fr.design.utils.ThemeUtils; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.exit.DesignerExiter; import com.fr.general.GeneralUtils; @@ -26,7 +28,6 @@ import com.fr.start.common.DesignerStartupContext; import com.fr.startup.metric.DesignerMetrics; import org.jetbrains.annotations.NotNull; -import javax.swing.BorderFactory; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JPanel; @@ -34,12 +35,10 @@ import javax.swing.JSeparator; import javax.swing.ScrollPaneConstants; import javax.swing.SwingConstants; import javax.swing.SwingWorker; -import javax.swing.border.EmptyBorder; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; -import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GridLayout; @@ -52,8 +51,8 @@ import java.awt.event.WindowEvent; import java.awt.image.BufferedImage; import java.util.List; import java.util.Map; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; + +import static com.fine.theme.utils.FineUIScale.scale; /** * 启动页 @@ -66,12 +65,12 @@ public class StartupPageWindow extends JFrame { private static final Color HOVER_COLOR = new Color(65, 155, 249); private static final Color SEP_COLOR = new Color(224, 224, 225); - private static final int GROUP_WIDTH = 600; + private static final int GROUP_WIDTH = scale(600); + private static final int WORKSPACE_PANEL_WIDTH = scale(180); private static final int RECENT_FILE_LIMIT = 6; - private static final int RECENT_FILE_SCROLL = RECENT_FILE_LIMIT + 1; - private static final int WORKSPACE_PANEL_WIDTH = 180; private static final int TITLE_FONT_SIZE = 24; private static final int ITEM_VERTICAL_GAP = 5; + private static final Dimension SCREEN_SIZE = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); @@ -117,7 +116,7 @@ public class StartupPageWindow extends JFrame { } private void initHeaderPanel() { - this.body = FRGUIPaneFactory.createBorderLayout_S_Pane(); + this.body = new JPanel(new BorderLayout(0, scale(20))); this.body.setBackground(new Color(0, 0, 0, 0)); JPanel headerPanel = createHeader(); this.body.add(headerPanel, BorderLayout.NORTH); @@ -169,9 +168,7 @@ public class StartupPageWindow extends JFrame { // Header UILabel label = new UILabel(Toolkit.i18nText("Fine-Design_Startup_Page_Select_Workspace")); - Font font = label.getFont(); - Font titleFont = font.deriveFont(font.getStyle(), TITLE_FONT_SIZE); - label.setFont(titleFont); + FineUIUtils.setFontSize(label, TITLE_FONT_SIZE); JPanel headerPanel = new JPanel(); LayoutManager centerFlowLayout = FRGUIPaneFactory.createCenterFlowLayout(); headerPanel.setLayout(centerFlowLayout); @@ -288,18 +285,18 @@ public class StartupPageWindow extends JFrame { } private JPanel generateRecentOpenPanel(StartupPageModel pageModel) { - + Color color = FlatUIUtils.getUIColor("fill.normal", Color.WHITE); JPanel recentOpenPanel = new JPanel() { @Override protected void paintComponent(Graphics g) { Graphics2D g2d = (Graphics2D) g; g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); - g2d.setColor(Color.WHITE); - g2d.fillRoundRect(0, 0, getWidth(), getHeight(), StartupPageConstants.ARC_DIAMETER, StartupPageConstants.ARC_DIAMETER); + g2d.setColor(color); + g2d.fillRoundRect(0, 0, getWidth(), getHeight(), 2 * StartupPageConstants.ARC_DIAMETER, 2 * StartupPageConstants.ARC_DIAMETER); } }; recentOpenPanel.setLayout(new BorderLayout()); - recentOpenPanel.setBorder(BorderFactory.createEmptyBorder(25, 25, 25, 6)); + recentOpenPanel.setBorder(new ScaledEmptyBorder(25, 25, 25, 6)); StartupWorkspaceBean workspaceInfo = pageModel.getSelectWorkspaceInfo(); JPanel workspaceWrapperYPanel = new JPanel(); @@ -309,15 +306,15 @@ public class StartupPageWindow extends JFrame { JPanel workspaceWrapperXPanel = new JPanel(); workspaceWrapperXPanel.setLayout(new FlowLayout()); - workspaceWrapperXPanel.setBorder(BorderFactory.createEmptyBorder()); - + JPanel workspacePanel = new JPanel(); - workspacePanel.setLayout(new BorderLayout(0, 15)); + workspacePanel.setLayout(new BorderLayout(0, scale(15))); UILabel workspaceIcon = new UILabel(StartupPageUtil.getIcon4RecentAreaByWorkspace(workspaceInfo)); workspacePanel.add(workspaceIcon, BorderLayout.NORTH); UILabel nameLabel = new UILabel(workspaceInfo.getName()); + FineUIUtils.setFontSize(nameLabel, 15); nameLabel.setHorizontalAlignment(SwingConstants.CENTER); workspacePanel.add(nameLabel, BorderLayout.SOUTH); workspaceWrapperXPanel.add(workspacePanel); @@ -340,18 +337,17 @@ public class StartupPageWindow extends JFrame { JComponent recentOpenGroupPanel = generateRecentOpenGroupPanel(pageModel, workspaceInfo); recentOpenPanel.add(recentOpenGroupPanel, BorderLayout.EAST); - ColorUtils.syncBackground(recentOpenPanel, Color.WHITE); - + ColorUtils.syncBackground(recentOpenPanel, color); + Dimension preferredSize = recentOpenPanel.getPreferredSize(); - recentOpenPanel.setPreferredSize(new Dimension(StartupPageConstants.CONTENT_WIDTH, (int) preferredSize.getHeight())); + recentOpenPanel.setPreferredSize(new Dimension(scale(StartupPageConstants.CONTENT_WIDTH), (int) preferredSize.getHeight())); JPanel recentOpenWrapperPanel = new JPanel(); recentOpenWrapperPanel.setName("recentOpenWrapper"); recentOpenWrapperPanel.setLayout(new BorderLayout(0, 0)); - recentOpenWrapperPanel.setBorder(new EmptyBorder(0, 0, 0, 20)); recentOpenWrapperPanel.add(recentOpenPanel, BorderLayout.CENTER); - ColorUtils.syncBackgroundIfAbsent(recentOpenWrapperPanel, new Color(0,0,0,0), ThemeUtils.BACK_COLOR); + FineUIStyle.setStyle(recentOpenWrapperPanel, FineUIStyle.TRANSPARENT_BACKGROUND); return recentOpenWrapperPanel; } @@ -372,8 +368,9 @@ public class StartupPageWindow extends JFrame { for (String recentFile : recentFiles) { JPanel recentItemPanel = new JPanel(); recentItemPanel.setLayout(new FlowLayout(FlowLayout.LEFT, ITEM_VERTICAL_GAP, 0)); - recentItemPanel.add(new UILabel(IconUtils.readIcon("/com/fr/design/standard/system/cpt"))); + recentItemPanel.add(new UILabel(FileTreeIcon.getIconByFileName(recentFile))); UILabel recentFileLabel = new UILabel(recentFile); + FineUIUtils.setFontSize(recentFileLabel, 13); Color recentFileLabelForeground = recentFileLabel.getForeground(); recentItemPanel.add(recentFileLabel); recentItemPanel.addMouseListener(new MouseAdapter() { @@ -406,7 +403,7 @@ public class StartupPageWindow extends JFrame { if (needScroll) { int scrollHeight = (int) Math.round(itemHeight * RECENT_FILE_LIMIT + ITEM_VERTICAL_GAP * (RECENT_FILE_LIMIT)); UIScrollPane scrollPane = new UIScrollPane(recentOpenGroupPanel, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); - scrollPane.setBorder(new EmptyBorder(0, 0, 0, 0)); + scrollPane.setBorder(new ScaledEmptyBorder(0, 0, 0, 0)); scrollPane.setPreferredSize(new Dimension(GROUP_WIDTH, scrollHeight)); return scrollPane; } @@ -414,10 +411,8 @@ public class StartupPageWindow extends JFrame { } private StartupPageWorkspacePanel generateWorkspacePanel(StartupPageModel pageModel) { - - StartupPageWorkspacePanel startupPageWorkspacePanel = new StartupPageWorkspacePanel(pageModel); - ColorUtils.syncBackgroundIfAbsent(startupPageWorkspacePanel, new Color(0, 0, 0, 0), ThemeUtils.BACK_COLOR); - return startupPageWorkspacePanel; + + return new StartupPageWorkspacePanel(pageModel); } protected LayoutManager getCenterLayout(JComponent centerBody) { diff --git a/designer-base/src/main/java/com/fr/startup/ui/StartupPageWorkspacePanel.java b/designer-base/src/main/java/com/fr/startup/ui/StartupPageWorkspacePanel.java index e41304e23b..2767f8945b 100644 --- a/designer-base/src/main/java/com/fr/startup/ui/StartupPageWorkspacePanel.java +++ b/designer-base/src/main/java/com/fr/startup/ui/StartupPageWorkspacePanel.java @@ -1,211 +1,223 @@ package com.fr.startup.ui; -import com.fr.base.svg.IconUtils; +import com.fine.swing.ui.layout.Column; +import com.fine.theme.icon.LazyIcon; +import com.fine.theme.utils.FineLayoutBuilder; +import com.fine.theme.utils.FineUIStyle; +import com.fine.theme.utils.FineUIUtils; +import com.formdev.flatlaf.ui.FlatUIUtils; +import com.formdev.flatlaf.util.ScaledEmptyBorder; import com.fr.design.components.tooltip.ModernToolTip; import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.itextfield.FRGraphics2D; import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; -import com.fr.design.utils.ColorUtils; import com.fr.start.common.DesignerStartupContext; import com.fr.startup.metric.DesignerMetrics; import com.fr.third.guava.collect.Lists; import org.jetbrains.annotations.NotNull; -import javax.swing.BorderFactory; import javax.swing.Icon; import javax.swing.JComponent; import javax.swing.JPanel; +import javax.swing.JScrollBar; import javax.swing.JToolTip; import javax.swing.JViewport; -import javax.swing.RepaintManager; import javax.swing.ScrollPaneConstants; -import javax.swing.border.EmptyBorder; import java.awt.BasicStroke; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; -import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; -import java.awt.GridLayout; import java.awt.Image; import java.awt.RenderingHints; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; +import java.awt.geom.Path2D; import java.awt.image.ImageObserver; +import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicReference; +import static com.fine.theme.utils.FineUIScale.scale; +import static com.fine.theme.utils.FineUIStyle.setStyle; import static com.fr.startup.ui.StartupPageConstants.ARC_DIAMETER; /** * created by Harrison on 2022/07/06 **/ public class StartupPageWorkspacePanel extends JPanel { - + /* color */ - - private static final Color SHALLOW_WHITE_COLOR = new Color(248, 250, 254); + private static final Color HOVER_COLOR = new Color(65, 155, 249); private static final Color PATH_COLOR = new Color(51, 51, 52, (int) Math.round(255 * 0.5)); - + /* 长度 */ private static final int SCROLL_BAR_WIDTH = 20; - private static final int CONTENT_WIDTH = StartupPageConstants.CONTENT_WIDTH + SCROLL_BAR_WIDTH; + private static final int CONTENT_WIDTH = scale(StartupPageConstants.CONTENT_WIDTH + SCROLL_BAR_WIDTH); private static final int BORDER_THIN = 2; - - private static final int ITEM_VERTICAL_GAP = 20; - private static final int SINGLE_ITEM_HEIGHT = 72; + + private static final int ITEM_VERTICAL_GAP = scale(20); + private static final int SINGLE_ITEM_HEIGHT = scale(72); private static final int SCROLL_HEIGHT = SINGLE_ITEM_HEIGHT * 4 + ITEM_VERTICAL_GAP * 4; - + private static final int NAME_LABEL_SIZE = 15; private static final int PATH_LABEL_SIZE = 10; - - private static final Dimension LABEL_DIMENSION = new Dimension(28, 28); - private static final Dimension PATH_DIMENSION = new Dimension(100, 20); - private static final Dimension SELECT_WORKSPACE_DIMENSION = new Dimension(210, 72); - private static final Dimension SELECT_CREATE_DIMENSION = new Dimension(60, 72); - + + private static final Dimension LABEL_DIMENSION = scale(new Dimension(28, 28)); + private static final Dimension PATH_DIMENSION = scale(new Dimension(100, 20)); + private static final Dimension SELECT_WORKSPACE_DIMENSION = scale(new Dimension(210, 72)); + private static final Dimension SELECT_CREATE_DIMENSION = scale(new Dimension(70, 72)); + private static final int COLUMN_LIMIT = 3; private static final int DOUBLE_CLICK_COUNT = 2; public static final int PARTITION_LIMIT = 2; - + /* model */ - + private final StartupPageModel pageModel; - + private final List> partitions; - + private Runnable selectWorkspaceRunnable; - + private final Runnable createNewTemplateRunnable; - + private final Runnable openEmptyTemplateRunnable; - + private JComponent contentPanel; - + private JPanel tailPanel; - + private boolean showMore = true; - + public StartupPageWorkspacePanel(StartupPageModel pageModel) { - - this.setLayout(new BorderLayout(0, 0)); - this.setBorder(new EmptyBorder(15, 0, 20, 0)); - + + this.setLayout(new BorderLayout(0, scale(10))); + this.pageModel = pageModel; - + List workspaceInfos = pageModel.getWorkspaceInfos(); this.partitions = Lists.partition(workspaceInfos, COLUMN_LIMIT); - + this.contentPanel = generateLimitContentPanel(partitions); + this.add(contentPanel, BorderLayout.NORTH); - + if (partitions.size() > PARTITION_LIMIT) { this.tailPanel = generateTailPanel(); this.add(tailPanel, BorderLayout.SOUTH); } - + this.createNewTemplateRunnable = pageModel.getCreateNewTemplateRunnable(); this.openEmptyTemplateRunnable = pageModel.getOpenEmptyTemplateRunnable(); - + + setStyle(contentPanel, FineUIStyle.TRANSPARENT_BACKGROUND); + setStyle(this, FineUIStyle.TRANSPARENT_BACKGROUND); + this.repaint(); } - + public void showLessContent() { - + this.remove(this.contentPanel); - + this.contentPanel = generateLimitContentPanel(this.partitions); this.add(contentPanel, BorderLayout.NORTH); } - + public void showMoreContent() { - + this.remove(this.contentPanel); - + this.contentPanel = generateUnLimitContentPanel(this.partitions); + this.contentPanel.setOpaque(false); this.add(contentPanel, BorderLayout.NORTH); } private JComponent generateUnLimitContentPanel(List> partitions) { - + JComponent panel = generateUnLimitContentPanel0(partitions); - ColorUtils.transparentBackground(panel); + setStyle(panel, FineUIStyle.TRANSPARENT_BACKGROUND); return panel; } - + private JComponent generateUnLimitContentPanel0(List> partitions) { - + JPanel workspaceDescWrapper = new JPanel(); - workspaceDescWrapper.setLayout(new BorderLayout(0, 0)); - workspaceDescWrapper.setBorder(new EmptyBorder(0, 0, 0, 0)); - - JPanel workspaceDescPanel = new JPanel(); - workspaceDescPanel.setLayout(new GridLayout(partitions.size(), 1, 0, 0)); + setStyle(workspaceDescWrapper, FineUIStyle.TRANSPARENT_BACKGROUND); + workspaceDescWrapper.setLayout(new BorderLayout()); + Column workSpaceDescPanel = new Column(); + workSpaceDescPanel.setSpacing(20); + setStyle(workSpaceDescPanel, FineUIStyle.TRANSPARENT_BACKGROUND); for (List partition : partitions) { JPanel partitionPanel = generatePartitionPanel(partition); - workspaceDescPanel.add(partitionPanel); + workSpaceDescPanel.add(partitionPanel); } boolean needScroll = partitions.size() > 4; if (needScroll) { - return generateScrollUnLimitContentPanel(workspaceDescWrapper, workspaceDescPanel); + return generateScrollUnLimitContentPanel(workspaceDescWrapper, workSpaceDescPanel); } - workspaceDescWrapper.add(workspaceDescPanel, BorderLayout.CENTER); - + workspaceDescWrapper.add(workSpaceDescPanel, BorderLayout.CENTER); return workspaceDescWrapper; } - + @NotNull private JPanel generateScrollUnLimitContentPanel(JPanel workspaceDescWrapper, JPanel workspaceDescPanel) { - + // 滚动条 - UIScrollPane scrollPane = new UIScrollPane(workspaceDescPanel, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); + UIScrollPane scrollPane = new UIScrollPane(workspaceDescPanel, + ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); + workspaceDescWrapper.setPreferredSize(new Dimension(CONTENT_WIDTH + SCROLL_BAR_WIDTH, SCROLL_HEIGHT)); + JViewport viewport = scrollPane.getViewport(); JViewport scrollViewport = new TransparentScrollViewPort(); // 动态画图 scrollViewport.addChangeListener(e -> repaintAll()); scrollViewport.setView(viewport.getView()); scrollPane.setViewport(scrollViewport); - scrollPane.setBorder(new EmptyBorder(10, 0, 0, 0)); - scrollPane.setPreferredSize(new Dimension(CONTENT_WIDTH, SCROLL_HEIGHT)); + // 透明度配置 + InReactiveScrollBar bar = new InReactiveScrollBar(); + scrollPane.setVerticalScrollBar(bar); + setStyle(bar, FineUIStyle.TRANSPARENT_BACKGROUND); + scrollViewport.setOpaque(false); + workspaceDescWrapper.add(scrollPane, BorderLayout.CENTER); - return workspaceDescWrapper; } - + private JPanel generateLimitContentPanel(List> partitions) { - - JPanel workspaceDescPanel = FRGUIPaneFactory.createVerticalFlowLayout_Pane(true, FlowLayout.LEFT, 0, 0); + + Column workspaceDescPanel = new Column(); + workspaceDescPanel.setSpacing(20); int limit = 2; for (int i = 0; i < partitions.size(); i++) { if (i >= limit) { break; } List partition = partitions.get(i); - + JPanel partitionPanel = generatePartitionPanel(partition); workspaceDescPanel.add(partitionPanel); } - - ColorUtils.transparentBackground(workspaceDescPanel); - + + setStyle(workspaceDescPanel, FineUIStyle.TRANSPARENT_BACKGROUND); return workspaceDescPanel; } - + @NotNull private JPanel generateTailPanel() { - + AtomicReference hoverBackColorRef = new AtomicReference<>(); - + JPanel tailPanel = new JPanel(); { tailPanel.setLayout(new FlowLayout(FlowLayout.RIGHT)); - tailPanel.setBorder(new EmptyBorder(0, 0, 0, 20)); JPanel showAllPanel = new JPanel() { @Override protected void paintComponent(Graphics g) { @@ -217,34 +229,17 @@ public class StartupPageWorkspacePanel extends JPanel { } } }; - showAllPanel.setLayout(new BorderLayout(5, 0)); - showAllPanel.setBorder(new EmptyBorder(5, 5, 5, 5)); - + showAllPanel.setLayout(new BorderLayout()); + UILabel fontLabel = new UILabel(Toolkit.i18nText("Fine-Design_Startup_Page_Expand_All")); - fontLabel.setForeground(HOVER_COLOR); - showAllPanel.setBackground(new Color(0, 0, 0, 0)); + fontLabel.setForeground(FlatUIUtils.getUIColor("brand.normal", HOVER_COLOR)); showAllPanel.add(fontLabel, BorderLayout.WEST); - - UILabel iconLabel = new UILabel(IconUtils.readIcon("/com/fr/design/startup/show_more.svg")); + setStyle(showAllPanel, FineUIStyle.TRANSPARENT_BACKGROUND); + + UILabel iconLabel = new UILabel(new LazyIcon("show_more")); showAllPanel.add(iconLabel, BorderLayout.EAST); - - Color showAllBackground = showAllPanel.getBackground(); - - showAllPanel.addMouseListener(new MouseAdapter() { - @Override - public void mouseEntered(MouseEvent e) { - Color hoverBackColor = new Color(217, 235, 254); - hoverBackColorRef.set(hoverBackColor); - repaintAll(); - } - @Override - public void mouseExited(MouseEvent e) { - hoverBackColorRef.set(null); - ColorUtils.syncBackground(showAllPanel, showAllBackground); - repaintAll(); - } - + showAllPanel.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { doShowAllAction(fontLabel, iconLabel); @@ -252,172 +247,132 @@ public class StartupPageWorkspacePanel extends JPanel { }); tailPanel.add(showAllPanel); Dimension preferredSize = tailPanel.getPreferredSize(); - tailPanel.setPreferredSize(new Dimension(CONTENT_WIDTH, (int) preferredSize.getHeight())); + tailPanel.setPreferredSize(new Dimension(scale(StartupPageConstants.CONTENT_WIDTH), (int) preferredSize.getHeight())); } + setStyle(tailPanel, FineUIStyle.TRANSPARENT_BACKGROUND); return tailPanel; } - + @NotNull private JPanel generatePartitionPanel(List partition) { - - JPanel partitionPanelWrapper = new JPanel(); - partitionPanelWrapper.setBorder(new EmptyBorder(10,0,10,0)); - partitionPanelWrapper.setLayout(new BorderLayout()); - - JPanel partitionPanel = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane(0, 20, 0); - partitionPanel.setName("partitionPanel"); - + + List workSpacePaneList = new ArrayList<>(); for (StartupWorkspaceBean workspaceInfo : partition) { - + JPanel workspaceItemDesc = FRGUIPaneFactory.createBorderLayout_S_Pane(); - + layoutSelectWorkspacePanel(workspaceInfo, workspaceItemDesc); - + layoutSelectAndCreatePanel(workspaceInfo, workspaceItemDesc); - - partitionPanel.add(workspaceItemDesc); - - Dimension preferredSize = partitionPanel.getPreferredSize(); - partitionPanel.setPreferredSize(new Dimension(CONTENT_WIDTH, (int) preferredSize.getHeight())); + + setStyle(workspaceItemDesc, FineUIStyle.TRANSPARENT_BACKGROUND); + + workSpacePaneList.add(workspaceItemDesc); } - - partitionPanelWrapper.add(partitionPanel, BorderLayout.CENTER); + + JPanel singleRow = FineLayoutBuilder.createCommonTableLayout(3, 20, 0, workSpacePaneList); + singleRow.setName("partitionPanel"); + + JPanel partitionPanelWrapper = FineLayoutBuilder.asBorderLayoutWrapped(singleRow); + setStyle(singleRow, FineUIStyle.TRANSPARENT_BACKGROUND); + setStyle(partitionPanelWrapper, FineUIStyle.TRANSPARENT_BACKGROUND); return partitionPanelWrapper; } - + private void layoutSelectWorkspacePanel(StartupWorkspaceBean workspaceInfo, JPanel workspaceItemDesc) { - + // 选择工作目录 // 图标 / 分隔符 / 说明-进入 // 选择并新建 AtomicReference borderColorRef = new AtomicReference<>(null); - + JPanel selectWorkspacePanel = new JPanel() { @Override public JToolTip createToolTip() { return new ModernToolTip(); } - + @Override protected void paintComponent(Graphics g) { Graphics2D g2d = (Graphics2D) g; g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); - Color borderColor = borderColorRef.get(); - - Color backColor = Color.WHITE; + + Color backColor = FlatUIUtils.getUIColor("fill.normal", Color.WHITE); g2d.setColor(backColor); - // 直角和圆角上下叠合在一起 - int rectOffset = 10; - int roundOffset = 15; - // 填充一个直角 - g2d.fillRoundRect(0, 0, getWidth() - rectOffset, getHeight(), ARC_DIAMETER, ARC_DIAMETER); - // 填充一个圆角 - g2d.fillRoundRect(getWidth() - roundOffset, 0, roundOffset, getHeight(), 0, 0); + Path2D path2D = FineUIUtils.createLeftRoundRectangle(0, 0, this.getWidth(), this.getHeight(), ARC_DIAMETER); + g2d.fill(path2D); + + Color borderColor = borderColorRef.get(); paintBorderIfHover(g2d, borderColor, backColor); } - + /** * 当悬浮的时候,将边框展示出来 - * 会叠合,然后填充中间 - * - * |----【-|--】 - * | A 【C| B】 - * |----【-|--】 - * - * 见上面有两种线,分别是 A-| 和 B-【 - * 这里会将 A 和 B 叠在一起,中间则存在 C,然后将 C 的部分扩大一点,然后填充上背景 - * 则形成下面这种图形 - * - * |----】 - * |----】 - * * @param g2d 绘画 * @param borderColor 边框颜色 * @param backColor 背景颜色 */ private void paintBorderIfHover(Graphics2D g2d, Color borderColor, Color backColor) { - + if (borderColor != null) { g2d.setColor(borderColor); g2d.setStroke(new BasicStroke(BORDER_THIN)); - // 需要一个修正值 - int strokeOffset = BORDER_THIN / 2; - // 直角和圆角上下叠合在一起 - int rectOffset = 10; - int roundOffset = 15; - // 画一个圆角 - int fixRoundWidth = getWidth() - rectOffset; - int fixRoundHeight = getHeight() - BORDER_THIN; - g2d.drawRoundRect(strokeOffset, strokeOffset, fixRoundWidth, fixRoundHeight, ARC_DIAMETER, ARC_DIAMETER); - - g2d.setColor(backColor); - - // 绘制一个矩形,覆盖住多余的相交线 - // 需要考虑上下的线宽 - int coverHeight = getHeight() - (BORDER_THIN * 2); - // 偏左一点的 fixedX - int fixedX = getWidth() - roundOffset - BORDER_THIN; - // 圆角和直角相交的区域 - int coverWidth = 15; - g2d.fillRect(fixedX, BORDER_THIN, coverWidth, coverHeight); - - g2d.setColor(borderColor); - g2d.drawLine(getWidth() / 2, strokeOffset, getWidth(), strokeOffset); - g2d.drawLine(getWidth() / 2, getHeight() - strokeOffset, getWidth(), getHeight() - strokeOffset); - g2d.drawLine(getWidth() - strokeOffset, strokeOffset, getWidth() - strokeOffset, getHeight() - strokeOffset); + FlatUIUtils.setRenderingHints(g2d); + Path2D path2D = FineUIUtils.createLeftRoundRectangle(0, 0, + getWidth() - BORDER_THIN, getHeight() - BORDER_THIN, ARC_DIAMETER); + g2d.draw(path2D); } } }; - selectWorkspacePanel.setLayout(new BorderLayout(0,0)); + selectWorkspacePanel.setLayout(new BorderLayout()); selectWorkspacePanel.setToolTipText(Toolkit.i18nText("Fine-Design_Startup_Page_Double_Click_Enter_Workspace")); - selectWorkspacePanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); + selectWorkspacePanel.setBorder(new ScaledEmptyBorder(10, 10, 10, 10)); { - + JPanel iconPanel = FRGUIPaneFactory.createBorderLayout_L_Pane(); - iconPanel.setBorder(new EmptyBorder(0, 10, 0, 10)); Icon icon = StartupPageUtil.getIcon4DescAreaByWorkspace(workspaceInfo); UILabel label = new UILabel(icon); label.setPreferredSize(LABEL_DIMENSION); iconPanel.add(label, BorderLayout.CENTER); + iconPanel.setOpaque(false); selectWorkspacePanel.add(iconPanel, BorderLayout.WEST); - + // desc / >箭头 JPanel descPanel = new JPanel(); + descPanel.setOpaque(false); descPanel.setLayout(FRGUIPaneFactory.createM_BorderLayout()); - descPanel.setBorder(new EmptyBorder(0, 10, 0, 0)); JPanel simpleDescPanelWrapper = FRGUIPaneFactory.createVerticalFlowLayout_Pane(true, FlowLayout.CENTER, 0, 0); JPanel simpleDescPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); UILabel nameLabel = new UILabel(workspaceInfo.getName()); - Font font = nameLabel.getFont(); - Font newSizeFont = font.deriveFont(font.getStyle(), NAME_LABEL_SIZE); - nameLabel.setFont(newSizeFont); + FineUIUtils.setFontSize(nameLabel, NAME_LABEL_SIZE); nameLabel.setPreferredSize(PATH_DIMENSION); Color nameForeground = nameLabel.getForeground(); simpleDescPanel.add(nameLabel,BorderLayout.NORTH); - + UILabel pathLabel = new UILabel(workspaceInfo.getPath()); pathLabel.setPreferredSize(PATH_DIMENSION); - Font pathFont = pathLabel.getFont(); - pathLabel.setFont(pathFont.deriveFont(pathFont.getStyle(), PATH_LABEL_SIZE)); + FineUIUtils.setFontSize(pathLabel, PATH_LABEL_SIZE); Color pathColor = PATH_COLOR; pathLabel.setForeground(pathColor); simpleDescPanel.add(pathLabel, BorderLayout.SOUTH); + simpleDescPanel.setOpaque(false); simpleDescPanelWrapper.add(simpleDescPanel); - + simpleDescPanelWrapper.setOpaque(false); + descPanel.add(simpleDescPanelWrapper, BorderLayout.WEST); - + MouseAdapter selectWorkspaceMouseListener = new MouseAdapter() { @Override public void mouseEntered(MouseEvent e) { - Color hoverColor = HOVER_COLOR; + Color hoverColor = FlatUIUtils.getUIColor("brand.normal", HOVER_COLOR); borderColorRef.set(hoverColor); nameLabel.setForeground(hoverColor); pathLabel.setForeground(hoverColor ); repaintAll(); } - + @Override public void mouseExited(MouseEvent e) { borderColorRef.set(Color.WHITE); @@ -436,10 +391,10 @@ public class StartupPageWorkspacePanel extends JPanel { } doSwitchWorkspace(workspaceInfo); } - + }; - - UILabel arrowLabel = new UILabel(IconUtils.readIcon("/com/fr/design/startup/more.svg")) { + + UILabel arrowLabel = new UILabel(new LazyIcon("more_arrow", 20)) { @Override public JToolTip createToolTip() { return new ModernToolTip(); @@ -449,13 +404,13 @@ public class StartupPageWorkspacePanel extends JPanel { arrowLabel.addMouseListener(new MouseAdapter() { @Override public void mouseEntered(MouseEvent e) { - arrowLabel.setIcon(IconUtils.readIcon("/com/fr/design/startup/more_hover.svg")); + arrowLabel.setIcon(new LazyIcon("more_arrow_hover", 20)); selectWorkspaceMouseListener.mouseEntered(e); } - + @Override public void mouseExited(MouseEvent e) { - arrowLabel.setIcon(IconUtils.readIcon("/com/fr/design/startup/more.svg")); + arrowLabel.setIcon(new LazyIcon("more_arrow", 20)); selectWorkspaceMouseListener.mouseExited(e); } @@ -465,18 +420,16 @@ public class StartupPageWorkspacePanel extends JPanel { } }); descPanel.add(arrowLabel, BorderLayout.EAST); - selectWorkspacePanel.add(descPanel, BorderLayout.CENTER); selectWorkspacePanel.addMouseListener(selectWorkspaceMouseListener); } - - ColorUtils.syncBackground(selectWorkspacePanel, Color.WHITE); + selectWorkspacePanel.setPreferredSize(SELECT_WORKSPACE_DIMENSION); workspaceItemDesc.add(selectWorkspacePanel, BorderLayout.WEST); } - + private void layoutSelectAndCreatePanel(StartupWorkspaceBean workspaceInfo, JPanel workspaceItemDesc) { - + // 选择并新建 AtomicReference borderColorRef = new AtomicReference<>(null); JPanel selectAndCreatePanel = new JPanel() { @@ -489,58 +442,43 @@ public class StartupPageWorkspacePanel extends JPanel { protected void paintComponent(Graphics g) { Graphics2D g2d = (Graphics2D) g; g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); - Color borderColor = borderColorRef.get(); - - Color backColor = SHALLOW_WHITE_COLOR; + + Color backColor = FlatUIUtils.getUIColor("fill.deep", Color.GRAY); g2d.setColor(backColor); - - // 见 layoutSelectWorkspacePanel 部分的分析 - // 直角和圆角上下叠合在一起 - int rectOffset = 10; - int roundOffset = 15; - int strokeOffset = BORDER_THIN / 2; - int fixedRoundOffset = roundOffset + strokeOffset; - g2d.fillRoundRect(0, 0, getWidth() - rectOffset, getHeight(), 0, 0); - g2d.fillRoundRect(getWidth() - fixedRoundOffset, 0, roundOffset, getHeight(), ARC_DIAMETER, ARC_DIAMETER); + Path2D shape = FineUIUtils.createRightRoundRectangle(0, 0, this.getWidth(), this.getHeight(), ARC_DIAMETER); + g2d.fill(shape); + + Color borderColor = borderColorRef.get(); if (borderColor != null) { g2d.setColor(borderColor); g2d.setStroke(new BasicStroke(BORDER_THIN)); - - int borderOffset = BORDER_THIN * 2; - // 画画的笔触需要调整一下 - g2d.drawRoundRect(strokeOffset, strokeOffset, getWidth() - borderOffset, getHeight() - BORDER_THIN, ARC_DIAMETER, ARC_DIAMETER); - g2d.setColor(backColor); - int fillWidth = 15; - g2d.fillRect(0, 0, fillWidth, getHeight()); - - g2d.setColor(borderColor); - g2d.drawLine(strokeOffset, strokeOffset, fillWidth, strokeOffset); - g2d.drawLine(strokeOffset, getHeight() - strokeOffset, fillWidth, getHeight() - strokeOffset); - g2d.drawLine(strokeOffset, strokeOffset, strokeOffset, getHeight() - strokeOffset); + FlatUIUtils.setRenderingHints(g2d); + Path2D path2D = FineUIUtils.createRightRoundRectangle(0, 0, + getWidth() - BORDER_THIN, getHeight() - BORDER_THIN, ARC_DIAMETER); + g2d.draw(path2D); } } - + }; selectAndCreatePanel.setToolTipText(Toolkit.i18nText("Fine-Design_Startup_Page_Enter_Workspace_And_Create")); - selectAndCreatePanel.setBorder(new EmptyBorder(0, 0, 0, 0)); selectAndCreatePanel.setLayout(new BorderLayout()); { - UILabel label = new UILabel(IconUtils.readIcon("/com/fr/design/standard/system/add")); + UILabel label = new UILabel(new LazyIcon("add", 20)); label.setPreferredSize(new Dimension(ARC_DIAMETER, ARC_DIAMETER)); - label.setForeground(HOVER_COLOR); + label.setForeground(FlatUIUtils.getUIColor("brand.normal", HOVER_COLOR)); selectAndCreatePanel.add(label, BorderLayout.CENTER); selectAndCreatePanel.addMouseListener(new MouseAdapter() { @Override public void mouseEntered(MouseEvent e) { - borderColorRef.set(HOVER_COLOR); - label.setIcon(IconUtils.readIcon("/com/fr/design/standard/system/add_hover.svg")); + borderColorRef.set(FlatUIUtils.getUIColor("brand.normal", HOVER_COLOR)); + label.setIcon(new LazyIcon("add_hover", 20)); repaintAll(); } - + @Override public void mouseExited(MouseEvent e) { borderColorRef.set(null); - label.setIcon(IconUtils.readIcon("/com/fr/design/standard/system/add")); + label.setIcon(new LazyIcon("add", 20)); repaintAll(); } @Override @@ -550,73 +488,91 @@ public class StartupPageWorkspacePanel extends JPanel { } }); } - ColorUtils.syncBackground(selectAndCreatePanel, Color.GREEN); selectAndCreatePanel.setPreferredSize(SELECT_CREATE_DIMENSION); workspaceItemDesc.add(selectAndCreatePanel, BorderLayout.EAST); } - + public void setSelectWorkspaceRunnable(Runnable selectWorkspaceRunnable) { - + this.selectWorkspaceRunnable = selectWorkspaceRunnable; } - + private void doOpenEmptyTemplate(StartupWorkspaceBean workspaceInfo) { - + pageModel.setSelectWorkspaceInfo(workspaceInfo); openEmptyTemplateRunnable.run(); - + DesignerMetrics designerMetrics = DesignerStartupContext.getInstance().getDesignerMetrics(); designerMetrics.getStatistic().recordOpenEmptyTemplate(); } - + private void doSwitchWorkspace(StartupWorkspaceBean workspaceInfo) { - + StartupWorkspaceBean lastWorkspaceInfo = pageModel.getSelectWorkspaceInfo(); // selectWorkspaceRunnable pageModel.setSelectWorkspaceInfo(workspaceInfo); selectWorkspaceRunnable.run(); - + DesignerMetrics designerMetrics = DesignerStartupContext.getInstance().getDesignerMetrics(); designerMetrics.getStatistic().recordSwitchWorkspace(lastWorkspaceInfo, workspaceInfo); } - + private void doShowAllAction(UILabel fontLabel, UILabel iconLabel) { - + if (showMore) { fontLabel.setText(Toolkit.i18nText("Fine-Design_Startup_Page_Collapse_Workspace")); - iconLabel.setIcon(IconUtils.readIcon("/com/fr/design/startup/show_less.svg")); + iconLabel.setIcon(new LazyIcon("show_less")); showMoreContent(); showMore = !showMore; } else { fontLabel.setText(Toolkit.i18nText("Fine-Design_Startup_Page_Expand_All")); - iconLabel.setIcon(IconUtils.readIcon("/com/fr/design/startup/show_more.svg")); + iconLabel.setIcon(new LazyIcon("show_more")); showLessContent(); showMore = !showMore; } DesignerMetrics designerMetrics = DesignerStartupContext.getInstance().getDesignerMetrics(); designerMetrics.getStatistic().recordShowAllAction(); - + repaintAll(); } - + private void repaintAll() { - + this.getRootPane().repaint(); } - + /** * 支持透明的滚动视图 */ - private class TransparentScrollViewPort extends JViewport { - + private static class TransparentScrollViewPort extends JViewport { + /** - * 从而屏蔽掉 {@link RepaintManager.PaintManager#paintDoubleBuffered(JComponent, Image, Graphics, int, int, int, int)} - * * @return 创建一个不会实际画图的 Graphics */ @Override public Graphics getGraphics() { - + + Graphics graphics = super.getGraphics(); + return new FRGraphics2D((Graphics2D) graphics) { + @Override + public boolean drawImage(Image img, int x, int y, ImageObserver observer) { + return true; + } + }; + } + } + + /** + * 支持透明的滚动条 + */ + private static class InReactiveScrollBar extends JScrollBar { + + /** + * @return 创建一个不会实际画图的 Graphics + */ + @Override + public Graphics getGraphics() { + Graphics graphics = super.getGraphics(); return new FRGraphics2D((Graphics2D) graphics) { @Override diff --git a/designer-base/src/main/resources/com/fine/theme/icon/add_hover.svg b/designer-base/src/main/resources/com/fine/theme/icon/add_hover.svg new file mode 100644 index 0000000000..f1e8fadf5d --- /dev/null +++ b/designer-base/src/main/resources/com/fine/theme/icon/add_hover.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/designer-base/src/main/resources/com/fine/theme/icon/editor/bind_column_popup.svg b/designer-base/src/main/resources/com/fine/theme/icon/editor/bind_column_popup.svg new file mode 100644 index 0000000000..bcd71fb0f2 --- /dev/null +++ b/designer-base/src/main/resources/com/fine/theme/icon/editor/bind_column_popup.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/designer-base/src/main/resources/com/fine/theme/icon/editor/bind_column_popup_diable.svg b/designer-base/src/main/resources/com/fine/theme/icon/editor/bind_column_popup_diable.svg new file mode 100644 index 0000000000..fc9d1026f1 --- /dev/null +++ b/designer-base/src/main/resources/com/fine/theme/icon/editor/bind_column_popup_diable.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/designer-base/src/main/resources/com/fine/theme/icon/editor/cellelement_popup.svg b/designer-base/src/main/resources/com/fine/theme/icon/editor/cellelement_popup.svg new file mode 100644 index 0000000000..c127f55106 --- /dev/null +++ b/designer-base/src/main/resources/com/fine/theme/icon/editor/cellelement_popup.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/designer-base/src/main/resources/com/fine/theme/icon/editor/cellelement_popup_disable.svg b/designer-base/src/main/resources/com/fine/theme/icon/editor/cellelement_popup_disable.svg new file mode 100644 index 0000000000..ebb08ad44a --- /dev/null +++ b/designer-base/src/main/resources/com/fine/theme/icon/editor/cellelement_popup_disable.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/designer-base/src/main/resources/com/fine/theme/icon/editor/date_popup.svg b/designer-base/src/main/resources/com/fine/theme/icon/editor/date_popup.svg new file mode 100644 index 0000000000..a2eb69bb6e --- /dev/null +++ b/designer-base/src/main/resources/com/fine/theme/icon/editor/date_popup.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/designer-base/src/main/resources/com/fine/theme/icon/editor/date_popup_disable.svg b/designer-base/src/main/resources/com/fine/theme/icon/editor/date_popup_disable.svg new file mode 100644 index 0000000000..e23f132741 --- /dev/null +++ b/designer-base/src/main/resources/com/fine/theme/icon/editor/date_popup_disable.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/designer-base/src/main/resources/com/fine/theme/icon/editor/ds_column_index.svg b/designer-base/src/main/resources/com/fine/theme/icon/editor/dsColumnIndex.svg similarity index 100% rename from designer-base/src/main/resources/com/fine/theme/icon/editor/ds_column_index.svg rename to designer-base/src/main/resources/com/fine/theme/icon/editor/dsColumnIndex.svg diff --git a/designer-base/src/main/resources/com/fine/theme/icon/editor/ds_column_index_disable.svg b/designer-base/src/main/resources/com/fine/theme/icon/editor/dsColumnIndex_disable.svg similarity index 100% rename from designer-base/src/main/resources/com/fine/theme/icon/editor/ds_column_index_disable.svg rename to designer-base/src/main/resources/com/fine/theme/icon/editor/dsColumnIndex_disable.svg diff --git a/designer-base/src/main/resources/com/fine/theme/icon/editor/dsColumnIndex_popup.svg b/designer-base/src/main/resources/com/fine/theme/icon/editor/dsColumnIndex_popup.svg new file mode 100644 index 0000000000..a33796e5b2 --- /dev/null +++ b/designer-base/src/main/resources/com/fine/theme/icon/editor/dsColumnIndex_popup.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/designer-base/src/main/resources/com/fine/theme/icon/editor/dsColumnIndex_popup_disable.svg b/designer-base/src/main/resources/com/fine/theme/icon/editor/dsColumnIndex_popup_disable.svg new file mode 100644 index 0000000000..ce15b5e060 --- /dev/null +++ b/designer-base/src/main/resources/com/fine/theme/icon/editor/dsColumnIndex_popup_disable.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/designer-base/src/main/resources/com/fine/theme/icon/editor/ds_column_name.svg b/designer-base/src/main/resources/com/fine/theme/icon/editor/dsColumnName.svg similarity index 100% rename from designer-base/src/main/resources/com/fine/theme/icon/editor/ds_column_name.svg rename to designer-base/src/main/resources/com/fine/theme/icon/editor/dsColumnName.svg diff --git a/designer-base/src/main/resources/com/fine/theme/icon/editor/ds_column_name_disable.svg b/designer-base/src/main/resources/com/fine/theme/icon/editor/dsColumnName_disable.svg similarity index 100% rename from designer-base/src/main/resources/com/fine/theme/icon/editor/ds_column_name_disable.svg rename to designer-base/src/main/resources/com/fine/theme/icon/editor/dsColumnName_disable.svg diff --git a/designer-base/src/main/resources/com/fine/theme/icon/editor/dsColumnName_popup.svg b/designer-base/src/main/resources/com/fine/theme/icon/editor/dsColumnName_popup.svg new file mode 100644 index 0000000000..c3fc1f8340 --- /dev/null +++ b/designer-base/src/main/resources/com/fine/theme/icon/editor/dsColumnName_popup.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/designer-base/src/main/resources/com/fine/theme/icon/editor/dsColumnName_popup_disable.svg b/designer-base/src/main/resources/com/fine/theme/icon/editor/dsColumnName_popup_disable.svg new file mode 100644 index 0000000000..979d386e8b --- /dev/null +++ b/designer-base/src/main/resources/com/fine/theme/icon/editor/dsColumnName_popup_disable.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/designer-base/src/main/resources/com/fine/theme/icon/editor/param_popup.svg b/designer-base/src/main/resources/com/fine/theme/icon/editor/param_popup.svg new file mode 100644 index 0000000000..c9b5eb0be4 --- /dev/null +++ b/designer-base/src/main/resources/com/fine/theme/icon/editor/param_popup.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/designer-base/src/main/resources/com/fine/theme/icon/editor/param_popup_disable.svg b/designer-base/src/main/resources/com/fine/theme/icon/editor/param_popup_disable.svg new file mode 100644 index 0000000000..d149d239e3 --- /dev/null +++ b/designer-base/src/main/resources/com/fine/theme/icon/editor/param_popup_disable.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/designer-base/src/main/resources/com/fine/theme/icon/editor/type_boolean_popup.svg b/designer-base/src/main/resources/com/fine/theme/icon/editor/type_boolean_popup.svg new file mode 100644 index 0000000000..ee6835ce2e --- /dev/null +++ b/designer-base/src/main/resources/com/fine/theme/icon/editor/type_boolean_popup.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/designer-base/src/main/resources/com/fine/theme/icon/editor/type_boolean_popup_disable.svg b/designer-base/src/main/resources/com/fine/theme/icon/editor/type_boolean_popup_disable.svg new file mode 100644 index 0000000000..ac36746fb4 --- /dev/null +++ b/designer-base/src/main/resources/com/fine/theme/icon/editor/type_boolean_popup_disable.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/designer-base/src/main/resources/com/fine/theme/icon/editor/type_double_popup.svg b/designer-base/src/main/resources/com/fine/theme/icon/editor/type_double_popup.svg new file mode 100644 index 0000000000..0beab4511b --- /dev/null +++ b/designer-base/src/main/resources/com/fine/theme/icon/editor/type_double_popup.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/designer-base/src/main/resources/com/fine/theme/icon/editor/type_double_popup_disable.svg b/designer-base/src/main/resources/com/fine/theme/icon/editor/type_double_popup_disable.svg new file mode 100644 index 0000000000..460ea67827 --- /dev/null +++ b/designer-base/src/main/resources/com/fine/theme/icon/editor/type_double_popup_disable.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/designer-base/src/main/resources/com/fine/theme/icon/filetree/filetype/fvs_locked.svg b/designer-base/src/main/resources/com/fine/theme/icon/filetree/filetype/fvs_locked.svg new file mode 100644 index 0000000000..1213c7fde6 --- /dev/null +++ b/designer-base/src/main/resources/com/fine/theme/icon/filetree/filetype/fvs_locked.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/designer-base/src/main/resources/com/fine/theme/icon/filetree/filetype/svgFile.svg b/designer-base/src/main/resources/com/fine/theme/icon/filetree/filetype/svgFile.svg new file mode 100644 index 0000000000..639a7cea91 --- /dev/null +++ b/designer-base/src/main/resources/com/fine/theme/icon/filetree/filetype/svgFile.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/designer-base/src/main/resources/com/fine/theme/icon/filetree/filetype/svgFile_disable.svg b/designer-base/src/main/resources/com/fine/theme/icon/filetree/filetype/svgFile_disable.svg new file mode 100644 index 0000000000..0ac3765b6d --- /dev/null +++ b/designer-base/src/main/resources/com/fine/theme/icon/filetree/filetype/svgFile_disable.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/designer-base/src/main/resources/com/fine/theme/icon/insert/formula_popup.svg b/designer-base/src/main/resources/com/fine/theme/icon/insert/formula_popup.svg new file mode 100644 index 0000000000..f3a13f1e43 --- /dev/null +++ b/designer-base/src/main/resources/com/fine/theme/icon/insert/formula_popup.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/designer-base/src/main/resources/com/fine/theme/icon/insert/formula_popup_disable.svg b/designer-base/src/main/resources/com/fine/theme/icon/insert/formula_popup_disable.svg new file mode 100644 index 0000000000..2516806535 --- /dev/null +++ b/designer-base/src/main/resources/com/fine/theme/icon/insert/formula_popup_disable.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/designer-base/src/main/resources/com/fine/theme/icon/propertiestab/floatelement_popup.svg b/designer-base/src/main/resources/com/fine/theme/icon/propertiestab/floatelement_popup.svg new file mode 100644 index 0000000000..c5febced52 --- /dev/null +++ b/designer-base/src/main/resources/com/fine/theme/icon/propertiestab/floatelement_popup.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/designer-base/src/main/resources/com/fine/theme/icon/propertiestab/floatelement_popup_disable.svg b/designer-base/src/main/resources/com/fine/theme/icon/propertiestab/floatelement_popup_disable.svg new file mode 100644 index 0000000000..e0d55fca02 --- /dev/null +++ b/designer-base/src/main/resources/com/fine/theme/icon/propertiestab/floatelement_popup_disable.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/designer-base/src/main/resources/com/fine/theme/icon/saveFile.svg b/designer-base/src/main/resources/com/fine/theme/icon/saveFile.svg new file mode 100644 index 0000000000..6da83ea77d --- /dev/null +++ b/designer-base/src/main/resources/com/fine/theme/icon/saveFile.svg @@ -0,0 +1,3 @@ + + + diff --git a/designer-base/src/main/resources/com/fine/theme/icon/saveFile_disable.svg b/designer-base/src/main/resources/com/fine/theme/icon/saveFile_disable.svg new file mode 100644 index 0000000000..cdc9c4b08d --- /dev/null +++ b/designer-base/src/main/resources/com/fine/theme/icon/saveFile_disable.svg @@ -0,0 +1,3 @@ + + + diff --git a/designer-base/src/main/resources/com/fine/theme/icon/startup/local_server_background.svg b/designer-base/src/main/resources/com/fine/theme/icon/startup/local_server_background.svg new file mode 100644 index 0000000000..f4fbedca90 --- /dev/null +++ b/designer-base/src/main/resources/com/fine/theme/icon/startup/local_server_background.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/designer-base/src/main/resources/com/fine/theme/icon/startup/more.svg b/designer-base/src/main/resources/com/fine/theme/icon/startup/more.svg new file mode 100755 index 0000000000..65f7b7c701 --- /dev/null +++ b/designer-base/src/main/resources/com/fine/theme/icon/startup/more.svg @@ -0,0 +1,3 @@ + + + diff --git a/designer-base/src/main/resources/com/fine/theme/icon/startup/more_hover.svg b/designer-base/src/main/resources/com/fine/theme/icon/startup/more_hover.svg new file mode 100644 index 0000000000..5b4ee1d6fd --- /dev/null +++ b/designer-base/src/main/resources/com/fine/theme/icon/startup/more_hover.svg @@ -0,0 +1,3 @@ + + + diff --git a/designer-base/src/main/resources/com/fine/theme/icon/startup/remote_server_background.svg b/designer-base/src/main/resources/com/fine/theme/icon/startup/remote_server_background.svg new file mode 100644 index 0000000000..7313efc9c4 --- /dev/null +++ b/designer-base/src/main/resources/com/fine/theme/icon/startup/remote_server_background.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/designer-base/src/main/resources/com/fine/theme/icon/startup/show_less.svg b/designer-base/src/main/resources/com/fine/theme/icon/startup/show_less.svg new file mode 100755 index 0000000000..b929630e7f --- /dev/null +++ b/designer-base/src/main/resources/com/fine/theme/icon/startup/show_less.svg @@ -0,0 +1,3 @@ + + + diff --git a/designer-base/src/main/resources/com/fine/theme/icon/startup/show_more.svg b/designer-base/src/main/resources/com/fine/theme/icon/startup/show_more.svg new file mode 100755 index 0000000000..1b7c059d97 --- /dev/null +++ b/designer-base/src/main/resources/com/fine/theme/icon/startup/show_more.svg @@ -0,0 +1,3 @@ + + + diff --git a/designer-base/src/main/resources/com/fine/theme/icon/toolbar/filter_popup.svg b/designer-base/src/main/resources/com/fine/theme/icon/toolbar/filter_popup.svg index f5dec3450d..e294913b77 100644 --- a/designer-base/src/main/resources/com/fine/theme/icon/toolbar/filter_popup.svg +++ b/designer-base/src/main/resources/com/fine/theme/icon/toolbar/filter_popup.svg @@ -1,4 +1,11 @@ - - - + + + + + + + + + + diff --git a/designer-base/src/main/resources/com/fine/theme/icon/toolbar/filter_popup_disable.svg b/designer-base/src/main/resources/com/fine/theme/icon/toolbar/filter_popup_disable.svg new file mode 100644 index 0000000000..2b0ef959ff --- /dev/null +++ b/designer-base/src/main/resources/com/fine/theme/icon/toolbar/filter_popup_disable.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/designer-base/src/main/resources/com/fine/theme/icon/toolbar/saveAs.svg b/designer-base/src/main/resources/com/fine/theme/icon/toolbar/saveAs.svg index 059e2e6b42..c3a40df4e7 100644 --- a/designer-base/src/main/resources/com/fine/theme/icon/toolbar/saveAs.svg +++ b/designer-base/src/main/resources/com/fine/theme/icon/toolbar/saveAs.svg @@ -1,5 +1,5 @@ - + + + diff --git a/designer-base/src/main/resources/com/fine/theme/icon/toolbar/saveAs_disable.svg b/designer-base/src/main/resources/com/fine/theme/icon/toolbar/saveAs_disable.svg index fcfb30eaa4..4b78d6919d 100644 --- a/designer-base/src/main/resources/com/fine/theme/icon/toolbar/saveAs_disable.svg +++ b/designer-base/src/main/resources/com/fine/theme/icon/toolbar/saveAs_disable.svg @@ -1,5 +1,5 @@ - + + + diff --git a/designer-base/src/main/resources/com/fine/theme/icon/widget/prewidget_popup.svg b/designer-base/src/main/resources/com/fine/theme/icon/widget/prewidget_popup.svg new file mode 100644 index 0000000000..82e36dce39 --- /dev/null +++ b/designer-base/src/main/resources/com/fine/theme/icon/widget/prewidget_popup.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/designer-base/src/main/resources/com/fine/theme/icon/widget/prewidget_popup_disable.svg b/designer-base/src/main/resources/com/fine/theme/icon/widget/prewidget_popup_disable.svg new file mode 100644 index 0000000000..6fe7b6b711 --- /dev/null +++ b/designer-base/src/main/resources/com/fine/theme/icon/widget/prewidget_popup_disable.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/designer-base/src/main/resources/com/fine/theme/light/ui/fine_light.icon.json b/designer-base/src/main/resources/com/fine/theme/light/ui/fine_light.icon.json index 5353466cbf..34d8c06713 100644 --- a/designer-base/src/main/resources/com/fine/theme/light/ui/fine_light.icon.json +++ b/designer-base/src/main/resources/com/fine/theme/light/ui/fine_light.icon.json @@ -6,6 +6,7 @@ "icons": { "cut": "cut.svg", "save": "save.svg", + "saveFile": "saveFile.svg", "copy": "copy.svg", "formatBrush": "formatBrush.svg", "paste": "paste.svg", @@ -17,6 +18,7 @@ "remove": "remove.svg", "search": "search.svg", "add": "add.svg", + "add_hover": "add_hover.svg", "detail": "detail.svg", "dataLink": "dataLink.svg", "jumpHelp": "jumpHelp.svg", @@ -77,6 +79,7 @@ "excelFile": "filetree/filetype/excelFile.svg", "flashFile": "filetree/filetype/flashFile.svg", "frm_locked": "filetree/filetype/frm_locked.svg", + "fvs_locked": "filetree/filetype/fvs_locked.svg", "gifFile": "filetree/filetype/gifFile.svg", "htmlFile": "filetree/filetype/htmlFile.svg", "jarFile": "filetree/filetype/jarFile.svg", @@ -90,6 +93,8 @@ "wordFile": "filetree/filetype/wordFile.svg", "xlsFile": "filetree/filetype/xlsFile.svg", "xmlFile": "filetree/filetype/xmlFile.svg", + "csvFile": "filetree/filetype/csvFile.svg", + "svgFile": "filetree/filetype/svgFile.svg", "cellattr": "propertiestab/cellattr.svg", "cellattr_disabled": "propertiestab/cellattr_disabled.svg", "cellattr_selected": "propertiestab/cellattr_selected.svg", @@ -100,7 +105,7 @@ "conditionattr_disabled": "propertiestab/conditionattr_disabled.svg", "conditionattr_selected": "propertiestab/conditionattr_selected.svg", "floatelement": "propertiestab/floatelement.svg", - "floatelement_disabled": "propertiestab/floatelement_disabled.svg", + "floatelement_popup": "propertiestab/floatelement_popup.svg", "floatelement_selected": "propertiestab/floatelement_selected.svg", "hyperlink": "propertiestab/hyperlink.svg", "hyperlink_disabled": "propertiestab/hyperlink_disabled.svg", @@ -145,6 +150,7 @@ "text": "insert/text.svg", "richtext": "insert/richtext.svg", "formula": "insert/formula.svg", + "formula_popup": "insert/formula_popup.svg", "chart": "insert/chart.svg", "image": "insert/image.svg", "bias": "insert/bias.svg", @@ -313,21 +319,36 @@ "widget_preview": "widget/preview.svg", "apply_components": "widget/apply_components.svg", "prewidget": "widget/prewidget.svg", + "prewidget_popup": "widget/prewidget_popup.svg", "tab": "widget/tab.svg", "text_area": "widget/text_area.svg", "text_field": "widget/text_field.svg", "widget_tree": "widget/tree.svg", - "ds_column_name": "editor/ds_column_name.svg", - "ds_column_index": "editor/ds_column_index.svg", + "dsColumnName": "editor/dsColumnName.svg", + "dsColumnName_popup": "editor/dsColumnName_popup.svg", + "dsColumnIndex": "editor/dsColumnIndex.svg", + "dsColumnIndex_popup": "editor/dsColumnIndex_popup.svg", "ds_column": "editor/ds_column.svg", "type_double": "editor/type_double.svg", + "type_double_popup": "editor/type_double_popup.svg", "type_boolean": "editor/type_boolean.svg", + "type_boolean_popup": "editor/type_boolean_popup.svg", + "date_popup": "editor/date_popup.svg", + "param_popup": "editor/param_popup.svg", + "cellelement_popup": "editor/cellelement_popup.svg", + "bind_column_popup": "editor/bind_column_popup.svg", "preview_mobile": "preview/preview_mobile.svg", "preview_paging": "preview/preview_paging.svg", "preview_write": "preview/preview_write.svg", "data_analysis": "preview/data_analysis.svg", "variable": "variable/variable.svg", "dataItem": "variable/dataItem.svg", - "param_global": "variable/param_global.svg" + "param_global": "variable/param_global.svg", + "local_server_background": "startup/local_server_background.svg", + "remote_server_background": "startup/remote_server_background.svg", + "more_arrow": "startup/more.svg", + "more_arrow_hover": "startup/more_hover.svg", + "show_less": "startup/show_less.svg", + "show_more": "startup/show_more.svg" } } diff --git a/designer-base/src/main/resources/com/fine/theme/light/ui/laf/FineLightLaf.properties b/designer-base/src/main/resources/com/fine/theme/light/ui/laf/FineLightLaf.properties index 5310524e57..35bc2aa9fe 100644 --- a/designer-base/src/main/resources/com/fine/theme/light/ui/laf/FineLightLaf.properties +++ b/designer-base/src/main/resources/com/fine/theme/light/ui/laf/FineLightLaf.properties @@ -142,6 +142,7 @@ border.divider=#DADEE7 tooltip.normal=#3F506A tooltip.disabled=#A3ADBD hover.deep=#e2fbe6 +fill.deep=#F6F9FE #---- Button ---- @@ -583,14 +584,14 @@ PopupMenuSeparator.Insets=0,10,0,10 #---- ProgressBar ---- ProgressBar.border = com.formdev.flatlaf.ui.FlatEmptyBorder -ProgressBar.arc = 4 +ProgressBar.arc = 10 ProgressBar.horizontalSize = 146,4 ProgressBar.verticalSize = 4,146 ProgressBar.cycleTime = 4000 ProgressBar.repaintInterval = 15 ProgressBar.font = -2 -ProgressBar.background = darken(@background,13%) -ProgressBar.foreground = @accentSliderColor +ProgressBar.background = #E8E8E9 +ProgressBar.foreground = #419BF9 ProgressBar.selectionBackground = @foreground ProgressBar.selectionForeground = contrast($ProgressBar.foreground, @foreground, @componentBackground) @@ -658,7 +659,7 @@ ScrollBar.allowsAbsolutePositioning = true ScrollBar.track = #00000000 ScrollBar.thumb = #0a1c3833 -ScrollBar.hoverTrackColor = darken($ScrollBar.track,3%,derived noAutoInverse) +ScrollBar.hoverTrackColor = fade(@background, 0%) ScrollBar.hoverThumbColor = darken($ScrollBar.thumb,10%,derived noAutoInverse) ScrollBar.pressedThumbColor = #0a1c3849 ScrollBar.hoverButtonBackground = darken(@background,5%,derived noAutoInverse) @@ -671,7 +672,7 @@ ScrollBar.largeBar.thumbInsets = 0,4,0,4 ScrollBar.largeBar.buttonBackground = $ScrollBar.track #---- Panel ---- -Panel.arc = 5 +Panel.arc = 20 #---- ScrollPane ---- @@ -1294,6 +1295,10 @@ CellOtherSetPane.height=$Component.defaultHeight background: fade(@background, 0%); \ borderInsets: 0,0,0,0; +[style]Panel.transparentBackground=\ + background: fade(@background, 0%); \ + border: null; + #---- clearButton ---- # for clear/cancel button in text fields @@ -1333,3 +1338,8 @@ CellOtherSetPane.height=$Component.defaultHeight [style]Tree.pureTree = \ background: $fill.normal + +[style]ScrollBar.transparentBackground = \ + background: null;\ + track: fade(@background, 0%); \ + hoverTrackColor : fade(@background, 0%) diff --git a/designer-base/src/test/java/com/fr/design/gui/storybook/components/TemplateTabStoryBoard.java b/designer-base/src/test/java/com/fr/design/gui/storybook/components/TemplateTabStoryBoard.java index 31e2406682..062bdf0ba2 100644 --- a/designer-base/src/test/java/com/fr/design/gui/storybook/components/TemplateTabStoryBoard.java +++ b/designer-base/src/test/java/com/fr/design/gui/storybook/components/TemplateTabStoryBoard.java @@ -32,5 +32,4 @@ public class TemplateTabStoryBoard extends StoryBoard { add(MultiTemplateTabPane.getInstance()); } - } diff --git a/designer-chart/src/main/java/com/fr/van/chart/custom/component/VanChartCustomPlotUITabGroup.java b/designer-chart/src/main/java/com/fr/van/chart/custom/component/VanChartCustomPlotUITabGroup.java index e4ce883912..5e65a0e26c 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/custom/component/VanChartCustomPlotUITabGroup.java +++ b/designer-chart/src/main/java/com/fr/van/chart/custom/component/VanChartCustomPlotUITabGroup.java @@ -2,14 +2,10 @@ package com.fr.van.chart.custom.component; import com.fr.design.constants.UIConstants; import com.fr.design.gui.ibutton.UITabGroup; -import com.fr.design.gui.ibutton.UIToggleButton; import javax.swing.BorderFactory; import javax.swing.Icon; import javax.swing.JPanel; -import java.awt.BorderLayout; -import java.awt.Dimension; -import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.LayoutManager; @@ -36,66 +32,6 @@ public class VanChartCustomPlotUITabGroup extends UITabGroup{ return new GridBagLayout(); } - @Override - protected void initButton(UIToggleButton labelButton, int buttonIndex) { - - int ButtonWidth = WIDTH / 3; - if (listNum <= 1){ - return; - }else if (listNum == 2){ - ButtonWidth = WIDTH / 2; - } - - //将button加入到pane中,以便可以对边框进行控制 - labelButton.setRoundBorder(false); - labelButton.setBorderPainted(false); - - - - labelButtonList.add(labelButton); - - int index = labelButtonList.size() - 1; - - JPanel panel = getButtonPanel(labelButton, index); - - GridBagConstraints constraints=new GridBagConstraints(); - - int end = listNum % 3; - - if (end == 1 && index == 0){ - constraints.gridy = 0; - constraints.gridx = 0; - constraints.gridheight = 1; - constraints.gridwidth = 6; - ButtonWidth = WIDTH + 2; - }else if (end == 2 && (index == 0 || index == 1) && listNum != 2){ - constraints.gridy = 0; - constraints.gridx = index == 1 ? 4 : 0; - constraints.gridheight = 1; - constraints.gridwidth = index == 0 ? 4 : 2; - ButtonWidth = index == 0 ? ButtonWidth * 2 + 1 : ButtonWidth; - }else { - int l = ((index + ((end == 0) ? end : (3 - end))) / 3); - constraints.gridy = l; - constraints.gridx = ((index - (l * 3 - (end == 0 ? end : 3 - end))))*2; - constraints.gridheight = 1; - constraints.gridwidth = 2; - } - labelButton.setPreferredSize(new Dimension(ButtonWidth, BUTTON_HEIGHT)); - - this.add(panel, constraints); - } - - private JPanel getButtonPanel(UIToggleButton labelButton, int index) { - JPanel panel = new JPanel(); - panel.setLayout(new BorderLayout()); - panel.add(labelButton,BorderLayout.CENTER); - - setPanelBorder(panel, index); - - return panel; - } - public void setPanelBorder(JPanel panel, int index) { int end = listNum % 3; int num = listNum; diff --git a/designer-chart/src/main/java/com/fr/van/chart/custom/style/VanChartCustomPlotSeriesPane.java b/designer-chart/src/main/java/com/fr/van/chart/custom/style/VanChartCustomPlotSeriesPane.java index 1951e0df63..19c102b867 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/custom/style/VanChartCustomPlotSeriesPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/custom/style/VanChartCustomPlotSeriesPane.java @@ -1,20 +1,17 @@ package com.fr.van.chart.custom.style; +import com.fine.theme.utils.FineLayoutBuilder; import com.fr.chart.chartattr.Plot; import com.fr.design.beans.BasicBeanPane; -import com.fr.design.layout.TableLayout; -import com.fr.design.layout.TableLayoutHelper; import com.fr.design.mainframe.chart.gui.style.series.AbstractPlotSeriesPane; +import java.awt.BorderLayout; import java.awt.Component; -import java.awt.Dimension; /** * Created by Fangjie on 2016/4/26. */ public class VanChartCustomPlotSeriesPane extends BasicBeanPane { - private static final int WIDTH = 236; - private static final int DELTA_HEIGHT = 300; private BasicBeanPane axisPane; private AbstractPlotSeriesPane seriesPane; public VanChartCustomPlotSeriesPane(BasicBeanPane axisPane, AbstractPlotSeriesPane seriesPane) { @@ -25,15 +22,7 @@ public class VanChartCustomPlotSeriesPane extends BasicBeanPane { } private void initContentPane() { - - seriesPane.setPreferredSize(new Dimension(WIDTH, (int) (seriesPane.getPreferredSize().getHeight() + DELTA_HEIGHT))); - - double p = TableLayout.PREFERRED; - double f = TableLayout.FILL; - - double[] columnSize = {f}; - double[] rowSize = {p, p, p}; - + setLayout(new BorderLayout()); if (axisPane == null) { this.add(seriesPane); }else { @@ -41,7 +30,7 @@ public class VanChartCustomPlotSeriesPane extends BasicBeanPane { new Component[]{axisPane}, new Component[]{seriesPane} }; - this.add(TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize)); + this.add(FineLayoutBuilder.compatibleTableLayout(0, components, new double[]{1})); } } diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XButton.java b/designer-form/src/main/java/com/fr/design/designer/creator/XButton.java index 894a8ebdad..fa41aaa270 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XButton.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XButton.java @@ -298,6 +298,11 @@ public class XButton extends XWidgetCreator { return "button_16.png"; } + @Override + public String getIconId() { + return "button"; + } + /** * data属性改变触发其他操作 */ diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XCheckBox.java b/designer-form/src/main/java/com/fr/design/designer/creator/XCheckBox.java index da9b7c9552..07c4a1ee50 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XCheckBox.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XCheckBox.java @@ -81,6 +81,11 @@ public class XCheckBox extends XWidgetCreator { return "check_box_16.png"; } + @Override + public String getIconId() { + return "check_box"; + } + public void firePropertyChange() { ((UICheckBox) editor).setText(((CheckBox) data).getText()); ValueInitializer value = ((CheckBox) data).getWidgetValue(); diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XCheckBoxGroup.java b/designer-form/src/main/java/com/fr/design/designer/creator/XCheckBoxGroup.java index 086b8c3e71..71cdb8e42d 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XCheckBoxGroup.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XCheckBoxGroup.java @@ -90,6 +90,11 @@ public class XCheckBoxGroup extends XFieldEditor { return "checkbox_group_16.png"; } + @Override + public String getIconId() { + return "checkbox_group"; + } + @Override public WidgetPropertyUIProvider[] getWidgetPropertyUIProviders() { return new WidgetPropertyUIProvider[] {new ButtonGroupPropertyUI(this)}; diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XComboBox.java b/designer-form/src/main/java/com/fr/design/designer/creator/XComboBox.java index 22393ca847..71ca85cf87 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XComboBox.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XComboBox.java @@ -53,7 +53,7 @@ public class XComboBox extends XCustomWriteAbleRepeatEditor { UITextField textField = new UITextField(5); textField.setOpaque(false); editor.add(textField, BorderLayout.CENTER); - btn = new LimpidButton("", this.getIconPath(), toData().isVisible() ? FULL_OPACITY : HALF_OPACITY); + btn = new LimpidButton("", this.getIconPath(), this.getIconId(), toData().isVisible() ? FULL_OPACITY : HALF_OPACITY); btn.setPreferredSize(new Dimension(21, 21)); btn.setOpaque(true); editor.add(btn, BorderLayout.EAST); @@ -67,6 +67,11 @@ public class XComboBox extends XCustomWriteAbleRepeatEditor { return "combo_box_16.png"; } + @Override + public String getIconId() { + return "combo_box"; + } + protected void makeVisible(boolean visible) { btn.makeVisible(visible); } diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XComboCheckBox.java b/designer-form/src/main/java/com/fr/design/designer/creator/XComboCheckBox.java index 241c11bb94..46eca1254d 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XComboCheckBox.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XComboCheckBox.java @@ -52,4 +52,9 @@ public class XComboCheckBox extends XComboBox { protected String getIconName() { return "combo_check_16.png"; } + + @Override + public String getIconId() { + return "combo_check"; + } } diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java b/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java index 792e97045e..4b84b90399 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java @@ -281,6 +281,10 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo return "/com/fr/web/images/form/resources/" + getIconName(); } + public String getIconId() { + return StringUtils.EMPTY; + } + /** * 返回组件默认名 * @return 组件类名(小写) diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XCreatorUtils.java b/designer-form/src/main/java/com/fr/design/designer/creator/XCreatorUtils.java index 4cb42a04ce..b0a1bc53b6 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XCreatorUtils.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XCreatorUtils.java @@ -3,6 +3,7 @@ */ package com.fr.design.designer.creator; +import com.fine.theme.icon.LazyIcon; import com.fr.base.chart.BaseChartCollection; import com.fr.base.svg.IconUtils; import com.fr.base.theme.FineColorSynchronizer; @@ -381,6 +382,9 @@ public class XCreatorUtils { * @return 组件icon */ public static Icon getCreatorIcon(XCreator creator) { + if (StringUtils.isNotEmpty(creator.getIconId())) { + return new LazyIcon(creator.getIconId()); + } String iconPath = creator.getIconPath(); if (StringUtils.isEmpty(iconPath)) { return null; diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XDateEditor.java b/designer-form/src/main/java/com/fr/design/designer/creator/XDateEditor.java index 38da20da62..2784af891f 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XDateEditor.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XDateEditor.java @@ -116,7 +116,7 @@ public class XDateEditor extends XDirectWriteEditor { if (editor == null) { editor = FRGUIPaneFactory.createBorderLayout_S_Pane(); editor.add(textField = new UITextField(5), BorderLayout.CENTER); - btn = new LimpidButton(StringUtils.EMPTY, this.getIconPath(), toData().isVisible() ? FULL_OPACITY : HALF_OPACITY); + btn = new LimpidButton(StringUtils.EMPTY, this.getIconPath(), this.getIconId(), toData().isVisible() ? FULL_OPACITY : HALF_OPACITY); btn.setPreferredSize(new Dimension(21, 21)); editor.add(btn, BorderLayout.EAST); textField.setOpaque(false); @@ -130,6 +130,11 @@ public class XDateEditor extends XDirectWriteEditor { return "date_16.png"; } + @Override + public String getIconId() { + return "date"; + } + protected void makeVisible(boolean visible) { btn.makeVisible(visible); } diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XLabel.java b/designer-form/src/main/java/com/fr/design/designer/creator/XLabel.java index 3993c4daa7..c6638e129b 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XLabel.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XLabel.java @@ -146,4 +146,9 @@ public class XLabel extends XWidgetCreator { return "label_16.png"; } + @Override + public String getIconId() { + return "label"; + } + } diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XNameWidget.java b/designer-form/src/main/java/com/fr/design/designer/creator/XNameWidget.java index 2cc20e111a..3b9e81a970 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XNameWidget.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XNameWidget.java @@ -13,8 +13,13 @@ import com.fr.form.ui.WidgetInfoConfig; import com.fr.general.FRFont; import com.fr.stable.core.PropertyChangeAdapter; -import javax.swing.*; -import java.awt.*; +import javax.swing.SwingConstants; +import javax.swing.JComponent; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Color; +import java.awt.BorderLayout; import java.beans.IntrospectionException; public class XNameWidget extends XWidgetCreator { @@ -81,6 +86,11 @@ public class XNameWidget extends XWidgetCreator { return "user_widget.png"; } + @Override + public String getIconId() { + return "customButton"; + } + /** * 属性改变后,重新构建控件 */ diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XNumberEditor.java b/designer-form/src/main/java/com/fr/design/designer/creator/XNumberEditor.java index 8861d6fcbc..bf87480137 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XNumberEditor.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XNumberEditor.java @@ -104,6 +104,11 @@ public class XNumberEditor extends XWrapperedFieldEditor { return "number_field_16.png"; } + @Override + public String getIconId() { + return "number_field"; + } + @Override public WidgetPropertyUIProvider[] getWidgetPropertyUIProviders() { return new WidgetPropertyUIProvider[]{new NumberEditorMobilePropertyUI(this)}; diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XPassword.java b/designer-form/src/main/java/com/fr/design/designer/creator/XPassword.java index 29de6c9d05..8c53749b85 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XPassword.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XPassword.java @@ -40,6 +40,11 @@ public class XPassword extends XWrapperedFieldEditor { return "password_field_16.png"; } + @Override + public String getIconId() { + return "password_field"; + } + /** * 控件的属性列表 * diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XRadioGroup.java b/designer-form/src/main/java/com/fr/design/designer/creator/XRadioGroup.java index 879c833996..7ca44bdff3 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XRadioGroup.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XRadioGroup.java @@ -86,6 +86,11 @@ public class XRadioGroup extends XFieldEditor { return "button_group_16.png"; } + @Override + public String getIconId() { + return "button_group"; + } + @Override public WidgetPropertyUIProvider[] getWidgetPropertyUIProviders() { return new WidgetPropertyUIProvider[] {new ButtonGroupPropertyUI(this)}; diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XTextArea.java b/designer-form/src/main/java/com/fr/design/designer/creator/XTextArea.java index 88d0391ceb..b3ceff4e3e 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XTextArea.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XTextArea.java @@ -85,6 +85,11 @@ public class XTextArea extends XWrapperedFieldEditor { return "text_area_16.png"; } + @Override + public String getIconId() { + return "text_area"; + } + @Override public WidgetPropertyUIProvider[] getWidgetPropertyUIProviders() { return new WidgetPropertyUIProvider[]{new TextAreaMobilePropertyUI(this)}; diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XTextEditor.java b/designer-form/src/main/java/com/fr/design/designer/creator/XTextEditor.java index a1aca00ed0..1d123f2307 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XTextEditor.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XTextEditor.java @@ -84,6 +84,11 @@ public class XTextEditor extends XWrapperedFieldEditor { return "text_field_16.png"; } + @Override + public String getIconId() { + return "text_field"; + } + @Override public WidgetPropertyUIProvider[] getWidgetPropertyUIProviders() { return new WidgetPropertyUIProvider[]{new TextEditorMobilePropertyUI(this)}; diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XTreeComboBoxEditor.java b/designer-form/src/main/java/com/fr/design/designer/creator/XTreeComboBoxEditor.java index d7e1c2d37b..cd5fffbb22 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XTreeComboBoxEditor.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XTreeComboBoxEditor.java @@ -33,7 +33,7 @@ public class XTreeComboBoxEditor extends XTreeEditor { UITextField textField = new UITextField(5); textField.setOpaque(false); editor.add(textField, BorderLayout.CENTER); - btn = new LimpidButton("", this.getIconPath(), toData().isVisible() ? FULL_OPACITY : HALF_OPACITY); + btn = new LimpidButton("", this.getIconPath(), this.getIconId(), toData().isVisible() ? FULL_OPACITY : HALF_OPACITY); btn.setPreferredSize(new Dimension(21, 21)); btn.setOpaque(true); editor.add(btn, BorderLayout.EAST); @@ -65,6 +65,11 @@ public class XTreeComboBoxEditor extends XTreeEditor { return "comboboxtree.png"; } + @Override + public String getIconId() { + return "comboboxtree"; + } + protected void makeVisible(boolean visible) { btn.makeVisible(visible); } diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XTreeEditor.java b/designer-form/src/main/java/com/fr/design/designer/creator/XTreeEditor.java index 872a1e97d2..c2f2e3d0d7 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XTreeEditor.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XTreeEditor.java @@ -123,5 +123,9 @@ public class XTreeEditor extends XWidgetCreator { protected String getIconName() { return "tree_16.png"; } - + + @Override + public String getIconId() { + return "widget_tree"; + } } diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XWidgetCreator.java b/designer-form/src/main/java/com/fr/design/designer/creator/XWidgetCreator.java index 590aea3395..5a7c926b76 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XWidgetCreator.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XWidgetCreator.java @@ -3,6 +3,7 @@ */ package com.fr.design.designer.creator; +import com.fine.theme.icon.LazyIcon; import com.fr.base.BaseUtils; import com.fr.design.dialog.FineJOptionPane; import com.fr.design.form.util.XCreatorConstants; @@ -10,12 +11,14 @@ import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.FormDesigner; import com.fr.form.ui.Widget; import com.fr.log.FineLoggerFactory; +import com.fr.stable.StringUtils; import com.fr.stable.core.PropertyChangeAdapter; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; -import javax.swing.JOptionPane; +import javax.swing.Icon; +import java.awt.image.BufferedImage; import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Composite; @@ -105,6 +108,7 @@ public abstract class XWidgetCreator extends XCreator { private String name; private String imagePath; private float opacity = 0.4f; + private String iconId; public LimpidButton(String name, String imagePath, float opacity) { this.name = name; @@ -113,48 +117,71 @@ public abstract class XWidgetCreator extends XCreator { this.draw(); } + public LimpidButton(String name, String imagePath, String iconId, float opacity) { + this.name = name; + this.imagePath = imagePath; + this.opacity = opacity; + this.iconId = iconId; + this.draw(); + } + public void draw() { try { - ImageIcon imageIcon = (ImageIcon) BaseUtils.readIcon(imagePath); - Image img = imageIcon.getImage(); - MediaTracker mt = new MediaTracker(this); - int w = 21; - int h = 21; - mt.addImage(img, 0); - mt.waitForAll(); - GraphicsConfiguration gc = new JFrame().getGraphicsConfiguration(); // 本地图形设备 - Image image = gc.createCompatibleImage(w, h, Transparency.TRANSLUCENT);//建立透明画布 - Graphics2D g = (Graphics2D) image.getGraphics(); //在画布上创建画笔 - - Composite alpha = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1.0f); //指定透明度为半透明90% - g.setComposite(alpha); - g.drawImage(img, 0, 0, this); //注意是,将image画到g画笔所在的画布上 - g.setColor(Color.black);//设置颜色为黑色 - g.drawString(name, 25, 20);//写字 - g.dispose(); //释放内存 - - Composite alpha2 = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, opacity); - Image image1 = gc.createCompatibleImage(w, h, Transparency.TRANSLUCENT); - g = (Graphics2D) image1.getGraphics(); - g.setComposite(alpha2); - g.drawImage(img, 2, 2, this); //改变图像起始位置,产生动态效果 - g.setColor(Color.black); - g.drawString(name, 25, 20); - g.dispose(); - this.setIgnoreRepaint(true); this.setFocusable(false);//设置没有焦点 this.setBorder(null);//设置不画按钮边框 this.setContentAreaFilled(false);//设置不画按钮背景 - this.setIcon(new ImageIcon(image1)); //把刚才生成的半透明image变成ImageIcon,贴到按钮上去 - this.setRolloverIcon(new ImageIcon(image1)); - this.setPressedIcon(new ImageIcon(image));//按下去的图标 + + if (StringUtils.isEmpty(iconId)){ + ImageIcon imageIcon = (ImageIcon) BaseUtils.readIcon(imagePath); + Image img = imageIcon.getImage(); + MediaTracker mt = new MediaTracker(this); + mt.addImage(img, 0); + mt.waitForAll(); + Image originalImage = createImageWithTransparency(gc, img, 1.0f, 0, 0); + this.setPressedIcon(new ImageIcon(originalImage));//按下去的图标 + // 半透明图像 + Image transparentImage = createImageWithTransparency(gc, img, opacity, 2, 2); + this.setIcon(new ImageIcon(transparentImage)); //把刚才生成的半透明image变成ImageIcon,贴到按钮上去 + this.setRolloverIcon(new ImageIcon(transparentImage)); + } else { + Icon originalIcon = createIconWithTransparency(gc, 1.0f, 0, 0); + Icon transparentIcon = createIconWithTransparency(gc, opacity, 2, 2); + this.setIcon(transparentIcon); + this.setRolloverIcon(transparentIcon); + this.setPressedIcon(originalIcon); + } } catch (Exception e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); } } + private Image createImageWithTransparency(GraphicsConfiguration gc, Image img, float alphaValue, int x, int y) { + BufferedImage image = gc.createCompatibleImage(21, 21, Transparency.TRANSLUCENT); + Graphics2D g2d = image.createGraphics(); //在画布上创建画笔 + Composite alpha = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alphaValue); + g2d.setComposite(alpha); + g2d.drawImage(img, x, y, this); //改变图像起始位置,产生动态效果 + g2d.setColor(Color.black); //设置颜色为黑色 + g2d.drawString(name, 25, 20);//写字 + g2d.dispose();//释放内存 + return image; + } + + private Icon createIconWithTransparency(GraphicsConfiguration gc, float alphaValue, int x, int y) { + BufferedImage image = gc.createCompatibleImage(21, 21, Transparency.TRANSLUCENT); + Graphics2D g2d = image.createGraphics(); + Composite alpha = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alphaValue); + g2d.setComposite(alpha); + g2d.setColor(Color.black); + g2d.drawString(name, 25, 20); + Icon icon = new LazyIcon(iconId); + icon.paintIcon(this, g2d, x, y); + g2d.dispose(); + return icon; + } + /** * 待说明 * diff --git a/designer-form/src/main/java/com/fr/design/form/parameter/XFormSubmit.java b/designer-form/src/main/java/com/fr/design/form/parameter/XFormSubmit.java index 3d8f3d9146..33a37111ce 100644 --- a/designer-form/src/main/java/com/fr/design/form/parameter/XFormSubmit.java +++ b/designer-form/src/main/java/com/fr/design/form/parameter/XFormSubmit.java @@ -1 +1 @@ -package com.fr.design.form.parameter; import com.fr.design.designer.creator.XButton; import com.fr.design.designer.creator.XCreator; import com.fr.form.parameter.FormSubmitButton; import java.awt.*; /** * 提交按钮 * @editor zhou * @since 2012-3-23下午3:36:00 */ public class XFormSubmit extends XButton { public XFormSubmit(FormSubmitButton widget, Dimension initSize) { super(widget, initSize); } /** * 是否有查询按钮 * @param xCreator 控件或容器 * @return 有无查询按钮 */ public boolean SearchQueryCreators(XCreator xCreator) { return true; } /** * 该组件是否可以拖入表单主体 * @return 是则返回true */ public boolean canEnterIntoAdaptPane(){ return false; } /** * 该组件是否可以拖入绝对布局 * * @return 是则返回true */ @Override public boolean canEnterIntoAbsolutePane() { return false; } @Override protected String getIconName() { return "preview_16.png"; } } \ No newline at end of file +package com.fr.design.form.parameter; import com.fr.design.designer.creator.XButton; import com.fr.design.designer.creator.XCreator; import com.fr.form.parameter.FormSubmitButton; import java.awt.*; /** * 提交按钮 * @editor zhou * @since 2012-3-23下午3:36:00 */ public class XFormSubmit extends XButton { public XFormSubmit(FormSubmitButton widget, Dimension initSize) { super(widget, initSize); } /** * 是否有查询按钮 * @param xCreator 控件或容器 * @return 有无查询按钮 */ public boolean SearchQueryCreators(XCreator xCreator) { return true; } /** * 该组件是否可以拖入表单主体 * @return 是则返回true */ public boolean canEnterIntoAdaptPane(){ return false; } /** * 该组件是否可以拖入绝对布局 * * @return 是则返回true */ @Override public boolean canEnterIntoAbsolutePane() { return false; } @Override protected String getIconName() { return "preview_16.png"; } @Override public String getIconId() { return "preview"; } } \ No newline at end of file diff --git a/designer-form/src/main/java/com/fr/design/mainframe/FormParaPane.java b/designer-form/src/main/java/com/fr/design/mainframe/FormParaPane.java index 8677b27096..b2533664c6 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/FormParaPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/FormParaPane.java @@ -1,5 +1,6 @@ package com.fr.design.mainframe; +import com.fine.theme.icon.LazyIcon; import com.fr.design.ExtraDesignClassManager; import com.fr.design.constants.UIConstants; import com.fr.design.designer.creator.XCreatorUtils; @@ -19,6 +20,7 @@ import com.fr.plugin.observer.PluginEvent; import com.fr.plugin.observer.PluginEventListener; import com.fr.stable.ArrayUtils; +import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.ArrayList; @@ -70,7 +72,7 @@ public class FormParaPane extends UIToolbar { } public FormParaPane() { - predefineButton = new UIButton(UIConstants.PRE_WIDGET_NORMAL_ICON); + predefineButton = new UIButton(new LazyIcon("prewidget_popup", new Dimension(25, 21))); predefineButton.set4ToolbarButton(); predefineButton.setToolTipText(Toolkit.i18nText("Fine-Design_Basic_Widget_User_Defined_Widget_Config")); predefineButton.addMouseListener(new MouseAdapter() { diff --git a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/DownloadProgressPane.java b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/DownloadProgressPane.java index c7f09f453b..5401ffafb4 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/DownloadProgressPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/share/ui/base/DownloadProgressPane.java @@ -79,7 +79,6 @@ public class DownloadProgressPane extends JPanel { private JProgressBar createProgressBar() { JProgressBar jProgressBar = new JProgressBar(); - jProgressBar.setUI(new ModernUIProgressBarUI()); jProgressBar.setBorderPainted(false); jProgressBar.setOpaque(false); jProgressBar.setBorder(null); diff --git a/designer-realize/src/main/java/com/fr/design/actions/cell/style/ReportFontNameAction.java b/designer-realize/src/main/java/com/fr/design/actions/cell/style/ReportFontNameAction.java index 2b423e0ab0..c6f0f6416d 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/cell/style/ReportFontNameAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/cell/style/ReportFontNameAction.java @@ -3,6 +3,7 @@ */ package com.fr.design.actions.cell.style; +import com.fine.theme.utils.FineUIScale; import com.fr.design.utils.DesignUtils; import com.fr.stable.os.OperatingSystem; import java.awt.Dimension; @@ -11,7 +12,6 @@ import javax.swing.ComboBoxModel; import javax.swing.JComponent; import com.fr.base.Style; -import com.fr.base.Utils; import com.fr.base.core.StyleUtils; import com.fr.design.gui.icombobox.UIComboBox; import com.fr.general.ComparatorUtils; @@ -84,9 +84,7 @@ public class ReportFontNameAction extends AbstractStyleAction { UIComboBox itemComponent = new UIComboBox(DesignUtils.getAvailableFontFamilyNames4Report()); this.putValue(UIComboBox.class.getName(), itemComponent); //设置最佳宽度. - itemComponent.setPreferredSize(new Dimension( - Math.min(140, itemComponent.getPreferredSize().width), - itemComponent.getPreferredSize().height)); + itemComponent.setPreferredSize(FineUIScale.scale(new Dimension(140, 24))); itemComponent.setEnabled(this.isEnabled()); itemComponent.addActionListener(this); diff --git a/designer-realize/src/main/java/com/fr/design/actions/file/export/CSVExportAction.java b/designer-realize/src/main/java/com/fr/design/actions/file/export/CSVExportAction.java index cc6bdaf392..b204f40c32 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/file/export/CSVExportAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/file/export/CSVExportAction.java @@ -3,7 +3,7 @@ */ package com.fr.design.actions.file.export; -import com.fr.base.BaseUtils; +import com.fine.theme.icon.LazyIcon; import com.fr.base.extension.FileExtension; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.JWorkBook; @@ -25,7 +25,7 @@ public class CSVExportAction extends AbstractWorkBookExportAction { this.setMenuKeySet(KeySetUtils.CSV_EXPORT); this.setName(getMenuKeySet().getMenuKeySetName() + "..."); this.setMnemonic(getMenuKeySet().getMnemonic()); - this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_file/csv.png")); + this.setSmallIcon(new LazyIcon("csvFile")); } @Override diff --git a/designer-realize/src/main/java/com/fr/design/actions/file/export/EmbeddedExportExportAction.java b/designer-realize/src/main/java/com/fr/design/actions/file/export/EmbeddedExportExportAction.java index 25a6da3ad2..006b1d4a61 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/file/export/EmbeddedExportExportAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/file/export/EmbeddedExportExportAction.java @@ -1,6 +1,6 @@ package com.fr.design.actions.file.export; -import com.fr.base.BaseUtils; +import com.fine.theme.icon.LazyIcon; import com.fr.base.extension.FileExtension; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.JWorkBook; @@ -22,7 +22,7 @@ public class EmbeddedExportExportAction extends AbstractWorkBookExportAction { this.setMenuKeySet(KeySetUtils.EMBEDDED_EXPORT); this.setName(getMenuKeySet().getMenuKeySetName() + "..."); this.setMnemonic(getMenuKeySet().getMnemonic()); - this.setSmallIcon(BaseUtils.readIcon("/com/fr/base/images/oem/logo.png")); + this.setSmallIcon(new LazyIcon("logo")); } @Override diff --git a/designer-realize/src/main/java/com/fr/design/actions/file/export/SVGExportAction.java b/designer-realize/src/main/java/com/fr/design/actions/file/export/SVGExportAction.java index 4a7862e9d4..5319069326 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/file/export/SVGExportAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/file/export/SVGExportAction.java @@ -3,7 +3,7 @@ */ package com.fr.design.actions.file.export; -import com.fr.base.BaseUtils; +import com.fine.theme.icon.LazyIcon; import com.fr.base.extension.FileExtension; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.JWorkBook; @@ -24,7 +24,7 @@ public class SVGExportAction extends AbstractWorkBookExportAction { this.setMenuKeySet(KeySetUtils.SVG_EXPORT); this.setName(getMenuKeySet().getMenuKeySetName() + "..."); this.setMnemonic(getMenuKeySet().getMnemonic()); - this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_file/svg.png")); + this.setSmallIcon(new LazyIcon("svgFile")); } @Override diff --git a/designer-realize/src/main/java/com/fr/design/dscolumn/DSColumnAdvancedPane.java b/designer-realize/src/main/java/com/fr/design/dscolumn/DSColumnAdvancedPane.java index ae5268a711..5bae0b22d0 100644 --- a/designer-realize/src/main/java/com/fr/design/dscolumn/DSColumnAdvancedPane.java +++ b/designer-realize/src/main/java/com/fr/design/dscolumn/DSColumnAdvancedPane.java @@ -35,6 +35,8 @@ import java.awt.event.ActionListener; import static com.fine.swing.ui.layout.Layouts.cell; import static com.fine.swing.ui.layout.Layouts.column; import static com.fine.swing.ui.layout.Layouts.row; +import static com.fine.theme.utils.FineClientProperties.COMBO_BOX_TYPE; +import static com.fine.theme.utils.FineClientProperties.ADAPTIVE_COMBO_BOX; import static com.fine.theme.utils.FineUIUtils.wrapComponentWithTitle; import static com.fr.report.cell.cellattr.core.group.FilterTypeEnum.BOTTOM; import static com.fr.report.cell.cellattr.core.group.FilterTypeEnum.SPECIFY; @@ -236,6 +238,7 @@ public class DSColumnAdvancedPane extends BasicPane { com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Odd"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Even"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Specify"),}); + selectCountComboBox.putClientProperty(COMBO_BOX_TYPE, ADAPTIVE_COMBO_BOX); selectCountComboBox.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/ElementCasePane.java b/designer-realize/src/main/java/com/fr/design/mainframe/ElementCasePane.java index 163a5be638..01557672fc 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/ElementCasePane.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/ElementCasePane.java @@ -3,6 +3,7 @@ */ package com.fr.design.mainframe; +import com.fine.theme.icon.LazyIcon; import com.formdev.flatlaf.ui.FlatUIUtils; import com.fr.base.BaseFormula; import com.fr.base.DynamicUnitList; @@ -1345,7 +1346,7 @@ public abstract class ElementCasePane extends Tar MenuDef insertFloatMenu = new MenuDef(); insertFloatMenu.setName(KeySetUtils.INSERT_FLOAT.getMenuKeySetName()); insertFloatMenu.setTooltip(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_T_Insert_Float")); - insertFloatMenu.setIconPath("/com/fr/design/standard/floatpop"); + insertFloatMenu.setIcon(new LazyIcon("floatelement_popup", new Dimension(25, 21))); UpdateAction[] actions = ActionFactory.createFloatInsertAction(ElementCasePane.class, this); for (int i = 0; i < actions.length; i++) { diff --git a/designer-realize/src/main/java/com/fr/design/report/NewReportBackgroundPane.java b/designer-realize/src/main/java/com/fr/design/report/NewReportBackgroundPane.java index b8e2a8fb47..0aadbb2d63 100644 --- a/designer-realize/src/main/java/com/fr/design/report/NewReportBackgroundPane.java +++ b/designer-realize/src/main/java/com/fr/design/report/NewReportBackgroundPane.java @@ -19,14 +19,12 @@ import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; -import com.fr.design.mainframe.theme.ui.BorderUtils; import com.fr.general.Background; import com.fr.page.ReportSettingsProvider; import com.fr.report.stable.ReportSettings; import javax.swing.BorderFactory; import javax.swing.JPanel; -import javax.swing.border.CompoundBorder; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; @@ -36,6 +34,9 @@ import java.awt.Graphics2D; import java.awt.Shape; import java.awt.geom.Rectangle2D; +import static com.fine.swing.ui.layout.Layouts.cell; +import static com.fine.swing.ui.layout.Layouts.column; + public class NewReportBackgroundPane extends BasicPane { private final UICheckBox isPrintBackgroundCheckBox; private final UICheckBox isExportBackgroundCheckBox; @@ -44,14 +45,12 @@ public class NewReportBackgroundPane extends BasicPane { public NewReportBackgroundPane() { setLayout(FRGUIPaneFactory.createBorderLayout()); setBorder(BorderFactory.createEmptyBorder()); - setPreferredSize(FineUIScale.scale(new Dimension(600, 570))); profilePane = new BackgroundProfilePane(); isPrintBackgroundCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Print_Background")); isExportBackgroundCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Export_Background")); - add(profilePane, BorderLayout.CENTER); - add(createBottomPane(), BorderLayout.SOUTH); + add(column(10, cell(profilePane).weight(1), cell(createBottomPane())).getComponent()); } private JPanel createBottomPane() { @@ -122,7 +121,7 @@ public class NewReportBackgroundPane extends BasicPane { uiLabelPane.add(uiLabel, BorderLayout.NORTH); uiLabelPane.setBorder(new ScaledEmptyBorder(10, 0, 0, 0)); backgroundPane = new ReportBackgroundSpecialPane(); - backgroundPane.setBorder(new ScaledEmptyBorder(10, 0, 0, 10)); + backgroundPane.setBorder(new ScaledEmptyBorder(10, 0, 0, 0)); backgroundLabeledPane = TableLayoutHelper.createCommonTableLayoutPane( new Component[][]{ new Component[] { uiLabelPane, backgroundPane } }, new double[] { p }, new double[] { FineUIScale.scale(SETTING_LABEL_WIDTH), f}, IntervalConstants.INTERVAL_L1 @@ -144,9 +143,9 @@ public class NewReportBackgroundPane extends BasicPane { } }); - JPanel contentContainer = Layouts.column( + JPanel contentContainer = column( 10, - Layouts.row(10, Layouts.cell(createLeftPane()), Layouts.cell(createRightPane())) + Layouts.row(10, cell(createLeftPane()).weight(1), cell(createRightPane())).weight(1) ).getComponent(); contentContainer.setPreferredSize(FineUIScale.scale(new Dimension(600, 540))); @@ -167,23 +166,19 @@ public class NewReportBackgroundPane extends BasicPane { } private JPanel createLeftPane() { - JPanel panel = new JPanel(); - panel.add(previewPane, BorderLayout.NORTH); - previewPane.setBorder(new FineRoundBorder()); - JPanel titledPane = Layouts.column( + JPanel panel = new JPanel(new BorderLayout()); + panel.add(previewPane, BorderLayout.CENTER); + + return column( 10, - Layouts.cell(new UILabel(Toolkit.i18nText("Fine-Design_Basic_Preview"))), - Layouts.cell(previewPane) + cell(new UILabel(Toolkit.i18nText("Fine-Design_Basic_Preview"))), + cell(panel).weight(1).with(it -> it.setBorder(new FineRoundBorder())) ).getComponent(); - previewPane.setPreferredSize(FineUIScale.scale(new Dimension(367, 480))); - - return titledPane; } private JPanel createRightPane() { JPanel container = FRGUIPaneFactory.createBorderLayout_S_Pane(); container.setBorder(BorderFactory.createEmptyBorder()); - container.setPreferredSize(FineUIScale.scale(new Dimension(263, 502))); container.add(themePane, BorderLayout.NORTH); return container; } diff --git a/designer-realize/src/main/java/com/fr/design/report/ReportColumnsPane.java b/designer-realize/src/main/java/com/fr/design/report/ReportColumnsPane.java index 9723d494af..b1b296e110 100644 --- a/designer-realize/src/main/java/com/fr/design/report/ReportColumnsPane.java +++ b/designer-realize/src/main/java/com/fr/design/report/ReportColumnsPane.java @@ -100,7 +100,7 @@ public class ReportColumnsPane extends BasicPane{ } }; north.setPreferredSize(FineUIScale.scale(new Dimension(549, 59))); - north.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(11, 23, 6, 23), new UIRoundedBorder(new Color(204, 204, 204), 1, 10))); + north.setBorder(BorderFactory.createCompoundBorder(new ScaledEmptyBorder(11, 23, 6, 23), new UIRoundedBorder(new Color(204, 204, 204), 1, 10))); String[] textArray = new String[] { com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Base_TurnOn"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Base_TurnOff") }; @@ -108,7 +108,7 @@ public class ReportColumnsPane extends BasicPane{ onOffButtonGroup = new UIButtonGroup(textArray) { @Override protected void initButton(UIToggleButton labelButton, int index) { - labelButton.setSize(new Dimension(60,20)); + labelButton.setSize(FineUIScale.scale(new Dimension(60,20))); labelButton.setPreferredSize(FineUIScale.scale(new Dimension(60, 20))); super.initButton(labelButton, index); } diff --git a/designer-realize/src/main/java/com/fr/design/webattr/EditToolBar.java b/designer-realize/src/main/java/com/fr/design/webattr/EditToolBar.java index 03452d97e9..336f1e8d9f 100644 --- a/designer-realize/src/main/java/com/fr/design/webattr/EditToolBar.java +++ b/designer-realize/src/main/java/com/fr/design/webattr/EditToolBar.java @@ -47,6 +47,8 @@ import com.fr.stable.StringUtils; import com.fr.widgettheme.util.WidgetThemeDesignerUtils; import com.fr.write.JavaScriptResourceInfo; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; import javax.swing.DefaultListModel; import javax.swing.Icon; import javax.swing.ImageIcon; @@ -136,6 +138,12 @@ public class EditToolBar extends BasicPane { } } }); + dialog.addWindowFocusListener(new WindowAdapter() { + @Override + public void windowGainedFocus(WindowEvent e) { + dialog.toFront(); + } + }); dialog.setVisible(true); } }; diff --git a/designer-realize/src/main/java/com/fr/design/webattr/SettingToolBar.java b/designer-realize/src/main/java/com/fr/design/webattr/SettingToolBar.java index dbbc06ed20..6a669a22d6 100644 --- a/designer-realize/src/main/java/com/fr/design/webattr/SettingToolBar.java +++ b/designer-realize/src/main/java/com/fr/design/webattr/SettingToolBar.java @@ -12,6 +12,8 @@ import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.Icon; import javax.swing.JPanel; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -73,6 +75,12 @@ public class SettingToolBar extends JPanel { toolBarPane.setFToolBar(tb.update()); } }); + dialog.addWindowFocusListener(new WindowAdapter() { + @Override + public void windowGainedFocus(WindowEvent e) { + dialog.toFront(); + } + }); dialog.setVisible(true); } } diff --git a/designer-realize/src/main/java/com/fr/start/MainDesigner.java b/designer-realize/src/main/java/com/fr/start/MainDesigner.java index dccf53bbef..a796ad3882 100644 --- a/designer-realize/src/main/java/com/fr/start/MainDesigner.java +++ b/designer-realize/src/main/java/com/fr/start/MainDesigner.java @@ -30,6 +30,7 @@ import com.fr.design.gui.imenu.UIPopupMenu; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.ActiveKeyGenerator; import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.DesignerUIModeConfig; import com.fr.design.mainframe.InformationCollector; import com.fr.design.mainframe.JTemplate; import com.fr.design.mainframe.JWorkBook; @@ -158,9 +159,18 @@ public class MainDesigner extends BaseDesigner { FineLoggerFactory.getLogger().info("Designer started.Time used {} ms", DesignerStartupContext.getRecorder().getTime(TimeUnit.MILLISECONDS)); DesignerStartupContext.getRecorder().stop(); SwitchForSwingChecker.initThreadMonitoring(); -// new UiInspector(); -// EdtInvocationManager.installEDTCheckers(); DesignerLatencyMetric.getInstance().start(); + + installUIDevModeTools(); + } + + /** + * 进入UI开发者模式 + */ + private static void installUIDevModeTools() { + if (DesignerUIModeConfig.getInstance().isUIDevMode()) { + new UiInspector(); + } } /**