diff --git a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java index 6f1c94eee3..c6488d3300 100644 --- a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java +++ b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java @@ -418,21 +418,10 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { this.isHttps = isHttps; } - - public String getCertificatePath() { - return certificatePath; - } - - public void setCertificatePath(String certificatePath) { this.certificatePath = certificatePath; } - - public String getCertificatePass() { - return certificatePass; - } - public void setCertificatePass(String certificatePass) { this.certificatePass = certificatePass; } @@ -2015,11 +2004,13 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { private void writeHttpsParas(XMLPrintWriter writer) { writer.startTAG(CAS_PARAS); + // 这边的密钥path和password没有用处了 当前已经全部储存在对应的WorkspaceConnectionInfo中 + // 把历史遗留保存的全部置为空 防止显示明文密钥 后面删除 todo if (StringUtils.isNotBlank(certificatePath)) { - writer.attr(CAS_CERTIFICATE_PATH, certificatePath); + writer.attr(CAS_CERTIFICATE_PATH, StringUtils.EMPTY); } if (StringUtils.isNotBlank(certificatePass)) { - writer.attr(CAS_CERTIFICATE_PASSWORD, certificatePass); + writer.attr(CAS_CERTIFICATE_PASSWORD, StringUtils.EMPTY); } if (isHttps) { writer.attr("enable", true); 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 0ccb5d3e7b..5afe58ad30 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 @@ -20,6 +20,7 @@ import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.iprogressbar.UIProgressBarUI; import com.fr.design.gui.ispinner.UISpinner; import com.fr.design.gui.itextfield.UITextField; +import com.fr.design.jdk.JdkVersion; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; @@ -39,6 +40,7 @@ import com.fr.general.log.Log4jConfig; import com.fr.locale.InterProviderFactory; import com.fr.log.FineLoggerFactory; import com.fr.stable.Constants; +import com.fr.stable.StableUtils; import com.fr.stable.os.OperatingSystem; import com.fr.third.apache.log4j.Level; import com.fr.transaction.Configurations; @@ -216,7 +218,7 @@ public class PreferencePane extends BasicPane { oracleSpace = new UICheckBox(i18nText("Fine-Design_Basic_Show_All_Oracle_Tables")); oraclePane.add(oracleSpace); - if (!OperatingSystem.isLinux()) { + if (!OperatingSystem.isLinux() && JdkVersion.LE_8.support()) { JPanel upmSelectorPane = FRGUIPaneFactory.createTitledBorderPane(i18nText("Fine-Design_Basic_Update_Plugin_Manager")); useOptimizedUPMCheckbox = new UICheckBox(i18nText("Fine-Design_Basic_Use_New_Update_Plugin_Manager")); upmSelectorPane.add(useOptimizedUPMCheckbox); diff --git a/designer-base/src/main/java/com/fr/design/constants/UIConstants.java b/designer-base/src/main/java/com/fr/design/constants/UIConstants.java index 15a7c87c08..93dc57a8f4 100644 --- a/designer-base/src/main/java/com/fr/design/constants/UIConstants.java +++ b/designer-base/src/main/java/com/fr/design/constants/UIConstants.java @@ -37,7 +37,7 @@ public interface UIConstants { public static final Image APPFIT_H3 = IOUtils.readImage("/com/fr/design/images/dialog/appfit/H3.png"); public static final Image APPFIT_H4 = IOUtils.readImage("/com/fr/design/images/dialog/appfit/H4.png"); - public static final Border CELL_ATTR_ZEROBORDER = BorderFactory.createEmptyBorder(0, 0, 0, 0); + public static final Border CELL_ATTR_ZEROBORDER = BorderFactory.createEmptyBorder(0, 1, 0, 0); public static final Border CELL_ATTR_EMPTYBORDER = BorderFactory.createEmptyBorder(0, 10, 0, 0); public static final Border CELL_ATTR_PRESENTBORDER = BorderFactory.createEmptyBorder(0, 5, 0, 0); public static final Border CELL_ATTR_NORMALBORDER = BorderFactory.createEmptyBorder(0, 10, 0, 15); diff --git a/designer-base/src/main/java/com/fr/design/data/DesignTableDataManager.java b/designer-base/src/main/java/com/fr/design/data/DesignTableDataManager.java index bce63d6429..f1758f0689 100644 --- a/designer-base/src/main/java/com/fr/design/data/DesignTableDataManager.java +++ b/designer-base/src/main/java/com/fr/design/data/DesignTableDataManager.java @@ -97,7 +97,7 @@ public abstract class DesignTableDataManager { */ private static void fireDsChanged() { fireDsChanged(globalDsListeners); - for (Iterator>> entryIterator = dsListenersMap.entrySet().iterator(); entryIterator.hasNext();) { + for (Iterator>> entryIterator = dsListenersMap.entrySet().iterator(); entryIterator.hasNext(); ) { List dsListeners = entryIterator.next().getValue(); fireDsChanged(dsListeners); } @@ -190,6 +190,7 @@ public abstract class DesignTableDataManager { } dsListeners.add(l); } + /** * 获取数据源source中dsName的所有字段 * @@ -280,7 +281,7 @@ public abstract class DesignTableDataManager { Entry entry = entryIt.next(); list.add(entry.getKey()); } - return list.toArray(new String[list.size()]); + return list.toArray(new String[0]); } /** diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/TableDataPaneListPane.java b/designer-base/src/main/java/com/fr/design/data/datapane/TableDataPaneListPane.java index 8c09eb3035..8972821b43 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/TableDataPaneListPane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/TableDataPaneListPane.java @@ -7,6 +7,7 @@ import com.fr.data.impl.storeproc.StoreProcedure; import com.fr.design.data.BasicTableDataUtils; import com.fr.design.data.DesignTableDataManager; import com.fr.design.dialog.FineJOptionPane; +import com.fr.design.gui.NameInspector; import com.fr.design.gui.controlpane.JListControlPane; import com.fr.design.gui.controlpane.NameableCreator; import com.fr.design.gui.ilist.ListModelElement; @@ -23,18 +24,20 @@ import com.fr.stable.core.PropertyChangeAdapter; import javax.swing.*; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Set; /** * TableDataList Pane. */ public class TableDataPaneListPane extends JListControlPane implements TableDataPaneController { private boolean isNamePermitted = true; - private Map dsNameChangedMap = new HashMap(); + private Map dsNameChangedMap = new HashMap<>(); public TableDataPaneListPane() { super(); @@ -43,11 +46,15 @@ public class TableDataPaneListPane extends JListControlPane implements TableData @Override public void propertyChange() { isNamePermitted = true; - TableDataSource source = DesignTableDataManager.getEditingTableDataSource(); - String[] allDSNames = DesignTableDataManager.getAllDSNames(source); - String[] allListNames = nameableList.getAllNames(); - allListNames[nameableList.getSelectedIndex()] = StringUtils.EMPTY; String tempName = getEditingName(); + if (ComparatorUtils.equals(tempName, selectedName)) { + //说明双击之后又取消了,啥也不用做 + return; + } + Set allDSNames = DesignTableDataManager.getGlobalDataSet().keySet(); + String[] allListNames = nameableList.getAllNames(); + allListNames[editingIndex] = StringUtils.EMPTY; + Object editingType = getEditingType(); if (!BasicTableDataUtils.checkName(tempName)) { @@ -61,15 +68,14 @@ public class TableDataPaneListPane extends JListControlPane implements TableData isNamePermitted = false; nameableList.stopEditing(); FineJOptionPane.showMessageDialog(SwingUtilities.getWindowAncestor(TableDataPaneListPane.this), - Toolkit.i18nText("Fine-Design_Basic_Table_Data_Empty_Name_Tips"), - Toolkit.i18nText("Fine-Design_Report_Alert"), - JOptionPane.WARNING_MESSAGE); + Toolkit.i18nText("Fine-Design_Basic_Table_Data_Empty_Name_Tips"), + Toolkit.i18nText("Fine-Design_Report_Alert"), + JOptionPane.WARNING_MESSAGE); setIllegalIndex(editingIndex); return; } - - if (!ComparatorUtils.equals(tempName, selectedName) - && isNameRepeated(new List[]{Arrays.asList(allDSNames), Arrays.asList(allListNames)}, tempName)) { + boolean isRepeated = isNameRepeated(new Collection[]{allDSNames, Arrays.asList(allListNames)}, tempName); + if (isRepeated) { isNamePermitted = false; nameableList.stopEditing(); FineJOptionPane.showMessageDialog(SwingUtilities.getWindowAncestor(TableDataPaneListPane.this), Toolkit.i18nText("Fine-Design_Basic_Table_Data_Duplicate_Name_Tips", tempName)); @@ -81,11 +87,7 @@ public class TableDataPaneListPane extends JListControlPane implements TableData setIllegalIndex(editingIndex); } if (nameableList.getSelectedValue() instanceof ListModelElement) { - Nameable selected = ((ListModelElement) nameableList.getSelectedValue()).wrapper; - if (!ComparatorUtils.equals(tempName, selected.getName()) && !isNameRepeated(new List[]{Arrays.asList(allDSNames), Arrays.asList(allListNames)}, tempName)) { - rename(selected.getName(), tempName); - - } + rename(selectedName, isRepeated ? NameInspector.ILLEGAL_NAME_HOLDER : tempName); } } }); @@ -93,7 +95,19 @@ public class TableDataPaneListPane extends JListControlPane implements TableData @Override public void rename(String oldName, String newName) { - dsNameChangedMap.put(oldName, newName); + //如果a改成了b,b又被改成了c,就认为是a改成了c + for (Map.Entry entry : dsNameChangedMap.entrySet()) { + if (StringUtils.equals(oldName, entry.getValue())) { + oldName = entry.getKey(); + break; + } + } + if (StringUtils.equals(oldName, newName)) { + //a -> b;b -> a,说明没改 + dsNameChangedMap.remove(oldName); + } else { + dsNameChangedMap.put(oldName, newName); + } } /** @@ -148,7 +162,7 @@ public class TableDataPaneListPane extends JListControlPane implements TableData String[] allDsNames = DesignTableDataManager.getAllDSNames(source); // richer:生成的名字从1开始. kunsnat: 添加属性从0开始. - int count = 1; + int count = 1; while (isDsNameRepeated(prefix + count, allDsNames)) { count++; } @@ -192,7 +206,7 @@ public class TableDataPaneListPane extends JListControlPane implements TableData } } - populate(nameObjectList.toArray(new NameObject[nameObjectList.size()])); + populate(nameObjectList.toArray(new NameObject[0])); } /** @@ -209,10 +223,10 @@ public class TableDataPaneListPane extends JListControlPane implements TableData } while (procedurenameIt.hasNext()) { String name = procedurenameIt.next(); - nameObjectList.add(new NameObject(name, ProcedureConfig.getInstance().getProcedure(name))); + nameObjectList.add(new NameObject(name, ProcedureConfig.getInstance().getProcedure(name))); } - populate(nameObjectList.toArray(new NameObject[nameObjectList.size()])); + populate(nameObjectList.toArray(new NameObject[0])); } @Override @@ -220,7 +234,7 @@ public class TableDataPaneListPane extends JListControlPane implements TableData tableDataConfig.removeAllTableData(); ProcedureConfig.getInstance().removeAllProcedure(); Nameable[] tableDataArray = this.update(); - Map tableDataMap = new LinkedHashMap(); + Map tableDataMap = new LinkedHashMap(); for (int i = 0; i < tableDataArray.length; i++) { NameObject nameObject = (NameObject) tableDataArray[i]; tableDataMap.put(nameObject.getName(), (TableData) nameObject.getObject()); diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/TableDataTree.java b/designer-base/src/main/java/com/fr/design/data/datapane/TableDataTree.java index 3feabeac13..80471b9e65 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/TableDataTree.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/TableDataTree.java @@ -1,21 +1,22 @@ package com.fr.design.data.datapane; import com.fr.base.BaseUtils; -import com.fr.general.NameObject; import com.fr.design.constants.UIConstants; import com.fr.design.data.tabledata.wrapper.TableDataWrapper; -import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.itree.refreshabletree.ExpandMutableTreeNode; import com.fr.design.gui.itree.refreshabletree.UserObjectRefreshJTree; import com.fr.design.icon.IconPathConstants; import com.fr.general.ComparatorUtils; +import com.fr.general.NameObject; -import javax.swing.*; +import javax.swing.BorderFactory; +import javax.swing.JTree; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeCellRenderer; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreePath; -import java.awt.*; +import java.awt.Color; +import java.awt.Component; /** * TableData Tree @@ -31,6 +32,7 @@ public class TableDataTree extends UserObjectRefreshJTree { this.setCellRenderer(tableDataTreeCellRenderer); this.setEditable(false); } + // CellRenderer private DefaultTreeCellRenderer tableDataTreeCellRenderer = new DefaultTreeCellRenderer() { private static final long serialVersionUID = 1L; @@ -66,14 +68,7 @@ public class TableDataTree extends UserObjectRefreshJTree { this.setIcon(null); this.setText(PENDING.toString()); } - // 这里新建一个Label作为render是因为JTree在动态刷新的时候,节点上render画布的的宽度不会变,会使得一部分比较长的数据显示为"..." - UILabel label = new UILabel(); - label.setText(getText()); - label.setIcon(getIcon()); - Dimension dim = label.getPreferredSize(); - dim.height += 2; - this.setSize(dim); - this.setPreferredSize(dim); + this.setBorder(BorderFactory.createEmptyBorder(1, 0, 1, 0)); this.setBackgroundNonSelectionColor(UIConstants.TREE_BACKGROUND); this.setTextSelectionColor(Color.WHITE); this.setBackgroundSelectionColor(UIConstants.FLESH_BLUE); @@ -157,7 +152,7 @@ public class TableDataTree extends UserObjectRefreshJTree { /* * p:获得选中的NameObject = name + tabledata. - */ + */ public NameObject getSelectedNameObject() { TreePath selectedTreePath = this.getSelectionPath(); if (selectedTreePath == null) { diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/TreeTableDataComboBox.java b/designer-base/src/main/java/com/fr/design/data/datapane/TreeTableDataComboBox.java index 8b5c626571..8964ff8de0 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/TreeTableDataComboBox.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/TreeTableDataComboBox.java @@ -69,7 +69,16 @@ public class TreeTableDataComboBox extends UIComboBox { } } } - + + /** + * 带参刷新方法 + * @param source 数据源数据集 + */ + public void refresh(TableDataSource source) { + this.source = source; + refresh(); + } + public void setSelectedTableDataByName(String name) { TableDataWrapper tableDataWrapper; if (res_map.get(name) != null) { diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/connect/JDBCDefPane.java b/designer-base/src/main/java/com/fr/design/data/datapane/connect/JDBCDefPane.java index 683b38e016..4bf6bf1907 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/connect/JDBCDefPane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/connect/JDBCDefPane.java @@ -11,6 +11,7 @@ import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ipasswordfield.UIPasswordFieldWithFixedLength; import com.fr.design.gui.itextfield.UITextField; import com.fr.design.gui.ilable.ActionLabel; +import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; @@ -90,9 +91,9 @@ public class JDBCDefPane extends JPanel { private IntegerEditor DBCP_MAX_WAIT = new IntegerEditor(); private UITextField DBCP_VALIDATION_QUERY = new UITextField(); - private UIComboBox DBCP_TESTONBORROW = new UIComboBox(new String[]{com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_No"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Yes")}); - private UIComboBox DBCP_TESTONRETURN = new UIComboBox(new String[]{com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_No"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Yes")}); - private UIComboBox DBCP_TESTWHILEIDLE = new UIComboBox(new String[]{com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_No"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Yes")}); + private UIComboBox DBCP_TESTONBORROW = new UIComboBox(new String[]{Toolkit.i18nText("Fine-Design_Basic_No"), Toolkit.i18nText("Fine-Design_Basic_Yes")}); + private UIComboBox DBCP_TESTONRETURN = new UIComboBox(new String[]{Toolkit.i18nText("Fine-Design_Basic_No"), Toolkit.i18nText("Fine-Design_Basic_Yes")}); + private UIComboBox DBCP_TESTWHILEIDLE = new UIComboBox(new String[]{Toolkit.i18nText("Fine-Design_Basic_No"), Toolkit.i18nText("Fine-Design_Basic_Yes")}); private IntegerEditor DBCP_TIMEBETWEENEVICTIONRUNSMILLS = new IntegerEditor(); private IntegerEditor DBCP_NUMTESTSPEREVICTIONRUN = new IntegerEditor(); @@ -120,13 +121,13 @@ public class JDBCDefPane extends JPanel { userNameTextField.setName(USER_NAME); passwordTextField = new UIPasswordFieldWithFixedLength(15); dbtypeButton = new UIButton("."); - dbtypeButton.setToolTipText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Click_Get_Default_URL")); + dbtypeButton.setToolTipText(Toolkit.i18nText("Fine-Design_Basic_Click_Get_Default_URL")); dbtypeButton.addActionListener(dbtypeButtonActionListener); double p = TableLayout.PREFERRED; double f = TableLayout.FILL; JPanel dbtypePane = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane(); - dbtypePane.add(new UILabel((com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Database") + ":"))); + dbtypePane.add(new UILabel((Toolkit.i18nText("Fine-Design_Basic_Database") + ":"))); JPanel dbtypeComPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); Component[][] dbtypeComComponents = {{dbtypeComboBox}}; double[] dbtypeRowSize = {p}; @@ -134,10 +135,10 @@ public class JDBCDefPane extends JPanel { dbtypeComPane = TableLayoutHelper.createTableLayoutPane(dbtypeComComponents, dbtypeRowSize, dbtypeColumnSize); JPanel driverPane = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane(); - driverPane.add(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Driver") + ":")); + driverPane.add(new UILabel(Toolkit.i18nText("Fine-Design_Basic_Driver") + ":")); // 选择ODBC数据源的时候的提示链接 JPanel odbcTipsPane = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane(); - odbcTipsLink = new ActionLabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Odbc_Tips")) { + odbcTipsLink = new ActionLabel(Toolkit.i18nText("Fine-Design_Basic_Odbc_Tips")) { @Override public void paintComponent(Graphics _gfx) { super.paintComponent(_gfx); @@ -146,7 +147,7 @@ public class JDBCDefPane extends JPanel { } }; odbcTipsPane.add(odbcTipsLink); - odbcTipsLink.setPreferredSize(new Dimension(GraphHelper.getWidth(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Odbc_Tips")), odbcTipsLink.getPreferredSize().height)); + odbcTipsLink.setPreferredSize(new Dimension(GraphHelper.getWidth(Toolkit.i18nText("Fine-Design_Basic_Odbc_Tips")), odbcTipsLink.getPreferredSize().height)); odbcTipsLink.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { String url = CloudCenter.getInstance().acquireUrlByKind("odbc.help"); @@ -167,26 +168,27 @@ public class JDBCDefPane extends JPanel { urlComPane = TableLayoutHelper.createCommonTableLayoutPane(urlComComponents, urlRowSize, urlColumnSize, 4); JPanel userPane = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane(); - userPane.add(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_UserName") + ":")); + userPane.add(new UILabel(Toolkit.i18nText("Fine-Design_Report_UserName") + ":")); JPanel userComPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); - Component[][] userComComponents = {{userNameTextField, new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Password") + ":"), passwordTextField}}; + Component[][] userComComponents = {{userNameTextField, new UILabel(Toolkit.i18nText("Fine-Design_Basic_Password") + ":"), passwordTextField}}; double[] userRowSize = {p}; double[] userColumnSize = {f, p, f}; userComPane = TableLayoutHelper.createCommonTableLayoutPane(userComComponents, userRowSize, userColumnSize, 4); JPanel passwordPane = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane(); - passwordPane.add(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Password") + ":")); + passwordPane.add(new UILabel(Toolkit.i18nText("Fine-Design_Basic_Password") + ":")); Component[][] components = {{dbtypePane, dbtypeComPane}, {driverPane, driverComboBoxAndTips}, {urlPane, urlComPane}, {userPane, userComPane},}; double[] rowSize = {p, p, p, p}; double[] columnSize = {p, f, 22}; - JPanel centerPanel = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, 0, 6); + // REPORT-41450 Windows环境的jdk11下dpi为125%时会因为缩放导致显示问题,因此加个水平gap值 + JPanel centerPanel = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, 6, 6); innerthis.add(centerPanel); JPanel southPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); innerthis.add(southPanel); southPanel.setBorder(BorderFactory.createEmptyBorder(10, 0, 4, 20)); - ActionLabel actionLabel = new ActionLabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_ConnectionPool_Attr")); + ActionLabel actionLabel = new ActionLabel(Toolkit.i18nText("Fine-Design_Basic_ConnectionPool_Attr")); southPanel.add(actionLabel, BorderLayout.EAST); actionLabel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { @@ -331,7 +333,7 @@ public class JDBCDefPane extends JPanel { if (ComparatorUtils.equals(dbtypeComboBox.getSelectedItem(), ("Access"))) { // ben:这个能不能换种处理方案- - JFileChooser filechooser = new JFileChooser(); - filechooser.setDialogTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Open")); + filechooser.setDialogTitle(Toolkit.i18nText("Fine-Design_Basic_Open")); filechooser.setMultiSelectionEnabled(false); filechooser.addChoosableFileFilter(new ChooseFileFilter(new String[]{"accdb", "mdb"}, "Microsoft Office Access")); int result = filechooser.showOpenDialog(DesignerContext.getDesignerFrame()); @@ -373,19 +375,19 @@ public class JDBCDefPane extends JPanel { double[] rowSize = {f, f, f, f, f, f, f, f, f, f, f, f}; double[] columnSize = {f, f}; Component[][] comps = { - {new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Dbcp_Initial_Size") + ":", SwingConstants.RIGHT), DBCP_INITIAL_SIZE}, - {new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Dbcp_Max_Active") + ":", SwingConstants.RIGHT), DBCP_MAX_ACTIVE}, - {new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Dbcp_Max_Idle") + ":", SwingConstants.RIGHT), DBCP_MAX_IDLE}, - {new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Dbcp_Min_Idle") + ":", SwingConstants.RIGHT), DBCP_MIN_IDLE}, - {new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Connection_Pool_Max_Wait_Time") + ":", SwingConstants.RIGHT), DBCP_MAX_WAIT}, - {new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Dbcp_Validation_Query") + ":", SwingConstants.RIGHT), DBCP_VALIDATION_QUERY}, - {new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Dbcp_Test_On_Borrow") + ":", SwingConstants.RIGHT), DBCP_TESTONBORROW}, - {new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Dbcp_Test_On_Return") + ":", SwingConstants.RIGHT), DBCP_TESTONRETURN}, - {new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Dbcp_Test_While_Idle") + ":", SwingConstants.RIGHT), DBCP_TESTWHILEIDLE}, - {new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Connection_Pool_Evictionruns_millis") + ":", SwingConstants.RIGHT), + {new UILabel(Toolkit.i18nText("Fine-Design_Basic_Dbcp_Initial_Size") + ":", SwingConstants.RIGHT), DBCP_INITIAL_SIZE}, + {new UILabel(Toolkit.i18nText("Fine-Design_Basic_Dbcp_Max_Active") + ":", SwingConstants.RIGHT), DBCP_MAX_ACTIVE}, + {new UILabel(Toolkit.i18nText("Fine-Design_Basic_Dbcp_Max_Idle") + ":", SwingConstants.RIGHT), DBCP_MAX_IDLE}, + {new UILabel(Toolkit.i18nText("Fine-Design_Basic_Dbcp_Min_Idle") + ":", SwingConstants.RIGHT), DBCP_MIN_IDLE}, + {new UILabel(Toolkit.i18nText("Fine-Design_Basic_Connection_Pool_Max_Wait_Time") + ":", SwingConstants.RIGHT), DBCP_MAX_WAIT}, + {new UILabel(Toolkit.i18nText("Fine-Design_Basic_Dbcp_Validation_Query") + ":", SwingConstants.RIGHT), DBCP_VALIDATION_QUERY}, + {new UILabel(Toolkit.i18nText("Fine-Design_Basic_Dbcp_Test_On_Borrow") + ":", SwingConstants.RIGHT), DBCP_TESTONBORROW}, + {new UILabel(Toolkit.i18nText("Fine-Design_Basic_Dbcp_Test_On_Return") + ":", SwingConstants.RIGHT), DBCP_TESTONRETURN}, + {new UILabel(Toolkit.i18nText("Fine-Design_Basic_Dbcp_Test_While_Idle") + ":", SwingConstants.RIGHT), DBCP_TESTWHILEIDLE}, + {new UILabel(Toolkit.i18nText("Fine-Design_Basic_Connection_Pool_Evictionruns_millis") + ":", SwingConstants.RIGHT), DBCP_TIMEBETWEENEVICTIONRUNSMILLS}, - {new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Dbcp_Num_Test_Per_Evction_Run") + ":", SwingConstants.RIGHT), DBCP_NUMTESTSPEREVICTIONRUN}, - {new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Connection_Pool_Mix_Evictable_Idle_Time_Millis") + ":", SwingConstants.RIGHT), + {new UILabel(Toolkit.i18nText("Fine-Design_Basic_Dbcp_Num_Test_Per_Evction_Run") + ":", SwingConstants.RIGHT), DBCP_NUMTESTSPEREVICTIONRUN}, + {new UILabel(Toolkit.i18nText("Fine-Design_Basic_Connection_Pool_Mix_Evictable_Idle_Time_Millis") + ":", SwingConstants.RIGHT), DBCP_MINEVICTABLEIDLETIMEMILLIS}}; JPanel contextPane = TableLayoutHelper.createGapTableLayoutPane(comps, rowSize, columnSize, 10, 4); @@ -395,7 +397,7 @@ public class JDBCDefPane extends JPanel { @Override protected String title4PopupWindow() { - return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_ConnectionPool_Attr"); + return Toolkit.i18nText("Fine-Design_Basic_ConnectionPool_Attr"); } } 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 8d8e3a48c6..d3881bcd12 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 @@ -15,20 +15,31 @@ import com.fr.design.data.DesignTableDataManager; import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.BasicPane; import com.fr.design.dialog.FineJOptionPane; -import com.fr.design.file.HistoryTemplateListPane; +import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.gui.frpane.UITabbedPane; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.iprogressbar.AutoProgressBar; import com.fr.design.gui.itable.SortableJTable; import com.fr.design.gui.itable.TableSorter; import com.fr.design.gui.itextfield.UINumberField; +import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.DesignerContext; +import com.fr.design.ui.util.UIUtil; import com.fr.function.TIME; import com.fr.general.FRFont; import com.fr.log.FineLoggerFactory; -import javax.swing.*; +import javax.swing.BorderFactory; +import javax.swing.Icon; +import javax.swing.JComponent; +import javax.swing.JFrame; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTable; +import javax.swing.SwingWorker; +import javax.swing.UIManager; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.TableColumn; import javax.swing.table.TableModel; @@ -81,7 +92,7 @@ public class PreviewTablePane extends BasicPane { JPanel currentPreviewPanel = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); previewNumberPanel.add(currentPreviewPanel); - currentPreviewPanel.add(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Current_Preview_Rows") + ":")); + currentPreviewPanel.add(new UILabel(Toolkit.i18nText("Fine-Design_Basic_Current_Preview_Rows") + ":")); currentRowsField = new UINumberField(); currentPreviewPanel.add(currentRowsField); @@ -91,7 +102,7 @@ public class PreviewTablePane extends BasicPane { JPanel maxPanel = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); previewNumberPanel.add(maxPanel); - maxPanel.add(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Datasource_Maximum_Number_of_Preview_Rows") + ":")); + maxPanel.add(new UILabel(Toolkit.i18nText("Fine-Design_Basic_Datasource_Maximum_Number_of_Preview_Rows") + ":")); maxPreviewNumberField = new UINumberField(); maxPanel.add(maxPreviewNumberField); @@ -158,7 +169,7 @@ public class PreviewTablePane extends BasicPane { if (this.dialog == null) { this.dialog = this.showWindow(new JFrame()); } - progressBar = new AutoProgressBar(this, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Loading_Data"), "", 0, 100) { + progressBar = new AutoProgressBar(this, Toolkit.i18nText("Fine-Design_Basic_Loading_Data"), "", 0, 100) { public void doMonitorCanceled() { if (getWorker() != null) { getWorker().cancel(true); @@ -174,7 +185,7 @@ public class PreviewTablePane extends BasicPane { @Override protected String title4PopupWindow() { - return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preview"); + return Toolkit.i18nText("Fine-Design_Basic_Preview"); } private void addLoadedListener(LoadedEventListener l) { @@ -268,7 +279,7 @@ 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(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Data"))); + previewTablePane.setBorder(BorderFactory.createTitledBorder(Toolkit.i18nText("Fine-Design_Basic_Data"))); try { previewTablePane.populate(tableData); previewTablePane.resetPreviewTableColumnColor(); @@ -298,13 +309,13 @@ public class PreviewTablePane extends BasicPane { try { int choiceColumn = Integer.parseInt(columnErrMessage.trim()); int tatalColumn = Integer.parseInt(tatolColumnErrMessage.trim()); - columnErrMessage = com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Tabledata_Preview_Warn_Text", choiceColumn + 1, tatalColumn); + columnErrMessage = Toolkit.i18nText("Fine-Design_Basic_Tabledata_Preview_Warn_Text", choiceColumn + 1, tatalColumn); } catch (Exception e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); return; } FineLoggerFactory.getLogger().error(exp.getMessage(), exp); - FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), columnErrMessage, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Error"), JOptionPane.ERROR_MESSAGE); + FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), columnErrMessage, Toolkit.i18nText("Fine-Design_Basic_Error"), JOptionPane.ERROR_MESSAGE); } private void populate(TableData tableData) throws Exception { @@ -317,7 +328,7 @@ public class PreviewTablePane extends BasicPane { } private void previewTableDataSQL() throws Exception { - connectionBar = new AutoProgressBar(this, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Utils_Now_Create_Connection"), "", 0, 100) { + connectionBar = new AutoProgressBar(this, Toolkit.i18nText("Fine-Design_Basic_Utils_Now_Create_Connection"), "", 0, 100) { public void doMonitorCanceled() { getWorker().cancel(true); getDialog().setVisible(false); @@ -365,13 +376,14 @@ public class PreviewTablePane extends BasicPane { if (tableData instanceof DBTableData) { boolean status = DataOperator.getInstance().testConnection(((DBTableData) tableData).getDatabase()); if (!status) { - throw new Exception(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Database_Connection_Failed")); + throw new Exception(Toolkit.i18nText("Fine-Design_Basic_Database_Connection_Failed")); } } } finally { - connectionBar.close(); + // 将close操作放到EDT线程中 + UIUtil.invokeLaterIfNeeded(() -> connectionBar.close()); } - TableDataSource dataSource = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().getTarget(); + TableDataSource dataSource = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate().getTarget(); previewTableData = DesignTableDataManager.previewTableDataNeedInputParameters(dataSource, tableData, (int) maxPreviewNumberField.getValue(), true, progressBar); // parameterInputDialog // update之后的parameters,转成一个parameterMap,用于预览TableData @@ -396,7 +408,7 @@ public class PreviewTablePane extends BasicPane { if (!(e instanceof CancellationException)) { FineLoggerFactory.getLogger().error(e.getMessage(), e); FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), e.getMessage(), - com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Error"), JOptionPane.ERROR_MESSAGE, UIManager.getIcon("OptionPane.errorIcon")); + Toolkit.i18nText("Fine-Design_Basic_Error"), JOptionPane.ERROR_MESSAGE, UIManager.getIcon("OptionPane.errorIcon")); } dialog.setVisible(false); } finally { @@ -425,7 +437,7 @@ public class PreviewTablePane extends BasicPane { public static void previewStoreData(final ProcedureDataModel storeProcedureDataModel, final int keyIndex, final int valueIndex) { final PreviewTablePane previewTablePane = new PreviewTablePane(); previewTablePane.storeProcedureDataModel = storeProcedureDataModel; - previewTablePane.setBorder(BorderFactory.createTitledBorder(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Data"))); + previewTablePane.setBorder(BorderFactory.createTitledBorder(Toolkit.i18nText("Fine-Design_Basic_Data"))); try { previewTablePane.populateStoreDataSQL(); @@ -442,7 +454,7 @@ public class PreviewTablePane extends BasicPane { FineLoggerFactory.getLogger().error(e.getMessage(), e); } previewTablePane.fireLoadedListener(); - previewTablePane.showWindow(DesignerContext.getDesignerFrame()).setVisible(true); + previewTablePane.showWindow(new JFrame()).setVisible(true); } /** @@ -456,7 +468,7 @@ public class PreviewTablePane extends BasicPane { for (int i = 0; i < tableSize; i++) { PreviewTablePane previewTablePane = new PreviewTablePane(); previewTablePane.storeProcedureDataModel = storeProcedureDataModels[i]; - previewTablePane.setBorder(BorderFactory.createTitledBorder(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Data"))); + previewTablePane.setBorder(BorderFactory.createTitledBorder(Toolkit.i18nText("Fine-Design_Basic_Data"))); try { previewTablePane.populateStoreDataSQL(); } catch (Exception e) { @@ -469,13 +481,13 @@ public class PreviewTablePane extends BasicPane { @Override protected String title4PopupWindow() { - return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preview"); + return Toolkit.i18nText("Fine-Design_Basic_Preview"); } }; prieviewPane.setLayout(FRGUIPaneFactory.createBorderLayout()); prieviewPane.add(tabPreviewpane, BorderLayout.CENTER); - prieviewPane.showWindow(DesignerContext.getDesignerFrame()).setVisible(true); + prieviewPane.showWindow(new JFrame()).setVisible(true); } private void populateStoreDataSQL() throws Exception { 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 d1beacb1d8..6065d04859 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 @@ -185,7 +185,8 @@ public class DBTableDataPane extends AbstractTableDataPane { box.setMinimumSize(new Dimension(300, 400)); // 防止数据连接名过长时影响 split pane 分割效果 - connectionTableProcedurePane.setMinimumSize(new Dimension(250, 400)); + // 本界面中给MaxMemRowCountPanel留的空间太小,造成MaxMemRowCountPanel显示异常,这边减小一点最小宽度,拉长MaxMemRowCountPanel + connectionTableProcedurePane.setMinimumSize(new Dimension(230, 400)); connectionTableProcedurePane.setMaximumSize(new Dimension(500, 400)); // 使用SplitPane JSplitPane mainSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true, connectionTableProcedurePane, sqlSplitPane); diff --git a/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/MaxMemRowCountPanel.java b/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/MaxMemRowCountPanel.java index 2df6cda02c..af2b71a7c6 100644 --- a/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/MaxMemRowCountPanel.java +++ b/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/MaxMemRowCountPanel.java @@ -21,7 +21,7 @@ public class MaxMemRowCountPanel extends UIToolbar { private static final int MAX_IN_MEMORY = 1; private static final String[] CACHE_LIST = {com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Save_All_Records_In_Memory"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Max_Mem_Row_Count") }; - private static final int MAX_WIDTH = getMaxComBoBoxWidth() > 200 ? 350 : 250; + private static final int MAX_WIDTH = getMaxComBoBoxWidth() > 200 ? 350 : 280; private static final int MAX_COMPONENT_COUNT_OF_MAX_MEMORY = 4; private static int getMaxComBoBoxWidth() { int maxWidth = GraphHelper.getWidth(CACHE_LIST[0]); @@ -72,7 +72,8 @@ public class MaxMemRowCountPanel extends UIToolbar { this.setBackground(UIConstants.NORMAL_BACKGROUND); switchCache = new UIComboBox(CACHE_LIST); switchCache.addActionListener(switchStateL); - numberSpinner = new UISpinner(0, Integer.MAX_VALUE, 1, 4); + numberSpinner = new UISpinner(0, Integer.MAX_VALUE, 1); + numberSpinner.setNumberFieldColumns(3); } private void showAllPanel() { diff --git a/designer-base/src/main/java/com/fr/design/data/tabledata/wrapper/StoreProcedureDataWrapper.java b/designer-base/src/main/java/com/fr/design/data/tabledata/wrapper/StoreProcedureDataWrapper.java index cefc0e1128..17fbf57888 100644 --- a/designer-base/src/main/java/com/fr/design/data/tabledata/wrapper/StoreProcedureDataWrapper.java +++ b/designer-base/src/main/java/com/fr/design/data/tabledata/wrapper/StoreProcedureDataWrapper.java @@ -7,17 +7,16 @@ import com.fr.data.impl.storeproc.StoreProcedure; import com.fr.data.operator.DataOperator; import com.fr.design.data.DesignTableDataManager; import com.fr.design.data.datapane.preview.PreviewTablePane; -import com.fr.design.dialog.BasicDialog; -import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.dialog.FineJOptionPane; import com.fr.design.gui.iprogressbar.AutoProgressBar; import com.fr.design.gui.itree.refreshabletree.ExpandMutableTreeNode; +import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.DesignerContext; import com.fr.general.ComparatorUtils; import com.fr.log.FineLoggerFactory; import javax.swing.Icon; -import javax.swing.JOptionPane; +import javax.swing.JFrame; import javax.swing.SwingWorker; import java.util.ArrayList; import java.util.Arrays; @@ -50,7 +49,6 @@ public final class StoreProcedureDataWrapper implements TableDataWrapper { private AutoProgressBar connectionBar; private ProcedureDataModel[] dataModels; private SwingWorker worker; - private BasicDialog dialog; private int previewModel; public StoreProcedureDataWrapper(StoreProcedure storeProcedure, String storeprocedureName, String dsName) { @@ -71,19 +69,8 @@ public final class StoreProcedureDataWrapper implements TableDataWrapper { if (needLoad) { setWorker(); } - dialog = PreviewTablePane.getInstance().getDialog(); - dialog.addDialogActionListener(new DialogActionAdapter() { - public void doOk() { - getWorker().cancel(true); - } - - public void doCancel() { - getWorker().cancel(true); - } - }); - loadingBar = new AutoProgressBar(dialog, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Loading_Data"), "", 0, 100) { + loadingBar = new AutoProgressBar(new JFrame(), Toolkit.i18nText("Fine-Design_Basic_Loading_Data"), "", 0, 100) { public void doMonitorCanceled() { - getDialog().setVisible(false); getWorker().cancel(true); } }; @@ -93,17 +80,17 @@ public final class StoreProcedureDataWrapper implements TableDataWrapper { * 数据集执行结果返回的所有字段 * * @return 数据集执行结果返回的所有字段 - * + * * * @date 2014-12-3-下午7:43:17 - * + * */ public List calculateColumnNameList() { if (columnNameList != null) { return columnNameList; } if (!createStore(false)) { - FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Engine_No_TableData")); + FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Toolkit.i18nText("Fine-Design_Basic_Engine_No_TableData")); return new ArrayList(); } columnNameList = Arrays.asList(procedureDataModel.getColumnName()); @@ -114,10 +101,10 @@ public final class StoreProcedureDataWrapper implements TableDataWrapper { * 生成子节点 * * @return 节点数组 - * + * * * @date 2014-12-3-下午7:06:47 - * + * */ public ExpandMutableTreeNode[] load() { List namelist; @@ -160,25 +147,16 @@ public final class StoreProcedureDataWrapper implements TableDataWrapper { /** * 预览数据 - * + * * @param previewModel 预览模式, 全部还是一个 - * + * * * @date 2014-12-3-下午7:05:50 - * + * */ public void previewData(final int previewModel) { this.previewModel = previewModel; - new SwingWorker() { - - protected Object doInBackground() throws Exception { - loadingBar.close(); - PreviewTablePane.resetPreviewTable(); - dialog.setVisible(true); - return null; - } - }.execute(); - connectionBar = new AutoProgressBar(dialog, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Utils_Now_Create_Connection"), "", 0, 100) { + connectionBar = new AutoProgressBar(new JFrame(), Toolkit.i18nText("Fine-Design_Basic_Utils_Now_Create_Connection"), "", 0, 100) { public void doMonitorCanceled() { connectionBar.close(); worker.cancel(true); @@ -190,13 +168,13 @@ public final class StoreProcedureDataWrapper implements TableDataWrapper { private void setWorker() { worker = new SwingWorker() { protected Void doInBackground() throws Exception { + loadingBar.close(); + PreviewTablePane.resetPreviewTable(); connectionBar.start(); boolean status = DataOperator.getInstance().testConnection(((StoreProcedure) getTableData()).getDatabaseConnection()); if (!status) { connectionBar.close(); - // bug 61345 预览失败时,关闭窗口 - dialog.setVisible(false); - throw new Exception(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Database_Connection_Failed")); + throw new Exception(Toolkit.i18nText("Fine-Design_Basic_Database_Connection_Failed")); } connectionBar.close(); storeProcedure.resetDataModelList(); @@ -208,7 +186,6 @@ public final class StoreProcedureDataWrapper implements TableDataWrapper { try { get(); loadingBar.close(); - dialog.setVisible(false); switch (previewModel) { case StoreProcedureDataWrapper.PREVIEW_ALL: PreviewTablePane.previewStoreDataWithAllDs(dataModels); @@ -228,10 +205,6 @@ public final class StoreProcedureDataWrapper implements TableDataWrapper { }; } - private BasicDialog getDialog() { - return this.dialog; - } - private SwingWorker getWorker() { return this.worker; } @@ -240,10 +213,10 @@ public final class StoreProcedureDataWrapper implements TableDataWrapper { /** * 预览返回的一个数据集 - * + * * * @date 2014-12-3-下午7:42:53 - * + * */ public void previewData() { previewData(-1, -1); @@ -253,13 +226,13 @@ public final class StoreProcedureDataWrapper implements TableDataWrapper { /** * 预览返回的一个数据集,带有显示值和实际值的标记结果 - * + * * @param keyIndex 实际值 * @param valueIndex 显示值 - * + * * * @date 2014-12-3-下午7:42:27 - * + * */ public void previewData(final int keyIndex, final int valueIndex) { PreviewTablePane.previewStoreData(procedureDataModel, keyIndex, valueIndex); diff --git a/designer-base/src/main/java/com/fr/design/dialog/UIDialog.java b/designer-base/src/main/java/com/fr/design/dialog/UIDialog.java index 8f2021c696..dd3ddab3b9 100644 --- a/designer-base/src/main/java/com/fr/design/dialog/UIDialog.java +++ b/designer-base/src/main/java/com/fr/design/dialog/UIDialog.java @@ -116,6 +116,11 @@ public abstract class UIDialog extends JDialog { doCancel(); } }); + + applyEnterAction(); + } + + protected void applyEnterAction() { JPanel defaultPane = (JPanel) this.getContentPane(); InputMap inputMapAncestor = defaultPane.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); ActionMap actionMap = defaultPane.getActionMap(); diff --git a/designer-base/src/main/java/com/fr/design/extra/ShopDialog.java b/designer-base/src/main/java/com/fr/design/extra/ShopDialog.java index 69ad0f08d1..e0170cef88 100644 --- a/designer-base/src/main/java/com/fr/design/extra/ShopDialog.java +++ b/designer-base/src/main/java/com/fr/design/extra/ShopDialog.java @@ -2,6 +2,7 @@ package com.fr.design.extra; import com.fr.design.dialog.BasicPane; import com.fr.design.dialog.UIDialog; +import com.fr.design.jdk.JdkVersion; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.stable.StableUtils; @@ -12,7 +13,6 @@ import java.awt.*; * Created by vito on 16/4/18. */ public class ShopDialog extends UIDialog { - private static final Dimension DEFAULT_SHOP = new Dimension(900, 700); public ShopDialog(Frame frame, BasicPane pane) { super(frame); @@ -22,11 +22,21 @@ public class ShopDialog extends UIDialog { JPanel panel = (JPanel) getContentPane(); panel.setLayout(new BorderLayout()); add(pane, BorderLayout.CENTER); - setSize(DEFAULT_SHOP); + setSize(createDefaultDimension()); GUICoreUtils.centerWindow(this); setResizable(false); } + private Dimension createDefaultDimension() { + Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); + // jdk11 分辨率较低 缩放较大时 屏幕高度小于或接近设定的高度 需要调整下 + if (JdkVersion.GE_9.support() && screenSize.height - 700 < 50) { + return new Dimension(900, screenSize.height - 100); + } else { + return new Dimension(900, 700); + } + } + @Override public void checkValid() throws Exception { // do nothing diff --git a/designer-base/src/main/java/com/fr/design/gui/controlpane/JListControlPane.java b/designer-base/src/main/java/com/fr/design/gui/controlpane/JListControlPane.java index 3eb644c334..b82a584679 100644 --- a/designer-base/src/main/java/com/fr/design/gui/controlpane/JListControlPane.java +++ b/designer-base/src/main/java/com/fr/design/gui/controlpane/JListControlPane.java @@ -27,6 +27,7 @@ import java.awt.Component; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; +import java.util.Collection; public abstract class JListControlPane extends JControlPane implements ListControlPaneProvider { private static final String LIST_NAME = "JControl_List"; @@ -190,9 +191,9 @@ public abstract class JListControlPane extends JControlPane implements ListContr return getHelper().getSelectedName(); } - protected boolean isNameRepeated(java.util.List[] list, String name) { - for (int i = 0; i < list.length; i++) { - if (list[i].contains(name)) { + protected boolean isNameRepeated(Collection[] collections, String name) { + for (int i = 0; i < collections.length; i++) { + if (collections[i].contains(name)) { isNameRepeated = true; return true; } diff --git a/designer-base/src/main/java/com/fr/design/gui/controlpane/ListControlPaneHelper.java b/designer-base/src/main/java/com/fr/design/gui/controlpane/ListControlPaneHelper.java index 0d12772d33..76255d96b7 100644 --- a/designer-base/src/main/java/com/fr/design/gui/controlpane/ListControlPaneHelper.java +++ b/designer-base/src/main/java/com/fr/design/gui/controlpane/ListControlPaneHelper.java @@ -65,7 +65,7 @@ class ListControlPaneHelper { res.add(((ListModelElement) listModel.getElementAt(i)).wrapper); } - return res.toArray(new Nameable[res.size()]); + return res.toArray(new Nameable[0]); } /** diff --git a/designer-base/src/main/java/com/fr/design/gui/frpane/JTreeAutoBuildPane.java b/designer-base/src/main/java/com/fr/design/gui/frpane/JTreeAutoBuildPane.java index 46cdae35bd..6103e68002 100644 --- a/designer-base/src/main/java/com/fr/design/gui/frpane/JTreeAutoBuildPane.java +++ b/designer-base/src/main/java/com/fr/design/gui/frpane/JTreeAutoBuildPane.java @@ -26,14 +26,14 @@ import com.fr.design.gui.ilable.UILabel; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; - import com.fr.stable.StringUtils; - -import javax.swing.*; import java.awt.*; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.util.List; +import javax.swing.*; +import javax.swing.event.PopupMenuEvent; +import javax.swing.event.PopupMenuListener; public class JTreeAutoBuildPane extends BasicPane implements PreviewLabel.Previewable, EditOrNewLabel.Editable { private TreeTableDataComboBox treeTableDataComboBox; @@ -61,6 +61,23 @@ public class JTreeAutoBuildPane extends BasicPane implements PreviewLabel.Previe tdChange(); } }); + // REPORT-38762 加一个展开监听事件,下拉框展开时刷新一下数据集 + treeTableDataComboBox.addPopupMenuListener(new PopupMenuListener() { + @Override + public void popupMenuWillBecomeVisible(PopupMenuEvent e) { + treeTableDataComboBox.refresh(DesignTableDataManager.getEditingTableDataSource()); + } + + @Override + public void popupMenuWillBecomeInvisible(PopupMenuEvent e) { + + } + + @Override + public void popupMenuCanceled(PopupMenuEvent e) { + + } + }); selectTreeDataPanel.add(treeTableDataComboBox); treeTableDataComboBox.setPreferredSize(new Dimension(200, 25)); treeTableDataComboBox.setSelectedIndex(-1); diff --git a/designer-base/src/main/java/com/fr/design/gui/frpane/UINumberDragPane.java b/designer-base/src/main/java/com/fr/design/gui/frpane/UINumberDragPane.java index b1958a8c19..7314025724 100644 --- a/designer-base/src/main/java/com/fr/design/gui/frpane/UINumberDragPane.java +++ b/designer-base/src/main/java/com/fr/design/gui/frpane/UINumberDragPane.java @@ -1,17 +1,16 @@ package com.fr.design.gui.frpane; -import java.awt.BorderLayout; -import java.awt.Dimension; - -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; - import com.fr.design.beans.BasicBeanPane; import com.fr.design.event.GlobalNameListener; import com.fr.design.event.GlobalNameObserver; import com.fr.design.gui.ispinner.UISpinner; import com.fr.design.gui.style.NumberDragBar; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import java.awt.BorderLayout; +import java.awt.Dimension; + public class UINumberDragPane extends BasicBeanPane implements GlobalNameObserver { private static final long serialVersionUID = -8681716725163358249L; @@ -35,7 +34,7 @@ public class UINumberDragPane extends BasicBeanPane implements GlobalNam public UINumberDragPane(double minValue, double maxValue, double dierta) { dragBar = new NumberDragBar((int) minValue, (int) maxValue); - spinner = new UISpinner(minValue, maxValue, dierta, minValue); + spinner = createUISpinner(minValue, maxValue, dierta); spinner.setGlobalName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_StyleAlignment_Text_Rotation")); this.setLayout(new BorderLayout(4, 0)); this.add(spinner, BorderLayout.EAST); @@ -66,6 +65,10 @@ public class UINumberDragPane extends BasicBeanPane implements GlobalNam }); } + protected UISpinner createUISpinner(double minValue, double maxValue, double dierta) { + return new UISpinner(minValue, maxValue, dierta, minValue); + } + /** * 添加事件 * @param l 事件 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 29214984c3..d1847545ce 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 @@ -3,11 +3,12 @@ package com.fr.design.gui.iprogressbar; import com.fr.design.constants.UIConstants; import com.fr.design.dialog.UIDialog; import com.fr.design.gui.ilable.UILabel; -import com.fr.stable.os.support.OSBasedAction; -import com.fr.stable.os.support.OSSupportCenter; import com.fr.design.os.impl.SupportOSImpl; +import com.fr.design.utils.DesignUtils; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.FRFont; +import com.fr.stable.os.support.OSBasedAction; +import com.fr.stable.os.support.OSSupportCenter; import javax.swing.JDialog; import javax.swing.JLabel; @@ -57,7 +58,10 @@ public class ProgressDialog extends UIDialog { progressBar.setMaximum(1000); panel.add(progressBar, BorderLayout.CENTER); text = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Loading_Project"), JLabel.CENTER); - FRFont font = FRFont.getInstance().applySize(14).applyForeground(new ColorUIResource(333334)); + FRFont font = DesignUtils + .getDefaultGUIFont() + .applySize(14) + .applyForeground(new ColorUIResource(333334)); text.setFont(font); panel.add(text, BorderLayout.SOUTH); panel.setVisible(true); diff --git a/designer-base/src/main/java/com/fr/design/gui/ispinner/UISpinner.java b/designer-base/src/main/java/com/fr/design/gui/ispinner/UISpinner.java index a418a2b37e..c60ae27605 100644 --- a/designer-base/src/main/java/com/fr/design/gui/ispinner/UISpinner.java +++ b/designer-base/src/main/java/com/fr/design/gui/ispinner/UISpinner.java @@ -56,10 +56,6 @@ public class UISpinner extends JPanel implements UIObserver, GlobalNameObserver textField.setValue(defaultValue); } - public UISpinner(double minValue, double maxValue, double dierta, int numberFieldColumns) { - this.numberFieldColumns = numberFieldColumns; - init(minValue, maxValue, dierta); - } private void init(double minValue, double maxValue, double dierta) { this.minValue = minValue; this.maxValue = maxValue; @@ -169,6 +165,13 @@ public class UISpinner extends JPanel implements UIObserver, GlobalNameObserver fireStateChanged(); } + /** + * 设置Spinner内的数字输入框列数 + * @param numberFieldColumns 输入框列数 + */ + public void setNumberFieldColumns(int numberFieldColumns) { + textField.setColumns(numberFieldColumns); + } public void setEnabled(boolean flag) { super.setEnabled(flag); diff --git a/designer-base/src/main/java/com/fr/design/gui/itree/filetree/EnvFileTree.java b/designer-base/src/main/java/com/fr/design/gui/itree/filetree/EnvFileTree.java index d5a9044d5e..435d5a465a 100644 --- a/designer-base/src/main/java/com/fr/design/gui/itree/filetree/EnvFileTree.java +++ b/designer-base/src/main/java/com/fr/design/gui/itree/filetree/EnvFileTree.java @@ -2,7 +2,6 @@ package com.fr.design.gui.itree.filetree; import com.fr.base.FRContext; import com.fr.design.constants.UIConstants; -import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.itree.refreshabletree.ExpandMutableTreeNode; import com.fr.design.gui.itree.refreshabletree.RefreshableJTree; import com.fr.design.i18n.Toolkit; @@ -14,13 +13,13 @@ import com.fr.stable.CoreConstants; import com.fr.stable.StableUtils; import com.fr.workspace.WorkContext; +import javax.swing.BorderFactory; import javax.swing.JTree; import javax.swing.tree.DefaultTreeCellRenderer; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreePath; import java.awt.Color; import java.awt.Component; -import java.awt.Dimension; import java.io.File; import java.util.ArrayList; import java.util.Arrays; @@ -79,14 +78,7 @@ public class EnvFileTree extends RefreshableJTree { this.setIcon(null); this.setText(PENDING.toString()); } - // 这里新建一个Label作为render是因为JTree在动态刷新的时候,节点上render画布的的宽度不会变,会使得一部分比较长的数据显示为"..." - UILabel label = new UILabel(); - label.setText(getText()); - label.setIcon(getIcon()); - this.setSize(label.getPreferredSize()); - Dimension dim = label.getPreferredSize(); - dim.height += 2; - this.setPreferredSize(dim); + this.setBorder(BorderFactory.createEmptyBorder(1, 0, 1, 0)); this.setBackgroundNonSelectionColor(UIConstants.TREE_BACKGROUND); this.setTextSelectionColor(Color.WHITE); this.setBackgroundSelectionColor(UIConstants.FLESH_BLUE); diff --git a/designer-base/src/main/java/com/fr/design/gui/style/FRFontPane.java b/designer-base/src/main/java/com/fr/design/gui/style/FRFontPane.java index 9ce63abe37..f806ded065 100644 --- a/designer-base/src/main/java/com/fr/design/gui/style/FRFontPane.java +++ b/designer-base/src/main/java/com/fr/design/gui/style/FRFontPane.java @@ -25,10 +25,20 @@ import com.fr.general.FRFont; import com.fr.stable.Constants; -import javax.swing.*; +import javax.swing.BorderFactory; +import javax.swing.JFrame; +import javax.swing.JPanel; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; -import java.awt.*; +import java.awt.BorderLayout; +import java.awt.CardLayout; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.GridLayout; +import java.awt.RenderingHints; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.Vector; @@ -67,11 +77,20 @@ public class FRFontPane extends AbstractBasicStylePane implements GlobalNameObse private UIToggleButton subPane; private JPanel linePane; private int italic_bold; + /** + * LeftPane和RightPane之间的间隙,也是fontSizeStyleComboBox与fontSizeComboBox之间的间隙,之前的默认值为VGAP_LARGE + */ + private int hGapBetweenLeftPaneAndRightPane = LayoutConstants.VGAP_LARGE; public FRFontPane() { this.initComponents(); } + public FRFontPane(int hGapBetweenLeftPaneAndRightPane) { + this.hGapBetweenLeftPaneAndRightPane = hGapBetweenLeftPaneAndRightPane; + this.initComponents(); + } + public static void main(String[] args) { JFrame jf = new JFrame("test"); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); @@ -345,7 +364,7 @@ public class FRFontPane extends AbstractBasicStylePane implements GlobalNameObse private JPanel createPane() { JPanel createPane = new JPanel(new BorderLayout()); createPane.add(fontNameComboBox, BorderLayout.NORTH); - JPanel jPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{createLeftPane(), createRightPane()}}, TableLayoutHelper.FILL_LASTCOLUMN, LayoutConstants.VGAP_LARGE, LayoutConstants.VGAP_LARGE); + JPanel jPanel = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{new Component[]{createLeftPane(), createRightPane()}}, TableLayoutHelper.FILL_LASTCOLUMN, hGapBetweenLeftPaneAndRightPane, LayoutConstants.VGAP_LARGE); jPanel.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 0)); createPane.add(jPanel, BorderLayout.CENTER); return createPane; diff --git a/designer-base/src/main/java/com/fr/design/gui/syntax/ui/rtextarea/ConfigurableCaret.java b/designer-base/src/main/java/com/fr/design/gui/syntax/ui/rtextarea/ConfigurableCaret.java index 47c4d35015..3582c4ad95 100644 --- a/designer-base/src/main/java/com/fr/design/gui/syntax/ui/rtextarea/ConfigurableCaret.java +++ b/designer-base/src/main/java/com/fr/design/gui/syntax/ui/rtextarea/ConfigurableCaret.java @@ -2,7 +2,7 @@ * 12/21/2004 * * ConfigurableCaret.java - The caret used by RTextArea. - * + * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ @@ -12,6 +12,7 @@ import java.awt.*; import java.awt.event.*; import java.awt.datatransfer.*; import java.awt.event.ActionEvent; +import java.awt.geom.Line2D; import java.io.*; import javax.swing.*; import javax.swing.plaf.*; @@ -158,7 +159,7 @@ public class ConfigurableCaret extends DefaultCaret { textArea.isRequestFocusEnabled()) { if (inWindow) textArea.requestFocusInWindow(); - else + else textArea.requestFocus(); } } @@ -454,9 +455,11 @@ public class ConfigurableCaret extends DefaultCaret { // A thicker vertical line. case THICK_VERTICAL_LINE_STYLE: - g.drawLine(r.x,r.y, r.x,r.y+r.height); - r.x++; - g.drawLine(r.x,r.y, r.x,r.y+r.height); + Graphics2D g2 = (Graphics2D) g; + g2.setStroke(new BasicStroke(2)); + // 向右再移动一个位置 避免光标太接近文字内容 + // REPORT-41895 光标上方超出背景高亮的部分不会闪烁,会形成一个停留的小点,因此将光标的超出部分截去 + g2.draw(new Line2D.Float(r.x + 1, r.y + 1, r.x + 1, r.y + r.height)); break; } // End of switch (style). @@ -674,7 +677,7 @@ public class ConfigurableCaret extends DefaultCaret { if (line= 9; + } + }; + + + abstract public boolean support(); +} diff --git a/designer-base/src/main/java/com/fr/design/locale/impl/SupportLocaleImpl.java b/designer-base/src/main/java/com/fr/design/locale/impl/SupportLocaleImpl.java index 904a6c18b1..0373dad033 100644 --- a/designer-base/src/main/java/com/fr/design/locale/impl/SupportLocaleImpl.java +++ b/designer-base/src/main/java/com/fr/design/locale/impl/SupportLocaleImpl.java @@ -156,7 +156,20 @@ public enum SupportLocaleImpl implements SupportLocale { set.add(Locale.TAIWAN); return set; } - } - + }, + /** + * 更新升级-帮助菜单下 + */ + UPDATE_HELP { + @Override + public Set support() { + Set set = new HashSet<>(); + set.add(Locale.US); + set.add(Locale.KOREA); + set.add(Locale.CHINA); + set.add(Locale.TAIWAN); + return set; + } + } } 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 fe0276b384..490b4e7e99 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 @@ -548,10 +548,10 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta contentHeight = layeredPane.getHeight(); contentWidth = layeredPane.getWidth(); - layeredPane.remove(basePane); + // 这个地方remove和add都是一个对象 完全没有必要remove再add 改变了窗口大小重新设置下 然后有repaint即可 basePane.setBounds(0, 0, contentWidth, contentHeight); - layeredPane.add(basePane); layeredPane.repaint(); + layeredPane.revalidate(); } /** @@ -746,10 +746,14 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta */ public void checkCombineUp(boolean flag, ArrayList al) { //Yvan: 检查当前是否为WORK_SHEET状态,因为只有WORK_SHEET中含有格式刷组件,此时是不需要进行checkComponentsByNames的 - if (HistoryTemplateListCache.getInstance().getCurrentEditingTemplate().getMenuState() == DesignState.WORK_SHEET) { - return; + JTemplate jTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); + if (jTemplate != null) { + // 第一个条件满足后还需要添加一重判断,判断是编辑报表块还是参数面板,编辑报表块时则直接return + if (jTemplate.getMenuState() == DesignState.WORK_SHEET && !jTemplate.isUpMode()) { + return; + } + combineUp.checkComponentsByNames(flag, al); } - combineUp.checkComponentsByNames(flag, al); } /** diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java index a9d9281e99..4f59032dca 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java @@ -556,7 +556,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt ); newNameLabel.setHorizontalAlignment(SwingConstants.RIGHT); newNameLabel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 10)); - newNameLabel.setPreferredSize(new Dimension(118, 15)); + //newNameLabel.setPreferredSize(new Dimension(118, 15)); // 重命名输入框 nameField = new UITextField(oldName); @@ -578,7 +578,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt } }); nameField.selectAll(); - nameField.setPreferredSize(new Dimension(180, 20)); + nameField.setPreferredSize(new Dimension(170, 20)); JPanel topPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 5)); topPanel.setBorder(BorderFactory.createEmptyBorder(15, 15, 0, 15)); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java index c7c587563a..0703216eba 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java @@ -12,6 +12,8 @@ import com.fr.design.gui.ibutton.UIButtonUI; import com.fr.design.gui.icontainer.UIEastResizableContainer; import com.fr.design.gui.ilable.UILabel; import com.fr.design.layout.VerticalFlowLayout; +import com.fr.design.menu.SnapChatUtil; +import com.fr.design.notification.SnapChat; import com.fr.design.ui.util.UIUtil; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.design.utils.gui.GUIPaintUtils; @@ -171,7 +173,8 @@ public class EastRegionContainerPane extends UIEastResizableContainer { } updateAllPropertyPane(); } - }); } + }); + } }, filter); PluginListenerRegistration.getInstance().listen( PluginEventType.BeforeStop, @@ -221,11 +224,13 @@ public class EastRegionContainerPane extends UIEastResizableContainer { String key = provider.key(); PropertyItemBean itemBean = provider.getItem(); PropertyItem propertyItem = new PropertyItem(itemBean.getName(), - itemBean.getTitle(), - itemBean.getBtnIconName(), - itemBean.getBtnIconBaseDir(), - itemBean.getVisibleModes(), - itemBean.getEnableModes()); + itemBean.getTitle(), + itemBean.getBtnIconName(), + itemBean.getBtnIconBaseDir(), + itemBean.getVisibleModes(), + itemBean.getEnableModes(), + itemBean.getSnapChat(), + itemBean.getPromptWindow()); UIButton button = propertyItem.getButton(); List buttonListeners = itemBean.getButtonListeners(); if (buttonListeners != null) { @@ -324,6 +329,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer { cellElement.popupDialog.showDefaultPane(); } } + // 禁用单元格元素tab private void enableCellElementPane(PropertyItem cellElement) { cellElement.setEnabled(true); @@ -381,7 +387,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer { /** * 可通过此方法,判断当前的编辑模式 - * */ + */ public PropertyMode getCurrentMode() { return currentMode; } @@ -527,7 +533,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer { propertyItemMap.get(KEY_WIDGET_SETTINGS).replaceHeaderPane(paraPane); } - public static void main(String[] args){ + public static void main(String[] args) { JFrame jf = new JFrame("test"); // jf = new JFrame("test"); @@ -549,7 +555,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer { // leftPane.add(b2); // leftPane.setLayout(new BoxLayout(leftPane, BoxLayout.Y_AXIS)); - JPanel content = (JPanel)jf.getContentPane(); + JPanel content = (JPanel) jf.getContentPane(); // content.setLayout(null); content.add(cc, BorderLayout.CENTER); content.add(new EastRegionContainerPane(), BorderLayout.EAST); @@ -657,6 +663,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer { class PropertyItem { + private SnapChat snapChat; private UIButton button; private String name; // 用于 card 切换 private String title; // 用于显示 @@ -667,6 +674,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer { private FixedPopupPane popupPane; // 左侧固定弹出框 private PopupToolPane popupToolPane; // 弹出工具条 private PopupDialog popupDialog; // 弹出框 + private PromptWindow promptWindow; //提示窗 private boolean isPoppedOut = false; // 是否弹出 private boolean isVisible = true; // 是否可见 private boolean replace = false; // 是否被替代 @@ -687,14 +695,16 @@ public class EastRegionContainerPane extends UIEastResizableContainer { public PropertyItem(String name, String title, String btnIconName, PropertyMode[] visibleModes, PropertyMode[] enableModes) { - this(name, title, btnIconName, ICON_BASE_DIR, visibleModes, enableModes); + this(name, title, btnIconName, ICON_BASE_DIR, visibleModes, enableModes, null, null); } - public PropertyItem(String name, String title, String btnIconName, String iconBaseDir, PropertyMode[] visibleModes, PropertyMode[] enableModes) { + public PropertyItem(String name, String title, String btnIconName, String iconBaseDir, PropertyMode[] visibleModes, PropertyMode[] enableModes, SnapChat snapChat, PromptWindow promptWindow) { this.name = name; this.title = title; this.btnIconName = btnIconName; this.iconBaseDir = iconBaseDir; + this.snapChat = snapChat; + this.promptWindow = promptWindow; initButton(); initPropertyPanel(); initModes(visibleModes, enableModes); @@ -835,7 +845,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer { if (isRightPaneVisible()) { hideCurrentPopupPane(); replaceContentPane(contentPane); - } else if(popupPane != null && popupPane.isVisible()) { + } else if (popupPane != null && popupPane.isVisible()) { popupPane.replaceContentPane(contentArea); } } @@ -872,9 +882,13 @@ public class EastRegionContainerPane extends UIEastResizableContainer { public Dimension getPreferredSize() { return new Dimension(TAB_BUTTON_WIDTH, TAB_BUTTON_HEIGHT); } + @Override public void paintComponent(Graphics g) { super.paintComponent(g); + if (snapChat != null && !snapChat.hasRead()) { + SnapChatUtil.paintPropertyItemPoint(g, getBounds()); + } } }; button.set4LargeToolbarButton(); @@ -902,6 +916,12 @@ public class EastRegionContainerPane extends UIEastResizableContainer { popupFixedPane(); } setTabButtonSelected(); + if (snapChat != null && !snapChat.hasRead()) { + snapChat.markRead(); + if (promptWindow != null) { + promptWindow.showWindow(); + } + } } }); button.setToolTipText(title); @@ -1015,8 +1035,8 @@ public class EastRegionContainerPane extends UIEastResizableContainer { } /** - * @Description:刷新currentPopupPane面板位置,当设计器缩放时会调用这个函数 * @param + * @Description:刷新currentPopupPane面板位置,当设计器缩放时会调用这个函数 * @return: * @Author: Henry.Wang * @date: 2020/7/30 11:39 @@ -1031,8 +1051,8 @@ public class EastRegionContainerPane extends UIEastResizableContainer { } /** - * @Description:清空currentPopupPane数据,当切换模板时会调用这个函数 * @param + * @Description:清空currentPopupPane数据,当切换模板时会调用这个函数 * @return: * @Author: Henry.Wang * @date: 2020/7/30 11:42 @@ -1071,12 +1091,14 @@ public class EastRegionContainerPane extends UIEastResizableContainer { } repaint(); } + @Override public void mouseClicked(MouseEvent e) { if (e.getX() >= ARROW_RANGE_START) { onPop(); } } + @Override public void mouseReleased(MouseEvent e) { mouseDownCompCoords = null; @@ -1084,6 +1106,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer { contentPane.setBackground(originColor); } } + @Override public void mousePressed(MouseEvent e) { if (e.getX() < ARROW_RANGE_START) { @@ -1105,6 +1128,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer { } repaint(); } + @Override public void mouseDragged(MouseEvent e) { if (isMovable && mouseDownCompCoords != null) { @@ -1217,6 +1241,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer { private Container contentPane; private JPanel defaultPane; // 无可用配置项 private PropertyItem propertyItem; + public PopupDialog(PropertyItem propertyItem) { super(DesignerContext.getDesignerFrame()); container = getContentPane(); @@ -1319,6 +1344,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer { mouseDownCompCoords = e.getLocationOnScreen(); } } + @Override public void mouseReleased(MouseEvent e) { mouseDownCompCoords = null; diff --git a/designer-base/src/main/java/com/fr/design/mainframe/PromptWindow.java b/designer-base/src/main/java/com/fr/design/mainframe/PromptWindow.java new file mode 100644 index 0000000000..dc7fc1f63a --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/PromptWindow.java @@ -0,0 +1,20 @@ +package com.fr.design.mainframe; + +import javax.swing.JWindow; + +/** + * @Author: Yuan.Wang + * @Date: 2020/10/9 + * 只关心Window的显示和隐藏操作时可以实现该接口 + */ +public interface PromptWindow { + /** + * 显示弹窗 + */ + void showWindow(); + + /** + * 隐藏弹窗 + */ + void hideWindow(); +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/PropertyItemBean.java b/designer-base/src/main/java/com/fr/design/mainframe/PropertyItemBean.java index ee54364ba5..cdd5dbb64d 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/PropertyItemBean.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/PropertyItemBean.java @@ -1,5 +1,7 @@ package com.fr.design.mainframe; +import com.fr.design.notification.SnapChat; + import java.awt.event.ActionListener; import java.util.List; @@ -7,71 +9,89 @@ import java.util.List; * created by Harrison on 2020/03/23 **/ public class PropertyItemBean { - + private String name; private String title; private String btnIconName; private String btnIconBaseDir; + private SnapChat snapChat; + private PromptWindow promptWindow; private EastRegionContainerPane.PropertyMode[] visibleModes; private EastRegionContainerPane.PropertyMode[] enableModes; private List buttonListeners; - + public PropertyItemBean() { } - + public String getName() { return name; } - + public void setName(String name) { this.name = name; } - + public String getTitle() { return title; } - + public void setTitle(String title) { this.title = title; } - + public String getBtnIconName() { return btnIconName; } - + public void setBtnIconName(String btnIconName) { this.btnIconName = btnIconName; } - + public String getBtnIconBaseDir() { - + return btnIconBaseDir; } - + public void setBtnIconBaseDir(String btnIconBaseDir) { this.btnIconBaseDir = btnIconBaseDir; } - + + public SnapChat getSnapChat() { + return snapChat; + } + + public void setSnapChat(SnapChat snapChat) { + this.snapChat = snapChat; + } + + public PromptWindow getPromptWindow() { + return promptWindow; + } + + public void setPromptWindow(PromptWindow promptWindow) { + this.promptWindow = promptWindow; + } + public EastRegionContainerPane.PropertyMode[] getVisibleModes() { return visibleModes; } - + public void setVisibleModes(EastRegionContainerPane.PropertyMode[] visibleModes) { this.visibleModes = visibleModes; } - + public EastRegionContainerPane.PropertyMode[] getEnableModes() { return enableModes; } - + public void setEnableModes(EastRegionContainerPane.PropertyMode[] enableModes) { this.enableModes = enableModes; } - + public List getButtonListeners() { return buttonListeners; } - + public void setButtonListeners(List buttonListeners) { this.buttonListeners = buttonListeners; } 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 c81c6749f8..078d4d1289 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 @@ -54,9 +54,7 @@ import com.fr.design.mainframe.ToolBarNewTemplatePane; import com.fr.design.menu.MenuDef; import com.fr.design.menu.SeparatorDef; import com.fr.design.menu.ShortCut; -import com.fr.design.menu.SnapChatMenuDef; import com.fr.design.menu.ToolBarDef; -import com.fr.design.notification.SnapChatAllTypes; import com.fr.design.os.impl.SupportOSImpl; import com.fr.design.remote.action.RemoteDesignAuthManagerAction; import com.fr.design.update.actions.SoftwareUpdateAction; @@ -530,35 +528,18 @@ public abstract class ToolBarMenuDock { * @return 帮组菜单的子菜单 */ public ShortCut[] createHelpShortCuts() { - final java.util.List shortCuts = new ArrayList(); - - Locale locale = GeneralContext.getLocale(); + final java.util.List shortCuts = new ArrayList<>(); - LocaleCenter.buildAction(new LocaleAction() { - @Override - public void execute() { - shortCuts.add(new VideoAction()); - } - }, SupportLocaleImpl.VIDEO); + LocaleCenter.buildAction(() -> shortCuts.add(new VideoAction()), SupportLocaleImpl.VIDEO); - LocaleCenter.buildAction(new LocaleAction() { - @Override - public void execute() { - shortCuts.add(new TutorialAction()); - } - }, SupportLocaleImpl.TUTORIAL_HELP); + LocaleCenter.buildAction(() -> shortCuts.add(new TutorialAction()), SupportLocaleImpl.TUTORIAL_HELP); - LocaleCenter.buildAction(new LocaleAction() { - @Override - public void execute() { - shortCuts.add(new TechSupportAction()); - } - }, SupportLocaleImpl.TECH_SUPPORT_HELP); + LocaleCenter.buildAction(() -> shortCuts.add(new TechSupportAction()), SupportLocaleImpl.TECH_SUPPORT_HELP); //远程不使用更新升级,产品演示 if (WorkContext.getCurrent().isLocal()) { shortCuts.add(new WebDemoAction()); - shortCuts.add(new SoftwareUpdateAction()); + LocaleCenter.buildAction(() -> shortCuts.add(new SoftwareUpdateAction()), SupportLocaleImpl.UPDATE_HELP); } if (AlphaFineConfigManager.isALPHALicAvailable()) { shortCuts.add(new AlphaFineAction()); @@ -566,12 +547,7 @@ public abstract class ToolBarMenuDock { shortCuts.add(SeparatorDef.DEFAULT); if (DesignerEnvManager.getEnvManager().isOpenDebug()) { - OSSupportCenter.buildAction(new OSBasedAction() { - @Override - public void execute(Object... objects) { - shortCuts.add(new FineUIAction()); - } - }, SupportOSImpl.FINEUI); + OSSupportCenter.buildAction(objects -> shortCuts.add(new FineUIAction()), SupportOSImpl.FINEUI); } shortCuts.add(new AboutAction()); @@ -655,11 +631,8 @@ public abstract class ToolBarMenuDock { } public MenuDef createCommunityMenuDef() { - - MenuDef menuDef = new SnapChatMenuDef( - com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Community"), - 'C', - SnapChatAllTypes.Menu.BBS); + + MenuDef menuDef = new MenuDef(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Community"), 'C'); ShortCut[] otherCommunityShortCuts = createCommunityShortCuts(); for (ShortCut shortCut : otherCommunityShortCuts) { menuDef.addShortCut(shortCut); diff --git a/designer-base/src/main/java/com/fr/design/menu/SnapChatMenuDef.java b/designer-base/src/main/java/com/fr/design/menu/SnapChatMenuDef.java index 2ec3f6c7ee..80ba40afeb 100644 --- a/designer-base/src/main/java/com/fr/design/menu/SnapChatMenuDef.java +++ b/designer-base/src/main/java/com/fr/design/menu/SnapChatMenuDef.java @@ -4,6 +4,7 @@ import com.fr.design.gui.imenu.UIMenu; import com.fr.design.gui.imenu.UIScrollMenu; import com.fr.design.notification.SnapChat; import com.fr.design.notification.SnapChatConfig; +import com.fr.design.notification.SnapChatFactory; import com.fr.design.notification.SnapChatKey; import javax.swing.JMenu; @@ -19,47 +20,49 @@ import java.awt.image.BufferedImage; * created by Harrison on 2020/03/16 **/ public class SnapChatMenuDef extends MenuDef implements SnapChat { - + private SnapChatKey uniqueKey; private SnapChatMenuUI menuUI = new SnapChatMenuUI(this); - + private SnapChat snapChat ; + public SnapChatMenuDef(String name, SnapChatKey uniqueKey) { super(name); this.uniqueKey = uniqueKey; + snapChat = SnapChatFactory.createSnapChat(true, uniqueKey); } public SnapChatMenuDef(Boolean rePaint, SnapChatKey uniqueKey) { super(rePaint); this.uniqueKey = uniqueKey; + snapChat = SnapChatFactory.createSnapChat(true, uniqueKey); } public SnapChatMenuDef(String name, char mnemonic, SnapChatKey uniqueKey) { super(name, mnemonic); this.uniqueKey = uniqueKey; + snapChat = SnapChatFactory.createSnapChat(true, uniqueKey); } @Override public boolean hasRead() { - - String calcKey = calcKey(); - Boolean val = SnapChatConfig.getInstance().hasRead(calcKey); - // 默认读过了。 - return val == null ? defaultStatus() : val; + return snapChat.hasRead(); } @Override public void markRead() { - - String calcKey = calcKey(); - SnapChatConfig.getInstance().markRead(calcKey); + snapChat.markRead(); } - + @Override public boolean defaultStatus() { - - return true; + return snapChat.defaultStatus(); } - + + @Override + public SnapChatKey key() { + return snapChat.key(); + } + @Override public void addShortCut(ShortCut shortCut) { @@ -74,13 +77,6 @@ public class SnapChatMenuDef extends MenuDef implements SnapChat { super.insertShortCut(index, shortCut); } - - @Override - public SnapChatKey key() { - - return this.uniqueKey; - } - @Override protected MenuListener createMenuListener() { @@ -97,17 +93,12 @@ public class SnapChatMenuDef extends MenuDef implements SnapChat { if (shortCut instanceof SnapChatUpdateAction) { SnapChatUpdateAction action = (SnapChatUpdateAction) shortCut; if (!action.hasRead()) { - String calcKey = calcKey(); + String calcKey = snapChat.calcKey(); SnapChatConfig.getInstance().resetRead(calcKey); } } } - - private String calcKey() { - - return key().calc(); - } - + @Override protected UIMenu createJMenu0() { diff --git a/designer-base/src/main/java/com/fr/design/menu/SnapChatUpdateAction.java b/designer-base/src/main/java/com/fr/design/menu/SnapChatUpdateAction.java index 9ade762500..8cc0734371 100644 --- a/designer-base/src/main/java/com/fr/design/menu/SnapChatUpdateAction.java +++ b/designer-base/src/main/java/com/fr/design/menu/SnapChatUpdateAction.java @@ -3,7 +3,7 @@ package com.fr.design.menu; import com.fr.design.actions.UpdateAction; import com.fr.design.gui.imenu.UIMenuItem; import com.fr.design.notification.SnapChat; -import com.fr.design.notification.SnapChatConfig; +import com.fr.design.notification.SnapChatFactory; import com.fr.design.notification.SnapChatKey; import java.awt.event.ActionEvent; @@ -12,57 +12,46 @@ import java.awt.event.ActionEvent; * created by Harrison on 2020/03/22 **/ public abstract class SnapChatUpdateAction extends UpdateAction implements SnapChat { - + private SnapChatKey uniqueKey; - + private SnapChat snapChat ; + public SnapChatUpdateAction(SnapChatKey uniqueKey) { this.uniqueKey = uniqueKey; + snapChat = SnapChatFactory.createSnapChat(false, uniqueKey); } - + @Override public final void actionPerformed(ActionEvent e) { - markRead(); actionPerformed0(e); } - + protected abstract void actionPerformed0(ActionEvent e); - + @Override public boolean hasRead() { - - String calcKey = calcKey(); - Boolean val = SnapChatConfig.getInstance().hasRead(calcKey); - return val == null ? defaultStatus() : val; + return snapChat.hasRead(); } - + @Override public void markRead() { - - String calcKey = calcKey(); - SnapChatConfig.getInstance().markRead(calcKey); + snapChat.markRead(); } - + @Override public boolean defaultStatus() { - - return false; + return snapChat.defaultStatus(); } - + @Override public SnapChatKey key() { - - return this.uniqueKey; - } - - private String calcKey() { - - return key().calc(); + return snapChat.key(); } - + @Override public UIMenuItem createMenuItem() { - + Object object = this.getValue(UIMenuItem.class.getName()); if (object == null && !(object instanceof UIMenuItem)) { UIMenuItem menuItem = new UIMenuItem(this); @@ -70,10 +59,10 @@ public abstract class SnapChatUpdateAction extends UpdateAction implements SnapC menuItem.setName(getName()); menuItem.setUI(new SnapChatMenuItemUI(this)); object = menuItem; - + this.putValue(UIMenuItem.class.getName(), object); } return (UIMenuItem) object; } - + } diff --git a/designer-base/src/main/java/com/fr/design/menu/SnapChatUtil.java b/designer-base/src/main/java/com/fr/design/menu/SnapChatUtil.java index 6eb648055a..46bede232f 100644 --- a/designer-base/src/main/java/com/fr/design/menu/SnapChatUtil.java +++ b/designer-base/src/main/java/com/fr/design/menu/SnapChatUtil.java @@ -10,24 +10,31 @@ import java.awt.geom.Ellipse2D; * created by Harrison on 2020/03/22 **/ public class SnapChatUtil { - + private static final int WIDTH = 4; + private static final int HEIGHT = 4; + private static final int TOP_GAP = 4; + private static final int RIGHT_GAP = 6; + + /** + * 绘制菜单项的小红点 + */ public static void paintSnapChat(Graphics g, Rectangle textRect) { - - Color oldColor = g.getColor(); - - double x = textRect.getWidth(); - x += textRect.getX(); - x += 2; - + double x = textRect.getWidth() + textRect.getX() + 2; double y = textRect.getY(); - + paintRedPoint(g, new Ellipse2D.Double(x, y, WIDTH, HEIGHT)); + } + + public static void paintPropertyItemPoint(Graphics g, Rectangle bounds) { + double x = bounds.getWidth() - RIGHT_GAP; + paintRedPoint(g, new Ellipse2D.Double(x, TOP_GAP, WIDTH, HEIGHT)); + } + + private static void paintRedPoint(Graphics g, Ellipse2D.Double shape) { + Color oldColor = g.getColor(); Graphics2D g2d = (Graphics2D) g; g2d.setColor(Color.red); - Ellipse2D.Double shape = - new Ellipse2D.Double(x, y, 4, 4); g2d.fill(shape); g2d.draw(shape); - g2d.setColor(oldColor); } } diff --git a/designer-base/src/main/java/com/fr/design/notification/AbstractSnapChat.java b/designer-base/src/main/java/com/fr/design/notification/AbstractSnapChat.java new file mode 100644 index 0000000000..0b174da942 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/notification/AbstractSnapChat.java @@ -0,0 +1,22 @@ +package com.fr.design.notification; + +/** + * @Author: Yuan.Wang + * @Date: 2020/9/27 + */ +public abstract class AbstractSnapChat implements SnapChat { + @Override + public boolean hasRead() { + + String calcKey = calcKey(); + Boolean val = SnapChatConfig.getInstance().hasRead(calcKey); + return val == null ? defaultStatus() : val; + } + + @Override + public void markRead() { + + String calcKey = calcKey(); + SnapChatConfig.getInstance().markRead(calcKey); + } +} diff --git a/designer-base/src/main/java/com/fr/design/notification/SnapChat.java b/designer-base/src/main/java/com/fr/design/notification/SnapChat.java index 4f610c060b..71aabb87d7 100644 --- a/designer-base/src/main/java/com/fr/design/notification/SnapChat.java +++ b/designer-base/src/main/java/com/fr/design/notification/SnapChat.java @@ -32,4 +32,8 @@ public interface SnapChat { * @return 字符标志 */ SnapChatKey key(); + + default String calcKey() { + return key().calc(); + } } diff --git a/designer-base/src/main/java/com/fr/design/notification/SnapChatFactory.java b/designer-base/src/main/java/com/fr/design/notification/SnapChatFactory.java new file mode 100644 index 0000000000..a3fd463a36 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/notification/SnapChatFactory.java @@ -0,0 +1,32 @@ +package com.fr.design.notification; + +import com.fr.plugin.context.PluginContext; + +/** + * @Author: Yuan.Wang + * @Date: 2020/10/10 + */ +public class SnapChatFactory { + public static SnapChat createSnapChat(boolean defaultStatus, SnapChatKey snapChatKey) { + return createSnapChat(defaultStatus, snapChatKey, null); + } + + public static SnapChat createSnapChat(boolean defaultStatus, SnapChatKey snapChatKey, PluginContext context) { + return new AbstractSnapChat() { + @Override + public boolean defaultStatus() { + return defaultStatus; + } + + @Override + public SnapChatKey key() { + return snapChatKey; + } + + @Override + public String calcKey() { + return context == null ? key().calc() : key().calc(context); + } + }; + } +} diff --git a/designer-base/src/main/java/com/fr/design/notification/SnapChatKey.java b/designer-base/src/main/java/com/fr/design/notification/SnapChatKey.java index fa316db350..ecb89e5097 100644 --- a/designer-base/src/main/java/com/fr/design/notification/SnapChatKey.java +++ b/designer-base/src/main/java/com/fr/design/notification/SnapChatKey.java @@ -1,9 +1,18 @@ package com.fr.design.notification; +import com.fr.plugin.context.PluginContext; + /** * created by Harrison on 2020/03/16 **/ public interface SnapChatKey { - + String calc(); + + /** + * 插件刚被安装时不能通过PluginContexts.getContext()方法获取插件上下文,因此加一个接口 + */ + default String calc(PluginContext context) { + throw new UnsupportedOperationException(); + } } diff --git a/designer-base/src/main/java/com/fr/design/object/NameObject.java b/designer-base/src/main/java/com/fr/design/object/NameObject.java index 818de9d57a..c7dc3811c0 100644 --- a/designer-base/src/main/java/com/fr/design/object/NameObject.java +++ b/designer-base/src/main/java/com/fr/design/object/NameObject.java @@ -2,6 +2,7 @@ package com.fr.design.object; import com.fr.base.BaseUtils; import com.fr.general.ComparatorUtils; +import com.fr.stable.StableUtils; /** * @@ -60,10 +61,10 @@ public class NameObject { return "Name:" + this.getName() + "\tObject:" + this.getObject(); } - @SuppressWarnings({ "rawtypes", "unchecked" }) + @SuppressWarnings({ "rawtypes"}) public Object clone() throws CloneNotSupportedException { NameObject newNameObject = (NameObject)super.clone(); - newNameObject.object = BaseUtils.cloneObject(this.object); + newNameObject.object = StableUtils.cloneObject(this.object); return newNameObject; } diff --git a/designer-base/src/main/java/com/fr/design/os/impl/PMDialogAction.java b/designer-base/src/main/java/com/fr/design/os/impl/PMDialogAction.java index 541e39601b..7e74e7651a 100644 --- a/designer-base/src/main/java/com/fr/design/os/impl/PMDialogAction.java +++ b/designer-base/src/main/java/com/fr/design/os/impl/PMDialogAction.java @@ -2,8 +2,10 @@ package com.fr.design.os.impl; import com.fr.config.ServerPreferenceConfig; import com.fr.design.extra.WebViewDlgHelper; +import com.fr.design.jdk.JdkVersion; import com.fr.design.upm.UpmFinder; import com.fr.design.utils.DesignUtils; +import com.fr.stable.StableUtils; import com.fr.stable.os.Arch; import com.fr.stable.os.OperatingSystem; import com.fr.stable.os.support.OSBasedAction; @@ -21,7 +23,7 @@ public class PMDialogAction implements OSBasedAction { DesignUtils.visitEnvServerByParameters( PLUGIN_MANAGER_ROUTE,null,null); return; } - if (ServerPreferenceConfig.getInstance().isUseOptimizedUPM()) { + if (ServerPreferenceConfig.getInstance().isUseOptimizedUPM() && JdkVersion.LE_8.support()) { UpmFinder.showUPMDialog(); } else { WebViewDlgHelper.createPluginDialog(); diff --git a/designer-base/src/main/java/com/fr/design/parameter/ParameterArrayPane.java b/designer-base/src/main/java/com/fr/design/parameter/ParameterArrayPane.java index d3efcae4aa..adb0e48472 100644 --- a/designer-base/src/main/java/com/fr/design/parameter/ParameterArrayPane.java +++ b/designer-base/src/main/java/com/fr/design/parameter/ParameterArrayPane.java @@ -7,7 +7,7 @@ import com.fr.design.gui.controlpane.JListControlPane; import com.fr.design.gui.controlpane.NameableCreator; import com.fr.design.gui.controlpane.NameableSelfCreator; import com.fr.design.gui.controlpane.UnrepeatedNameHelper; -import com.fr.design.gui.ilist.ModNameActionListener; +import com.fr.design.i18n.Toolkit; import com.fr.general.ComparatorUtils; import com.fr.stable.Nameable; import com.fr.stable.StringUtils; @@ -18,79 +18,74 @@ import java.util.Arrays; import java.util.List; public class ParameterArrayPane extends JListControlPane { - /** - * Constructor. - */ - public ParameterArrayPane() { - super(); - this.addModNameActionListener(new ModNameActionListener() { - public void nameModed(int index, String oldName, String newName) { - populateSelectedValue(); - } + /** + * Constructor. + */ + public ParameterArrayPane() { + super(); + this.addModNameActionListener((index, oldName, newName) -> populateSelectedValue()); + this.addEditingListener(new PropertyChangeAdapter() { + public void propertyChange() { + Parameter[] parameters = ParameterConfig.getInstance().getGlobalParameters(); + String[] allListNames = nameableList.getAllNames(); + allListNames[editingIndex] = StringUtils.EMPTY; + String tempName = getEditingName(); + if (StringUtils.isEmpty(tempName)) { + nameableList.stopEditing(); + FineJOptionPane.showMessageDialog(SwingUtilities.getWindowAncestor(ParameterArrayPane.this), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Empty_Parameter_Name")); + setIllegalIndex(editingIndex); + return; + } + if (!ComparatorUtils.equals(tempName, selectedName) + && isNameRepeated(new List[]{Arrays.asList(parameters), Arrays.asList(allListNames)}, tempName)) { + nameableList.stopEditing(); + FineJOptionPane.showMessageDialog(SwingUtilities.getWindowAncestor(ParameterArrayPane.this), + Toolkit.i18nText("Fine-Design_Basic_Duplicate_Parameter_Name")); + setIllegalIndex(editingIndex); + } + } + }); + } - }); - this.addEditingListener(new PropertyChangeAdapter() { - public void propertyChange() { - Parameter[] parameters = ParameterConfig.getInstance().getGlobalParameters(); - String[] allListNames = nameableList.getAllNames(); - allListNames[nameableList.getSelectedIndex()] = StringUtils.EMPTY; - String tempName = getEditingName(); - if (StringUtils.isEmpty(tempName)) { - nameableList.stopEditing(); - FineJOptionPane.showMessageDialog(SwingUtilities.getWindowAncestor(ParameterArrayPane.this), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Empty_Parameter_Name")); - setIllegalIndex(editingIndex); - return; - } - if (!ComparatorUtils.equals(tempName, selectedName) - && isNameRepeated(new List[]{Arrays.asList(parameters), Arrays.asList(allListNames)}, tempName)) { - nameableList.stopEditing(); - FineJOptionPane.showMessageDialog(SwingUtilities.getWindowAncestor(ParameterArrayPane.this), - com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Duplicate_Parameter_Name")); - setIllegalIndex(editingIndex); - } - } - }); - } + @Override + protected String title4PopupWindow() { + return Toolkit.i18nText("Fine-Design_Basic_Engine_Schedule_Template_Parameter"); + } - @Override - protected String title4PopupWindow() { - return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Engine_Schedule_Template_Parameter"); - } - - /** - * 创建模板参数设置组件 - * - * @return 模板参数设置组件 - */ - public NameableCreator[] createNameableCreators() { - return new NameableCreator[]{ - new NameableSelfCreator(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Engine_Parameter_Name"), Parameter.class, ParameterPane.class) { - public Parameter createNameable(UnrepeatedNameHelper helper) { - // 返回参数设置面板. - return new Parameter(helper.createUnrepeatedName("p")); - } + /** + * 创建模板参数设置组件 + * + * @return 模板参数设置组件 + */ + public NameableCreator[] createNameableCreators() { + return new NameableCreator[]{ + new NameableSelfCreator(Toolkit.i18nText("Fine-Design_Basic_Engine_Parameter_Name"), Parameter.class, ParameterPane.class) { + public Parameter createNameable(UnrepeatedNameHelper helper) { + // 返回参数设置面板. + return new Parameter(helper.createUnrepeatedName("p")); + } - @Override - public String createTooltip() { - return null; - } - } - }; - } + @Override + public String createTooltip() { + return null; + } + } + }; + } - /** - * 更新参数 + /** + * 更新参数 * * @return 更新后的参数 - */ - public Parameter[] updateParameters() { - // Nameable[]居然不能强转成Parameter[],一定要这么写... - Nameable[] res = this.update(); - Parameter[] res_array = new Parameter[res.length]; - java.util.Arrays.asList(res).toArray(res_array); + */ + public Parameter[] updateParameters() { + // Nameable[]居然不能强转成Parameter[],一定要这么写... + Nameable[] res = this.update(); + Parameter[] res_array = new Parameter[res.length]; + Arrays.asList(res).toArray(res_array); - return res_array; - } + return res_array; + } } diff --git a/designer-base/src/main/java/com/fr/design/parameter/ParameterInputPane.java b/designer-base/src/main/java/com/fr/design/parameter/ParameterInputPane.java index b16e6b2792..7c8f675b1e 100644 --- a/designer-base/src/main/java/com/fr/design/parameter/ParameterInputPane.java +++ b/designer-base/src/main/java/com/fr/design/parameter/ParameterInputPane.java @@ -20,14 +20,18 @@ import com.fr.design.editor.editor.TextEditor; import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.gui.ilable.UILabel; import com.fr.design.layout.FRGUIPaneFactory; - import com.fr.stable.ParameterProvider; import com.fr.stable.StringUtils; -import javax.swing.*; +import javax.swing.BorderFactory; +import javax.swing.JComponent; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.SwingConstants; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; -import java.awt.*; +import java.awt.BorderLayout; +import java.awt.Dimension; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; @@ -37,31 +41,34 @@ import java.util.Map.Entry; /** * The dialog used to input parameter. + * * @editor zhou * @since 2012-3-26上午11:09:45 */ public class ParameterInputPane extends BasicPane { - /** - * - */ - private static final long serialVersionUID = 1L; + /** + * + */ + private static final long serialVersionUID = 1L; + + // alex:保存编辑器对应的参数的名字 + private java.util.Map editorNameMap; // Map + + private boolean allowBlank = true; - // alex:保存编辑器对应的参数的名字 - private java.util.Map editorNameMap; // Map + private FlowTableLayoutHelper flowTableLayoutHelper; - private boolean allowBlank = true; - - /** + /** * Constructor. */ public ParameterInputPane(ParameterProvider[] parameters) { this.initComponents(parameters); } - public ParameterInputPane(ParameterProvider[] parameters, boolean allowBlank) { - this.allowBlank = allowBlank; - this.initComponents(parameters); - } + public ParameterInputPane(ParameterProvider[] parameters, boolean allowBlank) { + this.allowBlank = allowBlank; + this.initComponents(parameters); + } private void initComponents(ParameterProvider[] parameters) { this.setLayout(new BorderLayout(0, 4)); @@ -71,24 +78,24 @@ public class ParameterInputPane extends BasicPane { this.add(new JScrollPane(contentPane), BorderLayout.CENTER); contentPane.setBorder(BorderFactory.createTitledBorder(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Parameters") + ":")); - FlowTableLayoutHelper flowTableLayoutHelper = new FlowTableLayoutHelper(); + flowTableLayoutHelper = new FlowTableLayoutHelper(); + + editorNameMap = new java.util.HashMap(); - editorNameMap = new java.util.HashMap(); - //Parameter list. java.util.List nameAddedList = new java.util.ArrayList(); // alex:已经加到界面中去的参数名 if (parameters != null && parameters.length > 0) { for (int i = 0; i < parameters.length; i++) { ParameterProvider parameter = parameters[i]; - + // alex:已经在界面中的参数,不加了 if (nameAddedList.contains(parameter.getName())) { - continue; - } - if(parameter instanceof StoreProcedureParameter - && ((StoreProcedureParameter) parameter).getSchema() == StoreProcedureConstants.OUT) { - continue; - } + continue; + } + if (parameter instanceof StoreProcedureParameter + && ((StoreProcedureParameter) parameter).getSchema() == StoreProcedureConstants.OUT) { + continue; + } final Object pv = parameter.getValue(); Editor[] editors = makeEditorByValue(pv); @@ -100,135 +107,140 @@ public class ParameterInputPane extends BasicPane { editPane.setPreferredSize(new Dimension(180, editPane.getPreferredSize().height)); String parameterDisplayName = parameter.getName(); - if(StringUtils.isNotBlank(parameter.getName())) { - parameterDisplayName = parameter.getName(); + if (StringUtils.isNotBlank(parameter.getName())) { + parameterDisplayName = parameter.getName(); } contentPane.add(flowTableLayoutHelper.createLabelFlowPane(parameterDisplayName + ":", editPane)); //add editor to parameter hashtable. - initTextListener(textF); + initTextListener(textF); this.editorNameMap.put(textF, parameter.getName()); nameAddedList.add(parameter.getName()); } } + } + @Override + public void addNotify() { + super.addNotify(); + // windows 高DPI下,使用getPreferredSize必须在添加到容器之后,否则得到的数值不准确,因此先放到这调整大小 flowTableLayoutHelper.adjustLabelWidth(); } protected void initTextListener(ValueEditorPane textF) { - textF.getCurrentEditor().addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - HistoryTemplateListCache.getInstance().getCurrentEditingTemplate().fireTargetModified(); - } - }); - } - - private Editor[] makeEditorByValue(Object pv) { - Editor[] editors = {null}; - if (pv instanceof Integer) { - editors[0] = new IntegerEditor(); - } else if (pv instanceof Double || pv instanceof Float) { - editors[0] = new DoubleEditor(); - } else if (pv instanceof Float) { - editors[0] = new FloatEditor(); - } else if (pv instanceof Date) { - editors[0] = new DateEditor(true, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Date")); - } else if (pv instanceof Boolean) { - editors[0] = new BooleanEditor(); - } else if (pv instanceof BaseFormula) { - editors = ValueEditorPaneFactory.basicEditors(); - } else { - editors[0] = new TextEditor(); - } - return editors; - } - + textF.getCurrentEditor().addChangeListener(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + HistoryTemplateListCache.getInstance().getCurrentEditingTemplate().fireTargetModified(); + } + }); + } + + private Editor[] makeEditorByValue(Object pv) { + Editor[] editors = {null}; + if (pv instanceof Integer) { + editors[0] = new IntegerEditor(); + } else if (pv instanceof Double || pv instanceof Float) { + editors[0] = new DoubleEditor(); + } else if (pv instanceof Float) { + editors[0] = new FloatEditor(); + } else if (pv instanceof Date) { + editors[0] = new DateEditor(true, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Date")); + } else if (pv instanceof Boolean) { + editors[0] = new BooleanEditor(); + } else if (pv instanceof BaseFormula) { + editors = ValueEditorPaneFactory.basicEditors(); + } else { + editors[0] = new TextEditor(); + } + return editors; + } + @Override protected String title4PopupWindow() { - return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Parameters"); + return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Parameters"); } /** * Update */ - public Map update() { - - java.util.Map nameValueMap = new java.util.HashMap(); - - Iterator> entryIt = this.editorNameMap.entrySet().iterator(); - while(entryIt.hasNext()) { - java.util.Map.Entry entry = entryIt.next(); - ValueEditorPane editor = entry.getKey(); - String parameterName = entry.getValue(); - - Object editorStringValue = editor.update(); - nameValueMap.put(parameterName, editorStringValue); - } - - return nameValueMap; + public Map update() { + + java.util.Map nameValueMap = new java.util.HashMap(); + + Iterator> entryIt = this.editorNameMap.entrySet().iterator(); + while (entryIt.hasNext()) { + java.util.Map.Entry entry = entryIt.next(); + ValueEditorPane editor = entry.getKey(); + String parameterName = entry.getValue(); + + Object editorStringValue = editor.update(); + nameValueMap.put(parameterName, editorStringValue); + } + + return nameValueMap; + } + + public void checkValid() throws Exception { + if (!allowBlank) { + boolean valid = true; + String error = ""; + Iterator> entryIt = this.editorNameMap.entrySet().iterator(); + while (entryIt.hasNext()) { + java.util.Map.Entry entry = entryIt.next(); + ValueEditorPane editor = entry.getKey(); + String parameterName = entry.getValue(); + Object editorStringValue = editor.update(); + if (editorStringValue == null || StringUtils.isEmpty(Utils.objectToString(editorStringValue))) { + valid = false; + error += parameterName + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Not_Null_Des") + "\n"; + } + } + if (!valid) { + throw new Exception(error); + } + } } - public void checkValid() throws Exception { - if (!allowBlank) { - boolean valid = true; - String error = ""; - Iterator> entryIt = this.editorNameMap.entrySet().iterator(); - while (entryIt.hasNext()) { - java.util.Map.Entry entry = entryIt.next(); - ValueEditorPane editor = entry.getKey(); - String parameterName = entry.getValue(); - Object editorStringValue = editor.update(); - if (editorStringValue == null || StringUtils.isEmpty(Utils.objectToString(editorStringValue))) { - valid = false; - error += parameterName + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Not_Null_Des") + "\n"; - } - } - if (!valid) { - throw new Exception(error); - } - } - } - /** * The class help to flowlayout components */ private static class FlowTableLayoutHelper { - private List labelList = new ArrayList(); + private List labelList = new ArrayList(); - public FlowTableLayoutHelper() { - } + public FlowTableLayoutHelper() { + } - public JPanel createLabelFlowPane(String text, JComponent comp) { - JPanel centerPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); + public JPanel createLabelFlowPane(String text, JComponent comp) { + JPanel centerPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); - UILabel textLabel = new UILabel(text); - centerPane.add(textLabel); - textLabel.setHorizontalAlignment(SwingConstants.LEFT); + UILabel textLabel = new UILabel(text); + centerPane.add(textLabel); + textLabel.setHorizontalAlignment(SwingConstants.LEFT); - this.labelList.add(textLabel); - centerPane.add(comp); + this.labelList.add(textLabel); + centerPane.add(comp); - return centerPane; - } + return centerPane; + } - public void adjustLabelWidth() { - int maxWidth = 0; + public void adjustLabelWidth() { + int maxWidth = 0; - for (int i = 0; i < labelList.size(); i++) { - maxWidth = Math.max(maxWidth, labelList.get(i).getPreferredSize().width); - } + for (int i = 0; i < labelList.size(); i++) { + maxWidth = Math.max(maxWidth, labelList.get(i).getPreferredSize().width); + } - for (int i = 0; i < labelList.size(); i++) { - UILabel label = labelList.get(i); + for (int i = 0; i < labelList.size(); i++) { + UILabel label = labelList.get(i); - Dimension labelDim = new Dimension(maxWidth, label.getPreferredSize().height); + Dimension labelDim = new Dimension(maxWidth, label.getPreferredSize().height); - label.setPreferredSize(labelDim); - label.setSize(labelDim); - label.setMinimumSize(labelDim); - } - } + label.setPreferredSize(labelDim); + label.setSize(labelDim); + label.setMinimumSize(labelDim); + } + } } -} \ No newline at end of file +} diff --git a/designer-base/src/main/java/com/fr/design/style/FormatPane.java b/designer-base/src/main/java/com/fr/design/style/FormatPane.java index 255efe78c5..d1679561d7 100644 --- a/designer-base/src/main/java/com/fr/design/style/FormatPane.java +++ b/designer-base/src/main/java/com/fr/design/style/FormatPane.java @@ -45,7 +45,7 @@ import java.util.Date; */ public class FormatPane extends BasicPane { private static final long serialVersionUID = 724330854437726751L; - + private Format format; private UILabel sampleLabel; //preview label. private UIRadioButton nullRadioButton; @@ -59,14 +59,14 @@ public class FormatPane extends BasicPane { //content pane. private UITextField patternTextField = null; private JList patternList = null; - + /** * Constructor. */ public FormatPane() { this.initComponents(); } - + public UILabel getSampleLabel() { return sampleLabel; } @@ -74,7 +74,7 @@ public class FormatPane extends BasicPane { public void setSampleLabel(UILabel sampleLabel) { this.sampleLabel = sampleLabel; } - + protected void initComponents() { this.setLayout(FRGUIPaneFactory.createM_BorderLayout()); @@ -172,7 +172,7 @@ public class FormatPane extends BasicPane { protected String title4PopupWindow() { return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Style"); } - + /** * Populate */ @@ -185,17 +185,17 @@ public class FormatPane extends BasicPane { } else { if (format instanceof DecimalFormat) { checkDecimalFormat(); - } else if (format instanceof SimpleDateFormat) { + } else if (format instanceof SimpleDateFormat) { //date and time - checkDateFormat(); - } else if (format instanceof TextFormat) { + checkDateFormat(); + } else if (format instanceof TextFormat) { //Text this.textRadioButton.setSelected(true); this.applyRadioActionListener(this.textRadioButton); } } } - + private void checkDateFormat() { String pattern = ((SimpleDateFormat) format).toPattern(); if(pattern == null) { @@ -276,7 +276,7 @@ public class FormatPane extends BasicPane { } } } - + /** * 百分比面板 */ @@ -296,7 +296,7 @@ public class FormatPane extends BasicPane { /** * 是否属于数组中的列表样式 - * + * * @param stringArray 格式数组 * @param pattern 输入的格式 * @return 返回在数组中的位置 @@ -323,7 +323,7 @@ public class FormatPane extends BasicPane { } return FormatField.getInstance().getFormat(getFormatContents(), text); } - + private int getFormatContents(){ if (nullRadioButton.isSelected()) return FormatContents.NULL; @@ -335,7 +335,7 @@ public class FormatPane extends BasicPane { return FormatContents.PERCENT; else if (scientificRadioButton.isSelected()) return FormatContents.SCIENTIFIC; - else if (dateRadioButton.isSelected()) + else if (dateRadioButton.isSelected()) return FormatContents.DATE; else if (timeRadioButton.isSelected()) return FormatContents.TIME; @@ -380,7 +380,7 @@ public class FormatPane extends BasicPane { ActionEvent evt = new ActionEvent(radioButton, 100, ""); this.radioActionListener.actionPerformed(evt); } - + /** * Radio selection listener. */ @@ -393,6 +393,7 @@ public class FormatPane extends BasicPane { patternTextField.setEditable(true); patternList.setEnabled(true); + int contents = getContents(source); String[] patternArray = FormatField.getInstance().getFormatArray(contents); @@ -407,6 +408,7 @@ public class FormatPane extends BasicPane { //maybe need to select the first item. String text = patternTextField.getText(); + if (hasPattenText(text, patternModel)) { String pattern = null; if (format instanceof DecimalFormat) { @@ -418,6 +420,10 @@ public class FormatPane extends BasicPane { if (pattern != null) { patternList.setSelectedValue(pattern, true); + if (patternList.getSelectedIndex() == -1) { + //patten不在下拉框里面 + patternList.setSelectedIndex(0); + } } else { patternList.setSelectedIndex(0); } @@ -426,13 +432,13 @@ public class FormatPane extends BasicPane { }; private boolean hasPattenText (String text, DefaultListModel patternModel) { - return (text == null || text.length() <= 0) && patternModel.size() > 0; + return StringUtils.isEmpty(text) && patternModel.size() > 0; } - + private void setPatternTextEnable() { patternTextField.setEnabled(false); patternTextField.setEditable(false); - patternTextField.setText(""); + patternTextField.setText(StringUtils.EMPTY); patternList.setEnabled(false); } @@ -459,7 +465,7 @@ public class FormatPane extends BasicPane { } return contents; } - + /** * text pattern document listener. */ @@ -477,7 +483,7 @@ public class FormatPane extends BasicPane { refreshPreviewLabel(); } }; - + /** * Pattern list selection listener. */ @@ -487,5 +493,5 @@ public class FormatPane extends BasicPane { patternTextField.setText((String) patternList.getSelectedValue()); } }; - + } 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 59aed2a6f0..1cbf543a4b 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 @@ -26,6 +26,7 @@ import java.awt.event.ActionListener; */ public class GradientBackgroundPane extends BackgroundDetailPane { private static final long serialVersionUID = -6854603990673031897L; + public static final int DEFAULT_GRADIENT_WIDTH = 254; private UIRadioButton left2right, top2bottom; private GradientBar gradientBar; @@ -41,7 +42,7 @@ public class GradientBackgroundPane extends BackgroundDetailPane { // neil:增加渐变色拖动条 JPanel gradientPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); JPanel blankJp = new JPanel(); - gradientBar = new GradientBar(4, 254); + gradientBar = new GradientBar(4, DEFAULT_GRADIENT_WIDTH); blankJp.add(gradientBar); UILabel jl = FRWidgetFactory.createLineWrapLabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Drag_To_Select_Gradient")); jl.setBorder(BorderFactory.createEmptyBorder(0, 20, 0, 20)); diff --git a/designer-base/src/main/java/com/fr/design/style/background/gradient/GradientBar.java b/designer-base/src/main/java/com/fr/design/style/background/gradient/GradientBar.java index 46d1b9165b..b088864c0f 100644 --- a/designer-base/src/main/java/com/fr/design/style/background/gradient/GradientBar.java +++ b/designer-base/src/main/java/com/fr/design/style/background/gradient/GradientBar.java @@ -192,7 +192,15 @@ public class GradientBar extends JComponent implements UIObserver, ColorSelectab } float[] dist = new float[list.size()]; for (int i = 0; i < list.size(); i++) { - dist[i] = (float) ((list.get(i).getX() - 4) / (max - 4)); + double value = list.get(i).getX() - 4; + double defaultMax = max - 4; + if (Double.compare(value, defaultMax) > 0) { + // 设置了预定义的渐变色 渐变色起始位置比较大 然后由预定义样式切换到自定义样式 做下等比例转换 + dist[i] = (float) (value / (GradientBackgroundPane.DEFAULT_GRADIENT_WIDTH - 4)); + list.get(i).setX(max * dist[i]); + } else { + dist[i] = (float) (value / defaultMax); + } } LinearGradientPaint paint = new LinearGradientPaint(start, end, dist, c); diff --git a/designer-base/src/main/java/com/fr/design/update/factory/DirectoryOperationFactory.java b/designer-base/src/main/java/com/fr/design/update/factory/DirectoryOperationFactory.java deleted file mode 100644 index 48c151488a..0000000000 --- a/designer-base/src/main/java/com/fr/design/update/factory/DirectoryOperationFactory.java +++ /dev/null @@ -1,129 +0,0 @@ -package com.fr.design.update.factory; - -import com.fr.log.FineLoggerFactory; -import com.fr.stable.ArrayUtils; -import com.fr.stable.StableUtils; - -import java.io.BufferedInputStream; -import java.io.BufferedOutputStream; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.File; -import java.io.FileFilter; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.util.Arrays; - -/** - * Created by XINZAI on 2018/8/21. - */ -public class DirectoryOperationFactory { - /** - * 新建一个目录 - * - * @param dirPath 目录路径 - */ - public static void createNewDirectory(String dirPath) { - try { - File newDirPath = new File(dirPath); - if (!newDirPath.exists()) { - StableUtils.mkdirs(newDirPath); - } - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage()); - } - } - - /** - * 删除目录 - * - * @param dirPath 目录路径 - */ - public static void deleteDirectory(String dirPath) { - try { - File dir = new File(dirPath); - if (dir.isDirectory()) { - File[] file = dir.listFiles(); - for (File fileTemp : file) { - deleteDirectory(fileTemp.toString()); - fileTemp.delete(); - } - } else { - dir.delete(); - } - dir.delete(); - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage()); - } - } - - /** - * 复制目录 - * - * @param oldDirPath 被复制目录 - * @param newDirPath 新目录 - */ - public static void copyDirectory(String oldDirPath, String newDirPath) { - File oldDir = new File(oldDirPath); - if (oldDir.isDirectory()) { - StableUtils.mkdirs(new File(newDirPath)); - File[] files = oldDir.listFiles(); - for (File fileTemp : files) { - copyDirectory(fileTemp.toString(), newDirPath + "/" + fileTemp.getName()); - } - } else { - try { - copy(oldDirPath, newDirPath); - } catch (IOException e) { - FineLoggerFactory.getLogger().error(e.getMessage()); - } - } - } - - private static void copy(String path1, String path2) throws IOException { - try (DataInputStream in = new DataInputStream(new BufferedInputStream(new FileInputStream(path1))); - DataOutputStream out = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(path2)))) { - byte[] date = new byte[in.available()]; - in.read(date); - out.write(date); - } - } - - /** - * 移动目录 - * - * @param oldDirPath 被移动目录 - * @param newDirPath 新目录 - */ - public static void moveDirectory(String oldDirPath, String newDirPath) { - copyDirectory(oldDirPath, newDirPath); - deleteDirectory(oldDirPath); - } - - /** - * 列出过滤后的文件 - * - * @param installHome 安装目录 - * @param backupdir 备份目录 - * @return String数组 - */ - public static String[] listFilteredFiles(String installHome, String backupdir) { - File backupDir = new File(StableUtils.pathJoin(installHome, backupdir)); - StableUtils.mkdirs(backupDir); - File[] fileNames = backupDir.listFiles(new FileFilter() { - @Override - public boolean accept(File pathname) { - return pathname.isDirectory(); - } - }); - String[] jarFileName = new String[fileNames.length]; - int j = 0; - for (File fileName : fileNames) { - if ((fileName.isDirectory()) && (ArrayUtils.getLength(fileName.listFiles()) > 0)) {//判断备份文件夹中是否为空,为空不显示 - jarFileName[j++] = fileName.getName(); - } - } - return Arrays.copyOf(jarFileName, j); - } -} diff --git a/designer-base/src/main/java/com/fr/design/update/factory/UpdateFileFactory.java b/designer-base/src/main/java/com/fr/design/update/factory/UpdateFileFactory.java new file mode 100644 index 0000000000..cf992fe08b --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/update/factory/UpdateFileFactory.java @@ -0,0 +1,50 @@ +package com.fr.design.update.factory; + +import com.fr.decision.update.data.UpdateConstants; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.StableUtils; + +import java.io.File;; + +/** + * @author Bryant + * @version 10.0 + * Created by Bryant on 2020-09-29 + */ +public class UpdateFileFactory { + + private UpdateFileFactory() { + } + + public static File[] getBackupVersions() { + File[] versions = null; + try { + File backupDir = new File(StableUtils.pathJoin(StableUtils.getInstallHome(), UpdateConstants.DESIGNER_BACKUP_DIR)); + StableUtils.mkdirs(backupDir); + versions = backupDir.listFiles(); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + return versions; + } + + public static boolean isBackupVersionsValid(String version) { + boolean designerValid = false; + boolean envValid = false; + try { + File designerLib = new File(StableUtils.pathJoin(version, UpdateConstants.DESIGNERBACKUPPATH)); + File[] jars = designerLib.listFiles(); + if (jars != null && jars.length > 0) { + designerValid = true; + } + File envLib = new File(StableUtils.pathJoin(version, UpdateConstants.BACKUPPATH)); + jars = envLib.listFiles(); + if (jars != null && jars.length > 0) { + envValid = true; + } + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + return designerValid && envValid; + } +} diff --git a/designer-base/src/main/java/com/fr/design/update/ui/dialog/RestoreDialog.java b/designer-base/src/main/java/com/fr/design/update/ui/dialog/RestoreDialog.java index 8ffe8d4a41..69f3f61604 100644 --- a/designer-base/src/main/java/com/fr/design/update/ui/dialog/RestoreDialog.java +++ b/designer-base/src/main/java/com/fr/design/update/ui/dialog/RestoreDialog.java @@ -4,7 +4,7 @@ import com.fr.decision.update.data.UpdateConstants; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.DesignerContext; -import com.fr.design.update.factory.DirectoryOperationFactory; +import com.fr.design.update.utils.UpdateFileUtils; import com.fr.design.update.ui.widget.ColorfulCellRender; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.stable.ArrayUtils; @@ -86,7 +86,7 @@ public class RestoreDialog extends JDialog { JPanel jarListPane = new JPanel(); jarListPane.setLayout(new BoxLayout(jarListPane, BoxLayout.Y_AXIS)); - String[] jarBackupFiles = DirectoryOperationFactory.listFilteredFiles(StableUtils.getInstallHome(), UpdateConstants.DESIGNER_BACKUP_DIR); + String[] jarBackupFiles = UpdateFileUtils.listBackupVersions(); ArrayUtils.reverse(jarBackupFiles); String[] jarFilesList = ((jarBackupFiles.length < NUMOFCELL_LEAST) ? Arrays.copyOf(jarBackupFiles, NUMOFCELL_LEAST) : jarBackupFiles); diff --git a/designer-base/src/main/java/com/fr/design/update/ui/dialog/UpdateMainDialog.java b/designer-base/src/main/java/com/fr/design/update/ui/dialog/UpdateMainDialog.java index 3992be6a91..3c91ebf145 100644 --- a/designer-base/src/main/java/com/fr/design/update/ui/dialog/UpdateMainDialog.java +++ b/designer-base/src/main/java/com/fr/design/update/ui/dialog/UpdateMainDialog.java @@ -17,7 +17,7 @@ import com.fr.design.layout.TableLayoutHelper; import com.fr.design.mainframe.DesignerContext; import com.fr.design.update.actions.FileProcess; import com.fr.design.update.domain.UpdateInfoCachePropertyManager; -import com.fr.design.update.factory.DirectoryOperationFactory; +import com.fr.design.update.utils.UpdateFileUtils; import com.fr.design.update.ui.widget.LoadingLabel; import com.fr.design.update.ui.widget.UpdateActionLabel; import com.fr.design.update.ui.widget.UpdateInfoTable; @@ -320,7 +320,7 @@ public class UpdateMainDialog extends UIDialog { } }); //choose RestoreLabel to show - boolean isNeedRestore = ArrayUtils.isNotEmpty(DirectoryOperationFactory.listFilteredFiles(StableUtils.getInstallHome(), getBackupDirectory())); + boolean isNeedRestore = ArrayUtils.isNotEmpty(UpdateFileUtils.listBackupVersions()); jarRestoreLabel = isNeedRestore ? jarRestorePreviousRevision : noJarPreviousRevision; } @@ -544,7 +544,7 @@ public class UpdateMainDialog extends UIDialog { private void showDownLoadInfo() { //形如 Build#release-2018.07.31.03.03.52.80 String buildNO = downloadFileConfig.optString("buildNO"); - Date jarDate = (new SimpleDateFormat("yyyy.MM.dd")).parse(buildNO, new ParsePosition(buildNO.indexOf("-") + 1)); + Date jarDate = (new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss")).parse(buildNO, new ParsePosition(buildNO.indexOf("-") + 1)); String serverVersionNO = downloadFileConfig.optString("versionNO"); String currentVersionNO = ProductConstants.RELEASE_VERSION; String[] serverVersionSplitStr = serverVersionNO.split("\\."); @@ -556,8 +556,8 @@ public class UpdateMainDialog extends UIDialog { //形如 Build#release-2018.07.31.03.03.52.80 String currentNO = GeneralUtils.readBuildNO(); if (!".".equals(StableUtils.getInstallHome())) { - Date currentDate = (new SimpleDateFormat("yyyy.MM.dd")).parse(currentNO, new ParsePosition(currentNO.indexOf("-") + 1)); - if (DateUtils.subtractDate(jarDate, currentDate, DateUtils.DAY) > 0) { + Date currentDate = (new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss")).parse(currentNO, new ParsePosition(currentNO.indexOf("-") + 1)); + if (DateUtils.subtractDate(jarDate, currentDate, DateUtils.SECOND) > 0) { updateButton.setEnabled(true); updateLabel.setVisible(true); loadingLabel.stopLoading(buildNO.contains("-") ? buildNO.substring(buildNO.lastIndexOf("-") + 1) : buildNO); diff --git a/designer-base/src/main/java/com/fr/design/update/utils/UpdateFileUtils.java b/designer-base/src/main/java/com/fr/design/update/utils/UpdateFileUtils.java new file mode 100644 index 0000000000..7a3c0a2a8a --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/update/utils/UpdateFileUtils.java @@ -0,0 +1,36 @@ +package com.fr.design.update.utils; + +import com.fr.design.update.factory.UpdateFileFactory; +import com.fr.stable.StableUtils; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +/** + * @author Bryant + * @version 10.0 + * Created by Bryant on 2020-09-25 + */ +public class UpdateFileUtils { + /** + * 列出过滤后的文件 + * + * @return String数组 + */ + public static String[] listBackupVersions() { + File[] versionBackup = UpdateFileFactory.getBackupVersions(); + List versions = new ArrayList<>(); + if (versionBackup != null) { + for (File file : versionBackup) { + if (UpdateFileFactory.isBackupVersionsValid(file.getAbsolutePath())) { + versions.add(file.getName()); + } else { + StableUtils.deleteFile(file); + } + } + } + String[] result = new String[versions.size()]; + return versions.toArray(result); + } +} diff --git a/designer-base/src/main/java/com/fr/design/upm/UpmFinder.java b/designer-base/src/main/java/com/fr/design/upm/UpmFinder.java index 4febad3a99..2aaa9556bc 100644 --- a/designer-base/src/main/java/com/fr/design/upm/UpmFinder.java +++ b/designer-base/src/main/java/com/fr/design/upm/UpmFinder.java @@ -10,6 +10,7 @@ import com.fr.design.update.ui.dialog.UpdateMainDialog; import com.fr.event.Event; import com.fr.event.EventDispatcher; import com.fr.event.Listener; +import com.fr.general.GeneralContext; import com.fr.log.FineLoggerFactory; import com.fr.stable.StableUtils; import com.fr.workspace.Workspace; @@ -17,6 +18,7 @@ import com.fr.workspace.WorkspaceEvent; import javax.swing.*; import java.io.File; +import java.util.Locale; /** * @author richie @@ -27,6 +29,7 @@ public class UpmFinder { private static final String UPM_DIR = "/upm"; private static final String MAIN_RESOURCE_PATH = UPM_DIR + "/plugin_design.html"; + private static final String JXBROWSER = "com.teamdev.jxbrowser.chromium.Browser"; public static String installHome = FRContext.getCommonOperator().getWebRootPath(); @@ -56,39 +59,49 @@ public class UpmFinder { } public static void showUPMDialog() { - boolean flag = true; + boolean hasJxBrowser = true; try { - Class.forName("com.teamdev.jxbrowser.chromium.Browser"); + Class.forName(JXBROWSER); } catch (ClassNotFoundException e) { - flag = false; + hasJxBrowser = false; } - if (flag) { - if (!checkUPMResourcesExist()){ - // upm下载 - int val = FineJOptionPane.showConfirmDialog(null, Toolkit.i18nText("Fine-Design_Basic_Plugin_Shop_Need_Install"), - Toolkit.i18nText("Fine-Design_Basic_Confirm"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE); - if (val == JOptionPane.OK_OPTION){ - try { - UpmResourceLoader.INSTANCE.download(); - UpmResourceLoader.INSTANCE.install(); - FineJOptionPane.showMessageDialog(null, Toolkit.i18nText("Fine-Design_Basic_Plugin_Shop_Installed"), - Toolkit.i18nText("Fine-Design_Basic_Message"), JOptionPane.INFORMATION_MESSAGE); - } catch (Exception e){ - FineLoggerFactory.getLogger().error(e.getMessage(), e); - FineJOptionPane.showMessageDialog(null, Toolkit.i18nText("Fine-Design_Updater_Download_Failed"), - Toolkit.i18nText("Fine-Design_Basic_Message"), JOptionPane.INFORMATION_MESSAGE); - } + if (hasJxBrowser) { + showUpmPane(); + } else { + showUpdatePane(); + } + } + + private static void showUpmPane() { + if (!checkUPMResourcesExist()){ + // upm下载 + int val = FineJOptionPane.showConfirmDialog(null, Toolkit.i18nText("Fine-Design_Basic_Plugin_Shop_Need_Install"), + Toolkit.i18nText("Fine-Design_Basic_Confirm"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE); + if (val == JOptionPane.OK_OPTION){ + try { + UpmResourceLoader.INSTANCE.download(); + UpmResourceLoader.INSTANCE.install(); + FineJOptionPane.showMessageDialog(null, Toolkit.i18nText("Fine-Design_Basic_Plugin_Shop_Installed"), + Toolkit.i18nText("Fine-Design_Basic_Message"), JOptionPane.INFORMATION_MESSAGE); + } catch (Exception e){ + FineLoggerFactory.getLogger().error(e.getMessage(), e); + FineJOptionPane.showMessageDialog(null, Toolkit.i18nText("Fine-Design_Updater_Download_Failed"), + Toolkit.i18nText("Fine-Design_Basic_Message"), JOptionPane.INFORMATION_MESSAGE); } } - else { - UpmShowPane upmPane = new UpmShowPane(); - if (dialog == null) { - dialog = new UpmShowDialog(DesignerContext.getDesignerFrame(), upmPane); - } - dialog.setVisible(true); + } + else { + UpmShowPane upmPane = new UpmShowPane(); + if (dialog == null) { + dialog = new UpmShowDialog(DesignerContext.getDesignerFrame(), upmPane); } - } else { - JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Toolkit.i18nText("Fine-Design_Update_Info_Plugin_Message")); + dialog.setVisible(true); + } + } + + private static void showUpdatePane() { + JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Toolkit.i18nText("Fine-Design_Update_Info_Plugin_Message")); + if (!GeneralContext.getLocale().equals(Locale.JAPAN)) { UpdateMainDialog dialog = new UpdateMainDialog(DesignerContext.getDesignerFrame()); dialog.setAutoUpdateAfterInit(); dialog.showDialog(); diff --git a/designer-base/src/main/java/com/fr/design/utils/DesignUtils.java b/designer-base/src/main/java/com/fr/design/utils/DesignUtils.java index 2bf64642f2..75a0d83125 100644 --- a/designer-base/src/main/java/com/fr/design/utils/DesignUtils.java +++ b/designer-base/src/main/java/com/fr/design/utils/DesignUtils.java @@ -6,23 +6,31 @@ import com.fr.concurrent.NamedThreadFactory; import com.fr.design.DesignerEnvManager; import com.fr.design.ExtraDesignClassManager; import com.fr.design.dialog.FineJOptionPane; +import com.fr.design.env.DesignerWorkspaceInfo; import com.fr.design.fun.DesignerEnvProcessor; import com.fr.design.gui.UILookAndFeel; +import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.DesignerContext; import com.fr.exit.DesignerExiter; import com.fr.file.FileFILE; import com.fr.general.ComparatorUtils; import com.fr.general.FRFont; import com.fr.general.GeneralContext; +import com.fr.general.GeneralUtils; import com.fr.log.FineLoggerFactory; import com.fr.stable.ArrayUtils; import com.fr.stable.CommonCodeUtils; import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; +import com.fr.stable.os.OperatingSystem; import com.fr.start.ServerStarter; +import com.fr.value.NotNullLazyValue; import com.fr.workspace.WorkContext; +import org.jetbrains.annotations.NotNull; + +import com.fr.workspace.connect.WorkspaceConnectionInfo; +import com.fr.workspace.engine.channel.http.FunctionalHttpRequest; -import javax.swing.JOptionPane; import javax.swing.SwingUtilities; import javax.swing.UIManager; import java.awt.Desktop; @@ -31,7 +39,6 @@ import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.IOException; -import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; @@ -83,6 +90,7 @@ public class DesignUtils { /** * 判断设计器端口是否被其他程序占用 * 尝试去通信,无回应就是其他程序占用端口,否则需要继续判断是否为设计器进程未关闭 + * * @return */ public static boolean isPortOccupied() { @@ -153,7 +161,7 @@ public class DesignUtils { return; } try (Socket socket = new Socket("localhost", port)) { - clientSend(lines, socket); + clientSend(lines, socket); } catch (Exception ignore) { } @@ -189,10 +197,10 @@ public class DesignUtils { DesignerEnvManager.getEnvManager().setCurrentEnv2Default(); ServerStarter.browserDemoURL(); } else if ("check".equals(line)) { - clientSend(new String[] {"response"}, socket); + clientSend(new String[]{"response"}, socket); } else if ("end".equals(line)) { - DesignerExiter.getInstance().execute(); } - else if (StringUtils.isNotEmpty(line)) { + DesignerExiter.getInstance().execute(); + } else if (StringUtils.isNotEmpty(line)) { File f = new File(line); String path = f.getAbsolutePath(); @@ -219,7 +227,7 @@ public class DesignUtils { } - public static void responseToClient(Socket socket) { + public static void responseToClient(Socket socket) { try (OutputStream outputStream = socket.getOutputStream()) { outputStream.write("reponse".getBytes(StandardCharsets.UTF_8)); outputStream.flush(); @@ -248,6 +256,7 @@ public class DesignUtils { // 刷新DesignerFrame里面的面板 SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { if (DesignerContext.getDesignerFrame() == null) { return; @@ -269,7 +278,7 @@ public class DesignUtils { FineLoggerFactory.getLogger().error("Substance Raven Graphite failed to initialize"); } //获取当前系统语言下设计器用的默认字体 - FRFont guiFRFont = getCurrentLocaleFont(); + FRFont guiFRFont = getDefaultGUIFont(); //指定UIManager中字体 Enumeration keys = UIManager.getDefaults().keys(); while (keys.hasMoreElements()) { @@ -285,35 +294,51 @@ public class DesignUtils { return key.startsWith("TextField.") || key.startsWith("PasswordField."); } - private static FRFont getCurrentLocaleFont() { - FRFont guiFRFont; - Locale defaultLocale = Locale.getDefault(); + /** + * 获取当前系统语言下设计器界面使用的默认字体 + * + * @return 默认字体 + */ + public static FRFont getDefaultGUIFont() { + return CURRENT_LOCALE_FONT.getValue(); + } - if (isDisplaySimSun(defaultLocale)) { - guiFRFont = getNamedFont("SimSun"); - } else { - guiFRFont = getNamedFont("Dialog"); - } + /** + * 获取当前系统语言下设计器用的默认字体 + */ + private static final NotNullLazyValue CURRENT_LOCALE_FONT = new NotNullLazyValue() { + @NotNull + @Override + protected FRFont compute() { + FRFont guiFRFont; + Locale defaultLocale = Locale.getDefault(); + // JDK9 之后宋体在计算label中字母的空间上出现问题,暂时先用雅黑兼容,以后再统一字体 + if (StableUtils.getMajorJavaVersion() >= 9 && OperatingSystem.isWindows()) { + guiFRFont = getNamedFont("Microsoft YaHei"); + } else if (isDisplaySimSun(defaultLocale)) { + guiFRFont = getNamedFont("SimSun"); + } else { + guiFRFont = getNamedFont("Dialog"); + } - //先初始化的设计器locale, 后初始化lookandfeel.如果顺序改了, 这边也要调整. - Locale designerLocale = GeneralContext.getLocale(); - String file = com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_File"); - char displayChar = file.charAt(0); - if (!guiFRFont.canDisplay(displayChar)) { - //如果不能用默认的语言显示字体, 比如想在英文系统里用中文设计器 - //默认语言(中文:宋体, 英文:Tahoma, 其他:Dialog) - guiFRFont = getNamedFont("SimSun"); + String file = Toolkit.i18nText("Fine-Design_Basic_File"); + char displayChar = file.charAt(0); if (!guiFRFont.canDisplay(displayChar)) { - //比如想在中文或英文系统里用韩文设计器 - guiFRFont = getNamedFont("Dialog"); + //如果不能用默认的语言显示字体, 比如想在英文系统里用中文设计器 + //默认语言(中文:宋体, 英文:Tahoma, 其他:Dialog) + guiFRFont = getNamedFont("SimSun"); if (!guiFRFont.canDisplay(displayChar)) { - FineLoggerFactory.getLogger().error(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Base_SimSun_Not_Found")); + //比如想在中文或英文系统里用韩文设计器 + guiFRFont = getNamedFont("Dialog"); + if (!guiFRFont.canDisplay(displayChar)) { + FineLoggerFactory.getLogger().error(Toolkit.i18nText("Fine-Design_Basic_Base_SimSun_Not_Found")); + } } } - } - return guiFRFont; - } + return guiFRFont; + } + }; private static FRFont getNamedFont(String name) { return FRFont.getInstance(name, Font.PLAIN, 12); @@ -397,4 +422,23 @@ public class DesignUtils { public static boolean sendFeedBack(FeedBackInfo feedBackInfo) throws Exception { return true; } + + + public static boolean checkDesignerRemoteVersion() { + if (WorkContext.getCurrent().isLocal()) { + return true; + } + String envName = DesignerEnvManager.getEnvManager().getCurEnvName(); + DesignerWorkspaceInfo selectedEnv = DesignerEnvManager.getEnvManager().getWorkspaceInfo(envName); + String localBranch; + String remoteBranch; + WorkspaceConnectionInfo connectionInfo = selectedEnv.getConnection(); + localBranch = GeneralUtils.readFullBuildNO(); + try { + remoteBranch = new FunctionalHttpRequest(connectionInfo).getServerBranch(); + } catch (Exception e) { + return false; + } + return localBranch.contains("#") && localBranch.equals(remoteBranch); + } } diff --git a/designer-base/src/main/java/com/fr/design/web/CustomIconPane.java b/designer-base/src/main/java/com/fr/design/web/CustomIconPane.java index 12c72c5cd3..ef66fc039a 100644 --- a/designer-base/src/main/java/com/fr/design/web/CustomIconPane.java +++ b/designer-base/src/main/java/com/fr/design/web/CustomIconPane.java @@ -4,6 +4,7 @@ import com.fr.base.BaseUtils; import com.fr.base.GraphHelper; import com.fr.base.Icon; import com.fr.base.IconManager; +import com.fr.design.designer.IntervalConstants; import com.fr.design.dialog.BasicPane; import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.dialog.FineJOptionPane; @@ -401,9 +402,8 @@ public class CustomIconPane extends BasicPane { private void init() { this.setLayout(FRGUIPaneFactory.createBorderLayout()); double p = TableLayout.PREFERRED; - double rowSize[] = {p, p}; - double columnSize[] = {p, p, p}; - + double[] rowSize = {p, p}; + double[] columnSize = {p, p}; UIButton browseButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Custom_Icon_SelectIcon")); browseButton.setPreferredSize(new Dimension(80, 25)); browseButton.setToolTipText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Click_this_button")); 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 590f9d1121..ccf01dd5e8 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 @@ -53,6 +53,7 @@ import javax.swing.BorderFactory; import javax.swing.DefaultCellEditor; import javax.swing.DefaultComboBoxModel; import javax.swing.Icon; +import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JOptionPane; import javax.swing.JPanel; @@ -867,13 +868,14 @@ public class DBManipulationPane extends BasicBeanPane { textLabel = new UILabel(); textLabel.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { + vPaneDLG.setAlwaysOnTop(true); vPaneDLG.setVisible(true); } }); vPane = new ValuePane(types); - vPaneDLG = vPane.showSmallWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() { + vPaneDLG = vPane.showSmallWindow(new JFrame(), new DialogActionAdapter() { public void doOk() { fireEditingStopped(); // Make the renderer // reappear. diff --git a/designer-base/src/main/java/com/fr/env/RemoteEnvPane.java b/designer-base/src/main/java/com/fr/env/RemoteEnvPane.java index 54cfddc8d3..5257e74f42 100644 --- a/designer-base/src/main/java/com/fr/env/RemoteEnvPane.java +++ b/designer-base/src/main/java/com/fr/env/RemoteEnvPane.java @@ -1,7 +1,5 @@ package com.fr.env; -import com.fr.base.FRContext; -import com.fr.base.ServerConfig; import com.fr.design.DesignerEnvManager; import com.fr.design.ExtraDesignClassManager; import com.fr.design.beans.BasicBeanPane; @@ -145,6 +143,12 @@ public class RemoteEnvPane extends BasicBeanPane { * https 证书路径输入框 */ private JPanel httpsCertFileInputPanel; + + /** + * 当前远程工作目录是否为新创建的 + */ + private boolean newCreated; + /** * 主机名,web应用,Servlet,端口监听器 */ @@ -329,12 +333,15 @@ public class RemoteEnvPane extends BasicBeanPane { this.certPathInput.setText(certPath); this.certSecretKeyInput.setText(certSecretKey); this.rememberPwdCheckbox.setSelected(rememberPwd); - + this.newCreated = ob.isNewCreated(); } else { this.remoteWorkspaceURL = RemoteWorkspaceURL.createDefaultURL(); this.usernameInput.setText(StringUtils.EMPTY); this.passwordInput.setText(StringUtils.EMPTY); + this.certPathInput.setText(StringUtils.EMPTY); + this.certSecretKeyInput.setText(StringUtils.EMPTY); this.rememberPwdCheckbox.setSelected(true); + this.newCreated = true; } fillRemoteEnvURLField(); @@ -366,7 +373,9 @@ public class RemoteEnvPane extends BasicBeanPane { new String(this.certSecretKeyInput.getPassword()), rememberPwd); - return RemoteDesignerWorkspaceInfo.create(connection); + RemoteDesignerWorkspaceInfo info = RemoteDesignerWorkspaceInfo.create(connection); + info.setNewCreated(newCreated); + return info; } @Override @@ -444,38 +453,6 @@ public class RemoteEnvPane extends BasicBeanPane { new double[]{FILL} )); - setDefaultAppAndServlet(); - } - - /** - * 设置 app 和 servlet 默认值 - */ - private void setDefaultAppAndServlet() { - setWrap(webAppNameInput, () -> FRContext.getCommonOperator().getAppName(), RemoteWorkspaceURL.DEFAULT_WEB_APP_NAME); - setWrap(servletNameInput, () -> ServerConfig.getInstance().getServletName(), RemoteWorkspaceURL.DEFAULT_SERVLET_NAME); - } - - private void setWrap(final UITextField textField, final Supplier supplier, final String defaultName) { - new SwingWorker() { - - @Override - protected String doInBackground() throws Exception { - return supplier.get(); - } - - @Override - protected void done() { - String name = defaultName; - try { - name = get(); - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage() , e); - } - if (StringUtils.isEmpty(textField.getText())) { - textField.setText(name); - } - } - }.execute(); } @@ -599,9 +576,6 @@ public class RemoteEnvPane extends BasicBeanPane { @Override protected TestConnectionResult doInBackground() throws Exception { - - DesignerEnvManager.getEnvManager().setCertificatePath(connection.getCertPath()); - DesignerEnvManager.getEnvManager().setCertificatePass(connection.getCertSecretKey()); try { return TestConnectionResult.parse(WorkContext.getConnector().testConnection(connection), connection); } catch (WorkspaceAuthException ignored) { diff --git a/designer-base/src/test/java/com/fr/design/data/datapane/TableDataPaneListPaneTest.java b/designer-base/src/test/java/com/fr/design/data/datapane/TableDataPaneListPaneTest.java new file mode 100644 index 0000000000..dd5e5bc5ce --- /dev/null +++ b/designer-base/src/test/java/com/fr/design/data/datapane/TableDataPaneListPaneTest.java @@ -0,0 +1,26 @@ +package com.fr.design.data.datapane; + +import org.junit.Test; + +import java.util.Map; + +import static org.junit.Assert.*; + +/** + * @author Yyming + * @version 10.0 + * Created by Yyming on 2020/9/29 + */ +public class TableDataPaneListPaneTest { + + @Test + public void rename() { + TableDataPaneListPane listPane = new TableDataPaneListPane(); + listPane.rename("111", "222"); + listPane.rename("222", "333"); + Map dsNameChangedMap = listPane.getDsNameChangedMap(); + assertEquals(1, dsNameChangedMap.size()); + listPane.rename("333","111"); + assertEquals(0, dsNameChangedMap.size()); + } +} \ No newline at end of file diff --git a/designer-base/src/test/java/com/fr/design/update/factory/UpdateFileFactoryTest.java b/designer-base/src/test/java/com/fr/design/update/factory/UpdateFileFactoryTest.java new file mode 100644 index 0000000000..6c2211e76c --- /dev/null +++ b/designer-base/src/test/java/com/fr/design/update/factory/UpdateFileFactoryTest.java @@ -0,0 +1,28 @@ +package com.fr.design.update.factory; + +import com.fr.decision.update.data.UpdateConstants; +import com.fr.stable.StableUtils; +import org.junit.Assert; +import org.junit.Test; + +import java.io.File; + +public class UpdateFileFactoryTest { + + @Test + public void testGetBackupVersions() { + Assert.assertEquals(0, UpdateFileFactory.getBackupVersions().length); + File backupDir = new File(StableUtils.pathJoin(StableUtils.getInstallHome(), UpdateConstants.DESIGNER_BACKUP_DIR)); + StableUtils.deleteFile(backupDir); + } + + @Test + public void testIsBackupVersionsValid() { + File des = new File(StableUtils.pathJoin(StableUtils.getInstallHome(), UpdateConstants.DESIGNER_BACKUP_DIR, "test", UpdateConstants.BACKUPPATH, "test")); + File env = new File(StableUtils.pathJoin(StableUtils.getInstallHome(), UpdateConstants.DESIGNER_BACKUP_DIR, "test", UpdateConstants.DESIGNERBACKUPPATH, "test")); + StableUtils.mkdirs(des); + StableUtils.mkdirs(env); + Assert.assertTrue(UpdateFileFactory.isBackupVersionsValid(StableUtils.pathJoin(StableUtils.getInstallHome(), UpdateConstants.DESIGNER_BACKUP_DIR, "test"))); + StableUtils.deleteFile(new File(StableUtils.pathJoin(StableUtils.getInstallHome(), UpdateConstants.DESIGNER_BACKUP_DIR))); + } +} diff --git a/designer-base/src/test/java/com/fr/design/update/utils/UpdateFileUtilsTest.java b/designer-base/src/test/java/com/fr/design/update/utils/UpdateFileUtilsTest.java new file mode 100644 index 0000000000..8788675352 --- /dev/null +++ b/designer-base/src/test/java/com/fr/design/update/utils/UpdateFileUtilsTest.java @@ -0,0 +1,27 @@ +package com.fr.design.update.utils; + +import com.fr.decision.update.data.UpdateConstants; +import com.fr.stable.StableUtils; +import org.junit.Assert; +import org.junit.Test; + +import java.io.File; + +/** + * @author Bryant + * @version 10.0 + * Created by Bryant on 2020-09-25 + */ +public class UpdateFileUtilsTest { + + @Test + public void testListFilteredFiles() { + File des = new File(StableUtils.pathJoin(StableUtils.getInstallHome(), UpdateConstants.DESIGNER_BACKUP_DIR, "test", UpdateConstants.BACKUPPATH, "test")); + File env = new File(StableUtils.pathJoin(StableUtils.getInstallHome(), UpdateConstants.DESIGNER_BACKUP_DIR, "test", UpdateConstants.DESIGNERBACKUPPATH, "test")); + StableUtils.mkdirs(des); + StableUtils.mkdirs(env); + String[] result = UpdateFileUtils.listBackupVersions(); + Assert.assertEquals(1, result.length); + StableUtils.deleteFile(new File(StableUtils.pathJoin(StableUtils.getInstallHome(), UpdateConstants.DESIGNER_BACKUP_DIR))); + } +} diff --git a/designer-chart/src/main/java/com/fr/van/chart/box/VanChartBoxTooltipContentPane.java b/designer-chart/src/main/java/com/fr/van/chart/box/VanChartBoxTooltipContentPane.java index 4659faaa84..25eb587d87 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/box/VanChartBoxTooltipContentPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/box/VanChartBoxTooltipContentPane.java @@ -5,7 +5,15 @@ import com.fr.design.i18n.Toolkit; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.plugin.chart.base.AttrTooltipContent; +import com.fr.plugin.chart.base.AttrTooltipRichText; import com.fr.plugin.chart.base.format.AttrTooltipCategoryFormat; +import com.fr.plugin.chart.base.format.AttrTooltipDataMaxFormat; +import com.fr.plugin.chart.base.format.AttrTooltipDataMedianFormat; +import com.fr.plugin.chart.base.format.AttrTooltipDataMinFormat; +import com.fr.plugin.chart.base.format.AttrTooltipDataNumberFormat; +import com.fr.plugin.chart.base.format.AttrTooltipDataOutlierFormat; +import com.fr.plugin.chart.base.format.AttrTooltipDataQ1Format; +import com.fr.plugin.chart.base.format.AttrTooltipDataQ3Format; import com.fr.plugin.chart.base.format.AttrTooltipFormat; import com.fr.plugin.chart.base.format.AttrTooltipSeriesFormat; import com.fr.plugin.chart.box.attr.AttrBoxTooltipContent; @@ -47,6 +55,9 @@ public class VanChartBoxTooltipContentPane extends VanChartTooltipContentPane { private JPanel dataNumberPane; private JPanel dataOutlierPane; + private JPanel richTextNumberPane; + private JPanel richTextOutlierPane; + public VanChartBoxTooltipContentPane(VanChartStylePane parent, JPanel showOnPane, boolean isDetailed) { super(parent, showOnPane); checkFormatVisible(isDetailed); @@ -144,6 +155,16 @@ public class VanChartBoxTooltipContentPane extends VanChartTooltipContentPane { return commonPanel; } + protected JPanel createRichFormatPanel() { + JPanel richFormatPanel = new JPanel(new BorderLayout()); + + richFormatPanel.add(createRichTextCateAndSeriesPane(), BorderLayout.NORTH); + richFormatPanel.add(createRichTextDataNumberPane(), BorderLayout.CENTER); + richFormatPanel.add(createRichTextDataDetailPane(), BorderLayout.SOUTH); + + return richFormatPanel; + } + protected Component[][] getRichTextComponents() { return new Component[][]{ new Component[]{getRichTextCategoryNameFormatPane(), null}, @@ -228,6 +249,72 @@ public class VanChartBoxTooltipContentPane extends VanChartTooltipContentPane { return detailPane; } + private JPanel createRichTextCateAndSeriesPane() { + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double e = TableLayout4VanChartHelper.EDIT_AREA_WIDTH; + + double[] columnSize = {f, e}; + double[] rowSize = {p, p, p}; + + Component[][] cateAndSeries = new Component[][]{ + new Component[]{null, null}, + new Component[]{null, getRichTextCategoryNameFormatPane()}, + new Component[]{null, getRichTextSeriesNameFormatPane()} + }; + + return TableLayoutHelper.createTableLayoutPane(cateAndSeries, rowSize, columnSize); + } + + private JPanel createRichTextDataNumberPane() { + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double e = TableLayout4VanChartHelper.EDIT_AREA_WIDTH; + + double[] columnSize = {f, e}; + double[] rowSize = {p, p}; + + Component[][] dataNumber = new Component[][]{ + new Component[]{null, null}, + new Component[]{null, richTextNumber}, + }; + + richTextNumberPane = TableLayoutHelper.createTableLayoutPane(dataNumber, rowSize, columnSize); + + return richTextNumberPane; + } + + private JPanel createRichTextDataDetailPane() { + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double e = TableLayout4VanChartHelper.EDIT_AREA_WIDTH; + + double[] columnSize = {f, e}; + + JPanel detailPane = new JPanel(new BorderLayout()); + + Component[][] richTextDetail = new Component[][]{ + new Component[]{null, null}, + new Component[]{null, richTextMax}, + new Component[]{new UILabel(getLabelContentTitle()), richTextQ3}, + new Component[]{null, richTextMedian}, + new Component[]{null, richTextQ1}, + new Component[]{null, richTextMin} + }; + + Component[][] dataOutlier = new Component[][]{ + new Component[]{null, null}, + new Component[]{null, richTextOutlier}, + }; + + richTextOutlierPane = TableLayoutHelper.createTableLayoutPane(dataOutlier, new double[]{p, p}, columnSize); + + detailPane.add(TableLayoutHelper.createTableLayoutPane(richTextDetail, new double[]{p, p, p, p, p, p}, columnSize), BorderLayout.NORTH); + detailPane.add(richTextOutlierPane, BorderLayout.CENTER); + + return detailPane; + } + public boolean isDirty() { return getCategoryNameFormatPane().isDirty() || getSeriesNameFormatPane().isDirty() @@ -276,6 +363,7 @@ public class VanChartBoxTooltipContentPane extends VanChartTooltipContentPane { } protected void populateRichEditor(AttrTooltipContent attrTooltipContent) { + setRichTextAttr(new AttrTooltipRichText()); Map params = getRichTextAttr().getParams(); AttrTooltipCategoryFormat categoryFormat = attrTooltipContent.getRichTextCategoryFormat(); @@ -289,24 +377,48 @@ public class VanChartBoxTooltipContentPane extends VanChartTooltipContentPane { if (attrTooltipContent instanceof AttrBoxTooltipContent) { AttrBoxTooltipContent boxTooltipContent = (AttrBoxTooltipContent) attrTooltipContent; - VanChartFormatPaneWithoutCheckBox[] formatPaneGroup = new VanChartFormatPaneWithoutCheckBox[]{ + VanChartFormatPaneWithoutCheckBox[] formatPaneGroup = getFormatPaneGroup(); + AttrTooltipFormat[] formatGroup = getFormatGroup(boxTooltipContent); + + populateRichTextFormat(formatPaneGroup, formatGroup); + populateRichText(attrTooltipContent.getRichTextAttr()); + + checkRichEditorState(attrTooltipContent); + } + } + + private VanChartFormatPaneWithoutCheckBox[] getFormatPaneGroup() { + if (detailed) { + return new VanChartFormatPaneWithoutCheckBox[]{ richTextNumber, richTextMax, richTextQ3, richTextMedian, richTextQ1, richTextMin, richTextOutlier }; + } - AttrTooltipFormat[] formatGroup = new AttrTooltipFormat[]{ - boxTooltipContent.getRichTextNumber(), - boxTooltipContent.getRichTextMax(), - boxTooltipContent.getRichTextQ3(), - boxTooltipContent.getRichTextMedian(), - boxTooltipContent.getRichTextQ1(), - boxTooltipContent.getRichTextMin(), - boxTooltipContent.getRichTextOutlier() - }; + return new VanChartFormatPaneWithoutCheckBox[]{ + richTextMax, richTextQ3, richTextMedian, richTextQ1, richTextMin + }; + } - populateRichTextFormat(formatPaneGroup, formatGroup); - populateRichText(attrTooltipContent.getRichTextAttr()); + private AttrTooltipFormat[] getFormatGroup(AttrBoxTooltipContent boxTooltipContent) { + AttrTooltipDataNumberFormat richTextNumber = boxTooltipContent.getRichTextNumber(); + AttrTooltipDataMaxFormat richTextMaxFormat = boxTooltipContent.getRichTextMax(); + AttrTooltipDataQ3Format richTextQ3Format = boxTooltipContent.getRichTextQ3(); + AttrTooltipDataMedianFormat richTextMedianFormat = boxTooltipContent.getRichTextMedian(); + AttrTooltipDataQ1Format richTextQ1Format = boxTooltipContent.getRichTextQ1(); + AttrTooltipDataMinFormat richTextMinFormat = boxTooltipContent.getRichTextMin(); + AttrTooltipDataOutlierFormat richTextOutlierFormat = boxTooltipContent.getRichTextOutlier(); + + if (detailed) { + return new AttrTooltipFormat[]{ + richTextNumber, richTextMaxFormat, richTextQ3Format, richTextMedianFormat, + richTextQ1Format, richTextMinFormat, richTextOutlierFormat + }; } + + return new AttrTooltipFormat[]{ + richTextMaxFormat, richTextQ3Format, richTextMedianFormat, richTextQ1Format, richTextMinFormat + }; } protected void updateFormatPane(AttrTooltipContent attrTooltipContent) { @@ -350,5 +462,8 @@ public class VanChartBoxTooltipContentPane extends VanChartTooltipContentPane { dataNumberPane.setVisible(detailed); dataOutlierPane.setVisible(detailed); + + richTextNumberPane.setVisible(detailed); + richTextOutlierPane.setVisible(detailed); } } diff --git a/designer-chart/src/main/java/com/fr/van/chart/box/data/table/BoxPlotTableResultDataSeriesPane.java b/designer-chart/src/main/java/com/fr/van/chart/box/data/table/BoxPlotTableResultDataSeriesPane.java index cfd3ea8d5b..5af1fa4168 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/box/data/table/BoxPlotTableResultDataSeriesPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/box/data/table/BoxPlotTableResultDataSeriesPane.java @@ -15,10 +15,10 @@ import com.fr.stable.StringUtils; import javax.swing.BorderFactory; import javax.swing.JPanel; +import java.util.List; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Dimension; -import java.util.List; public class BoxPlotTableResultDataSeriesPane extends AbstractTableDataContentPane { @@ -66,6 +66,7 @@ public class BoxPlotTableResultDataSeriesPane extends AbstractTableDataContentPa private JPanel createUIComboBoxPane(UIComboBox comboBox, String title) { UILabel label = new UILabel(title); label.setPreferredSize(new Dimension(80, 20)); + comboBox.setPreferredSize(new Dimension(100, 20)); JPanel panel = new JPanel(); diff --git a/designer-chart/src/main/java/com/fr/van/chart/box/data/table/UIComboBoxWithEditLabel.java b/designer-chart/src/main/java/com/fr/van/chart/box/data/table/UIComboBoxWithEditLabel.java index 3ba858364a..7b51fc5647 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/box/data/table/UIComboBoxWithEditLabel.java +++ b/designer-chart/src/main/java/com/fr/van/chart/box/data/table/UIComboBoxWithEditLabel.java @@ -31,6 +31,7 @@ public abstract class UIComboBoxWithEditLabel extends JPanel implements UIObserv editLabel.setPreferredSize(new Dimension(80, 20)); comboBox = new UIComboBox(); + comboBox.setPreferredSize(new Dimension(100, 20)); this.setLayout(new BorderLayout(4, 0)); this.add(editLabel, BorderLayout.WEST); diff --git a/designer-chart/src/main/java/com/fr/van/chart/column/VanChartColumnConditionPane.java b/designer-chart/src/main/java/com/fr/van/chart/column/VanChartColumnConditionPane.java index c4184f3b17..3f9978f75c 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/column/VanChartColumnConditionPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/column/VanChartColumnConditionPane.java @@ -49,7 +49,7 @@ public class VanChartColumnConditionPane extends DataSeriesConditionPane{ classPaneMap.put(AttrBackground.class, new VanChartColumnSeriesColorConditionPane(this)); classPaneMap.put(AttrAlpha.class, new LabelAlphaPane(this)); classPaneMap.put(AttrBorder.class, new VanChartColumnLabelBorderPane(this)); - classPaneMap.put(AttrLabel.class, new VanChartLabelConditionPane(this, plot)); + classPaneMap.put(AttrLabel.class, new VanChartColumnLabelConditionPane(this, plot)); classPaneMap.put(AttrFloatColor.class, new VanChartFloatColorConditionPane(this)); classPaneMap.put(VanChartAttrTrendLine.class, new VanChartTrendLineConditionPane(this)); classPaneMap.put(AttrSeriesImageBackground.class, new VanChartSeriesImageBackgroundConditionPane(this)); diff --git a/designer-chart/src/main/java/com/fr/van/chart/column/VanChartColumnLabelConditionPane.java b/designer-chart/src/main/java/com/fr/van/chart/column/VanChartColumnLabelConditionPane.java new file mode 100644 index 0000000000..ec870a98fe --- /dev/null +++ b/designer-chart/src/main/java/com/fr/van/chart/column/VanChartColumnLabelConditionPane.java @@ -0,0 +1,17 @@ +package com.fr.van.chart.column; + +import com.fr.chart.chartattr.Plot; +import com.fr.design.condition.ConditionAttributesPane; +import com.fr.van.chart.designer.other.condition.item.VanChartLabelConditionPane; +import com.fr.van.chart.designer.style.label.VanChartPlotLabelPane; + +public class VanChartColumnLabelConditionPane extends VanChartLabelConditionPane { + + public VanChartColumnLabelConditionPane(ConditionAttributesPane conditionAttributesPane, Plot plot) { + super(conditionAttributesPane, plot); + } + + protected VanChartPlotLabelPane createLabelPane() { + return new VanChartColumnPlotLabelNoCheckPane(getPlot(),null); + } +} diff --git a/designer-chart/src/main/java/com/fr/van/chart/column/VanChartColumnPlotLabelDetailPane.java b/designer-chart/src/main/java/com/fr/van/chart/column/VanChartColumnPlotLabelDetailPane.java new file mode 100644 index 0000000000..a2be5f2905 --- /dev/null +++ b/designer-chart/src/main/java/com/fr/van/chart/column/VanChartColumnPlotLabelDetailPane.java @@ -0,0 +1,77 @@ +package com.fr.van.chart.column; + +import com.fr.chart.chartattr.Plot; +import com.fr.design.gui.ibutton.UIButtonGroup; +import com.fr.plugin.chart.base.AttrLabelDetail; +import com.fr.plugin.chart.base.AttrTooltipContent; +import com.fr.plugin.chart.column.VanChartColumnPlot; +import com.fr.van.chart.designer.component.VanChartLabelContentPane; +import com.fr.van.chart.designer.component.VanChartTooltipContentPane; +import com.fr.van.chart.designer.style.VanChartStylePane; +import com.fr.van.chart.designer.style.label.VanChartPlotLabelDetailPane; + +public class VanChartColumnPlotLabelDetailPane extends VanChartPlotLabelDetailPane { + + public VanChartColumnPlotLabelDetailPane(Plot plot, VanChartStylePane parent) { + super(plot, parent); + } + + protected void initToolTipContentPane(Plot plot) { + VanChartLabelContentPane dataLabelContentPane = new VanChartLabelContentPane(getParentPane(), VanChartColumnPlotLabelDetailPane.this) { + protected void checkCardPane() { + super.checkCardPane(); + checkOrientationPane(); + } + }; + + setDataLabelContentPane(dataLabelContentPane); + } + + private void checkOrientationPane() { + VanChartLabelContentPane dataLabelContentPane = (VanChartLabelContentPane) getDataLabelContentPane(); + UIButtonGroup content = dataLabelContentPane.getContent(); + UIButtonGroup orientation = getOrientation(); + + if (content == null || orientation == null) { + return; + } + + if (content.getSelectedIndex() == VanChartTooltipContentPane.RICH_EDITOR_INDEX) { + orientation.setSelectedIndex(HORIZONTAL_INDEX); + orientation.setEnabled(false); + } else { + orientation.setEnabled(true); + } + } + + protected boolean hasLabelOrientationPane() { + return !((VanChartColumnPlot) this.getPlot()).isBar(); + } + + private void checkOrientationEnable(AttrLabelDetail detail) { + AttrTooltipContent content = detail.getContent(); + UIButtonGroup orientation = getOrientation(); + + if (orientation != null && content != null) { + if (content.isRichText()) { + + orientation.setSelectedIndex(HORIZONTAL_INDEX); + detail.setHorizontal(true); + + orientation.setEnabled(false); + } else { + orientation.setEnabled(true); + } + } + } + + public void populate(AttrLabelDetail detail) { + super.populate(detail); + checkOrientationEnable(detail); + } + + public void update(AttrLabelDetail detail) { + super.update(detail); + checkOrientationEnable(detail); + } +} diff --git a/designer-chart/src/main/java/com/fr/van/chart/column/VanChartColumnPlotLabelNoCheckPane.java b/designer-chart/src/main/java/com/fr/van/chart/column/VanChartColumnPlotLabelNoCheckPane.java new file mode 100644 index 0000000000..b08734782a --- /dev/null +++ b/designer-chart/src/main/java/com/fr/van/chart/column/VanChartColumnPlotLabelNoCheckPane.java @@ -0,0 +1,25 @@ +package com.fr.van.chart.column; + +import com.fr.chart.chartattr.Plot; +import com.fr.plugin.chart.base.AttrLabel; +import com.fr.van.chart.designer.style.VanChartStylePane; + +import java.awt.BorderLayout; + +public class VanChartColumnPlotLabelNoCheckPane extends VanChartColumnPlotLabelPane { + + public VanChartColumnPlotLabelNoCheckPane(Plot plot, VanChartStylePane parent) { + super(plot, parent); + } + + protected void addComponents() { + this.setLayout(new BorderLayout()); + this.add(getLabelPane(), BorderLayout.CENTER); + } + + public void populate(AttrLabel attr) { + super.populate(attr); + getLabelShowCheckBox().setSelected(true); + getLabelPane().setVisible(true); + } +} diff --git a/designer-chart/src/main/java/com/fr/van/chart/column/VanChartColumnPlotLabelPane.java b/designer-chart/src/main/java/com/fr/van/chart/column/VanChartColumnPlotLabelPane.java new file mode 100644 index 0000000000..e80f6310d5 --- /dev/null +++ b/designer-chart/src/main/java/com/fr/van/chart/column/VanChartColumnPlotLabelPane.java @@ -0,0 +1,20 @@ +package com.fr.van.chart.column; + +import com.fr.chart.chartattr.Plot; +import com.fr.van.chart.designer.style.VanChartStylePane; +import com.fr.van.chart.designer.style.label.VanChartPlotLabelPane; + +import java.awt.BorderLayout; + +public class VanChartColumnPlotLabelPane extends VanChartPlotLabelPane { + + public VanChartColumnPlotLabelPane(Plot plot, VanChartStylePane parent) { + super(plot, parent); + } + + protected void createLabelPane() { + VanChartColumnPlotLabelDetailPane labelDetailPane = new VanChartColumnPlotLabelDetailPane(getPlot(), getParentPane()); + setLabelDetailPane(labelDetailPane); + getLabelPane().add(labelDetailPane, BorderLayout.CENTER); + } +} diff --git a/designer-chart/src/main/java/com/fr/van/chart/custom/style/VanChartCustomPlotLabelTabPane.java b/designer-chart/src/main/java/com/fr/van/chart/custom/style/VanChartCustomPlotLabelTabPane.java index 5461b220f0..04b94ef5c1 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/custom/style/VanChartCustomPlotLabelTabPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/custom/style/VanChartCustomPlotLabelTabPane.java @@ -83,14 +83,14 @@ public class VanChartCustomPlotLabelTabPane extends VanChartCustomPlotTabPane customPlotList = plot.getCustomPlotList(); for (int i = 0; i < paneList.size() && i < customPlotList.size(); i++) { ConditionAttr attrList = customPlotList.get(i).getConditionCollection().getDefaultAttr(); - DataSeriesCondition attr = customPlotList.get(i).getAttrLabelFromConditionCollection(); - if (attr != null) { - attrList.remove(attr); - } VanChartPlotLabelPane labelPane = (VanChartPlotLabelPane) paneList.get(i); AttrLabel attrLabel = labelPane.update(); + DataSeriesCondition attr = customPlotList.get(i).getAttrLabelFromConditionCollection(); + if (attr != null) { + attrList.remove(attr); + } if (attrLabel != null) { attrList.addDataSeriesCondition(attrLabel); } diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/PlotFactory.java b/designer-chart/src/main/java/com/fr/van/chart/designer/PlotFactory.java index aeaefa5b3a..9ea26a5c5b 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/designer/PlotFactory.java +++ b/designer-chart/src/main/java/com/fr/van/chart/designer/PlotFactory.java @@ -7,6 +7,7 @@ import com.fr.design.gui.icombobox.UIComboBoxRenderer; import com.fr.design.gui.style.FormatPane; import com.fr.general.ComparatorUtils; import com.fr.log.FineLoggerFactory; +import com.fr.plugin.chart.PiePlot4VanChart; import com.fr.plugin.chart.area.VanChartAreaPlot; import com.fr.plugin.chart.bubble.VanChartBubblePlot; import com.fr.plugin.chart.column.VanChartColumnPlot; @@ -23,6 +24,7 @@ import com.fr.plugin.chart.structure.VanChartStructurePlot; import com.fr.plugin.chart.treemap.VanChartTreeMapPlot; import com.fr.plugin.chart.wordcloud.VanChartWordCloudPlot; import com.fr.van.chart.bubble.force.VanChartBubbleRefreshTooltipPane; +import com.fr.van.chart.column.VanChartColumnPlotLabelPane; import com.fr.van.chart.designer.component.VanChartLabelContentPane; import com.fr.van.chart.designer.component.VanChartRefreshTooltipContentPane; import com.fr.van.chart.designer.component.VanChartTooltipContentPane; @@ -76,7 +78,7 @@ import java.util.Set; */ public class PlotFactory { - private static Set> autoAdjustLabelPlots = new HashSet>(); + private static Set> autoAdjustLabelPlots = new HashSet<>(); static { autoAdjustLabelPlots.add(VanChartColumnPlot.class); @@ -89,12 +91,26 @@ public class PlotFactory { return autoAdjustLabelPlots.contains(plot.getClass()); } + private static Set> borderAndBackgroundLabelPlots = new HashSet<>(); + + static { + borderAndBackgroundLabelPlots.add(PiePlot4VanChart.class); + borderAndBackgroundLabelPlots.add(VanChartColumnPlot.class); + borderAndBackgroundLabelPlots.add(VanChartLinePlot.class); + borderAndBackgroundLabelPlots.add(VanChartAreaPlot.class); + } + + public static boolean hasBorderAndBackgroundPlotLabel(Plot plot) { + return borderAndBackgroundLabelPlots.contains(plot.getClass()); + } + /** * 标签Map */ - private static Map, Class> labelMap = new HashMap, Class>(); + private static Map, Class> labelMap = new HashMap<>(); static { + labelMap.put(VanChartColumnPlot.class, VanChartColumnPlotLabelPane.class); labelMap.put(VanChartGaugePlot.class, VanChartGaugePlotLabelPane.class); labelMap.put(VanChartScatterPlot.class, VanChartScatterPlotLabelPane.class); labelMap.put(VanChartBubblePlot.class, VanChartScatterPlotLabelPane.class); diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartHtmlLabelPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartHtmlLabelPane.java index e6bee7c550..40f85dcb49 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartHtmlLabelPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartHtmlLabelPane.java @@ -148,11 +148,12 @@ public class VanChartHtmlLabelPane extends JPanel{ double p = TableLayout.PREFERRED; double f = TableLayout.FILL; double[] columnSize = { p, f }; - double[] rowSize = { p, p}; + double[] rowSize = {p, p, p}; Component[][] components = new Component[][]{ new Component[]{isCustomWidth, customWidth}, new Component[]{isCustomHeight, customHeight}, + new Component[] {null, null} }; return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); } diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartHtmlLabelPaneWithBackGroundLabel.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartHtmlLabelPaneWithBackGroundLabel.java new file mode 100644 index 0000000000..f9c9f7d490 --- /dev/null +++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartHtmlLabelPaneWithBackGroundLabel.java @@ -0,0 +1,27 @@ +package com.fr.van.chart.designer.component; + +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.i18n.Toolkit; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.van.chart.designer.TableLayout4VanChartHelper; + +import javax.swing.JPanel; +import java.awt.Component; + +public class VanChartHtmlLabelPaneWithBackGroundLabel extends VanChartHtmlLabelPane { + + protected JPanel createWidthAndHeightPane() { + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double d = TableLayout4VanChartHelper.DESCRIPTION_AREA_WIDTH; + + JPanel panel = super.createWidthAndHeightPane(); + + Component[][] components = new Component[][]{ + new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Background")), panel}, + }; + + return TableLayoutHelper.createTableLayoutPane(components, new double[]{p}, new double[]{d, f}); + } +} diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartLabelContentPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartLabelContentPane.java index 8586f21067..957fcdaf72 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartLabelContentPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartLabelContentPane.java @@ -1,5 +1,7 @@ package com.fr.van.chart.designer.component; +import com.fr.plugin.chart.base.AttrTooltipContent; +import com.fr.plugin.chart.type.TextAlign; import com.fr.van.chart.designer.style.VanChartStylePane; import javax.swing.JPanel; @@ -13,6 +15,10 @@ public class VanChartLabelContentPane extends VanChartTooltipContentPane { } protected VanChartHtmlLabelPane createHtmlLabelPane() { - return new VanChartHtmlLabelPane(); + return new VanChartHtmlLabelPaneWithBackGroundLabel(); + } + + protected AttrTooltipContent createAttrTooltip() { + return new AttrTooltipContent(TextAlign.CENTER); } } diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartLabelContentPaneWithoutRichText.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartLabelContentPaneWithoutRichText.java deleted file mode 100644 index 4c1935eef0..0000000000 --- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartLabelContentPaneWithoutRichText.java +++ /dev/null @@ -1,295 +0,0 @@ -package com.fr.van.chart.designer.component; - -import com.fr.design.beans.BasicBeanPane; -import com.fr.design.gui.ibutton.UIButtonGroup; -import com.fr.design.gui.ilable.UILabel; -import com.fr.design.i18n.Toolkit; -import com.fr.design.layout.TableLayout; -import com.fr.design.layout.TableLayoutHelper; -import com.fr.plugin.chart.base.AttrTooltipContent; -import com.fr.van.chart.designer.TableLayout4VanChartHelper; -import com.fr.van.chart.designer.component.format.CategoryNameFormatPaneWithCheckBox; -import com.fr.van.chart.designer.component.format.ChangedPercentFormatPaneWithCheckBox; -import com.fr.van.chart.designer.component.format.ChangedValueFormatPaneWithCheckBox; -import com.fr.van.chart.designer.component.format.PercentFormatPaneWithCheckBox; -import com.fr.van.chart.designer.component.format.SeriesNameFormatPaneWithCheckBox; -import com.fr.van.chart.designer.component.format.ValueFormatPaneWithCheckBox; -import com.fr.van.chart.designer.style.VanChartStylePane; - -import javax.swing.JPanel; -import java.awt.BorderLayout; -import java.awt.CardLayout; -import java.awt.Component; -import java.awt.Dimension; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; - -public class VanChartLabelContentPaneWithoutRichText extends BasicBeanPane { - - private UIButtonGroup content; - - private ValueFormatPaneWithCheckBox valueFormatPane; - private PercentFormatPaneWithCheckBox percentFormatPane; - private CategoryNameFormatPaneWithCheckBox categoryNameFormatPane; - private SeriesNameFormatPaneWithCheckBox seriesNameFormatPane; - - //监控刷新时,自动数据点提示使用 - private ChangedValueFormatPaneWithCheckBox changedValueFormatPane; - private ChangedPercentFormatPaneWithCheckBox changedPercentFormatPane; - - private JPanel centerPane; - private JPanel commonPanel; - private VanChartHtmlLabelPane htmlLabelPane; - - private VanChartStylePane parent; - private JPanel showOnPane; - - public VanChartLabelContentPaneWithoutRichText(VanChartStylePane parent, JPanel showOnPane) { - this.parent = parent; - this.showOnPane = showOnPane; - - this.setLayout(new BorderLayout()); - this.add(createLabelContentPane(), BorderLayout.CENTER); - } - - public ValueFormatPaneWithCheckBox getValueFormatPane() { - return valueFormatPane; - } - - public void setValueFormatPane(ValueFormatPaneWithCheckBox valueFormatPane) { - this.valueFormatPane = valueFormatPane; - } - - public PercentFormatPaneWithCheckBox getPercentFormatPane() { - return percentFormatPane; - } - - public void setPercentFormatPane(PercentFormatPaneWithCheckBox percentFormatPane) { - this.percentFormatPane = percentFormatPane; - } - - public CategoryNameFormatPaneWithCheckBox getCategoryNameFormatPane() { - return categoryNameFormatPane; - } - - public void setCategoryNameFormatPane(CategoryNameFormatPaneWithCheckBox categoryNameFormatPane) { - this.categoryNameFormatPane = categoryNameFormatPane; - } - - public SeriesNameFormatPaneWithCheckBox getSeriesNameFormatPane() { - return seriesNameFormatPane; - } - - public void setSeriesNameFormatPane(SeriesNameFormatPaneWithCheckBox seriesNameFormatPane) { - this.seriesNameFormatPane = seriesNameFormatPane; - } - - private JPanel createLabelContentPane() { - content = new UIButtonGroup(new String[]{ - Toolkit.i18nText("Fine-Design_Chart_Common"), - Toolkit.i18nText("Fine-Design_Chart_Custom") - }); - - initFormatPane(parent, showOnPane); - - double p = TableLayout.PREFERRED; - double f = TableLayout.FILL; - double e = TableLayout4VanChartHelper.EDIT_AREA_WIDTH; - - commonPanel = createCommonPanel(); - htmlLabelPane = createHtmlLabelPane(); - htmlLabelPane.setParent(parent); - - centerPane = new JPanel(new CardLayout()) { - @Override - public Dimension getPreferredSize() { - if (content.getSelectedIndex() == 0) { - return commonPanel.getPreferredSize(); - } else { - return new Dimension(commonPanel.getPreferredSize().width, htmlLabelPane.getPreferredSize().height); - } - } - }; - centerPane.add(htmlLabelPane, Toolkit.i18nText("Fine-Design_Chart_Custom")); - centerPane.add(commonPanel, Toolkit.i18nText("Fine-Design_Chart_Common")); - - double[] column = {f, e}; - double[] row = {p, p, p}; - Component[][] components = new Component[][]{ - new Component[]{null, null}, - new Component[]{new UILabel(getLabelContentTitle()), content}, - new Component[]{null, centerPane}, - }; - initContentListener(); - JPanel contentPane = TableLayout4VanChartHelper.createGapTableLayoutPane(components, row, column); - return getLabelContentPane(contentPane); - } - - protected String getLabelContentTitle() { - return Toolkit.i18nText("Fine-Design_Report_Text"); - } - - protected JPanel getLabelContentPane(JPanel contentPane) { - return createTableLayoutPaneWithTitle(Toolkit.i18nText("Fine-Design_Chart_Content"), contentPane); - } - - protected VanChartHtmlLabelPane createHtmlLabelPane() { - return new VanChartHtmlLabelPane(); - } - - protected JPanel createCommonPanel() { - double p = TableLayout.PREFERRED; - double f = TableLayout.FILL; - - double[] columnSize = {f, p}; - double[] rowSize = getRowSize(p); - - return TableLayoutHelper.createTableLayoutPane(getPaneComponents(), rowSize, columnSize); - } - - protected void initFormatPane(VanChartStylePane parent, JPanel showOnPane) { - categoryNameFormatPane = new CategoryNameFormatPaneWithCheckBox(parent, showOnPane); - seriesNameFormatPane = new SeriesNameFormatPaneWithCheckBox(parent, showOnPane); - valueFormatPane = new ValueFormatPaneWithCheckBox(parent, showOnPane); - percentFormatPane = new PercentFormatPaneWithCheckBox(parent, showOnPane); - } - - protected JPanel createTableLayoutPaneWithTitle(String title, JPanel panel) { - return TableLayout4VanChartHelper.createExpandablePaneWithTitle(title, panel); - } - - protected double[] getRowSize(double p) { - return new double[]{p, p, p, p}; - } - - protected Component[][] getPaneComponents() { - return new Component[][]{ - new Component[]{categoryNameFormatPane, null}, - new Component[]{seriesNameFormatPane, null}, - new Component[]{valueFormatPane, null}, - new Component[]{percentFormatPane, null}, - }; - } - - private void initContentListener() { - content.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - checkCardPane(); - } - }); - } - - - private void checkCardPane() { - CardLayout cardLayout = (CardLayout) centerPane.getLayout(); - if (content.getSelectedIndex() == 1) { - cardLayout.show(centerPane, Toolkit.i18nText("Fine-Design_Chart_Custom")); - if (isDirty()) { - setCustomFormatterText(); - setDirty(false); - } - } else { - cardLayout.show(centerPane, Toolkit.i18nText("Fine-Design_Chart_Common")); - } - } - - protected void setCustomFormatterText() { - htmlLabelPane.setCustomFormatterText(updateBean().getFormatterTextFromCommon()); - } - - public boolean isDirty() { - return categoryNameFormatPane.isDirty() || seriesNameFormatPane.isDirty() || valueFormatPane.isDirty() || percentFormatPane.isDirty() - || (changedValueFormatPane != null && changedValueFormatPane.isDirty()) || (changedValueFormatPane != null && changedPercentFormatPane.isDirty()); - } - - public void setDirty(boolean isDirty) { - categoryNameFormatPane.setDirty(isDirty); - seriesNameFormatPane.setDirty(isDirty); - valueFormatPane.setDirty(isDirty); - percentFormatPane.setDirty(isDirty); - - if (changedValueFormatPane != null) { - changedValueFormatPane.setDirty(isDirty); - } - if (changedPercentFormatPane != null) { - changedPercentFormatPane.setDirty(isDirty); - } - } - - @Override - protected String title4PopupWindow() { - return ""; - } - - - @Override - public void populateBean(AttrTooltipContent attrTooltipContent) { - if (attrTooltipContent == null) { - return; - } - - content.setSelectedIndex(attrTooltipContent.isCommon() ? 0 : 1); - - populateFormatPane(attrTooltipContent); - - htmlLabelPane.populate(attrTooltipContent.getHtmlLabel()); - if (!attrTooltipContent.isCommon()) { - setDirty(false); - } - checkCardPane(); - } - - protected void populateFormatPane(AttrTooltipContent attrTooltipContent) { - categoryNameFormatPane.populate(attrTooltipContent.getCategoryFormat()); - seriesNameFormatPane.populate(attrTooltipContent.getSeriesFormat()); - valueFormatPane.populate(attrTooltipContent.getValueFormat()); - percentFormatPane.populate(attrTooltipContent.getPercentFormat()); - - if (changedValueFormatPane != null) { - changedValueFormatPane.populate(attrTooltipContent.getChangedValueFormat()); - } - if (changedPercentFormatPane != null) { - changedPercentFormatPane.populate(attrTooltipContent.getChangedPercentFormat()); - } - } - - public AttrTooltipContent updateBean() { - AttrTooltipContent attrTooltipContent = createAttrTooltip(); - - attrTooltipContent.setCommon(content.getSelectedIndex() == 0); - - updateFormatPane(attrTooltipContent); - - updateFormatsWithPaneWidth(attrTooltipContent); - - htmlLabelPane.update(attrTooltipContent.getHtmlLabel()); - - return attrTooltipContent; - } - - protected AttrTooltipContent createAttrTooltip() { - return new AttrTooltipContent(); - } - - protected void updateFormatPane(AttrTooltipContent attrTooltipContent) { - categoryNameFormatPane.update(attrTooltipContent.getCategoryFormat()); - seriesNameFormatPane.update(attrTooltipContent.getSeriesFormat()); - valueFormatPane.update(attrTooltipContent.getValueFormat()); - percentFormatPane.update(attrTooltipContent.getPercentFormat()); - - if (changedValueFormatPane != null) { - changedValueFormatPane.update(attrTooltipContent.getChangedValueFormat()); - } - if (changedPercentFormatPane != null) { - changedPercentFormatPane.update(attrTooltipContent.getChangedPercentFormat()); - } - } - - private void updateFormatsWithPaneWidth(AttrTooltipContent attrTooltipContent) { - int paneWidth = seriesNameFormatPane.getWidth(); - if (paneWidth == 0) { - attrTooltipContent.getSeriesFormat().setEnable(false); - } - } -} diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartRefreshTooltipContentPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartRefreshTooltipContentPane.java index 09e208cc10..7ecb797d6a 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartRefreshTooltipContentPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartRefreshTooltipContentPane.java @@ -22,6 +22,10 @@ public class VanChartRefreshTooltipContentPane extends VanChartTooltipContentPan return new double[]{p,p,p,p,p,p}; } + protected boolean supportRichEditor() { + return false; + } + @Override protected void initFormatPane(VanChartStylePane parent, JPanel showOnPane) { super.initFormatPane(parent, showOnPane); diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartRichEditorDialog.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartRichEditorDialog.java new file mode 100644 index 0000000000..a13208df56 --- /dev/null +++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartRichEditorDialog.java @@ -0,0 +1,32 @@ +package com.fr.van.chart.designer.component; + +import com.fr.design.dialog.BasicDialog; +import com.fr.design.dialog.BasicPane; +import com.fr.design.i18n.Toolkit; +import com.fr.design.utils.gui.GUICoreUtils; + +import java.awt.Dimension; +import java.awt.Frame; + +public class VanChartRichEditorDialog extends BasicDialog { + + public static final Dimension DEFAULT = new Dimension(960, 600); + + public VanChartRichEditorDialog(Frame parent, BasicPane pane) { + super(parent, pane); + + this.setTitle(Toolkit.i18nText("Fine-Design_Report_RichTextEditor")); + this.setBasicDialogSize(DEFAULT); + GUICoreUtils.centerWindow(this); + this.setResizable(true); + this.setModal(true); + } + + protected void applyEnterAction() { + + } + + public void checkValid() { + + } +} diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartRichEditorPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartRichEditorPane.java index d1f294e41d..408b730b28 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartRichEditorPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartRichEditorPane.java @@ -2,6 +2,7 @@ package com.fr.van.chart.designer.component; import com.fr.design.ui.ModernUIPane; import com.fr.plugin.chart.base.AttrTooltipRichText; +import com.fr.plugin.chart.type.TextAlign; import com.fr.stable.StringUtils; import com.teamdev.jxbrowser.chromium.Browser; import com.teamdev.jxbrowser.chromium.JSValue; @@ -69,18 +70,35 @@ public class VanChartRichEditorPane { paramsStr.deleteCharAt(len - 1); } - return new RichEditorModel(richText.getContent(), richText.isAuto(), paramsStr.toString()); + String content = richText.getContent(); + String initParams = StringUtils.EMPTY; + String align = StringUtils.EMPTY; + + if (content.contains("data-id") && !content.contains("class")) { + initParams = richText.getInitParamsContent(); + + String left = TextAlign.LEFT.getAlign(); + String center = TextAlign.CENTER.getAlign(); + + align = content.contains(left) ? left : center; + } + + return new RichEditorModel(content, richText.isAuto(), paramsStr.toString(), initParams, align); } public static class RichEditorModel { private String content; private boolean auto; private String params; + private String initParams; + private String align; - public RichEditorModel(String content, boolean auto, String params) { + public RichEditorModel(String content, boolean auto, String params, String initParams, String align) { this.content = content; this.auto = auto; this.params = params; + this.initParams = initParams; + this.align = align; } public String getContent() { @@ -106,5 +124,21 @@ public class VanChartRichEditorPane { public void setParams(String params) { this.params = params; } + + public String getInitParams() { + return initParams; + } + + public void setInitParams(String initParams) { + this.initParams = initParams; + } + + public String getAlign() { + return align; + } + + public void setAlign(String align) { + this.align = align; + } } } diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartTooltipContentPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartTooltipContentPane.java index 608ee2e16d..d4ef4ac774 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartTooltipContentPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/VanChartTooltipContentPane.java @@ -9,11 +9,14 @@ import com.fr.design.gui.ilable.UILabel; import com.fr.design.i18n.Toolkit; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.chart.gui.style.ChartTextAttrPane; import com.fr.design.ui.ModernUIPane; +import com.fr.general.ComparatorUtils; import com.fr.plugin.chart.base.AttrTooltipContent; import com.fr.plugin.chart.base.AttrTooltipRichText; import com.fr.plugin.chart.base.format.AttrTooltipFormat; +import com.fr.stable.StringUtils; import com.fr.van.chart.designer.TableLayout4VanChartHelper; import com.fr.van.chart.designer.component.format.CategoryNameFormatPaneWithCheckBox; import com.fr.van.chart.designer.component.format.CategoryNameFormatPaneWithoutCheckBox; @@ -32,7 +35,6 @@ import com.fr.van.chart.designer.component.format.VanChartFormatPaneWithoutCheck import com.fr.van.chart.designer.style.VanChartStylePane; import javax.swing.JComponent; -import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.SwingUtilities; import java.awt.BorderLayout; @@ -51,6 +53,15 @@ public class VanChartTooltipContentPane extends BasicBeanPane content; private CategoryNameFormatPaneWithCheckBox categoryNameFormatPane; @@ -73,6 +84,7 @@ public class VanChartTooltipContentPane extends BasicBeanPane styleButton; private ChartTextAttrPane textAttrPane; private VanChartHtmlLabelPane htmlLabelPane; @@ -82,7 +94,7 @@ public class VanChartTooltipContentPane extends BasicBeanPane getContent() { + return content; + } + public AttrTooltipRichText getRichTextAttr() { return richText; } + public void setRichTextAttr(AttrTooltipRichText richText) { + this.richText = richText; + } + private JPanel createLabelContentPane() { initDetailPane(); initCenterPane(); @@ -202,6 +222,7 @@ public class VanChartTooltipContentPane extends BasicBeanPane(new String[]{ - Toolkit.i18nText("Fine-Design_Chart_Common"), - Toolkit.i18nText("Fine-Design_Chart_Rich_Text"), - Toolkit.i18nText("Fine-Design_Chart_Custom") - }); + if (supportRichEditor()) { + content = new UIButtonGroup<>(new String[]{ + Toolkit.i18nText("Fine-Design_Chart_Common"), + Toolkit.i18nText("Fine-Design_Chart_Rich_Text"), + Toolkit.i18nText("Fine-Design_Chart_Custom") + }); + } else { + content = new UIButtonGroup<>(new String[]{ + Toolkit.i18nText("Fine-Design_Chart_Common"), + Toolkit.i18nText("Fine-Design_Chart_Custom") + }); + } Component[][] components = new Component[][]{ new Component[]{null, null}, @@ -261,15 +321,6 @@ public class VanChartTooltipContentPane extends BasicBeanPane(new String[]{ Toolkit.i18nText("Fine-Design_Chart_Automatic"), Toolkit.i18nText("Fine-Design_Chart_Custom") @@ -321,7 +372,12 @@ public class VanChartTooltipContentPane extends BasicBeanPane pane = VanChartRichEditorPane.createRichEditorPane(richText); - BasicDialog dialog = pane.showWindow(new JFrame()); + BasicDialog dialog = new VanChartRichEditorDialog(DesignerContext.getDesignerFrame(), pane); pane.populate(VanChartRichEditorPane.getRichEditorModel(richText)); @@ -424,8 +485,8 @@ public class VanChartTooltipContentPane extends BasicBeanPane lineColorButton; + private ColorSelectBox lineColorBox; + private MarkerComboBox borderShape; + private UISpinner borderRadius; + + private JPanel detailPane; + private JPanel colorBoxPane; + + public VanChartBorderWithShapePane() { + initComponents(); + createBorderPane(); + } + + private void initComponents() { + lineTypeBox = new LineComboBox(CoreConstants.STRIKE_LINE_STYLE_ARRAY_4_CHART); + lineColorButton = new UIButtonGroup<>(new String[]{ + Toolkit.i18nText("Fine-Design_Chart_Automatic"), + Toolkit.i18nText("Fine-Design_Chart_Custom") + }); + lineColorBox = new ColorSelectBox(100); + borderShape = new MarkerComboBox(MarkerFactory.getLabelShapeMarkers()); + borderRadius = new UISpinner(0, 1000, 1, 0); + } + + private void createBorderPane() { + this.setLayout(new BorderLayout()); + + detailPane = createDetailPane(); + + this.add(createLineTypePane(), BorderLayout.CENTER); + this.add(detailPane, BorderLayout.SOUTH); + + initLineTypeListener(); + initLineColorListener(); + initShapeListener(); + } + + private void initLineTypeListener() { + lineTypeBox.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + checkDetailPane(); + } + }); + } + + private void checkDetailPane() { + detailPane.setVisible(lineTypeBox.getSelectedLineStyle() != Constants.LINE_NONE); + } + + private void initLineColorListener() { + lineColorButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + checkColorPane(); + } + }); + } + + private void checkColorPane() { + colorBoxPane.setVisible(lineColorButton.getSelectedIndex() == CUSTOM_COLOR); + } + + private void initShapeListener() { + borderShape.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + checkRadiusPane(); + } + }); + } + + private void checkRadiusPane() { + borderRadius.setEnabled(borderShape.getSelectedIndex() == RECTANGULAR_INDEX || borderShape.getSelectedIndex() == DIALOG_INDEX); + } + + private JPanel createLineTypePane() { + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double e = TableLayout4VanChartHelper.EDIT_AREA_WIDTH; + + double[] columnSize = {f, e}; + double[] rowSize = {p, p}; + + Component[][] components = new Component[][]{ + new Component[]{null, null}, + new Component[]{FRWidgetFactory.createLineWrapLabel(Toolkit.i18nText("Fine-Design_Chart_Line_Style")), + UIComponentUtils.wrapWithBorderLayoutPane(lineTypeBox)}}; + + return TableLayout4VanChartHelper.createGapTableLayoutPane(components, rowSize, columnSize); + } + + private JPanel createDetailPane() { + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double e = TableLayout4VanChartHelper.EDIT_AREA_WIDTH; + + double[] columnSize = {f, e}; + double[] rowSize = {p, p, p}; + + Component[][] components = new Component[][]{ + new Component[]{null, null}, + new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Shape")), + UIComponentUtils.wrapWithBorderLayoutPane(borderShape)}, + new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Report_Radius")), borderRadius} + }; + + JPanel center = createLineColorPane(); + JPanel south = TableLayout4VanChartHelper.createGapTableLayoutPane(components, rowSize, columnSize); + + JPanel panel = new JPanel(new BorderLayout()); + + panel.add(center, BorderLayout.CENTER); + panel.add(south, BorderLayout.SOUTH); + + return panel; + } + + private JPanel createLineColorPane() { + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double e = TableLayout4VanChartHelper.EDIT_AREA_WIDTH; + + double[] columnSize = {f, e}; + double[] rowSize = {p, p}; + + Component[][] center = new Component[][]{ + new Component[]{null, null}, + new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Color")), lineColorButton} + }; + + Component[][] south = new Component[][]{ + new Component[]{null, null}, + new Component[]{null, lineColorBox} + }; + + colorBoxPane = TableLayout4VanChartHelper.createGapTableLayoutPane(south, rowSize, columnSize); + + JPanel panel = new JPanel(new BorderLayout()); + + panel.add(TableLayout4VanChartHelper.createGapTableLayoutPane(center, rowSize, columnSize), BorderLayout.CENTER); + panel.add(colorBoxPane, BorderLayout.SOUTH); + + return panel; + } + + protected String title4PopupWindow() { + return null; + } + + public void populate(AttrBorderWithShape border) { + if (border == null) { + return; + } + + lineTypeBox.setSelectedLineStyle(border.getBorderStyle()); + lineColorButton.setSelectedIndex(border.isAutoColor() ? AUTO_COLOR : CUSTOM_COLOR); + lineColorBox.setSelectObject(border.getBorderColor()); + borderShape.setSelectedMarker((Marker.createMarker(border.getShape()))); + borderRadius.setValue(border.getRoundRadius()); + + checkDetailPane(); + checkColorPane(); + checkRadiusPane(); + } + + public void update(AttrBorderWithShape border) { + if (border == null) { + return; + } + + border.setBorderStyle(lineTypeBox.getSelectedLineStyle()); + border.setAutoColor(lineColorButton.getSelectedIndex() == AUTO_COLOR); + border.setBorderColor(lineColorBox.getSelectObject()); + border.setShape(MarkerType.parse(borderShape.getSelectedMarkder().getMarkerType())); + border.setRoundRadius((int) borderRadius.getValue()); + } +} diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/label/GaugeLabelContentPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/label/GaugeLabelContentPane.java index 13a03fd470..690a6ab244 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/label/GaugeLabelContentPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/label/GaugeLabelContentPane.java @@ -2,7 +2,7 @@ package com.fr.van.chart.designer.component.label; import com.fr.design.i18n.Toolkit; -import com.fr.van.chart.designer.component.VanChartLabelContentPaneWithoutRichText; +import com.fr.van.chart.designer.component.VanChartLabelContentPane; import com.fr.van.chart.designer.style.VanChartStylePane; import javax.swing.JPanel; @@ -10,7 +10,7 @@ import javax.swing.JPanel; /** * Created by mengao on 2017/8/13. */ -public class GaugeLabelContentPane extends VanChartLabelContentPaneWithoutRichText { +public class GaugeLabelContentPane extends VanChartLabelContentPane { public GaugeLabelContentPane(VanChartStylePane parent, JPanel showOnPane) { super(parent, showOnPane); @@ -24,4 +24,11 @@ public class GaugeLabelContentPane extends VanChartLabelContentPaneWithoutRichTe return contentPane; } + protected boolean supportRichEditor() { + return false; + } + + protected boolean hasTextStylePane() { + return false; + } } diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/tooltip/RefreshTooltipContentPaneWithOutSeries.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/tooltip/RefreshTooltipContentPaneWithOutSeries.java index 309bf244a0..ca7479cc05 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/tooltip/RefreshTooltipContentPaneWithOutSeries.java +++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/tooltip/RefreshTooltipContentPaneWithOutSeries.java @@ -17,6 +17,10 @@ public class RefreshTooltipContentPaneWithOutSeries extends TooltipContentPaneWi super(null, showOnPane); } + protected boolean supportRichEditor() { + return false; + } + @Override protected void initFormatPane(VanChartStylePane parent, JPanel showOnPane) { super.initFormatPane(parent, showOnPane); diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/tooltip/TooltipContentPaneWithOutSeries.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/tooltip/TooltipContentPaneWithOutSeries.java index 25e0808102..8724429f3c 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/tooltip/TooltipContentPaneWithOutSeries.java +++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/tooltip/TooltipContentPaneWithOutSeries.java @@ -1,6 +1,10 @@ package com.fr.van.chart.designer.component.tooltip; +import com.fr.plugin.chart.base.AttrTooltipContent; +import com.fr.plugin.chart.base.AttrTooltipRichText; +import com.fr.plugin.chart.base.format.AttrTooltipFormat; import com.fr.van.chart.designer.component.VanChartTooltipContentPane; +import com.fr.van.chart.designer.component.format.VanChartFormatPaneWithoutCheckBox; import com.fr.van.chart.designer.style.VanChartStylePane; import javax.swing.JPanel; @@ -36,4 +40,24 @@ public class TooltipContentPaneWithOutSeries extends VanChartTooltipContentPane new Component[]{getRichTextPercentFormatPane(), null} }; } + + protected void populateRichEditor(AttrTooltipContent attrTooltipContent) { + VanChartFormatPaneWithoutCheckBox[] formatPaneGroup = new VanChartFormatPaneWithoutCheckBox[]{ + getRichTextCategoryNameFormatPane(), + getRichTextValueFormatPane(), + getRichTextPercentFormatPane() + }; + + AttrTooltipFormat[] formatGroup = new AttrTooltipFormat[]{ + attrTooltipContent.getRichTextCategoryFormat(), + attrTooltipContent.getRichTextValueFormat(), + attrTooltipContent.getRichTextPercentFormat() + }; + + setRichTextAttr(new AttrTooltipRichText()); + populateRichTextFormat(formatPaneGroup, formatGroup); + populateRichText(attrTooltipContent.getRichTextAttr()); + + checkRichEditorState(attrTooltipContent); + } } \ No newline at end of file diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartGaugeCateOrPercentLabelDetailPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartGaugeCateOrPercentLabelDetailPane.java index 292dcbfa47..9a5c453828 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartGaugeCateOrPercentLabelDetailPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartGaugeCateOrPercentLabelDetailPane.java @@ -22,7 +22,7 @@ public class VanChartGaugeCateOrPercentLabelDetailPane extends VanChartGaugeLabe } protected double[] getLabelPaneRowSize(Plot plot, double p) { - if (hasLabelAlign(plot)) { + if (hasLabelAlignPane()) { return new double[]{p, p, p, p}; } diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartGaugeLabelDetailPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartGaugeLabelDetailPane.java index f06e7c1c7c..665fdc2565 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartGaugeLabelDetailPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartGaugeLabelDetailPane.java @@ -114,8 +114,9 @@ public class VanChartGaugeLabelDetailPane extends VanChartPlotLabelDetailPane { }; } - protected JPanel getLabelPositionPane(Component[][] comps, double[] row, double[] col) { - return TableLayoutHelper.createTableLayoutPane(comps, row, col); + // 仪表盘标签内无布局tab + protected JPanel getLabelLayoutPane(JPanel panel, String title) { + return panel; } protected JPanel createTableLayoutPaneWithTitle(String title, JPanel panel) { @@ -123,7 +124,7 @@ public class VanChartGaugeLabelDetailPane extends VanChartPlotLabelDetailPane { } protected Component[][] getLabelPaneComponents(Plot plot, double p, double[] columnSize) { - if (hasLabelAlign(plot)) { + if (hasLabelAlignPane()) { return new Component[][]{ new Component[]{getDataLabelContentPane(), null}, @@ -222,6 +223,10 @@ public class VanChartGaugeLabelDetailPane extends VanChartPlotLabelDetailPane { return getGaugeStyle() == GaugeStyle.THERMOMETER && !((VanChartGaugePlot) plot).getGaugeDetailStyle().isHorizontalLayout(); } + protected boolean hasLabelAlignPane() { + return getGaugeStyle() == GaugeStyle.THERMOMETER; + } + public void populate(AttrLabelDetail detail) { super.populate(detail); diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartGaugePlotLabelPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartGaugePlotLabelPane.java index bd1b9a1757..9bc21a0446 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartGaugePlotLabelPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartGaugePlotLabelPane.java @@ -1,13 +1,15 @@ package com.fr.van.chart.designer.style.label; import com.fr.chart.chartattr.Plot; - +import com.fr.design.gui.ibutton.UIButtonGroup; +import com.fr.design.i18n.Toolkit; +import com.fr.plugin.chart.attr.GaugeDetailStyle; import com.fr.plugin.chart.base.AttrLabel; +import com.fr.plugin.chart.base.AttrLabelDetail; import com.fr.plugin.chart.gauge.VanChartGaugePlot; import com.fr.plugin.chart.type.GaugeStyle; import com.fr.van.chart.designer.TableLayout4VanChartHelper; import com.fr.van.chart.designer.style.VanChartStylePane; -import com.fr.design.i18n.Toolkit; import javax.swing.JPanel; import java.awt.BorderLayout; @@ -18,6 +20,9 @@ import java.awt.BorderLayout; public class VanChartGaugePlotLabelPane extends VanChartPlotLabelPane { private static final long serialVersionUID = -322148616244458359L; + private UIButtonGroup orientation; + private JPanel layoutPane; + private VanChartPlotLabelDetailPane gaugeValueLabelPane; public VanChartGaugePlotLabelPane(Plot plot, VanChartStylePane parent) { @@ -41,23 +46,65 @@ public class VanChartGaugePlotLabelPane extends VanChartPlotLabelPane { } JPanel cateOrPercentPane = TableLayout4VanChartHelper.createExpandablePaneWithTitle(cateTitle, getLabelDetailPane()); JPanel valuePane = TableLayout4VanChartHelper.createExpandablePaneWithTitle(valueTitle, gaugeValueLabelPane); + + layoutPane = createGaugeLabelLayoutPane(); + getLabelPane().add(cateOrPercentPane, BorderLayout.NORTH); - getLabelPane().add(valuePane, BorderLayout.SOUTH); + getLabelPane().add(valuePane, BorderLayout.CENTER); + getLabelPane().add(layoutPane, BorderLayout.SOUTH); + + checkLayoutPaneVisible(); + } + + private void checkLayoutPaneVisible() { + layoutPane.setVisible(showLayoutPane()); + } + + private boolean showLayoutPane() { + VanChartGaugePlot plot = (VanChartGaugePlot) this.getPlot(); + GaugeDetailStyle gaugeDetailStyle = plot.getGaugeDetailStyle(); + + return plot.getGaugeStyle() == GaugeStyle.THERMOMETER && gaugeDetailStyle != null && gaugeDetailStyle.isHorizontalLayout(); + } + + // 试管仪表盘横行布局时,正常标签外增加布局tab,同时控制百分比和值标签的文本方向 + private JPanel createGaugeLabelLayoutPane() { + orientation = new UIButtonGroup<>(new String[]{ + Toolkit.i18nText("Fine-Design_Chart_Direction_Horizontal"), + Toolkit.i18nText("Fine-Design_Chart_Direction_Vertical"), + }); + + JPanel panel = TableLayout4VanChartHelper.createGapTableLayoutPane(Toolkit.i18nText("Fine-Design_Chart_Text_Orientation"), orientation); + + return TableLayout4VanChartHelper.createExpandablePaneWithTitle(Toolkit.i18nText("Fine-Design_Form_Attr_Layout"), panel); } public void populate(AttrLabel attr) { super.populate(attr); if(gaugeValueLabelPane != null && attr != null){ - gaugeValueLabelPane.populate(attr.getGaugeValueLabelDetail()); + AttrLabelDetail labelDetail = attr.getGaugeValueLabelDetail(); + gaugeValueLabelPane.populate(labelDetail); + orientation.setSelectedIndex(labelDetail.isHorizontal() ? 0 : 1); + + checkLayoutPaneVisible(); } } public AttrLabel update() { AttrLabel attrLabel = super.update(); + if(gaugeValueLabelPane != null && attrLabel != null){ - gaugeValueLabelPane.update(attrLabel.getGaugeValueLabelDetail()); + AttrLabelDetail defaultLabelDetail = attrLabel.getAttrLabelDetail(); + AttrLabelDetail valueLabelDetail = attrLabel.getGaugeValueLabelDetail(); + + gaugeValueLabelPane.update(valueLabelDetail); + + boolean horizontal = orientation.getSelectedIndex() == 0; + defaultLabelDetail.setHorizontal(horizontal); + valueLabelDetail.setHorizontal(horizontal); } + return attrLabel; } } diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartLabelPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartLabelPane.java index dfcd1a6443..96e2a7d24e 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartLabelPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartLabelPane.java @@ -64,11 +64,14 @@ public class VanChartLabelPane extends AbstractVanChartScrollPane { return; } ConditionAttr attrList = chart.getPlot().getConditionCollection().getDefaultAttr(); + + // labelPane中颜色选择器会触发listener.doChange(),导致style界面update两次, + // 为了避免递归updateBean时,remove与add不匹配,调整一下labelPane.update()的位置 + AttrLabel attrLabel = labelPane.update(); DataSeriesCondition attr = ((VanChartPlot)chart.getPlot()).getAttrLabelFromConditionCollection(); if(attr != null) { attrList.remove(attr); } - AttrLabel attrLabel = labelPane.update(); if (attrLabel != null) { attrList.addDataSeriesCondition(attrLabel); } diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartPlotLabelDetailPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartPlotLabelDetailPane.java index 576d0211c8..1470951976 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartPlotLabelDetailPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartPlotLabelDetailPane.java @@ -7,12 +7,11 @@ import com.fr.design.dialog.BasicPane; import com.fr.design.gui.ibutton.UIButtonGroup; import com.fr.design.gui.ibutton.UIToggleButton; import com.fr.design.gui.ilable.UILabel; +import com.fr.design.i18n.Toolkit; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.design.mainframe.chart.gui.style.ChartTextAttrPane; import com.fr.design.style.color.ColorSelectBox; -import com.fr.design.i18n.Toolkit; - import com.fr.general.ComparatorUtils; import com.fr.plugin.chart.attr.plot.VanChartLabelPositionPlot; import com.fr.plugin.chart.base.AttrLabelDetail; @@ -20,6 +19,8 @@ import com.fr.plugin.chart.base.AttrTooltipContent; import com.fr.stable.Constants; import com.fr.van.chart.designer.PlotFactory; import com.fr.van.chart.designer.TableLayout4VanChartHelper; +import com.fr.van.chart.designer.component.background.VanChartBackgroundWithOutImagePane; +import com.fr.van.chart.designer.component.border.VanChartBorderWithShapePane; import com.fr.van.chart.designer.style.VanChartStylePane; import javax.swing.JPanel; @@ -28,9 +29,6 @@ import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import java.awt.BorderLayout; import java.awt.Component; -import java.awt.Dimension; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; /** * Created by Mitisky on 15/12/7. @@ -38,18 +36,26 @@ import java.awt.event.ActionListener; public class VanChartPlotLabelDetailPane extends BasicPane { private static final long serialVersionUID = -22438250307946275L; + public static final int HORIZONTAL_INDEX = 0; + private BasicBeanPane dataLabelContentPane; private UIButtonGroup position; private UIButtonGroup autoAdjust; + private UIButtonGroup orientation; private UIToggleButton tractionLine; private ColorSelectBox backgroundColor; + private VanChartBorderWithShapePane borderPane; + private VanChartBackgroundWithOutImagePane backgroundPane; private JPanel tractionLinePane; private JPanel positionPane; private Integer[] oldPositionValues; + private JPanel borderPaneWithTitle; + private JPanel backgroundPaneWithTitle; + private VanChartStylePane parent; private Plot plot; @@ -82,6 +88,10 @@ public class VanChartPlotLabelDetailPane extends BasicPane { return plot; } + public UIButtonGroup getOrientation() { + return orientation; + } + //默认从factory中取 protected void initToolTipContentPane(Plot plot) { dataLabelContentPane = PlotFactory.createPlotLabelContentPane(plot, parent, VanChartPlotLabelDetailPane.this); @@ -100,15 +110,51 @@ public class VanChartPlotLabelDetailPane extends BasicPane { protected Component[][] getLabelPaneComponents(Plot plot, double p, double[] columnSize) { if(hasLabelPosition(plot)){ + + // 仅饼图、柱形图、条形图、折线图、面积图含有边框和背景 + if (hasBorderAndBackground(plot)) { + return new Component[][]{ + new Component[]{dataLabelContentPane,null}, + new Component[]{createLabelPositionPane(Toolkit.i18nText("Fine-Design_Chart_Layout_Position"), plot), null}, + new Component[]{createLabelBorderPane(), null}, + new Component[]{createLabelBackgroundPane(), null} + }; + } + return new Component[][]{ new Component[]{dataLabelContentPane,null}, new Component[]{createLabelPositionPane(Toolkit.i18nText("Fine-Design_Chart_Layout_Position"), plot), null} }; - } else { - return new Component[][]{ - new Component[]{dataLabelContentPane,null} - }; } + + return new Component[][]{ + new Component[]{dataLabelContentPane,null} + }; + } + + private JPanel createLabelBorderPane() { + borderPane = new VanChartBorderWithShapePane(); + borderPaneWithTitle = TableLayout4VanChartHelper.createExpandablePaneWithTitle(Toolkit.i18nText("Fine-Design_Chart_Border"), borderPane); + + return borderPaneWithTitle; + } + + private JPanel createLabelBackgroundPane() { + backgroundPane = new VanChartBackgroundWithOutImagePane(){ + + protected Component[][] getPaneComponents() { + return new Component[][]{ + new Component[]{null, null}, + new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Report_Fill")), typeComboBox}, + new Component[]{null, centerPane}, + new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Report_Alpha")), transparent}, + }; + } + }; + + backgroundPaneWithTitle = TableLayout4VanChartHelper.createExpandablePaneWithTitle(Toolkit.i18nText("Fine-Design_Chart_Background"), backgroundPane); + + return backgroundPaneWithTitle; } protected double[] getLabelStyleRowSize(double p) { @@ -123,6 +169,10 @@ public class VanChartPlotLabelDetailPane extends BasicPane { return plot instanceof VanChartLabelPositionPlot; } + private boolean hasBorderAndBackground(Plot plot) { + return PlotFactory.hasBorderAndBackgroundPlotLabel(plot); + } + protected JPanel createTableLayoutPaneWithTitle(String title, JPanel panel) { return TableLayout4VanChartHelper.createExpandablePaneWithTitle(title, panel); } @@ -157,8 +207,11 @@ public class VanChartPlotLabelDetailPane extends BasicPane { positionPane = new JPanel(); checkPositionPane(title); - panel.add(positionPane, BorderLayout.CENTER); + panel.add(positionPane, BorderLayout.NORTH); + if (hasLabelOrientationPane()) { + panel.add(createLabelOrientationPane(), BorderLayout.CENTER); + } if (plot.isSupportLeadLine()) { tractionLine = new UIToggleButton(Toolkit.i18nText("Fine-Design_Chart_Show_Guideline")); @@ -168,7 +221,31 @@ public class VanChartPlotLabelDetailPane extends BasicPane { } else if (PlotFactory.plotAutoAdjustLabelPosition(plot)) { panel.add(TableLayout4VanChartHelper.createGapTableLayoutPane(Toolkit.i18nText("Fine-Design_Chart_Auto_Adjust"), autoAdjust), BorderLayout.SOUTH); } - return panel; + + return getLabelLayoutPane(panel, Toolkit.i18nText("Fine-Design_Form_Attr_Layout")); + } + + protected JPanel getLabelLayoutPane(JPanel panel, String title) { + return createTableLayoutPaneWithTitle(title, panel); + } + + protected boolean hasLabelOrientationPane() { + return false; + } + + private JPanel createLabelOrientationPane() { + orientation = new UIButtonGroup<>(new String[]{ + Toolkit.i18nText("Fine-Design_Chart_Direction_Horizontal"), + Toolkit.i18nText("Fine-Design_Chart_Direction_Vertical"), + }); + + orientation.addChangeListener(new ChangeListener() { + public void stateChanged(ChangeEvent e) { + checkOrientation(); + } + }); + + return TableLayout4VanChartHelper.createGapTableLayoutPane(Toolkit.i18nText("Fine-Design_Chart_Text_Orientation"), orientation); } protected void checkPositionPane(String title) { @@ -205,13 +282,10 @@ public class VanChartPlotLabelDetailPane extends BasicPane { } } - protected JPanel getLabelPositionPane (Component[][] comps, double[] row, double[] col){ - JPanel panel = TableLayoutHelper.createTableLayoutPane(comps,row,col); - return createTableLayoutPaneWithTitle(Toolkit.i18nText("Fine-Design_Form_Attr_Layout"), panel); + return TableLayoutHelper.createTableLayoutPane(comps, row, col); } - protected void initPositionListener() { position.addChangeListener(new ChangeListener() { @Override @@ -253,6 +327,16 @@ public class VanChartPlotLabelDetailPane extends BasicPane { tractionLine.setSelected(position.getSelectedItem() == Constants.OUTSIDE); checkPositionEnabled(); } + + private void checkOrientation() { + if (orientation != null && borderPaneWithTitle != null && backgroundPaneWithTitle != null) { + boolean horizontal = orientation.getSelectedIndex() == HORIZONTAL_INDEX; + + borderPaneWithTitle.setVisible(horizontal); + backgroundPaneWithTitle.setVisible(horizontal); + } + } + private void checkPositionEnabled() { tractionLinePane.setVisible(position.getSelectedItem() == Constants.OUTSIDE); } @@ -267,18 +351,28 @@ public class VanChartPlotLabelDetailPane extends BasicPane { if(position != null){ position.setSelectedItem(detail.getPosition()); } + if(orientation != null){ + orientation.setSelectedIndex(detail.isHorizontal() ? 0 : 1); + } if(tractionLine != null){ tractionLine.setSelected(detail.isShowGuidLine()); } if(autoAdjust != null){ - autoAdjust.setSelectedIndex(detail.isAutoAdjust() == true ? 0 : 1); + autoAdjust.setSelectedIndex(detail.isAutoAdjust() ? 0 : 1); } if(backgroundColor != null){ backgroundColor.setSelectObject(detail.getBackgroundColor()); } + if(borderPane != null){ + borderPane.populate(detail.getBorder()); + } + if(backgroundPane != null){ + backgroundPane.populate(detail.getBackground()); + } checkAllUse(); + checkOrientation(); } @@ -294,12 +388,21 @@ public class VanChartPlotLabelDetailPane extends BasicPane { detail.setAutoAdjust(autoAdjust != null && autoAdjust.getSelectedItem()); + if(orientation != null){ + detail.setHorizontal(orientation.getSelectedIndex() == 0); + } if(tractionLine != null){ detail.setShowGuidLine(tractionLine.isSelected() && detail.getPosition() == Constants.OUTSIDE); } if(backgroundColor != null){ detail.setBackgroundColor(backgroundColor.getSelectObject()); } + if(borderPane != null){ + borderPane.update(detail.getBorder()); + } + if(backgroundPane != null){ + backgroundPane.update(detail.getBackground()); + } } } diff --git a/designer-chart/src/main/java/com/fr/van/chart/drillmap/designer/data/comp/MapDataTree.java b/designer-chart/src/main/java/com/fr/van/chart/drillmap/designer/data/comp/MapDataTree.java index 5a223cbf0c..034c621d57 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/drillmap/designer/data/comp/MapDataTree.java +++ b/designer-chart/src/main/java/com/fr/van/chart/drillmap/designer/data/comp/MapDataTree.java @@ -1,13 +1,13 @@ package com.fr.van.chart.drillmap.designer.data.comp; import com.fr.design.constants.UIConstants; -import com.fr.design.gui.ilable.UILabel; import com.fr.general.ComparatorUtils; import com.fr.plugin.chart.map.designer.type.GEOJSONTreeHelper; import com.fr.plugin.chart.map.server.ChartGEOJSONHelper; import com.fr.plugin.chart.map.server.CompatibleGEOJSONHelper; import com.fr.stable.StringUtils; +import javax.swing.BorderFactory; import javax.swing.JTree; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeCellRenderer; @@ -15,7 +15,6 @@ import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeNode; import javax.swing.tree.TreePath; import java.awt.Component; -import java.awt.Dimension; import java.util.Enumeration; /** @@ -23,7 +22,7 @@ import java.util.Enumeration; */ public class MapDataTree extends JTree { - public MapDataTree(TreeNode root){ + public MapDataTree(TreeNode root) { super(); this.setModel(model); model.setRoot(root); @@ -49,54 +48,54 @@ public class MapDataTree extends JTree { if (children.hasMoreElements()) { DefaultMutableTreeNode child = (DefaultMutableTreeNode) children.nextElement(); - if(GEOJSONTreeHelper.getInstance().isSelectableTreeNode(child)){ + if (GEOJSONTreeHelper.isSelectableTreeNode(child)) { selectTreeNode(child, m_model); - }else{ + } else { setFirstChildTreeNode(child, m_model); } } } - private void setFirstChildTreeNode(DefaultMutableTreeNode parent, DefaultTreeModel m_model){ + private void setFirstChildTreeNode(DefaultMutableTreeNode parent, DefaultTreeModel m_model) { Enumeration children = parent.children(); - if (children.hasMoreElements()){ + if (children.hasMoreElements()) { DefaultMutableTreeNode node = (DefaultMutableTreeNode) children.nextElement(); selectTreeNode(node, m_model); } } - public void changeRootNode(TreeNode node){ + public void changeRootNode(TreeNode node) { DefaultTreeModel m_model = (DefaultTreeModel) this.getModel(); m_model.setRoot(node); } public String getSelectNodeJSONPath() { - if(this.getLastSelectedPathComponent() == null){ + if (this.getLastSelectedPathComponent() == null) { return StringUtils.EMPTY; } - DefaultMutableTreeNode currentSel = (DefaultMutableTreeNode)this.getLastSelectedPathComponent(); + DefaultMutableTreeNode currentSel = (DefaultMutableTreeNode) this.getLastSelectedPathComponent(); return CompatibleGEOJSONHelper.getJsonUrlByPathIncludeParam(currentSel.getUserObject().toString()); } //根据路径精确查找 public DefaultMutableTreeNode setSelectNodePath(String jsonUrl) { - if(StringUtils.isEmpty(jsonUrl) || CompatibleGEOJSONHelper.isDeprecated(jsonUrl)){ + if (StringUtils.isEmpty(jsonUrl) || CompatibleGEOJSONHelper.isDeprecated(jsonUrl)) { return null; } DefaultTreeModel m_model = (DefaultTreeModel) this.getModel(); DefaultMutableTreeNode root = (DefaultMutableTreeNode) m_model.getRoot(); Enumeration els = root.postorderEnumeration(); - while(els.hasMoreElements()){ + while (els.hasMoreElements()) { DefaultMutableTreeNode el = (DefaultMutableTreeNode) els.nextElement(); - if(el == null || el.getUserObject() == null){ + if (el == null || el.getUserObject() == null) { return null; } String dirPath = el.getUserObject().toString(); - String url = CompatibleGEOJSONHelper.getJsonUrlByPathIncludeParam(dirPath); + String url = CompatibleGEOJSONHelper.getJsonUrlByPathIncludeParam(dirPath); //先equals再valid原因:valid 远程下实时去服务器看有没有json文件 if (ComparatorUtils.equals(jsonUrl, url) && GEOJSONTreeHelper.isValidDirPath(dirPath)) { selectTreeNode(el, m_model); @@ -115,14 +114,7 @@ public class MapDataTree extends JTree { DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode) value; String name = getPresentName(treeNode); this.setText(name); - - UILabel label = new UILabel(); - label.setText(getText()); - label.setIcon(getIcon()); - this.setSize(label.getPreferredSize()); - Dimension dim = label.getPreferredSize(); - dim.height += 2; - this.setPreferredSize(dim); + this.setBorder(BorderFactory.createEmptyBorder(1, 0, 1, 0)); this.setBackgroundNonSelectionColor(UIConstants.NORMAL_BACKGROUND); this.setForeground(UIConstants.FONT_COLOR); this.setBackgroundSelectionColor(UIConstants.FLESH_BLUE); @@ -131,25 +123,25 @@ public class MapDataTree extends JTree { }; protected String getPresentName(DefaultMutableTreeNode treeNode) { - if(treeNode == null || treeNode.getUserObject() == null){ + if (treeNode == null || treeNode.getUserObject() == null) { return StringUtils.EMPTY; } return ChartGEOJSONHelper.getPresentNameWithPath(treeNode.getUserObject().toString()); } //模糊搜索 深度优先. - public void search(String text){ - if(StringUtils.isEmpty(text)){ + public void search(String text) { + if (StringUtils.isEmpty(text)) { return; } DefaultTreeModel m_model = (DefaultTreeModel) this.getModel(); DefaultMutableTreeNode root = (DefaultMutableTreeNode) m_model.getRoot(); Enumeration els = root.postorderEnumeration(); - while(els.hasMoreElements()){ + while (els.hasMoreElements()) { DefaultMutableTreeNode el = (DefaultMutableTreeNode) els.nextElement(); - String path = el.getUserObject().toString(); + String path = el.getUserObject().toString(); String fileName = ChartGEOJSONHelper.getPresentNameWithPath(path); if (StringUtils.contains(fileName, text) && GEOJSONTreeHelper.isValidDirPath(path)) { selectTreeNode(el, m_model); @@ -158,7 +150,7 @@ public class MapDataTree extends JTree { } } - public void selectTreeNode(DefaultMutableTreeNode node, DefaultTreeModel m_model){ + public void selectTreeNode(DefaultMutableTreeNode node, DefaultTreeModel m_model) { TreeNode[] nodes = m_model.getPathToRoot(node); TreePath treePath = new TreePath(nodes); setSelectionPath(treePath); diff --git a/designer-chart/src/main/java/com/fr/van/chart/funnel/designer/style/VanChartFunnelLabelContentPane.java b/designer-chart/src/main/java/com/fr/van/chart/funnel/designer/style/VanChartFunnelLabelContentPane.java index 3df529fc3f..d7b9f9da47 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/funnel/designer/style/VanChartFunnelLabelContentPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/funnel/designer/style/VanChartFunnelLabelContentPane.java @@ -1,15 +1,18 @@ package com.fr.van.chart.funnel.designer.style; import com.fr.plugin.chart.base.AttrTooltipContent; +import com.fr.plugin.chart.base.AttrTooltipRichText; +import com.fr.plugin.chart.base.format.AttrTooltipFormat; import com.fr.plugin.chart.base.format.AttrTooltipNameFormat; +import com.fr.plugin.chart.type.TextAlign; import com.fr.van.chart.designer.component.VanChartLabelContentPane; import com.fr.van.chart.designer.component.format.CategoryNameFormatPaneWithCheckBox; import com.fr.van.chart.designer.component.format.CategoryNameFormatPaneWithoutCheckBox; -import com.fr.van.chart.designer.component.format.PercentFormatPaneWithoutCheckBox; import com.fr.van.chart.designer.component.format.SeriesNameFormatPaneWithCheckBox; import com.fr.van.chart.designer.component.format.SeriesNameFormatPaneWithoutCheckBox; import com.fr.van.chart.designer.component.format.ValueFormatPaneWithCheckBox; import com.fr.van.chart.designer.component.format.ValueFormatPaneWithoutCheckBox; +import com.fr.van.chart.designer.component.format.VanChartFormatPaneWithoutCheckBox; import com.fr.van.chart.designer.style.VanChartStylePane; import javax.swing.JPanel; @@ -59,10 +62,35 @@ public class VanChartFunnelLabelContentPane extends VanChartLabelContentPane { setRichTextPercentFormatPane(new FunnelPercentFormatPaneWithoutCheckBox(parent, showOnPane)); } + protected void populateRichEditor(AttrTooltipContent attrTooltipContent) { + VanChartFormatPaneWithoutCheckBox[] formatPaneGroup = new VanChartFormatPaneWithoutCheckBox[]{ + getRichTextSeriesNameFormatPane(), + getRichTextValueFormatPane(), + getRichTextPercentFormatPane() + }; + + AttrTooltipFormat[] formatGroup = new AttrTooltipFormat[]{ + attrTooltipContent.getRichTextSeriesFormat(), + attrTooltipContent.getRichTextValueFormat(), + attrTooltipContent.getRichTextPercentFormat() + }; + + setRichTextAttr(new AttrTooltipRichText()); + populateRichTextFormat(formatPaneGroup, formatGroup); + populateRichText(attrTooltipContent.getRichTextAttr()); + + checkRichEditorState(attrTooltipContent); + } + protected AttrTooltipContent createAttrTooltip() { - AttrTooltipContent attrTooltipContent = new AttrTooltipContent(); + AttrTooltipContent attrTooltipContent = new AttrTooltipContent(TextAlign.CENTER); + attrTooltipContent.getCategoryFormat().setEnable(false); + attrTooltipContent.getRichTextCategoryFormat().setEnable(false); + attrTooltipContent.setSeriesFormat(new AttrTooltipNameFormat()); + attrTooltipContent.setRichTextSeriesFormat(new AttrTooltipNameFormat()); + return attrTooltipContent; } diff --git a/designer-chart/src/main/java/com/fr/van/chart/funnel/designer/style/VanChartFunnelRefreshTooltipContentPane.java b/designer-chart/src/main/java/com/fr/van/chart/funnel/designer/style/VanChartFunnelRefreshTooltipContentPane.java index 3b45d188bd..b7f817eb3c 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/funnel/designer/style/VanChartFunnelRefreshTooltipContentPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/funnel/designer/style/VanChartFunnelRefreshTooltipContentPane.java @@ -16,6 +16,11 @@ public class VanChartFunnelRefreshTooltipContentPane extends VanChartFunnelToolt public VanChartFunnelRefreshTooltipContentPane(VanChartStylePane parent, JPanel showOnPane) { super(null, showOnPane); } + + protected boolean supportRichEditor() { + return false; + } + @Override protected void initFormatPane(VanChartStylePane parent, JPanel showOnPane) { super.initFormatPane(parent, showOnPane); diff --git a/designer-chart/src/main/java/com/fr/van/chart/funnel/designer/style/VanChartFunnelTooltipContentPane.java b/designer-chart/src/main/java/com/fr/van/chart/funnel/designer/style/VanChartFunnelTooltipContentPane.java index 4c4ff52201..247194ec40 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/funnel/designer/style/VanChartFunnelTooltipContentPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/funnel/designer/style/VanChartFunnelTooltipContentPane.java @@ -1,6 +1,8 @@ package com.fr.van.chart.funnel.designer.style; import com.fr.plugin.chart.base.AttrTooltipContent; +import com.fr.plugin.chart.base.AttrTooltipRichText; +import com.fr.plugin.chart.base.format.AttrTooltipFormat; import com.fr.plugin.chart.base.format.AttrTooltipNameFormat; import com.fr.van.chart.designer.component.VanChartTooltipContentPane; import com.fr.van.chart.designer.component.format.CategoryNameFormatPaneWithCheckBox; @@ -9,6 +11,7 @@ import com.fr.van.chart.designer.component.format.SeriesNameFormatPaneWithCheckB import com.fr.van.chart.designer.component.format.SeriesNameFormatPaneWithoutCheckBox; import com.fr.van.chart.designer.component.format.ValueFormatPaneWithCheckBox; import com.fr.van.chart.designer.component.format.ValueFormatPaneWithoutCheckBox; +import com.fr.van.chart.designer.component.format.VanChartFormatPaneWithoutCheckBox; import com.fr.van.chart.designer.style.VanChartStylePane; import javax.swing.JPanel; @@ -58,12 +61,39 @@ public class VanChartFunnelTooltipContentPane extends VanChartTooltipContentPane setRichTextPercentFormatPane(new FunnelPercentFormatPaneWithoutCheckBox(parent, showOnPane)); } + protected void populateRichEditor(AttrTooltipContent attrTooltipContent) { + VanChartFormatPaneWithoutCheckBox[] formatPaneGroup = new VanChartFormatPaneWithoutCheckBox[]{ + getRichTextSeriesNameFormatPane(), + getRichTextValueFormatPane(), + getRichTextPercentFormatPane() + }; + + AttrTooltipFormat[] formatGroup = new AttrTooltipFormat[]{ + attrTooltipContent.getRichTextSeriesFormat(), + attrTooltipContent.getRichTextValueFormat(), + attrTooltipContent.getRichTextPercentFormat() + }; + + setRichTextAttr(new AttrTooltipRichText()); + populateRichTextFormat(formatPaneGroup, formatGroup); + populateRichText(attrTooltipContent.getRichTextAttr()); + + checkRichEditorState(attrTooltipContent); + } + protected AttrTooltipContent createAttrTooltip() { AttrTooltipContent attrTooltipContent = new AttrTooltipContent(); - attrTooltipContent.getCategoryFormat().setEnable(false); + attrTooltipContent.setSeriesFormat(new AttrTooltipNameFormat()); + attrTooltipContent.setRichTextSeriesFormat(new AttrTooltipNameFormat()); + + attrTooltipContent.getCategoryFormat().setEnable(false); attrTooltipContent.getSeriesFormat().setEnable(true); attrTooltipContent.getValueFormat().setEnable(true); + + attrTooltipContent.getRichTextCategoryFormat().setEnable(false); + attrTooltipContent.getRichTextSeriesFormat().setEnable(true); + attrTooltipContent.getRichTextValueFormat().setEnable(true); return attrTooltipContent; } } diff --git a/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/other/VanChartGanttConditionPane.java b/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/other/VanChartGanttConditionPane.java index 24a5d45fe9..09d7a4b817 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/other/VanChartGanttConditionPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/other/VanChartGanttConditionPane.java @@ -13,11 +13,11 @@ import com.fr.plugin.chart.gantt.attr.AttrGanttTooltip; import com.fr.plugin.chart.gantt.attr.AttrGanttTooltipContent; import com.fr.plugin.chart.type.ConditionKeyType; import com.fr.van.chart.designer.PlotFactory; -import com.fr.van.chart.designer.other.condition.item.VanChartLabelConditionPane; import com.fr.van.chart.designer.other.condition.item.VanChartSeriesColorConditionPane; import com.fr.van.chart.designer.other.condition.item.VanChartTooltipConditionPane; import com.fr.van.chart.designer.style.tooltip.VanChartPlotTooltipNoCheckPane; import com.fr.van.chart.designer.style.tooltip.VanChartPlotTooltipPane; +import com.fr.van.chart.gantt.designer.style.label.VanChartGanttLabelConditionPane; import java.awt.Dimension; @@ -42,7 +42,7 @@ public class VanChartGanttConditionPane extends DataSeriesConditionPane { classPaneMap.put(AttrBackground.class, new VanChartSeriesColorConditionPane(this)); classPaneMap.put(AttrAlpha.class, new LabelAlphaPane(this)); if (!PlotFactory.largeDataModel(plot)) { - classPaneMap.put(AttrGanttLabel.class, new VanChartLabelConditionPane(this, plot)); + classPaneMap.put(AttrGanttLabel.class, new VanChartGanttLabelConditionPane(this, plot)); } classPaneMap.put(AttrGanttTooltip.class, new VanChartTooltipConditionPane(this, plot) { diff --git a/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/label/VanChartGanttLabelConditionPane.java b/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/label/VanChartGanttLabelConditionPane.java new file mode 100644 index 0000000000..86c3ba9429 --- /dev/null +++ b/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/label/VanChartGanttLabelConditionPane.java @@ -0,0 +1,17 @@ +package com.fr.van.chart.gantt.designer.style.label; + +import com.fr.chart.chartattr.Plot; +import com.fr.design.condition.ConditionAttributesPane; +import com.fr.van.chart.designer.other.condition.item.VanChartLabelConditionPane; +import com.fr.van.chart.designer.style.label.VanChartPlotLabelPane; + +public class VanChartGanttLabelConditionPane extends VanChartLabelConditionPane { + + public VanChartGanttLabelConditionPane(ConditionAttributesPane conditionAttributesPane, Plot plot) { + super(conditionAttributesPane, plot); + } + + protected VanChartPlotLabelPane createLabelPane() { + return new VanChartGanttPlotLabelNoCheckPane(getPlot(), null); + } +} diff --git a/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/label/VanChartGanttLabelContentPane.java b/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/label/VanChartGanttLabelContentPane.java index 54ab3fd1f1..cfb1e63a8a 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/label/VanChartGanttLabelContentPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/label/VanChartGanttLabelContentPane.java @@ -3,7 +3,7 @@ package com.fr.van.chart.gantt.designer.style.label; import com.fr.design.i18n.Toolkit; import com.fr.plugin.chart.base.AttrTooltipContent; import com.fr.plugin.chart.gantt.attr.AttrGanttTooltipContent; -import com.fr.van.chart.designer.component.VanChartLabelContentPaneWithoutRichText; +import com.fr.van.chart.designer.component.VanChartLabelContentPane; import com.fr.van.chart.designer.component.format.SeriesNameFormatPaneWithCheckBox; import com.fr.van.chart.designer.component.format.VanChartFormatPaneWithCheckBox; import com.fr.van.chart.designer.style.VanChartStylePane; @@ -16,7 +16,7 @@ import java.awt.Component; /** * Created by hufan on 2017/1/13. */ -public class VanChartGanttLabelContentPane extends VanChartLabelContentPaneWithoutRichText { +public class VanChartGanttLabelContentPane extends VanChartLabelContentPane { private VanChartFormatPaneWithCheckBox processesFormatPane; private VanChartDateFormatPaneWithCheckBox startTimeFormatPane; @@ -57,6 +57,10 @@ public class VanChartGanttLabelContentPane extends VanChartLabelContentPaneWitho }; } + protected boolean supportRichEditor() { + return false; + } + protected Component[][] getPaneComponents() { return new Component[][]{ new Component[]{processesFormatPane, null}, diff --git a/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/label/VanChartGanttPlotLabelNoCheckPane.java b/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/label/VanChartGanttPlotLabelNoCheckPane.java new file mode 100644 index 0000000000..4743a545d3 --- /dev/null +++ b/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/label/VanChartGanttPlotLabelNoCheckPane.java @@ -0,0 +1,25 @@ +package com.fr.van.chart.gantt.designer.style.label; + +import com.fr.chart.chartattr.Plot; +import com.fr.plugin.chart.base.AttrLabel; +import com.fr.van.chart.designer.style.VanChartStylePane; + +import java.awt.BorderLayout; + +public class VanChartGanttPlotLabelNoCheckPane extends VanChartGanttPlotLabelPane { + + public VanChartGanttPlotLabelNoCheckPane(Plot plot, VanChartStylePane parent) { + super(plot, parent); + } + + protected void addComponents() { + this.setLayout(new BorderLayout()); + this.add(getLabelPane(), BorderLayout.CENTER); + } + + public void populate(AttrLabel attr) { + super.populate(attr); + getLabelShowCheckBox().setSelected(true); + getLabelPane().setVisible(true); + } +} diff --git a/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/tooltip/VanChartGanttTooltipContentPane.java b/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/tooltip/VanChartGanttTooltipContentPane.java index 3d3d87d10d..d724deff58 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/tooltip/VanChartGanttTooltipContentPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/gantt/designer/style/tooltip/VanChartGanttTooltipContentPane.java @@ -2,6 +2,7 @@ package com.fr.van.chart.gantt.designer.style.tooltip; import com.fr.design.i18n.Toolkit; import com.fr.plugin.chart.base.AttrTooltipContent; +import com.fr.plugin.chart.base.AttrTooltipRichText; import com.fr.plugin.chart.base.format.AttrTooltipDurationFormat; import com.fr.plugin.chart.base.format.AttrTooltipEndTimeFormat; import com.fr.plugin.chart.base.format.AttrTooltipProcessesFormat; @@ -136,6 +137,8 @@ public class VanChartGanttTooltipContentPane extends VanChartTooltipContentPane protected void populateRichEditor(AttrTooltipContent attrTooltipContent) { if(attrTooltipContent instanceof AttrGanttTooltipContent){ + setRichTextAttr(new AttrTooltipRichText()); + AttrGanttTooltipContent ganttTooltipContent = (AttrGanttTooltipContent) attrTooltipContent; Map params = getRichTextAttr().getParams(); @@ -164,6 +167,8 @@ public class VanChartGanttTooltipContentPane extends VanChartTooltipContentPane richTextProgressFormatPane.updateFormatParams(params, progressFormat.getJs()); populateRichText(attrTooltipContent.getRichTextAttr()); + + checkRichEditorState(attrTooltipContent); } } diff --git a/designer-chart/src/main/java/com/fr/van/chart/map/designer/VanMapAreaPointAndLineGroupPane.java b/designer-chart/src/main/java/com/fr/van/chart/map/designer/VanMapAreaPointAndLineGroupPane.java index 569d0850cb..127ad29893 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/map/designer/VanMapAreaPointAndLineGroupPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/map/designer/VanMapAreaPointAndLineGroupPane.java @@ -1,10 +1,7 @@ package com.fr.van.chart.map.designer; - -import javax.swing.BorderFactory; import javax.swing.JPanel; -import javax.swing.border.Border; /** * Created by Mitisky on 16/5/20. @@ -19,9 +16,4 @@ public class VanMapAreaPointAndLineGroupPane extends VanChartGroupPane { public VanMapAreaPointAndLineGroupPane(final JPanel areaPane, final JPanel pointPane, final JPanel linePane){ super(new String[]{AREA_MAP_STRING, POINT_MAP_STRING, LINE_MAP_STRING}, new JPanel[]{areaPane, pointPane, linePane}); } - - @Override - protected Border getButtonGroupBorder () { - return BorderFactory.createEmptyBorder(0,8,0,18); - } -} +} \ No newline at end of file diff --git a/designer-chart/src/main/java/com/fr/van/chart/map/designer/style/label/VanChartMapLabelContentPane.java b/designer-chart/src/main/java/com/fr/van/chart/map/designer/style/label/VanChartMapLabelContentPane.java index de2b9171c9..95e2864584 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/map/designer/style/label/VanChartMapLabelContentPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/map/designer/style/label/VanChartMapLabelContentPane.java @@ -3,6 +3,7 @@ package com.fr.van.chart.map.designer.style.label; import com.fr.plugin.chart.base.AttrTooltipContent; import com.fr.plugin.chart.base.format.AttrTooltipAreaNameFormat; import com.fr.plugin.chart.base.format.AttrTooltipMapValueFormat; +import com.fr.plugin.chart.type.TextAlign; import com.fr.van.chart.designer.component.VanChartLabelContentPane; import com.fr.van.chart.designer.component.format.MapAreaNameFormatPaneWithCheckBox; import com.fr.van.chart.designer.component.format.MapAreaNameFormatPaneWithoutCheckBox; @@ -42,9 +43,11 @@ public class VanChartMapLabelContentPane extends VanChartLabelContentPane { @Override protected AttrTooltipContent createAttrTooltip() { - AttrTooltipContent content = new AttrTooltipContent(); + AttrTooltipContent content = new AttrTooltipContent(TextAlign.CENTER); content.setCategoryFormat(new AttrTooltipAreaNameFormat()); content.setValueFormat(new AttrTooltipMapValueFormat()); + content.setRichTextCategoryFormat(new AttrTooltipAreaNameFormat()); + content.setRichTextValueFormat(new AttrTooltipMapValueFormat()); return content; } } diff --git a/designer-chart/src/main/java/com/fr/van/chart/map/designer/style/tooltip/VanChartMapRefreshTooltipContentPane.java b/designer-chart/src/main/java/com/fr/van/chart/map/designer/style/tooltip/VanChartMapRefreshTooltipContentPane.java index 21b8995f30..7dca0fb3bc 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/map/designer/style/tooltip/VanChartMapRefreshTooltipContentPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/map/designer/style/tooltip/VanChartMapRefreshTooltipContentPane.java @@ -23,6 +23,10 @@ public class VanChartMapRefreshTooltipContentPane extends VanChartMapTooltipCont return new double[]{p,p,p,p,p,p}; } + protected boolean supportRichEditor() { + return false; + } + @Override protected void initFormatPane(VanChartStylePane parent, JPanel showOnPane) { super.initFormatPane(parent, showOnPane); diff --git a/designer-chart/src/main/java/com/fr/van/chart/map/designer/style/tooltip/VanChartMapTooltipContentPane.java b/designer-chart/src/main/java/com/fr/van/chart/map/designer/style/tooltip/VanChartMapTooltipContentPane.java index cc4ca79828..12948b14dd 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/map/designer/style/tooltip/VanChartMapTooltipContentPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/map/designer/style/tooltip/VanChartMapTooltipContentPane.java @@ -45,6 +45,8 @@ public class VanChartMapTooltipContentPane extends VanChartTooltipContentPane { AttrTooltipContent content = new AttrTooltipContent(); content.setCategoryFormat(new AttrTooltipAreaNameFormat()); content.setValueFormat(new AttrTooltipMapValueFormat()); + content.setRichTextCategoryFormat(new AttrTooltipAreaNameFormat()); + content.setRichTextValueFormat(new AttrTooltipMapValueFormat()); return content; } } diff --git a/designer-chart/src/main/java/com/fr/van/chart/map/line/VanChartLineMapTooltipContentPane.java b/designer-chart/src/main/java/com/fr/van/chart/map/line/VanChartLineMapTooltipContentPane.java index 1b3d31bee5..9dbc696a68 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/map/line/VanChartLineMapTooltipContentPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/map/line/VanChartLineMapTooltipContentPane.java @@ -43,6 +43,8 @@ public class VanChartLineMapTooltipContentPane extends VanChartTooltipContentPan AttrTooltipContent content = new AttrTooltipContent(); content.setCategoryFormat(new AttrTooltipStartAndEndNameFormat()); content.setValueFormat(new AttrTooltipValueFormat()); + content.setRichTextCategoryFormat(new AttrTooltipStartAndEndNameFormat()); + content.setRichTextValueFormat(new AttrTooltipValueFormat()); return content; } diff --git a/designer-chart/src/main/java/com/fr/van/chart/multilayer/style/VanChartMultiPieLabelContentPane.java b/designer-chart/src/main/java/com/fr/van/chart/multilayer/style/VanChartMultiPieLabelContentPane.java index 7fc9256bda..09093b0993 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/multilayer/style/VanChartMultiPieLabelContentPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/multilayer/style/VanChartMultiPieLabelContentPane.java @@ -2,6 +2,7 @@ package com.fr.van.chart.multilayer.style; import com.fr.plugin.chart.base.AttrTooltipContent; import com.fr.plugin.chart.multilayer.style.AttrTooltipMultiLevelNameFormat; +import com.fr.plugin.chart.type.TextAlign; import com.fr.van.chart.designer.component.VanChartLabelContentPane; import com.fr.van.chart.designer.component.format.PercentFormatPaneWithCheckBox; import com.fr.van.chart.designer.component.format.PercentFormatPaneWithoutCheckBox; @@ -36,8 +37,9 @@ public class VanChartMultiPieLabelContentPane extends VanChartLabelContentPane { } protected AttrTooltipContent createAttrTooltip() { - AttrTooltipContent content = new AttrTooltipContent(); + AttrTooltipContent content = new AttrTooltipContent(TextAlign.CENTER); content.setCategoryFormat(new AttrTooltipMultiLevelNameFormat()); + content.setRichTextCategoryFormat(new AttrTooltipMultiLevelNameFormat()); return content; } } diff --git a/designer-chart/src/main/java/com/fr/van/chart/multilayer/style/VanChartMultiPieTooltipContentPane.java b/designer-chart/src/main/java/com/fr/van/chart/multilayer/style/VanChartMultiPieTooltipContentPane.java index dab7a5043b..1fbe0870a5 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/multilayer/style/VanChartMultiPieTooltipContentPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/multilayer/style/VanChartMultiPieTooltipContentPane.java @@ -39,6 +39,7 @@ public class VanChartMultiPieTooltipContentPane extends VanChartTooltipContentPa protected AttrTooltipContent createAttrTooltip() { AttrTooltipContent content = new AttrTooltipContent(); content.setCategoryFormat(new AttrTooltipMultiLevelNameFormat()); + content.setRichTextCategoryFormat(new AttrTooltipMultiLevelNameFormat()); return content; } diff --git a/designer-chart/src/main/java/com/fr/van/chart/multilayer/style/VanChartMutiPieRefreshTooltipContentPane.java b/designer-chart/src/main/java/com/fr/van/chart/multilayer/style/VanChartMutiPieRefreshTooltipContentPane.java index a38383306d..f375fa78fa 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/multilayer/style/VanChartMutiPieRefreshTooltipContentPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/multilayer/style/VanChartMutiPieRefreshTooltipContentPane.java @@ -19,6 +19,10 @@ public class VanChartMutiPieRefreshTooltipContentPane extends VanChartMultiPieTo super(null, showOnPane); } + protected boolean supportRichEditor() { + return false; + } + @Override protected void initFormatPane(VanChartStylePane parent, JPanel showOnPane) { super.initFormatPane(parent, showOnPane); diff --git a/designer-chart/src/main/java/com/fr/van/chart/scatter/VanChartScatterLabelContentPane.java b/designer-chart/src/main/java/com/fr/van/chart/scatter/VanChartScatterLabelContentPane.java index 72ab39c9ae..160cfb25ee 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/scatter/VanChartScatterLabelContentPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/scatter/VanChartScatterLabelContentPane.java @@ -1,6 +1,7 @@ package com.fr.van.chart.scatter; import com.fr.van.chart.designer.component.VanChartHtmlLabelPane; +import com.fr.van.chart.designer.component.VanChartHtmlLabelPaneWithBackGroundLabel; import com.fr.van.chart.designer.style.VanChartStylePane; import javax.swing.JPanel; @@ -17,7 +18,7 @@ public class VanChartScatterLabelContentPane extends VanChartScatterTooltipCont @Override protected VanChartHtmlLabelPane createHtmlLabelPane() { - return new VanChartHtmlLabelPane(); + return new VanChartHtmlLabelPaneWithBackGroundLabel(); } } diff --git a/designer-chart/src/main/java/com/fr/van/chart/scatter/VanChartScatterRefreshTooltipContentPane.java b/designer-chart/src/main/java/com/fr/van/chart/scatter/VanChartScatterRefreshTooltipContentPane.java index 43d70e0b66..db7ce4152f 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/scatter/VanChartScatterRefreshTooltipContentPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/scatter/VanChartScatterRefreshTooltipContentPane.java @@ -41,6 +41,10 @@ public class VanChartScatterRefreshTooltipContentPane extends VanChartScatterToo setRichTextChangedPercentFormatPane(richTextChangedPercentFormatPane); } + protected boolean supportRichEditor() { + return false; + } + protected double[] getRowSize(double p) { return new double[]{p, p, p, p, p, p}; } diff --git a/designer-chart/src/main/java/com/fr/van/chart/scatter/VanChartScatterTooltipContentPane.java b/designer-chart/src/main/java/com/fr/van/chart/scatter/VanChartScatterTooltipContentPane.java index 9431b4ab76..0933ce8a5c 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/scatter/VanChartScatterTooltipContentPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/scatter/VanChartScatterTooltipContentPane.java @@ -1,6 +1,7 @@ package com.fr.van.chart.scatter; import com.fr.plugin.chart.base.AttrTooltipContent; +import com.fr.plugin.chart.base.AttrTooltipRichText; import com.fr.plugin.chart.base.format.AttrTooltipFormat; import com.fr.plugin.chart.scatter.attr.ScatterAttrTooltipContent; import com.fr.van.chart.designer.component.VanChartTooltipContentPane; @@ -107,23 +108,28 @@ public class VanChartScatterTooltipContentPane extends VanChartTooltipContentPa } protected void populateRichEditor(AttrTooltipContent attrTooltipContent) { - super.populateRichEditor(attrTooltipContent); - if (attrTooltipContent instanceof ScatterAttrTooltipContent) { ScatterAttrTooltipContent scatterAttrTooltipContent = (ScatterAttrTooltipContent) attrTooltipContent; VanChartFormatPaneWithoutCheckBox[] formatPaneGroup = new VanChartFormatPaneWithoutCheckBox[]{ - richTextXFormatPane, richTextYFormatPane, richTextSizeFormatPane + getRichTextSeriesNameFormatPane(), + richTextXFormatPane, + richTextYFormatPane, + richTextSizeFormatPane }; AttrTooltipFormat[] formatGroup = new AttrTooltipFormat[]{ + scatterAttrTooltipContent.getRichTextSeriesFormat(), scatterAttrTooltipContent.getRichTextXFormat(), scatterAttrTooltipContent.getRichTextYFormat(), scatterAttrTooltipContent.getRichTextSizeFormat() }; + setRichTextAttr(new AttrTooltipRichText()); populateRichTextFormat(formatPaneGroup, formatGroup); populateRichText(attrTooltipContent.getRichTextAttr()); + + checkRichEditorState(attrTooltipContent); } } diff --git a/designer-chart/src/main/java/com/fr/van/chart/structure/desinger/other/VanChartStructureConditionPane.java b/designer-chart/src/main/java/com/fr/van/chart/structure/desinger/other/VanChartStructureConditionPane.java index 7fac3034b7..9a8cf4e453 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/structure/desinger/other/VanChartStructureConditionPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/structure/desinger/other/VanChartStructureConditionPane.java @@ -11,10 +11,10 @@ import com.fr.plugin.chart.base.AttrTooltip; import com.fr.plugin.chart.structure.VanChartStructurePlot; import com.fr.plugin.chart.type.ConditionKeyType; import com.fr.van.chart.designer.other.condition.item.VanChartFloatColorConditionPane; -import com.fr.van.chart.designer.other.condition.item.VanChartLabelConditionPane; import com.fr.van.chart.designer.other.condition.item.VanChartSeriesColorConditionPane; import com.fr.van.chart.designer.other.condition.item.VanChartStructureNodeConditionPane; import com.fr.van.chart.designer.other.condition.item.VanChartTooltipConditionPane; +import com.fr.van.chart.structure.desinger.style.VanChartStructureLabelConditionPane; import java.awt.Dimension; @@ -47,7 +47,7 @@ public class VanChartStructureConditionPane extends DataSeriesConditionPane { protected void addBasicAction() { classPaneMap.put(AttrBackground.class, new VanChartSeriesColorConditionPane(this)); classPaneMap.put(AttrTooltip.class, new VanChartTooltipConditionPane(this, plot)); - classPaneMap.put(AttrLabel.class, new VanChartLabelConditionPane(this, plot)); + classPaneMap.put(AttrLabel.class, new VanChartStructureLabelConditionPane(this, plot)); classPaneMap.put(AttrFloatColor.class, new VanChartFloatColorConditionPane(this)); classPaneMap.put(AttrNode.class, new VanChartStructureNodeConditionPane(this)); } diff --git a/designer-chart/src/main/java/com/fr/van/chart/structure/desinger/style/VanChartStructureLabelConditionPane.java b/designer-chart/src/main/java/com/fr/van/chart/structure/desinger/style/VanChartStructureLabelConditionPane.java new file mode 100644 index 0000000000..c5c9cf3203 --- /dev/null +++ b/designer-chart/src/main/java/com/fr/van/chart/structure/desinger/style/VanChartStructureLabelConditionPane.java @@ -0,0 +1,17 @@ +package com.fr.van.chart.structure.desinger.style; + +import com.fr.chart.chartattr.Plot; +import com.fr.design.condition.ConditionAttributesPane; +import com.fr.van.chart.designer.other.condition.item.VanChartLabelConditionPane; +import com.fr.van.chart.designer.style.label.VanChartPlotLabelPane; + +public class VanChartStructureLabelConditionPane extends VanChartLabelConditionPane { + + public VanChartStructureLabelConditionPane(ConditionAttributesPane conditionAttributesPane, Plot plot) { + super(conditionAttributesPane, plot); + } + + protected VanChartPlotLabelPane createLabelPane() { + return new VanChartStructurePlotLabelNoCheckPane(getPlot(), null); + } +} diff --git a/designer-chart/src/main/java/com/fr/van/chart/structure/desinger/style/VanChartStructureLabelContentPane.java b/designer-chart/src/main/java/com/fr/van/chart/structure/desinger/style/VanChartStructureLabelContentPane.java index f380c8267a..4e20364653 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/structure/desinger/style/VanChartStructureLabelContentPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/structure/desinger/style/VanChartStructureLabelContentPane.java @@ -4,7 +4,8 @@ package com.fr.van.chart.structure.desinger.style; import com.fr.design.i18n.Toolkit; import com.fr.plugin.chart.base.AttrTooltipContent; import com.fr.plugin.chart.multilayer.style.AttrTooltipMultiLevelNameFormat; -import com.fr.van.chart.designer.component.VanChartLabelContentPaneWithoutRichText; +import com.fr.plugin.chart.type.TextAlign; +import com.fr.van.chart.designer.component.VanChartLabelContentPane; import com.fr.van.chart.designer.component.format.CategoryNameFormatPaneWithCheckBox; import com.fr.van.chart.designer.component.format.PercentFormatPaneWithCheckBox; import com.fr.van.chart.designer.component.format.SeriesNameFormatPaneWithCheckBox; @@ -17,7 +18,7 @@ import java.awt.Component; /** * Created by shine on 2017/2/15. */ -public class VanChartStructureLabelContentPane extends VanChartLabelContentPaneWithoutRichText { +public class VanChartStructureLabelContentPane extends VanChartLabelContentPane { public VanChartStructureLabelContentPane(VanChartStylePane parent, JPanel showOnPane) { super(parent, showOnPane); } @@ -54,9 +55,13 @@ public class VanChartStructureLabelContentPane extends VanChartLabelContentPaneW setPercentFormatPane(percentFormatPane); } + protected boolean supportRichEditor() { + return false; + } + @Override protected AttrTooltipContent createAttrTooltip() { - AttrTooltipContent attrTooltipContent = new AttrTooltipContent(); + AttrTooltipContent attrTooltipContent = new AttrTooltipContent(TextAlign.CENTER); attrTooltipContent.setCategoryFormat(new AttrTooltipMultiLevelNameFormat()); return attrTooltipContent; } diff --git a/designer-chart/src/main/java/com/fr/van/chart/structure/desinger/style/VanChartStructurePlotLabelNoCheckPane.java b/designer-chart/src/main/java/com/fr/van/chart/structure/desinger/style/VanChartStructurePlotLabelNoCheckPane.java new file mode 100644 index 0000000000..e7dfb18734 --- /dev/null +++ b/designer-chart/src/main/java/com/fr/van/chart/structure/desinger/style/VanChartStructurePlotLabelNoCheckPane.java @@ -0,0 +1,25 @@ +package com.fr.van.chart.structure.desinger.style; + +import com.fr.chart.chartattr.Plot; +import com.fr.plugin.chart.base.AttrLabel; +import com.fr.van.chart.designer.style.VanChartStylePane; + +import java.awt.BorderLayout; + +public class VanChartStructurePlotLabelNoCheckPane extends VanChartStructurePlotLabelPane { + + public VanChartStructurePlotLabelNoCheckPane(Plot plot, VanChartStylePane parent) { + super(plot, parent); + } + + protected void addComponents() { + this.setLayout(new BorderLayout()); + this.add(getLabelPane(), BorderLayout.CENTER); + } + + public void populate(AttrLabel attr) { + super.populate(attr); + getLabelShowCheckBox().setSelected(true); + getLabelPane().setVisible(true); + } +} diff --git a/designer-chart/src/main/java/com/fr/van/chart/structure/desinger/style/VanChartStructureRefreshTooltipContentPane.java b/designer-chart/src/main/java/com/fr/van/chart/structure/desinger/style/VanChartStructureRefreshTooltipContentPane.java index 52295346bf..ea09ff3c83 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/structure/desinger/style/VanChartStructureRefreshTooltipContentPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/structure/desinger/style/VanChartStructureRefreshTooltipContentPane.java @@ -38,6 +38,10 @@ public class VanChartStructureRefreshTooltipContentPane extends VanChartStructur setRichTextChangedPercentFormatPane(richTextChangedPercentFormatPane); } + protected boolean supportRichEditor() { + return false; + } + protected double[] getRowSize(double p) { return new double[]{p, p, p, p, p}; } diff --git a/designer-chart/src/main/java/com/fr/van/chart/structure/desinger/style/VanChartStructureTooltipContentPane.java b/designer-chart/src/main/java/com/fr/van/chart/structure/desinger/style/VanChartStructureTooltipContentPane.java index 2a72f6a09b..f5999391f0 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/structure/desinger/style/VanChartStructureTooltipContentPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/structure/desinger/style/VanChartStructureTooltipContentPane.java @@ -3,6 +3,8 @@ package com.fr.van.chart.structure.desinger.style; import com.fr.design.i18n.Toolkit; import com.fr.plugin.chart.base.AttrTooltipContent; +import com.fr.plugin.chart.base.AttrTooltipRichText; +import com.fr.plugin.chart.base.format.AttrTooltipFormat; import com.fr.plugin.chart.multilayer.style.AttrTooltipMultiLevelNameFormat; import com.fr.van.chart.designer.component.VanChartTooltipContentPane; import com.fr.van.chart.designer.component.format.CategoryNameFormatPaneWithCheckBox; @@ -13,6 +15,7 @@ import com.fr.van.chart.designer.component.format.SeriesNameFormatPaneWithCheckB import com.fr.van.chart.designer.component.format.SeriesNameFormatPaneWithoutCheckBox; import com.fr.van.chart.designer.component.format.ValueFormatPaneWithCheckBox; import com.fr.van.chart.designer.component.format.ValueFormatPaneWithoutCheckBox; +import com.fr.van.chart.designer.component.format.VanChartFormatPaneWithoutCheckBox; import com.fr.van.chart.designer.style.VanChartStylePane; import javax.swing.JPanel; @@ -87,10 +90,31 @@ public class VanChartStructureTooltipContentPane extends VanChartTooltipContentP setRichTextPercentFormatPane(richTextPercentFormatPane); } + protected void populateRichEditor(AttrTooltipContent attrTooltipContent) { + VanChartFormatPaneWithoutCheckBox[] formatPaneGroup = new VanChartFormatPaneWithoutCheckBox[]{ + getRichTextCategoryNameFormatPane(), + getRichTextSeriesNameFormatPane(), + getRichTextValueFormatPane() + }; + + AttrTooltipFormat[] formatGroup = new AttrTooltipFormat[]{ + attrTooltipContent.getRichTextCategoryFormat(), + attrTooltipContent.getRichTextSeriesFormat(), + attrTooltipContent.getRichTextValueFormat() + }; + + setRichTextAttr(new AttrTooltipRichText()); + populateRichTextFormat(formatPaneGroup, formatGroup); + populateRichText(attrTooltipContent.getRichTextAttr()); + + checkRichEditorState(attrTooltipContent); + } + @Override protected AttrTooltipContent createAttrTooltip() { AttrTooltipContent attrTooltipContent = new AttrTooltipContent(); attrTooltipContent.setCategoryFormat(new AttrTooltipMultiLevelNameFormat()); + attrTooltipContent.setRichTextCategoryFormat(new AttrTooltipMultiLevelNameFormat()); return attrTooltipContent; } } diff --git a/designer-chart/src/main/java/com/fr/van/chart/wordcloud/designer/style/VanChartWordCloudRefreshTooltipContentPane.java b/designer-chart/src/main/java/com/fr/van/chart/wordcloud/designer/style/VanChartWordCloudRefreshTooltipContentPane.java index 30b754dd00..cab4d85584 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/wordcloud/designer/style/VanChartWordCloudRefreshTooltipContentPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/wordcloud/designer/style/VanChartWordCloudRefreshTooltipContentPane.java @@ -51,6 +51,10 @@ public class VanChartWordCloudRefreshTooltipContentPane extends VanChartWordClou setRichTextChangedPercentFormatPane(richTextChangedPercentFormatPane); } + protected boolean supportRichEditor() { + return false; + } + protected double[] getRowSize(double p) { return new double[]{p, p, p, p, p, p}; } diff --git a/designer-chart/src/main/java/com/fr/van/chart/wordcloud/designer/style/VanChartWordCloudTooltipContentPane.java b/designer-chart/src/main/java/com/fr/van/chart/wordcloud/designer/style/VanChartWordCloudTooltipContentPane.java index 850645c758..c0e9ac6c37 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/wordcloud/designer/style/VanChartWordCloudTooltipContentPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/wordcloud/designer/style/VanChartWordCloudTooltipContentPane.java @@ -81,6 +81,7 @@ public class VanChartWordCloudTooltipContentPane extends VanChartTooltipContentP protected AttrTooltipContent createAttrTooltip() { AttrTooltipContent attrTooltipContent = new AttrTooltipContent(); attrTooltipContent.setSeriesFormat(new AttrTooltipNameFormat()); + attrTooltipContent.setRichTextSeriesFormat(new AttrTooltipNameFormat()); return attrTooltipContent; } } diff --git a/designer-chart/src/main/resources/com/fr/design/editor/rich_editor.css b/designer-chart/src/main/resources/com/fr/design/editor/rich_editor.css new file mode 100644 index 0000000000..27eb74d9b2 --- /dev/null +++ b/designer-chart/src/main/resources/com/fr/design/editor/rich_editor.css @@ -0,0 +1,22 @@ +.editor-insert-param-inactivated-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.editor-insert-param-inactivated-font .b-font:before { + content: "\e6ea"; + color: inherit; +} +.editor-insert-param-inactivated-font.disabled .b-font:before { + content: "\e6ea"; + color: inherit; +} +.editor-insert-param-active-font .b-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ''); +} +.editor-insert-param-active-font .b-font:before { + content: "\e6ea"; + color: #23beef; +} +.editor-insert-param-active-font.disabled .b-font:before { + content: "\e6ea"; + color: #23beef; +} \ No newline at end of file diff --git a/designer-chart/src/main/resources/com/fr/design/editor/rich_editor.html b/designer-chart/src/main/resources/com/fr/design/editor/rich_editor.html index 3189374dad..07fbb3ec72 100644 --- a/designer-chart/src/main/resources/com/fr/design/editor/rich_editor.html +++ b/designer-chart/src/main/resources/com/fr/design/editor/rich_editor.html @@ -4,6 +4,7 @@ + @@ -39,18 +40,46 @@ var content = Pool.data.getContent(); var isAuto = Pool.data.isAuto(); var params = Pool.data.getParams(); + var initParams = Pool.data.getInitParams(); + var align = Pool.data.getAlign(); - var dimensionIds = []; + var getDimensionIds = function (params) { + var result = []; + var paramGroup = params.split("-"); - var paramGroup = params.split("-"); + for (var i = 0, len = paramGroup.length; i < len; i++) { + var [key, value] = paramGroup[i].split(":"); + var param = {}; - for (var i = 0, len = paramGroup.length; i < len; i++) { - var [key, value] = paramGroup[i].split(":"); - var param = {}; + param[key] = value; - param[key] = value; + result.push(param); + } + + return result; + } + + var getInitContent = function (params, initParams, align) { + var editorService = BI.Services.getService("bi.service.design.chart.common.editor"); + var paramGroup = params.split("-"); + + content = ""; + + for (var i = 0, len = paramGroup.length; i < len; i++) { + var [key, value] = paramGroup[i].split(":"); + + if (initParams.indexOf(value) > -1) { + content += '

' + editorService.getEditorParamImage(key) + '

'; + } + } - dimensionIds.push(param); + return content; + } + + var dimensionIds = getDimensionIds(params); + + if (initParams) { + content = getInitContent(params, initParams, align); } var rich_editor = BI.createWidget({ @@ -85,8 +114,26 @@ } }); - Pool.dispatch = function(){ - rich_editor.setValue({content: Pool.data.getContent(), isAuto: Pool.data.isAuto()}); + Pool.dispatch = function () { + var content = Pool.data.getContent(); + var isAuto = Pool.data.isAuto(); + var params = Pool.data.getParams(); + var initParams = Pool.data.getInitParams(); + var align = Pool.data.getAlign(); + + if (initParams) { + content = getInitContent(params, initParams, align); + } + + rich_editor.editor.bindToolbar(rich_editor.bar); + + rich_editor.setValue({ + content: content, + isAuto: isAuto, + dimensionIds: getDimensionIds(params) + }); + + rich_editor.setFocus(); } Pool.update = function () { diff --git a/designer-chart/src/main/resources/com/fr/design/editor/script/editor.js b/designer-chart/src/main/resources/com/fr/design/editor/script/editor.js index 2162430698..bb5370e4fc 100644 --- a/designer-chart/src/main/resources/com/fr/design/editor/script/editor.js +++ b/designer-chart/src/main/resources/com/fr/design/editor/script/editor.js @@ -27,7 +27,6 @@ this.editor = BI.createWidget({ type: "bi.nic_editor", $value: "chart-common-editor", - height: 365, cls: "editor bi-border bi-focus-shadow " + (o.textAlign === "center" ? "editor-center-text" : ""), listeners: [{ eventName: BI.NicEditor.EVENT_FOCUS, @@ -107,6 +106,16 @@ _cleanHtml: function (value) { var editorService = BI.Services.getService("bi.service.design.chart.common.editor"); + var dimensionIds = this.model.dimensionIds; + var dataIdMap = {}; + + for (var i = 0, len = dimensionIds.length; i < len; i++) { + var dimensionId = dimensionIds[i]; + var key = BI.keys(dimensionId)[0]; + + dataIdMap[key] = dimensionId[key]; + } + var result = BI.replaceAll(value, "

", ""); // 去掉image的src属性,因为数据太大了 result = value.replaceAll("", function (imageStr) { @@ -117,6 +126,10 @@ return; } str += " " + key + "=\"" + value + "\""; + + if (key === "alt" && dataIdMap[value.trim()]) { + str += " " + "data-id" + "=\"" + dataIdMap[value.trim()] + "\""; + } }); return str + " />"; @@ -156,6 +169,9 @@ this.store.changeIsAuto(obj.isAuto); this.fontStyleGroup.setValue(obj.isAuto); } + if (BI.contains(keys, "dimensionIds")) { + this.store.changeDimensionIds(obj.dimensionIds); + } }, _formatContent: function (content) { @@ -177,7 +193,7 @@ content = this.editor.getValue(BI.NicEditor.FormatType.ESCAPE), isEqualToPlaceholder = editorService.isRichTextEqual(content, this.options.placeholder); - var HTML_ONLY_STYLE_TAG = "||||||||||||||||||||

"; + var HTML_ONLY_STYLE_TAG = "|||||||||||||||||"; if (!isEqualToPlaceholder) { content = content.replaceAll(HTML_ONLY_STYLE_TAG, ""); diff --git a/designer-chart/src/main/resources/com/fr/design/editor/script/editor.model.js b/designer-chart/src/main/resources/com/fr/design/editor/script/editor.model.js index dbe2784463..f430fea6c5 100644 --- a/designer-chart/src/main/resources/com/fr/design/editor/script/editor.model.js +++ b/designer-chart/src/main/resources/com/fr/design/editor/script/editor.model.js @@ -42,6 +42,10 @@ this.model.isAuto = isAuto; }, + changeDimensionIds: function (dimensionIds) { + this.model.dimensionIds = dimensionIds; + }, + setEditorBlurState: function (isBlur) { this.model.isEditorBlur = isBlur; } diff --git a/designer-chart/src/main/resources/com/fr/design/editor/script/insertcombo/combo.insert_param.js b/designer-chart/src/main/resources/com/fr/design/editor/script/insertcombo/combo.insert_param.js index 841860fc02..7cf11f9ce9 100644 --- a/designer-chart/src/main/resources/com/fr/design/editor/script/insertcombo/combo.insert_param.js +++ b/designer-chart/src/main/resources/com/fr/design/editor/script/insertcombo/combo.insert_param.js @@ -16,13 +16,16 @@ this.addParam(this.model.param, editorService.encode); this.combo.hideView(); // this._restorePosition(); + }, + items: function () { + this.adapter.populate(this.model.items); } }, render: function () { var self = this; - var adapter = BI.createWidget({ + this.adapter = BI.createWidget({ type: "bi.button_group", items: this.model.items, chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE, @@ -42,27 +45,15 @@ var searchPopup = { type: "bi.vertical", cls: "bi-border", - hgap: 15, - tgap: 5, + tgap: 10, bgap: 10, - items: [{ - type: "bi.searcher", - adapter: adapter, - width: 210, - height: 24, - listeners: [{ - eventName: BI.Searcher.EVENT_CHANGE, - action: function () { - self.store.changeParam(this.getValue()[0]); - } - }] - }, adapter] + items: [this.adapter] }; return { type: "bi.combo", direction: "bottom,left", - isNeedAdjustWidth: false, + isNeedAdjustWidth: true, el: { type: "bi.vertical_adapt", items: [{ @@ -76,7 +67,8 @@ }] }, popup: { - el: searchPopup + el: searchPopup, + minWidth: 150 }, ref: function (_ref) { self.combo = _ref; diff --git a/designer-chart/src/main/resources/com/fr/design/editor/script/insertcombo/combo.insert_param.model.js b/designer-chart/src/main/resources/com/fr/design/editor/script/insertcombo/combo.insert_param.model.js index d0a8f084ef..10db72cd0e 100644 --- a/designer-chart/src/main/resources/com/fr/design/editor/script/insertcombo/combo.insert_param.model.js +++ b/designer-chart/src/main/resources/com/fr/design/editor/script/insertcombo/combo.insert_param.model.js @@ -21,7 +21,7 @@ return { type: "bi.design.chart.common.editor.search", text: key, - value: dId[key] + value: key }; }); } diff --git a/designer-form/src/main/java/com/fr/design/designer/beans/models/SelectionModel.java b/designer-form/src/main/java/com/fr/design/designer/beans/models/SelectionModel.java index b3215ede1c..0f673e30ae 100644 --- a/designer-form/src/main/java/com/fr/design/designer/beans/models/SelectionModel.java +++ b/designer-form/src/main/java/com/fr/design/designer/beans/models/SelectionModel.java @@ -15,6 +15,7 @@ import com.fr.design.designer.creator.XWAbsoluteBodyLayout; import com.fr.design.designer.creator.XWAbsoluteLayout; import com.fr.design.designer.creator.XWFitLayout; import com.fr.design.designer.creator.XWParameterLayout; +import com.fr.design.designer.creator.cardlayout.XCardSwitchButton; import com.fr.design.designer.creator.cardlayout.XWCardLayout; import com.fr.design.designer.creator.cardlayout.XWCardMainBorderLayout; import com.fr.design.designer.creator.cardlayout.XWTabFitLayout; @@ -111,7 +112,7 @@ public class SelectionModel { if (comp != designer.getRootComponent() && comp != designer.getParaComponent()) { XCreator parentContainer = (XCreator) comp.getParent(); if (parentContainer != null) { - comp = parentContainer.isDedicateContainer() ? parentContainer : comp; + comp = parentContainer.isDedicateContainer() || comp instanceof XCardSwitchButton ? parentContainer : comp; } } if (selection.removeSelectedCreator(comp) || selection.addSelectedCreator(comp)) { diff --git a/designer-form/src/main/java/com/fr/design/designer/treeview/ComponentTreeCellRenderer.java b/designer-form/src/main/java/com/fr/design/designer/treeview/ComponentTreeCellRenderer.java index 78b606a7fc..48938dceee 100644 --- a/designer-form/src/main/java/com/fr/design/designer/treeview/ComponentTreeCellRenderer.java +++ b/designer-form/src/main/java/com/fr/design/designer/treeview/ComponentTreeCellRenderer.java @@ -3,60 +3,53 @@ package com.fr.design.designer.treeview; import com.fr.design.constants.UIConstants; import com.fr.design.designer.creator.XCreator; import com.fr.design.designer.creator.XCreatorUtils; -import com.fr.design.gui.ilable.UILabel; import com.fr.log.FineLoggerFactory; +import javax.swing.BorderFactory; import javax.swing.Icon; import javax.swing.JTree; import javax.swing.tree.DefaultTreeCellRenderer; import java.awt.Component; -import java.awt.Dimension; public class ComponentTreeCellRenderer extends DefaultTreeCellRenderer { - public ComponentTreeCellRenderer() { - } - - @Override - public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, - boolean leaf, int row, boolean hasFocus) { - super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus); - if (value instanceof XCreator) { - String name = ((XCreator) value).toData().getWidgetName(); - setText(name); - Icon icon = null; - try { - icon = XCreatorUtils.getCreatorIcon((XCreator) value); - } catch (Exception e) { - FineLoggerFactory.getLogger().info("{} has not icon or has been deleted", name); - } - if (icon != null) { - setIcon(icon); - } - } - UILabel label = new UILabel(); - label.setText(getText()); - label.setIcon(getIcon()); - Dimension dim = label.getPreferredSize(); - dim.height += 2; - this.setSize(dim); - this.setPreferredSize(dim); - this.setBackgroundNonSelectionColor(UIConstants.TREE_BACKGROUND); - return this; - } - - @Override - public Icon getClosedIcon() { - return getIcon(); - } - - @Override - public Icon getLeafIcon() { - return getIcon(); - } - - @Override - public Icon getOpenIcon() { - return getIcon(); - } -} \ No newline at end of file + public ComponentTreeCellRenderer() { + } + + @Override + public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, + boolean leaf, int row, boolean hasFocus) { + super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus); + if (value instanceof XCreator) { + String name = ((XCreator) value).toData().getWidgetName(); + setText(name); + Icon icon = null; + try { + icon = XCreatorUtils.getCreatorIcon((XCreator) value); + } catch (Exception e) { + FineLoggerFactory.getLogger().info("{} has not icon or has been deleted", name); + } + if (icon != null) { + setIcon(icon); + } + } + this.setBorder(BorderFactory.createEmptyBorder(1, 0, 1, 0)); + this.setBackgroundNonSelectionColor(UIConstants.TREE_BACKGROUND); + return this; + } + + @Override + public Icon getClosedIcon() { + return getIcon(); + } + + @Override + public Icon getLeafIcon() { + return getIcon(); + } + + @Override + public Icon getOpenIcon() { + return getIcon(); + } +} diff --git a/designer-form/src/main/java/com/fr/design/form/parameter/FormParaDesigner.java b/designer-form/src/main/java/com/fr/design/form/parameter/FormParaDesigner.java index 8956125eb3..8d13f3ab42 100644 --- a/designer-form/src/main/java/com/fr/design/form/parameter/FormParaDesigner.java +++ b/designer-form/src/main/java/com/fr/design/form/parameter/FormParaDesigner.java @@ -30,6 +30,7 @@ import com.fr.design.mainframe.EastRegionContainerPane; import com.fr.design.mainframe.FormArea; import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.FormDesignerModeForSpecial; +import com.fr.design.mainframe.FormDesignerUI; import com.fr.design.mainframe.FormParaPane; import com.fr.design.mainframe.FormWidgetDetailPane; import com.fr.design.mainframe.JTemplate; @@ -58,6 +59,7 @@ import java.awt.Graphics; import java.awt.Image; import java.awt.Insets; import java.awt.Rectangle; +import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -467,6 +469,21 @@ public class FormParaDesigner extends FormDesigner implements ParameterDesignerP return ((FormParameterUI) getTarget()).getDesignSize(); } + /** + * 设置其UI类为DesignerUI,负责渲染 + */ + @Override + public void updateUI() { + setUI(new FormDesignerUI(){ + @Override + protected Rectangle getFitPaintBounds(Component component, Component parent) { + return new Rectangle(0, 0, parent.getSize().width, parent.getSize().height); + } + + }); + } + + /** * 设置高度 * @@ -722,4 +739,11 @@ public class FormParaDesigner extends FormDesigner implements ParameterDesignerP return new JComponent[]{new CutAction(this).createToolBarComponent(), new CopyAction(this).createToolBarComponent(), new PasteAction(this).createToolBarComponent(), new FormDeleteAction(this).createToolBarComponent()}; } + + @Override + public boolean checkIfBeyondValidArea(MouseEvent e){ + return false; + } + + } diff --git a/designer-form/src/main/java/com/fr/design/form/util/FormDesignerUtils.java b/designer-form/src/main/java/com/fr/design/form/util/FormDesignerUtils.java index 352aa80e54..3e248f3bae 100644 --- a/designer-form/src/main/java/com/fr/design/form/util/FormDesignerUtils.java +++ b/designer-form/src/main/java/com/fr/design/form/util/FormDesignerUtils.java @@ -1,5 +1,8 @@ package com.fr.design.form.util; +import com.fr.design.designer.creator.XCreator; +import com.fr.design.designer.creator.XWAbsoluteBodyLayout; +import com.fr.design.designer.creator.XWAbsoluteLayout; import com.fr.design.designer.creator.XWFitLayout; import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.mainframe.FormDesigner; @@ -8,6 +11,7 @@ import com.fr.design.mainframe.template.info.ComponentCreateOperate; import com.fr.design.mainframe.template.info.ComponentDeleteOperate; import com.fr.form.ui.Widget; import com.fr.form.ui.container.WFitLayout; +import java.awt.Container; public class FormDesignerUtils { @@ -46,4 +50,21 @@ public class FormDesignerUtils { jTemplate.getProcessInfo().updateTemplateOperationInfo(new ComponentDeleteOperate(widget)); } + /** + * 判断当前UI组件是否在绝对画布块中 + * + * @param xCreator + * @return + */ + public static boolean isInAbsoluteLayout(XCreator xCreator) { + Container parent = xCreator.getParent(); + while (parent != null) { + if (parent instanceof XWAbsoluteLayout && !(parent instanceof XWAbsoluteBodyLayout)) { + return true; + } + parent = parent.getParent(); + } + return false; + } + } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/EditingMouseListener.java b/designer-form/src/main/java/com/fr/design/mainframe/EditingMouseListener.java index 2f2d8eb5b2..524dd8bf14 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/EditingMouseListener.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/EditingMouseListener.java @@ -166,7 +166,7 @@ public class EditingMouseListener extends MouseInputAdapter { // 获取焦点,以便获取热键 designer.requestFocus(); } - if (e.getButton() == MouseEvent.BUTTON1) { + if (e.getButton() == MouseEvent.BUTTON1 && !designer.checkIfBeyondValidArea(e)) { Direction dir = selectionModel.getDirectionAt(e); if (!DesignerMode.isAuthorityEditing()) { @@ -177,13 +177,10 @@ public class EditingMouseListener extends MouseInputAdapter { if (designer.isDrawLineMode()) { designer.updateDrawLineMode(e); } else { - int relativeX = Math.max(0, designer.getRelativeX(e.getX())); - int relativeY = Math.max(0, designer.getRelativeY(e.getY())); - if (selectionModel.hasSelectionComponent() && selectionModel.getSelection().getRelativeBounds().contains( - designer.getHorizontalScaleValue() + relativeX, - designer.getVerticalScaleValue() + relativeY)) { + designer.getHorizontalScaleValue() + e.getX(), + designer.getVerticalScaleValue() + e.getY())) { lastPressEvent = e; lastXCreator = selectionModel.getSelection().getSelectedCreator(); } else { @@ -378,7 +375,7 @@ public class EditingMouseListener extends MouseInputAdapter { if (component.getCoverPane().getComponentCount() > 1) { JComponent button1 = (JComponent) component.getCoverPane().getComponent(1); int minX1 = button1.getX() + getParentPositionX(component, 0) - designer.getHorizontalScaleValue(); - int minY1 = button1.getY() + getParentPositionY(component, 0) - designer.getVerticalScaleValue(); + int minY1 = button1.getY() + getParentPositionY(component, 0) - designer.getVerticalScaleValue() + component.getY(); if (e.getX() + GAP - component.getInsets().left > minX1 && e.getX() - GAP - component.getInsets().left < minX1 + button1.getWidth()) { if (e.getY() + GAP - component.getInsets().top > minY1 && e.getY() - GAP - component.getInsets().top < minY1 + button1.getHeight()) { designer.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); diff --git a/designer-form/src/main/java/com/fr/design/mainframe/FormDesigner.java b/designer-form/src/main/java/com/fr/design/mainframe/FormDesigner.java index c4fa2df8a1..62c89b9cae 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/FormDesigner.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/FormDesigner.java @@ -619,8 +619,9 @@ public class FormDesigner extends TargetComponent
implements TreeSelection if (paraComponent != null && paraComponent.acceptType(XWParameterLayout.class)) { return true; } else { - if (this.getSelectionModel().getSelection().getSelectedCreator().getParent() != null - && ((XLayoutContainer) this.getSelectionModel().getSelection().getSelectedCreator().getParent()).acceptType(XWAbsoluteLayout.class)) { + XCreator creator = this.getSelectionModel().getSelection().getSelectedCreator(); + if (creator != null && creator.getParent() != null + && ((XLayoutContainer) creator.getParent()).acceptType(XWAbsoluteLayout.class)) { return true; } } @@ -1337,6 +1338,9 @@ public class FormDesigner extends TargetComponent implements TreeSelection // 当前选中控件可以上移一层吗? public boolean isCurrentComponentMovableUp() { XCreator creator = getSelectionModel().getSelection().getSelectedCreator(); + if (null == creator) { + return false; + } XLayoutContainer container = (XLayoutContainer) creator.getParent(); if (container == null || !container.supportInnerOrderChangeActions()) { return false; @@ -1347,6 +1351,9 @@ public class FormDesigner extends TargetComponent implements TreeSelection // 当前选中控件可以下移一层吗? public boolean isCurrentComponentMovableDown() { XCreator creator = getSelectionModel().getSelection().getSelectedCreator(); + if (null == creator) { + return false; + } XLayoutContainer container = (XLayoutContainer) creator.getParent(); if (container == null || !container.supportInnerOrderChangeActions()) { return false; @@ -1726,4 +1733,13 @@ public class FormDesigner extends TargetComponent implements TreeSelection return (int) (this.getArea().getVerticalValue() / this.scale); } + public boolean checkIfBeyondValidArea(MouseEvent e){ + if (e.getX() < 0 || e.getY() < 0 || + e.getX() > this.getRootComponent().getWidth() || + e.getY() > (this.getRootComponent().getHeight() + this.getParaHeight())) { + return true; + } + return false; + } + } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/FormDesignerUI.java b/designer-form/src/main/java/com/fr/design/mainframe/FormDesignerUI.java index b75fbcf3ce..a21a2efad5 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/FormDesignerUI.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/FormDesignerUI.java @@ -22,10 +22,12 @@ import com.fr.form.main.parameter.FormParameterUI; import com.fr.page.WatermarkPainter; import com.fr.report.core.ReportUtils; import com.fr.stable.ArrayUtils; +import com.fr.stable.Constants; import javax.swing.*; import javax.swing.plaf.ComponentUI; import java.awt.AlphaComposite; +import java.awt.Color; import java.awt.Component; import java.awt.Graphics; import java.awt.Graphics2D; @@ -41,6 +43,8 @@ import java.util.ArrayList; */ public class FormDesignerUI extends ComponentUI { + private static final Color DESIGNER_BORDER_COLOR = new Color(198, 198, 198); + // 当前的设计器 private FormDesigner designer; private SelectionModel selectionModel; @@ -90,7 +94,7 @@ public class FormDesignerUI extends ComponentUI { designer.getDrawLineHelper().drawAuxiliaryLine(g); return; } - + paintBorder(g); paintSelection(g); if (DesignerMode.isAuthorityEditing()) { @@ -275,6 +279,19 @@ public class FormDesignerUI extends ComponentUI { clipg.dispose(); } + public void paintBorder(Graphics g) { + Rectangle bounds = designer.getTopContainer().getBounds(); + bounds.x = -designer.getHorizontalScaleValue(); + bounds.y = -designer.getVerticalScaleValue(); + Graphics clipg = g.create(); + clipg.clipRect(bounds.x, bounds.y, bounds.width, bounds.height); + Color oldColor = g.getColor(); + g.setColor(DESIGNER_BORDER_COLOR); + GraphHelper.draw(g, bounds, Constants.LINE_THIN); + clipg.dispose(); + g.setColor(oldColor); + } + /** * 画出当前选择、拖拽状态框 * @@ -407,12 +424,8 @@ public class FormDesignerUI extends ComponentUI { // 禁止双缓冲 ComponentUtils.disableBuffer(component, dbcomponents); Graphics clipg; - clipg = g.create( - -designer.getHorizontalScaleValue(), - -designer.getVerticalScaleValue() + designer.getParaHeight(), - component.getSize().width + designer.getHorizontalScaleValue(), - component.getSize().height + designer.getVerticalScaleValue()); - + Rectangle clipgBounds = getFitPaintBounds(component, parent); + clipg = g.create(clipgBounds.x, clipgBounds.y, clipgBounds.width, clipgBounds.height); designer.paintContent(clipg); paintWatermark((Graphics2D) clipg); clipg.dispose(); @@ -422,6 +435,13 @@ public class FormDesignerUI extends ComponentUI { designer.resetEditorComponentBounds(); } + protected Rectangle getFitPaintBounds(Component component, Component parent) { + return new Rectangle(-designer.getHorizontalScaleValue(), + -designer.getVerticalScaleValue() + designer.getParaHeight(), + component.getSize().width + designer.getHorizontalScaleValue(), + component.getSize().height + designer.getVerticalScaleValue()); + } + /** * 画参数面板 */ diff --git a/designer-form/src/main/java/com/fr/design/mainframe/TopXCreators.java b/designer-form/src/main/java/com/fr/design/mainframe/TopXCreators.java index 89b261bb9a..2bc126f5b9 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/TopXCreators.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/TopXCreators.java @@ -30,7 +30,7 @@ public class TopXCreators extends JComponent { setBackground(null); setOpaque(false); designer.addDesignerEditListener(e -> { - if (e.getCreatorEventID() == DesignerEvent.CREATOR_SELECTED) { + if (e.getCreatorEventID() == DesignerEvent.CREATOR_SELECTED || e.getCreatorEventID() == DesignerEvent.CREATOR_CUTED) { refresh(); } }); diff --git a/designer-form/src/main/java/com/fr/design/widget/ui/designer/LabelDefinePane.java b/designer-form/src/main/java/com/fr/design/widget/ui/designer/LabelDefinePane.java index d4ebf74ee7..1c30b1a557 100644 --- a/designer-form/src/main/java/com/fr/design/widget/ui/designer/LabelDefinePane.java +++ b/designer-form/src/main/java/com/fr/design/widget/ui/designer/LabelDefinePane.java @@ -1,6 +1,7 @@ package com.fr.design.widget.ui.designer; import com.fr.base.BaseUtils; +import com.fr.design.constants.LayoutConstants; import com.fr.design.designer.IntervalConstants; import com.fr.design.designer.creator.XCreator; import com.fr.design.foldablepane.UIExpandablePane; @@ -58,7 +59,8 @@ public class LabelDefinePane extends AbstractDataModify