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 6f1c94eee..c6488d330 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 0ccb5d3e7..5afe58ad3 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 15a7c87c0..93dc57a8f 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 bce63d642..f1758f068 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 8c09eb303..8972821b4 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 3feabeac1..80471b9e6 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 8b5c62657..8964ff8de 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 683b38e01..4bf6bf190 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 8d8e3a48c..d3881bcd1 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 d1beacb1d..6065d0485 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 2df6cda02..af2b71a7c 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 cefc0e112..17fbf5788 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 8f2021c69..dd3ddab3b 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 69ad0f08d..e0170cef8 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 3eb644c33..b82a58467 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 0d12772d3..76255d96b 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 46cdae35b..6103e6800 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 b1958a8c1..731402572 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 29214984c..d1847545c 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 a418a2b37..c60ae2760 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 d5a9044d5..435d5a465 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 9ce63abe3..f806ded06 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 47c4d3501..3582c4ad9 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 904a6c18b..0373dad03 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 fe0276b38..490b4e7e9 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 a9d9281e9..4f59032dc 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 c7c587563..0703216eb 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 000000000..dc7fc1f63
--- /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 ee54364ba..cdd5dbb64 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 c81c6749f..078d4d128 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 2ec3f6c7e..80ba40afe 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 9ade76250..8cc073437 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 6eb648055..46bede232 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 000000000..0b174da94
--- /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 4f610c060..71aabb87d 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 000000000..a3fd463a3
--- /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 fa316db35..ecb89e509 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 818de9d57..c7dc3811c 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 541e39601..7e74e7651 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 d3efcae4a..adb0e4847 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 b16e6b279..7c8f675b1 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 255efe78c..d1679561d 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 59aed2a6f..1cbf543a4 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 46d1b9165..b088864c0 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 48c151488..000000000
--- 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 000000000..cf992fe08
--- /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 8ffe8d4a4..69f3f6160 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 3992be6a9..3c91ebf14 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 000000000..7a3c0a2a8
--- /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 4febad3a9..2aaa9556b 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 2bf64642f..75a0d8312 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 12c72c5cd..ef66fc039 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 590f9d112..ccf01dd5e 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 54cfddc8d..5257e74f4 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 000000000..dd5e5bc5c
--- /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 000000000..6c2211e76
--- /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 000000000..878867535
--- /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 4659faaa8..25eb587d8 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 cfd3ea8d5..5af1fa416 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 3ba858364..7b51fc564 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 c4184f3b1..3f9978f75 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 000000000..ec870a98f
--- /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 000000000..a2be5f290
--- /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 000000000..b08734782
--- /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 000000000..e80f6310d
--- /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 5461b220f..04b94ef5c 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 aeaefa5b3..9ea26a5c5 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 extends VanChartPlotLabelPane>> labelMap = new HashMap, Class extends VanChartPlotLabelPane>>();
+ private static Map, Class extends VanChartPlotLabelPane>> 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 e6bee7c55..40f85dcb4 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 000000000..f9c9f7d49
--- /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 8586f2106..957fcdaf7 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 4c1935eef..000000000
--- 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 09e208cc1..7ecb797d6 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 000000000..a13208df5
--- /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 d1f294e41..408b730b2 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 608ee2e16..d4ef4ac77 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 13a03fd47..690a6ab24 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 309bf244a..ca7479cc0 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 25e080810..8724429f3 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 292dcbfa4..9a5c45382 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 f06e7c1c7..665fdc256 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 bd1b9a175..9bc21a044 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 dfcd1a644..96e2a7d24 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 576d0211c..147095197 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 5a223cbf0..034c621d5 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 3df529fc3..d7b9f9da4 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 3b45d188b..b7f817eb3 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 4c4ff5220..247194ec4 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 24a5d45fe..09d7a4b81 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 000000000..86c3ba942
--- /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 54ab3fd1f..cfb1e63a8 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 000000000..4743a545d
--- /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 3d3d87d10..d724deff5 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 569d0850c..127ad2989 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 de2b9171c..95e286458 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 21b8995f3..7dca0fb3b 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 cc4ca7982..12948b14d 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 1b3d31bee..9dbc696a6 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 7fc9256bd..09093b099 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 dab7a5043..1fbe0870a 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 a38383306..f375fa78f 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 72ab39c9a..160cfb25e 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 43d70e0b6..db7ce4152 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 9431b4ab7..0933ce8a5 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 7fac3034b..9a8cf4e45 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 000000000..c5c9cf320
--- /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 f380c8267..4e2036465 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 000000000..e7dfb1873
--- /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 52295346b..ea09ff3c8 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 2a72f6a09..f5999391f 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 30b754dd0..cab4d8558 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 850645c75..c0e9ac6c3 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 000000000..27eb74d9b
--- /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 3189374da..07fbb3ec7 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 216243069..bb5370e4f 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 dbe278446..f430fea6c 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 841860fc0..7cf11f9ce 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 d0a8f084e..10db72cd0 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 b3215ede1..0f673e30a 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 78b606a7f..48938dcee 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 8956125eb..8d13f3ab4 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 352aa80e5..3e248f3ba 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 2f2d8eb5b..524dd8bf1 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 c4fa2df8a..62c89b9ca 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